<?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>Consulenza-Web.com &#187; peg</title>
	<atom:link href="http://www.consulenza-web.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.consulenza-web.com</link>
	<description>Blog di Marco Pegoraro su Consulenza Web ed Informatica, Programmazione Web e realizzazione di Siti Web Accessibili.</description>
	<lastBuildDate>Mon, 30 Jan 2012 08:39:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Se cambia l&#8217;URL dillo a Google!</title>
		<link>http://www.consulenza-web.com/2012/01/se-cambia-url-dillo-a-google/</link>
		<comments>http://www.consulenza-web.com/2012/01/se-cambia-url-dillo-a-google/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 16:04:01 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[tip & tricks]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htacces]]></category>
		<category><![CDATA[indicizzazione]]></category>
		<category><![CDATA[redirect 301]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=671</guid>
		<description><![CDATA[Nella normale amministrazione di un sito web o di un blog capita di apportare modifiche per cui l&#8217;indirizzo url della pagina subisce una modifica. In questo caso l&#8217;indicizzazione della pagina può risultare compromessa, penalizzando il sito. Esempio pratico: Se usiamo <a href="http://www.minilibra.com/" title="WordPress Expert">WordPress</a>, modificando la data di pubblicazione di un articolo viene modificato anche il suo indirizzo url. [...]]]></description>
			<content:encoded><![CDATA[<p>Nella normale amministrazione di un sito web o di un blog capita di apportare modifiche per cui l&#8217;indirizzo url della pagina subisce una modifica.</p>
<p>In questo caso <strong>l&#8217;indicizzazione</strong> della pagina può risultare compromessa,<strong> penalizzando il sito</strong>.</p>
<h2>Esempio pratico:</h2>
<p>Se usiamo WordPress, modificando la data di pubblicazione di un articolo viene modificato anche il suo indirizzo url.</p>
<p>Ad esempio, in questo indirizzo</p>
<pre>http://www.consulenza-web.com/2012/01/gratis-costa-troppo/</pre>
<p>si nota chiaramente che la data dell&#8217;articolo è parte fondamentale dell&#8217;indirizzo: se cambiassimo la data cambierebbe di conseguenza anche l&#8217;url dell&#8217;articolo.</p>
<p>&nbsp;</p>
<h2>Perchè è importante farci attenzione?</h2>
<p>I motori di ricerca (come Google) navigano il web alla <strong>ricerca di nuovi contenuti</strong> seguendo i link che trovano in pagine già conosciute.</p>
<p>Quando una nuova pagina viene scoperta il motore salva il suo indirizzo ed elabora delle parole chiave che associa alla pagina stessa: <strong>questa è l&#8217;indicizzazione</strong>.</p>
<p>Successivamente il motore torna a rilegge la nostra pagina ad <strong>intervalli di tempo regolari</strong> alla ricerca di aggiornamenti, nuovi commenti, nuovi link da seguire. Per farlo <span style="text-decoration: underline;">utilizza l&#8217;indirizzo precedentemente salvato</span>.</p>
<p>Se questo indirizzo non esiste più il motore ottiene l&#8217;informazione: &#8220;il sito ha eliminato una pagina&#8221;. Se molte pagine di un sito non vengono trovate però l&#8217;informazione peggiora in &#8220;<span style="text-decoration: underline;">il sito è in stato di abbandono</span>&#8220;.</p>
<p>Ogni pagina rimossa provoca un piccolo danno alla considerazione che il motore di ricerca ha del nostro sito web.</p>
<p>Per evitare questo effetto basta prendere un semplice accorgimento:</p>
<p>&nbsp;</p>
<h2>Risolvere il Problema:</h2>
<p>Il <strong>server web Apache</strong> ci mette a disposizione un semplice strumento per risolvere il problema: il <strong>redirect 301 eseguito via <a title="Info su HTACCESS (wikipedia)" href="http://en.wikipedia.org/wiki/Htaccess" class="aga aga_2" target="_blank">HTACCESS</a></strong>:</p>
<pre>Redirect 301 /vecchio_indirizzo/ /nuovo_indirizzo/</pre>
<p>NOTA: nella root del sito web crea un file con il nome &#8220;.htaccess&#8221; quindi modificalo con un editor di solo testo quale Coda o Eclipse inserendo le istruzioni che ti servono.</p>
<p>In questo modo il motore di ricerca, tentando di leggere il vecchio indirizzo, viene istruito circa l&#8217;avvenuto spostamento, aggiorna il suo database e le pagine dei risultati di ricerca contenenti i riferimenti al nostro sito <strong>mantenendo la visibilità raggiunta dall&#8217;articolo</strong>.</p>
<p style="text-align: right;"><a title="Profilo Twitter di Marco Pegoraro" href="https://twitter.com/#!/thepeg" class="aga aga_3" target="_blank">@ThePeg</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;title=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;title=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;title=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;title=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;title=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Se+cambia+l%26%238217%3BURL+dillo+a+Google%21+@+http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fse-cambia-url-dillo-a-google%2F&amp;t=Se+cambia+l%26%238217%3BURL+dillo+a+Google%21" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2012/01/se-cambia-url-dillo-a-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GRATIS? No grazie, costa troppo!</title>
		<link>http://www.consulenza-web.com/2012/01/gratis-costa-troppo/</link>
		<comments>http://www.consulenza-web.com/2012/01/gratis-costa-troppo/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 13:18:55 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[disqs]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[gratis]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[servizi]]></category>
		<category><![CDATA[sito web]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=580</guid>
		<description><![CDATA[Ieri @Damte mi ha prestato il Kindle per provarlo un po&#8217; e ci ho trovato un e-book molto interessante di Alessandra Farabegoli: Manuale di Buonsenso in Rete,  che mi ha fatto riflettere sull&#8217;accoppiata delle parole  &#8221;sito web&#8221; e &#8220;gratis&#8220;. L&#8217;autrice sostiene alcune tesi che condivido e sulle quali vorrei esporre il mio punto di vista: il sito [...]]]></description>
			<content:encoded><![CDATA[<p>Ieri <a title="Profilo twitter di Damiano Tescaro - Damte" href="https://twitter.com/#!/Damte" class="aga aga_12" target="_blank">@Damte</a> mi ha prestato il Kindle per provarlo un po&#8217; e ci ho trovato un e-book molto interessante di <a href="http://www.alessandrafarabegoli.it/" class="aga aga_13" target="_blank">Alessandra Farabegoli</a>: <a style="text-align: left;" href="http://www.alessandrafarabegoli.it/manuale-di-buonsenso-in-rete-ebook/" class="aga aga_14" target="_blank">Manuale di Buonsenso in Rete</a>,<span style="text-align: left;"> </span><span style="text-align: left;"> che mi ha fatto riflettere sull&#8217;accoppiata delle parole  &#8221;<strong>sito web</strong>&#8221; e &#8220;<strong>gratis</strong>&#8220;.</span></p>
<p>L&#8217;autrice sostiene alcune tesi che condivido e sulle quali vorrei esporre il mio punto di vista:</p>
<ol>
<li><strong>il sito web è essenziale</strong> per iniziare una qualsivoglia forma di comunicazione on-line</li>
<li><strong>il sito web è (solo) uno strumento</strong>, è il <em>contenuto</em> del sito che ottiene il successo</li>
<li><strong>si può iniziare gratis</strong> con WordPress aprendo un blog su wordpress.com</li>
</ol>
<p>Sui primi due concetti sono totalmente d&#8217;accordo, sul terzo lo sono un po&#8217; meno e in questo articolo vorrei esplorare alcuni concetti di base su cui ogni persona &#8211; potenziale cliente di una web agency &#8211; dovrebbe soffermarsi e <strong>riflettere prima di iniziare</strong> una qualsiasi attività di comunicazione on-line.</p>
<p>&nbsp;</p>
<p>In estrema sintesi la mia teoria è questa:</p>
<p style="text-align: center; color: red; font-size: 22pt; margin: 40px 0;"><strong>il Tempo costa più del Denaro!</strong></p>
<div class="wp-caption aligncenter" style="width: 555px"><img title="Il tempo costa!" src="http://www.productiveflourishing.com/wp-content/uploads/2010/11/The-Cost-of-Dreams.jpg" alt="" width="545" height="431" /><p class="wp-caption-text">(immagine dahttp://www.productiveflourishing.com)</p></div>
<p><span style="color: #000000;">Vi spiego subito il perchè.</span></p>
<p>&nbsp;</p>
<h2>Back to the basics: il sito Web è Essenziale</h2>
<p><strong>Comunicare è l&#8217;atto del trasmettere un messaggio ad un destinatario</strong>. Per farlo è necessario un canale di trasmissione:</p>
<ul>
<li>La lettera ha bisogno delle Poste</li>
<li>Il telefono ha bisogno di una Telecom</li>
<li><strong>Internet ha bisogno di un sito web.</strong></li>
</ul>
<p><strong>Distribuire il proprio indirizzo web</strong> è come dare il proprio numero di cellulare: chi lo riceve lo utilizzerà <strong>per raggiungervi e dialogare con voi!<br />
</strong>(e il sito, a differenza del telefono, permette a più persone contemporaneamente di farlo)</p>
<p>&nbsp;</p>
<h2>Servizi Gratuiti in Rete:</h2>
<p>Internet offre molti servizi gratuiti (e non) che permettono di pubblicare contenuti:</p>
<ul>
<li>Facebook rende possibile gestire il proprio profilo e rete di contatti</li>
<li>Twitter permette di pubblicare messaggi di 140 caratteri</li>
<li>WordPress consente di pubblicare articoli liberamente organizzati per data e archivi</li>
</ul>
<p><strong>ATTENZIONE:</strong> La pagina Facebook, l&#8217;account Twitter o il blog WordPress.com (versione gratuita) <strong>possono essere chiusi in qualsiasi momento</strong>, senza spiegazioni o risarcimenti.<br />
<span style="color: #ff0000; font-size: 9px;">(questa condizione è solitamente espressa nei &#8220;</span><em style="color: #ff0000; font-size: 9px;">termini e condizioni d&#8217;utilizzo&#8221;</em><span style="color: #ff0000; font-size: 9px;"> scritti in piccolo che nessuno legge mai!)</span></p>
<p>È come aver distribuito a tutti i clienti il<strong> numero di un vostro amico che vi ha prestato il telefono</strong>: e se il vostro amico si riprende il telefono?</p>
<p>Ciò che distingue il sito web da un tutti questi servizi è la<strong> proprietà del sito</strong> e la possibilità di <strong>decidere liberamente l&#8217;utilizzo</strong> che se ne vuol fare.</p>
<p>&nbsp;</p>
<h2>Il Sito Web è uno Strumento, non un fine!</h2>
<p>Essendo quindi il sito web  uno strumento, esattamente come il telefonino, o la busta e francobollo, ciò che conta è<strong> cosa si scrive</strong>!</p>
<p>La prima domanda da porsi è: <strong>che tipo di comunicazione voglio fare? </strong>Il vostro obiettivo potrebbe essere la promozione di un&#8217;attività, oppure scrivere di ricette, o ancora vendere i vostri quadri via internet.<br />
Sapere <strong>cosa e come volete comunicare</strong> vi permette di capire di che strumento avete bisogno.</p>
<p>Facciamo qualche esempio:</p>
<p>&nbsp;</p>
<h4><strong></strong>BLOG:</h4>
<p style="padding-left: 30px;"><strong>Cosa:</strong> Caratteristica fondamentale del blog è la <strong>pubblicazione periodica di articoli</strong> più o meno complessi riguardanti un argomento coerente (come avviene in questo!)</p>
<p style="padding-left: 30px;"><strong>Come</strong>: Una delle piattaforme più diffuse per realizzare un blog è <a title="Blog System" href="http://wordpress.org" class="aga aga_15" target="_blank">WordPress</a>, ma ci sono altre soluzioni come <a href="https://posterous.com/" class="aga aga_16">Posterous</a>, <a href="http://www.tumblr.com/" class="aga aga_17">Tumblr</a>, etc&#8230;</p>
<h4>NEGOZIO ON-LINE:</h4>
<p style="padding-left: 30px;"><strong>Cosa:</strong> Le pagine contengono informazioni tecniche sui prodotti in vendita ed è possibile <strong>effettuare un acquisto</strong> mediante carta di credito e/o affini (e-commerce).</p>
<p style="padding-left: 30px;"><strong>Come:</strong> Esistono moltissimi software di e-commerce, gratuiti e non. Valutare che soluzione scegliere è compito da effettuare con la <span style="text-decoration: underline;">consulenza di un esperto</span>.</p>
<h4>SITO WEB:</h4>
<p style="padding-left: 30px;"><strong>Cosa</strong>: Il sito web è un <strong>archivio di pagine web</strong> organizzate in una una piattaforma di comunicazione multifunzionale  <strong>con lo scopo di dare informazioni esaustive e coerenti</strong> su di un argomento, un prodotto, servizio o iniziativa.</p>
<p style="padding-left: 30px;">Il sito web <strong>può contenere </strong>al suo interno molte sezioni: dal <strong>blog</strong> all&#8217;<strong>e-commerce</strong>, può essere <strong>collegato ai vari servizi</strong> quali Facebook e Twitter, <strong>può ospitare commenti</strong> degli utenti tramite <a title="Commenti nella pagina" href="http://disqus.com/" class="aga aga_18" target="_blank">Disqus</a> (o simili). È insomma un punto di partenza potente e versatile da cui poi diramare la propria strategia di comunicazione.</p>
<p>Ma veniamo al punto che ci interessa&#8230;</p>
<h2>Opzione 1: Si può fare un Sito Gratuito?</h2>
<p><strong>Sì</strong>, tecnicamente si può fare, ma <strong>bisogna accettarne le conseguenze</strong>:</p>
<p>Per realizzare un sito web bisogna utilizzare vari <em>linguaggi di programmazione</em> i quali possono richiedere svariati anni di studio. Per questo motivo esistono software (<strong>CMS</strong> = <em>Content Management System</em>) che facilitano la creazione di pagine web.</p>
<p>I CMS vanno quindi installati su un <strong>server web,</strong> il quale deve essere scelto e configurato in base al software che si intende utilizzare. Anche in questo caso sono coinvolte un certo numero di competenze necessarie per svolgere il lavoro: FTP, MySQL, cPanel, etc&#8230;</p>
<p>Scaricare un CMS gratuito e metterlo in funzione senza spendere un soldo è possibile ma richiede molto spesso una<strong> GRANDE QUANTITA&#8217; DI TEMPO</strong>, che non giustifica la scelta del &#8220;FAI-DA-TE&#8221;.</p>
<p>&nbsp;</p>
<h2>Opzione 2: Pacchetti economici &#8220;chiavi in mano&#8221;</h2>
<p>Esistono <strong>servizi web che offrono CMS pre-installati</strong> e perfettamente funzionanti gratuitamente o per poche decine di euro l&#8217;anno.<br />
Questi servizi fanno &#8220;i soldi&#8221; sull&#8217;elevato numero di clienti attratti dal <strong>falso risparmio</strong>.</p>
<p><strong>All&#8217;inizio va tutto bene</strong>: avete speso poco, create le vostre pagine in 5 minuti, siete contento. Ma appena vi accorgete di volere qualcosa in più vi scontrate contro il &#8220;<strong>non è previsto nel servizio&#8221;</strong>.</p>
<p>Oltre ai limiti tecnici bisogna considerare anche la totale <strong>assenza di un consulente esperto</strong>. Non c&#8217;è nessuno a cui rivolgersi per ottenere un consiglio, una &#8220;dritta&#8221; su come creare al meglio una pagina.</p>
<p><span style="text-decoration: underline;"><span>U</span></span><span style="text-decoration: underline;">no strumento troppo semplice spesso comporta un risultato altrettanto limitato</span>!</p>
<p>&nbsp;</p>
<h2>&#8220;GRATIS&#8221; è quindi una parola molto costosa su web:</h2>
<ul>
<li>può costare tempo</li>
<li>può costringere a rifare da zero un progetto perdendo mesi di lavoro</li>
<li>nel peggiore dei casi, può nascondere una truffa (condizioni di servizio poco chiare, zero garanzie, etc)</li>
</ul>
<p><strong>Ogni mestiere richiede professionalità ed esperienza</strong>. Improvvisarsi programmatori o esperti di comunicazione web porta ad uno sviluppo non ottimale del progetto, nel peggiore dei casi al completo fallimento.</p>
<p>&nbsp;</p>
<h2>Opzione 3: Consulenza professionale<br />
<span style="font-size: 10pt;">(e come valutare il COSTO/RISULTATO)</span></h2>
<p>Per valutare la consulenza professionale per la realizzazione di un progetto di comunicazione on-line e capire se è necessaria, se è conveniente, se proposta ad un prezzo corretto dovete fare attenzione al <strong>rapporto COSTO/RISULTATO</strong>.</p>
<p>&nbsp;</p>
<h4>COSTO</h4>
<p>Il concetto di <strong>COSTO</strong> va considerato in termini di &#8220;<strong>spesa economica + tempo impegnato</strong>&#8220;.</p>
<p>Nel <strong>progetto di realizzazione</strong> di un sito web possiamo <strong>suddividere il COSTO in più categorie:</strong></p>
<ol>
<li>servizio di hosting</li>
<li>configurazione CMS / realizzazione delle pagine</li>
<li>ideazione veste grafica / realizzazione del tema grafico</li>
<li>organizzazione dei contenuti / produzione della flow-chart del sito web</li>
<li>redazione dei contenuti</li>
<li>produzione / ricerca / acquisto dei materiali collaterali (immagini, video, etc)</li>
<li>attività di promozione SEO / SEM</li>
<li>attività di promozione su social network</li>
<li>comunicazione diretta ai clienti / servizio di newsletter</li>
<li>comunicazione offline (inserire l&#8217;indirizzo del sito su carta intestata, biglietti da visita, materiale informativo e divulgativo)</li>
</ol>
<p>L&#8217;elenco, già lungo così, non è nemmeno completo.<br />
Ogni singolo punto ha un <strong>costo parziale e fornisce un risultato parziale</strong>. Alcuni punti hanno costi molto alti e risultati misurabili solamente nel lungo termine (SEO e promozione su social network).</p>
<p><strong>Gli unici due punti che possono essere trovati &#8220;gratis&#8221; come risorse on-line sono solo i primi due: Hosting + CMS.</strong></p>
<p>&nbsp;</p>
<h4>RISULTATO</h4>
<p>Il <strong>RISULTATO</strong> è l&#8217;impatto che il sito web &#8220;finito&#8221; ha sulla propria attività, ossia il vostro <strong>OBIETTIVO</strong>.</p>
<p>Questo non è un concetto solo di estetica o completezza delle pagine, ma comprende <strong>posizionamento</strong>, <strong>aumento dei contatti ricevuti</strong>  e quindi <strong>aumento delle <strong>visibilità/</strong>vendite/profitti</strong>.</p>
<p>Tenendo in mente questo è possibile valutare il rapporto COSTO/RISULTATO sia in fase di preventivazione che a progetto ultimato, e potrete <strong>misurare il successo o l&#8217;insuccesso dell&#8217;intero progetto</strong>.</p>
<p>&nbsp;</p>
<h2>Conclusioni:</h2>
<p>Se quindi un sito internet è lo strumento che vi serve, rifletterei su questi punti:</p>
<ul>
<li>E&#8217; veramente conveniente<strong> risparmiare poche centinaia di euro</strong> di consulenza server e hosting ed affrontare da soli tutti gli aspetti tecnici della configurazione di base di un sito web?</li>
<li>Siete disposti ad <strong>affrontare il costo di svariate ore</strong> (o serate) di studio e prove <strong>per ottenere un sito web dall&#8217;aspetto poco professionale</strong> e magari anche soggetto a problematiche di sicurezza, barriere di indicizzazione, blocchi di usabilità?</li>
</ul>
<div>Io trovo più importante <strong>concentrarsi sui contenuti</strong>, <span style="text-decoration: underline;">affidando a dei professionisti la parte tecnica</span> (ed eventualmente chiedendo consigli su come iniziare ad usare questo nuovo strumento). Questa soluzione non solo vi permetterà di essere online in meno tempo e con meno errori, ma vi garantirà una serie di servizi accessori (come l&#8217;indicizzazione, o l&#8217;organizzazione dell&#8217;e-commerce) altrimenti difficili da gestire.</div>
<div></div>
<div></div>
<p style="text-align: center; color: #ff0000; font-size: 11pt;"><strong>Se viaggi spesso per lavoro compri un&#8217;auto o ne costruisci una da zero?</strong></p>
<p style="text-align: center;"><strong>Perchè un sito web dovrebbe essere differente?</strong></p>
<p style="text-align: right;"><a title="Profilo twitter di Marco Pegoraro" href="https://twitter.com/#!/thepeg" class="aga aga_19" target="_blank">@ThePeg</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;title=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;title=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;title=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;title=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;title=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+GRATIS%3F+No+grazie%2C+costa+troppo%21+@+http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fgratis-costa-troppo%2F&amp;t=GRATIS%3F+No+grazie%2C+costa+troppo%21" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2012/01/gratis-costa-troppo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MediaTable jQuery Plugin</title>
		<link>http://www.consulenza-web.com/2012/01/mediatable-jquery-plugin/</link>
		<comments>http://www.consulenza-web.com/2012/01/mediatable-jquery-plugin/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 14:24:17 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Usabilità]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[media query]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[responsive]]></category>
		<category><![CDATA[tabella]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=559</guid>
		<description><![CDATA[Oggi mi sono imbattuto in un ottimo articolo di FilamentGroup riguardante l&#8217;usabilità di una tabella dati su schermi di piccole dimensioni. (link articolo) La soluzione proposta consiste nel definire due o più gruppi di colonne assegnando varie classi (Es: essential, optional, etc..) quindi utilizzare delle media-query CSS per visualizzare e nascondere gruppi di colonne in [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi mi sono imbattuto in un ottimo articolo di <a title="Filament Group WebSite" href="http://filamentgroup.com/" class="aga aga_24" target="_blank">FilamentGroup</a> riguardante l&#8217;<strong>usabilità di una tabella</strong> dati su <strong>schermi di piccole dimensioni</strong>. (<a title="Responsive table solution by Filament Group" href="http://filamentgroup.com/lab/responsive_design_approach_for_complex_multicolumn_data_tables/" class="aga aga_25" target="_blank">link articolo</a>)</p>
<p>La soluzione proposta consiste nel definire due o più <strong>gruppi di colonne</strong> assegnando varie classi (Es: essential, optional, etc..) quindi utilizzare delle <strong>media-query CSS</strong> per <strong>visualizzare e nascondere</strong> gruppi di colonne in base alle dimensioni del display.</p>
<p>Si tratta dunque di un esempio di <a title="Web Design Responsivo e Adattivo" href="http://www.consulenza-web.com/2011/07/compromesso-vincente/"  target="_blank">design responsivo</a>.</p>
<p>Trovando la soluzione molto interessante ho costruito un <strong>plugin jQuery</strong> che rende <strong>estremamente semplice</strong> realizzare sulle proprie pagine web quanto spiegato nell&#8217;articolo.</p>
<p style="text-align: center; font-size: 1.4em;"><a title="MediaTable jQuery Plugin Demo | Responsive tables with jQuery" href="http://consulenza-web.com/jquery/MediaTable"  target="_blank">&gt;&gt;&gt; Vai alla demo! &lt;&lt;&lt;</a></p>
<h2>MediaTable in Azione:</h2>
<p>In questo primo screenshoot vediamo una tabella di cui <strong>sono visualizzate solamente le colonne veramente importanti</strong>. Siamo su di uno schermo di piccole dimensioni!</p>
<p><a href="http://www.consulenza-web.com/wp-content/uploads/2012/01/media-table-001.jpg" ><img class="size-full wp-image-571" title="MediaTable jQuery Plugin" src="http://www.consulenza-web.com/wp-content/uploads/2012/01/media-table-001.jpg" alt="" width="471" height="184" /></a></p>
<p>Cliccando sul menu &#8220;columns&#8221; (il cui nome è configurabile) si apre un menu contenente l&#8217;<strong>elenco completo delle colonne disponibili</strong> nella tabella. Possiamo <strong>variare a piacere</strong> il numero di colonne visualizzate mettendo in relazione informazioni differenti.</p>
<p>Questo <strong>menu è generato automaticamente</strong>! Il sorgente di questo esempio, come spiegato successivamente, è una semplice tabella dati HTML!</p>
<p><a href="http://www.consulenza-web.com/wp-content/uploads/2012/01/media-table-002.jpg" ><img class="size-full wp-image-572" title="MediaTable jQuery Plugin" src="http://www.consulenza-web.com/wp-content/uploads/2012/01/media-table-002.jpg" alt="" width="471" height="184" /></a></p>
<p style="text-align: center; font-size: 1.4em;"><a title="MediaTable jQuery Plugin Demo | Responsive tables with jQuery" href="http://consulenza-web.com/jquery/MediaTable"  target="_blank">&gt;&gt;&gt; Vai alla demo! &lt;&lt;&lt;</a></p>
<h2>Come si usa MediaTable?</h2>
<p>MediaTable richiede la definizione di una <strong>tabella HTML</strong> definita correttamente ovvero con THEAD e TBODY. Le colonne di intestazione vanno raggruppate per classe in base alla priorità di visualizzazione.</p>
<p>Via CSS si imposteranno dei <strong>breakpoint</strong> su cui definire quali gruppi di colonne visualizzare.<br />
Il plugin costruisce inoltre un menu delle colonne disponibili per consentire una <strong>selezione manuale</strong> esplicita delle colonne da visualizzare.</p>
<p>Il nostro esempio utilizza 3 gruppi di colonne:</p>
<ul>
<li>essential &#8211; visibili su qualunque schermo</li>
<li>optional &#8211; visibili dai 768px (iPad portrait)</li>
<li>n/a &#8211; visibili dai 1024px (iPad landscape)</li>
</ul>
<p>Un&#8217;ulteriore classe &#8220;persist&#8221; è utilizzata per identificare colonne che non sono gestite dal menu. Impostando una colonna con le classi <em>essential</em> e <em>persist</em> essa non potrà mai essere nascosta!</p>
<pre>&lt;table class="mediaTable"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class="essential persist"&gt;Employee&lt;/th&gt;
&lt;th class="essential"&gt;xHTML&lt;/th&gt;
&lt;th class="optional"&gt;HTML5&lt;/th&gt;
&lt;th class="essential"&gt;CSS&lt;/th&gt;
&lt;th class="essential"&gt;JS&lt;/th&gt;
&lt;th class="optional"&gt;jQuery&lt;/th&gt;
&lt;th class="optional"&gt;jQueryUI&lt;/th&gt;
&lt;th&gt;jQuery Mobile&lt;/th&gt;
&lt;th&gt;Sencha Touch&lt;/th&gt;
&lt;th class="essential"&gt;PHP&lt;/th&gt;
&lt;th&gt;PHP (OO)&lt;/th&gt;
&lt;th class="optional"&gt;CakePHP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Marco Pegoraro&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;td class="yes"&gt;y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
....
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</pre>
<p>Il codice javascript per l&#8217;inizializzazione del plugin è estremamente semplice:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.mediaTable'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mediaTable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Tutte le tabelle aventi classe &#8220;mediaTable&#8221; verranno attivate per consentire la selezione dei campi ed il comportamento responsivo rispetto alle dimensioni dello schermo.</p>
<p style="text-align: center; font-size: 1.4em;"><a title="MediaTable jQuery Plugin Demo | Responsive tables with jQuery" href="http://consulenza-web.com/jquery/MediaTable"  target="_blank">&gt;&gt;&gt; Vai alla demo! &lt;&lt;&lt;</a></p>
<h2>Compatibilità:</h2>
<p>Ho testato il plugin sui seguenti sistemi:</p>
<ul>
<li>Mac OsX, Firefox 9.0.1</li>
<li>Mac OsX, Firefox 4.0</li>
<li>Mac OsX, Chrome 16</li>
<li>Mac OsX, Safari 5.1.2</li>
<li>Windows7, IE9</li>
<li>Windows7, IE8, IE7, IE6 (with <a title="CSS media query on IE6, IE7, IE8" href="https://github.com/scottjehl/Respond" class="aga aga_26" target="_blank">respond.js</a> for media-query)</li>
<li>Windows7, Firefox 7.0.9</li>
</ul>
<h2>Fork on GitHub:</h2>
<p>Il plugin è di libera distribuzione!</p>
<p><a title="MediaTable jQuery Plugin" href="https://github.com/thepeg/MediaTable" class="aga aga_27" target="_blank">Link al progetto pubblico su GitHub!</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;title=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;title=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;title=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;title=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;title=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+MediaTable+jQuery+Plugin+@+http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fmediatable-jquery-plugin%2F&amp;t=MediaTable+jQuery+Plugin" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2012/01/mediatable-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struttura di un plugin jQuery</title>
		<link>http://www.consulenza-web.com/2012/01/struttura-di-un-plugin-jquery/</link>
		<comments>http://www.consulenza-web.com/2012/01/struttura-di-un-plugin-jquery/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:13:12 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[jquery ui]]></category>
		<category><![CDATA[metodo]]></category>
		<category><![CDATA[ottimizzazione]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[prestazioni]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=497</guid>
		<description><![CDATA[In questo articolo voglio approfondire alcuni accorgimenti utili a migliorare le prestazioni, l&#8217;utilizzo e l&#8217;organizzazione di un plugin jQuery. Qualunque tipo di funzione/effetto e/o trasformazione del DOM di una pagina web può essere incorporata in un plugin jQuery con lo scopo di migliorare l&#8217;organizzazione del proprio codice Javascript. Invece di un&#8217;accozzaglia di istruzioni generiche avremo [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo voglio approfondire alcuni accorgimenti utili a migliorare le prestazioni, l&#8217;utilizzo e l&#8217;organizzazione di un <strong>plugin jQuery</strong>.</p>
<p>Qualunque tipo di funzione/effetto e/o trasformazione del DOM di una pagina web può essere incorporata in un plugin jQuery con lo scopo di <strong>migliorare l&#8217;organizzazione del proprio codice Javascript</strong>.<br />
Invece di un&#8217;accozzaglia di istruzioni generiche avremo il riferimento ad un set ordinato di plugins.</p>
<p><a title="Codice sorgente completo dell'articolo" href="http://jsbin.com/apojah/14/edit/" class="aga aga_29" target="_blank">http://jsbin.com/apojah/14/edit/</a></p>
<p><span id="more-497"></span></p>
<h2>Wrapper jQuery:</h2>
<p>Il primo accorgimento utile è incorporare il codice del plugin in un <strong>oggetto wrapper</strong> il cui scopo è duplice:</p>
<ol>
<li>isolare il codice del plugin dallo spazio degli script della pagina</li>
<li>utilizzare <strong>$</strong> come riferimento interno a jQuery in modo sicuro</li>
</ol>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
... <span style="color: #660066;">qui</span> va il codice del plugin ...
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Tutte le variabili dichiarate mediante la sintassi &#8220;var&#8221; saranno locali al plugin mentre rimane possibile accedere a variabili globali dichiarate esternamente.</p>
<p>Passare la variabile &#8220;jQuery&#8221; al wrapper rende possibile l&#8217;utilizzo della funzione <strong>$</strong> tipica di jQuery all&#8217;interno del codice del nostro plugin anche in presenza di altri framework esterni (es MooTools).</p>
<h2>Struttura base del plugin:</h2>
<p>Un plugin è un&#8217;estensione di jQuery che agisce su di un <em>contesto</em> formato da un elenco di <em>nodi DOM</em> identificati da una query xPath.</p>
<pre>$('p').hide();</pre>
<p>La precedente istruzione identifica un <em>elenco di nodi DOM</em> composto da tutti i paragrafi (p) presenti nel documento HTML e passa tale contesto alla funzione <em>hide()</em> di jQuery. Tale funzione restituisce il contesto stesso rendendo possibile la concatenazione di più plugins:</p>
<pre>$('p').hide().fadeIn();</pre>
<p>Per questo motivo il codice base del nostro plugin sarà:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">fn</span>.<span style="color: #660066;">customPlugin</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    ... <span style="color: #660066;">azioni</span> sul singolo elemento DOM ...
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Viene eseguito un ciclo applicando una funzione ad ogni elemento del contesto. Successivamente il plugin restituisce il contesto stesso per consentire la concatenazione dei plugins come accennato sopra.</p>
<h2>Ottimizziamo il ciclo sul contesto:</h2>
<p>E&#8217; importante capire che in Javascript ogni <em>function()</em> è trattata come un oggetto.<br />
Il codice di questo esempio, seppur molto diffuso, crea un <strong>nuovo oggetto</strong> per ogni elemento di contesto quindi <strong>incide significativamente sulla memoria e sulla prestazioni</strong> del plugin stesso.</p>
<p>Possiamo <strong>ottimizzare</strong> il tutto spostando la logica applicata al singolo elemento in una funzione esterna locale al wrapper del plugin:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">/**
   * Metodo locale utilizzato dal plugin jQuery sugli elementi DOM
   *
   */</span>
  <span style="color: #003366; font-weight: bold;">var</span> __loop <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeOut</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">/**
   * Plugin - Estensione jQuery
   */</span>
  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">customPlugin</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Applico la logica agli elementi del contesto (DOM)</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>__loop<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Mantengo la possibilità di concatenare plugins.</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// EndOf: &quot;customPlugin()&quot; ###</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>In riga <em>#19</em> applichiamo la funzione <em>__fn()</em> che è definita esterna al plugin ma localmente al wrapper creato. In questo modo Javascript utilizzerà sempre il medesimo oggetto passando di volta in volta dati differenti.</p>
<p>Questo concetto è estremamente importante in quanto con jQuery è utilizzo comune passare nuove funzioni come parametri di metodi applicati ad elementi DOM. Aver cura di definire tali funzioni (solitamente callback) in modo esplicito nel wrapper del plugin è fondamentale per migliorare le prestazioni del nostro codice.</p>
<h2>Configurazione del Plugin:</h2>
<p>Praticamente il 100% dei plugins jQuery utilizzano il primo parametro passato come oggetto di configurazione interna.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">customPlugin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
speed<span style="color: #339933;">:</span><span style="color: #3366CC;">'fast'</span><span style="color: #339933;">,</span>
color<span style="color: #339933;">:</span><span style="color: #3366CC;">'red'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Una configurazione classica consiste in un oggetto le cui proprietà sono utilizzate dalla logica interna al plugin stesso per personalizzare le funzionalità erogate secondo diverse esigenze.</p>
<p>L&#8217;utilizzo di un oggetto di configurazione fa nascere alcune problematiche di organizzazione del codice quali:</p>
<ul>
<li>necessità di applicare dei <strong>valori di default</strong> per opzioni non rese esplicite</li>
<li>necessità di <strong>passare l&#8217;oggetto di configurazione</strong> alla funzione <em>__loop()</em></li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">fn</span>.<span style="color: #660066;">customPlugin</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Proprietà di configurazione interna.</span>
  <span style="color: #003366; font-weight: bold;">var</span> cfg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Estendo la proprietà di configurazione con l'oggetto di</span>
  <span style="color: #006600; font-style: italic;">// configurazione contenuto nel primo parametro del plugin.</span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>arguments.<span style="color: #660066;">length</span> <span style="color: #339933;">||</span> $.<span style="color: #660066;">isPlainObject</span><span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    cfg <span style="color: #339933;">=</span> $.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>
      color<span style="color: #339933;">:</span> <span style="color: #3366CC;">'black'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Applico la logica agli elementi del contesto (DOM)</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> __loop.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> cfg <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Mantengo la possibilità di concatenare plugins.</span>
  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Come prima cosa si noti l&#8217;aggiunta di una proprietà locale al plugin <strong>cfg</strong> la quale è instanziata a <em>false</em> e successivamente estesa da un oggetto contenente la <strong>configurazione di default</strong> del plugin stesso. (riga <em>#3</em> -&gt; <em>#13</em>)</p>
<p>La configurazione è contenuta nel primo parametro tra quelli passati al plugin, inoltre il valore di <em>cfg</em> viene modificato <strong>solamente se tale parametro è un oggetto</strong>. Questo condizionale è la base di una semplice tecnica per utilizzare il medesimo plugin con <strong>tipi di input differenti</strong> come avviene in quasi tutti i widget di jQuery UI.</p>
<pre>$('#foo').dialog({ .. config .. }).dialog('open');</pre>
<h2>Utilizziamo le Closures:</h2>
<p>Anche la riga <em>#16</em> è cambiata: abbiamo dovuto aggiungere una <strong>closure</strong> per consentire il passaggio della configurazione alla funzione locale <em>__loop()</em>.</p>
<p>L&#8217;utilizzo della <em>closure</em> è un <strong>compromesso di ottimizzazione</strong>.</p>
<p>Cerchiamo di isolare tutta la logica possibile in una funzione esterna che verrà invocata con parametri diversi dal codice interno alla closure. La closure verrà invece creata per ogni elemento DOM del contesto causando un leggero spreco di memoria.</p>
<p><strong>Mantenere essenziale il codice delle <em>closure</em> demandando tutta la logica a funzioni esterne è importantissimo per garantire buone performance al nostro codice!</strong></p>
<h2>Rispondere a diversi tipi di input:</h2>
<p>Abbiamo accennato a jQueryUI ed a come metta a disposizione una serie di widget la cui caratteristica comune è <strong>erogare comportamenti diversi in base a tipi di chiamate diverse:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">/**
   * Logic methods
   */</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> __loop <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> cfg <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'customPlugin'</span><span style="color: #339933;">,</span> cfg <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> __colorize <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> cfg <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'customPlugin'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'background-color'</span><span style="color: #339933;">,</span> cfg.<span style="color: #660066;">color</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">/**
   * Plugin - Estensione jQuery
   */</span>
  $.<span style="color: #660066;">fn</span>.<span style="color: #660066;">customPlugin</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Proprietà di configurazione interna.</span>
    <span style="color: #003366; font-weight: bold;">var</span> cfg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Estendo la proprietà di configurazione con l'oggetto di</span>
    <span style="color: #006600; font-style: italic;">// configurazione contenuto nel primo parametro del plugin.</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>arguments.<span style="color: #660066;">length</span> <span style="color: #339933;">||</span> $.<span style="color: #660066;">isPlainObject</span><span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
      cfg <span style="color: #339933;">=</span> $.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><span style="color: #009900;">&#123;</span>
        color<span style="color: #339933;">:</span> <span style="color: #3366CC;">'black'</span>
      <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Inizializzazione Plugin:</span>
    <span style="color: #006600; font-style: italic;">// Applico la logica agli elementi del contesto (DOM)</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> cfg <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">false</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> __loop.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> cfg <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Azioni su plugin intanziato:</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> arguments.<span style="color: #660066;">length</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
      <span style="color: #000066; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span> arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'colorize'</span><span style="color: #339933;">:</span>
          $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> __colorize.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Mantengo la possibilità di concatenare plugins.</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// EndOf: &quot;customPlugin()&quot; ###</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/**
 * Codice eseguito al caricamento della pagina
 */</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Inizializzazione del plugin</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">customPlugin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    color<span style="color: #339933;">:</span><span style="color: #3366CC;">'red'</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #006600; font-style: italic;">// Esempio di utilizzo delle azioni del plugin</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">customPlugin</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'colorize'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>In questo esempio applichiamo il nostro plugin a tutti paragrafi (p) del documento (riga <em>#69</em>). Questa operazione andrà ad attivare il metodo locale <em>__loop()</em> la cui logica è salvare la configurazione del plugin all&#8217;interno del DOM del nodo interessato.</p>
<p>Successivamente sfruttiamo il click su di un bottone per invocare il metodo &#8220;colorize&#8221; del plugin stesso. In questo caso entra in scena il metodo local <em>__colorize()</em>. Questo è reso possibile dal controllo sul <strong>tipo di dato</strong> effettuato sul <strong>primo parametro</strong> passato al plugin. Rispettivamente in riga <em>#30</em> e poi in riga <em>#46</em>.</p>
<p>Seguendo la struttura esposta nell&#8217;articolo il codice del plugin è diviso in due macro sezioni: un <strong>&#8220;router&#8221; di azioni</strong> ed un certo numero di <strong>metodi interni</strong>.</p>
<p>Il <strong>router</strong> è gestito nella funzione che estende jQuery. Controlla il tipo di input e si occupa di stabile che<strong> tipo di azione</strong> è richiesta.</p>
<p>I <strong>metodi interni</strong> si occupano di dar seguito alla decisione del router e devono &#8220;fare la magia&#8221;. Solitamente i metodi interni sono invocati per ogni elemento DOM identificato dal contesto del plugin come nei precedenti esempi.</p>
<p><strong>Il passo successivo è massimizzare l&#8217;ottimizzazione dei metodi interni!</strong></p>
<h2>Ottimizzare con le Variabili Cache:</h2>
<p>Ogni metodo locale di logica riceve come <em>contesto</em> il riferimento ad un preciso nodo DOM facente parte dell&#8217;xPath su cui è stato lanciato il plugin. Nel nostro esempio significa che il codice <em>$(this)</em> all&#8217;interno dei metodi <em>__loop()</em> o <em>__colorize()</em> è il riferimento ad un singolo paragrafo.</p>
<p>Sempre all&#8217;interno di questi metodi potremo aver bisogno di effettuare nuove ricerche su nodi:</p>
<pre>$(this).find('strong')</pre>
<p>a cui applicare vari metodi jQuery oppure altri plugin a cascata.</p>
<p>Ogni volta che si utilizza jQuery per effettuare una ricerca viene impegnata memoria e CPU. Noi possiamo agire e salvare i risultati di una query in una variabile locale così da alleggerire il carico del computer client. Vediamo il codice di <em>__colorize()</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> __colorize <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> $this <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> cfg <span style="color: #339933;">=</span> $this.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'customPlugin'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  $this.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'background-color'</span><span style="color: #339933;">,</span> cfg.<span style="color: #660066;">color</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>In riga <em>#2</em> viene creata la variabile locale <strong>$this</strong> con riferimento al nodo DOM.<br />
Nelle righe <em>#4</em> e <em>#6</em> riutilizziamo questa variabile per applicare metodi jQuery.</p>
<p>Questo è ovviamente un esempio banale ma possiamo immaginare l&#8217;impatto positivo di questo accorgimento quando la logica comincia a complicarsi un po&#8217;!</p>
<h2>Conclusioni:</h2>
<p>In questo articolo abbiamo raccolto le basi per la costruzione di un plugin jQuery versatile e prestazionale.</p>
<p>Grazie a questa struttura <strong>diventa semplice realizzare strumenti complessi</strong> che contengano configurazione e azioni.</p>
<p>Nel prossimo articolo studiamo in dettaglio alcune linee guida utili alla <strong>realizzazione di un &#8220;widget&#8221;</strong> ovvero un plugin complesso che mette a disposizione un <strong>controllo di interfaccia facilmente riutilizzabile</strong> in progetti differenti.</p>
<p>Al momento in cui scrivo il progetto di &#8220;widget collection&#8221; jQuery più affermato è sicuramente jQueryUI il quale mette a disposizione controlli di interfaccia evoluti quali <em>dialog window</em>, <em>date picker</em>, <em>sortable list</em>, etc.</p>
<p>Noi impareremo a creare componenti &#8220;custom&#8221; il cui utilizzo sia però ispirato alle linee guida di jQueryUI, fino ad arrivare alla creazione di nuovi widget completamente compatibili con jQueryUI e le sue linee guida.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;title=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;title=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;title=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;title=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;title=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Struttura+di+un+plugin+jQuery+@+http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2012%2F01%2Fstruttura-di-un-plugin-jquery%2F&amp;t=Struttura+di+un+plugin+jQuery" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2012/01/struttura-di-un-plugin-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery ImagesLoaded Plugin</title>
		<link>http://www.consulenza-web.com/2011/11/jquery-imagesloaded-plugin/</link>
		<comments>http://www.consulenza-web.com/2011/11/jquery-imagesloaded-plugin/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 16:20:19 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[complete]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ready]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=490</guid>
		<description><![CDATA[Questo https://github.com/thepeg/ImagesLoaded lancia una funzione di callback quando tutte le immagini del target sono state caricate con successo. $('#target').imagesLoaded(function(){   alert("All images in #target were loaded!"); }); E&#8217; anche possibile gestire una configurazione più dettagliata impostando callback di successo e di errore, quest&#8217;ultima lanciata nel caso una o più immagini non siano correttamente caricate nel [...]]]></description>
			<content:encoded><![CDATA[<p>Questo https://github.com/thepeg/ImagesLoaded lancia una funzione di callback quando tutte le immagini del target sono state caricate con successo.</p>
<pre>$('#target').imagesLoaded(function(){
  alert("All images in #target were loaded!");
});</pre>
<p>E&#8217; anche possibile gestire una configurazione più dettagliata impostando <strong>callback di successo e di errore</strong>, quest&#8217;ultima lanciata nel caso una o più immagini non siano correttamente caricate nel <strong>tempo di timeout impostato</strong>:</p>
<pre>$('#target').imagesLoaded({
  success: function(){ alert('Ok!'); },
  error: function() { alert('Ko!')); },
  timeout: 1000,
});</pre>
<p>Nel precedente codice di esempio è <strong>impostato il timeout</strong> ovvero il <strong>tempo massimo di durata del controllo</strong> e le <strong>callback personalizzate</strong> in caso di successo o di fallimento del controllo. Le funzioni di callback ricevono come contesto il riferimento a $(&#8216;#target&#8217;);</p>
<h3>Fork on GitHub!</h3>
<p><a title="Fork ImagesLoaded on GitHub!" href="https://github.com/thepeg/ImagesLoaded" class="aga aga_31" target="_blank">https://github.com/thepeg/ImagesLoaded</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;title=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;title=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;title=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;title=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;title=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+jQuery+ImagesLoaded+Plugin+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-imagesloaded-plugin%2F&amp;t=jQuery+ImagesLoaded+Plugin" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/11/jquery-imagesloaded-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>respond.js bug &#8211; supporto css3 media query IE8, IE7, IE6</title>
		<link>http://www.consulenza-web.com/2011/11/respond-js-bug/</link>
		<comments>http://www.consulenza-web.com/2011/11/respond-js-bug/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 10:24:41 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[tip & tricks]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[design responsivo]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[ie7]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[media query]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=483</guid>
		<description><![CDATA[Stamattina ho perso non poco tempo nel debugging di un progetto web in cui ho utilizzato delle semplici tecniche di layout responsivo con le CSS3 Media Query. Ovviamente il problema è relativo a Internet Explorer nelle sue più nobili versioni: IE6, IE7 e IE8! L&#8217;argomento: Queste versioni di Internet Explorer non supportano le Media Query [...]]]></description>
			<content:encoded><![CDATA[<p>Stamattina ho perso non poco tempo nel debugging di un progetto web in cui ho utilizzato delle semplici tecniche di <a title="web design responsivo con le css3 media query" href="http://www.consulenza-web.com/2011/07/compromesso-vincente/"  target="_blank">layout responsivo con le CSS3 Media Query</a>.<br />
Ovviamente <strong>il problema è relativo a Internet Explorer</strong> nelle sue più nobili versioni: IE6, IE7 e IE8!<span id="more-483"></span></p>
<h2>L&#8217;argomento:</h2>
<p>Queste versioni di Internet Explorer non supportano le Media Query (nè HTML5&#8230; anzi, non supportano nulla!) ma fortunatamente esistono delle librerie che &#8211; via javascript &#8211; risolvono il problema.</p>
<ul>
<li><a title="CSS3 Media Query su Google Code" href="http://code.google.com/p/css3-mediaqueries-js/" class="aga aga_34" target="_blank">css3-mediaqueries-js</a> - supporto esteso alle media query CSS3</li>
<li><a title="CSS3 Media Query by Filament Group" href="http://filamentgroup.com/lab/respondjs_fast_css3_media_queries_for_internet_explorer_6_8_and_more/" class="aga aga_35" target="_blank">respond.js</a> &#8211; supporto ottimizzato alle media query CSS3 per il &#8220;mobile first&#8221; responsive design</li>
</ul>
<p>Io utilizzo <strong>respond.js</strong> perchè mi interessa solamente intercettare le dimensioni dello schermo ed agire di conseguenza sulla presentazione della pagina web ed è proprio su questa libreria che si concentra l&#8217;errore segnalato in questo post.</p>
<h2>L&#8217;errore:</h2>
<p>Questa libreria va in errore quando il foglio di stile contiene delle <strong>regole vuote</strong>:</p>
<pre>body {}</pre>
<h2>La soluzione:</h2>
<p>La semplicissima soluzione consiste nell&#8217;<strong>inserire almeno uno spazio</strong> all&#8217;interno delle parentesi graffe:</p>
<pre>body { }</pre>
<h2>Conclusioni:</h2>
<p>Molti di voi sostengono &#8211; a ragione &#8211; che questo tipo di istruzioni non dovrebbero esistere in un foglio di stile in quanto sono un semplice spreco di spazio e di tempo di caricamento. Sono pienamente d&#8217;accordo!</p>
<p>Tuttavia <strong>in piena fase di sviluppo</strong> molti sviluppatori usano scrivere il set completo di &#8220;css handler&#8221; per definire le regole interne in un secondo momento. In questo caso &#8211; in progettazione &#8211; questo bug può far perdere tempo prezioso e la soluzione proposta in <strong>questo articolo diventa utilissima</strong>!</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;title=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;title=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;title=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;title=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;title=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Frespond-js-bug%2F&amp;t=respond.js+bug+%26%238211%3B+supporto+css3+media+query+IE8%2C+IE7%2C+IE6" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/11/respond-js-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Auto FancyBOX Plugin</title>
		<link>http://www.consulenza-web.com/2011/11/jquery-auto-fancybox-plugin/</link>
		<comments>http://www.consulenza-web.com/2011/11/jquery-auto-fancybox-plugin/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 14:17:14 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[attribute]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[data-]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[facilities]]></category>
		<category><![CDATA[fancybox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=476</guid>
		<description><![CDATA[Questo plugin permette di applicare il plugin FancyBOX a elementi della pagina configurandone il comportamento direttamente dagli attributi stessi dell&#8217;elemento. E&#8217; molto più semplice utilizzare FancyBOX in questo modo perchè non c&#8217;è bisogno di complicate configurazioni Javascript: solo 1 riga di codice! Source code on GitHub! https://github.com/thepeg/AutoFancybox Di seguito un esempio di codice Javascript di [...]]]></description>
			<content:encoded><![CDATA[<p>Questo plugin permette di applicare il <a title="jQuery FancyBOX Plugin" href="http://fancybox.net/" class="aga aga_38" target="_blank">plugin FancyBOX</a> a elementi della pagina configurandone il comportamento direttamente dagli attributi stessi dell&#8217;elemento.<br />
E&#8217; <strong>molto più semplice utilizzare FancyBOX</strong> in questo modo perchè non c&#8217;è bisogno di complicate configurazioni Javascript: <strong>solo 1 riga di codice</strong>!</p>
<p style="text-align: center;"><a title="Fork me on GitHub" href="https://github.com/thepeg/AutoFancybox" target="_blank">Source code on GitHub!<br />
<span style="font-size: 0.8em;">https://github.com/thepeg/AutoFancybox</span></a></p>
<p><span id="more-476"></span></p>
<p>Di seguito un esempio di codice Javascript di inizializzazione (1 riga!) ed un esempio di HTML che permette di lanciare un IFRAME in lightbox.</p>
<pre>// Document onReady()
$('.auto-fancybox').autoFancybox();

&lt;!-- Inside your document --&gt;
&lt;a href="http://goo.gl/VgLDo" title="Lavora con me!"
  class="auto-fancybox"
  data-type="iframe"
  data-width="90%"
  data-height="90%"
&gt;Lavora con me!&lt;/a&gt;</pre>
<h2>Opzioni Supportate</h2>
<p>Il plugin supporta quasi tutte le opzioni ufficiali di FancyBOX. Trattandosi di attributi HTML5 i nomi sono scritti completamente in minuscolo quindi l&#8217;opzione di configurazione &#8220;showTitle&#8221; diventa l&#8217;attributo &#8220;data-showtitle&#8221;.</p>
<ul>
<li>padding</li>
<li>margin</li>
<li>opacity</li>
<li>modal</li>
<li>cyclic</li>
<li>scrolling</li>
<li>width</li>
<li>height</li>
<li>autoscale</li>
<li>autodimensions</li>
<li>centeronscroll</li>
<li>ajax</li>
<li>swf</li>
<li>hideonoverlayclick</li>
<li>hideoncontentclick</li>
<li>overlayshow</li>
<li>overlayopacity</li>
<li>overlaycolor</li>
<li>titleshow</li>
<li>titleposition</li>
<li>titleformat</li>
<li>transitionin</li>
<li>transitionout</li>
<li>speedin</li>
<li>speedout</li>
<li>changespeed</li>
<li>changefade</li>
<li>easingin</li>
<li>easingout</li>
<li>showclosebutton</li>
<li>shownavarrows</li>
<li>enableescapebutton</li>
<li>type</li>
<li>href</li>
<li>title</li>
<li>content</li>
<li>index</li>
</ul>
<div>Per la documentazione di tutte queste opzioni di configurazione rimando alla <a title="FancyBOX API" href="http://fancybox.net/api" class="aga aga_39" target="_blank">documentazione ufficiale</a>.</div>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;title=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;title=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;title=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;title=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;title=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+jQuery+Auto+FancyBOX+Plugin+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F11%2Fjquery-auto-fancybox-plugin%2F&amp;t=jQuery+Auto+FancyBOX+Plugin" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/11/jquery-auto-fancybox-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IVApp &#8211; calcola e storna l&#8217;IVA su iPhone, iPad, Android, Blackberry</title>
		<link>http://www.consulenza-web.com/2011/10/ivapp/</link>
		<comments>http://www.consulenza-web.com/2011/10/ivapp/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 06:00:17 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[sencha touch]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=470</guid>
		<description><![CDATA[Questa è la mia prima applicazione mobile. Una semplice utility webapp utilizzabile da iPhone, iPad, iPod Touch, Android, Blackberry, Safari e Chrome. Clicca questo link con il tuo iPhone, iPad, Android o Blackberry Touch: (puoi visualizzare l&#8217;applicazione sul tuo computer utilizzando Safari o Google Chrome!) http://ivapp.movableapp.com Presentazione completa: http://movableapp.com/ivapp Brevi Info: L&#8217;applicazione è scritta in [...]]]></description>
			<content:encoded><![CDATA[<p>Questa è la mia prima applicazione mobile.<br />
Una semplice utility <strong>webapp</strong> utilizzabile da iPhone, iPad, iPod Touch, Android, Blackberry, Safari e Chrome.</p>
<p>Clicca questo link con il tuo iPhone, iPad, Android o Blackberry Touch:<br />
<span style="font-size: 0.8em; color: #666;">(puoi visualizzare l&#8217;applicazione sul tuo computer utilizzando Safari o Google Chrome!)</span><br />
<a title="IVApp" href="http://ivapp.movableapp.com" class="aga aga_45" target="_blank">http://ivapp.movableapp.com</a></p>
<p>Presentazione completa:<br />
<a title="IVApp iPhone, iPad, Android" href="http://movableapp.com/ivapp" class="aga aga_46" target="_blank">http://movableapp.com/ivapp</a></p>
<p><iframe src="http://www.youtube.com/embed/jySEUJ1LmCU" frameborder="0" width="480" height="360"></iframe></p>
<h2>Brevi Info:</h2>
<p>L&#8217;applicazione è scritta in HTML5 + Javascript utilizzando il framework <a title="Sencha Touch Mobile Javascript Framework" href="http://www.sencha.com/" class="aga aga_47" target="_blank">Sencha Touch</a>.</p>
<p>Durante il prossimo weekend proverò a creare un pacchetto per l&#8217;AppStore utilizzando <a title="PhoneGap" href="http://www.phonegap.com/" class="aga aga_48" target="_blank">PhoneGap</a>&#8230; vediamo se me la pubblicano!</p>
<p>Il resto lo puoi leggere su:<br />
<a title="IVApp iPhone, iPad, Android" href="http://movableapp.com/ivapp" class="aga aga_49" target="_blank">http://movableapp.com/ivapp</a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;title=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;title=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;title=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;title=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;title=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fivapp%2F&amp;t=IVApp+%26%238211%3B+calcola+e+storna+l%26%238217%3BIVA+su+iPhone%2C+iPad%2C+Android%2C+Blackberry" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/10/ivapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone: App Native, WebApp o sviluppo ibrido?</title>
		<link>http://www.consulenza-web.com/2011/10/iphone-native-web-app/</link>
		<comments>http://www.consulenza-web.com/2011/10/iphone-native-web-app/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 06:00:55 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Sviluppo]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[jquery mobile]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[sencha touch]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=466</guid>
		<description><![CDATA[Da qualche settimana ho iniziato a dilettarmi nell sviluppo di applicazioni mobile per il mio iPhone/iPad. Inizialmente ho letto parecchie discussioni sull&#8217;argomento in oggetto: &#8220;native VS webapp&#8221; e in questo articolo vorrei sintetizzare alcune mie valutazioni. Potendo dedicare allo studio delle applicazioni mobile solamente poche ore la sera ho subito approciato il mondo delle WebApp [...]]]></description>
			<content:encoded><![CDATA[<p>Da qualche settimana ho iniziato a dilettarmi nell sviluppo di applicazioni mobile per il mio iPhone/iPad.</p>
<p>Inizialmente ho letto parecchie discussioni sull&#8217;argomento in oggetto: &#8220;<strong>native VS webapp</strong>&#8221; e in questo articolo vorrei sintetizzare alcune mie valutazioni.</p>
<p>Potendo dedicare allo studio delle applicazioni mobile solamente poche ore la sera ho subito approciato il mondo delle WebApp perchè mi consentono di sfruttare competenze preesistenti: HTML5, Javascript, CSS.</p>
<h2>WebApp</h2>
<p>Per il primissimo approccio ho utilizzato <a title="jQuery Mobile" href="http://jquerymobile.com/" class="aga aga_55" target="_blank">jQuery Mobile</a> con il quale ho realizzato una semplicissima photogallery la cui <a title="Web design responsivo / adattivo" href="http://www.consulenza-web.com/2011/07/compromesso-vincente/"  target="_blank">interfaccia responsiva</a> si adatta al dispositivo che la richiede: se usi un computer vedrai una pagina web con effetto lightbox mentre se usi un iPhone, Android, iPad vedrai un&#8217;interfaccia simile a quelle native.<br />
Inoltre il passaggio tra le immagini è gestito dal touch e non dal click. [<a title="esempio photogallery con interfaccia responsiva" href="http://www.bertoliniarte.it/en/photogallery/" class="aga aga_56" target="_blank">vedi esempio</a>].</p>
<p>Successivamente mi sono dedicato a <a title="Sencha Touch Mobile Framework" href="http://www.sencha.com/products/touch/" class="aga aga_57" target="_blank">SenchaTouch</a>, un prodotto veramente incredibile e completo ma dotato di scarsa documentazione libera: l&#8217;azienda che lo produce campa vendendo formazione!<br />
Attualmente mi sto dedicando allo studio di questo prodotto e ho aperto un <a title="Sencha Touch Developer, Sencha Touch Web App" href="http://movableapp.com" class="aga aga_58" target="_blank">piccolo blog</a> dedicato dove pubblico i miei &#8220;appunti di viaggio&#8221; su piccole e grandi cose che scopro sull&#8217;argomento.</p>
<p><strong>Principali vantaggi di un&#8217;applicazione web based:</strong></p>
<ul>
<li>sviluppo su tecnologie open: html, javascript, css</li>
<li>sviluppo su browser web: safari, chrome</li>
<li>deploy dell&#8217;applicazione su server FTP</li>
<li>installazione semplice: basta collegarsi all&#8217;indirizzo dell&#8217;app</li>
<li>possibilità di funzionamento off-line (in assenza di connettività)</li>
<li>compatibilità semplificata con Android, Blackberry</li>
</ul>
<h2>Applicazione Nativa</h2>
<p>Lo studio di applicazioni native l&#8217;ho approciato <a title="concatenare stringhe in objective-c" href="http://www.consulenza-web.com/2009/10/concatenare-stringhe-in-objective-c/"  target="_blank">qualche tempo fa</a> scontrandomi subito con la pessima sintassi del linguaggio ObjectiveC.</p>
<p>Sostanzialmente i framework (volutamente al plurale) di sviluppo su cui si basano le applicazioni native sono incredibili collezioni di oggetti e componenti pronti da utilizzare e configurare.</p>
<p>L&#8217;applicazione risulta così una composizione creativa di oggetti mentre la realizzazione di componenti ex-novo è tutt&#8217;altra cosa.</p>
<p>In linea di massima ritengo che per chi proviene dal mondo web <strong>la curva di apprendimento sia piuttosto lunga</strong> rispetto all&#8217;applicazione web based a parità di obiettivo.</p>
<p><strong>Principali vantaggio di un&#8217;applicazione nativa:</strong></p>
<ul>
<li>AppStore: visibilità, diffusione, guadagno</li>
<li>prestazioni decisamente superiori</li>
<li>accesso all&#8217;hardware: fotocamera, file system, accelerometro, etc</li>
<li>funzionamento off-line nativo</li>
</ul>
<h2>Applicazione Ibrida con PhoneGap!</h2>
<p>Una possibilità di congiungere le due diverse soluzioni in un compromesso che possa <strong>sfruttare i relativi vantaggi</strong> è l&#8217;<strong>applicazione ibrida web/nativa</strong>. Questa soluzione si può ottenere con <a title="PhoneGap Project" href="http://www.phonegap.com/" class="aga aga_59" target="_blank">PhoneGap</a>.</p>
<p>L&#8217;applicazione ibrida è un wrapper che consente il funzionamento dell&#8217;applicazione web. <strong>Una sorta di piccolo browser preconfezionato</strong>.</p>
<p>Solo questo punto rende possibile distribuire l&#8217;applicazione su AppStore consentendo dunque il funzionamento off-line nativo!</p>
<p>Cataloghi, manuali, reference, schede tecniche sono esempi di applicazioni che trovano in questa soluzione la miglior soluzione possibile: <strong>velocità di sviluppo abbinata a capacità di distribuzione su AppStore!</strong></p>
<p>PhoneGap mette anche a disposizione delle API Javascript per poter <strong>accedere a funzionalità avanzate del dispositivo</strong> quali:</p>
<ul>
<li>file system</li>
<li>fotocamera</li>
<li>libreria media</li>
<li>accelerometro</li>
<li>bussola</li>
<li>contatti</li>
<li>geolocalizzazione</li>
<li>connettività</li>
<li>notifiche</li>
<li>storage db</li>
</ul>
<p>Con questo sistema sono riuscito, nell&#8217;arco di una giornata, a realizzare il prototipo di un&#8217;applicazione che mantiene sincronizzati sul device (in questo caso un&#8217;iPad) una serie di files (pdf) pubblicati su di un server FTP remoto. Una sorta di client Dropbox ma mooolto più semplice.</p>
<p>In conclusione presumo che proseguirò sulla strada dell&#8217;applicazione ibrida perchè rappresenta un punto di giunzione tra le due diverse filosofie di sviluppo. <strong>Inoltre offre un sistema piuttosto semplice per realizzare applicazioni compatibili con più dispositivi</strong>!</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;title=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;title=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;title=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;title=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;title=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F10%2Fiphone-native-web-app%2F&amp;t=iPhone%3A+App+Native%2C+WebApp+o+sviluppo+ibrido%3F" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/10/iphone-native-web-app/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trentino Holiday 2011 è una pessima applicazione!</title>
		<link>http://www.consulenza-web.com/2011/09/trentino-holiday-recensione/</link>
		<comments>http://www.consulenza-web.com/2011/09/trentino-holiday-recensione/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 05:30:20 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[Usabilità]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[contenuti]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[editoria]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[organizzazione contenuti]]></category>
		<category><![CDATA[progetto editoriale]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=430</guid>
		<description><![CDATA[Da anni trascorro le ferie estive in trentino e quando posso cerco anche di passarci i weekend in montagna e/o centro benessere. Stamattina ho scaricato l&#8217;app Trentino Holiday 2011 aspettandomi, come da descrizione, uno strumento utile per scoprire nuovi luoghi e possibilità offerte dalla regione. Scarico, installo, avvio e&#8230; scopro con immensa delusione che l&#8217;applicazione [...]]]></description>
			<content:encoded><![CDATA[<p>Da anni trascorro le ferie estive in trentino e quando posso cerco anche di passarci i weekend in montagna e/o centro benessere.<br />
Stamattina ho scaricato l&#8217;app <a title="Link Trentino Holiday 2011 in AppStore (inutile!!!)" href="http://itunes.apple.com/it/app/trentino-holidays-catalogo/id433873623?mt=8" class="aga aga_62" target="_blank">Trentino Holiday 2011</a> aspettandomi, come da descrizione, uno strumento utile per scoprire nuovi luoghi e possibilità offerte dalla regione.</p>
<p>Scarico, installo, avvio e&#8230; scopro con <strong>immensa delusione</strong> che l&#8217;applicazione non è altro che una lunga e pesante serie di immagini inserite in un carosello! Niente più di un pdf o di un eBook&#8230; semmai <strong>con notevoli funzioni in meno</strong> perchè non è possibile inserire segnalibri o condividere i contenuti!<span id="more-430"></span></p>
<p><img class="alignnone size-full wp-image-436" title="Trentino Holiday Splash Screen" src="http://www.consulenza-web.com/wp-content/uploads/2011/09/trentino_holiday_start.jpg" alt="" width="166" height="248" /> <img class="size-full wp-image-431 alignnone" title="Trentino Holiday Funzioni" src="http://www.consulenza-web.com/wp-content/uploads/2011/09/trentino_holiday_internal.jpg" alt="" width="166" height="248" /> <a href="http://www.consulenza-web.com/wp-content/uploads/2011/09/trentino_holiday_app_info.jpg" ><img class="alignnone size-full wp-image-445" title="trentino_holiday_app_info" src="http://www.consulenza-web.com/wp-content/uploads/2011/09/trentino_holiday_app_info.jpg" alt="" width="166" height="248" /></a></p>
<h2>Che valore aggiunto da questa App?</h2>
<p>Le schede contenute nell&#8217;App sono delle semplici immagini: scansioni di una brochure o di un libretto!<br />
Ovviamente i contenuti ci sono, ma sono di difficile lettura.</p>
<p>Le schermate accorpano una o più scansioni di pagine del catalogo cartaceo ed è necessario applicare lo zoom anche per leggere i titoli!<br />
Sono sicuro che sull&#8217;iPad il problema è leggermente meno pesante grazie alle maggiori dimensioni dello schermo ma ciò non giustifica un prodotto simile!</p>
<h2>Linee guida di pubblicazione sull&#8217;AppStore:</h2>
<p>L&#8217;AppStore è l&#8217;ambiente di distribuzione delle applicazioni per iPod, iPhone e iPad.<br />
<span style="text-decoration: underline;">Le applicazioni qui presenti dovrebbero essere soggette a stretti controlli di qualità</span> tra i quali cito:</p>
<p><a href="http://www.consulenza-web.com/wp-content/uploads/2011/09/App-Store-Review-Guidelines-App-Store-Resource-Center.jpg" ><img class="alignnone size-full wp-image-451" title="App Store Review Guidelines - App Store Resource Center" src="http://www.consulenza-web.com/wp-content/uploads/2011/09/App-Store-Review-Guidelines-App-Store-Resource-Center.jpg" alt="" width="701" height="52" /></a><a title="Apple Store Review Guidelines" href="https://developer.apple.com/appstore/resources/approval/guidelines.html" class="aga aga_63" target="_blank">https://developer.apple.com/appstore/resources/approval/guidelines.html</a></p>
<p>L&#8217;applicazione Trentino Holiday 2011 è chiaramente frutto di una semplice scansione di una versione cartacea dei medesimi contenuti e come tale dovrebbe essere distribuita come eBook e non come App!</p>
<h2>Quali accorgimenti adottare per migliorare il risultato?</h2>
<p>Il passaggio da rivista cartacea ad applicazione (nativa/web/sito/eBook) deve inevitabilmente passare attraverso una fase di discussione e riorganizzazione dei contenuti.</p>
<p>Lo strumento &#8220;<strong>carta</strong>&#8221; consente di <strong>sfogliare</strong> mentre lo strumento &#8220;<strong>computer</strong>&#8221; consente di <strong>navigare</strong>.<br />
Sono sistemi di accesso alle informazioni estremamente diversi ed <span style="text-decoration: underline;">è importante che l&#8217;utente riceva ciò che si aspetta di ottenere</span>!</p>
<h3>Utilizzo della rivista cartacea:</h3>
<p>La rivista cartacea ha un accesso principale di tipo sequenziale: parto da pagina 1 e arrivo a pagina x. La maggior parte delle riviste mette a disposizione un indice per un accesso diretto alle informazioni. L&#8217;indice analitico dei contenuti è un metodo di accesso secondario nella rivista cartacea!</p>
<h3>Utilizzo della rivista digitale:</h3>
<p>Il computer ci ha abituati al &#8220;point and click&#8221; ovvero alla <strong>selezione di oggetti di interesse</strong>. Quando ci troviamo davanti al desktop siamo abituati a cliccare direttamente su di un&#8217;icona piuttosto che scorrere l&#8217;elenco delle icone disponibili fino a trovare l&#8217;opzione desiderata.<br />
<strong>Nel computer l&#8217;accesso diretto ai contenuti è primario</strong>.</p>
<p>Dovrebbe quindi essere chiaro come gli articoli (anche le sezioni degli articoli) di una rivista dovrebbero essere <strong>riorganizzati in &#8220;schede&#8221;</strong>: piccoli nuclei di contenuto <strong>messi in relazione</strong> con altri nuclei <strong>tramite i collegamenti</strong>.</p>
<p>L&#8217;applicazione deve dunque mettere a disposizione un <strong>sistema di navigazione predeterminata</strong> per il raggiungimento di una determinata scheda.<br />
Intendo la definizione di <span style="text-decoration: underline;">menu e sottomenu che permettano all&#8217;utente di operare una semplice ricerca tramite la selezione progressiva di opzioni semplici</span>.</p>
<p>Il concetto di &#8220;<strong>opzione semplice</strong>&#8221; è vitale al successo dell&#8217;applicazione mobile (iPhone/iPad). Su questo tipo di dispositivi l&#8217;utente non vuole utilizzare la tastiera per effettuare una ricerca a parole chiave bensì <strong>utilizzare le dita per navigare</strong> attraverso un sistema di filtro progressivo il quale aiuta ad identificare un numero sempre più circoscritto di &#8220;schede&#8221; tra cui scegliere la propria lettura.</p>
<h3>Contenuti Aumentati:</h3>
<p>Un&#8217;altro accorgimento utile nella realizzazione di un&#8217;App per riviste o cataloghi è l&#8217;<strong>inserimento di azioni utente</strong> sulle schede di contenuti.</p>
<p>L&#8217;ida di base è che <strong>l&#8217;utente non si limita a leggere i contenuti sull&#8217;iPhone ma li vuole condividere, segnalare, commentare, esportare</strong> etc.</p>
<p>Operazioni quali &#8220;invia ad un amico&#8221;, &#8220;condividi su facebook&#8221;, &#8220;aggiungi a preferiti&#8221; o simili diventano armi importanti per coinvolgere l&#8217;utente nell&#8217;utilizzo dell&#8217;App ed ottenerne così il consenso.</p>
<p>Ovviamente questo richiede l&#8217;esistenza di una struttura web (un sito) parallelo nel quale pubblicare parte dei contenuti delle schede fornendo così i link che possono essere condivisi tra i vari social network.</p>
<h2>Conclusioni</h2>
<p>Lo strumento mobile App è sicuramente potente ed allettante per moltissime realtà editoriali ma bisogna fare molta attenzione a non cadere nel banale pubblicando soluzioni frettolose ed abbozzate come l&#8217;App oggetto di questo articolo.</p>
<p>&nbsp;</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Segnala presso:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;title=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;title=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;title=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;title=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;LinkedIn"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/linkedin.png" title="Add to&nbsp;LinkedIn" alt="Add to&nbsp;LinkedIn" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;title=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21+@+http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fwww.consulenza-web.com%2F2011%2F09%2Ftrentino-holiday-recensione%2F&amp;t=Trentino+Holiday+2011+%C3%A8+una+pessima+applicazione%21" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.consulenza-web.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2011/09/trentino-holiday-recensione/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

