<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
<title>RSS Categoria: OpenSource - davidonzo's blog :)</title>
<link>http://www.davidonzo.com/</link>
<description>RSS Categoria: OpenSource - davidonzo's blog :)</description>
<language>IT-it</language>
<generator>davidonzo coding</generator>
<pubDate>Fri, 12 Mar 2010 06:26:51 +0100</pubDate>
<ttl>60</ttl>
<item>
<title>[PHP] Un calendario perpetuo</title>
<link>http://www.davidonzo.com/post/1159/php-un-calendario-perpetuo/</link>
<description><![CDATA[<p></p><p>Giusto se a qualcuno dovesse servire, una funzione per generare un calendario mensile perpetuo. Cambiando anno e mese di riferimento, vi si restituisce il mese completo come un array multilivello facilmente manipolabile.</p>
<pre>&lt;?php<br />&nbsp; function calendario($month, $year){<br />&nbsp;&nbsp;&nbsp; $month = intval($month);<br />&nbsp;&nbsp;&nbsp; $year = intval($year);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; $list = array();<br />&nbsp;&nbsp;&nbsp; for($a=1; $a&lt;=$days; $a++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $list[$a]['week'] = jddayofweek(cal_to_jd(CAL_GREGORIAN, date($month),date($a), date($year)), 1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $list[$a]['day'] = $a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $list[$a]['month'] = $month;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $list[$a]['year'] = $year;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; return $list;<br />&nbsp; }<br />&nbsp; <br />&nbsp; //Esempio di utilizzo<br />&nbsp; $cal = calendario(2,2010);<br />&nbsp; print_r($cal);<br />&nbsp; foreach($cal as $c =&gt; $value){<br />&nbsp;&nbsp;&nbsp; echo $cal[$c]['week'] . ' - ' . date('d/m/Y', mktime(0, 0, 0, $cal[$c]['month'], $cal[$c]['day'], $cal[$c]['year'])) . '&lt;br/&gt;';<br />&nbsp; }<br />?&gt;</pre>
<p>Spero sia utile a qualcuno</p><p>Tags: <a href="http://technorati.com/tag/php/" rel="tag">php</a>, <a href="http://technorati.com/tag/tutorial/" rel="tag">tutorial</a></p>]]></description>
<pubDate>Fri, 12 Feb 2010 23:48:44 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1159/php-un-calendario-perpetuo/</guid>
</item>
<item>
<title>[JavaScript] jQuery e scroller animato senza bisogno di plugin</title>
<link>http://www.davidonzo.com/post/1088/javascript-jquery-e-scroller-animato-senza-bisogno-di-plugin/</link>
<description><![CDATA[<p></p><p>Giusto ieri mi serviva un buon scroller in JavaScript. Unica precondizione, che fosse sviluppato con <a href="http://jquery.com/" target="_blank">jQuery</a>. Di solito mi scrivo io le librerie che mi servono. Il proprio codice non dipende da nient'altro ed una volta raggiunto il risultato si &egrave; completamente padroni della cosa. In questo caso per&ograve; la necessit&agrave; era imposta dall'alto, quindi mi son messo a cercare nella directory plugin qualcosa che potesse fare al caso mio.</p>
<p>Ho trovato pi&ugrave; di un plugin utilizzabile, ma tutti avevano almeno un difetto. Uno con troppe opzioni risultava eccessivamente pesante e ripulirlo mi avrebbe preso troppo tempo. Un altro invece era troppo poco performante gestendo solo casistiche standard (nessuna delle quali risultava andar bene a me).</p>
<p>Allora mi son letto direttamente la documentazione di jQuery, convinto che qualche metodo proprio dovesse averlo per far spostare live dei livelli di html. Ed ovviamente c'&egrave;: <a href="http://docs.jquery.com/Effects/animate" target="_blank">animate</a> permette di gestire eventi in divenire. Nel caso dello scroller, visto che il bello &egrave; la visualizzazione dello spostamento, animate permette di far eseguire una semplice direttiva come un evento che parte dallo status attuale fino ad arrivare al risultato stabilito.</p>
<p>Per fare un esempio pratico. Se voglio scrollare spostando un layer verso destra di 100px, potrei semplicemente imporre al click di un tasto una funzione che imposti un margin-left a -100px rispetto all'attuale situazione. Facile, ma non *<em>vivo</em>*. Perch&egrave; in questo caso vedrei il risultato subito, mentre a me interessa che l'utente abbia la sensazione che le cose si spostano, quindi voglio che nell'andare indietro di 100px lo faccia gradualmente in un determinato arco di tempo.</p>
<p>E' esattamente quello che fa animate in jQuery. Scrivendo la funzione:</p>
<p><span class="Code">&nbsp; function scrollRight(){<br />
&nbsp;&nbsp;&nbsp;&nbsp; $('#IDTarget').animate({'marginLeft': -100px',},500);<br />
&nbsp; } </span></p>
<p>Far&ograve; scrollare il contenuto del target verso sinistra (dando l'idea di muovermi a destra) di 100px in mezzo secondo.</p>
<p>Usando le propriet&agrave; di jQuery, un po' di fantasia e appena 88 righe di codice, <strong><a href="http://www.davidonzo.com/jquery/scroller/" target="_blank">si pu&ograve; ottenere una galleria di immagini come questa</a></strong>. Senza bisogno di aggiungere niente all'ottimo, ma ben pesante jQuery.</p>
<p>&nbsp;</p><p>Tags: <a href="http://technorati.com/tag/jQuery/" rel="tag">jQuery</a>, <a href="http://technorati.com/tag/JavaScript/" rel="tag">JavaScript</a>, <a href="http://technorati.com/tag/Tutorial/" rel="tag">Tutorial</a></p>]]></description>
<pubDate>Thu, 03 Sep 2009 18:53:51 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1088/javascript-jquery-e-scroller-animato-senza-bisogno-di-plugin/</guid>
</item>
<item>
<title>Google Maps - Marker con nuvola al loading della mappa</title>
<link>http://www.davidonzo.com/post/1085/google-maps-marker-con-nuvola-al-loading-della-mappa/</link>
<description><![CDATA[<p></p><p><a target="_blank" href="http://www.davidonzo.com/post/1036/google-maps-oggetto-gmarker-e-gestione-openinfowindowhtml/#comm29296">Paka mi chiede in un commento</a>:</p>
<p class="classquote">Sto impazzendo per cercare di capire il codice da usare x far uscire la &quot;nuvoletta&quot; sul marker subito, senza bisogno del click... mi date una mano?</p>
<p>La cosa &egrave; abbastanza semplice, e la riprendiamo proprio dall'articolo in cui l'utente ha commentato. Diamo un occhio a questa porzione di codice.</p>
<p><span class="Code">GEvent.addListener(marker, &quot;click&quot;, function() {<br />
&nbsp;&nbsp;&nbsp; marker.openInfoWindowHtml('Coordinate&lt;br /&gt;'+point);<br />
});</span></p>
<p>E' abbastanza chiaro che stabiliamo un evento ben preciso per far comparire il marker, tramite l'oggetto GEvent. L'evento in questione &egrave; il click sul marker. Se vogliamo che questo compaia senza alcun evento predefinito, basta toglierlo dalla condizione di cui sopra. In questo caso l'evento che andr&agrave; a far apparire la <em>nuvoletta</em> sar&agrave; quello di default, ovvero il load della mappa.</p>
<p>Di seguito il codice completo della funzione.</p>
<p>&nbsp;&nbsp;&nbsp; var map = null;<br />
&nbsp;&nbsp;&nbsp; var geocoder = null;<br />
&nbsp;&nbsp;&nbsp; var address = '97015 Italy';<br />
<br />
<span class="Code">&nbsp;&nbsp;&nbsp; function initialize() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = new GMap2(document.getElementById(&quot;gmaps&quot;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var geocoder = new GClientGeocoder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(document.getElementById('addr').value != ''){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address = document.getElementById('addr').value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geocoder.getLatLng(address, function(point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Spiacente, indirizzo non trovato');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var marker = new GMarker(point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.addOverlay(marker); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>//Qui faccio apparire la nuvola!</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; marker.openInfoWindowHtml('Coordinate&lt;br /&gt;'+point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setCenter(point, 8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setUIToDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p>E come mio solito, <strong><a href="http://www.davidonzo.com/gmaps/gmaps-marker-onload.html" target="_blank">una pagina di esempio da cui estrapolare facilmente il codice sorgente</a></strong>.</p><p>Tags: <a href="http://technorati.com/tag/Gmaps/" rel="tag">Gmaps</a>, <a href="http://technorati.com/tag/Google+Maps/" rel="tag">Google Maps</a>, <a href="http://technorati.com/tag/Tutorial/" rel="tag">Tutorial</a></p>]]></description>
<pubDate>Wed, 26 Aug 2009 10:10:40 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1085/google-maps-marker-con-nuvola-al-loading-della-mappa/</guid>
</item>
<item>
<title>[CSS] Firefox 3.5 e proprietà word-wrap</title>
<link>http://www.davidonzo.com/post/1062/css-firefox-35-e-proprieta-wordwrap/</link>
<description><![CDATA[<p></p><p><img width="128" height="128" align="left" src="http://www.davidonzo.com/public/image/browser/firefox.png" alt="firefox" />Sembra incredibile, ma quello che molti considerano il browser migliore del mondo difettava della propriet&agrave; <a href="http://www.css3.com/css-word-wrap/" target="_blank">word-wrap</a> nella definizione dei CSS. Tale direttiva permette di gestire una singola parola che risulti strabordante rispetto alla larghezza dell'elemento in cui questa &egrave; contenuta.</p>
<p>In sostanza, se scrivo su un livello largo 70px la parola supercalifragilistichespiralitoso, settando una dimensione del testo a 12px, verosimilmente il contenuto del livello andr&agrave; oltre i 70px in larghezza. La propriet&agrave; word-wrap mi permette di decidere come gestire tale eventualit&agrave;.</p>
<p>Vediamo un esempio concreto:</p>
<div style="border: 1px inset rgb(204, 204, 204); margin: 10px auto; background: rgb(241, 241, 241) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; word-wrap: break-word; width: 70px;">supercalifragilistichespiralitoso</div>
<pre>&lt;div style=&quot;border: 1px inset #ccc; background:#f1f1f1; margin: 10px auto; word-wrap: break-word; width: 70px;&quot;&gt;supercalifragilistichespiralitoso&lt;/div&gt;</pre>
<p><br />
Finalmente anche Firefox decide di mandare a capo le lettere di troppo rispetto alla larghezza del livello. La propriet&agrave; ha sempre funzionato a dovere in Internet Explorer e nei browser basati su WebKit (Safari, Chrome, Epiphany, etc...)</p><p>Tags: <a href="http://technorati.com/tag/CSS/" rel="tag">CSS</a>, <a href="http://technorati.com/tag/Firefox/" rel="tag">Firefox</a>, <a href="http://technorati.com/tag/word-wrap/" rel="tag">word-wrap</a></p>]]></description>
<pubDate>Mon, 27 Jul 2009 12:11:48 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1062/css-firefox-35-e-proprieta-wordwrap/</guid>
</item>
<item>
<title>Google Maps - Un marker personalizzato</title>
<link>http://www.davidonzo.com/post/1046/google-maps-un-marker-personalizzato/</link>
<description><![CDATA[<p></p><p>Pu&ograve; essere molto utile usare un marker personalizzato. I marker, abbiamo gi&agrave; visto qualche articolo fa, sono i segnalibri che compaiono sulla mappa di Google ed indicato una determinata coordinata.</p>
<p>L'uso del marker personalizzato riesce a distogliere l'utente dalla mappa stessa ed a farla personalizzare con il proprio web, prescindendo quindi da Google. Inoltre un uso dinamico dei marker permette una lettura veloce dei punti segnalati. Possiamo usare un marker a forma di ristorante per indicare i punti di ristoro, uno a forma di croce per indicare gli ospedali, e cos&igrave; via.</p>
<p>In codice tutto risulta abbastanza semplice e si esplica nell'istanziare l'oggetto <strong>GIcon</strong>. Di seguito un facile esempio:</p>
<p><span class="Code">&nbsp;&nbsp;&nbsp; var map = null;<br />
&nbsp;&nbsp;&nbsp; var geocoder = null;<br />
&nbsp;&nbsp;&nbsp; var address = '97015 Italy';<br />
<br />
&nbsp;&nbsp;&nbsp; function initialize() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = new GMap2(document.getElementById(&quot;gmaps&quot;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var geocoder = new GClientGeocoder();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(document.getElementById('addr').value != ''){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address = document.getElementById('addr').value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var baseIcon = new GIcon(G_DEFAULT_ICON);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseIcon.shadow = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseIcon.image = 'http://www.davidonzo.com/gmaps/icon/3.png';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; markerOptions = { icon:baseIcon };<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geocoder.getLatLng(address, function(point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Spiacente, indirizzo non trovato');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var marker = new GMarker(point, markerOptions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; markerOptions = { icon:baseIcon };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.addOverlay(marker);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GEvent.addListener(marker, &quot;click&quot;, function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; marker.openInfoWindowHtml('Coordinate&lt;br /&gt;'+point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setCenter(point, 8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setUIToDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p>Come sempre <strong><a href="http://www.davidonzo.com/gmaps/gmaps-self-marker.html" target="_blank">una pagina con un esempio un po' pi&ugrave; complesso, da usare al volo</a></strong>.</p><p>Tags: <a href="http://technorati.com/tag/GMaps/" rel="tag">GMaps</a>, <a href="http://technorati.com/tag/Googla+Maps/" rel="tag">Googla Maps</a>, <a href="http://technorati.com/tag/Marker/" rel="tag">Marker</a></p>]]></description>
<pubDate>Mon, 22 Jun 2009 13:01:53 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1046/google-maps-un-marker-personalizzato/</guid>
</item>
<item>
<title>[PHP] Anno bisestile o no?</title>
<link>http://www.davidonzo.com/post/1045/php-anno-bisestile-o-no/</link>
<description><![CDATA[<p></p><p>Come controllare se un anno &egrave; bisestile o no? Domanda posta qualche minuto fa su un gruppo di discussione sul PHP che seguo abbastanza assiduamente. Le risposte non si sono fatte attendere (bella community da questo punto di vista), ma le soluzioni proposte andavano dalle 20 righe di codice in su, con controlli ciclici, serializzazioni degli anni bisestili in improbabili array degli anni bisestili dell'ultimo secolo. Ho trovato girovagando altre soluzioni pi&ugrave; pulite, ma sempre eccessivamente dispendiose per l'uso di memoria di sistema.</p>
<p>All'utente interessa sapere solo se quel determinato anno &egrave; bisestite o no. Un anno bisestile ha in calendario sempre il 29 Febbraio. Quindi, se quel giorno &egrave; calendarizzato l'anno sar&agrave; sicuramente bisestile, altrimenti &egrave; un anno normale.</p>
<p>Basta un semplice controllo con <a target="_blank" href="http://us2.php.net/manual/en/function.checkdate.php">checkdate()</a>.</p>
<p><span class="Code">&nbsp; function isLeapYear($year){<br />
&nbsp;&nbsp;&nbsp; if(checkdate(2,29,$year)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $year.' is a leap year';<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $year.' is not a leap year';<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</span></p>
<p>Un semplicissimo ciclo if che controlla l'esistenza di una data specificata. Possiamo estremizzare ulteriormente il codice in tre righe e darne un output booleano.</p>
<p><span class="Code">&nbsp; function isLeapYear($year){<br />
&nbsp;&nbsp;&nbsp; return (checkdate(2,29,$year)) ? true : false;<br />
&nbsp; }</span></p>
<p>Semplice no?! :-)</p><p>Tags: <a href="http://technorati.com/tag/PHP/" rel="tag">PHP</a></p>]]></description>
<pubDate>Thu, 18 Jun 2009 11:27:14 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1045/php-anno-bisestile-o-no/</guid>
</item>
<item>
<title>Mozilla Add-ons Workshop a Firenze</title>
<link>http://www.davidonzo.com/post/1040/mozilla-addons-workshop-a-firenze/</link>
<description><![CDATA[<p></p><p><a href="http://www.mozillaitalia.it" target="_blank"><img height="200" width="200" align="left" src="http://www.davidonzo.com/public/image/loghi/mozillaitalia.png" alt="mozillaitalia at davidonzo.com" /></a>Sabato 27 giugno si terr&agrave; a Firenze il Mozilla Add-ons Workshop, organizzato da Mozilla Europe in collaborazione con Mozilla Italia.</p>
<p>Durante questo incontro interverranno i migliori programmatori di estensioni italiani per spiegare come si crea un&rsquo;estensione per i programmi Mozilla, successivamente si dar&agrave; spazio al lavoro di gruppo per creare una nuova estensione.</p>
<p>La partecipazione a questo incontro &egrave; libera e gratuita, &egrave; tuttavia richiesta una <a href="http://events.mozilla-europe.org/event/?id=9">registrazione</a> per poter organizzare al meglio l&rsquo;evento.</p>
<p>Ai partecipanti verr&agrave; data una maglietta creata per l&rsquo;occasione e successivamente, per chi vuole rimanere, andremo tutti insieme a mangiare una pizza e bere qualcosa in centro.</p>
<p>Sul <a href="https://wiki.mozilla.org/MAOW:2009:Firenze">wiki</a> di Mozilla Foundation troverete tutti i dettagli.</p><p>Tags: <a href="http://technorati.com/tag/Mozilla/" rel="tag">Mozilla</a>, <a href="http://technorati.com/tag/Mozilla+Italia/" rel="tag">Mozilla Italia</a></p>]]></description>
<pubDate>Thu, 11 Jun 2009 13:34:07 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1040/mozilla-addons-workshop-a-firenze/</guid>
</item>
<item>
<title>Just another AJAX gallery</title>
<link>http://www.davidonzo.com/post/1038/just-another-ajax-gallery/</link>
<description><![CDATA[<p></p><p>Trovo molto fastidiose le gallerie di immagini presenti nei quotidiani on line. Per andare avanti di una immagine bisogna ricaricare completamente la pagina, che di solito &egrave; stracolma di advertising molti dei quali in embedding da altri host su quella pagina. D'altra parte la soluzione trovata da alcuni, caricare tutte le immagini in elementi nascoti via css e farli magicamente apparire, non &egrave; tanto meglio, visto che potrei non voler vedere tutte le millemila immagini.</p>
<p>Un po' per gioco, un po' perch&egrave; potrebbe essere utile a qualcuno, ho scritto un piccolo script che permette di visualizzare una galleria senza troppo sforzo e soprattutto ricaricando volta per volta la sola immagine e non l'intero html.</p>
<p>Molto basilare. Nessuna miniatura, ma solo l'immagine con le frecce per andare avanti e indietro. C'&egrave; da dire che per aggiungere/togliere un'immagine alla galleria basta inserirla/rimuoverla da una directory.</p>
<p>Ho visto che ci sono migliaia di cose del genere in giro (e non mi spiego perch&egrave; le testate giornalistiche non ne usino almeno una). Per questo ho deciso di chiamare il giochetto &quot;Just another AJAX gallery&quot;. <strong><a target="_blank" href="http://www.davidonzo.com/ajaxstudy/ajaxgallery/">Qui &egrave; possibile vederne una demo</a></strong>.</p>
<p>Visto che &egrave; una cosa fatta in cinque minuti e gli vedo grandi miglioramenti e potenziamenti possibili, metto il codice a disposizione di tutti. Nella speranza che qualcuno lo migliori e ne condivida la cosa.</p>
<p align="center"><a href="http://www.davidonzo.com/public/file/ajaxgallery.tar.gz" target="_blank"><img height="100" width="405" style="border: 1px solid rgb(204, 204, 204); padding: 2px;" alt="Download Just another ajax gallery" src="http://www.davidonzo.com/public/image/browser/downloadajaxgallery.jpg" /></a></p>
<p>La configurazione &egrave; facilissima:</p>
<ul>
    <li>Scompattate l'archivio ed inviatelo al server nella directory che ospiter&agrave; la galleria</li>
    <li>Aprile il file function.js e modificate la seconda riga in accordo con l'URL della vostra galleria</li>
    <li>Inserite le immagini che volete nella directory /images/</li>
</ul>
<p>Buon divertimento :-)</p><p>Tags: <a href="http://technorati.com/tag/AJAX/" rel="tag">AJAX</a>, <a href="http://technorati.com/tag/JavaScript/" rel="tag">JavaScript</a></p>]]></description>
<pubDate>Tue, 09 Jun 2009 20:29:43 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1038/just-another-ajax-gallery/</guid>
</item>
<item>
<title>Google Maps - Oggetto GMarker e gestione openInfoWindowHtml</title>
<link>http://www.davidonzo.com/post/1036/google-maps-oggetto-gmarker-e-gestione-openinfowindowhtml/</link>
<description><![CDATA[<p></p><p>Quante volte abbiamo visto mappe di GMaps con uno o tanti marker i quali cliccati mostravano la famosa nuvoletta con delle informazioni scritte all'interno. Molto utile se oltre a voler indicare visivamente le coordinate di un punto vogliamo anche dare informazioni ulteriori sul luogo.</p>
<p>Abbiamo gi&agrave; visto come produrre ed inserire in un punto preciso della mappa un marker. Oggi vedremo come abbellirlo con del testo inserito nella famosa nuvoletta, che comparir&agrave; al click dell'utente sul marker.</p>
<p>Il tutto &egrave; abbastanza semplice e si ottiene facendo lavorare di pari passo l'oggetto GMarker, che ci restituisce il puntatore a mappa e la classe GEvent, aggiungendo un listener all'evento onClick del marker generato mostri la nuvola (openInfoWindowHtml). Sembra uno scioglilingua, ma leggendo il codice apparir&agrave; tutto pi&ugrave; chiaro.</p>
<p><span class="Code">&nbsp;&nbsp;&nbsp; var map = null;<br />
&nbsp;&nbsp;&nbsp; var geocoder = null;<br />
&nbsp;&nbsp;&nbsp; var address = '97015 Italy';<br />
<br />
&nbsp;&nbsp;&nbsp; function initialize() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = new GMap2(document.getElementById(&quot;gmaps&quot;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var geocoder = new GClientGeocoder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(document.getElementById('addr').value != ''){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address = document.getElementById('addr').value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geocoder.getLatLng(address, function(point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Spiacente, indirizzo non trovato');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var marker = new GMarker(point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.addOverlay(marker); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GEvent.addListener(marker, &quot;click&quot;, function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; marker.openInfoWindowHtml('Coordinate&lt;br /&gt;'+point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setCenter(point, 8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setUIToDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p>In questo caso, per semplicit&agrave;, ho deciso di mostrare le coordinate LatLng del punto a cui il marker fa riferimento. E' ovvio che avrei potuto scrivere la qualsiasi cosa, in semplice codice HTML.</p>
<p>Come sempre, <strong><a target="_blank" href="http://www.davidonzo.com/gmaps/gmaps-marker.html">una pagina per testare live quanto detto</a></strong>.</p><p>Tags: <a href="http://technorati.com/tag/GMaps/" rel="tag">GMaps</a>, <a href="http://technorati.com/tag/Googla+Maps/" rel="tag">Googla Maps</a></p>]]></description>
<pubDate>Tue, 02 Jun 2009 17:50:08 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1036/google-maps-oggetto-gmarker-e-gestione-openinfowindowhtml/</guid>
</item>
<item>
<title>Google Maps - Oggetto GClientGeocoder</title>
<link>http://www.davidonzo.com/post/1033/google-maps-oggetto-gclientgeocoder/</link>
<description><![CDATA[<p></p><p><img align="left" src="http://www.davidonzo.com/public/google_logo.gif" alt="Logo google" />I servizi di geolocalizzazione ormai si sprecano. Far sapere dove sei ed in che momento, se in parte mina la tua privacy, dall'altro pu&ograve; essere viatico di buone opportunit&agrave;. D'altra parte chi non vuole far sapere dove sta in un dato momento, basta che spenga il ricevitore gps :-)</p>
<p>Ma a noi oggi questo non interessa. Quello che vogliamo &egrave; trovare un luogo avendo informazioni non necessariamente precise. Per questo ci aiuta <a target="_blank" href="http://maps.google.it/">Google Maps</a> e l'oggetto <a target="_blank" href="http://code.google.com/intl/it-IT/apis/maps/documentation/reference.html#GClientGeocoder">GClinetGeocoder</a>.</p>
<p>Google Maps gestisce le varie posizioni di una mappa tramite un punto identificato da latitudine e longitudine. Quindi servirebbe avere un gigantesco database punto a punto con riferimenti incrociati per ottenere la corrispondenza di un punto ad un input di tipo testo che descrive un indirizzo.</p>
<p>Fortunatamente ci viene in aiuto GMaps mettendoci a disposizione una classe che si occupa di recuperare le coordinate di un indirizzo, anche quando questo riporta dati sommari.</p>
<p><span class="Code">var geocoder = new GClientGeocoder();<br />
geocoder.getLatLng(address, YourCallbackFunction(point));</span></p>
<p>Istanziando l'oggetto GClientGeocoder possiamo sfruttarne il metodo getLatLng per ricavare le coordinare necessario. Oltre questo, possiamo richiamare una funzione di callback che direttamente dal predetto metodo sar&agrave; in grado di gestire la risposta alle coordinate date. Possiamo ad esempio aggiungere direttamente un marker alla mappa. Di seguito un esempio:</p>
<p><span class="Code">&nbsp;&nbsp;&nbsp; var map = null;<br />
&nbsp;&nbsp;&nbsp; var geocoder = null;<br />
&nbsp;&nbsp;&nbsp; var address = '97015 Italy';<br />
<br />
&nbsp;&nbsp;&nbsp; function initialize() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GBrowserIsCompatible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = new GMap2(document.getElementById(&quot;gmaps&quot;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var geocoder = new GClientGeocoder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geocoder.getLatLng(address, function(point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!point){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Spiacente, indirizzo non trovato');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var marker = new GMarker(point);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.addOverlay(marker); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setCenter(point, 8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.setUIToDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p>Stabilendo come indirizzo di default 97015 Italy, il geocoder andr&agrave; a cercare una coordinata coerente e nel nostro caso si posizioner&agrave; su Modica, al centro della zona che ha come CAP 97015. Avremmo potuto essere pi&ugrave; precisi, specificando un indirizzo valido, finanche un numero civico.</p>
<p>Se il geocoder non trova nessuna corrispondenza avvertir&agrave; l'utente dell'errore arrestandosi subito dopo, altrimenti piazzer&agrave; un marker nel punto trovato e centrer&agrave; la mappa con riferimento a questo.</p>
<p>Tutto abbastanza semplice. <strong><a target="_blank" href="http://www.davidonzo.com/gmaps/gmaps-geocoder.html">Ma un esempio pratico pu&ograve; aiutare molto</a></strong>. Provate ad inserire nella form il vostro indirizzo di casa e vedrete che GMaps vi scover&agrave; in men che non si dica :-)</p><p>Tags: <a href="http://technorati.com/tag/Google/" rel="tag">Google</a>, <a href="http://technorati.com/tag/Gmaps/" rel="tag">Gmaps</a></p>]]></description>
<pubDate>Thu, 28 May 2009 19:27:22 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1033/google-maps-oggetto-gclientgeocoder/</guid>
</item>
<item>
<title>Sviluppo web sostenibile: il template engine</title>
<link>http://www.davidonzo.com/post/1020/sviluppo-web-sostenibile-il-template-engine/</link>
<description><![CDATA[<p></p><p><img width="180" height="135" align="left" src="http://www.davidonzo.com/public/image/browser/puzzle.jpg" alt="puzzle at davidonzo.com" />Lo sviluppo web moderno prevede un uso solo marginale di codice HTML statico. Eppure l'output di una applicazione web &egrave; principalmente di questo tipo. Che sia pyton, perl, php, ruby o qualsiasi altro linguaggio server side, il risultato che vogliamo ottenere nella maggior parte dei casi &egrave; codice html da visualizzare via browser.</p>
<p>Quello che vediamo in ultimo &egrave; il risultato di un processo complesso di aggregazione di dati, calcolo di variabili, manipolazioni di stringhe... A monte quindi c'&egrave; qualcosa di estremamente diverso. Una serie di processi sistemici che permettono di raggiungere l'obiettivo finale.</p>
<p>Proprio perch&egrave; si parla di processi sistemici, &egrave; evidente la possibilit&agrave; di vedere la creazione di una pagina web in termini di &quot;<em>ciclo di vita</em>&quot;.</p>
<p>Si parte dalla richiesta del client remoto. Questa avr&agrave; dei parametri che l'applicazione andr&agrave; ad elaborare. Una volta ottenuti tutti i dati necessari &egrave; possibile produrre l'output desiderato. Oggi parliamo proprio dell'ultima fase e di quanto sia conveniente delegare un processo proprio alla creazione del risultato finale.</p>
<h3>Template Engine</h3>
<p>Sta in questo il <em><strong>template engine</strong></em>. Bella definizione con cui si vuole sintetizzare l'attitudine di un'applicativo web a creare output visuale in modalit&agrave; indipendente dai processi di acquisizione ed elaborazione della richiesta remota.</p>
<p>E' un po' quello che succede in questo blog, ma anche in wordpress, joomla e la quasi toalit&agrave; dei content management system open source in circolazione. La gestione del template &egrave; completamente separata ed indipendente dal resto del sistema. Il template engine viene usato dal core code dell'applicazione come uno dei tanti strumenti di elaborazione dati. Nel caso specifico un processo di finalizzazione.</p>
<h3>Come agire in concreto</h3>
<p>Le modalit&agrave; operative di implementazione di un sistema di template engine partono da un presupposto di progettazione abbastanza preciso: l'applicativo che si vuole realizzare deve essere visto come una serie di processi indipendenti e collegati fra loro in modalit&agrave; sussidiare ad un motore centrale.</p>
<p>Questo permette non solo di creare un buon concept dell'applicazione, ma anche di rendere portabile le varie fasi in altri progetti. In una logica ampia la progettualit&agrave; di un'applicazione web che vede le seguenti fasi:</p>
<ul>
    <li>Ricezione richiesta remota.</li>
    <li>Elaborazione della richiesta.</li>
    <li>Rilascio dei dati risultanti dall'elaborazione.</li>
    <li>Rappresentazione grafica tramite template.</li>
</ul>
<p>L'ultima fase &egrave; quella che si relazione con l'utente finale. Il front office dell'applicazione web si occupa di <em>consegnare il pacco al cliente</em>. Ma penseranno i processi di produzione ad elaborare la richiesta e preparare il tutto per il fiocco finale.</p>
<h3>Template strutturali e funzionali</h3>
<p>Si pu&ograve; affermare che ogni template engine sia un sistema strutturale. Avr&agrave; i suoi processi interni di gestione ed interfacciamento con il core code. In una logica di separazione delle fasi di processo, riuscir&agrave; ad adattarsi al sistema che deve servire mantenendo un'alta scalabilit&agrave; in termini di facile implementazione di interfaccia.</p>
<p>La funzionalit&agrave; del template engine &egrave; invece una scelta pi&ugrave; radicale. Si pu&ograve; decidere infatti che il templating sia atto solo a visualizzare, nel formato adatto, il risultato della richiesta cliente. In altri casi si pu&ograve; anche decidere di destinare al template parte dell'elaborazione, passando a questo dati a livello pi&ugrave; grezzo.</p>
<p>Non esiste una scelta migliore e molto dipende dalle modalit&agrave; di rilascio dell'applicativo. Un esempio di template engine strutturale e poco funzionale &egrave; <a target="_blank" href="http://www.smarty.net">Smarty</a>. Tramite l'utilizzo di file .tpl ed un interfacciamento semplice, riesce a gestire le risultanze passategli da un sistema complesso. Sconta, come ogni altro sistema del genere, la necessit&agrave; di implementazione nel core code di nuove funzionalit&agrave; anche per modifiche banali. Si presta per&ograve; molto bene ad essere incluso in software proprietari a rilascio privato. In questo caso le personalizzazioni e le modifiche successive trovano logica in una modifica diretta del motore centrale dell'applicativo. Mentre il front end pu&ograve; essere gestito facilmente da personale che abbia grandi conoscenze di styling puro, senza bisogno di competenze a livello di scripting.</p>
<p>Per i software a rilascio pubblico e diffuso invece, si consiglia l'utilizzo di un template engine funzionale. Meglio se scritto nello stesso linguaggio di programmazione usato dal motore principale.</p>
<p>L'esempio banale &egrave; wodpress. Il sistema di template &egrave; scritto in PHP. I file di template sono scritti in PHP. Lo stesso motore centrale fornisce numerose api per implementare nuove funzionalit&agrave; all'interno del visuale utente. Perch&egrave; questo? Wordpress &egrave; un software open source, a rilascio diffuso e frequente. Nuove funzionalit&agrave; che non prevedono scrittura nel database possono essere inserite direttamente nel template. In questo modo, insieme al sistema di plugin, si riesce a non toccare mai il cuore dell'applicazione, potendo procedere ad aggiornamenti di struttura in maniera indipendente e quindi sostenibile.</p>
<h3>Solo HTML?</h3>
<p>Lo stesso principio con cui strutturiamo il template engine per la produzione di output HTML pu&ograve; essere utilizzato per qualsiasi tipo di output. Ipotizziamo di dover rilasciare un'immagine jpeg con un testo arbitrario. Probabilmente avremo un processo per selezionare l'immagine di sfondo. Un altro proceso si occuper&agrave; di processare la stringa da scrivere sull'immagine stessa. Se tale funzione &egrave; ripetitiva risulta pi&ugrave; economico creare un file di template unico che si occuper&agrave; di mostrare il risultato, piuttosto che far produrre il jpeg al codice operativo. Stesso discorso per file XML, PDF, CVS e altro.</p>
<p>Tutte queste sono nozioni di base e del tutto teoriche. Nessun esempio di codice &egrave; inserito proprio perch&egrave; l'intento &egrave; quello di mostrare una logica progettuale efficace ed efficiente. Per le modalit&agrave; operative, buon lavoro :-)</p><p>Tags: <a href="http://technorati.com/tag/Template+Engine/" rel="tag">Template Engine</a></p>]]></description>
<pubDate>Sat, 09 May 2009 20:49:34 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1020/sviluppo-web-sostenibile-il-template-engine/</guid>
</item>
<item>
<title>Only Linux do that!</title>
<link>http://www.davidonzo.com/post/1011/only-linux-do-that/</link>
<description><![CDATA[<p></p><p>Si sta sempre a parlare di cosa &egrave; meglio o cosa e peggio quando si valuta un sistema operativo. Si sente spesso dire che l'usabilit&agrave; di windows comunque nessuna distribuzione Linux riuscir&agrave; mai a raggiungerla.</p>
<p>Mi sento di appoggiare in pieno questa ultima affermazione, perch&egrave; l'usabilit&agrave; di Windows &egrave; stata ampiamente superata da Linux, ma senza bisogno di raggiungerla, semplicemente andando per la loro strada mettendosi bene in testa cosa potrebbe far felice l'utente, cosa pu&ograve; velocizzare la gestione corrente delle operazioni.</p>
<p>Non si dimentichi il lato ludico, che poi a ragion veduta &egrave; quello che maggiormente si pubblicizza quando esce un nuovo sistema operativo. Veramente poco nel marketing all'utente finale si fa riferimento alla sicurezza. Praticamente mai si parla di file system inteso come sistemica gestione dei documenti e degli applicativi. Solo figaggini...</p>
<p>E allora questo video &egrave; dedicato a te che te ne freghi di poter fare con una singola linea di comando quello che altri sistemi ti chiedono di mettere in opera navigando fra millemila finestre. A te che se vedi un sobbalzino simpatico delle finestre godi come un calamaro gigante nella Fossa delle Marianne mentre si accoppia dopo 150 anni dall'ultima volta. Tu, proprio tu che metti sul desktop orologi, portachiavi, improbabili slideshow della tua ultima gita in Ucraina perch&egrave; l&igrave; la danno quasi gratis, beccati questo!</p>
<p align="center">[youtube]http://www.youtube.com/watch?v=t7FzW3bY02g[/youtube]</p><p>Tags: <a href="http://technorati.com/tag/Linux/" rel="tag">Linux</a>, <a href="http://technorati.com/tag/Compiz/" rel="tag">Compiz</a>, <a href="http://technorati.com/tag/Video/" rel="tag">Video</a></p>]]></description>
<pubDate>Mon, 20 Apr 2009 20:42:23 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1011/only-linux-do-that/</guid>
</item>
<item>
<title>Installare Symfony su server HostMonster</title>
<link>http://www.davidonzo.com/post/1008/installare-symfony-su-server-hostmonster/</link>
<description><![CDATA[<p></p><p><a href="http://www.symfony-project.org" target="_blank"><img height="37" width="176" align="left" src="http://www.davidonzo.com/public/image/loghi/symfony_logo.gif" alt="symfony at davidonzo.com" /></a>Uno dei migliori framework per PHP. Permette di sviluppare velocemente applicativi web complessi. Chiaro che una volta completato il lavoro in locale dovete mettere su un server pubblico il risultato che necessiter&agrave; proprio del framework per funzionare.</p>
<p>Leggendo <a href="http://www.symfony-project.org/jobeet/1_2/Doctrine/it/" target="_blank">l'ottimo tutorial</a> (disponibile in italiano!) per Jobeet capirete quanto sia importante installare il framework non a casaccio. Ma avrete anche gi&agrave; letto le <a href="http://www.symfony-project.org/installation/1_2" target="_blank">guida all'installazione</a> notando che &egrave; disponibile l'installazione tramite <a href="http://pear.php.net/" target="_blank">pacchetto PEAR</a>.</p>
<p><a href="http://hostmonster.com" target="_blank">HostMonster</a> mette a disposizione l'installazione tramite pear packages gi&agrave; dal pannello di controllo cPanel. Ma symfony non &egrave; tra le applicazioni disponibili. Poco male, perch&egrave; via ssh possiamo aggiungere il repository e quindi installare il tutto in semplicit&agrave;. Procederemo con due semplici linee di comando:</p>
<p><span class="Code">[~]# pear channel-discover pear.symfony-project.com<br />
Adding Channel &quot;pear.symfony-project.com&quot; succeeded<br />
Discovery of channel &quot;pear.symfony-project.com&quot; succeeded<br />
[~]# pear install symfony/symfony-1.2.5<br />
downloading symfony-1.2.5.tgz ...<br />
Starting to download symfony-1.2.5.tgz (2,716,774 bytes)<br />
.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................done: 2,716,774 bytes<br />
install ok: channel://pear.symfony-project.com/symfony-1.2.5</span></p>
<p>Ed il framework verr&agrave; installato in <code>/home/NOSTROUTENTE/php/symfony/</code>. Directory inibita all'accesso pubblico, quindi al sicuro da sguardi indiscreti.</p>
<p>Ricordate che hostmonster abilita l'accesso ssh al vostro account solo dopo averne fatto esplicita richiesta tramite form apposito in cui dovrete inviare anche una scanzione di un documento di riconoscimento valido (la carda di identit&agrave; italiana va benissimo). In ultimo non dimenticate che potete installare solo pacchetti stabili. Quindi se vi dovessero trovare beta version fra i pacchetti, rischiate la sospensione dell'account.</p><p>Tags: <a href="http://technorati.com/tag/PHP/" rel="tag">PHP</a>, <a href="http://technorati.com/tag/Symfony/" rel="tag">Symfony</a>, <a href="http://technorati.com/tag/PEAR/" rel="tag">PEAR</a>, <a href="http://technorati.com/tag/HostMonster/" rel="tag">HostMonster</a></p>]]></description>
<pubDate>Fri, 17 Apr 2009 10:41:47 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1008/installare-symfony-su-server-hostmonster/</guid>
</item>
<item>
<title>Recupero password in Ubuntu Linux</title>
<link>http://www.davidonzo.com/post/1006/recupero-password-in-ubuntu-linux/</link>
<description><![CDATA[<p></p><p>Mi si chiede: &quot;<em>Ho ubuntu sul pc, ho impostato il login automatico all'avvio, quindi non digito quasi mai la password. Dovrei installare gli aggiornamenti, ma ora s&igrave; che mi viene richiesta la password e non la ricordo. Come faccio?!</em>&quot;</p>
<p>La questione &egrave; abbastanza semplice. In ubuntu di default l'utente root &egrave; disabilitato e l'utente che ha installato il sistema &egrave; abilitato, previa richiesta password, a compiere atti con potere di amministratore.</p>
<p>Se hai installato il GRUB loader (al 99,99% s&igrave;), allora avvia il sistema selezionando l'ultima versione del kernel disponibile, ma in recovery mode. Di solito la seconda riga dall'alto del grub. Una volta avviato il sistema, ti si presenter&agrave; una finestra con quattro opzioni disponibili. Scegliere la terza o comunque quella relativa alla possibilit&agrave; di aprire la shell di root. Non ti verr&agrave; richiesta nessuna password.</p>
<p>Nella shell digita:</p>
<pre>passwd NOMEUTENTE</pre>
<p>Sostituendo NOMEUTENTE con lo username dell'utente di cui hai dimenticato la password. A questo punto sar&agrave; richiesto l'inserimento della password, un secondo inserimento a conferma e tramite un reboot si potr&agrave; riprendere pieno possesso delle funzionalit&agrave;.</p>
<h3>Nota Bene</h3>
<p>S&igrave;, hai letto benissimo. Avviando in recovery mode si pu&ograve; accedere come root al sistema senza bisogno di nessuna password. Perch&egrave;? Facile ripondere: si tratta di un sistema desktop, che in questo modo pu&ograve; essere ripristinato facilmente.</p>
<p>La consideri una grave falla di sicurezza? Ricorda che un sistema &egrave; sempre insicuro che qualcuno pu&ograve; mettergli mano fisicamente.</p>
<p>Sei di quelli iper-attenti che mettono la password al bios? Ricorda che basta togliere per 30 secondi la batteria del CMOS e pure quella viene resettata.</p>
<p>Come puoi fare ad essere sicuro al 100%? Attaccati il case alle chiappe ;-)</p><p>Tags: </p>]]></description>
<pubDate>Wed, 15 Apr 2009 16:50:00 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1006/recupero-password-in-ubuntu-linux/</guid>
</item>
<item>
<title>[PHP] Convertire data da formato RFC 2822 ad output personalizzato</title>
<link>http://www.davidonzo.com/post/1002/php-convertire-data-da-formato-rfc-2822-ad-output-personalizzato/</link>
<description><![CDATA[<p></p><p><img align="left" alt="php at davidonzo.com" src="http://www.davidonzo.com/public/image/loghi/php.gif" />Si tratta del formato data standard per i messaggi di testo inviati e ricevuti via web. Le specifiche sono contenute nel documento <a href="http://www.faqs.org/rfcs/rfc2822" target="_blank">RFC2822 datato Aprile 2001</a>. Per fare un esempio pratico degli utilizzi propri del formato in questione, sappiate che &egrave; quello standard per l'attributo &lt;pubDate&gt; di un file RSS in formato 2.0. Potrebbe quindi rivalarsi necessario manipolare la stringa per ottenete un formato data diverso.</p>
<p>Un esempio di formato RFC 2822 &egrave; il seguente</p>
<p><span class="Code">Fri, 03 Apr 2009 15:09:30 +0200</span></p>
<p>Indica la data di venerdi, 3 Aprile 2009. Potremmo volerne ottenere un output pi&ugrave; semplice, del tipo 03/04/2009. Andremo ad usare in forma combinata le funzioni <a href="http://www.php.net/manual/en/function.date.php" target="_blank">date</a> e <a href="http://php.net/strtotime" target="_blank">strtotime</a> fornite dal core del PHP.</p>
<p><span class="Code">$data = date('d/m/Y',strtotime('Fri, 03 Apr 2009 15:09:30 +0200'))</span></p>
<p>E questo &egrave; quanto.</p><p>Tags: <a href="http://technorati.com/tag/PHP/" rel="tag">PHP</a>, <a href="http://technorati.com/tag/RFC+2822/" rel="tag">RFC 2822</a></p>]]></description>
<pubDate>Sun, 05 Apr 2009 15:50:30 +0200</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/1002/php-convertire-data-da-formato-rfc-2822-ad-output-personalizzato/</guid>
</item>
<item>
<title>Ottimizzare il codice html limitando le richieste</title>
<link>http://www.davidonzo.com/post/988/ottimizzare-il-codice-html-limitando-le-richieste/</link>
<description><![CDATA[<p></p><p><img height="150" width="150" align="left" src="http://www.davidonzo.com/public/image/browser/optimization.jpg" alt="optimization at davidonzo.com" />Le prestazioni di un sito web spesso si misurano in quantit&agrave; di dati scaricati. Cosa buona e giusta, perch&egrave; l'ottimizzazione passa anche per cercare di far visualizzare lo stesso contenuto con la quantit&agrave; minore di bit inviati dal server al client. Se usiamo un header con una scritta abbastanza semplice, usiamo del testo invece di un'immagine.</p>

<p>Piccole cose che nel complesso aiutano i visitatori a visualizzare pi&ugrave; velocemente le pagine, stressano di meno il server e rendono la navigazione pi&ugrave; piacevole, accrescendo la possibilit&agrave; di fidelizzare l'utenza.</p>

<p>Oltre la quantit&agrave; di dati &egrave; bene tenere sott'occhio anche il numero di richieste che riceve il server. Quando richiediamo via browser una pagina web questa verr&agrave; caricata con tutti i file necessari alla sua visualizzazione. Ogni immagine contenuta &egrave; una richiesta aggiuntiva, cos&igrave; come per ogni foglio di stile e file javascript incluso. Tempo fa abbiamo visto come ovviare alla marea di richiesta http che possono attivarsi per richiamare tutte le immagini usate come elementi decorativi <a href="http://www.davidonzo.com/post/952/css-css-sprites-per-aumentare-le-performance-del-nostro-web/" target="_blank">tramite la tecnica del CSS sprites</a>. Oggi vediamo qualcosa di molto pi&ugrave; semplice, ma altrettanto potente come soluzione.</p>

<p>Capita spesso che si abbiano fra i tag del head pi&ugrave; file CSS. Questo fa avviare una chiamata per ogni file. Il problema pu&ograve; poi essere maggiore nel caso in cui andiamo a richiamare CSS da altri host. Vediamo in codice l'esempio.</p>

<p><span class="Code">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;all&quot; href=&quot;http://www.example.com/style.css &quot; /&gt;<br />
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;all&quot; href=&quot;http://www.example.com/css.css &quot; /&gt;<br />
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;all&quot; href=&quot;http://www.othersite.com/othersite.css &quot; /&gt;</span></p>

<p>Perch&egrave; tre file quando possiamo caricarne uno solo che contenga tutto? Facciamolo allora. In un unico file inseriamo il codice presente nei file style.css e css.css. Se siamo sicuri che il codice del file othersite.css, che risiede su un altro host, non cambi ad eventi particolari, possiamo aggiungere all'unico file anche quelle righe.</p>

<p>Lo stesso discorso vale per i file di codice javascript. E la cosa avviene piuttosto spesso.</p>

<p><span class="Code">&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.example.com/myscript.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.example.com/mootools.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.example.com/effect.js&quot;&gt;&lt;/script&gt;</span></p>

<p>Stesso discorso fatto per i CSS. Unico file con tutto il codice. in definitiva avremo ottimizzato il codice diminuendo di 4 chiamate http il loading completo della pagina. Ma possiamo fare di pi&ugrave; per velocizzare il loading della pagina! Se non abbiamo interesse ad eseguire codice javascript al loading della pagina, &egrave; buona norma includere i file relativi alla fine del codice. Poco prima del tag di chiusura del &lt;/body&gt;. In questo modo il browser caricher&agrave; velocemente tutte le intestazioni con le relative direttive di stile, applicandole automaticamente dal momento in cui comincia ad interpretare il body della pagina.</p>
<p>Solo in ultimo verranno caricate le funzioni javascript, che essendo di solito necessarie a favorire l'interazione utente &lt;=&gt; pagina possono aspettare il completo caricamento del contenuto con cui poi si interfacceranno via input dell'utente.</p>

<p>Un ultimo consiglio. Se vi trovate ad avere la situazione descritta sopra e volete applicare i suggerimenti di cui sopra fate attenzione a come includete il contenuto nell'unico file di destinazione. Non dimenticate mai che il codice HTML viene interpretato <em>from top to bottom</em>. Quindi per evitare qualsiasi tipo di problema &egrave; meglio copiare il contenuto dei file nello stesso ordine con cui ora li state richiamando.</p><p>Tags: <a href="http://technorati.com/tag/CSS/" rel="tag">CSS</a>, <a href="http://technorati.com/tag/JavaScript/" rel="tag">JavaScript</a>, <a href="http://technorati.com/tag/Ottimizzazione/" rel="tag">Ottimizzazione</a>, <a href="http://technorati.com/tag/Web/" rel="tag">Web</a>, <a href="http://technorati.com/tag/Tutorial/" rel="tag">Tutorial</a></p>]]></description>
<pubDate>Wed, 25 Mar 2009 12:15:11 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/988/ottimizzare-il-codice-html-limitando-le-richieste/</guid>
</item>
<item>
<title>[PHP - Mac OS X] Installare la libreria cURL</title>
<link>http://www.davidonzo.com/post/986/php-mac-os-x-installare-la-libreria-curl/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/986/php-mac-os-x-installare-la-libreria-curl/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/986/php-mac-os-x-how-to-install-the-curl-library/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p><img align="left" alt="php at davidonzo.com" src="http://www.davidonzo.com/public/image/loghi/php.gif" />Se avete seguito la guida di qualche tempo fa per <a target="_blank" href="http://www.davidonzo.com/post/785/leopard-apache-php-mysql-tutti-su-mac-os-x-allegramente/">installare php, Apache e MySQL su Leopard</a>, allora potreste aver bisogno di queste informazioni per abilitare la libreria <a target="_blank" href="http://curl.haxx.se">cURL</a> nel php.</p>

<p>Per prima cosa scarichiamo i sorgenti <a target="_blank" href="http://curl.haxx.se/download.html">dal sito ufficiale a questo indirizzo</a>. Scompattiamo il tarball nella directory in cui lavoriamo con i sorgenti. Non c'&egrave; una regola base per questo, io uso la directory <code>/usr/sources/</code>. Se facciamo l'operazioni ad oggi data post, avremo la directory <code>curl-7.19.4</code>.</p>

<p>Entriamo nella directory e lanciamo i soliti comandi per l'installazione.</p>

<p><span class="Code">cd /usr/sources/curl-7.19.4<br />
./configure<br />
make<br />
make test<br />
sudo make install</span></p>

<p>Se volete personalizzare la path di destinazione associate al configura l'opzione <code>--prefix=/path/to/curl</code>. E ricordate che il comando <code>make test</code> &egrave; tanto opzionale quanto consigliato.</p>

<p>Una volta compilata la libreria cURL ci toccher&agrave; ricompilare il PHP. Nella speranza che abbiate conservato i sorgenti nella directory a questi dedicata, entrate dentro la cartella del php e ricompilate in questo modo.</p>

<p><span class="Code">./configure --prefix=/usr/local/php5 --enable-calendar --with-apxs2=/usr/sbin/apxs --enable-mbstring --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql=/usr/local/mysql/ --with-gd --enable-soap --with-zlib --with-jpeg-dir=/usr/local/bin --with-png-dir=/usr/local/bin --enable-sockets <strong>--with-curl=/usr/lib</strong><br />
make<br />
sudo make install</span></p>

<p>Infine riavviate il webserver da pannello di controllo o con un <code>sudo apachectl graceful</code>.</p><p>Tags: <a href="http://technorati.com/tag/PHP/" rel="tag">PHP</a>, <a href="http://technorati.com/tag/Leopard/" rel="tag">Leopard</a>, <a href="http://technorati.com/tag/Mac+OS+X/" rel="tag">Mac OS X</a>, <a href="http://technorati.com/tag/cURL/" rel="tag">cURL</a></p>]]></description>
<pubDate>Thu, 19 Mar 2009 14:29:56 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/986/php-mac-os-x-installare-la-libreria-curl/</guid>
</item>
<item>
<title>Il sorpasso: Firefox saluta e se ne va...</title>
<link>http://www.davidonzo.com/post/984/il-sorpasso-firefox-saluta-e-se-ne-va/</link>
<description><![CDATA[<p></p><p align="center"><img width="420" height="638" src="http://www.davidonzo.com/public/image/browser/sorpasso.jpg" alt="sorpasso at davidonzo.com" /></p>

<p>Secondo le statistiche del <a href="http://www.w3schools.com/browsers/browsers_stats.asp" target="_blank">w3school</a> sembra che da febbraio 2009 Firefox abbia sorpassato Internet Explorer per diffusione. Percentuali di 46.40% contro il 43.60% del/dei browser di casa Redmon. E la cosa pi&ugrave; impressionante &egrave; il tasso di crescita: mediamente ad un ritmo di quasi 1%.</p>

<p>Non so quanto siano attendibili le statistiche, ma la cosa &egrave; abbastanza evidente. Merito di Mozilla solo in parte, perch&egrave; dando un occhio alle <a href="http://www.w3schools.com/browsers/browsers_os.asp" target="_blank">statistiche dei sistemi operativi</a>, penso che qualcosa abbia pesato il fallimento di Vista :-)</p><p>Tags: <a href="http://technorati.com/tag/Firefox/" rel="tag">Firefox</a>, <a href="http://technorati.com/tag/Internet+Explorer/" rel="tag">Internet Explorer</a>, <a href="http://technorati.com/tag/Browser/" rel="tag">Browser</a>, <a href="http://technorati.com/tag/Vista/" rel="tag">Vista</a></p>]]></description>
<pubDate>Wed, 18 Mar 2009 10:16:59 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/984/il-sorpasso-firefox-saluta-e-se-ne-va/</guid>
</item>
<item>
<title>MyGalleryGenerator - Gallerie di immagini in libertà</title>
<link>http://www.davidonzo.com/post/983/mygallerygenerator-gallerie-di-immagini-in-liberta/</link>
<description><![CDATA[<p><a href="http://www.davidonzo.com/post/983/mygallerygenerator-gallerie-di-immagini-in-liberta/"><img src="http://www.davidonzo.com/language/flag/it.gif" alt="it" /></a> <a href="http://www.davidonzo.com/lng/en/post/983/mygallerygenerator-free-images-gallery-generetor/"><img src="http://www.davidonzo.com/language/flag/en.gif" alt="en" /></a> </p><p><a href="http://www.mygallerygenerator.com/" target="_blank"><img width="200" height="200" align="left" src="http://www.davidonzo.com/public/image/browser/mgg.png" alt="" /></a>Le migliori idee sono quelle che mi danno gli altri. Da una necessit&agrave; spesso pu&ograve; scaturire qualcosa di nuovo e forse buono. E' cos&igrave; che la settimana scorsa un mio collega mi chiede un modo per realizzare facilmente una galleria di immagini. Gli hanno affidato la gestione del sito dell'associazione sportiva di cui fa parte e l'unica cosa che vogliono fare &egrave; inserire di tanto in tanto qualche galleria. Tutto il resto &egrave; e rester&agrave; stato codice html.</p>

<p>La persona in questione sa usare un client ftp, riesce a personalizzare una pagina web e pure a crearla utilizzando un programma wysiwyg di base. Non ha interesse ad imparare. Lui vuole solo la sua galleria. Ho provato a mostrargli qualche script da installare sul server, ma non ha familiarit&agrave; con chmod, installazioni di script e altro ed &egrave; pure intenzionato a non averne, perch&egrave; fa tutto a livello amatoriale.</p>

<p>Ho cercato un po' in giro ed in effetti si trovano servizi che ti creano il layout della galleria, ma ti consigliano programmi desktop per l'editing delle immagini. Altri invece fanno tutto, ma son programmini desktop che consigliano di usare dreamweaver piuttosto che installare altro sul pc. Insomma, sembra non esistere un servizio web a cui dare in pasto le tue immagini per far creare le miniature ed il codice html della galleria.</p>

<p>Buona idea, perch&egrave; non farlo? Ed allora nasce <strong><a href="http://www.mygallerygenerator.com" target="_blank">MyGalleryGenerator.com</a></strong>. Scritto abbastanza in fretta fra sabato e domenica, il servizio permette di creare una galleria di immagini pronta per essere uploadata sul vostro server. Dategli in pasto le immagini, il sistema creer&agrave; automaticamente le miniature, vi permetter&agrave; di inserire i dettagli dell'immagine (un titolo ed una descrizione) e generer&agrave; la galleria dandovi la possibilit&agrave; di scaricare il tutto in un comodo archivio *.zip.</p>

<p>Verr&agrave; creato un solo file, chiamato sempre <strong>gallery.html</strong>, per la visualizzazione della galleria. Il full size delle immagini &egrave; deputato a <a href="http://www.lokeshdhakar.com/projects/lightbox2/" target="_blank">lightbox</a>. Questo da il doppio vantaggio di avere un singolo file html da gestire, includendo anche quello stile 2.0 che tanto piace. Tutti i file necessari al funzionamento del sistema li troverete nello zip. Non vi sar&agrave; richiesto di scaricare altro.</p>

<p>Il servizio &egrave; gratuito, non richiede registrazione, ma proprio per questo pone qualche limite:</p>
<ul>
    <li>Potete uploadare un massimo di 9 file per galleria.</li>
    <li>Ogni file non pu&ograve; essere pi&ugrave; grande di 1MB.</li>
    <li>Potete generare un massimo di 3 gallerie nell'arco di 24 ore.</li>
</ul>
<p>Un esempio di output lo <a href="http://www.mygallerygenerator.com/example/" target="_blank">potete visualizzare qui</a>. Lo stile applicato &egrave; fisso, come le dimensioni date alle miniature ed il layout in generale. Potendo scaricare i file avete comunque la possibilit&agrave; di personalizzare il layout editando il file gallery.html o lo stile, agendo sul CSS associato. La galleria &egrave; di base valida XHTML 1.0 Transitional. Il codice JavaScript relativo a lightbox &egrave; debitamente degradato.</p>

<p>Nota bene: per evitare che il server si riempia di immagini caricate, il sistema cancella periodicamente i file vecchi. Lo fa abbastanza spesso! Quindi rammentate bene la seguente. Dopo l'upload avete 10 minuti per inserire titolo e descrizione delle immagini. Una volta creata la galleria avete 5 minuti di tempo per scaricarla. Dopo di che si perde tutto irrecuperabilmente.</p><p>Tags: <a href="http://technorati.com/tag/mygallerygenerator/" rel="tag">mygallerygenerator</a></p>]]></description>
<pubDate>Tue, 17 Mar 2009 22:05:58 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/983/mygallerygenerator-gallerie-di-immagini-in-liberta/</guid>
</item>
<item>
<title>Applicazioni Facebook - Un tutorial in italiano</title>
<link>http://www.davidonzo.com/post/974/applicazioni-facebook-un-tutorial-in-italiano/</link>
<description><![CDATA[<p></p><p><img align="left" alt="Facebook at davidonzo.com" src="http://www.davidonzo.com/public/image/loghi/facebook.jpg" />E' gi&agrave; da un po' di tempo che su Facebook la mia curiosit&agrave; si &egrave; spostata allo sviluppo delle applicazioni. Cosa si pu&ograve; fare ed in che modo implementarlo? I milioni di utenti che popolano il social network sono un'attrazione irresistibile per chiunque cerchi visibilit&agrave;. E i tenutari di facebook bene lo sanno avendo inserito la possibilit&agrave; di schedulare eventi, dedicare intere pagine in gestione utente.</p>

<p>Ma fin qui non si va molto oltre quello che qualsiasi social network dovrebbe fare. Invece i faccia di libro hanno avuto l'idea geniale: permettere a degli sviluppatori esterni di far girare intere piattaforme dentro Facebook, come se facessero parte integrante del social network.</p>

<p>Doppio vantaggio per sviluppatori e propriet&agrave; di facebook. I primi possono concentrarsi sullo sviluppo dell'applicazione, deputando a facebook stesso gran parte del lavoro di marketing per la pubblicizzazione del servizio. Mentre la propriet&agrave; di facebook si ritrova con centinaia di funzionalit&agrave; a costo di sviluppo quasi zero. Pensate un po' a <strong><a target="_blank" href="http://apps.facebook.com/blognetworks/index.php">Networked Blogs</a></strong>. Quanti servizi di indicizzazione per blog esistono nel mondo? E quanti ne sono stati pensati e realizzati prima di questo? Una miriade. Se Networked Blogs fosse stato implementato solo sul proprio host, molto probabilmente non avrebbe avuto successo. Invece inserendolo in Facebook &egrave; diventato punto di riferimento dei bloggers del pi&ugrave; grande social network del mondo! Bel vantaggio no? :-)</p>

<p>Fatta questa piccola premessa, ho cercato di informarmi un po' su come mettere in piedi una piccola applicazione per Facebook, giusto per vedere come si fa, niente di pretenzioso o altisonante. C'&egrave; tanta documentazione in merito, non solo l'<strong><a target="_blank" href="http://wiki.developers.facebook.com/index.php/Main_Page">ottimo wiki</a></strong>, ma anche una miriade di tutorial e post sparsi in tutto il web. Con un po' di tristezza ho per&ograve; constatato che sembra non esistere una, che dico una sola pagina in italiano che spieghi qualcosa. Magari ho cercato io male, ma non ho trovato niente in merito su web nostrani.</p>

<p>A questo punto mi son detto: &quot;<em>Voglio provare a fare un'applicazione per Facebook, non esiste documentazione italiana...</em>&quot; Perch&egrave; non scrivere un'applicazione che sia di fatto un tutorial tutto italiano per lo sviluppo di applicazioni? Ed ecco il &quot;<strong><a target="_blank" href="http://www.facebook.com/apps/application.php?id=52301791841">Tutorial Italiano Applicazioni</a></strong>&quot;. L'applicazione facebook che cerca di spiegare se stessa e si rivolge al bel paese.</p>

<p>Spero possa risultare utile a qualcuno. A me lo sar&agrave; sicuramente :-)</p><p>Tags: <a href="http://technorati.com/tag/Facebook/" rel="tag">Facebook</a>, <a href="http://technorati.com/tag/Applicazioni+Faceboook/" rel="tag">Applicazioni Faceboook</a>, <a href="http://technorati.com/tag/Tutorial/" rel="tag">Tutorial</a></p>]]></description>
<pubDate>Thu, 26 Feb 2009 15:05:39 +0100</pubDate>
<guid isPermaLink="false">http://www.davidonzo.com/post/974/applicazioni-facebook-un-tutorial-in-italiano/</guid>
</item>
</channel>
</rss>
