<?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>Time'n doom &#187; Programmazione</title>
	<atom:link href="http://www.timendum.net/blog/categoria/argomenti/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.timendum.net/blog</link>
	<description>cioè del tempo né del destino, ma di timendum</description>
	<lastBuildDate>Mon, 23 Jan 2012 17:14:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Twitter e fumetti (e Ansa)</title>
		<link>http://www.timendum.net/blog/608/twitter-fumetti-ansa/</link>
		<comments>http://www.timendum.net/blog/608/twitter-fumetti-ansa/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 09:49:31 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Creazioni]]></category>
		<category><![CDATA[Fumetti]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[bonelli]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[Marvel]]></category>
		<category><![CDATA[panini]]></category>
		<category><![CDATA[Planet Manga]]></category>
		<category><![CDATA[star comics]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=608</guid>
		<description><![CDATA[Come seguire le uscite dei fumetti su twitter, quali sono gli account di Panini, Marvel Italia, Planet Manga, Bonelli e Star Comics<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/53/fumetti-tramite-feed/' rel='bookmark' title='Fumetti tramite feed'>Fumetti tramite feed</a></li>
<li><a href='http://www.timendum.net/blog/101/nuovi-feed-per-i-fumetti/' rel='bookmark' title='Nuovi feed per i fumetti'>Nuovi feed per i fumetti</a></li>
<li><a href='http://www.timendum.net/blog/5/feed-per-i-fumetti-panini/' rel='bookmark' title='Feed per i fumetti Panini'>Feed per i fumetti Panini</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Un mio vecchio progetto, fin dal 2007 è quella di portare i fumetti nel web 2.0, perché gli editori sono fermi al 1990 e pensano che al massimo il web sia un forum o un posto dove vedere male il loro materiale, basta.</p>
<p style="text-align: center;">
<div class="wp-caption aligncenter" style="width: 490px"><a href="http://geekandpoke.typepad.com/geekandpoke/2008/08/the-obama-way.html"><img src="http://geekandpoke.typepad.com/geekandpoke/images/2008/08/24/theobamaway.jpg" alt="The obama way" width="480" height="343" /></a><p class="wp-caption-text">Vignetta di Geek and Poke</p></div>
<p>I nuovi media, twitter, facebook e simili sono sconosciuti agli editori, quindi iniziai il progetto fornendo feed rss per <a href="http://www.timendum.net/blog/101/nuovi-feed-per-i-fumetti/">Panini, Bonelli</a> e per <a href="http://www.timendum.net/blog/136/feed-anche-per-la-star-comics/">Star Comics</a>, ho deciso di prendere la palla al balzo e con l&#8217;introduzione dell&#8217;OAuth obbligatoria ho scritto un sistema per ripubblicare su alcuni account di Twitter le <strong>ultime uscite</strong> dei vari albi e fumetti:</p>
<blockquote><p><a href="https://twitter.com/Panini_Comics">Panini Comics</a><br />
<a href="https://twitter.com/Marvel_Italia">Marvel Italia</a><br />
<a href="https://twitter.com/planet_manga_it">Planet Manga</a><br />
<a href="https://twitter.com/Bonelli_Editore">Bonelli Editore</a><br />
<a href="https://twitter.com/Star_Comics">Star Comics</a></p></blockquote>
<p>Cogliendo l&#8217;occasione ho girato sullo stesso sistema anche l&#8217;account dell&#8217;<a href="https://twitter.com/ansa_it">Ansa</a>.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/53/fumetti-tramite-feed/' rel='bookmark' title='Fumetti tramite feed'>Fumetti tramite feed</a></li>
<li><a href='http://www.timendum.net/blog/101/nuovi-feed-per-i-fumetti/' rel='bookmark' title='Nuovi feed per i fumetti'>Nuovi feed per i fumetti</a></li>
<li><a href='http://www.timendum.net/blog/5/feed-per-i-fumetti-panini/' rel='bookmark' title='Feed per i fumetti Panini'>Feed per i fumetti Panini</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/608/twitter-fumetti-ansa/feed/</wfw:commentRss>
		<slash:comments>110</slash:comments>
		</item>
		<item>
		<title>Scopri e monitora le condivisioni su Facebook</title>
		<link>http://www.timendum.net/blog/571/scopri-monitora-condivisioni-facebook-share/</link>
		<comments>http://www.timendum.net/blog/571/scopri-monitora-condivisioni-facebook-share/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 16:09:47 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Creazioni]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[condividere]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[statistiche]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=571</guid>
		<description><![CDATA[Facebook ha finalmente rilasciato apertamente alcuni dati sulle condivisioni; in particolare quando condividi su Facebook un indirizzo (sia interno che esterno) viene monitorato quante volte d&#8217;ora in poi viene condiviso, cliccato, commentato e &#8220;mi piace&#8221;. Per questo ho creato una applicazione di una pagina, Facebook Share Counter che permette, per ogni articolo, video, immagine o [...]<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/512/esclusiva-il-futuro-di-facebook-username/' rel='bookmark' title='Esclusiva: il futuro di Facebook Username'>Esclusiva: il futuro di Facebook Username</a></li>
<li><a href='http://www.timendum.net/blog/304/elenco-completo-delle-faccine-della-chat-di-facebook/' rel='bookmark' title='Elenco completo delle faccine della chat di Facebook'>Elenco completo delle faccine della chat di Facebook</a></li>
<li><a href='http://www.timendum.net/blog/474/il-konami-code-funziona-su-facebook-google-reader-e-molti-altri-siti/' rel='bookmark' title='Il Konami Code funziona su Facebook, Google Reader e molti altri siti'>Il Konami Code funziona su Facebook, Google Reader e molti altri siti</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Facebook ha finalmente <a href="http://developers.facebook.com/news.php?blog=1&amp;story=323">rilasciato </a>apertamente alcuni dati sulle condivisioni; in particolare quando condividi su Facebook un indirizzo (sia interno che esterno) viene monitorato quante volte d&#8217;ora in poi viene condiviso, cliccato, commentato e &#8220;mi piace&#8221;.</p>
<p style="text-align: center;"><img class="aligncenter" title="Facebook share" src="http://lh5.ggpht.com/_ZGFbFEBH_-k/Su7Bd6QnRYI/AAAAAAAAAnI/clc36-IWVJE/s800/facebook-share.png" alt="" width="376" height="196" /></p>
<p><span id="more-571"></span></p>
<p>Per questo ho creato una applicazione di una pagina, <strong><a href="http://www.emetello.com/facebook-share-counter/">Facebook Share Counter</a></strong> che permette, per ogni articolo, video, immagine o indirizzo generico condiviso su Facebook, di conoscere queste <strong>statistiche</strong>:</p>
<ul>
<li><strong>quante volte è stato condiviso</strong></li>
<li>quante volte qualcuno ha <strong>cliccato </strong>&#8220;<em>mi piace</em>&#8220;</li>
<li><strong>quanti click</strong> sono avvenuti su questo elemento</li>
</ul>
<p>In questa maniera diventa facile per te sapere se una tua campagna ha prodotto <strong>risultati</strong> e quali!</p>
<p>Inoltre, come funzionalità aggiuntive, controlla sia lo stesso indirizzo due volte, una <strong>con la barra finale</strong> ed un&#8217;altra volta <strong>senza</strong> (es: <tt>www.google.com</tt> e <tt>www.google.com/</tt> ), sommando i risultati, per avere un dettaglio più preciso delle condivisioni.</p>
<p style="text-align: center;">
<div class="wp-caption aligncenter" style="width: 337px"><img title="Con e senza barra finale" src="http://lh5.ggpht.com/_ZGFbFEBH_-k/Su8DL0OK8MI/AAAAAAAAAnQ/BcqbrIJlBiM/s800/counter-senza-con-barra-finale.png" alt="I risultati sommati per la ricerca con e senza barra finale" width="327" height="134" /><p class="wp-caption-text">I risultati sommati per la ricerca con e senza barra finale</p></div>
<p>Infine, è possibile <strong>cercare anche ricorsivamente</strong> i percorsi a monte di un certo indirizzo, in modo che cercando per <tt>www.dominio.it/indirizzo/verso/il/contenuto</tt>, appaiano anche i risultati per</p>
<ul>
<li><tt>www.dominio.it/indirizzo/verso/il</tt></li>
<li><tt>www.dominio.it/indirizzo/verso</tt></li>
<li><tt>www.dominio.it/indirizzo/</tt></li>
<li><tt>www.dominio.it/</tt></li>
</ul>
<p>Ora hai quindi uno strumento a tutto tondo per misurare le possibilità e <strong>l&#8217;efficacia di marketing</strong> su Facebook.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/512/esclusiva-il-futuro-di-facebook-username/' rel='bookmark' title='Esclusiva: il futuro di Facebook Username'>Esclusiva: il futuro di Facebook Username</a></li>
<li><a href='http://www.timendum.net/blog/304/elenco-completo-delle-faccine-della-chat-di-facebook/' rel='bookmark' title='Elenco completo delle faccine della chat di Facebook'>Elenco completo delle faccine della chat di Facebook</a></li>
<li><a href='http://www.timendum.net/blog/474/il-konami-code-funziona-su-facebook-google-reader-e-molti-altri-siti/' rel='bookmark' title='Il Konami Code funziona su Facebook, Google Reader e molti altri siti'>Il Konami Code funziona su Facebook, Google Reader e molti altri siti</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/571/scopri-monitora-condivisioni-facebook-share/feed/</wfw:commentRss>
		<slash:comments>94</slash:comments>
		</item>
		<item>
		<title>Javascript in AJAX con Internet Explorer: l&#8217;attributo defer</title>
		<link>http://www.timendum.net/blog/517/javascript-ajax-internet-explorer-attributo-defer/</link>
		<comments>http://www.timendum.net/blog/517/javascript-ajax-internet-explorer-attributo-defer/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 12:27:37 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=517</guid>
		<description><![CDATA[Guida su come iniettare via innerHTML un elemento script con codice Javascript e farlo eseguire da Internet Explorer.<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/323/guida-installare-addon-greasemonkey-firefox-personalizzare-siti/' rel='bookmark' title='Guida per installare l&#8217;add-on Greasemonkey su Firefox per personalizzare siti internet'>Guida per installare l&#8217;add-on Greasemonkey su Firefox per personalizzare siti internet</a></li>
<li><a href='http://www.timendum.net/blog/146/errore-con-la-proprieta-css-sconosciuta-filter-opacity-e-trasparenza/' rel='bookmark' title='Errore con la proprietà CSS sconosciuta: filter, opacity e trasparenza'>Errore con la proprietà CSS sconosciuta: filter, opacity e trasparenza</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Spesso molti framework o anche applicazioni home-made, utilizzano l&#8217;attributo <em>innerHTML</em> per inserire le risposte <strong>AJAX</strong> del server nella pagina. Ma se questa risposta è dell&#8217;<strong>HTML </strong>che magari contiene uno script Javascript, <strong>Internet Explorer</strong> non vede e non esegue nulla.</p>
<p style="text-align: center;"><img class="aligncenter" title="AJAX e Internet Explorer" src="http://lh4.ggpht.com/_ZGFbFEBH_-k/Sj9x4scyD-I/AAAAAAAAAeI/fiByrfeiTT4/s800/ajax.png" alt="" width="400" height="202" /></p>
<p><span id="more-517"></span>Vediamo un esempio: questa semplice risposta del server deve essere inserita come HTML in un elemento del documento.<script type="text/javaScript" src="/blog/wp-content/uploads/chili/jquery.chili-2.2.js"></script>
<script type="text/javascript"> 
    ChiliBook.recipeFolder = "/blog/wp-content/uploads/chili/";  
</script></p>
<pre><code class="html">&lt;p&gt;Caricamento in corso&lt;/p&gt;
&lt;script type='text/javascript'&gt;
  alert('azione eseguita');
&lt;/script&gt;</code></pre>
<p>Verrebbe naturale caricare questo codice con <em>innerHTML</em>, ad esempio:</p>
<pre><code class="js">div.innerHTML = response;</code></pre>
<p>Chiaramente bisogna sempre assicurarsi che il codice sia valido e non suscettibile di <a href="http://it.wikipedia.org/wiki/Cross-site_scripting">XSS</a>, ma questo discorso esula dal presente articolo.</p>
<p>In ogni caso, Internet Explorer, NON eseguirà il codice né quindi visualizzerà l&#8217;alert; questo è un comportamento <a href="http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx">documentato</a> ma ugualmente molto noioso, perché difficile da ricordare e perché in altri browser, come Firefox, non si presenta.</p>
<p>La soluzione ha questo problema è specificare l&#8217;attributo <em>defer</em> all&#8217;elemento script, facendolo diventare così:</p>
<pre><code class="html">&lt;p&gt;Caricamento in corso&lt;/p&gt;
&lt;script type='text/javascript' defer='defer'&gt;
  alert('azione eseguita');
&lt;/script&gt;</code></pre>
<p>Solo in questo modo IE interpreterà correttamente lo script e lo eseguirà alla fine della chiamata <em>innerHTML</em>.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/323/guida-installare-addon-greasemonkey-firefox-personalizzare-siti/' rel='bookmark' title='Guida per installare l&#8217;add-on Greasemonkey su Firefox per personalizzare siti internet'>Guida per installare l&#8217;add-on Greasemonkey su Firefox per personalizzare siti internet</a></li>
<li><a href='http://www.timendum.net/blog/146/errore-con-la-proprieta-css-sconosciuta-filter-opacity-e-trasparenza/' rel='bookmark' title='Errore con la proprietà CSS sconosciuta: filter, opacity e trasparenza'>Errore con la proprietà CSS sconosciuta: filter, opacity e trasparenza</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/517/javascript-ajax-internet-explorer-attributo-defer/feed/</wfw:commentRss>
		<slash:comments>103</slash:comments>
		</item>
		<item>
		<title>Disabilitare la revisione degli articoli in WordPress</title>
		<link>http://www.timendum.net/blog/265/disabilitare-la-revisione-degli-articoli-in-wordpress/</link>
		<comments>http://www.timendum.net/blog/265/disabilitare-la-revisione-degli-articoli-in-wordpress/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 13:53:56 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Vita sul web]]></category>
		<category><![CDATA[Blog e blogsfera]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[ottimizzazione]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=265</guid>
		<description><![CDATA[Wordpress salva molte versioni di ogni post, una per ogni salvataggio: come evitare e come cancellare per ridurre il peso del database e velocizzare il blog<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/130/aggiornato-a-wordpress-25-con-mini-guida/' rel='bookmark' title='Aggiornato a WordPress 2.5 con mini-guida'>Aggiornato a WordPress 2.5 con mini-guida</a></li>
<li><a href='http://www.timendum.net/blog/96/tag-per-wordpress-23/' rel='bookmark' title='Tag per WordPress 2.3'>Tag per WordPress 2.3</a></li>
<li><a href='http://www.timendum.net/blog/95/aggiornato-a-wordpress-23-con-guida/' rel='bookmark' title='Aggiornato a WordPress 2.3 con Guida'>Aggiornato a WordPress 2.3 con Guida</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Dalla versione 2.6 WordPress ha introdotto una nuova funzionalità chiamata <strong>Post Revisions</strong>, una sorta di controllo delle versioni wiki-like, molto utile in caso di blog multi autore, in modo da poter controllare le differenze tra differenti versioni dello stesso articolo. Questo chiaramente porta ad un aumento dei dati e un rallentamento di WordPress, soprattutto con molti articoli.</p>
<p>Se, come per me, il blog è mono utente e non c&#8217;è interesse verso questa feature (che in effetti permette anche di recuperare una versione precedente), c&#8217;è un semplice modo per <strong>disabilitarla </strong>e una piccola query per <strong>pulire</strong> dalle vecchie revisioni <strong>il database</strong>. Per esperienza, su un blog con quasi 250 articoli, il backup del database pesava circa 3,2 Mb prima, cancellando le revisioni si è arrivati a 1,3 Mb, <strong>meno della metà</strong>!</p>
<p><span id="more-265"></span></p>
<div class="wp-caption aligncenter" style="width: 504px"><img title="Revisione dei post" src="http://i237.photobucket.com/albums/ff314/timendum/revisioni-1.png" alt="Un post con cinque revisioni" width="494" height="252" /><p class="wp-caption-text">Un post con cinque revisioni</p></div>
<h3>Disabilitare le revisioni degli articoli</h3>
<p>Primo passo per velocizzare e ottimizzare il nostro WordPress, almeno in scrittura, consiste nel disabilitare questa funzionalità, modificando un file di configurazione;  purtroppo non esiste, anche se secondo me dovrebbe, un&#8217;opzione nel pannello amministrativo per farlo.</p>
<p>Con un programma FTP scaricare il file <em>wp-config.-php </em>sul proprio computer, si trova nella stessa cartella in cui è stato caricato WordPress stesso, per capirci dove ci sono le cartelle <em>wp-includes</em>, <em>wp-content</em>, eccetera.</p>
<p>Aprilo con il Blocco Note e dopo la riga che inizia per</p>
<pre style="padding-left: 30px;">define ('WPLANG',</pre>
<p>inserisci la seguente riga</p>
<pre style="padding-left: 30px;">define('WP_POST_REVISIONS', false);</pre>
<p>Questo impedirà d&#8217;ora in avanti a WordPress di salvare nuove revisioni.</p>
<h3>Cancellare le vecchie revisioni</h3>
<p>Rimangono però le revisioni che WordPress ha salvato fino ad ora, che vanno cancellarle. Non è poca roba, pensa che se hai salvato ogni articolo in media 2 volte, lo spazio per gli articoli e i dati correlati è grande il TRIPLO di quanto dovrebbe.</p>
<p>Per questo passo è necessario eseguire una query, cioè un comando mySQL, solitamente i provider mettono a disposizione un&#8217;interfaccia, come phpMyAdmin o simili; se utilizzi proprio phpMyAdmi, dopo aver selezionato il database corretto, clicca sulla tab SQL, qui immettere il comando, trovato sul blog di <a href="http://blog.andreineculau.com/2008/07/delete-wordpress-26-revisions/">Andrei Neculau</a>, sql:</p>
<p style="padding-left: 30px;">DELETE a, b, c<br />
FROM wp_posts a<br />
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)<br />
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)<br />
WHERE a.post_type = &#8216;revision&#8217;</p>
<p>Tutto su una riga oppure con gli &#8220;a capo&#8221;, non fa differenza.</p>
<p>Fatto questo Wordpres è pronto e pulito per essere più veloce e snello.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/130/aggiornato-a-wordpress-25-con-mini-guida/' rel='bookmark' title='Aggiornato a WordPress 2.5 con mini-guida'>Aggiornato a WordPress 2.5 con mini-guida</a></li>
<li><a href='http://www.timendum.net/blog/96/tag-per-wordpress-23/' rel='bookmark' title='Tag per WordPress 2.3'>Tag per WordPress 2.3</a></li>
<li><a href='http://www.timendum.net/blog/95/aggiornato-a-wordpress-23-con-guida/' rel='bookmark' title='Aggiornato a WordPress 2.3 con Guida'>Aggiornato a WordPress 2.3 con Guida</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/265/disabilitare-la-revisione-degli-articoli-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>81</slash:comments>
		</item>
		<item>
		<title>Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime</title>
		<link>http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/</link>
		<comments>http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 15:32:37 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[sessioni]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=201</guid>
		<description><![CDATA[Come prolungare o impostare la durata delle sessioni, in particolare via cookie, di PHP tramite session gc_maxlifetime e cookie_lifetime.<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/' rel='bookmark' title='Consigli per script PHP più veloci'>Consigli per script PHP più veloci</a></li>
<li><a href='http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/' rel='bookmark' title='Forzare o bufferizzare l&#8217;output in php'>Forzare o bufferizzare l&#8217;output in php</a></li>
<li><a href='http://www.timendum.net/blog/72/accorciare-le-url/' rel='bookmark' title='Accorciare le url'>Accorciare le url</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Quando sto creando un sito in PHP,  che richiede autenticazione o in ogni caso una gestione delle sessioni, è sempre importante stabilire quanto una sessione dura, perché la cosa più fastidiosa è trovarsi buttato fuori da un sistema, solo perché ci si è allontatati dalla postazione oppure si è ricevuta una telefontata.</p>
<div class="wp-caption aligncenter" style="width: 383px"><img title="Sessione scaduta" src="http://i237.photobucket.com/albums/ff314/timendum/sessione-scaduta.png" alt="Sessione scaduta... dannazione!" width="373" height="125" /><p class="wp-caption-text">Dannazione!</p></div>
<p>In questo articolo spiegherò come impostare i giusti settaggi di PHP, preferibilmente nel file <em>/etc/php5/cgi/php.ini</em> oppure tramite il comando <a title="Guida ufficiale" href="http://it.php.net/ini_set">ini_set</a>.</p>
<p><span id="more-201"></span></p>
<p>Il primo settaggio da impostare è <strong><span class="norm"><span class="norm">session.cookie_lifetime</span></span></strong>, che specifica QUANTO un cookie deve durare sulla macchina del visitatore, misurato in secondi; di default è impostato a 0, che non significa per sempre, ma piuttosto fino a quando il browser non viene chiuso. Dei valori di riferimento sono: 3600 = 1 ora; 28800 = 8 ore; 86400 = un giorno.</p>
<p>Per impostare questo parametro, o si edita il file <em>etc/php5/cgi/php.ini</em> oppure si utilizza la funzione, se abilitata, <em>ini_set(&#8216;session.cookie_lifetime&#8217;, 3600)</em>.</p>
<p>Fatto questo, passiamo a <strong>session.gc_maxlifetime</strong>, che stabilisce quanto una sessione dura sul server, cioè dopo quanti secondi il nostro fido PHP butta via una sessione che non ha aggiornato dati. Il paramentro è più subdolo di quanto possa sembrare, perché una sessione creata alle 8:00, viene considerata vecchia di 10 minuti già alle 8:10 anche se l&#8217;utente continua a visitare il sito, se nessun dato dell&#8217;array <em>$SESSION</em> viene aggiornato, quindi sta a te stabilire da quanto considerare una sessione scaduta, se dalla sua creazione/ultimo aggiornamento <span style="text-decoration: underline;">reale</span>, oppure se dall&#8217;ultima visita, in questo caso, ad esempio incremetare una variabile dummy ad ogni pagina, con il comando <em>$SESSION['keepailve']++</em> dopo esserti ricordato di inizializzare <em>keepalive</em> alla creazione della sessione.</p>
<p>In ogni caso, questo parametro non andrà MAI oltre quello precedente, quindi se alzi <em>maxlifetime</em>, devi ricordarti di fare altrettanto con <em>cookie_lifetime</em>.</p>
<p>Inoltre, di base, in ogni sistema basato su Debian (quindi ad esempio Ubuntu), il garbage collector gira ogni 30 minuti, non più spesso, quindi non è detto che un cookie impostato per durare 2 minuti duri veramene 2 minuti, perché se il garbage collector passa e subito dopo dovrebbe scadere la sessione, scardrà solo 29 minuti più tardi, perché nessuno si accorge della scadenza se non ogni mezz&#8217;ora.</p>
<p>Per risolvere questo problema, bisogna modificare il file <em>/etc/cron.d/php5</em> con i permessi di super utente, la prima riga non commentata, cioè che non inizia con #, dovrebbe essere circa:</p>
<pre>09,39 *     * * *     root   .....</pre>
<p>Questo indica che il garbage collector gira alle 09 e alle 39 di ogni ora, per farlo girare più spesso (meno spesso non lo consiglio), basta mettere l&#8217;elenco, separato da virgole, dei minuti in cui far accadere il controllo. Ad esempio</p>
<pre>4,9,14,19,24,29,34,39,44,49,54,59</pre>
<p>facendo diventare la riga:</p>
<pre>4,9,14,19,24,29,34,39,44,49,54,59 *     * * *     root   .....</pre>
<p>Esegue il controllo ogni 5 minuti.</p>
<p>(Grazie a <a href="http://disqus.com/people/nulll/">nulll</a> per questi dettagli e l&#8217;indagine approfondia svolta!)</p>
<p><strong>Queste impostazioni che seguono teoricamente servono, ma in pratica non vengono utilizzate.</strong></p>
<p>Ora veniamo al bello, da solo il parametro <em>maxlifetime</em> non basta, perché PHP non passa ogni istante, per fortuna del tuo server, a controllare quali sessioni buttare, altrimenti il carico diventa eccessivo, piuttosto ha una data probabilità di farlo ad ogni pagina generata. I parametri sono <strong>session.gc_probability</strong> e <strong>session.gc_divisor</strong>. Immaginiamo di averli impostati a:</p>
<pre style="padding-left: 30px;">session.gc_probability = 7
session.gc_divisor = 80</pre>
<p>Bene, allora per ogni pagina visitata, PHP controllerà (o meglio lo farà il Garbage Collector, ma questo è un dettaglio) tutte le sessioni valide, con una probabilità di 7 su 80 = 7/80 = 0.0875</p>
<p>Io ti consiglio di lasciare le impostazioni di base, cioè rispettivamente 1 e 100, ma dipende solamente dal server e dalle pageviews del tuo sito.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/' rel='bookmark' title='Consigli per script PHP più veloci'>Consigli per script PHP più veloci</a></li>
<li><a href='http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/' rel='bookmark' title='Forzare o bufferizzare l&#8217;output in php'>Forzare o bufferizzare l&#8217;output in php</a></li>
<li><a href='http://www.timendum.net/blog/72/accorciare-le-url/' rel='bookmark' title='Accorciare le url'>Accorciare le url</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
		</item>
		<item>
		<title>Migliorare il codice Javascript: indentazione, spazi, tabulazione, a capo e formattazioni</title>
		<link>http://www.timendum.net/blog/148/migliorare-il-codice-javascript-indentazione-spazi-tabulazione-a-capo-e-formattazioni/</link>
		<comments>http://www.timendum.net/blog/148/migliorare-il-codice-javascript-indentazione-spazi-tabulazione-a-capo-e-formattazioni/#comments</comments>
		<pubDate>Thu, 29 May 2008 15:41:25 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[compressione]]></category>
		<category><![CDATA[consigli]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[scrittura]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=148</guid>
		<description><![CDATA[Come migliorare la leggibilità del codice Javascript: sistemare l'indentazione tramite spazi bianchi e tabulazione (tab), evidenziare il codice e poi comprimere<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/23/migliorare-firefox-ram/' rel='bookmark' title='Migliorare Firefox: RAM'>Migliorare Firefox: RAM</a></li>
<li><a href='http://www.timendum.net/blog/40/tavolozza-dei-colori-in-javascript/' rel='bookmark' title='Tavolozza dei colori in Javascript'>Tavolozza dei colori in Javascript</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Solitamente scrivo io il codice che devo poi mantenere, ma capita di prendere altri programmi oppure semplicemente di voler curiosare; o anche di aver scritto un po&#8217; di righe velocemente, senza prestare troppa attenzione e poi volerle espandere. In tutti questi casi il codice scritto deve essere ben indentato e formattato.</p>
<p style="text-align: center;"><img src="http://i237.photobucket.com/albums/ff314/timendum/code.png" alt="Codice" width="430" height="330" /></p>
<p style="text-align: center;"><em>Immagine di <a href="http://www.sxc.hu/photo/150038">dermiller</a></em></p>
<p>Per <strong>indentazione</strong> si intende l&#8217;uso degli spazi bianchi o della tabulazione, per allineare il codice in base al flusso e alle strutture del linguaggio come blocchi o istruzioni di controllo. Per parlare chiaro, questo è codice indentato.</p>
<pre style="padding-left: 30px;">if (condizione == true)
    esegui();
else
    exit;</pre>
<p>Questo è indentato con gli spazi (nel numero di 4), questo metodo di scrittura rende più semplice la lettura del codice, perché seguire il flusso logico del codice è più semplice, diventa chiaro che <em>esegui</em> dipende dalla condizione precedente.</p>
<p><span id="more-148"></span></p>
<pre style="padding-left: 30px;">if (condizione == true)
esegui();
else
exit;</pre>
<p>Questo codice sopra è chiaramente molto meno semplice da leggere, è necessario sforzarsi molto di più per capire come funziona.</p>
<h2>Indentazione</h2>
<p>Alcuni editor hanno già in loro la funzionalità per &#8220;rendere bello&#8221; il nostro codice, strumenti chiamati solitamente <em>auto-indenter</em>, ma io non mi sono mai trovato bene, poi ognuno usa il suo e difficilmente cambierà per una funzione simile, almeno io non lo farei. Per questo vi consiglio questo tool: <a href="http://elfz.laacz.lv/beautify/"><strong>Online beautifuller</strong></a>. Ha proprio questa funzione, tutto con un unico click, inoltre utilizza il io stesso stile di indentazione, a volte chiamato K&amp;R, dal nome dei famosi Kernighan e Ritchie, inventori del C. La scelta tra spazi e tabulazione è lasciata all&#8217;utente.</p>
<h2>Formattazione</h2>
<p>Un altro strumento utile, da utilizzare successivamente è <a href="http://tohtml.com/jScript/">Online syntax highlighting</a>. Questo formatta in codice, lo colora in particolare, in modo da evidenziare le parole chiave, quasi tutti gli editor lo fanno già da loro, se il tuo non lo fa, ti consiglio di cambiarlo :P</p>
<p style="text-align: center;"><img class="aligncenter" src="http://i237.photobucket.com/albums/ff314/timendum/codice.png" alt="Codice evidenziato" width="450" height="305" /></p>
<p>La sua utilità principale è per chi intende pubblicare codice online, perché fornisce l&#8217;HTML da inserire nelle pagine. Ricordarsi sempre di selezionare <em>Javascript</em> a sinistra, altrimenti non funzionerà benissimo!</p>
<h2>Minimizzare e compattare</h2>
<p>Ultime note su come disfare il lavoro fatto, molte volte si rivela utile anche questo, ma solo in fase finale. Il codice Javascript non viene compilato, ma gira così come lo scriviamo, quindi sicuramente leggibile, ma non compatto, mentre le pagine web devono essere il più leggere possibili. Sono stati creati quindi questi strumenti che minimizzano e compattano il codice, fino al minimo indispensabile e anche oltre volendo (restringendo anche i nomi delle variabili per esempio).</p>
<p><a href="http://fmarcia.info/jsmin/test.html">JS Minifier</a>: forse uno dei migliori, permette la scelta anche di quanto comprimere.</p>
<p><a href="http://www.brainjar.com/js/crunch/demo.html">BrainJar</a>: uno dei primi e ancora buoni, servizi simili.</p>
<p><a href="http://dean.edwards.name/packer/">Packer</a>: semplice semplice, ma efficace.</p>
<p><a href="http://joliclic.free.fr/php/javascript-packer/en/">PHP Packer</a>: script in PHP, da usare anche in locale.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/23/migliorare-firefox-ram/' rel='bookmark' title='Migliorare Firefox: RAM'>Migliorare Firefox: RAM</a></li>
<li><a href='http://www.timendum.net/blog/40/tavolozza-dei-colori-in-javascript/' rel='bookmark' title='Tavolozza dei colori in Javascript'>Tavolozza dei colori in Javascript</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/148/migliorare-il-codice-javascript-indentazione-spazi-tabulazione-a-capo-e-formattazioni/feed/</wfw:commentRss>
		<slash:comments>89</slash:comments>
		</item>
		<item>
		<title>Forzare o bufferizzare l&#8217;output in php</title>
		<link>http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/</link>
		<comments>http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/#comments</comments>
		<pubDate>Tue, 20 May 2008 10:26:17 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=147</guid>
		<description><![CDATA[Come forzare l'output dei vari comandi echo, print, eccetera, per visualizzare immediatamente quello scritto in PHP; inoltre, come bufferizzare l'output per ...<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/' rel='bookmark' title='Consigli per script PHP più veloci'>Consigli per script PHP più veloci</a></li>
<li><a href='http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/' rel='bookmark' title='Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime'>Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime</a></li>
<li><a href='http://www.timendum.net/blog/369/dreamhost-promo-code-hosting-php-mysql-illimitato-sconto/' rel='bookmark' title='Dreamhost promo code: ottenere un hosting PHP+mySQL, spazio illimitato, a solo 22 dollari per un anno'>Dreamhost promo code: ottenere un hosting PHP+mySQL, spazio illimitato, a solo 22 dollari per un anno</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Mi è capitato in questi giorni di scrivere una pagina di PHP con una query mySQL piuttosto onerosa (si trattava di importare un file csv di decine di migliaia di righe); normalmente il browser dell&#8217;utente visualizza una bella pagina bianca in caricamento, questo perché PHP non mostra subito l&#8217;output, ma lo memorizza in un buffer e (a meno che non si riempia), mostra la pagina solo a caricamento completato.</p>
<p style="text-align: center;"><img src="http://i237.photobucket.com/albums/ff314/timendum/caricamento.png" alt="Caricamento in corso..." width="516" height="369" /></p>
<h3>Forzatura dell&#8217;output</h3>
<p>È possibile fare in modo che tutto l&#8217;output genereato, tramite <em>echo </em>o <em>print </em>per esempio, venga restituito subito all&#8217;utente e quindi mostrato nel browser. L&#8217;istruzione, semplicissima, è</p>
<p style="padding-left: 30px;"><code>flush()</code></p>
<p>La documentazione si trova come al solito sul sito di php, <a href="http://it.php.net/manual/it/function.flush.php">flush</a>.</p>
<p><span id="more-147"></span></p>
<p>Un possibile utilizzo è prima di un ciclo esoso, di una chiamata esterna oppure di una query mySQL, ad esempio</p>
<p style="padding-left: 30px;"><code>echo "&lt;p&gt;Esecuzione di $max importazioni...&lt;/p&gt;";<br />
flush();<br />
for (var $i=0; $i &lt; %max; $i++)<br />
Mysql_query("LOAD DATA LOCAL INFILE...");</code></p>
<p>Questo codice avverte l&#8217;utente dell&#8217;importazione in modo che la sua attesa sia meno sgradita.</p>
<h3>Bufferizzazione</h3>
<p>Al contrario della forzatura sopra esposta, solitamente è consigliabile mantere l&#8217;output in un buffer e inviarlo all&#8217;utente solo in determinati momenti, questo perché forzare l&#8217;output con il <em>flush</em> impone al server una transizione attiva HTTP, con relativo scambio di dati, effettuarne di meno risparmia risorse al server e all&#8217;utente, inoltre è un altro ottimo consiglio per <a href="http://www.timendum.net/blog/argomenti/programmazione/php/140/consigli-per-script-php-piu-veloci/">velocizzare il php</a>.</p>
<p>I comandi che permettono di svolgere questa attività sono: <span class="methodname"><strong><strong>ob_start</strong></strong>, </span><span class="methodname"><strong><strong>ob_flush</strong></strong>.</span></p>
<p>La prima inizializza il buffer (infatti <strong>ob</strong> sta per <strong>O</strong>utput <strong>B</strong>uffer), il secondo invia il contenuto del buffer all&#8217;utente, in modo che inizi a visualizzare la pagina.</p>
<p>Utilizzare queste funzioni, nelle pagine molto estese, velocizza la pagina e non a caso vengono utilizzate in tutte le maggiori piattaforme: WordPress, phpbb, eccetera.</p>
<p>Per una trattazione più estesa, consiglio l&#8217;articolo di <a href="http://php.html.it/articoli/leggi/847/le-funzioni-di-controllo-delloutput/">HTML.it</a> e <a href="http://hudzilla.org/phpwiki/index.php?title=Output_buffering">Pratical PHP Programming</a>.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/' rel='bookmark' title='Consigli per script PHP più veloci'>Consigli per script PHP più veloci</a></li>
<li><a href='http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/' rel='bookmark' title='Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime'>Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime</a></li>
<li><a href='http://www.timendum.net/blog/369/dreamhost-promo-code-hosting-php-mysql-illimitato-sconto/' rel='bookmark' title='Dreamhost promo code: ottenere un hosting PHP+mySQL, spazio illimitato, a solo 22 dollari per un anno'>Dreamhost promo code: ottenere un hosting PHP+mySQL, spazio illimitato, a solo 22 dollari per un anno</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/feed/</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>Consigli per script PHP più veloci</title>
		<link>http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/</link>
		<comments>http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 19:48:10 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[consigli]]></category>
		<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=140</guid>
		<description><![CDATA[Alcuni utili consigli su come ottimizzare e quindi velocizzare gli script in PHP: meno chiamate a funzioni nei cicli, ordine nelle condizioni, virgolette, ...<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/88/shortcut-preferiti-ancora-piu-veloci/' rel='bookmark' title='Shortcut: preferiti ancora più veloci'>Shortcut: preferiti ancora più veloci</a></li>
<li><a href='http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/' rel='bookmark' title='Forzare o bufferizzare l&#8217;output in php'>Forzare o bufferizzare l&#8217;output in php</a></li>
<li><a href='http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/' rel='bookmark' title='Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime'>Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Oggi ho letto il <a href="http://antirez.com/post/what-we-lost.html">post</a> di antirez su cosa era e invece cosa è importante ora per la programmazione, quando si fa moltissimo scripting in PHP ad esempio, e pochissima &#8220;vera&#8221; programmazione in C o simili. In particolare è diventato più utile ottimizzare in modo anche &#8220;sporco&#8221; le righe di codice, piuttosto che sapere qual&#8217;è l&#8217;algoritmo più efficiente per affrontare un problema, perché questo secondo tipo di codice è molto meno utilizzato oggi, quando spopolano le web-application.</p>
<p>Quindi ho deciso di prendere spunto <a href="http://bitfilm.net/2007/08/24/tips-for-faster-php-scripts/" target="_blank">da</a> <a href="http://bitfilm.net/2007/09/07/more-tips-for-faster-php-scripts/" target="_blank">tre</a> <a href="http://bitfilm.net/2007/11/27/even-more-tips-for-faster-php-scripts/" target="_blank">articoli</a> che trovai tempo fa su come ottimizzare la scrittura di codice PHP, verificare, e spiegarli.</p>
<h3>Consigli generici: meno chiamate a funzioni</h3>
<p>Sempre, sempre, sempre, fare meno chiamate possibili alle funzioni, questa deve essere una regola generale, sempre meglio tenere in memoria una variabile in più (che poi andrà distrutta con unset). Il classico esempio <strong>non</strong> è inserire una chiamata all&#8217;interno di un ciclo, ma all&#8217;esterno oppure dentro la prima clausola di un for</p>
<pre>for($a = 0; $a &lt; sizeof($array); $a++)</pre>
<p>Questo va malissimo, piuttosto meglio</p>
<pre>$max = sizeof($array);
for($a = 0; $a &lt; $max; $a++) {
...
}
unset($max);</pre>
<p>Oppure più carino</p>
<pre>for($a = 0, $max = sizeof($array); $a &lt; $max; $a++) {
...
}
unset($max);</pre>
<h3>Consigli generici: ordine nelle condizioni</h3>
<p>Quando si controllano più condizioni tra loro è importante farlo nell&#8217;ordine giusto e con gli operatori logici giusti.</p>
<p><span id="more-140"></span></p>
<p>Ad esempio usando <code>||</code> e <code>&amp;&amp;</code> al posto dei semplici <code>|</code> e <code>&amp;</code>, i primi hanno il vantaggio di terminare il controlla appena le condizioni non sono verificabili, quindi se controlliamo che <code>($var1 &amp;&amp; $var2)</code>, se già la prima condizione è falsa, non sarà valutata la seconda facendo risparmiare tempo macchina.</p>
<p>Grazie a questo principio, è possibile velocizzare il codice valutando le condizioni nell&#8217;ordine giusto, cioè nel caso di una condizione <code>($var1 || $var2) </code>è preferibile mettere come prima condizione quella che più spesso viene verificata.</p>
<h3>Usare funzioni più semplici possibili</h3>
<p>PHP mette a disposizione diverse funzioni che fanno a prima vista la stessa cosa, ma in modo diverso; ad esempio per sostituire pezzi di stringhe, ci sono <code>ereg_replace, preg_replace</code> e <code>str_replace</code> ma sono diverse tra loro, in particolare le prime due sfruttano le Espressioni Regolari, mentre la seconda cerca stringe semplici; ovviamente utilizzare quest&#8217;ultima rende il codice molto più veloce, di almeno la metà, dipende dalla complessità della RegExp.</p>
<p>Allo stesso modo le funzioni <code>explode</code> è più veloce di <code>split</code>, visto che anch&#8217;essa sfrutta le espressioni regolari.</p>
<p>Infine consiglio di utilizzare <code>time()</code> al posto di  <code>date('U')</code>, in quanto la mancanza di parametri rende la prima molto più rapida e leggera.</p>
<p>Conta pochissimo invece utilizzare le virgolette singole <code>'stringa'</code> al posto di quelle doppie <code>"stringa"</code>, la differenza, per chi non lo sapesse, è che se una variabile appare tra due virgolette doppie viene sostituita, con le singole no; ma la differenza è talmente minima che non vale la pena di fare salti mortali per controllare tutto il codice, se scappa una virgoletta doppia (magari anche perché vogliamo inserire un codice ascii come <code>\n</code>), è un errore perdonabile.</p>
<h3>Consigli che non vale la pena di seguire</h3>
<p>Gli articoli che ho citato si perdono purtroppo anche in alcuni consigli un approssimativi o poco approfonditi, che non vale la pena di seguire.</p>
<p>In particolare sembra che utilizzare <code>===</code> al posto di <code>==</code> dia alcuni vantaggi, ma in realtà non è proprio così, solo in alcuni casi. Il secondo operatore infatti controlla prima che i due oggetti siano dello stesso tipo, mentre il primo cerca di converti nello stesso tipo. In particolare:</p>
<p style="padding-left: 30px;"><code>('22' == 22)</code> è <code>VERO</code><br />
<code>('22' === 22)</code> è <code>FALSO</code></p>
<p>Ho verificato che confrontando stringhe uguali, non ci sono miglioramenti sensibili scambiando  <code>==</code> con <code>===</code> .</p>
<p>Stesso discorso per le funzioni <code>ctype_digit</code> e <code>is_numeric</code>, che tra loro sono differenti: la prima verifica se in una stringa sono scritte solo cifre, mentre la seconda controlla se un oggetto è di tipo numerico (un <code>int</code>, <code>float</code>, etc) oppure se è una stringa che rappresenta un numero, prendendo quindi per buono il valore <code>"</code><code><span class="html"><span class="string">0.12</span></span></code><code>"</code>, per cui la <code>ctype_digit</code> restituirebbe falso.</p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/88/shortcut-preferiti-ancora-piu-veloci/' rel='bookmark' title='Shortcut: preferiti ancora più veloci'>Shortcut: preferiti ancora più veloci</a></li>
<li><a href='http://www.timendum.net/blog/147/forzare-o-bufferizzare-loutput-in-php/' rel='bookmark' title='Forzare o bufferizzare l&#8217;output in php'>Forzare o bufferizzare l&#8217;output in php</a></li>
<li><a href='http://www.timendum.net/blog/201/prolungare-o-accorciare-le-durate-delle-sessioni-cookie-con-php-session-gc_maxlifetime-e-lifetime/' rel='bookmark' title='Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime'>Prolungare o accorciare le durate delle sessioni cookie con PHP: session, gc_maxlifetime e lifetime</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/140/consigli-per-script-php-piu-veloci/feed/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>Feed anche per la Star Comics</title>
		<link>http://www.timendum.net/blog/136/feed-anche-per-la-star-comics/</link>
		<comments>http://www.timendum.net/blog/136/feed-anche-per-la-star-comics/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 15:35:51 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Creazioni]]></category>
		<category><![CDATA[Fumetti]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[novità]]></category>
		<category><![CDATA[star comics]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/?p=136</guid>
		<description><![CDATA[Grazie ad una amica (Federica) mi sono mosso e oggi ho sistemato finalmente il feed per la Star Comics, casa editrice che ammetto di seguire poco. Già che c&#8217;ero ho migliorato gli altri feed e creato una pagina per tutti i Feed per i fumetti. Feed Star Comics Ti potrebbe interessare... Fumetti tramite feed Feed [...]<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/53/fumetti-tramite-feed/' rel='bookmark' title='Fumetti tramite feed'>Fumetti tramite feed</a></li>
<li><a href='http://www.timendum.net/blog/94/feed-panini-aggiornati/' rel='bookmark' title='Feed Panini aggiornati'>Feed Panini aggiornati</a></li>
<li><a href='http://www.timendum.net/blog/101/nuovi-feed-per-i-fumetti/' rel='bookmark' title='Nuovi feed per i fumetti'>Nuovi feed per i fumetti</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Grazie ad una amica (Federica) mi sono mosso e oggi ho sistemato finalmente il feed per la <a href="http://starcomics.it/uscite.php">Star Comics</a>, casa editrice che ammetto di seguire poco.</p>
<p>Già che c&#8217;ero ho migliorato gli altri feed e creato una pagina per tutti i <a href="http://www.timendum.net/blog/produzioni/feed-per-fumetti/">Feed per i fumetti</a>.</p>
<p style="padding-left: 30px;"><em><strong><a href="http://feeds.timendum.net/StarComics">Feed Star Comics</a></strong></em></p>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/53/fumetti-tramite-feed/' rel='bookmark' title='Fumetti tramite feed'>Fumetti tramite feed</a></li>
<li><a href='http://www.timendum.net/blog/94/feed-panini-aggiornati/' rel='bookmark' title='Feed Panini aggiornati'>Feed Panini aggiornati</a></li>
<li><a href='http://www.timendum.net/blog/101/nuovi-feed-per-i-fumetti/' rel='bookmark' title='Nuovi feed per i fumetti'>Nuovi feed per i fumetti</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/136/feed-anche-per-la-star-comics/feed/</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
		<item>
		<title>Lettere scombinate</title>
		<link>http://www.timendum.net/blog/107/lettere-scombinate/</link>
		<comments>http://www.timendum.net/blog/107/lettere-scombinate/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 17:45:16 +0000</pubDate>
		<dc:creator>timendum</dc:creator>
				<category><![CDATA[Creazioni]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[lingua]]></category>
		<category><![CDATA[passatempo]]></category>

		<guid isPermaLink="false">http://www.timendum.net/blog/fonti/produzioni/107/lettere-scombinate/</guid>
		<description><![CDATA[Nota: se non capisci niente o non vuoi fare fatica, alla fine trovi la traduzione Gira ormai da tntissaimo tmepo la mial srctita tttua cmoe qeusto artoiclo cioè con le lterete di ogni polraa mhiicsate, eucslse la pmria e l&#8217;umlita. Ebenbe, gaizre alla REgexp per iavddiirune le poalre apenpa vsita e alla fonunize per msrhicaie [...]<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/65/aggiungere-e-togliere-classi-css-toggleclassname/' rel='bookmark' title='Aggiungere e togliere Classi CSS: toggleClassName'>Aggiungere e togliere Classi CSS: toggleClassName</a></li>
<li><a href='http://www.timendum.net/blog/71/gaialuna-avevo-previsto-bene/' rel='bookmark' title='GaiaLuna: avevo previsto bene'>GaiaLuna: avevo previsto bene</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><em>Nota: se non capisci niente o non vuoi fare fatica, alla fine trovi la traduzione</em></p>
<p>Gira ormai da tntissaimo tmepo la mial srctita tttua cmoe qeusto artoiclo cioè con le lterete di ogni polraa mhiicsate, eucslse la pmria e l&#8217;umlita. Ebenbe, gaizre alla <a href="/blog/argomenti/programmazione/javascript/106/parole-w-nelle-regular-expression/">REgexp per iavddiirune le poalre</a> apenpa vsita e alla fonunize per <a href="/blog/fonti/produzioni/66/mischiare-un-array-mix/">msrhicaie un array</a>, ho deciso di inrmlepamete un &#8220;misciothare&#8221; di prlaoe.</p>
<form action="#"> <textarea id="miscinp" cols="50" rows="10" name="input">Scrivi qui il tuo testo di prova.</textarea></p>
<input id="buttin" name="buttinp" type="button" value="Mischia!" /><textarea id="miscout" cols="50" rows="10" name="output">Qui apparirà il risultato</textarea><br />
<script src="/blog/wp-content/uploads/mischia.js" type="text/javascript"><!--
;
// --></script></p>
<p><strong>Traduzione:</strong>Gira ormai da tantissimo tempo la mail scritta tutta come questo articolo cioè con le lettere di ogni parola mischiate, escluse la prima e l&#8217;ultima. Ebbene, grazie alla <a href="/blog/argomenti/programmazione/javascript/106/parole-w-nelle-regular-expression/">RegExp per individuare le parole</a> appena vista e alla funzione per <a href="/blog/fonti/produzioni/66/mischiare-un-array-mix/">mischiare un array</a>, ho deciso di implementare un &#8220;mischiatore&#8221; di parole.</p>
</form>
<h4>Ti potrebbe interessare...</h4><ul class="st-related-posts">
<li><a href='http://www.timendum.net/blog/106/parole-w-nelle-regular-expression/' rel='bookmark' title='Parole (\w+) con lettere accentate nelle regular expression Javascript'>Parole (\w+) con lettere accentate nelle regular expression Javascript</a></li>
<li><a href='http://www.timendum.net/blog/65/aggiungere-e-togliere-classi-css-toggleclassname/' rel='bookmark' title='Aggiungere e togliere Classi CSS: toggleClassName'>Aggiungere e togliere Classi CSS: toggleClassName</a></li>
<li><a href='http://www.timendum.net/blog/71/gaialuna-avevo-previsto-bene/' rel='bookmark' title='GaiaLuna: avevo previsto bene'>GaiaLuna: avevo previsto bene</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.timendum.net/blog/107/lettere-scombinate/feed/</wfw:commentRss>
		<slash:comments>124</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching 1/87 queries in 1.054 seconds using disk: basic
Object Caching 2718/2805 objects using disk: basic

Served from: www.timendum.net @ 2012-02-09 23:34:04 -->
