<?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>jblog &#187; Web design</title>
	<atom:link href="http://jblog.it/category/web-design/feed" rel="self" type="application/rss+xml" />
	<link>http://jblog.it</link>
	<description>News e appunti per webmaster</description>
	<lastBuildDate>Tue, 25 May 2010 16:16:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Scroll automatico e animato con &#8220;scrollTop&#8221; e il plugin &#8220;easing&#8221;</title>
		<link>http://jblog.it/2010/05/24/scroll-automatico-animato-jquery-scrolltop-plugin-easing_894.html</link>
		<comments>http://jblog.it/2010/05/24/scroll-automatico-animato-jquery-scrolltop-plugin-easing_894.html#comments</comments>
		<pubDate>Mon, 24 May 2010 09:00:17 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ancore]]></category>
		<category><![CDATA[animate]]></category>
		<category><![CDATA[easing]]></category>
		<category><![CDATA[link interni]]></category>
		<category><![CDATA[offset]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[pseudo-classe]]></category>
		<category><![CDATA[scrollTop]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=894</guid>
		<description><![CDATA[In questi giorni ho aiutato un amico alle prese con un sito web a pagina singola e prendendo spunto dal sito vanadiumjs ho voluto implementare lo scroll automatico e animato. Poiché la pagina era molto lunga mi sembrava utile inserire questa funzionalità al fine di evitare all'utente l'utilizzo prolungato della rotellina del mouse per scorrere la pagina.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-896" title="scroll automatico e animato - jquery + scrollTop + easing" src="http://jblog.it/wp-content/uploads/2010/05/17095584_99ed2e6537_b.jpg" alt="17095584 99ed2e6537 b Scroll automatico e animato con scrollTop e il plugin easing" width="540" height="300" /><span style="font-size: small;"><span><br />
</span></span></p>
<p>In questi giorni ho aiutato un amico alle prese con un <strong>sito web a pagina singola</strong> e prendendo spunto dal sito vanadiumjs.com ho voluto implementare lo scroll automatico e animato. Dopo un giretto sul web ho trovato questo <a href="http://oncemade.com/animated-page-scroll-with-jquery/" target="_blank">interessante script</a> da cui ho imparato un po&#8217; di cose che ti ripropongo.</p>
<p>Il mio <strong>non è stato solo uno sfizio</strong>: poiché la pagina era molto lunga mi sembrava utile inserire questa funzionalità al fine di evitare all&#8217;utente l&#8217;utilizzo prolungato della rotellina del mouse per poter scorrere la pagina. Certo, si poteva realizzare tutto con dei <strong>link interni di tipo &#8220;#id&#8221;</strong> evitando codice js e plugin jquery. Lo abbiamo fatto ugualmente <strong>perché la pagina era solo una</strong> e un po&#8217; di dinamismo non guasta mai! <img src='http://jblog.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' title="Scroll automatico e animato con scrollTop e il plugin easing" /> </p>
<p><strong>La proprietà &#8220;scrollTop&#8221;.</strong> La utiliziamo per delineare le caratteristiche dell&#8217;animazione all&#8217;interno del metodo <code>$.animate()</code>. Questa proprietà deve essere impostata con un valore intero pari alla distanza (in pixel) tra l&#8217;inizio della pagina e la posizione di destinazione.</p>
<p><strong>Il plugin &#8220;easing&#8221;</strong>. Non è fondamentare per realizzare lo scroll animato in quanto all&#8217;animazione ci pensa già il metodo <code>$.animate()</code>. Questo plugin ci serve per aggiungere a jquery altri tipi di animazione. Per saperne di più visita la <a title="jquery.easing plugin" href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank">pagina del plugin</a> in cui potrai provare tutte le animazioni.</p>
<p><strong>Animazione &#8220;easeInOutQuad&#8221;.</strong> Il vero motivo per cui utilizziamo il plugin &#8220;easing&#8221; è per sfruttare l&#8217;animazione &#8220;easeInOutQuad&#8221; (uguale a quella di vanadiumjs.com) molto adatta per uno scroll animato: parte lenta, scorre veloce, e inizia a rallentare prima di arrivare sulla destinazione del link.</p>
<p><span id="more-894"></span><br />
<!--adv300--></p>
<h2>Aspetti positivi</h2>
<p><strong>Nessun problema se javascript è disabilitato.</strong> Poiché utiliziamo dei link interni (o ancore) per chiamare l&#8217;animazione sullo scroll, in caso di javascript disabilitato questi link funzioneranno comunque e faranno in modo di proiettare l&#8217;utente sul blocco con l&#8217;id specificato nell&#8217;attributo href.</p>
<p><strong>Normale scroll della pagina inalterato.</strong> Nonostante l&#8217;animazione, il normale scroll della pagina non viene alterato in alcun modo e la barra di scorrimento continua a funzionare come ci si aspetterebbe.</p>
<p><strong>Codice riusabile.</strong> Il codice javascript (e jquery) non dipende dal numero di link che devono avviare uno scroll animato. Infatti l&#8217;unica operazione richiesta è quella di specificare la classe comune ai link che avviano lo scroll animato.</p>
<h2>Al lavoro!</h2>
<p><strong>RISULTATO FINALE</strong>: <a href="http://test.jblog.it/autoscroll/" target="_blank">http://test.jblog.it/autoscroll/</a></p>
<p><strong>DOWNLOAD</strong>: <a href="http://download.jblog.it/autoscroll.zip" target="_blank">http://download.jblog.it/autoscroll.zip</a></p>
<h4>1. Includere jquery e jquery.easing</h4>
<pre>&lt;head&gt;
...
&lt;script type="text/javascript" src="<strong>jquery.min.js</strong>"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="<strong>jquery.easing.1.3.js</strong>"&gt;&lt;/script&gt;
...
&lt;/head&gt;</pre>
<h4>2. Attribuire una la stessa classe a tutti i link per lo scroll animato</h4>
<pre>&lt;!-- la classe comune è "scrollToBlock" --&gt;
&lt;a href="#blocco1" class="<strong>scrollToBlock</strong>"&gt;Blocco 1&lt;/a&gt;
&lt;a href="#blocco2" class="<strong>scrollToBlock</strong>"&gt;Blocco 2&lt;/a&gt;
&lt;a href="#blocco3" class="<strong>scrollToBlock</strong>"&gt;Blocco 3&lt;/a&gt;
&lt;a href="#blocco4" class="<strong>scrollToBlock</strong>"&gt;Blocco 4&lt;/a&gt;
&lt;a href="#blocco5" class="<strong>scrollToBlock</strong>"&gt;Blocco 5&lt;/a&gt;</pre>
<h4>3. Copiare il blocco di codice per lo scroll animato</h4>
<p>Anche se mi sembra superfluo dirlo, il seguente blocco di codice deve essere inserito fra i tag <code>&lt;head&gt;&lt;/head&gt;</code>.</p>
<pre>&lt;script type="text/javascript"&gt;
<strong>$(document).ready</strong>(function(){

  $('<strong>.scrollToBlock</strong>').click(function(){

    // recupera l'id e la distanza del blocco verso cui eseguire lo scroll
    var <strong>position </strong>= $( $(this).attr("href") ).offset().top;

    // ANIMAZIONE
    // (in alcuni browser funziona "body" in altri "html")
    // not(:animated) evita che un altro click su un'altra voce del menù abbia effetto quando il precedente scroll non si è concluso
    $("body:not(:animated), html:not(:animated)").animate(
      { <strong>scrollTop:position</strong> }, // parametri dell'animazione
      <strong>1000</strong>,                   // durata animazione (in millisecondi)
      '<strong>easeInOutQuad</strong>');       // animazione (del plugin "jquery.easing")

    // evita che la url venga "sporcata" con l'aggiunta di "#bloccoX"
    <strong>return false;</strong>
  });
});
&lt;/script&gt;</pre>
<h4>4. Impostare la classe dei link che avviano lo scroll animato</h4>
<pre>&lt;script type="text/javascript"&gt;
$(document).ready(function(){

  $('<strong>INSERIRE QUI</strong> la classe').click(function(){
...</pre>
<h4>5. Decidere la durata dell&#8217;animazione (in millisecondi)</h4>
<pre>...
$("body:not(:animated), html:not(:animated)").animate(
      { scrollTop:position }, // parametri dell'animazione
      <strong>1000,                   // durata animazione (in millisecondi)</strong>
      'easeInOutQuad');       // animazione (del plugin "jquery.easing")
...</pre>
<h4>6. Decidere l&#8217;animazione del plugin &#8220;easing&#8221;</h4>
<p>Nella <a title="jquery.easing plugin" href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank">pagina del plugin</a> puoi trovare l&#8217;elenco completo delle animazioni e la dimostrazione di ciascuna di esse.</p>
<pre>...
$("body:not(:animated), html:not(:animated)").animate(
      { scrollTop:position }, // parametri dell'animazione
      1000,                   // durata animazione (in millisecondi)
      <strong>'easeInOutQuad');       // animazione (del plugin "jquery.easing")</strong>
...</pre>
<h4>7. Attribuire un id diverso a ciascun blocco di destinazione</h4>
<pre>&lt;div class="block" <strong>id="blocco1"</strong>&gt;
   &lt;h2&gt;Blocco 1&lt;/h2&gt;
   &lt;p&gt;Lorem ipsum...&lt;/p&gt;
&lt;/div&gt;

&lt;div class="block" <strong>id="blocco2"</strong>&gt;
   &lt;h2&gt;Blocco 2&lt;/h2&gt;
   &lt;p&gt;Sed ut perspiciatis...&lt;/p&gt;
&lt;/div&gt;

&lt;div class="block" <strong>id="blocco3"</strong>&gt;
   &lt;h2&gt;Blocco 3&lt;/h2&gt;
   &lt;p&gt;Lorem ipsum...&lt;/p&gt;
&lt;/div&gt;

&lt;div class="block" <strong>id="blocco4"</strong>&gt;
   &lt;h2&gt;Blocco 4&lt;/h2&gt;
   &lt;p&gt;Sed ut perspiciatis...&lt;/p&gt;
&lt;/div&gt;

&lt;div class="block" <strong>id="blocco5"</strong>&gt;
   &lt;h2&gt;Blocco 5&lt;/h2&gt;
   &lt;p&gt;Lorem ipsum...&lt;/p&gt;
&lt;/div&gt;</pre>
<h4>8. Attribuire l&#8217;id di ciascun blocco di destinazione al relativo link</h4>
<pre>&lt;!-- la classe comune è "scrollToBlock" --&gt;
&lt;a <strong>href="#blocco1"</strong> class="scrollToBlock"&gt;Blocco 1&lt;/a&gt;
&lt;a <strong>href="#blocco2"</strong> class="scrollToBlock"&gt;Blocco 2&lt;/a&gt;
&lt;a <strong>href="#blocco3"</strong> class="scrollToBlock"&gt;Blocco 3&lt;/a&gt;
&lt;a <strong>href="#blocco4"</strong> class="scrollToBlock"&gt;Blocco 4&lt;/a&gt;
&lt;a <strong>href="#blocco5"</strong> class="scrollToBlock"&gt;Blocco 5&lt;/a&gt;</pre>
<h2>Animazioni multiple</h2>
<p>Vorrei spendere qualche parola in più sulla riga seguente per dire come ci si arriva a scriverla:</p>
<pre>$("body:not(:animated), html:not(:animated)").animate(...);</pre>
<p><span class="highlight_black"><strong>PROBLEMA 1</strong></span></p>
<p>Teoricamente si dovrebbe scrivere:</p>
<pre>$("body").animate(...);</pre>
<p>perché lo scroll riguarda il tag &lt;body&gt;.</p>
<p>Poiché su alcuni browser lo scroll della pagina è inteso su <code>&lt;html&gt;</code> e non su <code>&lt;body&gt;</code>, per supportarli entrambi è necessario scrivere:</p>
<pre>$("html,body").animate(...);</pre>
<p>In questo modo lo scroll funzionerà sia con i browser che lo intendono su <code>&lt;body&gt;</code> sia su quelli che lo intendono su <code>&lt;html&gt;</code>.</p>
<p><span class="highlight_black"><strong>PROBLEMA 2</strong></span></p>
<p>Se durante uno scroll si clicca su un&#8217;altro link prima che lo scroll precedente sia completato, il secondo scroll NON inizia subito ma &#8220;si mette in coda&#8221; e inizierà quando lo scroll precedente sarà stato completato.</p>
<p>Ora, immaginate che durante uno scroll si clicchi su più di un link: una volta completato lo scroll inizieranno una serie di scroll corrispondenti ai click precedenti.</p>
<p>Questa situazione non è accettabile per vari motivi, ma soprattutto perché non ha alcun senso e alcuna utilità sia per l&#8217;utente che per il web designer.</p>
<p>La <strong>soluzione</strong> è quella di bloccare la partenza di uno scroll automatico prima che il precedente sia stato completato.</p>
<p>La <strong>pseudo-classe <code>:not()</code></strong> serve per escludere dalla selezione tutti gli elementi con determinate caratteristiche che possono essere &#8220;disabilitato&#8221;, &#8220;nascosto&#8221;, &#8220;attivo&#8221;, &#8220;animato&#8221;, ecc.</p>
<p>In particolare a noi serve che la pseudo-classe <code>:not()</code> escluda gli <strong>elementi animati</strong>, identificati dalla <strong>pseudo-classe :animated</strong>: in questo caso gli elementi da escludere (quando sono animati) sono <code>&lt;html&gt;</code> e <code>&lt;body&gt;</code>.</p>
<p><strong>Per escludere un elemento animato</strong> si scrive:</p>
<pre>$("elemento:not(:animated)")...</pre>
<p>Quindi, per escludere &lt;html&gt; e &lt;body&gt; quando sono animati:</p>
<pre>$("body:not(:animated), html:not(:animated)")...</pre>
<h2>La posizione di arrivo</h2>
<p>Come avrai notato lo scroll automatico arriva precisamente sull&#8217;elemento.</p>
<p>Questo può non essere bellissimo da vedere poiché il blocco di arrivo risulta appiccicato al bordo superiore del browser.</p>
<p>Per fare in modo che il blocco di arrivo abbia un certo margine dal bordo del browser bisogna sottrarre alcuni pixel dalla posizione calcolata.</p>
<p>Individua la riga:</p>
<pre>var position = $( $(this).attr("href") ).offset().top;</pre>
<p>e modificala in:</p>
<pre>var position = $( $(this).attr("href") ).offset().top ( - XX );</pre>
<p>dove &#8220;XX&#8221; sono i <strong>pixel di margine</strong> dal bordo superiore del browser.</p>
<p>Foto | <a href="http://www.flickr.com/photos/jurvetson/17095584/">http://www.flickr.com/photos/jurvetson/17095584/</a></p>
<img src="http://jblog.it/?ak_action=api_record_view&id=894&type=feed" alt=" Scroll automatico e animato con scrollTop e il plugin easing"  title="Scroll automatico e animato con scrollTop e il plugin easing" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2010/05/24/scroll-automatico-animato-jquery-scrolltop-plugin-easing_894.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jConfirmAction: finestre di dialogo &#8220;confirm&#8221; comode e personalizzate</title>
		<link>http://jblog.it/2010/05/17/jconfirmaction-plugin-jquery-dialog-box-finestre-dialogo-confirm-accessibili-usabili-leggere-personalizzabili_880.html</link>
		<comments>http://jblog.it/2010/05/17/jconfirmaction-plugin-jquery-dialog-box-finestre-dialogo-confirm-accessibili-usabili-leggere-personalizzabili_880.html#comments</comments>
		<pubDate>Mon, 17 May 2010 13:12:14 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Usabilità]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[confirm]]></category>
		<category><![CDATA[dialog box]]></category>
		<category><![CDATA[finestra di dialogo]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=880</guid>
		<description><![CDATA[jConfirmAction è un ottimo plugin jQuery che permette di inserire facilmente delle dialog box di tipo "confirm" (quelle con i 2 pulsanti "ok" e "annulla") molto più belle di quelle di default e molto più usabili.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-886" title="jConfirmAction Plugin" src="http://jblog.it/wp-content/uploads/2010/05/jconfirmX.gif" alt="jconfirmX jConfirmAction: finestre di dialogo confirm comode e personalizzate" width="540" height="149" /></p>
<p><a title="WebStuffShare | jConfirmAction" href="http://www.webstuffshare.com/2010/03/jquery-plugin-jconfirmaction/" target="_blank">jConfirmAction</a> è un ottimo <strong>plugin jQuery</strong> che permette di inserire facilmente delle dialog box di tipo &#8220;confirm&#8221; (quelle con i 2 pulsanti &#8220;ok&#8221; e &#8220;annulla&#8221;) molto più gradevoli di quelle di default e molto più <strong>comode per l&#8217;utente</strong>.</p>
<p><span class="highlight_green"><strong>Leggero.</strong></span> Il plugin è molto leggero: ha una dimensione di 1,21 kb (non compresso).</p>
<p><span class="highlight_green"><strong>Accessibile.</strong></span> Uno dei maggiori vantaggi è che funziona anche in caso di <strong>javascript disabilitato</strong>. Questo perché al tag &lt;a&gt; viene comunque impostato l&#8217;attributo href ma il plugin si occupa di bloccarne il comportamento di default con la funzione preventDefault(). A proposito dell&#8217;accessibilità con javascript ti consiglio di leggere <a title="Javascript e accessibilità - blog.html.it" href="http://blog.html.it/10/05/2010/javascript-e-accessibilita/" target="_blank">questo articolo</a>.</p>
<p><span class="highlight_green"><strong>Migliora l&#8217;esperienza dell&#8217;utente.</strong></span> Una classica finestra di dialogo di tipo &#8220;confirm&#8221; appare sempre al centro della pagina. Questo comportamento potrebbe infastidire l&#8217;utente a causa del continuo via vai del mouse tra il link cliccato e il centro della pagina per cliccare &#8220;ok&#8221; o &#8220;annulla&#8221;. Il plugin jConfirmAction fa apparire la dialog box sopra il link cliccato, quindi con uno <strong>spostamento di pochi pixel</strong> l&#8217;utente arriva sui due pulsanti della dialog box. Se ciò ti sembra ininfluente pensa a una situazione in cui l&#8217;utente deve <em>rispondere continuamente a più di una dialog box</em>&#8230;</p>
<p><span class="highlight_green"><strong>Semplice per il web designer.</strong></span> L&#8217;utilizzo di base del plugin richiede solo un paio di minuti per sistemare il link allo script, le righe di codice css e le immagini all&#8217;interno dei file e delle directory del sito.</p>
<p><span class="highlight_green"><strong>Personalizzabile.</strong></span> Un aspetto che ho particolarmente apprezzato è la semplicità nella <strong>personalizzazione totale</strong> del plugin. Praticamente, in pochi passi, è possibile adattare alle proprie esigenze tutte le caratteristiche e i comportamenti del plugin: testi, immagini, css, html del box, codice javascript del plugin jquery.</p>
<p><span id="more-880"></span><!--adv300--></p>
<h2>La classica finestra &#8220;confirm&#8221;</h2>
<p><img class="alignnone size-full wp-image-882" title="dialog box confirm" src="http://jblog.it/wp-content/uploads/2010/05/basic_confirm.gif" alt="basic confirm jConfirmAction: finestre di dialogo confirm comode e personalizzate" width="540" height="162" /></p>
<p>Per valutare meglio il plugin è utile mostrare la <strong>classica dialog box &#8220;confirm&#8221;</strong> e il codice (javascript e jquery) per implementarla.</p>
<h4>&lt;Body&gt; e link</h4>
<pre>&lt;body&gt;
   &lt;a href="delete.html" id="delete_link"&gt;Delete me&lt;/a&gt;
&lt;/body&gt;</pre>
<h4>La dialog box &#8220;confirm&#8221; con jquery</h4>
<pre>&lt;script type="text/javascript" src="jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;

      $(document).<strong>ready</strong>(function() {

         <strong>$('#delete_link').click(function(e)</strong> {

            // Evita che si attivi automaticamente il link
	    // alla pagina linkata (delete.html)
            <strong>e.preventDefault();</strong>

            // Imposta la variabile "thisHref"
            // (la variabile non è necessaria perché si potrebbe
	    //  scrivere "window.location=$(this).attr('href')")
            thisHref = $(this).attr('href');

            // Chiama una finestra di dialogo "confirm" con la
	    // domanda "Are you sure?"
            //    --&gt; se si clicca su "ok" effettua un redirect
	    //        alla pagina linkata (delete.html)
            <strong>if(confirm('Are you sure?'))
               window.location = thisHref;</strong>
         });
      });
&lt;/script&gt;</pre>
<h4>Demo e download</h4>
<p>Per provare lo script: <a href="http://test.jblog.it/basicconfirm/" target="_blank">http://test.jblog.it/basicconfirm/</a></p>
<p>Per scaricare lo script: <a href="http://download.jblog.it/basicconfirm.zip" target="_blank">http://download.jblog.it/basicconfirm.zip</a></p>
<h2>Il plugin jConfirmAction</h2>
<p><img class="alignnone size-full wp-image-883" title="jconfirmaction 1" src="http://jblog.it/wp-content/uploads/2010/05/jconfirm1.gif" alt="jconfirm1 jConfirmAction: finestre di dialogo confirm comode e personalizzate" width="540" height="126" /></p>
<h4>&lt;Body&gt; e link (uguale a quello per la classica &#8220;confirm&#8221;)</h4>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">&lt;body&gt;
   &lt;a href="delete.html" id="delete_link"&gt;Delete me&lt;/a&gt;
&lt;/body&gt;</pre>
<h4>Implementazione base di jConfirmAction</h4>
<pre><strong>&lt;-- CSS per la formattazione della finestra di dialogo --&gt;</strong>
&lt;link rel="stylesheet" type="text/css" href="jconfirmaction.css" /&gt;

<strong>&lt;!-- JS SCRIPT: jquery, plugin jconfirmaction --&gt;</strong>
&lt;script type="text/javascript" src="jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jconfirmaction.jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;

      $(document).<strong>ready</strong>(function() {

<strong><span style="font-weight: normal;">         </span>$('#delete_link').jConfirmAction({</strong>
             // personalizzazione del testo
             question : "Are you sure?",
             yesAnswer : "OK",
             cancelAnswer : "Annulla"
         });
      });
&lt;/script&gt;</pre>
<h4>Demo e download</h4>
<p>Anche se sul sito del plugin c&#8217;é una pagina dimostrativa ho voluto creare una demo svuotata di tutte le cose superflue in modo da evidenziare meglio il funzionamento del plugin.</p>
<p>Per provare lo script: <a href="http://test.jblog.it/jconfirmaction/" target="_blank">http://test.jblog.it/jconfirmaction/</a></p>
<p>Per scaricare lo script: <a href="http://download.jblog.it/jconfirmaction.zip" target="_blank">http://download.jblog.it/jconfirmaction.zip</a></p>
<h3>Grafica</h3>
<p><img class="alignnone size-full wp-image-893" title="jconfirm2-2" src="http://jblog.it/wp-content/uploads/2010/05/jconfirm2-2.gif" alt="jconfirm2 2 jConfirmAction: finestre di dialogo confirm comode e personalizzate" width="540" height="133" /></p>
<p>Per visualizzare correttamente il &#8220;fumetto&#8221; della dialog box abbiamo bisogno di <strong>almeno 2 componenti grafici</strong>:</p>
<ul>
<li>contenitore del testo e dei pulsanti &#8220;ok&#8221; e &#8220;annulla&#8221;</li>
<li>sfondo del singolo pulsante</li>
</ul>
<h3>CSS</h3>
<p><img class="alignnone size-full wp-image-892" title="jconfirm3-2" src="http://jblog.it/wp-content/uploads/2010/05/jconfirm3-2.gif" alt="jconfirm3 2 jConfirmAction: finestre di dialogo confirm comode e personalizzate" width="540" height="126" /></p>
<p>Questo plugin ha bisogno di <strong>alcune righe di codice css</strong> che naturalmente possiamo sistemare in un apposito file o incollare nel principale file .css del nostro sito (consiglio quest&#8217;ultima pratica per evitare la richiesta http dovuta al singolo file .css per il plugin).</p>
<p><span class="highlight_red"><strong>CONFLITTUALITA&#8217;.</strong> Il problema è che i nomi delle classi sono abbastanza comuni e potremmo averli già utilizzati per altre classi. La <strong>soluzione</strong> è quella di andare a modificare direttamente il codice html della dialog box che si trova all&#8217;interno del file .js del plugin, come vedremo in seguito.</span></p>
<pre>/* CONTENITORE PRINCIPALE */
<strong>.question</strong> {
	position: absolute;
	display: inline;
	text-align: center;
	width: 174px;
	height: 78px;
	font-size: 13px;
	line-height: 1.5em;
	/* immagine del contenitore del "fumetto" */
	<strong>background</strong>: url('images/bubble.png') left top no-repeat;
	padding: 10px 0 0 0;
	text-shadow: 0px 1px 0px #fff;
	margin-left: -7em;
	margin-top: -6em;
	opacity: 0;
}

/* PULSANTI */
<strong>.yes</strong>, <strong>.cancel</strong> {
	margin-top: .5em;
	margin-right: .5em;
	cursor: pointer;
	display: inline-block;
	width: 63px;
	height: 21px;
	color: #fff;
	text-shadow: 0px 1px 0px #000;
	/* immagine del pulsante */
	<strong>background</strong>: url('images/button.png') left top no-repeat;
}</pre>
<h3>HTML</h3>
<p>L&#8217;html relativa al box del &#8220;fumetto&#8221; è <strong>molto semplice</strong>, quindi non credo che avrai grossi problemi se andrai a modificare la struttura del box.</p>
<p>Un <strong>buon motivo</strong> per modificare l&#8217;html è quello di evitare le possibili <strong>conflittualità con le classi del css</strong>, modificando i nomi delle classi associate ai div in nomi meno generici.</p>
<p>Nel file del plugin la parte relativa al <strong>codice html del box</strong> è questa:</p>
<pre>$(this).after(
'&lt;div class="question"&gt;'+theOptions.question+'&lt;br/&gt;
     &lt;span class="yes"&gt;'+theOptions.yesAnswer+'&lt;/span&gt;
     &lt;span class="cancel"&gt;'+theOptions.cancelAnswer+'&lt;/span&gt;
&lt;/div&gt;');</pre>
<h3>Un plugin alternativo</h3>
<p>Una valida alternativa è il plugin <strong><a title="jQuery Confirm Plugin" href="http://nadiana.com/jquery-confirm-plugin" target="_blank">jQuery Confirm</a></strong> sviluppato da Nadia Alramli.</p>
<p>La caratteristica che lo distingue da jConfirmAction è che quando si clicca sul link scompare il link e appare la domanda (con relativi link &#8220;ok&#8221; e &#8220;annulla&#8221;).</p>
<p>Sicuramente è <strong>molto più leggero di jConfirmAction</strong> in quanto non richiede immagini e codice css. Inoltre ha moltissime opzioni che consentono di adattarlo al meglio alle esigenze del sito.</p>
<p>Fra i due plugin (che sostanzialmente fanno la stesse cose) io <strong>continuo a preferire jConfirmAction</strong> perché esteticamente il fumetto è più bello! <img src='http://jblog.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' title="jConfirmAction: finestre di dialogo confirm comode e personalizzate" /> </p>
<img src="http://jblog.it/?ak_action=api_record_view&id=880&type=feed" alt=" jConfirmAction: finestre di dialogo confirm comode e personalizzate"  title="jConfirmAction: finestre di dialogo confirm comode e personalizzate" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2010/05/17/jconfirmaction-plugin-jquery-dialog-box-finestre-dialogo-confirm-accessibili-usabili-leggere-personalizzabili_880.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>19 pacchetti di icone completi e definitivi</title>
		<link>http://jblog.it/2009/12/07/pacchetti-icone-definitivi-completi-icons-set-social-emoticons_774.html</link>
		<comments>http://jblog.it/2009/12/07/pacchetti-icone-definitivi-completi-icons-set-social-emoticons_774.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 05:20:24 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Grafica]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[bandiere]]></category>
		<category><![CDATA[emoticons]]></category>
		<category><![CDATA[icone]]></category>
		<category><![CDATA[mini icone]]></category>
		<category><![CDATA[pacchetti icone]]></category>
		<category><![CDATA[smilies]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[social bookmarking]]></category>
		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=774</guid>
		<description><![CDATA[Durante la realizzazione di un sito arriva sempre il momento in cui è necessario utilizzare dei pacchetti di icone, ad esempio per linkare il profilo sui vari social network o per elencare i metodi di pagamento accettati. Se stai realizzando un cms la scelta del giusto pacchetto di icone può addirittura diventare un problema.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a title="19 pacchetti di icone completi e definitivi" href="http://jblog.it/2009/12/07/pacchetti-icone-definitivi-completi-icons-set-social-emoticons_774.html"><img class="alignnone size-full wp-image-795" title="19 pacchetti di icone completi e definitivi" src="http://jblog.it/wp-content/uploads/2009/12/19_pacchetti_icone.jpg" alt="19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></p>
<p style="text-align: left;">Durante la realizzazione di un sito arriva sempre il momento in cui è necessario utilizzare dei pacchetti di icone, ad esempio per linkare il profilo sui vari social network o per elencare i metodi di pagamento accettati.</p>
<p style="text-align: left;">Se stai realizzando un cms la scelta del giusto pacchetto di icone può addirittura diventare un <strong>problema</strong>. Infatti, poiché un generico cms ha molte funzioni alle quali associare l&#8217;icona adatta, a meno che tu non voglia prenderle a caso da <em>google immagini</em>, hai bisogno di <strong>pacchetti completi in grado di soddisfare le esigenze attuali (e future) del tuo cms</strong>.</p>
<p style="text-align: left;">Il fatto è che non sempre hai il tempo e la voglia di correre su internet per cercare l&#8217;icona adatta, anche perché sarebbe difficile trovarne una allineata allo stile di quelle che stai già utilizzando.</p>
<p style="text-align: left;">Quindi per non avere più preoccupazioni dai uno sguardo ai seguenti pacchetti di icone e scegli quelli più adatti alle tue esigenze!</p>
<p><span id="more-774"></span></p>
<h2 style="text-align: left;">Una panoramica dei pacchetti</h2>
<p><!--adv300--></p>
<p style="text-align: left;">I pacchetti veramente completi che <strong>ti eviteranno tutte le preoccupazioni</strong> sono:</p>
<ul style="text-align: left;">
<li><a href="#fugueicons">Fugue Icons</a>, pacchetto completissimo</li>
<li><a href="#famfamfamsilk">FamFamFam Silk Icons</a>, pacchetto completo anche se le icone sono meno della metà di quello precedente</li>
<li><a href="#snpack">Social Network Icon Pack</a>, icone di vari social network (alcuni non molto conosciuti)</li>
<li><a href="#famfamfamflag">FamFamFam Flag Icons</a>, le bandiere di tutti gli stati del mondo</li>
<li><a href="#chalkwork">Chalkwork Payments</a>, icone di varie carte di credito e metodi di pagamento</li>
</ul>
<p style="text-align: left;">Per siti graficamente leggeri i 3 pacchetti seguenti hanno <strong>icone in bianco e nero (o scala di grigi)</strong>, secondo me molto delicate e gradevoli:</p>
<ul style="text-align: left;">
<li><a href="#bwpx">bwpx.icns</a></li>
<li><a href="#mini2">Mini Icons 2</a></li>
<li><a href="#mini12">Mini Pixel Icon Set v.1.2</a></li>
</ul>
<p style="text-align: left;">Gli altri pacchetti per un motivo o per l&#8217;altro meritavano di essere segnalati.</p>
<p style="text-align: left;"><img class="alignnone size-full wp-image-796" title="tabella comparativa 19 pacchetti icone" src="http://jblog.it/wp-content/uploads/2009/12/19_table.png" alt="tabella comparativa 19 pacchetti icone" width="540" height="610" /></p>
<h2 id="fugueicons" style="text-align: left;">Fugue Icons</h2>
<p style="text-align: left;"><a href="http://www.pinvoke.com/" target="_blank"><img title="fugue icons" src="http://jblog.it/wp-content/uploads/2009/12/fugue.gif" alt="fugue icons" width="540" height="100" /></a></p>
<p style="text-align: left;">Sia graficamente che per il gran numero di icone che contiene, questo è sicuramente il <strong>miglior pacchetto</strong>.</p>
<p style="text-align: left;">Sono in una <strong>doppia versione grafica</strong> (con e senza ombreggiatura) e il gran numero di icone permette di <strong>coprire molti ambiti</strong>.</p>
<p style="text-align: left;">Tuttavia, se non dovessero soddisfarti puoi sempre modificarle grazie ai <strong>file .psd inclusi</strong> nel pacchetto. Un consiglio: fatti un giro nei file .psd, esplora i livelli, guarda i vari elementi che compongono una singola icona&#8230; approfittane per imparare a disegnare le tue icone!</p>
<p style="text-align: left;">Dato che molte delle icone sono simili a quelle di sistemi operativi o famose applicazioni (es. microsoft word), ci sono concrete possibilità che gli utenti conoscano già la funzione associata, il ché fa guadagnare dei punticini in <strong>usabilità</strong>.</p>
<p style="text-align: left;">L&#8217;unica pecca che sento di segnalare sta nel fatto che, a differenza di altri pacchetti, <strong>non sono suddivise in directory</strong> e a volte è veramente dura trovare l&#8217;icona desiderata!</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="z0y4" title="http://www.pinvoke.com/" href="http://www.pinvoke.com/" target="_blank">http://www.pinvoke.com/</a><br />
<strong>Numero di icone</strong>: 2360<br />
<strong>Formati</strong>: psd, png<br />
<strong>Dimensioni</strong>: 16 x 16<br />
<strong>Licenza</strong>: <a id="klhi" title="http://creativecommons.org/licenses/by/3.0/" href="http://creativecommons.org/licenses/by/3.0/" target="_blank">http://creativecommons.org/licenses/by/3.0/</a></p>
<h2 id="famfamfamsilk" style="text-align: left;">FamFamFam Silk Icons</h2>
<p style="text-align: left;"><a href="http://www.famfamfam.com/lab/icons/silk/" target="_blank"><img title="famfamfam silk icons" src="http://jblog.it/wp-content/uploads/2009/12/famfamfam.gif" alt="famfamfam silk icons" width="540" height="100" /></a></p>
<p style="text-align: left;">Fortunatamente le icone di questo pacchetto <strong>si assomigliano a quelle precedenti</strong>, quindi, se non dovessi trovarne una potrai sempre cercarla nell&#8217;altro pacchetto (e viceversa).</p>
<p style="text-align: left;">Un po&#8217; di tempo fa utilizzai queste icone e l&#8217;esperienza è stata molto positiva, grazie anche allo stile molto gradevole e ai colori non troppo forti.</p>
<p style="text-align: left;">Come il pacchetto precedente, il gran numero di icone permette di <strong>coprire molti ambiti</strong> e l&#8217;unica pecca sta nel fatto che, a differenza di altri pacchetti, <strong>non sono suddivise in directory</strong> ed è un po&#8217; difficile sfogliarle.</p>
<p style="text-align: left;"><strong>Autore</strong>: Mark James<br />
<strong>Url</strong>: <a id="aa9l" title="http://www.famfamfam.com/lab/icons/silk/" href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">http://www.famfamfam.com/lab/icons/silk/</a><br />
<strong>Numero di icone</strong>: 1000<br />
<strong>Formato</strong>: png<br />
<strong>Dimensioni</strong>: 16 x 16<br />
<strong>Licenza</strong>: <a id="yxsu" title="http://creativecommons.org/licenses/by/3.0/" href="http://creativecommons.org/licenses/by/3.0/" target="_blank">http://creativecommons.org/licenses/by/3.0/</a></p>
<h2 style="text-align: left;">Led Icon Set v1.0</h2>
<p style="text-align: left;"><a href="http://led24.de/iconset" target="_blank"><img title="led_icon" src="http://jblog.it/wp-content/uploads/2009/12/led_icon.gif" alt="led icon 19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></p>
<p style="text-align: left;">Graficamente tra le più belle, sono particolarmente indicate per <strong>applicazioni grafiche e di scrittura</strong>.</p>
<p style="text-align: left;"><strong>Autore</strong>: Aleksandr Kozmenko<br />
<strong>Url</strong>: <a id="slnm" title="http://led24.de/iconset" href="http://led24.de/iconset" target="_blank">http://led24.de/iconset</a><br />
<strong>Numero di icone</strong>: 512<br />
<strong>Formato</strong>: png<br />
<strong>Dimensioni</strong>: 16 x 16<br />
<strong>Licenza</strong>: <a id="ph7c" title="http://creativecommons.org/licenses/by-sa/3.0/" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">http://creativecommons.org/licenses/by-sa/3.0/</a></p>
<h2 style="text-align: left;">Splashy Icons</h2>
<p style="text-align: left;"><a href="http://splashyfish.com/sketches/comments/splashy-icons-an-icon-library-for-prototyping/" target="_blank"><img title="splashy icons" src="http://jblog.it/wp-content/uploads/2009/12/splashy.gif" alt="splashy icons" width="540" height="100" /></a></p>
<p style="text-align: left;">Abbastanza &#8220;piatte&#8221;, senza troppe ombreggiature e bordi ma con gradienti ben definiti.</p>
<p style="text-align: left;">Orientate per l&#8217;utilizzo in <strong>applicazioni &#8220;social&#8221; e multimediali</strong>.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="qit." title="http://splashyfish.com/sketches/comments/splashy-icons-an-icon-library-for-prototyping/" href="http://splashyfish.com/sketches/comments/splashy-icons-an-icon-library-for-prototyping/" target="_blank">http://splashyfish.com/sketches/comments/splashy-icons-an-icon-library-for-prototyping/</a><br />
<strong>Numero di icone</strong>: 512<br />
<strong>Formati</strong>: png, MacOSx png<br />
<strong>Dimensioni</strong>: 16 x 16</p>
<h2 style="text-align: left;">Flavour Icon set</h2>
<p style="text-align: left;"><a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/" target="_blank"><img title="flavour icon set" src="http://jblog.it/wp-content/uploads/2009/12/flavour_ext.jpg" alt="flavour icon set" width="540" height="100" /></a></p>
<p style="text-align: left;">Sono <strong>molto generiche</strong>:  difficile stabilire in quali ambiti possano essere indispensabili.</p>
<p style="text-align: left;">Meritano di essere segnalate per la grafica molto curata ma soprattutto per la presenza di <strong>tutti i pulsanti della tastiera</strong>, a mio avviso difficili da trovare.</p>
<p style="text-align: left;"><strong>Autore</strong>: <a id="u208" title="http://www.addictedtocoffee.de/" href="http://www.addictedtocoffee.de/" target="_blank">Oliver Twardowski</a><br />
<strong>Url</strong>: <a id="khgf" title="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/" href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/" target="_blank">http://www.smashingmagazine.com/2009/05/20/flavour-extended&#8230;</a><br />
<strong>Numero di icone</strong>: 452<br />
<strong>Formato</strong>: psd, png, MacOSx png<br />
<strong>Dimensioni</strong>: 48 x 48<br />
<strong>Licenza</strong>: uso personale e commerciale</p>
<h2 style="text-align: left;">Diagona Icons</h2>
<p style="text-align: left;"><a href="http://www.pinvoke.com/" target="_blank"><img title="diagona icons" src="http://jblog.it/wp-content/uploads/2009/12/diagona.gif" alt="diagona icons" width="540" height="100" /></a></p>
<p style="text-align: left;">Mi sembrano una specie di &#8220;evoluzione grafica&#8221; del pacchetto FamFamFam Silk Icons.</p>
<p style="text-align: left;">Secondo me sono molto <strong>adatte a blog e applicazioni &#8220;social&#8221;</strong>.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="l-yk" title="http://www.pinvoke.com/" href="http://www.pinvoke.com/" target="_blank">http://www.pinvoke.com/</a><br />
<strong>Numero di icone</strong>: 400<br />
<strong>Formato</strong>: png<br />
<strong>Dimensioni</strong>: 16 x 16, 10 x 10<br />
<strong>Licenza</strong>: <a id="kxha" title="http://creativecommons.org/licenses/by-sa/3.0/" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">http://creativecommons.org/licenses/by-sa/3.0/</a></p>
<h2 style="text-align: left;">Mini Pixel Icons</h2>
<p style="text-align: left;"><a href="http://icondock.com/free/mini-pixel-icons" target="_blank"><img title="mini pixel icons" src="http://jblog.it/wp-content/uploads/2009/12/mini_pixel2.gif" alt="mini pixel icons" width="540" height="100" /></a></p>
<p style="text-align: left;">Graficamente molto delicate, particolarmente <strong>adatte a siti di ecommerce</strong> data la presenza di carte di credito, borse, carrelli, stampanti, shopping bag, ecc.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="d7wy" title="http://icondock.com/free/mini-pixel-icons" href="http://icondock.com/free/mini-pixel-icons" target="_blank">http://icondock.com/free/mini-pixel-icons</a><br />
<strong>Numero di icone</strong>: 322<br />
<strong>Formati</strong>: gif<br />
<strong>Dimensioni</strong>: 14 x 14</p>
<h2 style="text-align: left;">Free Web Design Icon Set</h2>
<p style="text-align: left;"><a href="http://semlabs.co.uk/journal/free-web-design-icon-set" target="_blank"><img title="free web design icon set" src="http://jblog.it/wp-content/uploads/2009/12/freeiconset.gif" alt="free web design icon set" width="540" height="100" /></a></p>
<p style="text-align: left;">Non hanno dei particolari campi di applicazione ma mi sono sembrate molto <strong>adatte per cms generici</strong> in quanto le icone presenti corrispondono alle più classiche funzioni di un cms, che secondo me sarebbero in grado di soddisfarle completamente.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="e5lp" title="http://semlabs.co.uk/journal/free-web-design-icon-set" href="http://semlabs.co.uk/journal/free-web-design-icon-set" target="_blank">http://semlabs.co.uk/journal/free-web-design-icon-set</a><br />
<strong>Numero di icone</strong>: 310<br />
<strong>Formati</strong>: png<br />
<strong>Dimensioni</strong>: 16 x 16</p>
<h2 id="bwpx" style="text-align: left;">bwpx.icns</h2>
<p style="text-align: left;"><a href="http://paularmstrongdesigns.com/projects/bwpx-icns/" target="_blank"><img title="bwpx.icns" src="http://jblog.it/wp-content/uploads/2009/12/bwpx_icns.gif" alt="bwpx.icns" width="540" height="100" /></a></p>
<p style="text-align: left;">Questo pacchetto ha icone molto classiche, quindi <strong>adatte a cms generici</strong>.</p>
<p style="text-align: left;">Graficamente molto leggere ma originali. L&#8217;autore afferma che:</p>
<blockquote style="text-align: left;"><p>&#8230; ogni icona è stata accuratamente creata un pixel alla volta &#8230;</p>
</blockquote>
<p style="text-align: left;">sarà vero? Quanta pazienza! <img src='http://jblog.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' title="19 pacchetti di icone completi e definitivi" /> </p>
<p style="text-align: left;"><strong>Autore</strong>: <a id="akdw" title="http://paularmstrongdesigns.com/" href="http://paularmstrongdesigns.com/" target="_blank">Paul Armstrong</a><br />
<strong>Url</strong>: <a id="neda" title="http://paularmstrongdesigns.com/projects/bwpx-icns/" href="http://paularmstrongdesigns.com/projects/bwpx-icns/" target="_blank">http://paularmstrongdesigns.com/projects/bwpx-icns/</a><br />
<strong>Numero di icone</strong>: 260<br />
<strong>Formati</strong>: gif<br />
<strong>Dimensioni</strong>: 18 x 18<br />
<strong>Licenza</strong>: <a id="xg7g" title="http://creativecommons.org/licenses/by-sa/3.0/us/" href="http://creativecommons.org/licenses/by-sa/3.0/us/" target="_blank">http://creativecommons.org/licenses/by-sa/3.0/us/</a></p>
<h2 id="mini2" style="text-align: left;">Mini Icons 2</h2>
<p style="text-align: left;"><strong><a href="http://www.brandspankingnew.net/archive/2006/12/hohoho.html" target="_blank"><img title="hohoho" src="http://jblog.it/wp-content/uploads/2009/12/hohoho.gif" alt="hohoho 19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></strong></p>
<p style="text-align: left;">Graficamente semplici, leggere e molto gradevoli sono particolarmente<strong> adatte ad applicazioni di scrittura.</strong></p>
<p style="text-align: left;"><strong>Url</strong>: <a id="x5.8" title="http://www.brandspankingnew.net/archive/2006/12/hohoho.html" href="http://www.brandspankingnew.net/archive/2006/12/hohoho.html" target="_blank">http://www.brandspankingnew.net/archive/2006/12/hohoho.html</a><br />
<strong>Numero di icone</strong>: 113<br />
<strong>Formato</strong>: gif<br />
<strong>Dimensioni</strong>: 10 x 10<br />
<strong>Licenza</strong>: <a id="p0iw" title="http://creativecommons.org/licenses/by-sa/2.5/" href="http://creativecommons.org/licenses/by-sa/2.5/" target="_blank">http://creativecommons.org/licenses/by-sa/2.5/</a><br />
<strong>Note</strong>: al momento della scrittura dell&#8217;articolo il link per il download non è funzionante; quindi scaricare l&#8217;immagine del post.</p>
<h2 id="mini12" style="text-align: left;">Mini Pixel Icon Set v.1.2</h2>
<p style="text-align: left;"><strong><a href="http://www.paulolyslager.com/free-mini-pixel-web-icons" target="_blank"><img title="mini icons 2" src="http://jblog.it/wp-content/uploads/2009/12/mini_pixel.gif" alt="mini icons 2" width="540" height="100" /></a></strong></p>
<p style="text-align: left;">Semplici e leggere dal punto di vista grafico; l&#8217;autore ha pensato bene di adattarle alla dimensione, variandone leggermente il disegno.</p>
<p style="text-align: left;">Particolarmente <strong>adatte a siti di ecommerce e cms generici</strong>.</p>
<p style="text-align: left;"><strong>Autore</strong>: <a id="tq_s" title="Paul Olyslager" href="http://www.paulolyslager.com/" target="_blank">Paul Olyslager</a><br />
<strong>Url</strong>: <a id="cvoa" title="http://www.paulolyslager.com/free-mini-pixel-web-icons" href="http://www.paulolyslager.com/free-mini-pixel-web-icons" target="_blank">http://www.paulolyslager.com/free-mini-pixel-web-icons</a><br />
<strong>Numero di icone</strong>: 111<br />
<strong>Formati</strong>: gif, png, psd<br />
<strong>Dimensioni</strong>: 25 x 25 (dimensioni e stili variabili)<br />
<strong>Note</strong>: due versioni di design (con e senza antialiasing).</p>
<h2 style="text-align: left;">Tango Icon Library</h2>
<p style="text-align: left;"><a href="http://tango.freedesktop.org/Tango_Icon_Library" target="_blank"><img title="tango icon library" src="http://jblog.it/wp-content/uploads/2009/12/tango_icons.gif" alt="tango icon library" width="540" height="100" /></a></p>
<p style="text-align: left;">Questo pacchetto di icone nasce per GNOME, ambiente desktop per Linux.</p>
<p style="text-align: left;">Credo che <strong>non possano essere la soluzione definitiva</strong> poiché, essendo orientate a sistemi operativi e applicazioni desktop, non hanno molte di quelle icone ampiamente utilizzate nelle comuni applicazioni web.</p>
<p style="text-align: left;">Tuttavia, meritano di essere segnalate per lo stile interessante ed originale e per la presenza dei <strong>file vettoriali .svg</strong>.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="gh7u" title="http://tango.freedesktop.org/Tango_Icon_Library" href="http://tango.freedesktop.org/Tango_Icon_Library" target="_blank">http://tango.freedesktop.org/Tango_Icon_Library</a><br />
<strong>Numero di icone</strong>: 215<br />
<strong>Formati</strong>: svg, png<br />
<strong>Dimensioni</strong>: 32 x 32, 22 x 22, 16 x 16</p>
<h2 style="text-align: left;">Twotiny Icon Set</h2>
<p style="text-align: left;"><a href="http://code.google.com/p/twotiny/" target="_blank"><img title="twotiny icon set" src="http://jblog.it/wp-content/uploads/2009/12/twotiny.gif" alt="twotiny icon set" width="540" height="100" /></a></p>
<p style="text-align: left;">Icone molto generiche, adatte a vari ambiti e, benché non siano tantissime, potrebbero essere una buona soluzione.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="tygs" title="http://code.google.com/p/twotiny/" href="http://code.google.com/p/twotiny/" target="_blank">http://code.google.com/p/twotiny/</a><br />
<strong>Numero di icone</strong>: 122<br />
<strong>Formati</strong>: gif, MacOSx<br />
<strong>Dimensioni</strong>: variabili, mediamente 16 x 16<br />
<strong>Licenza</strong>: <a id="qbfa" title="http://dev.perl.org/licenses/" href="http://dev.perl.org/licenses/" target="_blank">http://dev.perl.org/licenses/</a><br />
<strong>Note</strong>: nella pagina ci sono due pacchetti; il link per il download relativo a questo pacchetto è &#8220;twotiny-plus-expansion.zip&#8221;.</p>
<h2 id="snpack" style="text-align: left;">Social Network Icon Pack</h2>
<p style="text-align: left;"><a href="http://www.komodomedia.com/blog/2009/06/social-network-icon-pack/" target="_blank"><img title="social network icon pack" src="http://jblog.it/wp-content/uploads/2009/12/sn_iconspng.gif" alt="sn iconspng 19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></p>
<p style="text-align: left;">Questo è in assoluto il pacchetto di <strong>icone &#8220;social&#8221; più famoso</strong>.</p>
<p style="text-align: left;">Almeno per quattro ragioni:</p>
<ul style="text-align: left;">
<li>è <strong>completo </strong>di tutti i principali social network (molti pacchetti di questo tipo non avevano addirittura l&#8217;icona di last.fm!)</li>
<li>viene <strong>aggiornato spesso</strong> (c&#8217;è già l&#8217;icona di Google Wave)</li>
<li>a differenza della maggior parte delle icone &#8220;social&#8221; non hanno uno<br />
stile particolare e sono <strong>facilmente intonabili</strong> con qualsiasi grafica</li>
<li>sono molto <strong>fedeli al logo originale</strong> (molti pacchetti le personalizzano troppo al punto da non essere riconoscibili!)</li>
</ul>
<p style="text-align: left;"><strong>Url</strong>: <a id="n.i_" title="http://www.komodomedia.com/blog/2009/06/social-network-icon-pack/" href="http://www.komodomedia.com/blog/2009/06/social-network-icon-pack/" target="_blank">http://www.komodomedia.com/blog/2009/06/social-network-icon-pack/</a><br />
<strong>Numero di icone</strong>: 60<br />
<strong>Formati</strong>: png, MacOSx png<br />
<strong>Dimensioni</strong>: 32 x 32, 16 x 16<br />
<strong>Licenza</strong>: <a id="jxhg" title="http://creativecommons.org/licenses/by-sa/3.0/" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">http://creativecommons.org/licenses/by-sa/3.0/</a></p>
<h2 id="chalkwork" style="text-align: left;">Chalkwork Payments</h2>
<p style="text-align: left;"><a href="http://www.mezzoblue.com/icons/chalkwork/payments/" target="_blank"><img title="chalkwork payments icons" src="http://jblog.it/wp-content/uploads/2009/12/chalkwork.gif" alt="chalkwork payments icons" width="540" height="100" /></a></p>
<p style="text-align: left;">In questo pacchetto sono presenti <strong>molte carte di credito</strong>, da quelle più famose a quelle più recenti o meno conosciute.</p>
<p style="text-align: left;">Di ogni icona, oltre all&#8217;icona base, ci sono <strong>5 varianti</strong> (aggiungi, modifica, cancella, sicura, condividi).</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="wxte" title="http://www.mezzoblue.com/icons/chalkwork/payments/" href="http://www.mezzoblue.com/icons/chalkwork/payments/" target="_blank">http://www.mezzoblue.com/icons/chalkwork/payments/</a><br />
<strong>Numero di icone</strong>: 21<br />
<strong>Formati</strong>: png, tif, gif, bmp, ico, icns<br />
<strong>Dimensioni</strong>: 32 x 32, 24 x 24, 16 x 16<br />
<strong>Licenza</strong>: <a id="xwpn" title="http://www.mezzoblue.com/icons/license/" href="http://www.mezzoblue.com/icons/license/" target="_blank">http://www.mezzoblue.com/icons/license/</a></p>
<h2 id="famfamfamflag" style="text-align: left;">FamFamFam Flag Icons</h2>
<p style="text-align: left;"><a href="http://famfamfam.com/lab/icons/flags/" target="_blank"><img title="famfamfam flags" src="http://jblog.it/wp-content/uploads/2009/12/famfamfam_flags.gif" alt="famfamfam flags" width="540" height="100" /></a></p>
<p style="text-align: left;">Le <strong>bandiere di tutti gli stati del mondo</strong> in una grafica accettabile e sobria.</p>
<p style="text-align: left;"><strong>Autore</strong>: Mark James<br />
<strong>Url</strong>: <a id="r_s." title="http://famfamfam.com/lab/icons/flags/" href="http://famfamfam.com/lab/icons/flags/" target="_blank">http://famfamfam.com/lab/icons/flags/</a><br />
<strong>Numero di icone</strong>: 247<br />
<strong>Formati</strong>: png, gif, MacOSx png, MacOSx gif<br />
<strong>Dimensioni</strong>: 16 x 11</p>
<h2 style="text-align: left;">2s-space Emotions v2</h2>
<p style="text-align: left;"><a href="http://kirozeng.deviantart.com/art/2s-space-Emotions-v2-72785912" target="_blank"><img title="2s space emotions" src="http://jblog.it/wp-content/uploads/2009/12/2s_space.gif" alt="2s space 19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></p>
<p style="text-align: left;">Tante emoticons <strong>espressive</strong>, divertenti, <strong>alternative </strong>e ben disegnate. Mi ricordano tanto i cartoni animati giapponesi!</p>
<p style="text-align: left;"><strong>Autore</strong>: <a id="vjgx" title="http://kirozeng.deviantart.com/" href="http://kirozeng.deviantart.com/" target="_blank">kirozeng</a><br />
<strong>Url</strong>: <a id="m06j" title="http://kirozeng.deviantart.com/art/2s-space-Emotions-v2-72785912" href="http://kirozeng.deviantart.com/art/2s-space-Emotions-v2-72785912" target="_blank">http://kirozeng.deviantart.com/art/2s-space-Emotions-v2-72785912</a><br />
<strong>Numero di icone</strong>: 20<br />
<strong>Formati</strong>: png<br />
<strong>Dimensioni</strong>: 256 x 256</p>
<h2 style="text-align: left;">PNGs Smilies for Wordpress</h2>
<p style="text-align: left;"><a href="http://vikiworks.com/2007/09/25/pngs-smilies-for-wordpress/" target="_blank"><img title="wordpress smiles" src="http://jblog.it/wp-content/uploads/2009/12/wpsmiles.gif" alt="wordpress smiles" width="540" height="100" /></a></p>
<p style="text-align: left;">Questo pacchetto nasce con l&#8217;intento di <strong>rimpiazzare le emoticons di wordpress</strong>.</p>
<p style="text-align: left;">Rispetto a quelle di wordpress sono più morbide e gradevoli, anche se proprio per queste caratteristiche risulterebbero meno evidenti all&#8217;interno del testo. A te la scelta!</p>
<p style="text-align: left;"><strong>Autore</strong>: <a id="lms." title="http://www.dlanham.com/" href="http://www.dlanham.com/" target="_blank">David Lanham</a><br />
<strong>Url</strong>: <a id="zxat" title="http://vikiworks.com/2007/09/25/pngs-smilies-for-wordpress/" href="http://vikiworks.com/2007/09/25/pngs-smilies-for-wordpress/" target="_blank">http://vikiworks.com/2007/09/25/pngs-smilies-for-wordpress/</a><br />
<strong>Numero di icone</strong>: 19<br />
<strong>Formati</strong>: png<br />
<strong>Dimensioni</strong>: 16 x 16<br />
<strong>Licenza</strong>: <a id="m.xc" title="http://creativecommons.org/licenses/by-sa/3.0/" href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">http://creativecommons.org/licenses/by-sa/3.0/</a></p>
<h2 style="text-align: left;">Free smiles</h2>
<p style="text-align: left;"><a href="http://www.icojoy.com/articles/18/" target="_blank"><img title="freesmiles" src="http://jblog.it/wp-content/uploads/2009/12/freesmiles.gif" alt="freesmiles 19 pacchetti di icone completi e definitivi" width="540" height="100" /></a></p>
<p style="text-align: left;">Probabilmente starai pensando: &#8220;tutto qui?&#8221;. In realtà potremmo definirlo come il &#8220;<strong>framework degli emoticons</strong>&#8220;.</p>
<p style="text-align: left;">All&#8217;interno del pacchetto ci sono <strong>tutti i pezzi</strong> per realizzare le proprie emoticons.</p>
<p style="text-align: left;">Ho calcolato che con tutte le combinazioni dei diversi pezzi si avrebbero fino a <strong>600 emoticons</strong>!</p>
<p style="text-align: left;"><strong>Se non ti va di utilizzare programmi di grafica</strong> puoi sempre andare su <a id="vsh1" title="http://icojoy.com/lj/free/smiles/form.php" href="http://icojoy.com/lj/free/smiles/form.php" target="_blank">http://icojoy.com/lj/free/smiles/form.php</a>, uno script in cui potrai <strong>comporre e scaricare l&#8217;emoticons in pochi secondi</strong>.</p>
<p style="text-align: left;"><strong>Url</strong>: <a id="bwyj" title="http://www.icojoy.com/articles/18/" href="http://www.icojoy.com/articles/18/" target="_blank">http://www.icojoy.com/articles/18/</a><br />
<strong>Numero di icone</strong>: 10<br />
<strong>Formati</strong>: psd, png, gif, bmp<br />
<strong>Dimensioni</strong>: 20 x 20</p>
<h2 style="text-align: left;">Problemi con i link?</h2>
<p style="text-align: left;">Hai difficoltà a scaricare i pacchetti? Il sito o la pagina non è più disponibile? Nessun problema!</p>
<p style="text-align: left;"><strong>Io conservo tutti i pacchetti di questa lista</strong>. Quindi contattami e li metterò a disposizione per il download.</p>
<p style="text-align: left;">Perfavore, <strong>se qualche link non è più funzionante</strong> avvertimi e provvederò ad aggiornare l&#8217;articolo. Grazie.</p>
<h5 class="highlight_green" style="text-align: left;">Ti è piaciuta questa raccolta?<br />
Conosci altri pacchetti che meritano di essere segnalati?</h5>
<img src="http://jblog.it/?ak_action=api_record_view&id=774&type=feed" alt=" 19 pacchetti di icone completi e definitivi"  title="19 pacchetti di icone completi e definitivi" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2009/12/07/pacchetti-icone-definitivi-completi-icons-set-social-emoticons_774.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>10 formati di banner e annunci da evitare</title>
		<link>http://jblog.it/2009/06/19/10-formati-banner-annunci-ads-da-evitare-odiati_702.html</link>
		<comments>http://jblog.it/2009/06/19/10-formati-banner-annunci-ads-da-evitare-odiati_702.html#comments</comments>
		<pubDate>Fri, 19 Jun 2009 02:48:17 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Usabilità]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[annunci]]></category>
		<category><![CDATA[banner]]></category>
		<category><![CDATA[guadagnare]]></category>
		<category><![CDATA[promuovere]]></category>
		<category><![CDATA[pubblicità]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=702</guid>
		<description><![CDATA[Se stai considerando l&#8217;idea di inserire un po&#8217; di banner e annunci sul tuo sito ti consiglio di leggere questo interessante articolo pubblicato su Business Insider in cui vengono classificati i formati più odiati dagli utenti.
L&#8217;articolo è stato strutturato molto bene in quanto descrive i 10 formati incriminati fornendo lo screenshot del sito che lo [...]]]></description>
			<content:encoded><![CDATA[<p><a title="10 formati di banner e annunci da evitare" href="http://jblog.it/2009/06/19/10-formati-banner-annunci-ads-da-evitare-odiati_702.html"><img class="alignright size-full wp-image-703" src="http://jblog.it/wp-content/uploads/2009/10/anger.jpg" alt="anger 10 formati di banner e annunci da evitare" width="196" height="214" title="10 formati di banner e annunci da evitare" /></a>Se stai considerando l&#8217;idea di inserire un po&#8217; di banner e annunci sul tuo sito ti consiglio di leggere <a title="The 10 Online Ad Formats People Hate Most" href="http://www.businessinsider.com/10-online-ad-formats-people-hate-most-2009-6" target="_blank"><strong>questo interessante articolo</strong></a> pubblicato su <strong><em>Business Insider </em></strong>in cui vengono classificati i formati più odiati dagli utenti.</p>
<p>L&#8217;articolo è stato strutturato molto bene in quanto descrive i 10 formati incriminati fornendo lo <strong>screenshot</strong> del sito che lo utilizza, il tutto all&#8217;interno di una bellissima <strong><a title="Slideshow" href="http://www.businessinsider.com/10-online-ad-formats-people-hate-most-2009-6/banner-ad-below-header-1" target="_blank">slide-show</a></strong>.<span id="more-702"></span></p>
<h4>1. Banner sotto l&#8217;header</h4>
<p>Spacca in due la pagina e sposta più in basso il suo vero contenuto.</p>
<h4>2. Annunci simili al contenuto</h4>
<p>Sono ingannevoli e causano l&#8217;abbandono involontario del sito da parte dell&#8217;utente.</p>
<h4>3. Annunci animati</h4>
<p>Provoca distrazione e, poiché sono di bassa qualità, riduce la credibilità del sito.</p>
<h4>4. Annuncio espandibile al centro della pagina</h4>
<p>Obbliga l&#8217;utente a cliccare sul pulsante &#8220;chiudi&#8221;, interrompendo fastidiosamente la navigazione.</p>
<p><!--adv300--></p>
<h4>5. Banner vicini al logo</h4>
<p>Anche se ha il vantaggio di non interferire sulla struttura della pagina e, quindi, di non trascinare ulteriormente in basso il contenuto, riduce lo spazio riservato al logo diminuendo la chiarezza e la visibilità del brand.</p>
<h4>6. Banner ampio in alto a sinistra</h4>
<p>In molti casi, con un banner di questo tipo gli utenti si accorgono subito che non fa parte del reale contenuto della pagina.</p>
<h4>7. Google Ads testuali</h4>
<p>Interrompono il contenuto della pagina. Naturalmente il gestore del sito spera che vengano confusi con il contenuto e che, di conseguenza, vengano cliccati.</p>
<h4>8. Pulsante &#8220;chiudi&#8221; nascosto</h4>
<p>Spesso nei banner graficamente carini e animati si cerca di camuffare il pulsante &#8220;chiudi&#8221; o di ritardarne la sua apparizione. In questo caso gli utenti sono costretti a perdere tempo a cercarlo o a sorbirsi tutta l&#8217;animazione che generalmente è una sgradevole interruzione della navigazione.</p>
<h4>9. Banner &#8220;a tutto schermo&#8221;</h4>
<p>Questo tipo di banner occupa tutta l&#8217;area della pagina e obbliga l&#8217;utente a cliccare su &#8220;continua&#8221; (o qualcosa di simile) per accedere ai contenuti desiderati. Abbastanza &#8220;violenta&#8221; come soluzione.</p>
<h4>10. Annunci appariscenti e ben amalgamati</h4>
<p>Quando un banner o un annuncio assomiglia graficamente al sito e al suo contenuto tende a fondersi con la pagina risultando indistinguibile agli occhi dell&#8217;utente. In questo caso l&#8217;utente rimane disorientato, soprattutto se è un assiduo visitatore abituato al normale layout del sito.</p>
<p><em>Questa è solo una sintesi. Per leggere l&#8217;articolo originale e osservare i 10 screenshot dei siti che utilizzano questi formati vai su <a title="The 10 Online Ad Formats People Hate Most" href="http://www.businessinsider.com/10-online-ad-formats-people-hate-most-2009-6" target="_blank">http://www.businessinsider.com/10-online-ad-formats-people-hate-most-2009-6</a>.</em></p>
<p><strong><span class="highlight_green">Che ne pensi di questa lista? Secondo te è completa o avresti altri esempi negativi da aggiungere?</span></strong></p>
<img src="http://jblog.it/?ak_action=api_record_view&id=702&type=feed" alt=" 10 formati di banner e annunci da evitare"  title="10 formati di banner e annunci da evitare" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2009/06/19/10-formati-banner-annunci-ads-da-evitare-odiati_702.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ridurre le richieste HTTP con Mime HTML e data:URL</title>
		<link>http://jblog.it/2009/06/01/ridurre-richieste-http-mime-html-data-url-mhtml_537.html</link>
		<comments>http://jblog.it/2009/06/01/ridurre-richieste-http-mime-html-data-url-mhtml_537.html#comments</comments>
		<pubDate>Mon, 01 Jun 2009 03:41:32 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[Ottimizzazione]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[base64]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[classe php]]></category>
		<category><![CDATA[classi librerie]]></category>
		<category><![CDATA[data:URL]]></category>
		<category><![CDATA[mhtml]]></category>
		<category><![CDATA[mime]]></category>
		<category><![CDATA[multipart]]></category>
		<category><![CDATA[ottimizzare]]></category>
		<category><![CDATA[richieste http]]></category>
		<category><![CDATA[sprite css]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=537</guid>
		<description><![CDATA[
Il Mime HTML e lo schema data:URL sono due importanti ingredienti nella ricetta che ti permetterà di ridurre le richieste HTTP.

Una pagina Mime HTML è un tipo di pagina web in cui è possibile scriverci sia il codice html sia dei dati come immagini, oggetti flash, file audio
Lo schema data:URL è una tecnica grazie alla [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jblog.it/2009/06/01/ridurre-richieste-http-mime-html-data-url-mhtml_537.html"><img class="alignright size-full wp-image-559" title="MHTML Shake" src="http://jblog.it/wp-content/uploads/2009/06/senza-nome-33.jpg" alt="MHTML Shake" width="230" height="371" /></a></p>
<p>Il Mime HTML e lo schema data:URL sono due importanti ingredienti nella ricetta che ti permetterà di ridurre le richieste HTTP.</p>
<ul>
<li>Una pagina <strong>Mime HTML</strong> è un tipo di pagina web in cui è possibile scriverci sia il codice html sia dei dati come immagini, oggetti flash, file audio</li>
<li>Lo schema <strong>data:URL</strong> è una tecnica grazie alla quale è possibile inserire i dati nella pagina web (che abbiamo già visto nell&#8217;articolo <a title="Link permanente al post Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" rel="bookmark" href="http://jblog.it/2009/05/15/ridurre-richieste-http-parte-2-come-combinare-immagini-script-css-sprite-image-maps_405.html">Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css</a> e che riprenderò per evitarti di fare su e giù per il blog)</li>
</ul>
<p>Non utilizzeremo queste due tecniche separatamente ma ci serviranno per creare il <strong>mix esplosivo</strong> <img src='http://jblog.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="Ridurre le richieste HTTP con Mime HTML e data:URL" />  per caricare quanti più dati possibile in una sola richiesta http: quella della pagina web.</p>
<h2>Lo schema data:URL</h2>
<p><!--adv300--></p>
<p>Per capire bene il Mime HTML è necessario sapere come codificare i file in base64 e come utilizzarli all&#8217;interno della pagina per poi vedere l&#8217;intera struttura di un documento MHTML.</p>
<p>Il vantaggio fondamentale di questa tecnica consiste nel risparmio di tante richieste http quanti sono gli oggetti e le immagini codificati in base64 che inseriamo nella pagina.<span id="more-537"></span></p>
<p>Vediamo subito un <strong>esempio</strong>.</p>
<pre lang="html">&lt;IMG ALT="Foto" SRC="data:image/gif; base64,
	R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwhhx4dbgYKAAA7B72VFgl2Tf7452
	AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
	ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
	a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
	ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
	F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH" /&gt;</pre>
<p>Dopo la paura iniziale, in genere ci si domanda: <strong>cosa sono quei caratteri e come faccio a inserirli?</strong></p>
<p>Quell&#8217;ammasso di caratteri è la <strong>codifica in base64</strong> dell&#8217;immagine. In pratica, è il contenuto del file immagine codificato in base64.</p>
<p>Per<strong> codificare un&#8217;immagine in base64</strong> si utilizza una semplice <strong>funzione php</strong>: <em>base64_encode</em>.</p>
<p>L&#8217;ultima questione riguarda il tipo <strong>MIME</strong> che si può ottenere in due modi:</p>
<ul>
<li>utilizzando la funzione <strong>mime_content_type</strong>, dopo aver abilitato l&#8217;<strong>estensione php_mime_magic.dll</strong>.</li>
<li>leggendo le informazioni del file grazie le funzioni <a title="File Information" href="http://it2.php.net/manual/en/book.fileinfo.php"><strong>File Information</strong></a> di php. Era un&#8217;estensione PECL, ma ora non lo è più. Bisogna utilizzare la <strong>libreria esterna magic_open</strong></li>
</ul>
<p>Nel caso non si possano utilizzare queste funzioni si dovrà <strong>scrivere manualmente</strong>, il che presuppone che si conosca il tipo dell&#8217;oggetto o dell&#8217;immagine da inserire.</p>
<h4>Come inserire un&#8217;immagine in base64 (senza funzioni per il tipo MIME)</h4>
<pre lang="php">&lt;img src="data:image/jpeg;base64,&lt;?
echo base64_encode(file_get_contents("img.jpg")); ?&gt;" alt="Immagine" /&gt;</pre>
<h4>Come inserire un&#8217;immagine in base64 (con funzioni per il tipo MIME)</h4>
<pre lang="php">&lt;? $mime = mime_content_type("img.jpg"); ?&gt;
&lt;img src="data:&lt;? echo $mime; ?&gt;;base64,&lt;?
echo base64_encode(file_get_contents("img.jpg")); ?&gt;" alt="Immagine" /&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/img_base64/index.txt" target="_blank">http://test.jblog.it/img_base64/index.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/img_base64/" target="_blank">http://test.jblog.it/img_base64/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/img_base64.zip" target="_blank">http://download.jblog.it/img_base64.zip</a></p>
<h2>Mime HTML</h2>
<p>Il termine &#8220;<em>Mime HTML</em>&#8221; sta per &#8220;<em>Multipurpose Internet Mail Extensions HyperText Markup Language</em>&#8220;.</p>
<p>Per avere un&#8217;idea di quella che può essere una pagina mhtml (di estensione .mht) pensiamo ad un&#8217;<strong>email con dei file allegati</strong> (che possono essere anche delle immagini presenti all&#8217;interno del testo). I file che vengono inviati tramite email, sottoforma di allegati, vengono codificati in <strong>base64 </strong>e successivamente inseriti nell&#8217;intestazione dell&#8217;email. Quando il nostro client riceve l&#8217;email, prima decodifica gli allegati per renderli fruibili ed eventualmente pronti per il download. Una pagina MHTML funziona grosso modo così.</p>
<p><strong>ATTENZIONE.</strong> Una pagina MHTML non deve necessariamente essere quella in cui viene scritto il codice html. Infatti può esserlo anche un file css che utilizza delle immagini (che vedremo successivamente).</p>
<h3>Struttura di una pagina MHTML</h3>
<p><img class="alignright size-full wp-image-545" title="Schema Pagina MHTML" src="http://jblog.it/wp-content/uploads/2009/05/mhtml_schema.png" alt="Schema Pagina MHTML" width="271" height="253" />Generalmente una pagina di questo tipo è composta da <strong>3 mattoni fondamentali</strong>:</p>
<ul>
<li>nell&#8217;<strong>intestazione </strong>si specifica che il file è di tipo &#8220;multipart/related&#8221;, il separatore dei dati codificati in base64 e il tipo di contenuto del file (es. &#8220;text/html&#8221;)</li>
<li>la seconda parte è quella relativa ai <strong>dati codificati in base 64</strong> separati dal separatore specificato nell&#8217;intestazione e definiti dai rispettivi campi &#8220;Content-Location&#8221;, &#8220;Content-Type&#8221; e &#8220;Content-Transfer-Encoding&#8221; (naturalmente, quest&#8217;ultimo viene impostato con &#8220;base64&#8243;). Possono trovarsi anche in fondo alla pagina, il che è meglio poiché si da priorità al caricamento del codice</li>
<li>nella terza parte viene scritto il <strong>corpo della pagina</strong> (o del messaggio, nel caso delle email) in html, css o altro, all&#8217;interno del quale verranno richiamati i dati specificati nella seconda parte del documento</li>
</ul>
<h3>Esempio di documento</h3>
<p>L&#8217;esempio seguente è una pagina web con allegate 2 immagini, e segue lo schema in figura.</p>
<p>Purtroppo <strong>Internet Explorer</strong> gestisce diversamente i dati allegati e ci costringe a scrivere due versioni di codice. Tuttavia, questa è una delle rare volte in cui preferisco IE poiché con il browser Microsoft i dati in base64 vengono scritti una sola volta e possono essere <strong>richiamati infinite volte </strong>all&#8217;interno del documento grazie alla stringa specificata in &#8220;Content-Location&#8221;. Con <strong>gli altri browser</strong> (Firefox, Opera, Safari, Chrome) è necessario scrivere i dati codificati per ogni utilizzo dell&#8217;oggetto o immagine, il che rende il tutto più pesante e ci costringe a pensare due volte prima di decidere di inviare un&#8217;oggetto all&#8217;interno del documento MIME Html.</p>
<pre lang="html">&lt;!--
MIME-Version: 1.0
Content-Type: multipart/related; boundary="|b|o|u|n|d|a|r|y|"

--|b|o|u|n|d|a|r|y|
Content-Location:2bmp24869
Content-Type:image/bmp
Content-Transfer-Encoding:base64

Qk0eCgAAAAAAADYEAAAoA[...caratteri...]QEBAQEBAQEBZA==
--|b|o|u|n|d|a|r|y|
Content-Location:1bmp21242
Content-Type:image/bmp
Content-Transfer-Encoding:base64

Qk12CwAAAAAAAD[...caratteri...]JCQkJCQkJ
--&gt;
&lt;!--
--|b|o|u|n|d|a|r|y|
Content-Location:5bmp92853
Content-Type:image/bmp
Content-Transfer-Encoding:base64

<span class="attribute-value">DCwmoA2NiOAKioQ</span>[...caratteri...]<span class="attribute-value">QDz87gA0dGCALq6X</span>
--&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr" lang="en-US"&gt;
&lt;head&gt;
  &lt;title&gt;Titolo pagina&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

	&lt;object data="data:image/bmp;base64,Qk0eCgAAAAAAADYEAAAoA[...caratteri...]QEBAQEBAQEBZA=="&gt;
		&lt;img src="mhtml:http://localhost/jblog_script/mhtml_dataurl/index2.php!2bmp24869" alt="img3" /&gt;
	&lt;/object&gt;

	&lt;div style=" width:200px; height:200px; background-image:url(data:image/bmp;base64,Qk12CwAAAAAAAD[...caratteri...]JCQkJCQkJ); *background-image:url(mhtml:http://localhost/jblog_script/mhtml_dataurl/index2.php!1bmp21242);"&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Il fatto che queste immagini abbiano questo &#8220;strano&#8221; formato non ci deve assolutamente far preoccupare. Gli utilizzi sono quelli di sempre: all&#8217;interno del tag &lt;img&gt;, come sfondo di un elemento grazie alle regole css, ecc.</p>
<p><strong>Compatibilità con IE.</strong> Per gestire la compatibilità con il browser Internet Explorer è necessario inserire l&#8217;immagine compatibile con IE all&#8217;interno dei tag &lt;object&gt; in cui viene specificata l&#8217;immagine in un formato compatibile con i restanti browser. I risultati sono i seguenti:</p>
<ul>
<li>se si accede alla pagina con un <strong>browser diverso da IE</strong>, il tag object funzionerà correttamente mostrando l&#8217;immagine; il tag &lt;img&gt; al suo interno non verrà preso in considerazione dal browser</li>
<li>nel caso in cui si acceda con <strong>Internet Explorer</strong>, poiché il tag &lt;object&gt; non funzionerà verrà considerato il tag &lt;img&gt; in cui l&#8217;immagine specificata è in un formato compatibile con IE</li>
</ul>
<p><strong>Regole da rispettare.</strong> Per concludere vorrei evidenziare alcune importanti caratteristiche riguardo il formato di un documento MHTML:</p>
<ul>
<li>&#8220;Mime Version&#8221; e &#8220;Content-Type&#8221; devono trovarsi obbligatoriamente in testa alla pagina, prima del &lt;!Doctype&#8230;&gt;</li>
<li>Il primo separatore può essere separato a piacere dall&#8217;intestazione del documento</li>
<li>Il separatore (boundary) deve trovarsi esattamente fra i dati in base64 dell&#8217;oggetto precedente e le intestazioni dell&#8217;oggetto successivo, senza ulteriori &#8220;a capo&#8221;, &#8220;spazi&#8221;, &#8220;tab&#8221;, e altri caratteri</li>
<li>I vari oggetti possono essere separati solo da &#8220;fine&#8221; (&#8211;&gt;) e &#8220;inizio&#8221; (&lt;!&#8211;) commenti, stando attenti a non inserire altri caratteri tra &lt;!&#8211; e il separatore; invece, fra il contenuto in base64 e &#8211;&gt; possono esserci caratteri di escape (a capo, tab, ecc.)</li>
<li>Prima del separatore è necessario inserire due trattini &#8220;&#8211;&#8221;</li>
<li>Riguardo IE, l&#8217;indirizzo da scrivere dopo <strong>mhtml:</strong> deve essere identico all&#8217;indirizzo visibile nella barra degli indirizzi. Questo indirizzo si ottiene dalla variabile riservata <strong>$_SERVER['REQUEST_URI']</strong></li>
</ul>
<h2>Utilizzare concretamente Mime HTML e data:URL</h2>
<p>Ecco come immagino la generazione di un documento Mime HTML con lo schema data:URL.</p>
<p><img class="aligncenter size-full wp-image-553" title="Schema MHTML e data:URL, processo" src="http://jblog.it/wp-content/uploads/2009/06/mhtml_dataurl.png" alt="Schema MHTML e data:URL, processo" width="507" height="268" /><strong>Prima fase.</strong> Gli oggetti e le immagini vengono codificati in base64 e sistemati all&#8217;interno del documento.</p>
<p><strong>Seconda fase.</strong> Il browser legge il codice html e decodifica i dati allegati portandoli al loro formato primitivo: le immagini ritornano immagini, gli oggetti flash ritornano animazioni, ecc.</p>
<h3>La classe MimeHtmlHandler</h3>
<p>Per automatizzare il tutto ho sviluppato una piccola classe PHP che con un paio di righe ti permetterà di inserire all&#8217;interno del documento MHtml un&#8217;immagine precedentemente allegata.</p>
<p><strong>N.B.</strong> la proprietà <strong>*background-image </strong>serve per rimpiazzare la prima background-image nel caso questa non funzionasse. In particolare, la proprietà *background-image viene utilizzata per IE mentre background-image funziona con i restanti browser.</p>
<p>Il codice dell&#8217;esempio precedente è stato ottenuto da questo script PHP:</p>
<pre lang="php">&lt;?
// ( 1 ) Crea l'oggetto
$mhh = new MimeHtmlHandler("http://test.jblog.it","|b|o|u|n|d|a|r|y|","MIME Version 1.0");

// ( 2 ) Header "Content-Type" e "MIME Version"
$mph-&gt;printHeader();

?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr" lang="en-US"&gt;
&lt;head&gt;
  &lt;title&gt;mhtml test page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id="test1"&gt;test #1&lt;/div&gt;
  &lt;div id="test2"&gt;test #2&lt;/div&gt;

  &lt;object data="&lt;? $mhh-&gt;inc("2.bmp","image/bmp"); ?&gt;"&gt;
	  &lt;img src="&lt;? $mhh-&gt;incIE("2.bmp"); ?&gt;" alt="img3" /&gt;
  &lt;/object&gt;

 &lt;div style=" width:200px; height:200px; background-image:url(&lt;? $mhh-&gt;inc("1.bmp","image/bmp"); ?&gt;); *background-image:url(&lt;? $mhh-&gt;incIE("1.bmp"); ?&gt;);"&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
&lt;?
// ( 3 ) Crea la lista dei dati (per IE)
$mhh-&gt;incAll();
?&gt;</pre>
<h4>Caratteristiche principali della classe MimeHtmlHandler</h4>
<p>La classe ha due <strong>array privati</strong>: il primo è quello in cui vengono conservati gli oggetti che vengono inseriti nella pagina in modo da evitare di codificarli e impostarli nuovamente per un successivo inserimento; il secondo è quello relativo ai nomi in codice specificati in &#8220;Content-Location&#8221; quando si stampa la lista dei dati codificati che verrà utilizzata solo da Internet Explorer.</p>
<p>Le <strong>funzioni da utilizzare</strong> sono solo due: inc e incIE. Queste due funzioni permettono di inserire oggetti in formati compatibili con tutti i browser e con IE. Inoltre, in base al tipo e al numero di argomenti passati è possibile creare da zero un oggetto o richiamarne uno già inserito.</p>
<p>Quando si vuole stampare un&#8217;oggetto già inserito precedentemente il nome del file verrà cercato nell&#8217;array degli oggetti. La <strong>ricerca </strong>viene effettuata a partire dall&#8217;<strong>ultimo elemento</strong> in quanto sono molto più probabili gli inserimenti consecutivi di immagini rispetto a quelli richiesti in punti molto diversi e lontani di una pagina.</p>
<h4>Le 3 istruzioni fondamentali</h4>
<ol>
<li>Crea l&#8217;oggetto della classe specificando l&#8217;url di base delle immagini, il separatore (boundary) e la versione MIME</li>
<li>Stampa l&#8217;intestazione &#8220;Content-Type&#8221; e &#8220;MIME Version&#8221;</li>
<li>In fondo alla pagina viene stampata la lista dei dati in base64 che servono a Internet Explorer, mentre per gli altri browser i dati codificati vengono specificati all&#8217;interno del tag in cui si utilizzano</li>
</ol>
<h4>Come inserire un&#8217;immagine</h4>
<p>Sono state create due funzioni distinte per l&#8217;inserimento di un&#8217;immagine compatibile con IE o con gli altri browser (rispettivamente incIE e inc). Analizziamo i casi più comuni relativi all&#8217;utilizzo di queste funzioni.</p>
<ul>
<li><strong>Inserire un&#8217;immagine in modo che sia compatibile con tutti i browser. </strong>Richiamare la funzione inc() all&#8217;interno dell&#8217;attributo &#8220;data&#8221; del tag &lt;object&gt;, passando come parametri il percorso del file e il tipo mime. All&#8217;interno dei tag &lt;object&gt; e &lt;/object&gt; inserire il tag &lt;img&gt; richiamando la funzione incIE() all&#8217;interno dell&#8217;attributo &#8220;src&#8221;. Alla funzione incIE basterà passare solo il nome del file grazie al quale verranno recuperati gli altri dati relativi all&#8217;oggetto da stampare.</li>
<li><strong>Inserire un&#8217;immagine esistente.</strong> Alle funzioni inc() e incIE() basterà passare il nome del file.</li>
</ul>
<h4>Demo e download</h4>
<p>Per vedere una demo vai su <a href="http://test.jblog.it/mhtml1/index.php" target="_blank">http://test.jblog.it/mhtml1/</a></p>
<p>Per scaricare la classe MimeHtmlHandler e l’esempio vai su <a href="http://download.jblog.it/mhtml1.zip" target="_blank">http://download.jblog.it/mhtml1.zip</a></p>
<h2>Esempio2. CSS e data:URL</h2>
<p>Per utilizzare la classe MimeHtmlHandler all&#8217;interno di un file CSS, la prima operazione da fare è impostare il server Apache in modo che processi i file CSS come file PHP. Per fare ciò basterà aggiungere queste righe:</p>
<pre>&lt;FilesMatch "myfile.css$"&gt;
	AddHandler application/x-httpd-php .css
&lt;/FilesMatch&gt;</pre>
<p>Infine componiamo il file css:</p>
<ul>
<li>processandolo come file php si perde la natura del file css che ripristiniamo inviando l&#8217;header &#8220;Content-Type:text/css&#8221;</li>
<li>includiamo la classe MimeHtmlHandler, e richiamiamo le prime due funzioni fondamentali (costruttore e printHeader() )</li>
<li>componiamo il corpo del file css utilizzando, dove occorrono, le funzioni inc() e incIE()</li>
<li>infine, richiamiamo l&#8217;ultima funzione fondamentale incAll() per stampare la lista dei file che servirà ad Internet Explorer</li>
</ul>
<pre lang="php">&lt;? header("Content-Type: text/css"); ?&gt;
/*&lt;?
include("MimeHtmlHandler.php");

// ( 1 ) Crea l'oggetto
$mhh = new MimeHtmlHandler("http://localhost","|b|o|u|n|d|a|r|y|","");

// ( 2 ) Header "Content-Type" e "MIME Version"
$mhh-&gt;printHeader();
?&gt;*/

#test1 {
  background-image: url("&lt;? $mhh-&gt;inc("2.bmp","image/bmp"); ?&gt;"); /* normal */
  *background-image: url(&lt;? $mhh-&gt;incIE("2.bmp"); ?&gt;); /* IE &lt; 8 */
}

#test2 {
  background-image: url("&lt;? $mhh-&gt;inc("1.bmp","image/bmp"); ?&gt;"); /* normal */
  *background-image: url(&lt;? $mhh-&gt;incIE("1.bmp"); ?&gt;); /* IE &lt; 8 */
}

div {
  width: 100px;
  height: 100px;
  font: bold 24px Arial;
}
/*&lt;?
// ( 3 ) Crea la lista dei dati (per IE)
$mhh-&gt;incAll();

?&gt;*/</pre>
<h4>Demo e download</h4>
<p>Per vedere una demo vai su <a href="http://test.jblog.it/mhtml2/index.php" target="_blank">http://test.jblog.it/mhtml2/</a></p>
<p>Per scaricare la classe MimeHtmlHandler e l’esempio vai su <a href="http://download.jblog.it/mhtml2.zip" target="_blank">http://download.jblog.it/mhtml2.zip</a></p>
<h2>Considerazioni finali</h2>
<p>Nei precedenti esempi abbiamo visto solo come utilizzare queste tecniche per allegare le immagini, anche perché è questa la situazione più frequente. Tuttavia, nello stesso modo potresti allegare facilmente <strong>oggetti flash e applet Java</strong>: nello stesso modo!</p>
<p><strong>Compatibilità IE.</strong> Ho testato queste tecniche con Internet Explorer, dalla versione 5.5 alla 8 e non ho riscontrato grossi problemi. Una piccola anomalia si verifica quando si aggiorna la pagina più volte e le immagini non vengono caricate. Sinceramente non so da cosa può dipendere.</p>
<p>Queste tecniche, in confronto ai CSS Sprite sembrano<strong> &#8220;roba da smanettoni&#8221;</strong> a causa dell&#8217;ammasso di numeri e lettere che genera la codifica in base64 e dell&#8217;utilizzo (leggero) di php. Non farti ingannare&#8230; In fondo cosa c&#8217;è di così difficile?!? Dovrai solo pensare alcuni minuti alle immagini da allegare ai documenti (html, css, ecc.) e analizzare un po&#8217; le velocità di caricamento per capire fino a che punto potranno avvantagiarti. Io dico di provarci! <img src='http://jblog.it/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="Ridurre le richieste HTTP con Mime HTML e data:URL" /> </p>
<p><span class="highlight_green">Non escludo che nella classe MimeHtmlHandler ci possano essere dei <strong>bug</strong>. Per qualsiasi problema, chiarimento e curiosità sarei felice se mi contattattassi. Dimmi com&#8217;è andata e se queste tecniche ti sono state utili: non vedo l&#8217;ora di sapere gli esiti dei tuoi esperimenti!</span></p>
<h2>Crediti</h2>
<p><a href="http://www.phpied.com/" target="_blank">Phpied.com</a> &#8211; <a href="http://www.phpied.com/data-urls-what-are-they-and-how-to-use/" target="_blank">data:urls &#8211; what are they and how to use them</a></p>
<p><a href="http://www.phpied.com/" target="_blank">Phpied.com</a> &#8211; <a href="http://www.phpied.com/mhtml-when-you-need-data-uris-in-ie7-and-under/" target="_blank">MHTML &#8211; when you need data: URIs in IE7 and under</a></p>
<p><strong>Foto1.</strong> <a href="http://www.flickr.com/photos/benbeiske/3028805547/" target="_blank">Vientiane 04 &#8211; Pink Dragonfruit shake</a> di <a href="http://www.flickr.com/photos/benbeiske/">Ben Beiske</a></p>
<img src="http://jblog.it/?ak_action=api_record_view&id=537&type=feed" alt=" Ridurre le richieste HTTP con Mime HTML e data:URL"  title="Ridurre le richieste HTTP con Mime HTML e data:URL" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2009/06/01/ridurre-richieste-http-mime-html-data-url-mhtml_537.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css</title>
		<link>http://jblog.it/2009/05/15/ridurre-richieste-http-parte-2-come-combinare-immagini-script-css-sprite-image-maps_405.html</link>
		<comments>http://jblog.it/2009/05/15/ridurre-richieste-http-parte-2-come-combinare-immagini-script-css-sprite-image-maps_405.html#comments</comments>
		<pubDate>Fri, 15 May 2009 15:04:06 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[Grafica]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ottimizzazione]]></category>
		<category><![CDATA[Web design]]></category>
		<category><![CDATA[base64]]></category>
		<category><![CDATA[classe php]]></category>
		<category><![CDATA[data:URL]]></category>
		<category><![CDATA[ottimizzare]]></category>
		<category><![CDATA[richieste http]]></category>
		<category><![CDATA[sprite css]]></category>

		<guid isPermaLink="false">http://jblog.it/?p=405</guid>
		<description><![CDATA[Dopo il precedente articolo su come utilizzare la cache del browser passiamo ad azioni più concrete per ridurre le richieste http: minimizzare il numero di componenti di una pagina. Dico &#8220;concrete&#8221; perché, mentre i comportamenti e le tecniche relative alla cache possono avere effetti diversi a seconda del browser e delle sue impostazioni, diminuire i [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" href="http://jblog.it/2009/05/15/ridurre-richieste-http-parte-2-come-combinare-immagini-script-css-sprite-image-maps_405.html" target="_blank"><img class="alignright size-full wp-image-438" title="Ghepardo in corsa" src="http://jblog.it/wp-content/uploads/2009/05/2913134974_6d1839b33b.jpg" alt="2913134974 6d1839b33b Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" width="300" height="154" /></a>Dopo il precedente articolo su <a title="Ridurre le richieste HTTP (parte 1): come utilizzare la cache del browser" rel="bookmark" href="http://jblog.it/2009/04/24/ridurre-richieste-http-come-utilizzare-cache-browser_124.html">come utilizzare la cache del browser</a> passiamo ad <strong>azioni più <em>concrete</em></strong><em> </em>per ridurre le richieste http: <strong>minimizzare il numero di componenti di una pagina</strong>. Dico &#8220;concrete&#8221; perché, mentre i comportamenti e le tecniche relative alla cache possono avere effetti diversi a seconda del browser e delle sue impostazioni, diminuire i componenti di una pagina è qualcosa che <strong>dipende esclusivamente dal webmaster</strong>, con risultati e prestazioni prevedibili.</p>
<h4>Gestire la cache è fatica sprecata?</h4>
<p><strong>Assolutamente no!</strong> Il fatto è che ogni utente che accede al sito la prima volta deve comunque attendere il caricamento completo della pagina e dei suoi componenti, che vengono subito memorizzati in cache. Il miglioramento di prestazioni si verifica a partire dalla seconda pagina che viene visitata in quanto i componenti vengono letti dalla cache, evitando di effettuare nuove (e inutili) richieste http.</p>
<h4>Vantaggi immediati</h4>
<p>Diminuire i componenti di una pagina consente di avere un notevole aumento delle prestazioni che <strong>migliora l&#8217;esperienza tutti gli utenti</strong>, vecchi e nuovi, dalla prima all&#8217;ultima pagina.</p>
<p><span class="highlight_yellow"><strong>In questo articolo</strong> vedremo alcune tecniche che <strong>riducono drasticamente</strong> il numero e il tempo di caricamento relativo a immagini, script e css. Queste tecniche non fanno altro che <strong>combinare questi componenti</strong> in modo da caricarne pochi ma più pesanti anziché molti ma leggeri. Parleremo di image maps, sprite css, dello schema data:URL, di generatori di sprite css, di come combinare automaticamente javascript e css, vedremo che a volte è meglio inserire il codice direttamente nella pagina html, e come è possibile evitare gli script duplicati.</span><span id="more-405"></span></p>
<h2>Pochi ma buoni</h2>
<p><!--adv300--></p>
<p><img class="alignright size-full wp-image-439" title="Olimpiadi Pechino - Ciclismo" src="http://jblog.it/wp-content/uploads/2009/05/cic02.jpg" alt="Olimpiadi Pechino - Ciclismo" width="270" height="180" />A primo impatto potrebbe sembrare un&#8217;assurdità affermare che &#8220;è meglio caricare un file da 300 kbyte anziché 10 file da 40kb&#8221;. Fortunatamente non lo è!</p>
<p>Infatti, se prendiamo 10 immagini e le copiamo all&#8217;interno di un solo file immagine, quest&#8217;ultimo file occuperà molto meno rispetto alla somma delle 10 immagini. <strong>Il motivo</strong> è che nei file vengono memorizzate tantissime informazioni oltre al contenuto che i software ci mostrano.</p>
<p><strong>Ad esempio</strong>, se apriamo una fotografia quello che vediamo è semplicemente un&#8217;immagine. Tuttavia, quel file contiene anche una serie di informazioni come: modello fotocamera, altezza, larghezza, risoluzione, ecc.</p>
<p>Caricare una sola immagine (ed un set di informazioni) è meglio che caricare dieci immagini (e dieci set di informazioni) perché:</p>
<ul>
<li>la dimensione del file più grosso è minore della somma di tanti file più piccoli</li>
<li>tante richieste http si riducono a una sola</li>
</ul>
<p>Mentre sulla riduzione delle richieste http possiamo essere d&#8217;accordo, credo che tu abbia qualche dubbio sul fatto che diminuisca la dimensione del file più grande. Bene, fai questo<strong> semplice esperimento</strong>:</p>
<ul>
<li>prendi un&#8217;immagine e fanne 10 copie</li>
<li>crea un&#8217;immagine grande abbastanza da contenere perfettamente 10 immagini uguali</li>
<li>confronta la dimensione dei 10 file immagine con quella del file immagine più grande</li>
</ul>
<h4>I componenti incriminati</h4>
<p>Generalmente si focalizza l&#8217;attenzione su immagini, javascript e css perché sono presenti in tutte le pagine e, se mal gestiti, non solo provocano un eccessivo numero di richieste http ma rallentano il normale caricamento delle pagine.</p>
<h2>Combinare le immagini: &#8220;image maps&#8221;</h2>
<p><img class="alignright size-full wp-image-440" title="Puzzle di gatti" src="http://jblog.it/wp-content/uploads/2009/05/312855876_abbdbcf21b.jpg" alt="Puzzle di gatti" width="270" height="162" />Se vogliamo inserire due immagini affiancate basta combinarle in un unico file immagine e inserire quest&#8217;ultimo all&#8217;interno della pagina.</p>
<p>I problemi nascono nel momento in cui, ad esempio, vogliamo applicare un diverso link a ciascuna immagine. Infatti, essendo un&#8217;unica immagine, non possiamo racchiuderla all&#8217;interno di un tag &lt;a&gt;, ma dobbiamo <strong>&#8220;mappare&#8221; le immagini</strong>.</p>
<p>Prima di illustrare i tre metodi è necessario descrivere gli <strong>strumenti a nostra disposizione</strong>.</p>
<h4>Il tag &lt;area&gt;</h4>
<p>Serve per creare le singole aree, cliccabili o meno, dell&#8217;immagine. Non richiede il tag di chiusura completo (&lt;/area&gt;).</p>
<p><strong>Formato</strong>. <code>&lt;area shape="..." coords="..." href="http://example.com/link1.html"&gt;</code></p>
<p><span class="highlight_green">Per creare<strong> documenti più accessibili</strong>, si può utilizzare il tag &lt;a&gt;&#8230;&lt;/a&gt; con gli stessi attributi di &lt;area&gt;. Infatti, grazie al tag &lt;a&gt; si può specificare un testo alternativo per l&#8217;area.</span></p>
<p><strong>Formato</strong>. <code>&lt;a </code><code>href="http://example.com/link1.html" </code><code>shape="..." coords="..." /&gt;Area1&lt;/a&gt;<br />
</code></p>
<p><strong>shape</strong>: (default, rect, circle, poly), cioè (default, rettangolo, cerchio, poligono). Specifica la forma di una regione.</p>
<p><strong>coords</strong>: coordinate. Specificano la posizione e la sagoma. Il numero e l&#8217;ordine dei valori dipendono dalla forma specificata da <em>shape</em>.</p>
<ul>
<li><em>rect</em>: left-x, top-y, right-x, bottom-y. I vertici opposti del rettangolo.</li>
<li><em>circle</em>: center-x, center-y, radius. Coordinate del centro e lunghezza del raggio.</li>
<li><em>poly</em>: x1, y1, x2, y2, &#8230;, xN, yN. Coordinate di tutti i vertici del poligono.</li>
</ul>
<p><strong>href</strong>: link associato alla regione.</p>
<p><strong>nohref</strong>: impostare con true per specificare che la regione non ha link associati, altrimenti non impostare.</p>
<h4>Il tag &lt;map&gt;</h4>
<p>Specifica una mappa da far richiamare da un oggetto. È richiesto il tag di chiusura &lt;/map&gt;.</p>
<p>All&#8217;interno dei tag &lt;map&gt;&#8230;&lt;/map&gt; si inseriscono tutte le aree relative alla mappa.</p>
<p><strong>name</strong>. Assegna un nome alla mappa.</p>
<h4>Associare una mappa a un elemento</h4>
<p>Utilizzare l&#8217;attributo <strong>usemap</strong> fra gli attributi dell&#8217;elemento, specificando un URI.</p>
<p>Ricorda che un URI può essere un indirizzo del tipo http://www.example&#8230; o un id del tipo #nome-mappa.</p>
<p><strong>Formato</strong>. <code>&lt;img src="foto.jpg" alt="La mia foto" usemap="mappafoto" /&gt;</code></p>
<h3>Image maps lato client</h3>
<p>La presenza di usemap <strong>implica che l&#8217;oggetto sia un immagine</strong>. Se non lo è, i browser potrebbero comunque implementare un&#8217;interazione con l&#8217;utente simile a quella per le immagini. Purtroppo <strong>non tutti i browser</strong> eseguono correttamente la mappatura di un immagine o di un oggetto.</p>
<p>Un blocco &lt;map&gt; può contenere sia elementi &lt;area&gt; sia elementi a livello di blocco come &lt;a&gt; per aumentare la compatibilità con i browser più datati.</p>
<h4>Alcune osservazioni</h4>
<ol>
<li>Se sono presenti contemporaneamente &lt;a&gt; ed &lt;area&gt;, i browser recenti ignorano il tag &lt;area&gt;</li>
<li>Se due o più regioni si sovrappongono, la prima regione avrà la precedenza sulle altre</li>
<li>L&#8217;elemento &lt;map&gt; non è compatibile con i browser HTML 2.0</li>
</ol>
<h4>Demo e download</h4>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/imagemap_cs/" target="_blank">http://test.jblog.it/imagemap_cs/</a></p>
<p>In quest&#8217;altro esempio le aree sono rettangolari, circolari e poligonali. <a href="http://test.jblog.it/imagemap_cs2/" target="_blank">http://test.jblog.it/imagemap_cs2/</a></p>
<p>Per scaricare entrambi gli esempi vai a <a href="http://download.jblog.it/imagemap_cs_cs2.zip" target="_blank">http://download.jblog.it/imagemap_cs_cs2.zip</a></p>
<h4>Esempio 1</h4>
<p>Classico esempio con &lt;map&gt; all&#8217;interno dell&#8217;oggetto, ed i tag &lt;a&gt; all&#8217;interno di &lt;map&gt;.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;P&gt;&lt;OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"&gt;
		&lt;MAP name="map1"&gt;
			Navigate the site:
			&lt;A href="guide.html" shape="rect" coords="0,0,118,28"&gt;Access Guide&lt;/a&gt; |
			&lt;A href="shortcut.html" shape="rect" coords="118,0,184,28"&gt;Go&lt;/A&gt; |
			&lt;A href="search.html" shape="circle" coords="184,200,60"&gt;Search&lt;/A&gt; |
			&lt;A href="top10.html" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;Top Ten&lt;/A&gt;
		&lt;/MAP&gt;
	&lt;/OBJECT&gt;&lt;/P&gt;
	&lt;/BODY&gt;
&lt;/HTML&gt;</pre>
<h4>Esempio 2</h4>
<p>Come utilizzare la mappa richiamandola con usemap, senza inglobarla all&#8217;interno dei tag &lt;object&gt;.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;P&gt;&lt;OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"&gt;&lt;/OBJECT&gt;&lt;/P&gt;
	&lt;MAP name="map1"&gt;
		Navigate the site:
		&lt;A href="guide.html" shape="rect" coords="0,0,118,28"&gt;Access Guide&lt;/a&gt; |
		&lt;A href="shortcut.html" shape="rect" coords="118,0,184,28"&gt;Go&lt;/A&gt; |
		&lt;A href="search.html" shape="circle" coords="184,200,60"&gt;Search&lt;/A&gt; |
		&lt;A href="top10.html" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;Top Ten&lt;/A&gt;
	&lt;/MAP&gt;
&lt;/HTML&gt;</pre>
<h4>Esempio 3</h4>
<p>Utilizzo degli elementi &lt;area&gt;.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;P&gt;&lt;OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"&gt;&lt;/OBJECT&gt;&lt;/P&gt;
	&lt;MAP name="map1"&gt;
		Navigate the site:
		&lt;AREA href="guide.html" alt="Access Guide" shape="rect" coords="0,0,118,28"&gt;
		&lt;AREA href="search.html" alt="Search" shape="rect" coords="184,0,276,28"&gt;
		&lt;AREA href="shortcut.html" alt="Go" shape="circle" coords="184,200,60"&gt;
		&lt;AREA href="top10.html" alt="Top Ten" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;
	&lt;/MAP&gt;
&lt;/HTML&gt;</pre>
<h4>Esempio 4</h4>
<p>Questo è un utilizzo concreto della condivisione di una mappa fra più immagini. Questo codice carica l&#8217;immagine più interna (navbar1.gif) se l&#8217;immagine esterna (navbar1.png) non viene processata correttamente dal browser. Ad entrambe le immagini viene associata la stessa mappa.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;P&gt;&lt;OBJECT data="navbar1.png" type="image/png" usemap="#map1"&gt;
		&lt;OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"&gt;&lt;/OBJECT&gt;
	&lt;/OBJECT&gt;&lt;/P&gt;
	&lt;MAP name="map1"&gt;
		Navigate the site:
		&lt;A href="guide.html" shape="rect" coords="0,0,118,28"&gt;Access Guide&lt;/a&gt; |
		&lt;A href="shortcut.html" shape="rect" coords="118,0,184,28"&gt;Go&lt;/A&gt; |
		&lt;A href="search.html" shape="circle" coords="184,200,60"&gt;Search&lt;/A&gt; |
		&lt;A href="top10.html" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;Top Ten&lt;/A&gt;
	&lt;/MAP&gt;
&lt;/HTML&gt;</pre>
<h4>Esempio 5</h4>
<p>Utilizzo combinato di &lt;area&gt; e &lt;a&gt; per avere una maggiore compatibilità. I browser più recenti non considerano gli elementi &lt;area&gt;.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;P&gt;&lt;OBJECT data="navbar1.gif" type="image/gif" usemap="#map1"&gt;&lt;/OBJECT&gt;&lt;/P&gt;
	&lt;MAP name="map1"&gt;
		Navigate the site:
		&lt;AREA href="guide.html" alt="Access Guide" shape="rect" coords="0,0,118,28"&gt;
		&lt;AREA href="search.html" alt="Search" shape="rect" coords="184,0,276,28"&gt;
		&lt;AREA href="shortcut.html" alt="Go" shape="circle" coords="184,200,60"&gt;
		&lt;AREA href="top10.html" alt="Top Ten" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;
		&lt;A href="guide.html" shape="rect" coords="0,0,118,28"&gt;Access Guide&lt;/a&gt; |
		&lt;A href="shortcut.html" shape="rect" coords="118,0,184,28"&gt;Go&lt;/A&gt; |
		&lt;A href="search.html" shape="circle" coords="184,200,60"&gt;Search&lt;/A&gt; |
		&lt;A href="top10.html" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;Top Ten&lt;/A&gt;
	&lt;/MAP&gt;
&lt;/HTML&gt;</pre>
<h4>Esempio 6</h4>
<p>Come sovrapporre due aree. Da notare l&#8217;ultima coordinata specificata, il raggio). I due cerchi hanno lo stesso centro, ma il primo ha un raggio minore del secondo.</p>
<p>Il risultato è che posizionandosi sul primo (che non ha link) non appare la &#8220;manina&#8221;. Spostandosi leggermente fuori dal primo ci si posiziona sul secondo (che ha un link) ed appare la &#8220;manina&#8221;. In pratica, l&#8217;area specificata prima ha la <strong>precedenza</strong> sulle altre che sovrascrive.</p>
<pre lang="html">&lt;MAP name="map1"&gt;
	&lt;A shape="circle" coords="100,200,50"&gt;Non ho link&lt;/A&gt;
	&lt;A href="outer-ring-link.html" shape="circle" coords="100,200,250"&gt;Ho un link&lt;/A&gt;
&lt;/MAP&gt;</pre>
<h3>Image maps lato server</h3>
<p>A volte la mappatura delle immagini può essere <strong>troppo complicata</strong> da scrivere come html.</p>
<p>In questi casi è meglio ricorrere a tecniche lato server.</p>
<p>Partiamo dal <strong>codice html</strong>. Da notare l&#8217;attributo <strong>ismap</strong>.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;A href="map_script.php"&gt;
		&lt;IMG src="navbar1.png" alt="Navigazione" ismap /&gt;
	&lt;/A&gt;
&lt;/HTML&gt;</pre>
<p><strong>Come funziona?</strong> Quando ci si posiziona sull&#8217;immagine, il browser aggiunge all&#8217;url di &lt;a&gt;, quindi a map_script.php, le due coordinate. Ad esempio, se ci posizioniamo sul pixel di coordinate (18,46), il link del tag &lt;a&gt; verrà<strong> trasformato automaticamente</strong> da map_script.php a map_script.php?18,46.</p>
<p>Lo <strong>script lato server</strong> ha il compito di leggere i <strong>due parametri $_GET</strong> relativi alle coordinate e comportarsi a seconda dei valori letti.</p>
<pre lang="php">&lt;?php
/* $_GET array associativo. Ottiene le chiavi dell'array. */
$keys = array_keys($_GET);

/* Prende la prima chiave, la divide e inserisce i due valori in $x e $y */
list($x,$y) = explode(",",$keys[0]);

/* Comportamenti */
if(($x&gt;=0 &amp;&amp; $x&lt;=118) &amp;&amp; ($y&gt;=0 &amp;&amp; $y&lt;=28))	 include("guide.html");
elseif(($x&gt;118 &amp;&amp; $x&lt;=184) &amp;&amp; ($y&gt;=0 &amp;&amp; $y&lt;=28)) include("shortcut.html");
elseif( ($x&gt;=(184-30) &amp;&amp; $x&lt;=(184+30)) &amp;&amp; ($y&gt;=(200-30) &amp;&amp; $y&lt;=(200+30)) ) include("search.html");
elseif(($x&gt;220 &amp;&amp; $x&lt;=280) &amp;&amp; ($y&gt;=30 &amp;&amp; $y&lt;=54)) include("top10.html");
?&gt;</pre>
<p>Nel codice dell&#8217;esempio 1, l&#8217;area relatva a <strong>top10.html</strong> è un poligono. Non è semplice controllare se un punto è presente in un poligono. Bisogna trovare e utilizzare appositi algoritmi e funzioni. Potresti trovarli su <a title="Geometry Algorithms" href="http://www.geometryalgorithms.com/" target="_blank">geometryalgorithms.com</a> (che nel momento in cui scrivo è &#8220;temporaneamente sospeso&#8221;).</p>
<h4>Script, demo e download</h4>
<p>Per vedere e scaricare lo script vai a <a href="http://test.jblog.it/imagemap_ss/map_script.txt" target="_blank">http://test.jblog.it/imagemap_ss/map_script.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/imagemap_ss/" target="_blank">http://test.jblog.it/imagemap_ss/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/imagemap_ss.zip" target="_blank">http://download.jblog.it/imagemap_ss.zip</a></p>
<h3>Image maps lato client e lato server</h3>
<p>Per avere la compatibilità con i vecchi browser è bene combinare le due tecniche.</p>
<pre lang="html">&lt;HTML&gt;
	&lt;HEAD&gt;&lt;TITLE&gt;The cool site!&lt;/TITLE&gt;&lt;/HEAD&gt;
	&lt;BODY&gt;
	&lt;A href="map_script.php"&gt;
		&lt;IMG src="navbar1.gif" alt="Navigazione" usemap="#map1" ismap /&gt;
	&lt;/A&gt;
	&lt;MAP name="map1"&gt;
		Navigate the site:
		&lt;A href="guide.html" shape="rect" coords="0,0,118,28"&gt;Access Guide&lt;/a&gt; |
		&lt;A href="shortcut.html" shape="rect" coords="118,0,184,28"&gt;Go&lt;/A&gt; |
		&lt;A href="search.html" shape="circle" coords="184,200,60"&gt;Search&lt;/A&gt; |
		&lt;A href="top10.html" shape="poly" coords="276,0,276,28,100,200,50,50,276,0"&gt;Top Ten&lt;/A&gt;
	&lt;/MAP&gt;
	&lt;/BODY&gt;
&lt;/HTML&gt;</pre>
<h3>Il testo alternativo</h3>
<p>I tag &lt;a&gt; con il testo all&#8217;interno si utilizzano per avere un testo alternativo nel caso in cui l&#8217;immagine non venga caricata.</p>
<p>Naturalmente questo comportamento non è gestito dal browser, infatti il testo dei link appare sempre.</p>
<p><strong>Per nasconderlo</strong> è necessario operare con i css. Consiglio anche di guardare le tecniche di &#8220;image replacement&#8221;.</p>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/imagemap_css/map_script.txt" target="_blank">http://test.jblog.it/imagemap_css/map_script.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/imagemap_css/" target="_blank">http://test.jblog.it/imagemap_css/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/imagemap_css.zip" target="_blank">http://download.jblog.it/imagemap_css.zip</a></p>
<h2>Lo schema data:URL</h2>
<p>Questa tecnica permette di <strong>inserire i dati direttamente nel codice html</strong>, risparmiando quindi la relativa richiesta http.</p>
<p>Scopriamo le carte e vediamo subito un <strong>esempio</strong>.</p>
<pre lang="html">&lt;IMG ALT="Foto" SRC="data:image/gif; base64,
	R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwhhx4dbgYKAAA7B72VFgl2Tf7452
	AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
	ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
	a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
	ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
	F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH" /&gt;</pre>
<p>Dopo la paura iniziale, in genere ci si domanda: <strong>cosa sono quei caratteri e come faccio a inserirli?</strong></p>
<p>Quell&#8217;ammasso di caratteri è la <strong>codifica in base64</strong> dell&#8217;immagine. In pratica, è il contenuto del file immagine codificato in base64.</p>
<p>Per<strong> codificare un&#8217;immagine in base64</strong> si utilizza una semplice <strong>funzione php</strong>: <em>base64_encode</em>.</p>
<p>L&#8217;ultima questione riguarda il tipo <strong>MIME</strong> che si può ottenere in due modi:</p>
<ul>
<li>utilizzando la funzione <strong>mime_content_type</strong>. Deve essere abilitata l&#8217;<strong>estensione php_mime_magic.dll</strong>.</li>
<li>leggendo le informazioni su un file grazie le funzioni <a title="File Information" href="http://it2.php.net/manual/en/book.fileinfo.php"><strong>File Information</strong></a> di php. Era un&#8217;estensione PECL, ma ora non lo è più. Bisogna utilizzare la <strong>libreria esterna magic_open</strong></li>
</ul>
<p>Nel caso non si possano utilizzare queste funzioni si dovrà <strong>scrivere manualmente</strong>.</p>
<h4>Come inserire un&#8217;immagine in base64 (senza funzioni per il tipo MIME)</h4>
<pre>&lt;img src="data:image/jpeg;base64,&lt;?
echo base64_encode(file_get_contents("img.jpg")); ?&gt;" alt="Immagine" /&gt;</pre>
<h4>Come inserire un&#8217;immagine in base64 (con funzioni per il tipo MIME)</h4>
<pre>&lt;? $mime = mime_content_type("img.jpg"); ?&gt;
&lt;img src="data:&lt;? echo $mime; ?&gt;;base64,&lt;?
echo base64_encode(file_get_contents("img.jpg")); ?&gt;" alt="Immagine" /&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/img_base64/index.txt" target="_blank">http://test.jblog.it/img_base64/index.txt</a><a href="http://test.jblog.it/imagemap_css/map_script.txt" target="_blank"></a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/img_base64/" target="_blank">http://test.jblog.it/img_base64/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/img_base64.zip" target="_blank">http://download.jblog.it/img_base64.zip</a></p>
<h2>Gli sprite CSS</h2>
<p><img class="alignright size-full wp-image-453" title="Icone per webdesigner" src="http://jblog.it/wp-content/uploads/2009/05/developpers_icons_preview2.jpg" alt="Icone per webdesigner" width="282" height="140" />Partiamo dalla situazione più comune. Supponiamo di voler realizzare un menù composto da 5 pulsanti grafici che cambino colore quando si passa sopra col mouse. La cosa più logica sarebbe quella di creare 10 immagini: 5 per il pulsante in modalita &#8220;normale&#8221;, 5 per il pulsante in modalità &#8220;mouse sopra&#8221;.</p>
<p>Poiché caricare 10 immagini significa effettuare <strong>10 richieste http</strong>, utilizziamo la tecnica degli sprite CSS.</p>
<p><strong>Questa tecnica</strong> consiste nel:</p>
<ul>
<li>creare un file immagine abbastanza grande da contenere tutte e 10 le immagini del menù (come ho detto all&#8217;inizio dell&#8217;articolo, è meglio un&#8217;immagine grande anziché tante piccole immagini)</li>
<li>impostare questa immagine come sfondo agli elementi del menù (cioè &lt;a&gt;, &lt;li&gt;, &lt;div&gt;, ecc.)</li>
<li>per ogni elemento impostare la proprietà <strong>background-position</strong> per spostare lo sfondo all&#8217;interno dell&#8217;elemento in modo da avere l&#8217;immagine desiderata</li>
</ul>
<p>Gli <strong>utilizzi </strong>di questa tecnica sono infiniti: dal menù al singolo rollover, dalla serie di immagini allineate al contenitore con gli angoli arrotondati.</p>
<p><strong>VANTAGGI</strong></p>
<ul>
<li>riduce notevolmente le <strong>richieste http</strong> e migliora il caricamento delle pagine</li>
<li>elimina del tutto i <strong>ritardi </strong>relativi ai rollover poiché non viene caricata una nuova immagine ma viene spostato lo sfondo</li>
</ul>
<p><strong>SVANTAGGI</strong></p>
<ul>
<li>richiede un po&#8217; più di <strong>lavoro </strong>nell&#8217;impostazione dei css e nella creazione delle immagini</li>
<li>non è sempre possibile combinare in una sola immagine tutte le immagini del sito, a causa delle difficoltà che si incontrano nel <strong>posizionamento dello sfondo</strong> con le regole dei css</li>
</ul>
<h4>Esempio 1</h4>
<p>Inserire le immagini con il <strong>tag &lt;img&gt;</strong>. Questo metodo è a dir poco geniale poiché permette di inserire le immagini come si è sempre fatto col vantaggio di ridurre le richieste http. In pratica viene impostato lo <strong>sfondo al tag &lt;img&gt;</strong>.</p>
<p>L&#8217;articolo completo è di <a title="CssGlobe" href="http://cssglobe.com/" target="_blank">CssGlobe</a>. Lo puoi trovare <a title="Creating easy and useful CSS Sprites" href="http://cssglobe.com/post/3028/creating-easy-and-useful-css-sprites" target="_blank">qui</a>.</p>
<p>Abbiamo bisogno di un&#8217;immagine gif trasparente 1px x 1px (spacer.gif), e l&#8217;immagine sprite (tuttelefoto.jpg).</p>
<p><img class="size-full wp-image-429 alignnone" title="tuttelefoto.jpg - Immagine utilizzata come sfondo degli elementi" src="http://jblog.it/wp-content/uploads/2009/05/tuttelefoto.jpg" alt="tuttelefoto Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" width="210" height="140" /></p>
<p><em>tuttelefoto.jpg &#8211; L&#8217;immagine sprite che utilizzeremo</em></p>
<pre lang="html">&lt;html&gt;
&lt;head&gt;&lt;title&gt;Sprite CSS - Esempio 1&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
	&lt;img src="spacer.gif" id="foto1" alt="Foto1" /&gt;
	&lt;img src="spacer.gif" id="foto2" alt="Foto2" /&gt;
	&lt;img src="spacer.gif" id="foto3" alt="Foto3" /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>L&#8217;immagine trasparente serve per far assumere al tag &lt;img&gt; il suo normale comportamento (ad es. in modo che quando selezioni l&#8217;immagine si colora l&#8217;area di &lt;img&gt;).</p>
<p><strong>Codice css</strong></p>
<pre lang="css">#foto1, #foto2, #foto3 { background:url(tuttelefoto.jpg) no-repeat; }
#foto1 { width:100px; height:50px; background-position:0px 0px; }
#foto2 { width:120px; height:90px; background-position:0px -50px; }
#foto3 { width:90px; height:130px; background-position:-120px 0px; }</pre>
<p><strong>Demo e download</strong></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/img_sprite1/" target="_blank">http://test.jblog.it/img_sprite1/</a><a href="http://test.jblog.it/img_base64/" target="_blank"></a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/img_sprite1.zip" target="_blank">http://download.jblog.it/img_sprite1.zip</a><a href="http://download.jblog.it/img_base64.zip" target="_blank"></a></p>
<h4>Esempio 2</h4>
<p>Un&#8217;altro modo per inserire delle immagini è impostarle come sfondo ad elementi flottanti.</p>
<p><img class="size-full wp-image-431 alignnone" title="spriteimg" src="http://jblog.it/wp-content/uploads/2009/05/spriteimg.png" alt="spriteimg Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" width="150" height="80" /></p>
<p><em>spriteimg.png &#8211; L&#8217;immagine sprite che utilizzeremo</em></p>
<pre lang="html">&lt;html&gt;
&lt;head&gt;&lt;title&gt;Sprite CSS - Esempio 2&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
	&lt;a href="#" id="feedburner"&gt;&lt;/a&gt;
	&lt;a href="#" id="subscribe"&gt;&lt;/a&gt;
	&lt;a href="#" id="bookmarks"&gt;&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><strong>Demo e download</strong></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/img_sprite2/" target="_blank">http://test.jblog.it/img_sprite2/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/img_sprite2.zip" target="_blank">http://download.jblog.it/img_sprite2.zip</a></p>
<p><strong>Codice css</strong></p>
<pre lang="css">#feedburner { margin-right:20px; background:url(spriteimg.png) no-repeat -5px -5px; float:left; width:91px; height:29px; }
#subscribe { margin-right:20px; background:url(spriteimg.png) no-repeat -5px -35px; float:left; width:127px; height:18px; }
#bookmarks { background:url(spriteimg.png) no-repeat -5px -55px; float:left; width:127px; height:18px; }</pre>
<h4>Esempio 3</h4>
<p>Gli sprite css sono ideali per sviluppare menù di navigazione.</p>
<p><img class="size-full wp-image-432 alignnone" title="spriteimg1" src="http://jblog.it/wp-content/uploads/2009/05/spriteimg1.png" alt="spriteimg1 Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" width="700" height="60" /></p>
<p><em>spritemenu.png &#8211; L&#8217;immagine sprite che utilizzeremo</em></p>
<pre lang="html">&lt;html&gt;
&lt;head&gt;&lt;title&gt;Sprite CSS - Esempio 3&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
	&lt;ul id="navmenu"&gt;
		&lt;li id="nav_homepage"&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li id="nav_informazioni"&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li id="nav_catalogo"&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li id="nav_indirizzi"&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li id="nav_contact"&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><strong>Codice css</strong></p>
<pre lang="css">#navmenu ul { list-style:none; }
#navmenu li { float:left; list-style:none; }
#navmenu a { display:block; height:30px; width:135px; background:url(spritemenu.png) no-repeat;  }

#nav_homepage a:link, #nav_homepage a:visited { background-position:0px 0px; }
#nav_informazioni a:link, #nav_informazioni a:visited { background-position:-270px 0px; }
#nav_catalogo a:link, #nav_catalogo a:visited { background-position:-560px 0px; }
#nav_indirizzi a:link, #nav_indirizzi a:visited { background-position:-420px 0px; }
#nav_contact a:link, #nav_contact a:visited { background-position:-135px 0px; }

#nav_homepage a:hover, #nav_homepage a:focus, #nav_homepage a:active { background-position:0px -30px; }
#nav_informazioni a:hover, #nav_informazioni a:focus, #nav_informazioni a:active { background-position:-270px -30px; }
#nav_catalogo a:hover, #nav_catalogo a:focus, #nav_catalogo a:active { background-position:-560px -30px; }
#nav_indirizzi a:hover, #nav_indirizzi a:focus, #nav_indirizzi a:active { background-position:-420px -30px; }
#nav_contact a:hover, #nav_contact a:focus, #nav_contact a:active { background-position:-135px -30px; }</pre>
<p><strong>Demo e download</strong></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/img_sprite3/" target="_blank">http://test.jblog.it/img_sprite3/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/img_sprite3.zip" target="_blank">http://download.jblog.it/img_sprite3.zip</a></p>
<h2>Generatori di Sprite CSS</h2>
<p>I generatori di sprite css <strong>semplificano la creazione</strong> di un&#8217;immagine abbastanza grande da contenere tutte le immagini da utilizzare nel proprio sito. Questi, secondo me, sono i migliori.</p>
<p><strong>Generatore di Sprite CSS</strong><br />
<a href="http://spritegen.website-performance.org/" target="_blank">http://spritegen.website-performance.org/</a><br />
<a href="https://launchpad.net/css-sprite-generator" target="_blank">https://launchpad.net/css-sprite-generator</a> <em><strong>(codice sorgente)</strong></em></p>
<p><strong>CSS Sprites Generator</strong><br />
<a href="http://www.csssprites.com/" target="_blank">http://www.csssprites.com/</a></p>
<p><strong>CSS sprites for humanoid beings (and the like)</strong><br />
<a href="http://printf.ru/spritr/" target="_blank">http://printf.ru/spritr/</a></p>
<p><strong>SmartSprites (Alpha!)</strong><br />
<a href="http://smartsprites.osinski.name/" target="_blank">http://smartsprites.osinski.name/</a></p>
<h2>Combinare javascript e css</h2>
<p><img class="alignright size-full wp-image-445" title="Cubetti di legno" src="http://jblog.it/wp-content/uploads/2009/05/288478628_56ed41bc2c.jpg" alt="Cubetti di legno" width="270" height="405" />Spesso una pagina richiama <strong>più di uno script e più di un css</strong>. Per ridurre le richieste http relative ai css (o agli script) basta copiare il contenuto di tutti i file css (o script) in un unico file.</p>
<p>Il bello di questa tecnica è che, a differenza delle immagini, è quasi sempre possibile <strong>combinare tutti i file dello stesso tipo in un unico file</strong>. Il &#8220;quasi&#8221; è dovuto al fatto che alcuni script, se inseriti nello stesso file, potrebbero dare dei problemi. Quindi è sempre meglio testare il funzionamento dello script combinato. Se si verificano dei problemi, basta <strong>escludere dalla fusione</strong> i file &#8220;incompatibili&#8221;.</p>
<p>La combinazione degli script in un unico file può essere eseguita in due modi:</p>
<ul>
<li><strong>manualmente</strong>, cioé copiando il contenuto di ogni script all&#8217;interno di un file più grande</li>
<li><strong>dinamicamente</strong>, ricorrendo a semplici script lato server</li>
</ul>
<p>Gli <strong>script lato server</strong> che vedremo sono strutturati in <strong>5 fasi</strong>:</p>
<ul>
<li>lettura dei nomi dei file da includere passati come parametri $_GET</li>
<li>impostazione delle opzioni</li>
<li>inclusione effettiva dei file</li>
<li>stampa dei campi di intestazione con la funzione header() per la gestione della cache, il tipo mime, ETag</li>
<li>stampa del contenuto finale del file</li>
</ul>
<h3>Script php: combinare più file css</h3>
<p>La particolarità dello script relativo ai file css è che per ogni file da includere è necessario <strong>specificare l&#8217;attributo media</strong> (all, screen, print, ecc.), cioé quell&#8217;attributo che indica il tipo di dispositivo per cui deve valere quel file css. <strong>Non è necessario specificare l&#8217;estensione</strong> dei file poiché viene aggiunta automaticamente all&#8217;interno dello script.</p>
<p><strong>Attenzione.</strong> Non passare nomi di file contenenti il carattere &#8220;.&#8221; in quanto, nelle richieste $_GET, viene convertito automaticamente in &#8220;_&#8221;.</p>
<p><strong>Codice html</strong></p>
<pre lang="html">&lt;link rel="stylesheet" type="text/css"
href="combined.css?file1:all&amp;file2:screen&amp;file3:print" /&gt;</pre>
<p><strong>Impostare Apache</strong></p>
<p>Poiché lo script che ha l&#8217;estensione <strong>.css</strong> è necessario impostare il server Apache affinché processi il file combined.css come un file .php. Basterà aggiungere un paio di righe.</p>
<pre>&lt;FilesMatch "combined.css$"&gt;
	AddHandler application/x-httpd-php .css
&lt;/FilesMatch&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/combine_css/combine.txt" target="_blank">http://test.jblog.it/combine_css/combine.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/combine_css/combine.css?file1:all&amp;file2:screen&amp;file3:print" target="_blank">http://test.jblog.it/combine_css/combine.css?file1:all&amp;file2:screen&amp;file3:print</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/combine_css.zip" target="_blank">http://download.jblog.it/combine_css.zip</a></p>
<h3>Script php: combinare più file javascript</h3>
<p><strong>Non è necessario specificare l&#8217;estensione</strong> dei file poiché viene aggiunta automaticamente all&#8217;interno dello script.</p>
<p><strong>Attenzione.</strong> Non passare nomi di file contenenti il carattere &#8220;.&#8221; in quanto, nelle richieste $_GET, viene convertito automaticamente in &#8220;_&#8221;.</p>
<h4>Codice html</h4>
<pre lang="html">&lt;script type="application/javascript" src="combined.js?file1&amp;file2&amp;file3"&gt;&lt;/script&gt;</pre>
<h4>Impostare Apache</h4>
<p>Poiché lo script che ha l&#8217;estensione <strong>.js</strong> è necessario impostare il server Apache affinché processi il file combined.js come un file .php. Basterà aggiungere un paio di righe.</p>
<pre>&lt;FilesMatch "combined.js$"&gt;
	AddHandler application/x-httpd-php .js
&lt;/FilesMatch&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/combine_js/combine.txt" target="_blank">http://test.jblog.it/combine_js/combine.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/combine_js/combine.js?file1&amp;file2&amp;file3" target="_blank">http://test.jblog.it/combine_js/combine.js?file1&amp;file2&amp;file3</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/combine_js.zip" target="_blank">http://download.jblog.it/combine_js.zip</a></p>
<h2>Stampare javascript e css nel codice html</h2>
<p>Sappiamo che per utilizzare codice javascript o css ci sono 3 modi:</p>
<ol>
<li>stamparli direttamente nel codice html</li>
<li>dividerli su più file esterni (da richiamare)</li>
<li>stamparne alcuni e richiamare gli altri</li>
</ol>
<h4>Il terzo metodo</h4>
<p>Come succede in tante occasioni, la &#8220;via di mezzo&#8221; è da preferire. La successiva domanda è: <strong>su che criterio si scelgono</strong> i file da stampare nel codice html e quelli da richiamare esternamente?</p>
<p>Sinceramente, non saprei dirlo con precisione. Probabilmente esistono degli studi che potrebbero aiutarti in questo. Secondo me, il codice da stampare nel documento html è quello che presumibilmente <strong>potrebbe essere utilizzato prima</strong>. Ad esempio:</p>
<ul>
<li>per <strong>javascript</strong>, il codice e le funzioni che verranno eseguite nell&#8217;<strong>evento &#8220;onload&#8221; dell&#8217;oggetto &#8220;document&#8221;</strong></li>
<li>per i <strong>css</strong>, il codice che serve a formattare gli <strong>elementi principali della pagina</strong>, come html, layout, contenitori, ecc.</li>
</ul>
<h4>Come automatizzare il tutto</h4>
<p>Fortunatamente, questa tecnica si può automatizzare con un paio di righe di codice lato server (php).</p>
<pre lang="html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Javascript e Css nella pagina&lt;/title&gt;

&lt;style type="text/css"&gt;
&lt;?
	/* Array dei file css */
	$css_array = array("file3.css","file2.css");
	foreach($css_array as $css)
	{
		if(file_exists($css))
		include($css);
		echo "\n\n";
	}
?&gt;
&lt;/style&gt;

&lt;script type="application/javascript"&gt;
//&lt;![CDATA[
&lt;?
	/* Array dei javascript */
	$js_array = array("file1.js","file3.js");
	foreach($js_array as $js)
	{
		if(file_exists($js))
		include($js);
		echo "\n\n";
	}
?&gt;
//]]&gt;
&lt;/script&gt;

&lt;!-- File css esterni --&gt;
&lt;link rel="stylesheet" type="text/css" href="file1.css" /&gt;

&lt;!-- File javascript esterni --&gt;
&lt;script type="application/javascript" src="file2.js"&gt;&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Javascript e Css nella pagina&lt;/h1&gt;
	&lt;p&gt;Guarda il codice html&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/inhtml/inhtml.txt" target="_blank">http://test.jblog.it/inhtml/inhtml.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/inhtml/" target="_blank">http://test.jblog.it/inhtml/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/inhtml.zip" target="_blank">http://download.jblog.it/inhtml.zip</a></p>
<h2>Eliminare gli script duplicati</h2>
<p><img class="alignright size-full wp-image-446" title="Do not duplicate" src="http://jblog.it/wp-content/uploads/2009/05/331357312_893ef9e791.jpg" alt="Do not duplicate" width="270" height="180" />Quando si gestiscono <strong>grandi progetti</strong> si rischia di stampare e richiamare gli stessi script.</p>
<p>Alcuni browser, come Firefox, evitano di effettuare una nuova richiesta http per un file che è stato già scaricato. Purtroppo Internet Explorer non lo fa. Allora è necessario trovare una soluzione che valga per tutti.</p>
<p>Una semplice soluzione consiste nel fare una <strong>funzione php </strong>che riceva il nome del file da linkare e si occupi di stampare i tag &lt;script&gt;. Per registrare gli script che vengono inseriti di volta in volta si utilizza un array in modo che la funzione, prima di inserire uno script, controlla se il nome dello script non è già presente nell&#8217;array.</p>
<p>Normalmente per inserire script e css si dovrebbe scrivere:</p>
<pre>&lt;link rel="stylesheet" type="text/css" href="print_style.css" media="print" /&gt;
&lt;script src="library.js" type="application/javascript"&gt;&lt;/script&gt;</pre>
<p><strong>Classe PHP: noDuplicate (per php 4 e php 5)<br />
</strong></p>
<p>Ti descrivo brevemente la classe &#8220;noDuplicate&#8221;.</p>
<p><strong>La struttura</strong></p>
<pre lang="php">class noDuplicate
{
	/* Array dei file javascript */
	var $js_array = array();

	/* Array dei file css */
	var $css_array = array();

	/* Stampa i file specificati. */
	function incScript() { ... }

	/* Privata: registra il file e stampa il link al file javascript */
	function __js($file) { ... }

	/* Privata: registra il file stampa il link al file css */
	function __css($file) { ... }
}</pre>
<p><strong>Creare l&#8217;oggetto</strong></p>
<pre lang="php">$noDuplicateObj = new noDuplicate();</pre>
<p><strong>La funzione incScript()</strong></p>
<ul>
<li>il primo argomento deve essere &#8220;js&#8221; o &#8220;css&#8221;</li>
<li>dal secondo argomento in poi accetta da uno a più file <strong>dello stesso tipo</strong></li>
<li>se si devono inserire file <strong>.css</strong> è necessario passarli nella forma [nomefile]:[media] (ad es. &#8220;style.css:print&#8221;). Se vengono passati nella forma normale (&#8220;style.css&#8221;,&#8221;file.css&#8221;) verrà automaticamente impostato &#8220;all&#8221; come media</li>
</ul>
<pre lang="php">// singolo file
$noDuplicate-&gt;incScript("css","file2.css:all");
$noDuplicate-&gt;incScript("js","file1.js");

// più di un file
$noDuplicate-&gt;incScript("css","file2.css:all","mystyle.css:screen");
$noDuplicate-&gt;incScript("js","file1.js","jquery.js","prototype.js");

// file css senza specificare il "media"
$noDuplicate-&gt;incScript("css","file1.css","file3.css");<strong>
</strong></pre>
<p><strong>Risultato</strong></p>
<pre lang="html">&lt;!-- singolo file --&gt;
&lt;link rel="stylesheet" type="text/css" href="file2.css" media="all" /&gt;
&lt;script src="file1.js" type="application/javascript"&gt;&lt;/script&gt;

&lt;!-- più di un file --&gt;
&lt;link rel="stylesheet" type="text/css" href="file2.css" media="all" /&gt;
&lt;link rel="stylesheet" type="text/css" href="mystyle.css" media="screen" /&gt;
&lt;script src="file1.js" type="application/javascript"&gt;&lt;/script&gt;
&lt;script src="jquery.js" type="application/javascript"&gt;&lt;/script&gt;
&lt;script src="prototype.js" type="application/javascript"&gt;&lt;/script&gt;

&lt;!-- file css senza specificare il "media" --&gt;
&lt;link rel="stylesheet" type="text/css" href="file1.css" media="all" /&gt;
&lt;link rel="stylesheet" type="text/css" href="file3.css" media="all" /&gt;</pre>
<h4>Script, demo e download</h4>
<p>Per vedere lo script vai a <a href="http://test.jblog.it/rem_duplicate/rem_duplicate.txt" target="_blank">http://test.jblog.it/rem_duplicate/rem_duplicate.txt</a></p>
<p>Per vedere una demo vai a <a href="http://test.jblog.it/rem_duplicate/" target="_blank">http://test.jblog.it/rem_duplicate/</a></p>
<p>Per scaricare l&#8217;esempio vai a <a href="http://download.jblog.it/rem_duplicate.zip" target="_blank">http://download.jblog.it/rem_duplicate.zip</a></p>
<h2>Conclusione</h2>
<p>Queste tecniche esprimono la massima utilità e potenza se utilizzate contemporaneamente. La riduzione di richieste http e, quindi, l&#8217;abbassamento dei tempi di caricamento saranno notevoli.</p>
<p>Spero di essere stato abbastanza esaustivo e chiaro. Se non lo sono stato basterà dirmelo in modo da ritoccare l&#8217;articolo nelle sezioni meno comprensibili.</p>
<p><span class="hightlight_green">Hai mai utilizzato una di queste tecniche? Gli script hanno funzionato correttamente? È stato semplice metterle in pratica? Hai avuto concreti miglioramenti?</span></p>
<h3>Prossimo appuntamento</h3>
<p>L&#8217;ultima questione sull&#8217;ottimizzazione dei siti web riguarda appunto l&#8217;ottimizzazione dei componenti da caricare cioé:</p>
<ul>
<li>compressione delle immagini, degli script e dei css</li>
<li>offuscamento del codice javascript</li>
<li>utilizzo di gzip per la compressione delle pagine html, script e css</li>
</ul>
<h4 class="highlight_red">Non perdere il prossimo articolo sull&#8217;ottimizzazione dei componenti delle pagine web: codice html, immagini, script e css.</h4>
<h2>Crediti</h2>
<ul>
<li><strong>Libro</strong>. Creare siti web ad alte prestazioni di <a href="http://stevesouders.com" target="_blank">Steve Soulders</a></li>
<li><a href="http://www.websiteoptimization.com" target="_blank">WebSiteOptimization</a> &#8211; <a href="http://www.websiteoptimization.com/speed/tweak/combine/" target="_blank">Combine Images to Save HTTP Requests</a></li>
<li><a href="http://developer.yahoo.com/" target="_blank">Yahoo Developer Network</a> &#8211; <a href="http://developer.yahoo.com/performance/rules.html" target="_blank">Best Practices for Speeding Up Your Web Site</a></li>
<li><a href="http://www.w3.org">W3C</a> &#8211; <a href="http://www.w3.org/TR/html401/struct/objects.html#h-13.6" target="_blank">Objects, Images, and Applets: Image maps</a></li>
<li><a href="http://www.ietf.org/" target="_blank">The Internet Engineering Task Force</a> &#8211; <a href="http://tools.ietf.org/html/rfc2397" target="_blank">The &#8220;data&#8221; URL scheme</a></li>
<li><a href="http://cssglobe.com/" target="_blank">CssGlobe</a> &#8211; <a href="http://cssglobe.com/post/3028/creating-easy-and-useful-css-sprites" target="_blank">Creating easy and useful CSS Sprites</a></li>
<li>Foto1: <a href="http://www.flickr.com/photos/jasephotos/2913134974/" target="_blank">Mast Farm Picnic</a> &#8211; 030 di <a href="http://www.flickr.com/photos/jasephotos/" target="_blank">JasonBechtel</a></li>
<li>Foto2: <a href="http://olimpiadi.blogosfere.it/2008/08/davide-rebellin-argento-la-prima-medaglia-italiana-di-queste-olimpiadi.html" target="_blank">Davide Rebellin Argento, la prima medaglia italiana di queste Olimpiadi</a> di <a href="http://olimpiadi.blogosfere.it/" target="_blank">olimpiadi.blogosfere.it</a></li>
<li>Foto3: <a href="http://www.flickr.com/photos/kaibara/312855876/" target="_blank">Cats Puzzle</a> di <a href="http://www.flickr.com/photos/kaibara/" target="_blank">kaibara87</a></li>
<li>Foto4: <a href="http://elementiks.com/downloads/developpers_icons_preview.jpg" target="_blank">icone per sviluppatori</a></li>
<li>Foto5: <a href="http://www.flickr.com/photos/egansnow/288478628/" target="_blank">Puzzle</a> di <a href="http://www.flickr.com/photos/egansnow/" target="_blank">Egan Snow</a></li>
<li>Foto6: <a href="http://www.flickr.com/photos/popilop/331357312/" target="_blank">Do not duplicate</a> di <a href="http://www.flickr.com/photos/popilop/">Sam UL</a></li>
</ul>
<img src="http://jblog.it/?ak_action=api_record_view&id=405&type=feed" alt=" Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css"  title="Ridurre le richieste HTTP (parte 2): come unire e combinare immagini, script, css" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/2009/05/15/ridurre-richieste-http-parte-2-come-combinare-immagini-script-css-sprite-image-maps_405.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mappa del blog</title>
		<link>http://jblog.it/mappa-blog</link>
		<comments>http://jblog.it/mappa-blog#comments</comments>
		<pubDate>Mon, 13 Apr 2009 13:17:58 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/?page_id=38</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://jblog.it/mappa-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contattami</title>
		<link>http://jblog.it/contattami</link>
		<comments>http://jblog.it/contattami#comments</comments>
		<pubDate>Mon, 13 Apr 2009 13:53:41 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/?page_id=31</guid>
		<description><![CDATA[



Puoi contattarmi direttamente su 
]]></description>
			<content:encoded><![CDATA[<div id="contact_form">
<div class="bottom">
<div class="wpcf7" id="wpcf7-f1-p31-o1"><form action="/category/web-design/feed#wpcf7-f1-p31-o1" method="post" class="wpcf7-form">
<div style="display: none;">
<input type="hidden" name="_wpcf7" value="1" />
<input type="hidden" name="_wpcf7_version" value="2.0.6" />
<input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f1-p31-o1" />
</div>
<div class="name_input"><span class="wpcf7-form-control-wrap email_name"><input type="text" name="email_name" value="" id="email_name" class="wpcf7-validates-as-required" size="40" /></span></div>
<div class="name_label"><label>NOME <small>(richiesto)</small></label></div>
<div class="clear"></div>
<div class="email_input"><span class="wpcf7-form-control-wrap email_email"><input type="text" name="email_email" value="" id="email_email" class="wpcf7-validates-as-required" size="40" /></span></div>
<div class="email_label"><label>EMAIL <small>(richiesta)</small></label></div>
<div class="clear"></div>
<div class="url_input"><span class="wpcf7-form-control-wrap email_website"><input type="text" name="email_website" value="" id="email_url" size="40" /></span></div>
<div class="url_label"><label>SITO WEB</label></div>
<div class="clear"></div>
<div class="subject_input">
<div class="right"><span class="wpcf7-form-control-wrap email_subject"><input type="text" name="email_subject" value="" id="email_subject" size="40" /></span></div>
</div>
<div class="subject_label"><label>OGGETTO</label></div>
<div class="clear"></div>
<div class="textarea_input"><span class="wpcf7-form-control-wrap email_message"><textarea name="email_message" id="email_message" class="wpcf7-validates-as-required" cols="40" rows="10"></textarea></span></div>
<div class="captcha_input">
<div class="captcha_img"><input type="hidden" name="_wpcf7_captcha_challenge_email_captcha" value="637305795" /><img alt="637305795 Contattami" src="http://jblog.it/wp-content/uploads/wpcf7_captcha/637305795.png" id="email_captcha_img" class="wpcf7-captcha-email_captcha" width="84" height="28" title="Contattami" /></div>
<div class="captcha_data"><span class="wpcf7-form-control-wrap email_captcha"><input type="text" name="email_captcha" value="" id="email_captcha_data" size="40" /></span> <span class="captcha_label">Per favore, inserisci il codice di sicurezza</span></div>
<div class="clear"></div>
</div>
<div class="submit_input"><input type="submit" value="Invia il messaggio" id="email_submit" /> <img class="ajax-loader" style="visibility: hidden;" alt="ajax loader" src="http://jblog.it/wp-content/plugins/contact-form-7/images/ajax-loader.gif" title="Contattami" /></div>
<div class="wpcf7-response-output wpcf7-display-none"></div></form></div>
</div>
</div>
<p>Puoi contattarmi direttamente su <img class="alignnone size-full wp-image-35" title="mail" src="http://jblog.it/wp-content/uploads/2009/04/mail.png" alt="mail Contattami" width="174" height="21" /></p>
<img src="http://jblog.it/?ak_action=api_record_view&id=31&type=feed" alt=" Contattami"  title="Contattami" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/contattami/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bookmarks</title>
		<link>http://jblog.it/bookmarks</link>
		<comments>http://jblog.it/bookmarks#comments</comments>
		<pubDate>Mon, 13 Apr 2009 13:50:48 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/?page_id=28</guid>
		<description><![CDATA[Ecco la lista completa di tutti i miei siti, blog, pagine e link preferiti divisi per categoria.
Puoi trovare di tutto: da siti e blog tecnici a servizi web, da tutorial a giochi online.
N.B. per ogni categoria, i link più recenti si trovano all&#8217;inizio.
Spero possano esserti utili. Buona navigazione!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Ecco la lista completa di <strong>tutti </strong>i miei siti, blog, pagine e link preferiti <strong>divisi per categoria</strong>.</p>
<p style="text-align: left;"><strong>Puoi trovare di tutto</strong>: da siti e blog tecnici a servizi web, da tutorial a giochi online.</p>
<p style="text-align: left;"><strong>N.B.</strong> per ogni categoria, <strong>i link più recenti si trovano all&#8217;inizio</strong>.</p>
<p style="text-align: left;">Spero possano esserti utili. <em><strong>Buona navigazione!</strong></em></p>
<img src="http://jblog.it/?ak_action=api_record_view&id=28&type=feed" alt=" Bookmarks"  title="Bookmarks" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/bookmarks/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In evidenza</title>
		<link>http://jblog.it/evidenza</link>
		<comments>http://jblog.it/evidenza#comments</comments>
		<pubDate>Mon, 13 Apr 2009 12:45:54 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/evidenza</guid>
		<description><![CDATA[Di seguito sono elencati quelli che, secondo me, sono i migliori articoli e i migliori podcast.
]]></description>
			<content:encoded><![CDATA[<p>Di seguito sono elencati quelli che, secondo me, sono i <a href="#best_posts"><strong>migliori articoli</strong></a> e i <a href="#best_podcast"><strong>migliori podcast</strong></a>.</p>
<img src="http://jblog.it/?ak_action=api_record_view&id=20&type=feed" alt=" In evidenza"  title="In evidenza" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/evidenza/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archivi e feed</title>
		<link>http://jblog.it/archivi-e-feed</link>
		<comments>http://jblog.it/archivi-e-feed#comments</comments>
		<pubDate>Sun, 12 Apr 2009 14:03:38 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/?page_id=6</guid>
		<description><![CDATA[Hai perso gli ultimi articoli o podcast? Vorresti ritrovare un articolo che hai letto o un podcast di cui non ricordi il titolo? Nessun problema! In questa pagina hai tutto quello che ti serve per ritrovare i contenuti persi.
Articoli: sono divisi per mese, categoria, e tag.
Podcast: nella pagina &#8220;podcast&#8221; ci sono tutti, e sono divisi [...]]]></description>
			<content:encoded><![CDATA[<p>Hai perso gli ultimi articoli o podcast? Vorresti ritrovare un articolo che hai letto o un podcast di cui non ricordi il titolo? Nessun problema! <em>In questa pagina hai tutto quello che ti serve per ritrovare i contenuti persi.</em></p>
<p><strong>Articoli</strong>: sono divisi per mese, categoria, e tag.</p>
<p><strong>Podcast</strong>: nella pagina &#8220;podcast&#8221; ci sono tutti, e sono divisi in base al formato (audio, video, ecc.)</p>
<p><strong>Feed:</strong> tutti i link ai feed di jblog, per restare sempre aggiornato e non perdere nessun articolo, commento, pocast e novità.<!--adv400--></p>
<h2>Feed di jblog</h2>
<p><em><span class="highlight_yellow"><strong>Non sai cosa sono i feed?</strong> In fondo alla pagina c&#8217;è una <strong><a href="#feed-mini-guida">piccola guida</a></strong> che potrebbe esserti utile.</span></em></p>
<p>Questo blog ha diversi formati di feed. Iscrivendoti riceverai gli <strong>ultimi 15 articoli e podcast</strong> pubblicati.</p>
<p><strong>Gli articoli sono riportati per intero</strong>, in modo che tu possa leggerli comodamente dal tuo feed aggregator.</p>
<p><span class="highlight_green">Iscriversi ai feed <strong>è completamente gratuito</strong> (e consigliato <img src='http://jblog.it/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="Archivi e feed" />  ).</span></p>
<p><strong>Altri feed?</strong> Per ogni articolo c&#8217;è la possibilità di iscriversi al <strong>feed dei commenti</strong>: troverai il link vicino al form. Nell&#8217;archivio di ogni categoria, vicino al titolo, troverai il link per iscriverti al <strong>feed della categoria</strong>. Nell&#8217;archivio di ogni tag, vicino al titolo, troverai il link per iscriverti al feed del tag.</p>
<p><small>Se non sai quale scegliere, <strong>ti consiglio &#8220;FeedBurner&#8221;</strong> in quanto è più efficiente e mi consente di tenere d&#8217;occhio le iscrizioni ai feed.</small></p>
<p><!--jblog-split--></p>
<p id="feed-mini-guida">
<h2>Feed: mini guida</h2>
<p>I feed sono dei file <strong>xml </strong>in cui ci sono gli ultimi contenuti pubblicati dal relativo sito/blog (solitamente 10-15 articoli) .</p>
<p>I feed sono raggiungibili tramite un <strong>indirizzo</strong>, proprio come quello di un sito web (es. <em>http://www.example.com/feed</em>).</p>
<p>Un&#8217;ultima cosa&#8230; <span style="text-decoration: underline;"><strong>iscriversi ai feed e leggerli è completamente gratuito!</strong></span></p>
<h4>A cosa servono?</h4>
<p>Sono <strong>utilissimi </strong>perchè, grazie a degli appositi software e servizi web, puoi ricevere e leggere gli articoli <em>evitando di visitare il sito/blog</em>,  risparmiando un po&#8217; di tempo.</p>
<h4>Cosa devo utilizzare per leggere i feed?</h4>
<p>I <strong>browser moderni</strong> offrono alcuni strumenti semplici e immediati per la ricezione dei feed. Purtroppo la maggior parte dei browser permette di ricevere solo i titoli (con link) degli articoli. Quindi risulta comunque necessario visitare il sito/blog per leggere l&#8217;intero articolo. Tuttavia, potresti installare opportune <strong>estensioni per il browser</strong> che utilizzi ed avere il controllo completo sui feed che ricevi e leggere interamente l&#8217;articolo.</p>
<p>In alternativa, esistono tantissimi<strong> software e servizi web</strong> che ti permettono di leggere e gestire i feed provenienti da più di un sito/blog.</p>
<dl>
<dt> </dt>
<h5>Software</h5>
<dd> Se vuoi utilizzare un <strong>software</strong>, eccone alcuni <em>gratuiti</em>:</p>
<ul>
<li><a title="RSSOwl" href="http://www.rssowl.org" target="_self">RSSOwl</a> (con cui mi trovo veramente bene) [win,mac,linux]</li>
<li><a title="YeahReader" href="http://www.yeahreader.com/" target="_blank">Yeah Reader</a> [win]<a title="YeahReader" href="http://www.yeahreader.com/" target="_blank"><br />
</a></li>
<li><a title="FeedDemon" href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx" target="_blank">FeedDemon</a> [win]<a title="FeedDemon" href="http://www.newsgator.com/Individuals/FeedDemon/Default.aspx" target="_blank"><br />
</a></li>
<li><a title="NetNewsWire" href="http://www.newsgator.com/Individuals/NetNewsWire/" target="_blank">NetNewsWire</a> [mac]</li>
</ul>
</dd>
<dd><strong>Vantaggi:</strong> <small>una volta scaricato un feed puoi consultarlo senza la connessione internet, perché rimane memorizzato nel pc.</small><br />
<strong>Svantaggi:</strong> <small>puoi consultarli solo utilizzando il tuo pc; quindi se non sei a casa o non hai un notebook non potrai far altro che aspettare di ritornare a casa&#8230;</small> </dd>
</dl>
<dl>
<dt> </dt>
<h5>Servizi web-based</h5>
<dd>Ecco alcuni dei <strong>servizi web</strong> più famosi:</p>
<ul>
<li><a title="Google Reader" href="http://www.google.com/reader/view/" target="_blank">Google Reader</a></li>
<li><a title="Bloglines" href="http://www.bloglines.com/" target="_blank">Bloglines</a></li>
<li><a title="PageFlakes" href="http://www.pageflakes.com/" target="_blank">PageFlakes</a></li>
<li><a title="Netvibes" href="http://www.netvibes.com/" target="_blank">Netvibes</a></li>
<li><a title="MyYahoo!" href="http://my.yahoo.com/" target="_blank">MyYahoo!</a></li>
</ul>
</dd>
<dd><strong>Vantaggi:</strong> <small>in qualunque parte del mondo tu sia, basterà avere una discreta connessione a internet per avere a portata di mano tutti i tuoi feed.</small><br />
<strong>Svantaggi:</strong> <small>per consultarli è sempre necessario essere connessi; inoltre, poichè il servizio web non è altro che un sito dovrai attendere il caricamento delle pagine del sito.</small> </dd>
</dl>
<h4>Come faccio ad ottenere l&#8217;indirizzo del feed e iscrivermi?</h4>
<p>Nei browser moderni per ottenere l&#8217;indirizzo del feed del sito/blog che stai visitando guarda intorno alla barra dell&#8217;indirizzo e <strong>individua l&#8217;icona <img class="alignnone size-full wp-image-465" title="Icona Feed" src="http://jblog.it/wp-content/uploads/2009/04/rss.gif" alt="Icona Feed" width="14" height="14" /></strong> oppure la parola <em><strong>RSS</strong></em>. Cliccando sul pulsante solitamente compare un menù con i vari feed. Se non trovi nulla, guarda in fondo alla pagina e cerca le parole &#8220;entries&#8221;, &#8220;feed&#8221;, &#8220;rss&#8221;, &#8220;xml&#8221;, ecc.</p>
<p><strong>Potrebbe esserci più di un feed?!?</strong> Certo. Potresti trovare più formati di feed (rss, atom, rdf) per ricevere gli ultimi articoli, oppure dei feed con dei contenuti diversi (es. ultimi articoli di una categoria, gli ultimi commenti di un articolo).</p>
<p><strong>Allora come faccio a scegliere quello giusto?</strong> Leggi attentamente le etichette dei vari feed e, per assicurarti che sia quello giusto, clicca e si aprirà la pagina del feed (che sarà totalmente diversa dalle pagine del sito/blog).</p>
<p><strong>Adesso posso finalmente iscrivermi?</strong> Ok, ci siamo. Copia l&#8217;indirizzo della pagina del feed, apri il tuo software o il servizio web che userai per leggere i feed e clicca su una delle voci &#8220;nuovo&#8221;, &#8220;iscriviti&#8221;, &#8220;aggiungi&#8221;, &#8220;new&#8221;, &#8220;add&#8221;, &#8220;add bookmarks&#8221;, ecc. Tra i vari campi di testo e opzioni l&#8217;operazione che dovrai fare sicuramente sarà quella di incollare l&#8217;indirizzo del feed all&#8217;interno di un campo di testo.</p>
<p><strong>L&#8217;ultimo passo. </strong>Ora che hai completato l&#8217;iscrizione sarà necessario aggiornare il feed cliccando su una delle voci &#8220;ricevi&#8221;, &#8220;aggiorna&#8221;, &#8220;update&#8221;, ecc. N.B. alcuni software/servizi web lo fanno automaticamente nel momento in cui ti iscrivi.</p>
<img src="http://jblog.it/?ak_action=api_record_view&id=6&type=feed" alt=" Archivi e feed"  title="Archivi e feed" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/archivi-e-feed/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Informazioni</title>
		<link>http://jblog.it/informazioni</link>
		<comments>http://jblog.it/informazioni#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:37:03 +0000</pubDate>
		<dc:creator>Giacomo</dc:creator>
				<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://jblog.it/?page_id=2</guid>
		<description><![CDATA[Qui trovi tutte le informazioni su di me, sul blog, sulla gestione dei dati personali, copyright, ecc.


Chi sono
Perché ho deciso di aprire un blog
Di cosa parlo in questo blog
Podcast e contenuti multimediali
F.A.Q. – Domande frequenti
Licenza Creative Commons
Responsabilità
Trattamento dei dati personali
Copyright
Crediti
Plugins

Chi sono
Mi chiamo Giacomo Ratta e sono nato nel 1987. Sono di Porto Cesareo, un paese [...]]]></description>
			<content:encoded><![CDATA[<p>Qui trovi tutte le informazioni su di me, sul blog, sulla gestione dei dati personali, copyright, ecc.<br />
<img class="alignright size-full wp-image-372" title="Me" src="http://jblog.it/wp-content/uploads/2009/03/copia-2-di-copia-di-copia-di-img_0174.jpg" alt="Me" width="215" height="250" /></p>
<ul>
<li><a href="#aboutme">Chi sono</a></li>
<li><a href="#whyblog">Perché ho deciso di aprire un blog</a></li>
<li><a href="#aboutblog">Di cosa parlo in questo blog</a></li>
<li><a href="#blogmultimedia">Podcast e contenuti multimediali</a></li>
<li><a href="#blogfaq">F.A.Q. – Domande frequenti</a></li>
<li><a href="#creativecommons">Licenza Creative Commons</a></li>
<li><a href="#responsibility">Responsabilità</a></li>
<li><a href="#privacy">Trattamento dei dati personali</a></li>
<li><a href="#copyright">Copyright</a></li>
<li><a href="#credits">Crediti</a></li>
<li><a href="#wp_plugins">Plugins</a></li>
</ul>
<h2 id="aboutme">Chi sono</h2>
<p>Mi chiamo <strong><em>Giacomo Ratta</em></strong> e sono nato nel 1987. Sono di Porto Cesareo, un paese di mare in provincia di Lecce, ma abito quasi tutto l’anno a Torino per studiare Ingegneria informatica. Ho frequentato l’istituto tecnico industriale a Galatone (LE), <em>dove ho scritto le mie prime righe di codice!</em></p>
<p><strong>Quali sono i tuoi hobby?</strong> Ho la passione per la musica, suono il basso e la tastiera, e spero di ritornare presto a suonare in una band. Mi piace anche gironzolare in mountain bike per le colline torinesi, ma ultimamente è sempre più difficile trovare il tempo per farlo!</p>
<p>La <strong>passione per internet e per l’attività di webmaster</strong> è nata nel 2006, molto più recentemente rispetto alle altre, frequentando un corso pomeridiano di php offerto dalla scuola.</p>
<p>Da qui è nata una curiosità continua, una voglia irrefrenabile di imparare qualcosa di nuovo che mi permettesse di fare siti migliori, più interattivi e più efficienti.</p>
<p><strong><em>Spero che anche tu abbia la stessa passione e voglia di imparare.</em></strong></p>
<h2 id="whyblog">Perché ho deciso di aprire un blog</h2>
<p>I primi due anni dopo il diploma ho deciso di iscrivermi all’università e, contemporaneamente, iniziare a lavorare come webmaster indipendente: lavorando da solo non potevo buttarmi in progetti troppo impegnativi e l’unica possibilità era quella di realizzare dei <em>siti “vetrina”</em>.</p>
<p>Il terzo anno mi sono trasferito a Torino per studiare ed ho lasciato l’attività di webmaster, ma non ho smesso di leggere libri e navigare su internet in cerca di cose interessanti.</p>
<p>Allora ho pensato: <em>“perché non condividere le cose che imparo ogni giorno scrivendole su un blog?”</em>.</p>
<p>In questa scelta mi ha influenzato tantissimo l’esempio di alcuni blogger che hanno rinunciato al &#8220;denaro sicuro&#8221; per dedicarsi a fare quello che più li piace.</p>
<p><strong>Quello che mi piace fare</strong> è:</p>
<ul>
<li>leggere riviste di informatica, libri e manuali riguardanti internet, che non parlano solo di questioni tecniche, ma anche di argomenti teorici come usabilità, accessibilità, grafica web, ecc.</li>
<li>visitare siti e blog (internazionali e italiani) dai quali imparare il più possibile e avere sempre le ultime notizie</li>
</ul>
<p>…ma soprattutto <strong>fornire dei consigli utili e condividere le mie conoscenze</strong>.</p>
<h2 id="aboutblog">Di cosa parlo in questo blog</h2>
<p><span class="highlight_green"><em><strong>Innanzitutto ci tengo a precisare che non sono un guru o un esperto, ma ti posso assicurare che ho tanta passione per quello che faccio e cercherò di scrivere articoli sempre più utili e interessanti.</strong></em></span></p>
<p>Gli articoli riguardano soprattutto:</p>
<ul>
<li>php, mysql, apache</li>
<li>javascript, jquery, tecniche ajax e altri framework javascript <small>(es. mootools, prototype, scriptaculous)</small></li>
<li>programmare con le <acronym title="Application Programming Interface">API</acronym> <small>(google maps, twitter, facebook, bit.ly, ecc.)</small></li>
<li>wordpress (personalizzare e ottimizzare)</li>
<li>web design <small>(xhtml, html5, css, usabilità, accessibilità, trends, ispirazioni)</small></li>
<li><em>internet news</em> e novità dei principali siti web</li>
<li>twitter, facebook e altri social network</li>
<li>browser e motori di ricerca</li>
<li>ottimizzazioni per motori di ricerca (<acronym title="Search Engine Optimization">SEO</acronym>)</li>
</ul>
<p><strong><span class="highlight_red">Se sei un webmaster alle prime armi, questo blog fa sicuramente per te!</span></strong></p>
<h2 id="blogmultimedia">Podcast e contenuti multimediali</h2>
<p>Alcuni dei blog che visito più spesso fanno uso di <strong>podcast (audio o video)</strong> dei quali si può effettuare il <strong>download </strong>o la riproduzione in <strong>streaming</strong>.</p>
<p>Dal primo momento ne ho potuto apprezzare la comodità. Infatti puoi ascoltare un podcast mentre navighi su altri siti, oppure copiarlo nel tuo lettore mp3 e ascoltarlo quando e dove più ti piace. <em>Bello, vero?!? </em></p>
<p>Certo, produrre dei podcast di qualità (con background musicale, scritte, immagini, titoli) richiede molto lavoro, ma spero che apprezzerai l’impegno.</p>
<p><span class="highlight_yellow"><em>Ti fornirò tutti gli strumenti e le informazioni per poter ascoltare, vedere ed effettuare il download dei miei podcast.</em></span></p>
<p>Cercherò di produrre questi <strong>tipi di podcast</strong>:</p>
<ul>
<li>versione audio per ogni articolo</li>
<li>versione video degli articoli più interessanti</li>
<li>news settimanali, video e audio</li>
</ul>
<h2 id="blogfaq">F.A.Q. – Domande frequenti</h2>
<h5>Posso copiare, modificare o citare i tuoi articoli?</h5>
<p>Puoi utilizzare tutti i contenuti di questo blog a tuo piacimento e a qualsiasi scopo (che non sia commerciale).</p>
<p>Tuttavia, assicurati di rispettare la licenza <a href="#creativecommons">Creative Commons</a> e il <a href="#copyright">copyright</a>.</p>
<h5>Posso tradurre e pubblicare interamente un articolo nel mio sito?</h5>
<p>Solo se viene tradotto e pubblicato in un sito che non è in lingua italiana.</p>
<p>Tuttavia, assicurati di rispettare la licenza <a href="#creativecommons">Creative Commons</a> e il <a href="#copyright">copyright</a>.</p>
<h5>Saresti disponibile a scrivere un “guest post”?</h5>
<p>Mi piacerebbe tantissimo, anche perché mi daresti l&#8217;opportunità di farmi conoscere da altri lettori. Basterà contattarmi via email per decidere l&#8217;argomento dell&#8217;articolo.</p>
<h5>Posso pubblicare un “guest post” su jblog.it?</h5>
<p>Certo, ma solo se l&#8217;articolo è in tema con il blog o potrebbe comunque interessare i miei lettori.</p>
<h5>Scriveresti un articolo su un particolare argomento a richiesta?</h5>
<p>I suggerimenti sono sempre ben accetti. Se vuoi saperne di più su un nuovo linguaggio di programmazione o su una particolare notizia ti basterà contattarmi e se avrò sufficiente materiale a disposizione pubblicherò l&#8217;articolo entro qualche settimana. E poi sarei sicuro che  almeno un lettore fosse interessato a ciò che scrivo! <img src='http://jblog.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="Informazioni" /> </p>
<h5>Saresti disponibile ad aiutare un singolo lettore alle prese con un particolare problema?</h5>
<p>Se ne avrò il tempo e la capacità, sarò felice di aiutare chiunque abbia un problema (anche non troppo comune): potrebbe venirne fuori un bell&#8217;articolo! Ricordati di frequentare anche i forum: è lì che potresti trovare un aiuto concreto da parte di gente molto più esperta di me.</p>
<h5>Puoi aggiungere il mio sito nei tuoi bookmark?</h5>
<p>Come per i &#8220;guest post&#8221;, se è in tema con il blog e può interessare ai lettori il tuo sito sarà il benvenuto nella mia &#8220;lista dei preferiti&#8221;. Devi sapere che questo non è uno &#8220;scambio link&#8221;, quindi non pretendo che il mio link compaia nelle pagine del tuo sito. Se ti va, puoi segnalarmi anche siti e blog interessanti che non sono tuoi in modo da farli conoscere anche ad altri.</p>
<h2 id="creativecommons">Licenza Creative Commons</h2>
<p>I contenuti pubblicati su jblog sono distribuiti con licenza <a title="Licenza Creative Commons 3.0 [by-nc-sa]" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it" target="_blank"><strong>Creative Commons</strong></a>, eccetto dove diversamente ed esplicitamente indicato.</p>
<p>Oltre alle condizioni della precedente licenza si richiede che:</p>
<ul>
<li>il contenuto riprodotto non superi il 50% dei caratteri di quello originale</li>
<li>sia indicato chiaramente il nome dell’autore e il link verso l’articolo originale</li>
<li>si possa ottenere in qualsiasi momento l’immediata e incondizionata rimozione dei contenuti</li>
</ul>
<p>Se ti interessa riprodurre o modificare i contenuti di questo blog non posso far altro che esserne felice.</p>
<p>L’unica cosa che ti chiedo è di inviarmi il link della pagina del tuo sito (oppure un &#8220;ping&#8221;) in modo da fornirti altri dati, link e risorse che potrebbero esserti utili per fare un articolo migliore del mio.</p>
<h2 id="responsibility">Responsabilità</h2>
<p>jblog non si assume alcuna responsabilità per danni causati, direttamente o indirettamente, dall&#8217;utilizzo delle informazioni presenti in questo blog.</p>
<p>jblog non si assume alcuna responsabilità sul contenuto dei siti esterni linkati dagli autori.</p>
<p>Gli autori di questo blog, per quanto cerchino di controllare tutti i contenuti scritti o linkati dagli utenti ed eliminare quelli in cui si manifesti una violazione della legge, non si assumono alcuna responsabilità su di essi.</p>
<h2 id="privacy">Trattamento dei dati personali</h2>
<p>jblog raccoglie automaticamente l’indirizzo ip nel momento in cui si accede al sito.</p>
<p>jblog raccoglie nome, email, sito web nel momento in cui si scrive un commento o ci si iscrive ad un servizio (es. newsletter).</p>
<p>I dati raccolti non verrano mai utilizzati eccetto in caso di richiesta da parte delle autorità competenti.</p>
<p>jblog è disponibile a fornire tutte le informazioni riguardanti la politica di raccolta e di trattamento dei dati personali.</p>
<h2 id="copyright">Copyright</h2>
<p>Gli elementi grafici, il codice HTML/XHTML, fogli di stile (.css) e tutti gli script sono da considerarsi di esclusiva proprietà di Wordpress e jblog.it.</p>
<p>Tutti i marchi citati e i loghi riprodotti in questo blog appartengono ai legittimi proprietari, e sono citati a scopo informativo e/o didattico.</p>
<h2 id="credits">Crediti</h2>
<h6><a href="http://wordpress.org/" target="_blank">Wordpress</a></h6>
<p>Cms per la creazione di blog, basato su php e mysql.</p>
<h6><a href="http://www.php.net/" target="_blank">Php</a></h6>
<p>Linguaggio di scripting interpretato per lo sviluppo di applicazioni web e stand-alone, con una sintassi simile a C e Perl.</p>
<h6><a href="http://www.mysql.com/" target="_blank">MySql</a></h6>
<p>Database management system relazionale rilasciato gratuitamente ma di proprietà di <a href="http://www.sun.com/">Sun Microsystems</a>.</p>
<h6><a href="http://jquery.com/" target="_blank">jQuery</a></h6>
<p>Framework javascript, Ajax e DHtml.</p>
<h6><a href="http://dryicons.com/free-icons/preview/aesthetica/" target="_blank">Aesthetica Icons</a> <span class="h_nrml">(di <a href="http://dryicons.com/" target="_blank">DryIcons</a>)</span></h6>
<p>Pacchetto di oltre 150 icone.</p>
<h6><a href="http://dryicons.com/free-icons/preview/aesthetica-version-2/" target="_blank">Aesthetica 2.0 Icons</a> <span class="h_nrml">(di <a href="http://dryicons.com/" target="_blank">DryIcons</a>)</span></h6>
<p>Pacchetto di oltre 150 icone.</p>
<h6><a href="http://dryicons.com/free-icons/preview/classy-icons-set/" target="_blank">Classy Icons</a> <span class="h_nrml">(di <a href="http://dryicons.com/" target="_blank">DryIcons</a>)</span></h6>
<p>Pacchetto di circa 300 icone.</p>
<h6><a href="http://www.blogperfume.com/free-glossy-blogging-icons-set-for-bloggers/" target="_blank">Blogging Icons Set</a></h6>
<p>80+ icone di social network con relative miniature.</p>
<h6><a href="http://www.komodomedia.com/blog/2009/06/social-network-icon-pack/ target=">Social Media Network Icons</a></h6>
<p>Raccolta gratuita di icone &#8220;glossy&#8221; per il blogging.</p>
<h2 id="wp_plugins">Plugins</h2>
<h6><a href="http://akismet.com/" target="_blank">Akismet</a> <span class="h_nrml">(di <a href="http://ma.tt/" target="_blank">Matt Mullenweg</a>)</span></h6>
<p>Analizza i commenti per selezionare quelli che potrebbero essere spam.</p>
<h6><a href="http://www.1pixelout.net/code/audio-player-wordpress-plugin/" target="_blank">Audio player</a> <span class="h_nrml">(di <a href="http://www.1pixelout.net/" target="_blank">Martin Laine</a>)</span></h6>
<p>Player mp3 &#8220;a traccia singola&#8221; altamente flessibile e personalizzabile.</p>
<h6><a href="http://sw-guide.de/wordpress/plugins/breadcrumb-nav-xt/" target="_blank">Breadcrumb Navigation XT</a> <span class="h_nrml">(di <a href="http://sw-guide.de/" target="_blank">Michael Woehrer</a>)</span></h6>
<p>Visualizza le &#8220;briciole di pane&#8221; (breadcrumbs) che indicano il percorso fatto per raggiungere la pagina corrente.</p>
<h6><a href="http://ideasilo.wordpress.com/2007/04/30/contact-form-7/" target="_blank">Contact Form 7</a> <span class="h_nrml">(di <a href="http://ideasilo.wordpress.com/" target="_blank">Takayuki Miyoshi</a>)</span></h6>
<p>Permette di aggiungere un form per la scrittura e l&#8217;invio delle email direttamente dal blog.</p>
<h6><a href="http://kimmo.suominen.com/sw/dofollow/" target="_blank">DoFollow</a> <span class="h_nrml">(di <a href="http://kimmo.suominen.com/" target="_blank">Kimmo Suominen</a>)</span></h6>
<p>Disabilita l&#8217;attributo rel=&#8221;nofollow&#8221; dei link nei commenti.</p>
<h6><a href="http://www.arnebrachhold.de/redir/sitemap-home/" target="_blank">Google XML Sitemaps</a> <span class="h_nrml">(di <a href="http://www.arnebrachhold.de/" target="_blank">Arne Brachhold</a>)</span></h6>
<p>Compone una sitemap nel formato xml, compatibile con i principali motori di ricerca (Google, Yahoo!, Msn, Ask).</p>
<h6><a href="http://alexking.org/projects/wordpress" target="_blank">Popularity Contest</a> <span class="h_nrml">(di <a href="http://alexking.org" target="_blank">Alex King</a>)</span></h6>
<p>Controlla la popolarità dei post basandosi su circa 10 parametri come: commenti ricevuti, letture, trackbacks, ecc.</p>
<h6><a href="http://www.dynamick.it/related-post-with-thumbnail-942.html" target="_blank">Related Posts</a> <span class="h_nrml">(di <a href="http://www.dynamick.it/" target="_blank">Michele Gobbi</a>)</span></h6>
<p>Visualizza una lista di post correlati (basata sulla corrispondenza delle parole chiavi) con la relativa immagine (di cui si possono scegliere le dimensioni).</p>
<h6><a href="http://www.mariosalexandrou.com/rss-includes-pages.asp" target="_blank">RSS Includes Pages</a> <span class="h_nrml">(di <a href="http://www.mariosalexandrou.com/" target="_blank">Marios Alexandrou</a>)</span></h6>
<p>Permette di includere le pagine (e non solo i post) all&#8217;interno dei feed. Particolarmente utile per chi utilizza Wordpress come un CMS.</p>
<h6><a href="http://urbangiraffe.com/plugins/search-unleashed/" target="_blank">Search Unleashed</a> <span class="h_nrml">(di <a href="http://urbangiraffe.com/" target="_blank">John Godley</a>)</span></h6>
<p>Motore di ricerca avanzato che permette una ricerca &#8220;Full Text&#8221; cercando attraverso post, pagine, commenti, titoli e url. Nella pagina dei risultati vengono evidenziate le diverse parole chiave.</p>
<h6><a href="http://www.prelovac.com/vladimir/wordpress-plugins/seo-friendly-images" target="_blank">SEO Friendly Images</a> <span class="h_nrml">(di <a href="http://www.prelovac.com/vladimir" target="_blank">Vladimir Prelovac</a>)</span></h6>
<p>Aggiunge alle immagini gli attributi &#8220;alt&#8221; e &#8220;title&#8221; per aumentare il traffico proveniente dai motori di ricerca.</p>
<h6><a href="http://www.netconcepts.com/seo-title-tag-plugin/" target="_blank">SEO Title Tag</a> <span class="h_nrml">(di <a href="http://www.netconcepts.com/" target="_blank">Stephan Spencer, Netconcepts</a>)</span></h6>
<p>Permette di ottimizzare i titoli delle pagine (post, pagine statiche, categoria, tag, url generiche) aggiungendo un titolo personalizzato. Nell&#8217;area amministrativa si avrà a disposizione un pannello per la modifica di massa, evitando di aprire un post (o altro) alla volta.</p>
<h6><a href="http://www.pfadvice.com/wordpress-plugins/show-top-commentators/" target="_blank">Show Top Commentators</a> <span class="h_nrml">(di <a href="http://www.savingadvice.com/" target="_blank">Nate Sanden</a>)</span></h6>
<p>Visualizza la lista dei lettori del blog che hanno lasciato più commenti, aggiungendo il link verso il proprio sito (senza rel=&#8221;nofollow&#8221;).</p>
<h6><a href="http://txfx.net/code/wordpress/subscribe-to-comments/" target="_blank">Subscribe To Comments</a> <span class="h_nrml">(di <a href="http://txfx.net/" target="_blank">Mark Jaquith</a>)</span></h6>
<p>Gestisce l&#8217;iscrizione ai nuovi commenti in modo da riceverli via email.</p>
<h6><a href="http://lesterchan.net/portfolio/programming/php/" target="_blank">WP-PageNavi</a> <span class="h_nrml">(di <a href="http://lesterchan.net/" target="_blank">Lester &#8216;GaMerZ&#8217; Chan</a>)</span></h6>
<p>Permette di avere una navigazione più avanzata fra le pagine dei post.</p>
<img src="http://jblog.it/?ak_action=api_record_view&id=2&type=feed" alt=" Informazioni"  title="Informazioni" />]]></content:encoded>
			<wfw:commentRss>http://jblog.it/informazioni/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
