 
 
 <?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>upCreative &#187; css3</title>
	<atom:link href="https://www.upcreative.net/tag/css3/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.upcreative.net</link>
	<description>Web Design, grafica,  web application e content web marketing</description>
	<lastBuildDate>Wed, 10 Apr 2019 12:53:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Creare un app: ne hai veramente bisogno?</title>
		<link>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/</link>
		<comments>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/#comments</comments>
		<pubDate>Thu, 10 Jul 2014 14:12:20 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[creare un app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4070</guid>
		<description><![CDATA[<p>La maggior parte delle applicazioni mobile viene scaricata per poi non essere mai più utilizzata, o addirittura rimossa dal dispositivo appena dopo essere stata lanciata per la prima volta. Ciò è dovuto per la maggior parte dei casi all'inutilità dell'app stessa. Prima di creare un app è bene capire se ne hai effettivamente bisogno.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/">Creare un app: ne hai veramente bisogno?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Ogni anno vengono effettuati <b>miliardi di download </b>di applicazioni mobile da milioni di utenti sparsi per il mondo, ad un punto tale che molti paragonano il creare un app e pubblicarla nei vari stores ad una vera propria miniera d’oro. Ed il numero sta crescendo a dismisura.</p>
<p><img class="alignnone wp-image-4074 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/07/Mobile-app-download.jpg" alt="Mobile app download" width="960" height="684" /></p>
<p style="text-align: center;"><i>La stima dei numero di download di applicazioni mobile nei prossimi anni</i></p>
<p>Tuttavia, se in alcuni casi gli app stores hanno rappresentato (e rappresentano ancora) una grandissima fonte di ricchezza (come <a href="https://itunes.apple.com/it/app/ruzzle/id504265646?mt=8">Ruzzle</a> o <a href="http://it.wikipedia.org/wiki/Flappy_Bird">FlappyBird</a>, tanto per citare le prime app che mi vengono in mente), per ogni app di successo ce ne sono migliaia che non riescono a decollare.</p>
<p>Il fatto è che quando si parla di <strong>creare un app,</strong> puntualmente ci vengono presentati solamente quei progetti che hanno raggiunto la vetta. E tutte quelle applicazioni che al contrario hanno fallito?</p>
<h2>La dura verità: le app che non hanno successo</h2>
<p>In particolare, di tutti i milioni di applicazioni scaricate, <b>solo un piccolissima parte (circa il 5/10%) viene effettivamente utilizzata dopo la prima volta</b>.</p>
<p>Quante volte ti sarà capitato di scaricare un’app nel tuo smartphone o tablet, dargli un’occhiata veloce, per poi non aprirla mai più, o addirittura cancellarla?</p>
<p><img class="alignright wp-image-4073 " src="http://www.upcreative.net/wp-content/uploads/2014/07/aggiornamenti-mobile-app-168x300.jpg" alt="aggiornamenti mobile app" width="185" height="330" /></p>
<p>A seconda dell’utente, la maggior parte delle applicazioni vengono completamente ignorate o cancellate dopo il primo utilizzo.</p>
<p>Il mio iPhone è continuamente colmo di applicazioni di vario tipo, ed ogni giorno mi presenta minimo 50 notifiche di aggiornamenti da effettuare per applicazioni che non ricordo nemmeno di avere.</p>
<p>Così, periodicamente, appena riesco a ritagliarmi un attimo di tempo, mi metto a cancellare tutte quelle app che non mi piacciono o che non utilizzo.</p>
<p>Ma dopo qualche giro di esplorazione su App Store, sono di nuovo al punto di partenza.</p>
<p>E credo che questo sia lo stesso scenario della maggior parte degli utenti che possiedono un dispositivo mobile.</p>
<p>Da cosa dipende?</p>
<p>Semplice: dall’<b>utilità dell’applicazione.</b></p>
<p style="text-align: center;"><b>Prima di perdere tempo con la creazione di un’applicazione, cerca di capire se è effettivamente utile</b></p>
<h2>Verifica l’utilità della tua applicazione</h2>
<p><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/07/utilita-Mobile-app.jpg"><img class="alignright size-full wp-image-4075" src="http://www.upcreative.net/wp-content/uploads/2014/07/utilita-Mobile-app.jpg" alt="utilita Mobile app" width="300" height="510" /></a></p>
<p>Molti vengono a chiederemi delle consulenze per progetti riguardanti applicazioni mobile che risultano veramente inutili, come se si dimenticassero che qualsiasi smartpthone o tablet possiede un browser.</p>
<p>Ora ti chiederai: “<i>cosa c’entra il browser con l’app?</i>”</p>
<p>C’entra eccome.</p>
<p>Uno dei miei clienti (per il quale ho realizzato un <a href="http://yithemes.com/product-tag/ecommerce/">e-commerce con WordPress</a>) sapendo che oltre a siti ed applicazioni web mi occupo anche della realizzazione di mobile app,  qualche tempo fa si era fissato con l’idea di voler creare a tutti i costi un’applicazione mobile che offrisse all’utente tutte le funzionalità dell’e-commerce che gli avevo già sviluppato.</p>
<p><b>Che senso avrebbe avuto realizzare l’applicazione di un’e-commerce già ottimizzato per dispositivi mobile, e quindi già facilmente fruibile da un normale mobile browser?</b></p>
<p>Provai a spiegargli l’inutilità della cosa, ma non mollò la presa, nemmeno dopo avergli mostrato il mio preventivo.</p>
<p>Morale: il cliente finì per spendere alcune migliaia di euro per un’ottima e funzionale applicazione, ma che non venne mai utilizzata da nessuno (dei circa 900 utenti che avevano effettuato il download nell’arco di un anno, non registrammo nemmeno un acquisto da dispositivi mobili).</p>
<p><b>Completo fallimento</b>.</p>
<p>Pensaci bene: prima di metterti a testa bassa e impegnarti nella realizzazione di un’applicazione mobile, cerca di capire quali funzionalità e contenuti deve avere.</p>
<p>Se si tratta di elementi disponibili anche su un normale web browser, allora la verità è che <b>non hai bisogno di un’applicazione mobile</b>, o almeno di un’applicazione da distribuire sui vari stores.</p>
<p>Molte delle funzionalità come la <i>geolocalizzazione</i> o il <i>salvataggio dei dati</i> (leggi <a href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/#more-50357">questo articolo </a>oppure <a href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">questo</a> per saperne di più) possono essere implementate anche in normali siti web.</p>
<p>Una buona soluzione che personalmente adotto molto spesso è quella di creare <b>una versione mobile del sito web</b>, utilizzando delle tecniche per realizzare <a href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile app fluide ed altamente performanti</a>.</p>
<p>In questo modo è possibile creare un’applicazione mobile a tutti gli effetti, ma che sia accessibile anche da un normale browser mobile, e che allo stesso tempo possa essere facilmente trasformata in un’<b>applicazione ibrida, </b>grazie adei tools come <a href="http://phonegap.com/">Phonegap</a> o <a href="http://www.appcelerator.com/titanium/">Titanium</a>.</p>
<p>È la stessa cosa che ha fatto per esempio <i>Financial Times </i>con la <a href="http://apps.ft.com/ftwebapp/index.html">sua applicazione mobile</a>.</p>
<h2>Conclusioni: in base a quali fattori puoi capire se tu o il tuo cliente avete veramente bisogno di un app?</h2>
<p>Per capire se hai veramente bisogno di creare un’applicazione da poter scaricare nei vari stores, i metri di giudizio ai quali dovresti affidarti e su cui focalizzarti sono:</p>
<ol>
<li>posso fornire all’utente le stesse funzionalità con un normale sito web responsive?</li>
<li>quanto tempo, risorse e denaro dovrei impiegare per creare un app e quali per creare un sito web che offra le stesse funzionalità?</li>
<li>qual è lo scopo finale (effettivo) del tuo progetto/lavoro?</li>
<li>quali sono le reali esigenze dell’utente?</li>
</ol>
<p>Più semplicemente, se hai bisogno di offrire un prodotto che deve essere accessibile da diversi tipi di dispositivi (sia da quelli desktop che da quelli quelli mobili) allora la miglior cosa è sicuramente optare per una <b>versione responsive del sito web</b>.</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu sei un web designer come me e vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9bfc178a-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9bfc178a-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/">Creare un app: ne hai veramente bisogno?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</title>
		<link>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/</link>
		<comments>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/#comments</comments>
		<pubDate>Fri, 13 Jun 2014 13:34:03 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[facebook mobile login]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4046</guid>
		<description><![CDATA[<p>Phonegap/Cordova permette di integrare il Facebook mobile login in un'applicazione ibrida realizzata in HTML5, CSS3 e Javascript permettendo l'accesso ai controlli nativi del dispositivo, grazie ad una combinazione del Facebook SDK nativo e di quello Javascript. Tuttavia questo metodo è limitato alle applicazioni che saranno poi compilate sotto forma di app nativa. In questo articolo ti mostro una risorsa alternativa per implementare il login di Facebook in qualsiasi applicazione HTML5.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/">Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nei vari app stores possiamo trovare un numero sempre più grande di <strong>applicazioni che integrano il login di Facebook</strong> al proprio interno per dare la possibilità all&#8217;utente di effettuare l&#8217;accesso molto più comodamente e velocemente, evitando di costringerlo ad iscriversi ad un nuovo servizio, con tutti i rischi che tale operazione comporta (come per esempio perdere una grande fetta di utenti).</p>
<p>Per aggiungere questa funzionalità nei miei progetti da pubblicare come applicazioni ibride (mobile app in HTML5 &#8220;inglobate&#8221; all&#8217;interno di app native), ho sempre utilizzato il plugin Phonegap &#8220;<em><strong><a title="Phongap facebook plugin" href="https://github.com/phonegap/phonegap-facebook-plugin">Phonegap Facebook Plugin</a>&#8220;, </strong></em>che<em><strong> </strong></em>utilizza una combinazione dei &#8220;moduli&#8221; nativo e javascript messi a disposizione dall&#8217;SDK di Facebook.</p>
<p>Grazie al <em>Facebook Plugin di Phonegap</em> è quindi possibile &#8220;manovrare&#8221; il login nativo mediante delle semplici API javascript.</p>
<p>&nbsp;</p>
<p><img class="aligncenter wp-image-4054 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login.jpg" alt="Facebook-mobile-login" width="690" height="400" /></p>
<p>In fondo è proprio questo lo scopo dei plugin per Phonegap, ed anche un dei vantaggi di sviluppare mobile app in HTML5: quello di riuscire ad <strong>accedere alle funzionalità native del dispositivo direttamente da codice Javascript</strong>.</p>
<p>Tuttavia questa strada porta <strong>alcuni svantaggi</strong>, come quello di dover comunque dipendere da un plugin di terze parti, oppure quello di non poter essere utilizzato nel caso in cui non volessimo distribuire la nostra applicazione HTML5-CSS3-Javascript sotto forma di app ibrida (compilandola quindi con strumenti come Xcode o Eclipse), ma volessimo renderla accessibile in remoto, collegandosi semplicemente ad una pagina web (come per esempio hanno fatto <a title="Financial Times mobile app" href="http://apps.ft.com/">Financial Times</a> e <a title="Forecast.io - Meteo HTML5 Mobile App" href="http://forecast.io/">Forecast.io</a> con le loro HTML5 mobile app, vedi immagine seguente).</p>
<p>&nbsp;</p>
<p><img class="aligncenter wp-image-4055 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/HTML5-mobile-apps.jpg" alt="HTML5-mobile-apps" width="690" height="400" /></p>
<p style="text-align: center;"><em>Le applicazioni HTML5 ottimizzate per mobile di Financial Times e Forecast.io</em></p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: una strada alternativa</h2>
<p>In questo articolo ti voglio mostrare una risorsa molto interessante, che ho trovato utilissima  per poter <strong>implementare un Facebook mobile login su di un&#8217;HTML5 mobile app senza necessariamente utilizzare dei tools nativi,</strong> come il plugin per Phonegap sopra citato.</p>
<p>Si tratta di una micro-libreria Javascript realizzata da <a style="font-weight: bold; color: #222222;" href="http://coenraets.org/blog/bio/">Christophe Coenraets</a>, brillante sviluppatore professionista che lavora per <span style="color: #444444;">Salesforce.com (ti consiglio vivamente di seguirlo, se sei interessato a <a title="Html Mobile Accelerato - Come creare un app in HTML5, CSS3 e Javascript" href="http://www.upcreative.net/html-mobile-accelerato/">come creare un app in HTML5, CSS3 e Javascript</a>), il cui lavoro è principalmente focalizzato sullo sviluppo di applicazioni mobile <em>web-based</em> ( quindi <em>single-page-application</em>).</span></p>
<p>La libreria si chiama <strong>OpenFB</strong> e risulta molto utile per poter implementare il Facebook mobile login sulla propria applicazione, senza affidarsi necessariamente a dei componenti nativi.</p>
<p>Coenraets, che avendo la necessità di implementare questa funzionalità in uno dei suoi lavori ha pensato di adattarla in una soluzione standard in modo tale che tutti potessero usufruirne, ha dato la possibilità a chiunque di inserire facilmente il login di Facebook nel proprio progetto.</p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: come si usa la libreria OpenFB</h2>
<p>Utilizzare la libreria si presenta piuttosto semplice, vediamo come funziona:</p>
<p>Semplice Login:</p><pre class="crayon-plain-tag">openFB.login(scope, successHandler, errorHandler);</pre><p>
Riprendere la lista degli amici dell&#8217;utente:</p><pre class="crayon-plain-tag">openFB.api({path: '/me/friends', success: successHandler, error: errorHandler});</pre><p>
Pubblicare un post nella bacheca dell&#8217;utente:</p><pre class="crayon-plain-tag">openFB.api(
{
     method: 'POST',
     path: '/me/feed',
     params: {
          message: 'Messaggio di prova per le API di Facebook'
     },
     success: successHandler,
     error: errorHandler
});</pre><p>
<h3><img class="aligncenter wp-image-4052 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login-API.jpg" alt="Facebook-mobile-login-API" width="690" height="400" /></h3>
<h3>Facebook mobile login: primi passi</h3>
<p>Per integrare la risorsa nei tuoi progetti hai solamente bisogno di:</p>
<ol>
<li>Creare un&#8217;applicazione Facebook da associare al tuo progetto recandoti a <a href="https://developers.facebook.com/apps">questo link</a></li>
<li>Copiare l&#8217;ID dell&#8217;applicazione Facebook appena creata ed usarlo come primo parametro della funzione di inizializzazione della libreria OpenFB posta nella pagina principale della tua <em>Single Page Application </em>(<em>index.html</em>): <span style="color: #444444;"><em>openFB.init()</em>.</span></li>
<li>Eseguire la pagina <em>index.html</em> da un indirizzo che corrisponda a quello inserito al momento della creazione dell&#8217;applicazione Facebook, in corrispondenza del parametro &#8220;<em><span style="color: #4e5665;">Valid OAuth redirect URIs</span></em>&#8221; situato nella scheda &#8220;<em>Settings&#8221;</em>.</li>
</ol>
<p><img class="aligncenter wp-image-4053 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login-URI.jpg" alt="Facebook-mobile-login-URI" width="690" height="467" /></p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: conclusioni</h2>
<p>Come vedi il funzionamento è piuttosto semplice, e chiunque può facilmente integrarlo nella propria applicazione, app che non deve essere necessariamente distribuita sotto forma di app ibrida/nativa ma che può essere benissimo pubblicata online.</p>
<p>Infatti l&#8217;autore della libreria mette a disposizione anche la demo di un&#8217;applicazione-base che puoi consultare per capire meglio come integrare OpenFB nella tua <em>Single Mobile Application; </em>la demo che funziona anche se visualizzata con un normale browser, sia mobile che desktop.</p>
<p>In particolare, la libreria è stata pensata per fare in modo che il Facebook mobile login funzioni sia nel caso in cui il progetto preveda l&#8217;utilizzo di Phonegap (quindi nel caso di un&#8217;applicazione ibrida), sia nel caso di applicazioni &#8220;<em>browser-based</em>&#8220;: se eseguita con Cordova essa sfrutta una web view nativa, mentre se eseguita su browser, il login sarà mostrato attraverso una finestra di popup.</p>
<p>Io l&#8217;ho già implementata in una mia applicazione, e la trovo molto utile.</p>
<p>Ma mi piacerebbe sapere il tuo parere: cosa ne pensi?</p>
<p>Fammelo sapere nei commenti!</p>
<p>PS. Quasi dimenticavo: ecco <strong>il link all&#8217;ottimo ed utilissimo articolo originale di Coenraets, ai sorgenti e alla demo</strong>:</p>

		</div> 
	</div> <div class="g-cols"><div class="one-third"><div class="wpb_button align_center"><a href="http://coenraets.org/blog/2014/04/facebook-phonegap-cordova-without-plugin/"class="g-btn type_primary"><span>LINK ALL'ARTICOLO</span></a></div>
</div><div class="one-third"><div class="wpb_button align_center"><a href="https://github.com/ccoenraets/OpenFB"class="g-btn type_primary"><span>SORGENTI LIBRERIA</span></a></div>
</div><div class="one-third"><div class="wpb_button align_center"><a href="http://coenraets.org/apps/openfb/index.html"class="g-btn type_primary"><span>DEMO</span></a></div>
</div></div><div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu sei un web designer come me e vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9bfd4e29-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9bfd4e29-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/">Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Come creare un app mobile: HTML5 o linguaggio nativo?</title>
		<link>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/#comments</comments>
		<pubDate>Fri, 06 Jun 2014 11:46:55 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[come creare un app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iOS8]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4025</guid>
		<description><![CDATA[<p>Come creare un app: quale linguaggio dovrei usare, HTML5 o i linguaggi nativi? Si tratta di un dibattito che è sempre esistito fin dalla nascita dei dispositivi mobile; ma la realtà è che non c'è una risposta che si adatta a tutti e a tutto. In questo articolo analizzo quali sono i principali fattori in base ai quali dovresti decidere la strada più opportuna da intraprendere.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/">Come creare un app mobile: HTML5 o linguaggio nativo?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Uno dei dilemmi più frequenti su cui si imbatte chiunque decida di affacciarsi sul mondo dello sviluppo mobile è sicuramente quello su <strong>come creare un app</strong>: &#8220;<em><strong>quale sistema di sviluppo dovrei adottare? E&#8217; meglio cominciare con il codice nativo oppure affidarsi</strong></em><strong> all&#8217;HTML?</strong>&#8220;.</p>
<p>In effetti è una domanda che i miei lettori mi pongono molto frequentemente.</p>
<p>Come avrai notato personalmente prediligo la via dell&#8217;HTML5, CSS3 e Javascript per realizzare i miei progetti destinati a dispositivi mobile. Ma quella che per me è la strada principale, non è detto che lo debba essere per gli altri sviluppatori.</p>
<p>Ognuno, durante il proprio percorso formativo/professionale, capita davanti a situazioni ed ostacoli differenti, una miriade di combinazioni che lo portano a prendere determinate decisioni invece che altre.</p>
<p>E&#8217; così anche per quanto riguarda la decisione sul linguaggio da utilizzare per realizzare una mobileapp.</p>
<p>La risposta non è delle più semplici, ma dipende da numerosi fattori. In questo articolo vedremo quali secondo me dovresti considerare per prendere la tua decisione.</p>
<p><img class="aligncenter wp-image-4032 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/mobile-app-linguaggio-web-o-nativo-.png" alt="mobile-app-linguaggio-web-o-nativo-" width="690" height="398" /></p>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Il settore di provenienza</h2>
<p>La cosa incide maggiormente sulla decisione da prendere per quanto riguarda la metodologia di sviluppo di una mobile app è dal mio punto di vista il <strong>settore professionale</strong> al quale apparteniamo.</p>
<p>Se non sei un ragazzo che è appena uscito da scuola o dall&#8217;università e vuole iniziare a crearsi una carriera nel mondo delle mobile app, allora dovresti decidere sulla base della tua principale professione attuale e le tue esperienze lavorative.</p>
<p>Chi come me opera nel campo del <em>web design</em> e delle <em>web application</em>, ed ha cominciato le sue esperienze professionali in questo settore, allora sarà molto più facile che scelga la strada dell<em>&#8216;HTML5</em>, il <em>CSS3</em> ed il <em>Javascript</em>, linguaggi con cui ha già molta familiarità e tra cui sa muoversi molto bene.</p>
<p>Come ti ho mostrato in altri articoli, nello sviluppo di HTML Mobile App bisogna fare attenzione ad elementi come <strong><em>performance</em></strong> e <em>fluidità</em>, per non rischiare di rilasciare un prodotto di scarso valore e con una <em>user-experience</em> che non si avvicina nemmeno minimamente a quella delle applicazioni native.</p>
<p>Tuttavia è molto più facile affidarsi a linguaggi che già conosciamo piuttosto che studiarne di nuovi.</p>
<p><em>Per approfondire il discorso delle perfomance e fluidità, ti consiglio di leggere questi articoli:</em></p>
<ul>
<li><em><a title="Web e Mobile App fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile App fluide con layer e hardware acceleration</a></em></li>
<li><em><a title="Le 6 migliori tecniche per aumentare le performance di un' HTML Mobile App" href="http://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di un&#8217; HTML Mobile App</a></em></li>
</ul>
<p><em>Mentre per una serie di tutorial pratici su come creare un app in HTML5, puoi consultare la <a title="Come creare un app in HTML5, CSS3 e Javscript - Tutorials" href="http://www.upcreative.net/tutorial-css3-e-javascript-per-web-designers/">sezione tutorials</a> di questo blog.</em></p>
<p>Per un individuo che invece &#8220;parte da zero&#8221;, e vuole specializzarsi specificatamente nello sviluppo di mobile app, allora quella del <strong>linguaggio nativo</strong> potrebbe essere la strada che fa più al caso suo.</p>
<p>E&#8217; molto difficile pensare infatti che gli possa arrivare a padroneggiare molto bene sia linguaggi web che linguaggi nativi (i quali possono essere più di uno, se si decide di sviluppare per più di una piattaforma: <em>Objective-C</em>, <em>Java</em> ecc.) in modo parallelo.</p>
<p>Non sto dicendo che è impossibile, ma sicuramente è molto meno probabile.</p>
<h2>Il target dell&#8217;applicazione</h2>
<p><img class="aligncenter wp-image-4031 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/sistemi-operativi-mobile.jpg" alt="sistemi-operativi-mobile" width="690" height="300" /></p>
<p>La scelta del linguaggio è molte volte determinata anche dal <strong>target dei dispositivi</strong> per i quali decidiamo di rendere disponibile la nuova applicazione.</p>
<p>Se hai bisogno di pubblicare una determinata applicazione solamente per <em>iOS</em> o per <em>Android</em>, per esempio, allora potresti decidere si svilupparla interamente con linguaggio nativo.</p>
<p>Ovviamente ciò va considerato anche in base al futuro: c&#8217;è la possibilità che questa app possa più avanti essere resa disponibile anche per altri tipi di sistemi operativi?</p>
<p>Nel caso in cui abbiamo tale necessità o vogliamo che fin dall&#8217;inizio l&#8217;applicazione sia fruibile da più di un sistema operativo, allora la decisione più opportuna sarebbe quella di optare per l&#8217;HTML5.</p>
<h2>La tipologia dell&#8217;applicazione</h2>
<p>Un altro fattore influenzante da sottolineare è quello delle funzionalità e del tipo di interfaccia che l&#8217;applicazione deve avere.</p>
<p>Se hai la necessità di creare un videogioco molto complesso o un&#8217;interfaccia con una dinamica particolare, allora dovresti usare il linguaggio nativo, che ti consentirà di produrre un prodotto più leggero e molto meno dispendioso in termini di processore, oltre che più performante.</p>
<p>Se invece la tua necessità è quella di realizzare un&#8217;interfaccia &#8220;<em>standard</em>&#8221; con delle normali liste, delle schermate ad entrata che non prevedono effetti troppo complessi (con i CSS3 è possibile realizzare degli effetti &#8220;elaborati&#8221; che risultano comunque molto performanti, come <em>pop, </em><em>slide, flip, skew </em>ecc.), <em>headers</em>, <em>tab-bar</em> ecc., allora potremmo portare avanti il progetto tramite linguaggi <em>web-based</em>.</p>
<p><em>Se vuoi sapere come realizzare gli effetti delle interfacce native con HTML5 e CSS3 allora resta aggiornato sul mio e-book &#8220;<a title="HTML Mobile Accelerato&quot;" href="http://www.upcreative.net/html-mobile-accelerato/"><strong>HTML Mobile Accelerato</strong>&#8220;</a>, in cui ti mostrerò come realizzare un sistema di animazioni performante che non ha nulla da invidiare ad un&#8217;applicazione nativa:</em></p>
<p>&nbsp;</p>
<p><a href="http://www.upcreative.net/html-mobile-accelerato/"><img class="aligncenter wp-image-2689 size-medium" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1-300x222.png" alt="HTML-mobile-accelerato-ebook-cover" width="300" height="222" /></a></p>
<p>&nbsp;</p>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: I benefici dell&#8217;HTML5</h2>
<p><img class="aligncenter wp-image-3440 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg" alt="markup-html" width="690" height="200" /></p>
<p>Vediamo i principali benefici dei linguaggi nella realizzazione di mobile app con linguaggi <em>web-based.</em></p>
<ul>
<li><strong>Centralizzare il processo di sviluppo</strong>. Se nel caso dei linguaggi nativi siamo costretti a sviluppare la stessa applicazione da zero per ogni sistema operativo per il quale decidiamo di renderla disponibile, nel caso di mobile app in HTML5, CSS3  e Javascript possiamo utilizzare lo stesso progetto per tutte le piattaforme (apportando qualche piccolo aggiustamento, se vengono utilizzati dei plugin personalizzati per l&#8217;accesso a funzionalità del dispositivo, come vibrazione, bussola ecc.)</li>
<li><strong>Velocità e facilità di sviluppo. </strong>Come accennato in precedenza, per chi padroneggia molto bene il linguaggi web, è più facile e veloce realizzare l&#8217;interfaccia di una mobile app. In rete si possono inoltre trovare sempre più framework che adottano la filosofia del &#8220;<a title="Mobile first web design" href="http://www.yourinspirationweb.com/2013/09/18/mobile-first-la-nuova-tendenza/"><strong>mobile first</strong></a>&#8220;, e velocizzano ulteriormente le varie fasi di sviluppo</li>
<li><strong>La libertà negli aggiornamenti</strong>. Quando decidiamo di pubblicare un&#8217;applicazione su App Store, PlayStore e gli store delle altre piattaforme, siamo costretti ad attendere lunghi tempi di approvazione (2 settimane nel caso di App Store) prima che essa venga approvata. Lo stesso vale per ogni aggiornamento che invieremo. Con le HTML5 Mobile app, è possibile bypassare questo processo impostando un sistema che all&#8217;avvio dell&#8217;applicazione controlla il server per verificare la disponibilità di nuovi aggiornamenti, ed eventualmente effettuarne il download.</li>
</ul>
<h2>Come creare un app: i benefici del codice nativo</h2>
<p><img class="aligncenter wp-image-4033 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/mobile-app-linguaggio-nativo.jpg" alt="mobile-app-linguaggio-nativo" width="690" height="309" /></p>
<p>Vediamo quali sono invece i benefici dello sviluppo con codice nativo:</p>
<ul>
<li><strong>Maggior facilità di accesso alle funzionalità native</strong>. Se da un lato nel caso di mobile app <em>web-based </em>abbiamo dei tools (come Phonegap o Appcelerator) che ci offrono la possibilità di accedere e controllare alcune funzionalità native del dispositivo grazie a degli appositi plugin, è anche vero che il loro utilizzo è molte volte limitato, senza contare il fatto che per alcune delle funzionalità non esistono plugin. Con il linguaggio nativo, abbiamo piena libertà e maggior facilità di accesso a tutte le funzionalità del dispositivo.</li>
<li><strong>Possibilità di realizzare interfacce più complesse</strong>. Come già accennato in precedenza, sviluppando con linguaggio nativo è più facile creare una <em>user-experience</em> molto più avanzata ed interattiva, grazie anche alla possibilità di utilizzare i controlli e gli effetti messi a disposizione dello sviluppatore.</li>
<li><strong>La qualità dei controlli</strong>. Abbiamo detto che nel caso di HTML5 mobile app possiamo sfruttare molti framework CSS <em>mobile-first. </em>In alternativa possiamo anche scrivere personalmente le istruzioni CSS per ricreare gli stessi tipi di controlli nativi (come pulsanti, <em>header, tab-bar</em>, icone ecc.). Tuttavia la qualità di tali controlli non è ancora allo stesso livello dei UI-Kit da cui possiamo attingere con grazie ai linguaggi nativi.</li>
</ul>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Il linguaggio da adottare per creare un app dipende da numerosi fattori, ma credo che il principale sia la <strong>predisposizione e la familiarità che ogni sviluppatore ha con i vari tipi di linguaggi</strong>.</p>
<p>Personalmente sono molto più orientato verso i linguaggi web e l&#8217;HTML5, anche perchè mi sono specializzato fin dal principio nella realizzazione di siti web e soprattutto, di applicazioni web.</p>
<p>E tu? Di quale settore fai parte ? Anche tu sei un web designer e sei più predisposto ai linguaggi web, oppure sei più indirizzato verso linguaggi nativi?</p>
<p>O ancora, sei un web designer a cui piace spaziare a 360° e conosci sia i linguaggi nativi che quelli web?</p>
<p>Fammelo sapere nei commenti o inviami una mail, sono curioso di sapere quale metodologia stai adottando o ti piacerebbe adottare, e magari quali sono i tuoi obiettivi in merito.</p>
<p>&nbsp;</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il linguaggi <i>web-based</i>, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9bfebc68-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9bfebc68-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/">Come creare un app mobile: HTML5 o linguaggio nativo?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Come creare un app: l&#8217;importanza di scrivere javascript modulare</title>
		<link>https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/#comments</comments>
		<pubDate>Fri, 23 May 2014 11:10:57 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[AMD]]></category>
		<category><![CDATA[creare un app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[javascript modulare]]></category>
		<category><![CDATA[scripts loaders]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3985</guid>
		<description><![CDATA[<p>Come creare un app: adottare una buona architettura per qualsiasi web app, sia essa destinata a dispositivi mobile che desktop, è fondamentale per poter gestire facilmente tutto quello che concerne l'organizzazione dei file, evitando di perdersi in meandri infiniti di codice e callback annidate. In questo articolo rifletto sull'importanza di scrivere javascript modulare. </p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/">Come creare un app: l&#8217;importanza di scrivere javascript modulare</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Più volte ho accennato all&#8217;importanza della <b>scalabilità e mantenibilità per un applicazione mobile sviluppata in HTML5</b>, che permette allo sviluppatore (o agli sviluppatori, se si tratta di un team) di estendere o ridurre le dimensioni del progetto più facilmente, e di aggiornare i vari componenti anche singolarmente, avendo minime ripercussioni o ripercussioni inesistenti sugli altri componenti dell&#8217;applicazione.</p>
<p>Grazie ad un progetto scalabile è possibile evitare quello che personalmente ho rinominato l&#8217; &#8220;<b>effetto Shangai</b>&#8221;  (pensa ad ogni parte di un&#8217;applicazione come un bastoncino, ogni volta che si modifica la posizione di un bastoncino è possibile coinvolgere, se si è fortunati, almeno 3 bastoncini,  che nel nostro caso rappresentano altri componenti dell’applicazione, come <i>views, models, collections</i>, <i>ecc</i>.).</p>
<p><i>Per avere vedere un esempio funzionante di una HTML5 mobile app basata su views, model e collection, ti consiglio di leggere questo articolo: </i><i><a href="http://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/">Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js</a></i></p>
<p><img class="aligncenter wp-image-3989" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-effetto-shangai.jpg" alt="come creare un app - effetto shangai" width="725" height="544" /></p>
<p style="text-align: center;"><i>Il gioco da tavolo dello Shangai. Fonte: </i><a href="https://www.flickr.com/photos/arnauselga/185449022/"><i>Flickr</i></a><i>  </i></p>
<hr />
<p><em>Come creare #HTML5 #mobileapp: il #javascript modulare</em><br /><a href='https://twitter.com/share?text=Come+creare+%23HTML5+%23mobileapp%3A+il+%23javascript+modulare&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: l&#8217;importanza di scrivere javascript modulare</h2>
<p>Nel mondo della programmazione, per risolvere questo tipo di problema e per aumentare mantenibilità e scalabilità del codice, di solito si cerca di rendere il progetto &#8220;<b>modulare</b>&#8220;, concetto che non è riservato solo alle applicazioni mobile, ma che può essere esteso a tutte le <i>web app</i> javascript in generale, realizzate in <b>HTML5, CSS3 e Javascript</b>.</p>
<p>Usando questo termine ci riferiamo ad un tipo di struttura che viene suddivisa in <b>moduli separati</b>, ovvero singole parti o funzionalità dell’applicazione, ognuna di esse avente solitamente uno o più compiti specifici.</p>
<p>Ciò facilita notevolmente la mantenibilità rimuovendo, dove possibile, la dipendenza di una parte dell&#8217;applicazione rispetto alle altre (un componente è dipendente dall&#8217;altro quando ha bisogno di esso per poter funzionare).</p>
<p>Quando questo concetto è applicato correttamente, è molto più facile limitare le ripercussioni che operazioni come aggiunta, modifica o aggiornamento di un componente possano avere su altri altri del progetto.</p>
<h2>Come creare un app: rendere un progetto modulare</h2>
<h3>Come creare un app: i namespace</h3>
<p><img class="aligncenter wp-image-3988 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-i-namespace.jpg" alt="come creare un app - i namespace" width="725" height="314" /></p>
<p>Una delle pratiche comuni per rendere modulare un progetto sviluppato in HTML5, CSS3 e Javascript è quella di attribuire alle varie parti del DOM dell&#8217;interfaccia, o alle varie funzioni javascript che le gestiscono, <b>dei “nomi” secondo una certa logica.</b></p>
<p>Tali nomi dovrebbero essere assegnati in modo tale che <b>ogni elemento sia identificabile in modo univoco dal un proprio </b><b><i>namespace</i></b>, ovvero un nominativo che solitamente deriva dalla combinazione di due elementi:</p>
<ul>
<li>le funzionalità per il quale è stato concepito l’elemento al quale viene assegnato il <i>namespace</i></li>
<li>il nome della parte dell&#8217;interfaccia in questione.</li>
</ul>
<p>Ciò permette di <b>evitare eventuali collisioni con altri elementi o variabili globali</b>.</p>
<p>Se volessimo identificare per esempio, in un’eventuale mobile app, la <i>view</i> di creazione di un articolo alla quale è possibile accedere dalla lista delle novità, potremmo associare all’elemento DOM che contiene la view il <i>namespece </i>&#8220;news_article_create&#8221;, da inserire all’interno dell’attributo “<i>id</i>”, o magari all’interno di un microdata personalizzato (es: <i>data-namespace = ”news_article_create”</i>).</p>
<p><img class="aligncenter wp-image-3987 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-view-e-namespace.jpg" alt="come creare un app view e namespace" width="725" height="450" /></p>
<p>Il <i>namespace</i> è molto utile per selezionare e manipolare via <i>javascript</i> un o più elementi DOM del documento (come accade molto spesso con i selettori di jQuery).</p>
<p>Un’altro metodo che rende molto facile la <b>modularizzazione di un progetto</b>, è quello di <b>utilizzare l’AMD</b>.</p>
<h3>Come creare un app: l&#8217;AMD</h3>
<p><img class="aligncenter wp-image-3986 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-lAMD.jpg" alt="come creare un app - l'AMD" width="725" height="314" /></p>
<p>L’AMD (Asynchrounous Module Defnition) è una tecnica che permette di <b>caricare all’interno del progetto file e moduli esterni in modo asincrono</b>, dopo il caricamento della pagina, ovvero dopo che sono state caricate tutte le risorse esterne indicate del documento iniziale (stili CSS, file <i>javascript</i> ecc.).</p>
<p>Oltre ad <a href="http://www.yourinspirationweb.com/2014/03/03/html-mobile-app-5-consigli-per-aumentare-le-performance/"><b>aumentare le performance</b></a>, l’AMD permette , in fase di sviluppo, <b>di mantenere tutti i moduli della struttura del progetto organizzati in file distinti fra loro</b>, con la stessa logica di altri tipi di linguaggi di programmazione.</p>
<p>Grazie a dei tools esterni, è anche possibile concatenare e minimizzare tutti i file sorgenti Javascript in un unico file più leggero al momento della distribuzione del prodotto.</p>
<p><i>Fonte: </i><i><a href="http://en.wikipedia.org/wiki/Asynchronous_module_definition">Wikipedia</a></i></p>
<hr />
<p><em>Come creare #HTML5 #mobileapp: il #javascript modulare</em><br /><a href='https://twitter.com/share?text=Come+creare+%23HTML5+%23mobileapp%3A+il+%23javascript+modulare&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/' target='_blank'>Click To Tweet</a></p>
<hr />
<h3>Come creare un app: gli script loaders</h3>
<p>Suddividere la propria applicazione in moduli senza organizzarli in file separati non è molto diverso dal non utilizzarli affatto.</p>
<p>Definendo tutti i moduli in un unico file può contribuire ad evitare la situazione dell’ <i>Effetto Shangai</i>, anche se in tutti i casi ricercare una funzione o un determinato modulo tra 5000 righe di codice <i>javascript</i> non è per niente facile (è uno scenario in cui ti sei già trovato/a vero?).</p>
<p>Inoltre ciò renderebbe molto difficile il <b>lavoro simultaneo di più sviluppatori all’interno del progetto</b>.</p>
<p>E’ per questo motivo che solitamente la tecnica di suddivisione in moduli và di pari passo con l’utilizzo degli <b><i>Script Loaders</i></b>, librerie esterne che permettono appunto di caricare nel documento dei <i>moduli</i> o dei <a href="http://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/"><i>template</i></a> collocati in file esterni.</p>
<p>In rete è possibile trovare moltissimi <i>script loader </i>(come per esempio <a href="https://github.com/unscriptable/curl"><b>Curl.js </b> </a>oppure il loader del framework <a href="http://dojotoolkit.org/">Dojo</a>, ma il mio preferito, oltre che uno dei più diffusi, rimane <a href="http://requirejs.org/">Require.js</a>.</p>
<p>Se ti interessa, ecco una lista di script loaders <i>client-side</i>:</p>
<ul>
<li><a href="http://requirejs.org">RequireJS</a></li>
<li><a href="http://github.com/unscriptable/curl">curl.js</a></li>
<li><a href="http://bdframework.com/bdLoad">bdLoad</a></li>
<li><a href="http://github.com/jbrantly/yabble">Yabble</a></li>
<li><a href="http://github.com/pinf/loader-js">PINF</a></li>
</ul>
<p>Con <i>Require.js </i>possiamo anche concatenare tutti gli script in un unico file grazie a dei tools di ottimizzazione aggiuntivi come il <a href="http://requirejs.org/docs/optimization.html">Require.js optimizer</a>, che permettono tra l’altro di rimuovere completamente il discorso del caricamento asincrono e dell&#8217;AMD per nella versione “<i>production”</i> del nostro progetto.</p>
<hr />
<p><em>Come creare #HTML5 #mobileapp: il #javascript modulare</em><br /><a href='https://twitter.com/share?text=Come+creare+%23HTML5+%23mobileapp%3A+il+%23javascript+modulare&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2><b>Conclusioni</b></h2>
<p>Quando si sviluppa un’applicazione web in HTML5, CSS3 e Javascript di complessità medio-alta (in riferimento al numero di funzionalità e al numero di schermate o <i>view</i> presenti nell’interfaccia), rendere il progetto modulare può <b>aiutare incredibilmente a svolgere più facilmente comuni operazioni </b>come modifica, eliminazione ed aggiornamento di alcune delle parti che lo compongono.</p>
<p>Qualsiasi applicazione è in costante aggiornamento, ed organizzare elementi come schermate, dati, <i>template</i> in moduli separati può <b>velocizzare anche il flusso di lavoro</b>, specie se questo è portato avanti non singolarmente, bensì da un team di sviluppatori.</p>
<p>E tu hai mai pensato alla modularità dei tuoi progetti e web app?</p>
<p>Se hai dei tools e strumenti da aggiungere alla lista, o per qualunque dubbio o perplessità, scrivilo pure nei commenti!</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando javascript modulare insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c005c49-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c005c49-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/">Come creare un app: l&#8217;importanza di scrivere javascript modulare</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-limportanza-scrivere-javascript-modulare/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</title>
		<link>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/#comments</comments>
		<pubDate>Fri, 16 May 2014 08:11:57 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Web SQL]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3957</guid>
		<description><![CDATA[<p>Come creare un app: ecco la seconda parte della mini-guida sul salvataggio dei dati in un'applicazione mobile sviluppata con HTML5, CSS3 e Javascript, utilizzando un database lato-client. In questo articolo analizzerò i metodi essenziali per poter sfruttare al meglio le funzionalità del Web SQL. </p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nella  <a title="Come creare un app in HTML: salvataggio dati con database SQL lato-client – parte 1" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">prima parte di questa mini-guida</a> ho introdotto i <strong>database <em>lato-client</em></strong> come soluzione per il salvataggio di quel tipo di dati che non necessitano di essere salvati su qualche sistema di <em>storage </em>remoto, utile sia per tipi di progetto come normali siti web, ma soprattutto per lo <strong>sviluppo di mobile app in HTML5, CSS3 e Javascript</strong>.</p>
<p>Molti sviluppatori (troppi) non sono a conoscenza del fatto che è possibile <strong>salvare dei dati in maniera relazionale sul browser</strong> dell&#8217;utente (o del visitatore), utilizzando uno dei linguaggi maggiormente conosciuti nel mondo del web design: l&#8217;<strong><em>SQL</em></strong>.</p>
<p>Da qui nasce l&#8217;idea di questa mini-guida.</p>
<p><img class="aligncenter wp-image-3976 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-i-database-parte-2.jpg" alt="come-creare-un-app-i-database-parte-2" width="690" height="430" /></p>
<p>Nello scorso articolo ti ho mostrato quali sono i database <em>lato-client</em> disponibili, ed in particolare ho anticipato <strong>i tre metodi fondamentali</strong> per poter <strong>sfruttare tutte le potenzialità del database Web SQL:</strong></p>
<ul>
<li><i>openDatabase</i></li>
<li><i>transaction</i></li>
<li><i>executeSql</i></li>
</ul>
<p>Vediamo come utilizzarli più nel dettaglio.</p>
<hr />
<p><em>Come creare una #mobileapp: i metodi del #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+i+metodi+del%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: Creare ed aprire un database</h2>
<p><img class="aligncenter wp-image-3977 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-nuovo-database.jpg" alt="Come-creare-un-app-nuovo-database" width="690" height="272" /></p>
<p>Per salvare i nostri dati abbiamo bisogno come prima cosa di <b>cerare un database</b>. Se si tenta di aprire un Database che non esiste l’API del <em>Web SQL</em> lo creerà automaticamente per noi.</p>
<p>Per creare ed aprire un database, proseguiamo come segue:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024 , function(database){
      alert(“Database creato e aperto correttamente”);
});</pre><p>
Nell’esempio abbiamo creato e aperto un nuovo Database associando la sua istanza ad una variabile “<i>db</i>”, il tutto passando <strong>5 parametri</strong> al metodo <i>openDatabase:</i></p>
<ol>
<li>Il nome del Database</li>
<li>Il numero della versione da utilizzare</li>
<li>Una descrizione di testo</li>
<li>Dimensioni stimate del Database</li>
<li>Callback di creazione</li>
</ol>
<p>Se usiamo come primo parametro il nome di un database che è già stato creato in precedenza, non viene creato un nuovo database, ma viene aperto quello già presente.</p>
<hr />
<p><em>Come creare una #mobileapp: creare e aprire un #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A%C2%A0creare+e+aprire+un%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: le transaction di Web SQL</h2>
<p><img class="aligncenter wp-image-3978 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-transaction.jpg" alt="Come-creare-un-app-Web-SQL-transaction" width="690" height="272" /></p>
<p>Una volta aperto il Database, possiamo istanziare <strong>l&#8217;oggetto <i>transaction</i></strong>, che ci servirà per eseguire le query di cui abbiamo bisogno.</p>
<p>Ma perché servirsi di un oggetto aggiuntivo come la <i>transaction </i>invece di scrivere semplicemente le nostre righe di SQL?</p>
<p>Le <i>transaction </i>ci permettono di usufruire di una funzionalità di <b><i>rollback:</i></b> ciò significa che, se una <i>transaction</i> contenente una o più query SQL per qualche ragione fallisce, gli aggiornamenti al database non vengono effettuati, come se la transazione non fosse mai avvenuta.</p>
<p>E’ una logica di funzionamento molto simile a quella delle transazioni dei database MSSql, e rappresenta un grande vantaggio, soprattutto quando abbiamo la necessità di eseguire <b>più operazioni di modifica in</b> coda.</p>
<p>Il metodo <i>transaction </i>dà  allo sviluppatore anche la possibilità di <strong>gestire eventuali errori</strong> nella transazione con delle apposite <strong><i>callback di errore e di successo</i>.</strong></p>
<p>Ma vediamo più nel dettaglio come si utilizza.</p>
<p>La <i>transaction</i> non è altro che una semplice funzione con una <i>callback </i>di ritorno:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);
db.transaction(function(tx){
     /* Effettuare le proprie query qui */
}, function(){
     //callback di successo
     alert(“Istruzioni SQL eseguite correttamente”);
});</pre><p>
L’oggetto &#8220;<i>tx&#8221;</i> restituito nella prima funzione di callback, rappresenta l’oggetto della <i>transaction</i>, che useremo per eseguire le query di cui abbiamo bisogno.</p>
<p>Oltre al metodo <i>transaction, </i>è possibile usare anche il metodo <i><strong>readTransaction</strong>, </i>che funziona in modo del tutto analogo al primo<i>, </i>ma che non può essere impiegato per eseguire delle istruzioni SQL di modifica del database (come per es. la <i>creazione o l&#8217;eliminazione di tabelle</i>, oppure istruzioni come <i>INSERT </i>ed <i>EDIT</i>), in quanto è stato creato appositamente per <i>velocizzare le query di lettura.</i></p>
<p>Tuttavia con i metodo <i>transaction</i> possiamo effettuare sia query di lettura che di modifica.</p>
<p>Una volta ottenuto il nostro oggetto <i>transaction, </i>procediamo con <strong>l’esecuzione delle query</strong>.</p>
<h2>Come creare un app in HTML: il metodo executeSQL</h2>
<p><img class="aligncenter wp-image-3979 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-executeSQL.jpg" alt="Come-creare-un-app-Web-SQL-executeSQL" width="690" height="272" /></p>
<p>Eccoci finalmente al punto in cui possiamo divertirci con le istruzioni SQL.</p>
<p><em>executeSQL</em> può essere utilizzato <strong>sia per query di lettura che per query di modifica del database</strong>, include un <strong>controllo implicito per l&#8217;<i>SQL Injection</i></strong>, e fornisce una callback di ritorno per poter processare i risultati delle query effettuate.</p>
<h3>Come creare una tabella</h3>
<p>Il metodo <i>executeSql</i> è un metodo dell’oggetto <i>transaction </i>(ovvero dell&#8217;oggetto fornito con il parametro di ritorno “<em>tx</em>”) e viene utilizzato in questa maniera:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);

db.transaction(function(tx){
	/* Effettuare le proprie query qui */
}, function(){
	//callback di successo
	tx.executeSql("CREATE TABLE Employees (id unique, name)", [] , 			
		function(sqlTransaction, sqlResultSet){
				alert("La tabella è stata creata.");
		}, 
		function(sqlTransaction, sqlError){			
			/* Gestione degli errori */
		}
	);
});</pre><p>
L’esempio che ti ho appena mostrato <strong>crea una tabella</strong> dal nome “<i>Employees</i>” all’interno del nostro Database “<i>nomeDatabase</i>”.</p>
<p>Ovviamente, se la tabella già esiste sarà restituito un errore, che possiamo gestire all’interno della funzione passata come terzo parametro, oppure possiamo evitare l’errore a priori con una query del tipo:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);
db.transaction(function(tx){
	/* Effettuare le proprie query qui */
}, function(){
	//callback di successo
	tx.executeSql("CREATE TABLE IF NOT EXISTS Employees (id unique, name)");
	tx.executeSql("INSERT INTO Employees (id, name) VALUES (1, ‘Giacomo')");
});</pre><p>
Ora la tabella “<i>Employees” </i>ha un record al suo interno.</p>
<hr />
<p><em>Come creare una #mobileapp: effettuare query in un #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+effettuare+query%C2%A0in+un%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h3>Come inserire un nuovo record in una tabella</h3>
<p>Ma se volessimo inserire una riga mediante dei valori dinamici?</p>
<p>Ciò è possibile utilizzando il secondo argomento da passare al metodo <i>executeSQL:</i></p><pre class="crayon-plain-tag">tx.executeSql(“INSERT INTO Employees (id, name) VALUES (?, ?) ”, [variabile_id, variabile_name] );</pre><p>
In questo modo le variabili “<i>variabile_id</i>” e “<em>variabile_name</em>” saranno sostituite ai caratteri “<i>?</i>” all’interno della query <strong>in modo sequenziale</strong>.</p>
<h3>Come leggere i record di una tabella e processarli con il javascript</h3>
<p>Infine, per eseguire <strong>query di lettura</strong> nella nostra tabella, basterà utilizzare la <i>callback </i>di ritorno processando i risultati ottenuti:</p><pre class="crayon-plain-tag">tx.executeSql('SELECT id, name FROM Employees', [  ], function (tx, resultsData) {
	//i record restituiti sono all’interno della proprietà “rows” dell’oggetto resultsData
	//loop per scorrere tutti i risultati ottenuti
	for (var i = 0; resultsData.rows.length &lt; len; i++) {
		var employee = resultsData.rows.item(i);
		console.log(employee .name);
	}
});</pre><p>
La <em>callback</em> riceve <strong>due parametri di ritorno</strong>:</p>
<ul>
<li><strong>l’oggetto della transazione</strong> (lo stesso che abbiamo usato per effettuare la query)</li>
<li><strong>l’oggetto <em>javascript</em> dei risultati</strong> contenente un attributo “<i>rows</i>” strutturato come un array, anche se non lo si può definire un’array a tutti gli effetti: per accedere ai dati di un singolo <em>record</em> dobbiamo utilizzare la sintassi &#8220;<i>rows.item(i)</i>&#8220;, dove “<i>i</i>” rappresenta l’indice del <em>record</em>  all&#8217;interno della lista dei risultati, mentre in un normale <i>array </i>sarebbe bastato scrivere “<i>rows[i]</i>”).</li>
</ul>
<p>Dall’istruzione “<i>var employee = resultsData.rows.item(i);</i>” otteniamo quindi l’oggetto di un singolo <em>record</em>, che avrà le stesse proprietà dei campi richiesti nella <em>query</em> (nel nostro caso avrà quindi due proprietà: “<i>id</i>” e “<i>name</i>” );</p>
<h2>Come creare un app: conclusioni sui metodi del Web SQL</h2>
<p>Queste sono a grandi linee tutte le nozioni di cui abbiamo bisogno per sfruttare la maggior parte delle funzionalità del <em>Web SQL</em>.</p>
<p>Come ho spiegato nella <a title="Come creare un app in HTML: salvataggio dati con database SQL lato-client – parte 1" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">prima parte di questa mini-guida</a>, il <em><strong>Web SQL</strong></em> è un metodo molto utile per salvare dati in <strong>forma relazionale</strong> all&#8217;interno di qualsiasi<em> single page application, </em>sia quelle destinate ad essere compilate con strumenti come <a title="Phonegap - Sviluppo come creare un app in HTML5, CSS3 e Javascript" href="http://phonegap.com/"><strong><em>Phonegap</em></strong></a> e distribuite su dispositivi mobile, sia quelle che saranno disponibili come <em>web app</em> ed accessibili direttamente da un indirizzo remoto.</p>
<p>Personalmente trovo questo metodo di salvataggio molto utile per salvare le impostazioni personali dell&#8217;utente, come nel caso di <a title="Tint - HTML5 Mobile App su App Store" href="http://www.upcreative.net/tint-weather-app/">Tint</a> (la mia app per il meteo), o per salvare i dati sul dispositivo per quelle applicazioni che non devono essere sincronizzate in cloud, come ho fatto per <a title="Dieta SI o NO? - HTML5 Mobile App distribuita su App Store" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>.</p>
<p>Tuttavia va ricordato il fatto che le <strong><em>specifications del W3C</em> hanno abbandonato il supporto al Web SQL</strong> a favore del database non-relazionale <strong>IndexedDB</strong> e,<strong> </strong>in un futuro molto prossimo, il Web SQL non sarà più supportato dai browser, inclusi quelli mobile.</p>
<hr />
<p><em>Come creare una #mobileapp: i metodi del #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+i+metodi+del%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Ed Ora?</h2>
<p>Se hai mai utilizzato sistemi di memorizzazione come i database <em>lato-client</em> mi piacerebbe avere un tuo riscontro per quanto riguarda le tue reali esperienze, i tuoi progetti e/o reali <em>case-study</em>.</p>
<p>Sentiti libero/a inoltre di esporre tutti i tuoi dubbi o perplessità al riguardo, sia inviandomi una mail all&#8217;indirizzo <a href="mailto:info@upcreative.net">info@upcreative.net</a>, o meglio ancora, commentando questo articolo.
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il sistema di salvataggio Web SQL insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c0104c8-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c0104c8-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</title>
		<link>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/#comments</comments>
		<pubDate>Sat, 10 May 2014 11:53:05 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Web SQL]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3953</guid>
		<description><![CDATA[<p>Per qualsiasi Applicazione Mobile si ha il bisogno di salvare dati, e la maggior parte delle volte tali dati necessitano di essere memorizzati nel dispositivo dell'utente. Tutti i web designers hanno, per forza di cose, molta familiarità con l'SQL: in questo articolo vedremo come creare un app in HTML utilizzando come metodo di salvataggio un database relazionale lato-client: il Web SQL.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Molti sviluppatori <em>javascript</em> forse non ne sono a conoscenza, ma <strong>esiste un metodo per poter salvare i dati in un Database lato-client</strong>. Ciò significa che è possibile utilizzare database <strong>situati nel dispositivo dell&#8217;utente</strong>.</p>
<p>Esso costituisce un grande vantaggio nella realizzazione di <em>HTML Mobile App</em> e <em>single page application</em> in generale, anche se i database SQL <em>lato-client</em> possono essere utilizzati per qualunque sito web, in quanto si tratta di una <strong>funzionalità HTML5</strong>.</p>
<p>In un articolo che ho scritto per <a href="http://www.yourinspirationweb.com/">YourInspirationWeb.com</a>, avevo riportato le varie modalità con cui è possibile salvare i dati per una HTML Mobile App sviluppata in CSS3 e Javascript: <strong><a title="HTML Mobile App: Tecniche per il salvataggio dei dati" href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/">HTML Mobile App: Tecniche per il salvataggio dei dati</a>.</strong></p>
<p>In questo post prenderemo in considerazione il terzo metodo per il salvataggio dati esposto nell&#8217;articolo di YourInspirationWeb.com: il <strong>Database HTML5</strong>.</p>
<p><img class="aligncenter wp-image-3964 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-i-database.jpg" alt="come-creare-un-app-i-database" width="690" height="430" /></p>
<p>La maggior parte degli sviluppatori web è abituata a salvare i propri dati tramite <strong>metodi relazionali</strong>, utilizzando perlopiù database come <em>mySql </em>o <em>MsSql, </em>e chi si occupa dello sviluppo di Mobile App in HTML5, CSS3 e Javascript solitamente è prima di tutto un web designer impegnato nella realizzazione di siti web (tramite appunto questo tipo di database, come nel caso di sviluppatori WordPress).</p>
<p>Pertanto molti saranno contenti del fatto che <strong>per la creare mobile app è disponibile un metodo di salvataggio che sfrutta database <em>lato-client</em></strong>.</p>
<p>Se infatti <i>lato-server</i> è possibile usare qualsiasi sorta di database, anche l’HTML mette a disposizione un tipo di <b>database <i>lato-client</i></b>, che lo sviluppatore può sfruttare per poter inserire, modificare, cancellare e leggere i dati del proprio progetto sul dispositivo, secondo una metodologia <b>relazionale<i>, </i></b>tramite vere e proprie <i>query SQL</i>.</p>
<p>Ma cosa intendo per &#8220;<em>database lato-client</em>&#8220;?</p>
<blockquote><p>Per<em> database lato-client</em> intendo un tipo di database che risiede nel browser utilizzato dall&#8217;utente, grazie al quale possiamo evitare <strong>di dover comunicare con il server</strong>, come per esempio per mezzo di chiamate ajax.</p></blockquote>
<hr />
<p><em>Come creare una #mobileapp: salvataggio dati con #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+salvataggio+dati+con+%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: due tipi di database lato-client</h2>
<p><img class="aligncenter wp-image-3965 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-ed-IndexedDB.jpg" alt="Come-creare-un-app-Web-SQL-ed-IndexedDB" width="690" height="272" /></p>
<p>Lo sviluppatore ha a disposizione <b>due tipi diversi di database lato client in HTML5</b>:</p>
<ul>
<li><b>Web Sql (di tipo relazionale)</b>: mette a disposizione un modello di API che permettono di eseguire delle query tramite una variante di linguaggio SQL.</li>
<li><b>IndexedDB (di tipo coppia chiave-valore)</b>: definisce un modello API con le quali è possibile lavorare in un database di record con valori semplici ed oggetti gerarchici.</li>
</ul>
<p>Come per il <i>localStorage</i>, anche nel caso dei Database <i>Web Sql </i>ed <i>IndexedDB  </i>generalmente abbiamo a disposizione una capacità di memoria predefinita di 5MB, che può variare a seconda della versione del browser del dispositivo e delle impostazioni scelte dall’utente.</p>
<h3>Come creare un app: la compatibilità dei database lato-client</h3>
<p>Purtroppo nel momento in cui scrivo ci troviamo ancora in una terra al quanto instabile, per quanto riguarda i database <i>lato-client: </i></p>
<p>se da un lato il <b>WebSql </b>non sarà più mantenuto in modo attivo dalle <b><i>specifications </i>dello staff W3C </b>(ecco il link<a href="http://dev.w3.org/html5/webdatabase/"> alla pagina ufficiale w3c</a>), il che significa che in un futuro molto prossimo sarà abbandonato, dall’altro l’<b>IndexedDB </b>non è ancora supportato da Mobile Safari per iOS, che invece supporta ancora il <em>Web SQL</em> (per la tabella delle compatibilità di IndexedDB visita <a href="http://caniuse.com/indexeddb">questo link</a>). Puoi consultare la pagina ufficiale w3c dell’IndexedDB <a href="http://www.w3.org/TR/IndexedDB/">collegati a questo indirizzo</a>.</p>
<p>Siccome stiamo parlando di <b>Mobile </b>App, e siccome il numero di dispositivi Apple rappresenta <strong>una grandissima fetta dell’utenza mondiale</strong> (quindi una grandissima portata al livello di audience e possibilità di mercato), è opportuno secondo me lavorare ancora con il database <i>WebSql,</i> per dirigersi poi verso l’IndexedDB mano a mano che esso sarà supportato da tutti i dispositivi.</p>
<p><img class="aligncenter wp-image-3966 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-w3c-specification.jpg" alt="come-creare-un-app-w3c-specification" width="690" height="272" /></p>
<p>Tra l’altro, anche le versioni desktop di Chrome, Safari ed Opera supportano il WebSql, il che ci dà la possibilità di testare eventualmente il salvataggio dati anche su browser desktop, evitando di effettuare ogni volta il <em>deploy</em> nel dispositivo mobile.</p>
<p>L&#8217;<em>indexedDB</em> inoltre non è un modello di database relazionale.</p>
<p>Per ora prenderemo quindi in considerazione solamente il database <i>WebSql</i>.</p>
<hr />
<p><em>Come creare una #mobileapp: salvataggio dati con #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+salvataggio+dati+con+%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/' target='_blank'>Click To Tweet</a></p>
<hr />
<h3>Come creare un app: Il database Web SQL</h3>
<p>Abbiamo detto che <b>il Database Web SQL permette di utilizzare l’SQL lato-client</b>.</p>
<p>Quindi, se hai un background da programmatore <em>back-end</em> (come la maggior parte dei web designers) oppure sei un programmatore <em>front-end</em> con nozioni di <em>back-end,</em> non avrai problemi con l’SQL, altrimenti apprendere l’SQL sarà uno stimolo per poter imparare una nuova competenza.</p>
<p>La sintassi del Web Sql è basata sull’SQLite, ma è molto similare anche ad altri database relazionali com MySql, MSSql e via dicendo.</p>
<p><b>Come si usa</b></p>
<p>Vediamo le nozioni principali del Web SQL (ovviamente se vuoi approfondire l’argomento, dal nostro caro &#8220;amico Google&#8221; potrai trovare tutte le informazioni che ti interessano).</p>
<p>Per sfruttare le funzionalità del Web SQL e poter salvare i dati della nostra applicazione in un database lato-client, sono 3 i <i>metodi </i>da prendere principalmente in considerazione:</p>
<ul>
<li><i>openDatabase</i></li>
<li><i>transaction</i></li>
<li><i>executeSql</i></li>
</ul>
<h3>Come creare un app: il database SQL lato client parte 1 &#8211; conclusioni</h3>
<p><strong>Nella seconda parte di questa guida</strong> analizzeremo come poter utilizzare le funzionalità principali del Web SQL tramite i 3 metodi appena elencati, che ci forniscono tutto ciò di cui abbiamo bisogno per poter <strong>creare nuovi database e stabilire una connessione con quelli già esistenti</strong>, oppure effettuare altre operazioni fondamentali come la <strong>creazione di tabelle</strong>, <strong>l&#8217;inserimento, la modifica o la cancellazione di records</strong>.</p>
<p>E tu? Hai mai utilizzato i database lato-client per i tuoi progetti?</p>
<p>Magari l&#8217;hai utilizzata per salvare qualche tipo di dato, oppure pensi che potrebbe essere una possibile soluzione per il tuo prossimo progetto. Scrivi pure tutte le tue considerazioni e/o perplessità al riguardo nei commenti, e sarò lieto di aiutarti a capire se il Web SQL potrebbe essere implementato nei tuoi lavori.</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il sistema di salvataggio Web SQL insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c02bf7a-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c02bf7a-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HTML5 Mobile App: l’importanza del framework MVC</title>
		<link>https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/</link>
		<comments>https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/#comments</comments>
		<pubDate>Sat, 12 Apr 2014 10:57:42 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[MVC Javascript frameworks]]></category>
		<category><![CDATA[single page application]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3817</guid>
		<description><![CDATA[<p>Nonostante moltissime applicazioni, sia desktop che HTML5 Mobile App, siano oggi sviluppate sotto forma di single page applications (basti pensare a javascript web app come Gmail, Trello, Asana, Todoist, Twitter ecc.), in Italia il concetto di MVC è ancora poco diffuso, e molti sviluppatori faticano a comprenderne la logica. In questo post ti voglio far riflettere sull'importanza dei frameworks MVC per lo sviluppo front-end.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/">HTML5 Mobile App: l’importanza del framework MVC</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Tutti gli sviluppatori e web designers hanno a che fare prima o poi con la <strong>manipolazione di elementi HTML DOM</strong>, momento in cui fanno conoscenza solitamente di jQuery, che con  tutti i plugin disponibili offre una mano non indifferente.</p>
<p>Il problema sorge di solito quando <strong>non si tratta più di realizzare siti web</strong>, ma iniziamo ad affacciarsi al mondo delle <em><strong>web app</strong></em>, dove è facilissimo perdersi in una pila infinita di elementi DOM e callback javascript intrecciate e nidificate tra di loro.</p>
<p>Visto che il numero di dispositivi mobile sta crescendo a vista d’occhio e sempre più sistemi operativi stanno rivolgendosi verso la direzione delle <i>single page applications, </i>(hai notato che anche le applicazioni di Windows-8 sono <strong>single-page-app</strong> costruite in <strong>HTML5</strong>?), ma soprattutto perché esse costituiscono il metodo principale per lo sviluppo di <strong>HTML5 Mobile App ibride</strong>, è opportuno considerare l&#8217;approccio a <strong><em>Frameworks Javascript Moderni. </em></strong></p>
<p>Tali frameworks ci possono assistere nel processo di strutturazione ed organizzazione dei nostri progetti, facendo in modo che essi risultino facilmente <strong>mantenibili e scalabili</strong> anche a lungo-termine.</p>
<hr />
<p><em>#Javascript #HTML #mobileapp: l&#8217;importanza del #framework #MVC</em><br /><a href='https://twitter.com/share?text=%23Javascript+%23HTML+%23mobileapp%3A+l%27importanza+del+%23framework+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>HTML5 Mobile App: MVC, Di cosa si tratta?</h2>
<p style="text-align: center;"><img class="size-full wp-image-3823 aligncenter" alt="javascript-models-view-controllers" src="http://www.upcreative.net/wp-content/uploads/2014/04/javascript-models-view-controllers.jpg" width="690" height="283" /></p>
<p>Questi nuovi framework sono nati con il preciso scopo di fornire allo sviluppatore un modo efficace di organizzare il codice usando delle variazioni del <strong><em>design pattern MVC</em></strong>, ovvero quella logica di programmazione che prende in considerazione tre tipi di entità:</p>
<ul>
<li><strong>Modelli (<em>models</em>)</strong>: rappresentano <strong>l’astrazione dei dati</strong>. Un modello notifica a tutti i componenti che stanno &#8220;osservando&#8221; il suo comportamento quale sia il suo stato attuale. Per fare un esempio più concreto, un modello definisce il tipo di dato in questione: può rappresentare una persona, una nota, un file, un articolo.</li>
<li><strong>Viste (<em>views</em>):</strong> sono gli elementi che compongono <strong>l&#8217;interfaccia di un&#8217;applicazione.</strong> Generalmente (ma non necessariamente) ad<strong> ogni vista è associato un model</strong> (per esempio, nella parte di interfaccia che mostra un&#8217;ipotetica lista di articoli, ogni riga della lista è costituita da una <em>view, </em>quindi ad ogni <em>view</em> è associato il model dell&#8217;articolo). Il compito della <em>view </em>è quello di &#8220;osservare&#8221; il comportamento del model associato ed agire di conseguenza, ma senza interferire con esso.</li>
<li><strong>Controller</strong>: è quella parte dell&#8217; applicazione che gestisce gli input (ovvero le azioni dell&#8217;utente) e modifica i model di conseguenza. Quando un <em>model</em> viene modificato o cambia di stato per mezzo del controller, la <em>view</em> associata, che sta &#8220;osservando&#8221; quel <em>model</em>, opera gli opportuni cambiamenti. Quindi possiamo dire che<strong> il <em>controller</em> gestisce le <em>view</em> indirettamente</strong>.</li>
</ul>
<p>Solitamente i <em>models</em> sono raggruppati in <strong>collections, </strong>ovvero &#8220;liste di <em>models</em>&#8221; che possono anch&#8217;essi essere associati ad una o più <em>views, </em>come succede per i<em> models.</em></p>
<p>Ecco uno schema di come funziona la maggior parte dei frameworks MVC:</p>
<p style="text-align: center;"><img class="size-full wp-image-2183 aligncenter" alt="il-pattern-MVC-per-creare-applicazioni-web" src="http://www.upcreative.net/wp-content/uploads/2013/10/il-pattern-MVC-per-creare-applicazioni-web.jpg" width="690" height="450" /></p>
<p style="text-align: center;"><span style="line-height: 1.5em;">Per sapere di più sui javascript design patterns ti consiglio di leggere questo mio articolo:</span></p>
<ul>
<li><a title="Web Applications: scrivere codice ben strutturato con i Javascript Design Patterns" href="http://www.upcreative.net/web-applications-codice-ben-strutturato-i-javascript-design-patterns/">Web Applications: scrivere codice ben strutturato con i Javascript Design Patterns</a></li>
</ul>
<h2>HTML5 Mobile App: perché usare un framework MVC</h2>
<p><strong>Un&#8217;applicazione Mobile realizzata in HTML5, CSS3 e Javascript rappresenta a tutti gli effetti una single-page-application.</strong></p>
<p>Anche le app più semplici, che magari sono costituite da 3 o 4 schermate, il più delle volte hanno una <strong><em>user-interface</em> molto complicata</strong>, a causa di tutte le richieste HTTP presenti, gli aggiornamenti del markup, le modifiche del DOM ecc. (senza contare che una schermata ne può avere di per sé altre al suo interno, come per esempio in una lista di elementi ).</p>
<p>Gli sviluppatori che scrivono &#8220;a naso&#8221; il loro codice, quindi senza utilizzare dei framework per la struttura logica dell&#8217;applicazione, inconsapevolmente creano delle <em>view</em>, dei <em>model</em>, e dei <em>controller</em>: l&#8217;unica differenza è che tutto ciò che fanno non è <strong>riusabile</strong>, ne tantomeno <strong>mantenibile</strong>.</p>
<p>In altre parole, finché il progetto rimane di piccole dimensioni riesce a &#8220;stare in piedi&#8221;, ma appena si complica anche solo di poco e diventa necessario aggiungere o modificare una parte dell&#8217;interfaccia, allora molto probabilmente cadrà in mille pezzi.</p>
<p>I Javascripts frameworks MVC, oltre a fornire robusti e stabili controlli come Models, Views e Controllers, forniscono anche una solida struttura, comprensiva di <strong>soluzioni testate negli anni da una gigantesca community di sviluppatori</strong>, che prima di noi hanno affrontato e risolto tutti gli stessi problemi logici e di programmazione in cui potremmo incappare nei nostri progetti.</p>
<p>Ciò può costituire un <strong>incredibile risparmio di tempo</strong> (se sei un web designer o sviluppatore sicuramente saprai cosa significa).</p>
<p style="text-align: center;"><img class="size-full wp-image-3825 aligncenter" alt="mvc-based-applications" src="http://www.upcreative.net/wp-content/uploads/2014/04/mvc-based-applications.jpg" width="690" height="300" /></p>
<p>Non so se hai mai notato applicazioni come <strong>Asana</strong>, <strong>Trello</strong>, <strong>Todoist</strong>, <strong>Wunderlist, </strong>ma anche <strong>Twitter</strong> o gli stessi <strong>Gmail</strong> e <strong>Google Drive </strong>(la lista sarebbe infinita): si tratta di <em>single page application</em> che caricano tutte le risorse come script, stili e views all&#8217;inizio, per poi modificare l&#8217;interfaccia con i dati che hanno già ottenuto, senza mai ricaricare la pagina, ma lasciando tutto il &#8220;duro lavoro&#8221; della gestione dei dati (creazione, modifica, eliminazione) al server, attraverso opportune richieste HTTP asincrone (le chiamate ajax).</p>
<p>Quindi, ricapitolando, <strong>se stai progettando un&#8217;applicazione che, come appunto tutte le HTML5 mobile app Ibride</strong> (ma anche le web application desktop), <strong>si serve di un servizio dati API di </strong><em><strong>back-end</strong>,</em> e si deve solo preoccupare di gestire le varie parti dell&#8217;interfaccia senza ricaricare mai la pagina (Single Page Application), allora <strong>l&#8217;impiego di un Javascript Framework MVC è proprio quello che ti serve</strong>.</p>
<p>Tuttavia, se stai progettando una semplice app in cui la generazione del markup risiede perlopiù nel server, mentre <em>lato-client</em> sono sufficienti pochi comandi jQuery per modificare il DOM del documento (come generalmente accade in un normale sito web), allora forse non ha senso impostare il tuo prossimo progetto basandolo su di un framework MVC, situazione in cui tutte le sue funzionalità sarebbero superflue.</p>
<p>Ma noi stiamo parlando di <strong>HTML5 Mobile App</strong> giusto?</p>
<blockquote><p>Il framework MVC è quello che fa al caso nostro.</p></blockquote>
<hr />
<p><em>La scelta giusta per #HTML #mobileapp &#8211; i #framework #MVC</em><br /><a href='https://twitter.com/share?text=La+scelta+giusta+per+%23HTML+%23mobileapp+-+i+%23framework+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>La difficoltà nell&#8217;apprendere la programmazione MVC</h2>
<p>A causa del vertiginoso progresso dei dispositivi <em>client</em> (in particolare di quelli mobili) che sta avvenendo in questi ultimi anni, il <strong>numero di sviluppatori javascript</strong> (quindi in particolare quelli che si occupano di interfacce <em>front-end</em>) <strong>è cresciuto a dismisura</strong>, e questo tipo di programmazione ha subìto come una &#8220;rinascita&#8221;.</p>
<p>Il tipo di linguaggio non è molto diverso da quello con il quale la maggior parte degli sviluppatori sono stati abituati a programmare in passato, sia per quanto riguarda la realizzazione di desktop software che di web application. Nel corso degli anni, infatti, gli sviluppatori sono stati abituati ad usare diversi tipi di linguaggi, come C++ o Java per i software client, o PHP, ASP, Python, ASP.NET ecc. per quelli <em>web-based</em>.</p>
<p style="text-align: center;"><img class="size-full wp-image-3821 aligncenter" alt="Linea-temporale-linguaggi-di-programmazione" src="http://www.upcreative.net/wp-content/uploads/2014/04/Linea-temporale-linguaggi-di-programmazione.jpg" width="690" height="300" /></p>
<p style="text-align: center;"><em>Linea temporale della nascita e dell&#8217;utilizzo nel corso degli anni dei linguaggi di programmazione più usati</em></p>
<p style="text-align: left;">
<p style="text-align: left;">Possiamo affermare che la logica dell&#8217; MVC per strutturare un&#8217;applicazione <strong>deriva effettivamente dalle precedenti generazioni di linguaggi</strong>, sin dagli anni 70.</p>
<p style="text-align: left;">Tuttavia, per tutti coloro che in questi ultimi anni hanno iniziato la propria carriera di web designers con linguaggi come ASP o PHP, è ancora molto difficile iniziare a comprendere il funzionamento di un&#8217;applicazione Javascript MVC.</p>
<p style="text-align: left;">E&#8217; normale.</p>
<p style="text-align: left;">E&#8217; normale soprattutto per quelli che fanno un utilizzo massiccio di codice <em>lato-server</em> per la generazione dell&#8217;interfaccia, i quali si trovano molto confusi, in particolare per quanto riguarda i concetti di <em>view</em> e di generazione di markup <em>lato-client</em>.</p>
<p style="text-align: left;">Effettivamente quello di comprendere la logica MVC è uno scoglio abbastanza grosso da abbattere, ma una volta superato questo ostacolo il divertimento è assicurato:</p>
<ul>
<li>velocità di scrittura</li>
<li>organizzazione tra le viste</li>
<li>riusabilità di una stessa vista da tutte le parti dell&#8217;applicazione</li>
<li>scalabilità del codice: l&#8217;applicazione è facilmente espandibile e riducibile senza alcun problema</li>
<li>estrema separazione del codice <em>lato-client</em> e codice <em>lato-server</em> &#8211; che costituisce un&#8217;altro elevato fattore di scalabilità e mantenibilità</li>
</ul>
<p>sono solo alcuni dei vantaggi che offre l&#8217;MVC.</p>
<h4>Sei mai stato a Mirabilandia?</h4>
<p>Periodicamente mi piace andare con i miei amici a Mirabilandia, che si trova a Ravenna, a sole due ore di macchina da dove vivo (Città di Castello, Perugia); nonostante i vari impegni, cerco di andarci nel mezzo della settimana, quando c&#8217;è meno gente ed è possibile divertirsi con le varie giostre senza fare code troppo elevate.</p>
<p>La giostra che mi piace di più è il <em>Katun </em>(l&#8217;hai mai provato?)<i>.</i></p>
<p style="text-align: center;"><img class="size-full wp-image-3822 aligncenter" alt="lo-scoglio-dell'MVC-Javascript" src="http://www.upcreative.net/wp-content/uploads/2014/04/lo-scoglio-dellMVC-Javascript.jpg" width="690" height="518" /></p>
<p style="text-align: center;"><em>Fonte della foto: <a href="https://www.flickr.com/photos/paolo_cst/3934985045/in/photolist-6ZHPXK-6ZHQZi-6ZHPT4-2soixK-6ZMPyf-2tfm8a-2tdwC4-2XMcon-2XMczP-2XRA1s-2XRBn9-2XMaG8-6MXhCo-6MXi5b-6MT6mT-6MT6gt-6MXhYG-6MT6i8-rWUgE-rWUgP-6ZHFHt-4UE8nz-59zw6h-7V3s7B-7V5Z2E-7V3qGr-7V3r1n-7V3zp2-7V3AmK-7V3AHZ-7V3Ch2-7V5WMu-7V5XwG-7V5YDq-7V6kjG-7V6v3Y-7V6DoC-7V6DQW-7V6FcQ-7V6FrQ-7V6GDJ-7V6JBU-7V6Kwd-7V6LmN-7V6PxA-7V6QT7-7V6Rud-7V6VqU-7V89KE-7V3hX4">Flickr</a></em></p>
<p>&nbsp;</p>
<p>Il<i> Katun </i>è progettato in modo tale che appena la giostra parte c&#8217;è una salita non indifferente, che viene percorsa molto piano, in modo da alimentare la paura del visitatore, prima di partire a grande velocità.</p>
<p>E ci riesce eccome! Ogni volta che salgo per la prima volta nel <em>Katun </em>dopo molto tempo, l&#8217;ansia e la paura durante quella salita sono alle stelle, ma appena la giostra parte il divertimento è assicurato da una grandissima scarica di adrenalina, tanto che appena finito il giro, mi fiondo di nuovo a fare la fila per farne un&#8217;altro.</p>
<p>Posso dire che vado a Mirabilandia solo per salire sul <em>Katun</em>.</p>
<blockquote><p>Imparare il framework MVC è un po come andare sul <em>Katun</em>, superata la salita iniziale, <strong>progettare interfacce web javascript e single page application diventa un vero e proprio divertimento</strong>, grazie alla semplicità e alla facilità con cui è possibile aggiornare le varie <em>views </em>in modo indipendente dagli altri componenti.</p></blockquote>
<hr />
<p><em>Programmare con #frameworks #MVC è come andare a Mirabilandia!</em><br /><a href='https://twitter.com/share?text=Programmare+con+%23frameworks+%23MVC+%C3%A8+come+andare+a+Mirabilandia%21&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>HTML5 Mobile App ed MVC: Conclusioni</h2>
<p>Visto che stiamo parlando di <strong>HTML5 Mobile App</strong> sviluppate in HTML5, CSS3 e <strong>Javascript</strong>, e che applicazioni di questo tipo sono a tutti gli effetti <em>single page application, </em>ovvero quei tipi di progetti in cui la pagina non viene mai ricaricata e tutte le operazioni di creazione, modifica e cancellazione dei dati viene delegata al server tramite un <strong>servizio di restful API</strong>, invito enormemente tutti gli sviluppatori client a <strong>cominciare ad interessarsi all&#8217;MVC</strong>.</p>
<p>Siccome, analogamente a molti altri campi (come quello del  <a title="Web Marketing - Business online" href="http://www.upcreative.net/category/marketing/">web marketing</a>), ci stiamo affacciando solo ora a questo aspetto della programmazione, mentre molti altri paesi lo stanno già facendo da tempo, e siccome il mondo delle <em>client web application </em>è in costante evoluzione, qualsiasi web designer e sviluppatore front-end dovrebbe secondo me considerare di inserire l&#8217;MVC nelle proprie skills, magari dedicando parte del proprio tempo a capirne il funzionamento.</p>
<p>E tu cosa ne pensi? Hai mai provato a sviluppare un tuo progetto Javascript con la logica dell&#8217;MVC? Scrivilo nei commenti!
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando la programmazione MVC insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c03e459-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c03e459-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/">HTML5 Mobile App: l’importanza del framework MVC</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Come creare una HTML5 Mobile App con Backbone.js</title>
		<link>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/</link>
		<comments>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/#comments</comments>
		<pubDate>Sat, 15 Mar 2014 13:29:25 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3432</guid>
		<description><![CDATA[<p>Ecco un'altro tutorial che spiega come realizzare HTML5 Mobile App: in questa guida ti mostro come servirsi del framework javascript Backbone.js per sviluppare una semplicissima applicazione che dispone alcuni articoli in un lista e permette di visualizzare i dettagli dell'oggetto selezionato. Il tutto attraverso animazioni CSS3 fluide e performanti e sfruttando la tecnica dell'accelerazione hardware.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare una HTML5 Mobile App con Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nella realizzazione di <strong>applicazioni mobile in HTML5, CSS3 e Javascript</strong> o qualunque tipo di <strong>web app</strong>, il modo in cui viene organizzata la struttura del progetto gioca un ruolo fondamentale dal punto di vista del risultato finale. Fattori come <strong>fluidità</strong>, <strong>prestazioni</strong> e qualità della <em>user-experience</em>, ma anche la velocità di sviluppo, sono incredibilmente influenzati dal mondo in cui suddividiamo i vari componenti dell&#8217;<strong>interfaccia</strong>.</p>
<p>Vale la pena pertanto dedicare un&#8217;attenzione particolare a questo aspetto.</p>
<p>Quando parliamo di &#8220;struttura&#8221; di un&#8217;applicazione ci riferiamo generalmente al modo in cui vengono organizzati gli elementi che la compongono per poter interagire in modo logico tra di loro. Uno dei pattern (o logiche di organizzazione) più comuni per gestire questi tipi di elementi è il <strong>pattern MVC</strong>, che basa la sua logica su elementi come <strong>viste</strong> (<em>view</em>), <strong>modelli</strong> (<em>model</em>) e <strong>collezioni di modelli</strong> (<em>collection</em>).</p>
<p><em>Per approfondire il discorso del pattern MVC e dei framework di cui ci possiamo servire per implementarli al meglio nei nostri progetti, ti consiglio di leggere questo mio articolo :</em></p>
<ul>
<li><em><a title="Creare applicazioni web: il pattern MVC ed i principali framework Javascript" href="http://www.upcreative.net/creare-applicazioni-web-il-pattern-mvc-ed-i-principali-mvc-javascript-frameworks/http://www.upcreative.net/creare-applicazioni-web-il-pattern-mvc-ed-i-principali-mvc-javascript-frameworks/">Creare applicazioni web: il pattern MVC ed i principali framework Javascript</a></em></li>
</ul>
<p>Ho realizzato oltre 10 applicazioni mobile per i miei clienti, tra cui due progetti personali (<a title="Tint Weather App e Dieta Si o NO - HTML5 Mobile App realizzate in HTML, CSS e Javascript" href="http://www.upcreative.net/html5-mobile-apps/">Tint Weather App e Dieta SI o NO?</a>) e gran parte di essi sono stati sviluppati con il pattern MVC grazie al Framework <strong><a title="Backbone.js - Javascript MVC Framework" href="http://www.upcreative.net/mvc-backbone-per-html5-css3-javascript-web-app/">Backbone.js</a> </strong>abbinato al <strong>sistema di templating</strong> di <a href="http://underscorejs.org">Underscore.js</a>, che rendono molto più semplice lavorare con la logica MVC.</p>
<p><em>Il sistema di templating è una libreria utile per la generazione di markup HTML via client (quindi tramite javascript) combinando dei dati (generalmente in formato JSON) con un template precedentemente compilato. Per avere maggiori informazioni sui sistemi di templating ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><span style="text-decoration: underline;"><em><a title="Web Application: i sistemi di templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">Web Application: i sistemi di templating e le migliori librerie</a></em></span></li>
</ul>
<p>In questo articolo ti voglio mostrare come poter realizzare una semplicissima HTML5 Mobile App di base, con Bakcbone.js e delle animazioni CSS3 fluide e performanti, che sfruttano la tecnica dell&#8217;<a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">accelerazione hardware</a>.</p>
<hr />
<p><em>Come creare una #HTML5 #MobileApp con #Backbonejs ed il pattern #MVC</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23HTML5+%23MobileApp+con+%23Backbonejs+ed+il+pattern+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>HTML5 Mobile App: l&#8217;obiettivo finale</h2>
<p>L&#8217;obiettivo di questo esperimento è quello di capire il meccanismo di <em>views</em>, <em>models</em> e <em>collection</em> realizzando una semplicissima mobile app che mostra una serie di articoli (o news) su una lista, permetta di aggiungere nuovi articoli programmaticamente, e visualizzare il dettaglio di quelli cliccati nella lista attraverso una view che a comparsa che &#8220;entra in scena&#8221; grazie ad <strong>animazioni CSS3 performanti</strong>.</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/HTML5-Mobile-App-Backbonejs.jpg"><img class="size-full wp-image-3438 aligncenter" alt="HTML5-Mobile-App-Backbonejs" src="http://www.upcreative.net/wp-content/uploads/2014/03/HTML5-Mobile-App-Backbonejs.jpg" width="690" height="400" /></a></p>
<blockquote><p>Se se un web designer e vorresti creare la tua applicazione in HTML5, CSS3 e Javascript, forse ti potrebbe interessare il mio e-book: <a title="HTML Mobile Accelerato - Guida per web designer su come realizzare HTML Mobile App in CSS3 e Javascript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a></p></blockquote>
<p style="text-align: center;">Trovi <strong>DEMO</strong> e <strong>DOWNLOAD</strong> in fondo all&#8217;articolo.</p>
<h2><span style="color: #000000;">Impostazione del documento</span></h2>
<p>Come prima cosa includiamo nel documento le librerie di cui abbiamo bisogno; in particolare all&#8217;interno del tag <em>&lt;body&gt; </em>inseriamo il link alla libreria <strong><a href="http://modernizr.com/">Modernizr</a></strong>, che ci servirà per gestire l&#8217;evento di fine animazione (&#8216;<em>endanimation</em>&#8216;) di entrata per la view che mostra i dettagli dell&#8217;articolo (per approfondire il discorso di come controllare le animazioni con <em>Modernizr</em>, di consiglio di leggere <a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">questo articolo</a>).</p><pre class="crayon-plain-tag">&lt;head&gt;
 &lt;script src="js/modernizr.custom.js"&gt;&lt;/script&gt;
&lt;/head&gt;</pre><p>
Proseguiamo includendo prima della chiusura del body (<em>&lt;/body&gt;</em>) le altre librerie:</p><pre class="crayon-plain-tag">&lt;!-- Includo gli scripts in fondo alla pagina per velocizzarne il caricamento --&gt;
 &lt;script src="js/jquery-1.10.2.min.js"&gt;&lt;/script&gt;
 &lt;!-- Includiamo anche underscore.js libreria a cui si appoggia backbone.js --&gt;
 &lt;script src="js/underscore.js"&gt;&lt;/script&gt; 
 &lt;script src="js/backbone.js"&gt;&lt;/script&gt;    
 &lt;!-- il file javascript del nostro esperimento--&gt;
 &lt;script src="js/demo.js"&gt;&lt;/script&gt;</pre><p>
<h2>Il markup HTML</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg"><img class="size-full wp-image-3440 aligncenter" alt="markup-html" src="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg" width="690" height="200" /></a></p>
<p>Vediamo ora come impostare il markup HTML all&#8217;interno del documento:</p><pre class="crayon-plain-tag">&lt;!-- header della schermata --&gt;
&lt;nav class="header"&gt;
	&lt;a class="left" href="http://www.upcreative.net/iscriviti-alla-newsletter/"&gt;&lt;i class="fa fa-globe"&gt;&lt;/i&gt; Ulteriori guide&lt;/a&gt;			
	&lt;button href="#" class="right" data-js="new"&gt;&lt;i class="fa fa-plus"&gt;&lt;/i&gt; Nuovo articolo&lt;/button&gt;
	&lt;h1 class="title"&gt;HTML5 Mobile App&lt;/h1&gt;
&lt;/nav&gt;

&lt;!-- wrapper il contenuto della lista --&gt;
&lt;section class="content"&gt;
	&lt;h1&gt;Articoli&lt;/h1&gt;		
	&lt;ul class="list-group" data-js="list"&gt;

	&lt;/ul&gt;
&lt;/section&gt;

&lt;!-- 
	template che useremo per la view del dettaglio della news: il browser ingnora questa parte di codice, poichè all'interno
	del tag 'script', ma possiamo invece risalire a questo template da javacript, tramite l'id
--&gt; 
&lt;script type="text/template" id="article-template"&gt;

	&lt;!-- header della schermata --&gt;
	&lt;nav class="header"&gt;
		&lt;button class="right" data-js="close"&gt;&lt;i class="fa fa-times-circle"&gt;&lt;/i&gt;&lt;/button&gt;
		&lt;h1 class="title"&gt;Dettalgi articolo&lt;/h1&gt;
	&lt;/nav&gt;

	&lt;!-- wrapper per le tab della schermata --&gt;
	&lt;section class="content"&gt;		

		&lt;h1&gt;&lt;%=title%&gt;&lt;/h1&gt;
		&lt;p&gt;Data: &lt;%=createdat.getDate()%&gt; / &lt;%=createdat.getMonth()+1%&gt; / &lt;%=createdat.getFullYear()%&gt;&lt;/p&gt;
		&lt;article&gt;

			&lt;!-- 
			il sistema di templating permette di usare i normali controlli Javascript, 
			in modo da poter controllare se è presente o meno l'immagine per l'articolo 
			--&gt; 

			&lt;%if(image){%&gt;
			&lt;img src="images/&lt;%=image%&gt;" /&gt;
			&lt;%}%&gt;

			&lt;%=article%&gt;

		&lt;/article&gt;

	&lt;/section&gt;

&lt;/script&gt;</pre><p>
Il codice che si trova all&#8217;interno del tag <em>&lt;script type=&#8221;text/template&#8221; id=&#8221;article-template&#8221;&gt;&lt;/script&gt;</em> rappresenta il markup che verrà utilizzato dalla view Backbone.js per la visualizzazione del dettaglio dell&#8217;articolo.</p>
<h2>Il file Javascript</h2>
<p>All&#8217;interno del nostro file Javascript (<em>demo.js</em>) come prima cosa salviamo in una variabile il nome dell&#8217;evento di fine animazione tramite Modernizr, che verrà utilizzato nella view del dettaglio dell&#8217;articolo:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine animazione, che cambia a seconda del browser */

var animEndEventNames = {
	'WebkitAnimation' : 'webkitAnimationEnd',
	'OAnimation' : 'oAnimationEnd',
	'msAnimation' : 'MSAnimationEnd',
	'animation' : 'animationend'
};
var animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ];</pre><p>
Il passo successivo è subito quello di definire il modello (<em>model</em>) Backbone per rappresentare ogni articolo, e la relativa collezione (<em>collection</em>):</p><pre class="crayon-plain-tag">//definiamo il modello di un articolo
var ArticleModel = Backbone.Model.extend({

    // Attributi predefiniti per il modello, che vengono usati 
    //se non passati al momento dell'inizializzazione    
    defaults: {
        title: "Nessun titolo",
        article: "",
        image: false,
        createdat: new Date()
    }, 
    //elimina l'istanza del model
    clear: function() {
        this.destroy();
    }

});

//definiamo la collection per la lista degli articoli
var ArticleList = Backbone.Collection.extend({ 
    //Impostiamo la referenza al model per questa collection.
    model: ArticleModel
});</pre><p>
Fatto ciò passiamo alla definizione delle <em>views</em> che controllano parte dell&#8217;interfaccia della nostra HTML5 Mobile App.</p>
<p>In particolare useremo due <em>views: </em></p>
<ul>
<li>la prima, ovvero quella che rappresenta l&#8217;app principale, è applicata al body e quindi non deve preoccuparsi di generare nuovo markup HTML, ma di usare quello che abbiamo già inserito nel documento</li>
<li>la seconda, ovvero quella che rappresenta il pannello che mostra i dettagli dell&#8217;articolo, si servirà della parte di markup che abbiamo precedentemente inglobato nel tag <em>&lt;script&gt; </em>con id &#8216;<em>article-template</em>&#8216;.</li>
</ul>
<h4>View generale</h4>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-list-view.jpg"><img class="size-full wp-image-3439 aligncenter" alt="html5-mobile-app-list-view" src="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-list-view.jpg" width="320" height="505" /></a></p>
<pre class="crayon-plain-tag">//definiamo la view dell'app intera
var AppView = Backbone.View.extend({

    //a differenza della view di dettaglio dell'articolo, dove impostavamo 
    //quale elemento generare al'inizializzazione, qui comunichiamo 
    //quale oggetto già aesistente utilizzare come markup
    el: "body",

    // Deleghiamo gli eventi per la creazione di un nuovo 
    //articolo (il funzionamento ed i selettori sono come quelli di jQuery).
    events: {
    	//evento //selettore 	 //funzione da eseguire
        "click [data-js=list] a":  "showArticle",
        "click [data-js=new]":  "newArticle"
    },

    // Nella funzione di inizializzazione osserviamo l'evento add 
    //della collection legata a questa view, per richiamare la funzione che 
    // inserisce un nuovo elemento nella lista DOM
    initialize: function() {

        //deleghiamo gli eventi della collection alle relative funzioni 

        //evento che si verifica quando un nuovo model viene aggiunto alla collection
        // l'ultimo parametro è una funzione alla quale viene passata l'istanza del model appena aggiunto
        // alla collection
        this.listenTo(this.collection, 'add', this.addArticle);

        //richiamiamo la funzione che aggiunge gli elementi all alla lista
        this.addElements();
    },

    // funzione che crea una nuova view ed aggiunge 
    // l'elemento generato dal render alla lista, in base al modello passato ('articleModel')
    addArticle: function(articleModel) {           
        //qui, per mostrare una soluzione diversa, generiamo del markup senza ricorrere ad una view a se stante
        var compiledTemplate = _.template('&lt;a href="#" class="list-group-item"&gt;&lt;%=title %&gt; - &lt;span class="text-muted"&gt;&lt;%=createdat.getDate()%&gt; / &lt;%=createdat.getMonth()+1%&gt; / &lt;%=createdat.getFullYear()%&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;');
        //aggiungiamo alla lista il markup generato dal sistema di templating, passando i dati in formato Json del model
        this.$("[data-js=list]").append( compiledTemplate(articleModel.toJSON()) );
    },

    showArticle: function(e) {  
    	e.preventDefault();
    	var item = $(e.currentTarget), 					//riprendiamo l'oggetto jQuery del link appena cliccato
    		index = item.index(),	   					//riprendiamo l'indice sulla lista dell'oggetto appena cliccato
    		articleModel = this.collection.at(index);   //riprendiamo il model dalla collection degli articoli in base all'indice

        //creaiamo una nuova istanza della view dell'articolo passando come model quello dell'articolo cliccato
        var view = new ArticleView({model: articleModel});
        //aggiungiamo all'elemento di questa view (quindi il body della pagina) l'oggetto DOM generato dalla funzione di render della view appena istanziata
        this.$el.append(view.render().el);
        //richiamiamo il metodo "show()" interno della view appena creata per avviare l'animazione di entrata
        view.show();    
    },

    // Aggiunge nella lista tutti gli elementi della collection di individui.
    addElements: function() {
        this.collection.each(this.addArticle);
    },

    newArticlesCoounter: 0,
    newArticle: function(){
    	this.newArticlesCoounter++;

    	//creo un nuovo model per l'articolo
    	var newModel = new ArticleModel({
    		title: "Nuovo articolo "+this.newArticlesCoounter,
    		article: "BOOM! Corpo nuovo articolo.."
    	});
    	//aggiungo il model alla collection, in modo da innescare la funzione 'addArticle', 
    	//come stabilito all'interno della funzione 'initialize' di questa view
    	this.collection.add(newModel);

    }
});</pre>
<h4> View di dettaglio</h4>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-details.jpg"><img class="size-full wp-image-3441 aligncenter" alt="html5-mobile-app-details" src="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-details.jpg" width="320" height="505" /></a></p>
<pre class="crayon-plain-tag">//view per il dettaglio dell'articolo
var ArticleView = Backbone.View.extend({

    // diciamo a backbone che deve inserire il markup del template di questa view all'interno di un oggetto dal tag 'section'
    tagName:  "section",

    //settiamo la classe che deve avere il tag 'section'
    className: "article-wrapper",

 	//impostaiamo l'id del template da cui generare il merkup di questa view
    template: "#article-template",

    //impostazione degli eventi per l'interazione dell'utente (il funzionamento ed i selettori sono come quelli di jQuery).
    events:{
    	//evento //selettore 	 //funzione da eseguire
    	"click [data-js=close]": "hide"
    },

 	//la funzione che viene eseguita al momento dell'inizializzazione di questa view
    initialize: function() {
        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        //rimuoviamo il modal dal DOM quando esso viene nascosto
        this.$el.on("hidden.bs.modal", function(){
            this.remove();
        });
    },

    // Effettua il render del markup della view per il dettaglio dell'articolo, in base al modello con cui questa view è stata inizializzata.
    render: function() {
        $(this.el).html(this.template(this.model.toJSON()));        
        return this;
    },

 	//funzione che mostra l'elemento DOM nell'interfaccia
    show: function(){
    	//aggiungendo la classe 'show-article' al contenitore di questa view 
    	//(elemento 'section.article-wrapper') inneschiamo l'animazione di entrata
        this.$el.addClass("show-article");        
    },
    //funzione che nasconde l'elemento DOM dall'interfaccia
    hide: function(){
    	var _this = this;
    	//aggiungendo la classe 'hide-article' al contenitore di questa view 
    	//(elemento 'section.article-wrapper') inneschiamo l'animazione di uscita
        _this.$el.addClass("hide-article");        
        //al termine della'animazione, rimuoviamo l'oggetto DOM dal documento tramite il metodo backbone 'remove()', in modo da alleggerire il lavoro 
        //della memoria centrale del dispositivo, contribuendo a rendere la nostra applicazione più fluida e performante 
        _this.$el.on( animEndEventName ,function(){
        	_this.remove();
        });        
    }

});</pre>
<h2>Il codice CSS</h2>
<p>Per quanto riguarda gli <strong>stili CSS3</strong>, abbiamo utilizzato delle posizioni assolute per elementi come l&#8217;<em>header, </em>il contenitore della lista ed il tag &lt;<em>section&gt; </em>legato alla view del dettaglio. A quest&#8217;ultimo abbiamo inoltre applicato la tecnica dell&#8217;<strong>accelerazione hardware</strong> (o <em>hardware acceleration</em>) tramite l&#8217;istruzione &#8216;t<em>ransform: translate3d(0,0,0)</em>&#8216;, corredata con i vari <em>prefix</em> per la compatibilità browser, che renderà la nostra HTML5 Mobile App più fluida e performante.</p>
<p>Così facendo, ci assicuriamo delle animazioni fluide e performanti, nel momento in cui all&#8217;elemento &#8216;<em>section.article-wrapper</em>&#8216; vengono aggiunte le classi che le &#8216;innescano': &#8216;.<em>show-article</em>&#8216; e &#8216;.<em>hide-article</em>&#8216;.<em></em></p>
<p>Ecco il codice necessario per realizzare l&#8217;effetto di entrata:</p><pre class="crayon-plain-tag">section.article-wrapper {

  /*stili per il posizionamento*/
  position: fixed;
  left: 0;
  top: 0;      
  right: 0;    
  bottom:0;  
  z-index: 30;

  visibility: hidden;

  /* migliora le prestazioni prevenendo il render della parte 'posteriore' dell'elemento */
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
   backface-visibility: hidden;

   /* 
   	forziamo l'utilizzo della tecnica dell'accelerazione hardware per avere aniamzioni più fluide e reattive;
   	mpostando come elemento scatenante per l'effetto la proprietà 'translate3d'
   	il processo di rendering per l'elemento sarà delegato alla GPU (memoria grafica) 
   	prima, dopo e durante l'animazione
   */
   -webkit-transform: translate3d(0,0,0);
   -moz-transform: translate3d(0,0,0);
   -ms-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);               
}    

section.article-wrapper.show-article{

	/*
	nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'show-article'
	innescchiamo l'animazione di entrata specifcandola in corrispondenza dell'attributo 'animation'
	*/

    -webkit-animation: showFromBottom .25s ease both;
    -moz-animation: showFromBottom .25s ease both;
    animation: showFromBottom .25s ease both;

    visibility: visible;
}

section.article-wrapper.hide-article{
    /*
      nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'hide-article'
      inneschiamo l'animazione di uscita specificandola in corrispondenza dell'attributo 'animation'
    */
    -webkit-animation: hideToBottom .25s ease both;
    -moz-animation: hideToBottom .25s ease both;
    animation: hideToBottom .25s ease both;
}

/* definizione delle animazioni di entrata e di uscita per la view dell'articolo: muoviamo sempliemente l'elemento in verticale sull'asse delle ordinate */

/*animazione di entrata*/
@-webkit-keyframes showFromBottom {
    from { -webkit-transform: translateY(100%); }
}
@-moz-keyframes showFromBottom {
    from { -moz-transform: translateY(100%); }
}
@keyframes showFromBottom {
    from { transform: translateY(100%); }
}

/*animazione di uscita*/
@-webkit-keyframes hideToBottom {
    to { -webkit-transform: translateY(100%); }
}
@-moz-keyframes hideToBottom {
    to { -moz-transform: translateY(100%); }
}
@keyframes hideToBottom {
    to { transform: translateY(100%); }
}</pre><p>
&nbsp;</p>
<h2>Ultimo step: avviamo la nostra HTML5 Mobile App!</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/start-HTML5-Mobile-App.jpg"><img class="size-full wp-image-3442 aligncenter" alt="start-HTML5-Mobile-App" src="http://www.upcreative.net/wp-content/uploads/2014/03/start-HTML5-Mobile-App.jpg" width="690" height="400" /></a></p>
<p>Ora che  abbiamo tutti i pezzi del puzzle possiamo procedere ed avviare la nostra applicazione: per instanziare i nostri componenti ed avviare l’applicazione, torniamo sul file &#8216;<em>demo.js</em>&#8216; e ci serviremo del seguente codice javascript per inserire nella <em>collection</em> qualche articolo predefinito, con tanto di titolo, immagine, corpo dell&#8217;articolo e data, in modo da visualizzarli subito nella lista iniziale:</p><pre class="crayon-plain-tag">$(function(){

	//creiamo una nuova istanza per la collection degli articoli con 4 models iniziali
    var articles = new ArticleList([
        {
            title: "App su upCreative.net",
            image: "1.jpg",
            article: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
        },
        {
            title: "Secondo articolo su upCreative.net",
            image: "2.jpg",
            article: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur"
        },
        {
            title: "Articolo senza immagine 3",
            article: "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quarto articolo sulla  lista",
            image: "3.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        }
    ]);
    //creiamo una nuova istanza per la view dell'applicazione 
    //principale associandogli la collection
    var app = new AppView({
        collection : articles
    });

});</pre><p>
BOOM! L&#8217;esperimento è pronto, di seguito puoi consultare la demo o poterti divertire direttamente con i sorgenti.
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni, demo e download</h2>
<hr />
<p><em>Come creare una #HTML5 #MobileApp con #Backbonejs ed il pattern #MVC</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23HTML5+%23MobileApp+con+%23Backbonejs+ed+il+pattern+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Tramite questa demo è possible intuire, almeno in parte, le potenzialità che backbone ed il pattern MVC mettono a disposizione. Come avrai potuto notare ogni <em>view</em> agisce in modo &#8220;<strong>non intrusivo</strong>&#8221; nei confronti degli altri elementi: ognuna di esse &#8220;resta in ascolto&#8221; ad eventuali modifiche apportate al <em>model</em> o alla <em>collection</em> associati, attraverso l&#8217;istruzione &#8216;<em>this.listenTo</em>&#8216;.</p>
<p>Quando ciò accade, è possibile effettuare le relative modifiche al DOM della <em>view</em> senza doverle richiamare da parti esterne dell&#8217;applicazione ma agendo del tutto <strong>autonomamente</strong>. Di conseguenza l&#8217;applicazione stessa risulta maggiormente <strong>scalabile</strong> ed <strong>estendibile</strong> secondo le proprie esigenze.</p>
<p>E tu cosa ne pensi? Hai mai utilizzato Backbone per i tuoi progetti? Fammelo sapere lasciando un commento!
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Aiutami a condividere la risorsa per ottenere la <strong>demo</strong> ed il <strong>download</strong>:</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c04fe7b-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c04fe7b-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare una HTML5 Mobile App con Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</title>
		<link>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/</link>
		<comments>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/#comments</comments>
		<pubDate>Thu, 20 Feb 2014 09:30:44 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3304</guid>
		<description><![CDATA[<p>La realizzazione di HTML5 Mobile App (ibride e non) permette di distribuire un singolo prodotto su diverse piattaforme, e renderlo accessibile per più sistemi operativi (iOS, Android e Windows Phone). Tuttavia molti si imbattono nel problema delle performance. In questo articolo ti mostro 6 utili tecniche per incrementare notevolmente le performance delle tue applicazioni mobile.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nello sviluppo di una <strong>HTML5 mobile app</strong> le <strong>performance</strong> dell&#8217;interfaccia, dei suoi componenti, e delle <strong>animazioni CSS3</strong> ad essi legate è un fattore che può fare la differenza nel risultato finale del prodotto, determinandone la qualità ed il relativo successo.</p>
<p>Per realizzare una <em>user-experience</em> piacevole è necessario fare in modo che l&#8217;applicazione sia reattiva, presenti animazioni prive di scatti o salti di frame, e che generi il <strong>markup HTML di ogni schermata</strong> nel minor tempo possibile.</p>
<p><em>Forse ti potrebbero interessare gli articoli sulle performance e prestazioni di animazioni CSS3 per le HTML5 Mobile App pubblicati su <a title="upCreative.net - Web design Mobile App e Content Marketing" href="http://www.upcreative.net">upCreative.net</a>:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le animazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le animazioni</a></em></li>
<li><em><a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile app fluide con layer e hardware acceleration</a></em></li>
</ul>
<p><em>Oppure questi articoli che ho scritto per <a title="YourInspirationWeb.com" href="http://www.yourinspirationweb.com">YourInspirationWeb.com</a>:</em></p>
<ul>
<li><em><a title="HTML5 Mobile app: transizioni e animazioni CSS3 - parte 1" href="http://www.yourinspirationweb.com/2014/01/09/html5-mobile-app-transizioni-ed-animazioni-css3-parte1/">HTML5 Mobile app: transizioni e animazioni CSS3 &#8211; parte 1</a></em></li>
<li><em><a title="HTML5 Mobile app: transizioni e animazioni CSS3 - parte 2" href="http://www.yourinspirationweb.com/2014/01/24/html5-mobile-app-transizioni-e-animazioni-css3-parte-2/">HTML5 Mobile app: transizioni e animazioni CSS3 &#8211; parte 2</a></em></li>
</ul>
<p>Ma come è possibile raggiungere tali obiettivi?</p>
<p>In questo articolo voglio condividere con te 6 consigli e tecniche che ho imparato durante le mie esperienze nella realizzazione di numerose HTML5 Mobile App, tra cui due progetti personali, <a title="Tint e Dieta SI o NO? - HTML5 Mobile App realizzate con CSS3 e Javascript" href="http://www.upcreative.net/html5-mobile-apps/"><strong>Tint e Dieta SI o NO?</strong></a>.</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/Html5-mobile-app-6-teniche-per-le-performance.jpg"><img class="size-full wp-image-3333 aligncenter" alt="Html5-mobile-app-6-teniche-per-le-performance" src="http://www.upcreative.net/wp-content/uploads/2014/02/Html5-mobile-app-6-teniche-per-le-performance.jpg" width="690" height="400" /></a></p>
<hr />
<p><em>Le 6 migliori tecniche per aumentare le performance di una #HTML5 #MobileApp #webdesign</em><br /><a href='https://twitter.com/share?text=Le+6+migliori+tecniche+per+aumentare+le+performance+di+una+%23HTML5+%23MobileApp+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5>Crea la tua mobile app in HTML, CSS3 e Javascript</h5>
<p>Utilizzando queste tecniche insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript. Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c06b9eb-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c06b9eb-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div><div class="g-hr size_small">
						<span class="g-hr-h">
							<i class="fa fa-star"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<span style="font-size: 2em; line-height: 1.2em;">1. Non generare (mai) il tuo markup HTML5 sul server</span></p>
<p>Molti mi chiedono come implementare il codice (php, asp, asp.net ecc.)  per la generazione dinamica del markup HTML5 dell&#8217;interfaccia sul server; tuttavia proprio il fatto che il markup venga generato <em>lato-server</em> rappresenta un&#8217;approccio sbagliato.</p>
<p>Il motivo? <strong>Servirsi di codice <em>lato-server</em> per generare il proprio markup è chiaro un fattore di lentezza</strong>.</p>
<p>Perché effettuare una chiamata remota per ottenere dei tipi di dati (come il markup) che possono essere benissimo inclusi nei file dell&#8217;applicazione?</p>
<p>Le uniche chiamate ajax che dovresti effettuare sono quelle il cui scopo è ottenere informazioni (in <em>XML</em>, <em>json</em> ecc) o provvedere al salvataggio di quelle ottenute dall&#8217;applicazione.</p>
<p>Per generare del markup  direttamente dall&#8217;applicazione in base alle informazioni ottenute dal <em>server</em>, possiamo procedere in due modi. Vediamoli brevemente, supponendo di aver ottenuto questo tipo di dati in formato <em>json</em>:</p><pre class="crayon-plain-tag">/* Informazioni restituite dal server */
var team = [
	{
		"name": "Giacomo",
		"occupation": "Developer"
	},
		"name": "Luigi",
		"occupation": "Designer"
	},
	{
		"name": "Mario",
		"occupation": "Web Marketer"
	},
	{
		"name": "Francesco",
		"occupation": "CEO"
	}
];</pre><p>
<h4> a) &#8211; Genera il tuo markup direttamente da javascript</h4>
</p><pre class="crayon-plain-tag">/*generiamo il markup all'interno di una variabile*/

var markup = '&lt;ul&gt;';
for(var i=0;i&lt;team.length;i++){
	var member = team[i];
	markup += '&lt;li&gt;'+member.name+' - '+member.occupation+'&lt;/li&gt;'
}
markup += "&lt;/ul&gt;";

/* inseriamo il markup nel contenitore desiderato */
$("#list-wrapper").append(markup);</pre><p>
<h4>b) &#8211; Usa un sistema di Templating</h4>
<p>Ecco come effettuare il render dinamico del markup con il sistema di templating <strong>EJS</strong></p>
<p>File list.ejs:</p><pre class="crayon-plain-tag">&lt;li&gt;&lt;%=name%&gt; - &lt;%=occupation%&gt;&lt;/li&gt;</pre><p>
Javascript:</p><pre class="crayon-plain-tag">// carichiamo il file list.ejs in modo asincrono (da un file all'interno dell'applicazione)
var template = new EJS({url: '/list.ejs'});
//generiamo il markup
$("#list-wrapper").html(template.render(team));</pre><p>
<em>Per sapere di più sui sistemi di templating ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="I sistemi di Javascript Templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">I sistemi di Javascript Templating e le migliori librerie</a></em></li>
</ul>
<p>Ricorda, stiamo parlando si una <a title="Applicazioni a pagina singola" href="http://en.wikipedia.org/wiki/Single-page_application">Single page app</a> e non di un normale sito web.</p>
<hr />
<p><em>Non generare mai il markup della tua #HTML5 #mobileapp sul server</em><br /><a href='https://twitter.com/share?text=Non+generare+mai+il+markup+della+tua+%23HTML5+%23mobileapp+sul+server&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>2. Limita i dati tra server e client</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/limita-dati-tra-server-e-client.jpg"><img class="size-full wp-image-3310 aligncenter" alt="limita-dati-tra-server-e-client" src="http://www.upcreative.net/wp-content/uploads/2014/02/limita-dati-tra-server-e-client.jpg" width="690" height="211" /></a></p>
<p>Limitare la quantità di dati passati tra <em>server</em> e <em>client può </em>migliorare notevolmente l&#8217;esperienza utente, accorciando i tempi di attesa. Ecco come poterlo fare:</p>
<ol>
<li><strong>Salvare i dati già ottenuti in una <em>cache</em> locale</strong>: ci possiamo servire per esempio di funzionalità come l&#8217;<strong>HTML5 <a href="http://www.w3schools.com/html/html5_webstorage.asp">l</a><em><a href="http://www.w3schools.com/html/html5_webstorage.asp">ocalStorage</a>, un </em><a href="http://www.sqlite.org/">database <em>SQLite</em></a><em>, o </em></strong>il salvataggio su un <strong>file locale,</strong> <em></em>per memorizzare dati che già abbiamo ottenuto in precedenza, come per esempio una stessa news selezionata per la seconda volta.</li>
<li><strong>Limitare il traffico dati allo stretto necessario</strong>: non ha senso richiedere al server più informazioni di quelle che ci servono; potremo per esempio impostare le nostre API in modo tale che esse ci restituiscano solo dati che ancora non abbiamo. Ecco un piccolo esempio di una possibile chiamata <em>Ajax</em> che richiede al <em>server</em> solo delle news non ancora ricevute:<br />
<pre class="crayon-plain-tag">$.ajax({
	url: 'http://localhostAPI/news/',
	data: { lastid: 115},
	success: function (news) {
		/*
                nella variabile news saranno visualizzate 
                solo le news che non abbiamo ancora mai ricevuto,
                ovvero quelle con id più recente di 115, che è corrispondente
                all'ultima news caricata nella cache
                */
	}
});</pre>
&nbsp;</li>
</ol>
<hr />
<p><em> Limita i dati trafficati tra server e client #html5 #mobileapp performance</em><br /><a href='https://twitter.com/share?text=+Limita+i+dati+trafficati+tra+server+e+client+%23html5+%23mobileapp+performance&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>3. Non attendere di ricevere informazioni dal server per visualizzare il tuo markup HTML</h2>
<p>Non attendere di ricevere i dati dal <em>server</em> per visualizzare una schermata (<em>view</em>). Una buona pratica è quella di visualizzare la <em>view</em>, effettuare la chiamata <em>ajax</em> e, una volta ricevuti i dati, aggiornare la schermata:</p><pre class="crayon-plain-tag">/*
funziome di visualizzazione della schermata
*/

var template = new EJS({url: '/news.ejs'});
function visualizzaSchermata(data){
	if(typeof data!='undefined')	
		$("#news-wrapper").html(template.render(team));
	else
		$("#news-wrapper").html(template.render({}));
}

/*effettuo il render della schermata senza le news*/
visualizzaSchermata();

$.ajax({
	url: 'http://localhostAPI/news/',
	data: { lastid: 115},
	success: function (news) {
		/*effettuo il render della schermata passando le news come dati */
		visualizzaSchermata(news);
	}
});</pre><p>
Ho adottato questa tecnica per la realizzazione di <a title="Tint Weather App - Iphone App in HTML5, CSS3 e Javascript" href="https://itunes.apple.com/it/app/tint-weather/id742161441?mt=8"><strong>Tint Weather App</strong></a>, dove per ogni schermata relativa ad una località ho dapprima effettuato il <em>render</em> della <em>view</em> mostrando un&#8217;animazione CSS3 di loading. Quindi ho effettuato la chiamata <em>ajax</em> per reperire i dati meteo dal <em>server</em> e, una volta ottenuti, ho aggiornato la <em>view</em> mostrandoli all&#8217;utente.</p>
<p style="text-align: center;"><span style="color: #ff0000;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/HTML5-render-view.jpg"><img class="size-full wp-image-3311 aligncenter" alt="HTML5-render-view" src="http://www.upcreative.net/wp-content/uploads/2014/02/HTML5-render-view.jpg" width="690" height="211" /></a></span></p>
<h2>4. Usa animazioni CSS3 performanti</h2>
<p>Le prime volte che mi dilettavo nella realizzazione di HTML5 Mobile App, mi servivo di <em>framework</em> come jQuery Mobile, jqTouch o simili, che basavano le loro animazioni su metodi jQuery come l&#8217;<em>animate</em> ( <em><strong>$(&#8220;#element&#8221;).animeate() </strong></em>), i quali non sfruttano la <em><strong><a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">tecnica dell&#8217;accelerazione hardware</a>,</strong></em><strong> </strong>supportata da tutti i browser mobile.</p>
<p>L&#8217;<em>hardware acceleration</em> permette di delegare il rendering degli elementi dell&#8217; interfaccia dalla memoria centrale alla GPU, attraverso i <em><strong>livelli grafici,</strong> </em>alleggerendone notevolmente il carico di lavoro.</p>
<hr />
<p><em>Usa animazioni CSS3 performanti nello sviluppo di un #HTML5 #MobileApp</em><br /><a href='https://twitter.com/share?text=Usa+animazioni+CSS3+performanti+nello+sviluppo+di+un+%23HTML5+%23MobileApp&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>5. Elimina il ritardo di 300ms del browser</h2>
<p>Hai mai notato, navigando un sito web con il tuo dispositivo mobile, che tra il touch su un link e l’inizio del caricamento della pagina successiva, oppure tra il touch su un input box ed il relativo focus, passa qualche millisecondo di tempo?<br />
Ciò è dovuto al fatto che quando l’utente esegue il tap su un bottone, i browser mobile <strong>aspettano circa 300ms</strong> prima che facciano scattare l’evento del click.</p>
<p>Ma perché?</p>
<p>Il browser vuole essere sicuro che l’utente non voglia eseguire un double tap, in modo da distinguere l’evento del touch singolo da quello del doppio touch.</p>
<p>Visto che il nostro intento è quello di realizzare una <strong>HTML5 Mobile App fluida e reattiva</strong>, dobbiamo assolutamente risolvere questo problema (sicuramente avrai notato che nessuna applicazione nativa presenta quel fastidiosissimo delay, e noi dobbiamo fare altrettanto).</p>
<p>Per eliminare tale ritardo ci basterà includere nel  progetto la libreria <a title="FastClick.js - Libreria per eliminare il ritardi di 300ms dai browser" href="https://github.com/ftlabs/fastclick"><strong>FastClick.js</strong></a>, grazie alla quale sarà sufficiente inserire nel codice Javascript la seguente sintassi:</p><pre class="crayon-plain-tag">window.addEventListener('load', function() {
    FastClick.attach(document.body);
}, false);</pre><p>
<hr />
<p><em>Rendi le tue #HTML5 #MobileApp fluide e reattive con #FastClick</em><br /><a href='https://twitter.com/share?text=Rendi+le+tue+%23HTML5+%23MobileApp+fluide+e+reattive+con+%23FastClick&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>6. Ottimizza le immagini</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/html5-mobile-app-ottimizza-immagini.jpg"><img class="size-full wp-image-3314 aligncenter" alt="html5-mobile-app-ottimizza-immagini" src="http://www.upcreative.net/wp-content/uploads/2014/02/html5-mobile-app-ottimizza-immagini.jpg" width="690" height="211" /></a></p>
<p>Molti sottovalutano questo importante aspetto.</p>
<p>Il caricamento delle immagini rappresenta un elemento determinante per le performance di ogni HTML5 Mobile App: il modo in cui le implementiamo nell&#8217;interfaccia incide notevolmente sulla <em>user-expericence </em>finale.</p>
<p>Ecco alcuni punti da seguire per utilizzare correttamente le immagini:</p>
<ul>
<li><strong>Usa gli <a title="CSS Spritesheet" href="http://www.w3schools.com/css/css_image_sprites.asp">spritesheet</a> dove possibile</strong>: essi fanno in modo che tutte le immagini utilizzate nell&#8217;applicazione vengano caricate in una sola volta, evitando il load singolo solamente nel momento in cui sono visualizzate.</li>
<li><strong>Non ridimensionare le immagini</strong>: utilizza immagini che hanno le stesse dimensioni con cui saranno visualizzate; richiama diverse versioni della stessa immagine a seconda della risoluzione del dispositivo. Non ridimensionare le immagini con proprietà CSS o attributi HTML.</li>
<li><strong>Se possibile appoggiati ad un server CDN per l&#8217;hosting delle immagini che richiami via server</strong>: esistono diversi hosting CDN gratuiti da poter usare come spazio in cui salvare le tue immagini.<span style="line-height: 1.5em;"><br />
</span></li>
<li><strong>Prevedi delle fallback per gli errori di caricamento</strong>: se un&#8217;immagine non viene trovata (errore 404) o si verifica un errore di caricamento, è sempre opportuno visualizzarne una predefinita, o magari evitare di inserire il relativo tag HTML nel markup dell&#8217;interfaccia. Ecco un esempio:<br />
<pre class="crayon-plain-tag">&lt;script type="text/javascript"&gt;
function imgError(image) {
    image.onerror = "";
    image.src = "/images/noimage.gif";
    return true;
}
&lt;/script&gt;

&lt;img src="image.png" onerror="imgError(this);"/&gt;</pre>
&nbsp;</li>
</ul>
<hr />
<p><em>Ottimizza le immagini per aumentare le performnce #HTML5 #MobileApp</em><br /><a href='https://twitter.com/share?text=Ottimizza+le+immagini+per+aumentare+le+performnce+%23HTML5+%23MobileApp&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Realizzare applicazioni mobile in HTML5, CSS3 e Javascript rappresenta un grande vantaggio, in quanto permette sviluppare un <strong>singolo prodotto da poter distribuire su diverse piattaforme.</strong> Tuttavia uno dei possibili difetti di questo approccio è proprio la possibilità di avere scarse performance: diventa quindi indispensabile eliminare tale eventualità.</p>
<p>Adottando la serie di tecniche esposte in questo articolo posso affermare di aver incrementato le performance delle mie HTML5 Mobile App, ed averne incredibilmente ridotto la differenza rispetto alle applicazioni Native.</p>
<p>E tu? Hai qualche consiglio o tecnica da suggerirmi? Fammelo sapere lasciando un commento!
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando queste tecniche insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c06f197-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c06f197-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Twitter Bootstrap search box responsive con animazioni CSS3</title>
		<link>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/</link>
		<comments>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/#comments</comments>
		<pubDate>Wed, 05 Feb 2014 10:03:15 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Coding Gallery]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Modernizr]]></category>
		<category><![CDATA[Search box]]></category>
		<category><![CDATA[twitter bootstrap]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3215</guid>
		<description><![CDATA[<p>Tutorial su come rendere originale il proprio sito web sviluppato con Twitter Bootstrap, realizzando un'esperienza di ricerca originale ed accattivante, il tutto utilizzando animazioni CSS3 fluide e performanti. Il risultato è reso compatibile con tutti i tipi di browser grazie alla tecnica del progressive enhancement (miglioramento progressivo).</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-search-box-responsive/">Twitter Bootstrap search box responsive con animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<a title="Twitter Bootstrap - Framework Javascript e CSS per la realizzazione di siti web e applicazioni" href="http://getbootstrap.com"><em>Twitter Bootstrap</em></a> rappresenta un&#8217;ottima risorsa per tutti coloro che operano nell&#8217;ambito del web design, ed in rete si possono trovare migliaia di siti web e applicazioni realizzate con questo utilissimo framework. Se però da una parte fa senz&#8217;altro comodo potersi appoggiare ad un sistema solido ed aggiornato, crossbrowser e responsive, dall&#8217;altra è altrettanto vero che, in un mare di progetti &#8220;<em>Bootstrap-based</em>&#8220;, diventa  necessario distinguersi dagli altri.</p>
<p>Uno dei modi più utili per farlo è quello di implementare delle <strong>funzionalità originali sui componenti dell&#8217;interfaccia.</strong> In un precedente articolo ti ho mostrato come realizzare uno <strong>slide menu originale con animazioni CSS3</strong>, con tanto di progressive enhancement, ovvero quella tecnica che permette di applicare alle funzionalità dei componenti un <strong>miglioramento progressivo a seconda del browser, tramite CSS3:</strong></p>
<ul>
<li><a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">CSS3 slide panel: tutorial su come realizzare un menu stile mobile</a></li>
</ul>
<h2>Twitter Bootstrap Search Box</h2>
<p>In questo articolo ti voglio mostrare come rendere <strong>originale</strong> ed <strong>accattivante</strong> l&#8217;<strong>esperienza di ricerca</strong> all&#8217;interno di un sito web o applicazione, sia essa desktop o mobile. Ciò che infatti realizzeremo è un search box con effetto <em>slide-down, </em>la cui caratteristica principale è quella di essere <strong>totalmente responsive</strong>, in quanto ci serviremo di Twitter Bootstrap.
		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/02/twitter-bootstrap-search-box-responsive.jpg" class="attachment-full" alt="twitter-bootstrap-search-box-responsive" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/05022014Twitter-Bootstrap-search-box-responsive/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3242/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Il risultato dell&#8217;esperimento potrà essere pertanto implementato anche su applicazioni Mobile, anche per il fatto che utilizzeremo delle <strong>animazioni CSS3 altamente performanti</strong> per i dispositivi che le supportano, mentre ricorreremo a quelle meno performanti nel caso di browser più datati.<em><br />
</em></p>
<hr />
<p><em>Realizzare un search box #crossbrowser e #responsive con #TwitterBootstrap #webdesign</em><br /><a href='https://twitter.com/share?text=Realizzare+un+search+box+%23crossbrowser+e+%23responsive+con+%23TwitterBootstrap+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/twitter-bootstrap-search-box-responsive/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>L&#8217;obiettivo è quello di far comparire dall&#8217;alto il campo di ricerca nel momento in cui viene cliccata l&#8217;apposita icona, in modo da coprire completamente la barra di navigazione. Quando si verifica l&#8217;evento &#8220;<em>blur</em>&#8221; del campo richiameremo invece l&#8217;effetto contrario, quello per nascondere il form.</p>
<p><em>A questo proposito ti consiglio di leggere:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le prestazioni</a></em></li>
<li><em><a title="Web e mobile app fluide con Hardware Acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e mobile app fluide con Hardware Acceleration</a></em></li>
</ul>
<h2>Il markup HTML</h2>
<p>Il codice HTML utilizzato per i vari elementi DOM è relativamente semplice; in particolare non facciamo altro che prelevarlo dalla documentazione del sito ufficiale di Twitter Bootstrap in modo da ricreare la <em>navbar</em>, applicando qualche piccola modifica:</p><pre class="crayon-plain-tag">&lt;!-- menu di navigazione --&gt;

&lt;nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"&gt;	

  &lt;div class="container-fluid"&gt;
    &lt;div class="navbar-header"&gt;        

      &lt;button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"&gt;
        &lt;span class="sr-only"&gt;Toggle navigation&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
      &lt;/button&gt;

      &lt;a class="navbar-brand" href="http://www.upcreative.net"&gt;upCreative.net&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="navbar-collapse collapse"&gt;
      &lt;ul class="nav navbar-nav navbar-right"&gt;
        &lt;li&gt;&lt;a href="#"&gt;Dashboard&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Settings&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Profile&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;
        	&lt;a href="#" id="search-button"&gt;
            	&lt;i class="fa fa-search fa-lg"&gt;&lt;/i&gt; 
	        &lt;span&gt;Cerca&lt;/span&gt;
        	&lt;/a&gt;
        &lt;/li&gt;
      &lt;/ul&gt;          
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- il form di ricerca, inizialmente nascosto --&gt;

  &lt;form class="navbar-form" action="#"&gt;
    &lt;input type="search" placeholder="Cerca..."&gt;
    &lt;a href="#" id="close-button"&gt;&lt;i class="fa fa-times fa-lg"&gt;&lt;/i&gt;&lt;/a&gt;
  &lt;/form&gt;
&lt;/nav&gt;</pre><p>
Ci serviamo quindi del tag <em>&lt;article&gt; </em>per rappresentare il contenuto della pagina (o applicazione):</p><pre class="crayon-plain-tag">&lt;!-- Contenuto pagina web --&gt; 

&lt;article class="text-center"&gt;

	&lt;h1&gt;Twitter Bootstrap search box con animazioni CSS3&lt;/h1&gt;	

	&lt;a href="http://www.upcreative.net/" class="btn btn-primary btn-lg"&gt;Vai all'articolo del tutorial &lt;i class="fa fa-chevron-right"&gt;&lt;/i&gt;&lt;/a&gt;

	&lt;p&gt;
		Guarda la demo in un dispositivo mobile per poter poter visualizzare al meglio le 
		performance raggiungibili con la tecnica dell'&lt;strong&gt;accelerazione hardware&lt;/strong&gt;.
	&lt;/p&gt;

	&lt;p style="margin-top:30px;"&gt;
		oppure consulta altri tutorial su upCreative.net:
	&lt;/p&gt;

	&lt;a href="http://www.upcreative.net/tutorial-css3-e-javascript-per-web-designers/" class="btn btn-primary"&gt;&lt;i class="fa fa-globe"&gt;&lt;/i&gt; upCreative.net&lt;/a&gt;

&lt;/article&gt;</pre><p>
Per quanto riguarda le icone di ricerca e di chiusura abbiamo usato quelle del framework <em><a title="Fontawesome - l'icon font creato appositamente per Twitter Bootstrap" href="http://fontawesome.io">Fontawesome</a></em>, <em>icon-font</em> appositamente creato per Twitter Bootstrap.</p>
<h2>Il codice CSS3</h2>
<p>Vediamo ora il codice per il foglio di stile:</p><pre class="crayon-plain-tag">/* stili del form della navbar */
.navbar-form{

	/*
		posizioniamo il form di ricerca in modo assoluto ed impostiamo
		larghezza ed altezza al 100% in modo da coprire completamente la 
		navbar che lo contiente		
	*/
	position: absolute;
	padding:0;
	left:0;
	top:0;
	width:100%;
	height:70px;
	margin: 0;
}</pre><p>
Abbiamo impostato la grandezza del form che contiene il campo di ricerca (classe <em>.navbar-form</em>) in modo che avesse le stesse dimensioni della <em>navbar,</em> per far sì che quest&#8217;ultima venga interamente coperta al momento dell&#8217;azione di ricerca.</p>
<p>Aggiungiamo ora la definizione delle modalità di animazione:</p><pre class="crayon-plain-tag">.navbar-form{	
	/* 
		impostiamo ad all l"attributo scantenante" per l'effetto 
		di transizione, in modo da scatenarlo sia se viene modificato il 
		valore della proprietà 'top', che quello della proprietà 'transorm'.
		Grazie alla proprietà 'transform sarà' possibile rendere l'effetto 
		fluido e performante anche per i dispositivi mobile, 
		forzando la creazione dei layers grafici.
	*/
	-webkit-transition: all .3s;
	   -moz-transition: all .3s;
	   	-ms-transition: all .3s;
		 -o-transition: all .3s;
		 	transition: all .3s;

	/*
		inizialmente nascondiamo fuori dallo schermo il form di ricerca, 
		in modo che sia traslato negativamente in verticale dello stesso
		numero di pixek che compone l'altezza della navbar 
	*/
	-webkit-transform: translate3d(0,-70px,0);
	   -moz-transform: translate3d(0,-70px,0);
	    -ms-transform: translate3d(0,-70px,0);
	     -o-transform: translate3d(0,-70px,0);
	        transform: translate3d(0,-70px,0);
}</pre><p>
Aggiungiamo una piccola porzione di codice per &#8220;ripiegare&#8221; sull&#8217;utilizzo della proprietà &#8220;<em>top</em>&#8220;, al fine di scatenare l&#8217;effetto di entrata nel caso in cui il browser del visitatore non supporti la proprietà &#8220;<i>translate</i>&#8221; (poco performante perché implica la ripetizione di gran parte del processo di rendering):</p><pre class="crayon-plain-tag">/*
se il browser non supporta la proprietà translate, allora impostiamo il
valore top negativo, dello stesso numero di pixel dell'altezza della navbar
*/
body.without-translate .navbar-form{
    top: -70px;
}</pre><p>
La classe .<em>with-translate</em> verrà aggiunta al <em>body </em>della pagina utilizzando <em><a title="Modernizr - Libreria per determinare le funzionalità HTML5 e CSS3 di ogni dispositivo" href="http://modernizr.com">Modernizr</a>; </em>lo vedremo analizzando il codice Javascript.</p>
<p>Passiamo quindi a definire gli stili per le proprietà grafiche dell&#8217;input di ricerca e quelle per il posizionamento dell&#8217;icona di chiusura:</p><pre class="crayon-plain-tag">/*
	impostaiamo gli stili per l'elemento input. In particolare facciamo in modo 
	che il campo di testo abbia le stesse dimensioni dell'elemento form che lo contiene
*/
.navbar-form input[type='search']{
	outline: 0;	
	width: 100%;
	height:100%;
	font-size: 24px;
	color:#F4F4F4;
	-moz-box-sizing: border-box;
	box-sizing: border-box;	
	padding:11px 15px;
	padding-right: 35px; /*aumentiamo il padding per "fare spazio" al pulsante di chiusura del form	*/
	background: #000;
	border:0;	
}

/*
	impostiamo in modo assoluto il pulsante di chiusura del 
	form di ricerca in modo che sia posizionato in fondo a destra rispetto 
	al conteitore e che stia sopra il campo di ricerca
*/

#close-button{
	position: absolute;
	right:18px;
	top:24px;
	color: #FFF;
}</pre><p>
Infine facciamo in modo che, nel momento in cui viene aggiunta la classe <em>.open </em>al form di ricerca, siano modificate le &#8220;proprietà scatenanti&#8221; che avviano l&#8217;effetto, secondo quanto definito precedentemente:</p><pre class="crayon-plain-tag">/*
definiamo la classe per la visualizzazione del form di ricerca	
*/
.navbar-form.open{	
	/*
	nel momento in cui questa classe viene aggiunta al form,
	andiamo a modifica l'attributo scatenante definito in precedenza (transform)
	per avviare l'aniamzione
	*/	
	-webkit-transform: translate3d(0,0,0);
	   -moz-transform: translate3d(0,0,0);
	    -ms-transform: translate3d(0,0,0);
	     -o-transform: translate3d(0,0,0);
	        transform: translate3d(0,0,0);

}

/*
se il browser non supporta la proprietà translate, allora 
attiviamo l'effetto agendo sulla proprietà 'top'.
*/

body.without-translate .navbar-form.open {
    top: 0;
}</pre><p>
&nbsp;</p>
<h2>Il codice Javascript</h2>
<p>Come al solito definiamo subito, tramite Modernizr,  il nome dell&#8217;<strong>evento di fine <em>transition</em></strong> in modo da eseguire la nostra funzione javascript nel momento in cui l&#8217;animazione di apertura giunge al termine:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine transizione, che cambia a seconda del browser */

var endTransitionName = {
	'WebkitTransition' : 'webkitTransitionEnd',
	'OTransition' : 'oTransitionEnd',
	'msTransition' : 'MSTransitionEnd',
	'transition' : 'transitionend'
};
var transitionEventName = endTransitionName[ Modernizr.prefixed( 'transition' ) ];</pre><p>
<em>Per avere maggiori informazioni sulla gestione degli eventi di effetti realizzati tramite le proprietà transition e animation, ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a></em></li>
</ul>
<p>Aggiungendo ora la classe <em>.without-translate </em>al <em>body</em>, nel caso in cui non sia presente il supporto per la proprietà <em>transform:</em></p><pre class="crayon-plain-tag">/* 
    grazie a modernizr, controllando le classi del tag HTML 
    possiamo sapere se il browser supporta determinate funzionalità        
*/
var supportCssTransforms = $("html").hasClass("csstransforms3d"),
    supportCssTransitions = $("html").hasClass("csstransitions");

/*
    se il browser non supporta la prop. 'transform' aggiungiamo la classe 'without-translate' al body, 
    in modo da poter differenziare la modalità d'effetto tramite CSS
*/
if(!supportCssTransforms){
    $("body").addClass("without-translate");
}</pre><p>
Infine gestiamo gli eventi di <em>click</em> e <em>blur  </em>per pulsanti e campo di ricerca:</p><pre class="crayon-plain-tag">/*
	definiamo gli elementi sui quali agiremo
*/
var navForm = $("nav .navbar-form"), 
	input = navForm.find("input[type='search']"),
	openBnt = $("#search-button"),
	closeBtn = $("#close-button");

openBnt.on("click", function(e){
	e.preventDefault();
	//alla fine dell'effetto di transizione richiamiamo il focus sul campo di testo		    	
	navForm.addClass("open").one(transitionEventName, function(){ 	   
    	   input.focus();
	});
        /* 
        se il browser non supporta le transition CSS3 allora l'evento di fine animazione non si verificherà, 
        pertanto richiameremo il focus sul campo di ricerca subito dopo aver aggiunto 
        la classe 'open' al form
        */
        if(!supportCssTransitions)
	   input.focus();

});

/*
	nel momento in cui si verifica l'evento blur, rimuoviamo la classe "open"
	dal form in modo da scatenare l'animazione con effetto contrario (quella
	che nasconde appunto il form)
*/	    	
input.on("blur", function(){ 		    	
	navForm.removeClass("open");
});

/*
	al click dell'icona di chiusura forziamo il blur del campo per scatenare il
	conseguente effetto di chiusura
*/
closeBtn.on("click", function(e){
	e.preventDefault(); 		    	
	input.trigger("blur");
});</pre><p>
Ed ecco finalmente il risultato finale:</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/02/twitter-bootstrap-search-box-responsive.jpg" class="attachment-full" alt="twitter-bootstrap-search-box-responsive" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/05022014Twitter-Bootstrap-search-box-responsive/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3242/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni</h2>
<p>Con questo tutorial spero di averti dimostrato che servirsi di <strong>animazioni CSS3 performanti</strong> è un&#8217;ottimo metodo per rendere originale un sito web e distinguerlo dagli altri, oppure per implementare dei <strong>componenti fluidi</strong> nelle proprie applicazioni mobile sviluppate in HTML5, CSS3 e Javascript. Così facendo possiamo realizzare prodotti le cui prestazioni si avvicinano il più possibile a quelle di applicazioni native.</p>
<hr />
<p><em>Realizzare un search box #crossbrowser e #responsive con #TwitterBootstrap #webdesign</em><br /><a href='https://twitter.com/share?text=Realizzare+un+search+box+%23crossbrowser+e+%23responsive+con+%23TwitterBootstrap+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/twitter-bootstrap-search-box-responsive/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>L&#8217;impiego della tecnica del <strong>miglioramento progressivo</strong> permette inoltre di applicare il nostro effetto a <strong>tutti i tipi di browser</strong>, spaziando da quel più vecchi quelli a quelli di ultima generazione.</p>
<p>E tu? Utilizzerai questa tecnica nei tuoi progetti? Lascia pure un tuo commento per qualunque dubbio o perplessità, o per suggerire delle funzionalità aggiuntive.
		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2f9c099778-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2f9c099778-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-search-box-responsive/">Twitter Bootstrap search box responsive con animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
