<?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>diploD &#187; mobile</title>
	<atom:link href="http://www.diplod.it/tag/mobile/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diplod.it</link>
	<description>by Davide Del Monte</description>
	<lastBuildDate>Fri, 13 Feb 2015 14:26:10 +0000</lastBuildDate>
	<language>it-IT</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Un esempio di applicazione ajax ottimizzata per dispositivi mobili: xml e javascript.</title>
		<link>http://www.diplod.it/2010/04/22/un-esempio-di-applicazione-ajax-ottimizzata-per-dispositivi-mobili-xml-e-javascript/</link>
		<comments>http://www.diplod.it/2010/04/22/un-esempio-di-applicazione-ajax-ottimizzata-per-dispositivi-mobili-xml-e-javascript/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 17:43:48 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[cellulari]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[web20]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1066</guid>
		<description><![CDATA[Ajax è sempre cool, se poi lo affianchi a iPhone &#038; Co. è ancora più cool. Perchè non vedere un esempio di applicazione web fruibile da cellulare che va a interrogare i dati contenuti in un file xml? Pensiamo ai webservices, ormai l'xml è un po' ovunque. Dobbiamo solo sfruttarlo.]]></description>
				<content:encoded><![CDATA[<p><strong><a title="ajax - wikipedia" href="http://it.wikipedia.org/wiki/AJAX" target="_blank">Ajax </a></strong>è sempre <strong>cool</strong>, se poi lo affianchi a iPhone &amp; Co. è ancora più cool. Perchè non vedere un esempio di applicazione web fruibile da cellulare che va a interrogare i dati contenuti in un file xml? Pensiamo ai <a title="Webservice - wikipedia" href="http://it.wikipedia.org/wiki/Web_service" target="_blank"><strong>webservices</strong></a>, ormai l&#8217;xml è un po&#8217; ovunque. Dobbiamo solo sfruttarlo.</p>
<p>Alcune utili consigli per chi sviluppa applicazioni ajax destinate ad essere fruibili attraverso dispositivi mobili:</p>
<ul>
<li><strong>Blackberry</strong>: il browser deve essere abilitato per usare javascript. Inoltre, se si fa largo uso dello script lato client, è bene evitare di spuntare tra le opzioni il flag &#8220;Termina script in esecuzione lenti&#8221;, un semplice <a title="bubble sort - wikipedia" href="http://it.wikipedia.org/wiki/Bubble_sort" target="_blank">Bubble Sort</a> lo manderebbe in tilt.</li>
<li><strong>Nokia </strong>(symbian): nel browser standard il metodo <em>open(&#8220;GET&#8221;,&#8221;xml/test2.xml&#8221;,true)</em> funziona solo in modalità asincrona, ovvero con l&#8217;ultimo parametro settato a true; scaricando il browser <a title="Opera Mini" href="http://www.opera.com/mobile/" target="_blank">Opera Mini</a> invece non ci sono problemi in entrambi i casi: sincrono/asincrono.</li>
<li><strong>iPhone</strong>: che dire.. finora nessun problem riscontrato: browser e processore appartengono a una categoria superiore.</li>
</ul>
<p>Purtroppo non ho ancora avuto modo di fare test su dispositivi con <a title="Android" href="http://www.android.com/" target="_blank">Android</a>..</p>
<p>Ma veniamo al dunque.. Tutto prende il via dagli <a title="W3C - ajax examples" href="http://www.w3schools.com/ajax/ajax_examples.asp" target="_blank">esempi sul sito W3C</a>, utilissimi per fare pratica.</p>
<p>L&#8217;obiettivo è realizzare una applicazione che va a interrogare un file xml, riportante i dati di produzione (magari estratti direttamente dal gestionale aziendale), visualizzandoli in maniera ottimizzata per schermi di modeste dimensioni.</p>
<p>L&#8217;esempio con il risultato finale è <a title="Esempio XML Ajax" href="http://lab.diplod.it/xml2" target="_blank">visibile qui</a>.</p>
<p>Questa è la struttura dela file XML:<br />
<code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;db&gt;<br />
&lt;item&gt;<br />
&lt;period&gt;04.2010&lt;/period&gt; &lt;!-- Periodo: mese o giorno --&gt;<br />
&lt;logunit id="0010"&gt;Italy Milan&lt;/logunit&gt; &lt;!-- Divisione di produzione--&gt;<br />
&lt;delivered matcode="000123"&gt;268&lt;/delivered&gt; &lt;!-- Quantita' spedita --&gt;<br />
&lt;finished matcode="100123"&gt;265&lt;/finished&gt; &lt;!-- Quantita' versata --&gt;<br />
&lt;description&gt;Product One&lt;/description&gt; &lt;!-- Descrizione codice materiale  --&gt;<br />
&lt;update&gt;15.04.2010 - 16:43&lt;/update&gt; &lt;!-- Ultimo aggiornamento --&gt;<br />
&lt;/item&gt;<br />
&lt;/db&gt;<br />
</code><br />
<span id="more-1066"></span>Supponiamo di voler offrire all&#8217;utente un menù per selezionare la divisione logistica su cui fare l&#8217;analisi e filtrare così i dati relativi alla singola divisione raggruppati in righe in base agli intervalli temporali, cliccando sulla singola riga è poi possibile vedere il dettaglio.</p>
<p>Ecco il codice della pagina web, con il suo javascript:<br />
<code>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Mobile Web Access&lt;/title&gt;<br />
&lt;script type="text/javascript"&gt;<br />
var xmlDoc;<br />
var x; //array dove memorizzo la risposta xml<br />
//inizio chiamata<br />
if (window.XMLHttpRequest)<br />
{<br />
xhttp=new XMLHttpRequest();<br />
if (xhttp.overrideMimeType) {<br />
xhttp.overrideMimeType('text/xml');<br />
}<br />
}<br />
else // Internet Explorer 5/6<br />
{<br />
xhttp=new ActiveXObject("Microsoft.XMLHTTP");<br />
}<br />
xhttp.onreadystatechange = alertContents; //gestione eventuali errori<br />
xhttp.open("GET","xml/test2.xml",true); //chiamata asincrona<br />
xhttp.send("");<br />
// Questo metodo viene eseguito in modo asincrono quando arriva la risposta dal server<br />
function alertContents() {<br />
if (xhttp.readyState == 4) {<br />
if (xhttp.status == 200) {<br />
processResponse(); //gestione risposta<br />
}<br />
else {<br />
document.write('&lt;small&gt;There was a problem with the request, sorry. Try later or contact your system administrator..&lt;/small&gt;');<br />
}<br />
}<br />
}<br />
function processResponse() {<br />
xmlDoc=xhttp.responseXML;<br />
x=xmlDoc.getElementsByTagName("item");<br />
}<br />
//mostra i dati nel div in alto<br />
function show(i) {<br />
logunit=(x[i].getElementsByTagName("logunit")[0].childNodes[0].nodeValue);<br />
logunitID=(x[i].getElementsByTagName("logunit")[0].getAttribute("id"));<br />
period=(x[i].getElementsByTagName("period")[0].childNodes[0].nodeValue);<br />
description=(x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue);<br />
delivered=(x[i].getElementsByTagName("delivered")[0].childNodes[0].nodeValue);<br />
deliveredCode=(x[i].getElementsByTagName("delivered")[0].getAttribute("code"));<br />
finished=(x[i].getElementsByTagName("finished")[0].childNodes[0].nodeValue);<br />
finishedCode=(x[i].getElementsByTagName("finished")[0].getAttribute("code"));<br />
update=(x[i].getElementsByTagName("update")[0].childNodes[0].nodeValue);<br />
txt="&lt;strong&gt;Logistic Unit&lt;/strong&gt;: "+logunitID+" - "+logunit+"&lt;br /&gt;&lt;strong&gt;Period&lt;/strong&gt;: "+period+"&lt;br /&gt;&lt;strong&gt;Description&lt;/strong&gt;: "+description+"&lt;br /&gt;&lt;img style='float:left; margin-right: 2px;' src='icon.png' alt='icon'/&gt;&lt;strong&gt;Delivered&lt;/strong&gt;: "+delivered+"&lt;br /&gt;&lt;strong&gt;Finished&lt;/strong&gt;: "+finished+"&lt;br /&gt;&lt;div style='border: 1px dotted #fff; padding: 2px; background: #f9f9f9; color: #666;'&gt;&lt;small&gt;&lt;em&gt;Last update: "+update+"&lt;/em&gt;&lt;/small&gt;&lt;br/&gt;&lt;small&gt;&lt;a href='#item"+i+"'&gt;Go Down To List..&lt;/a&gt; | &lt;a href='#show' onclick='show(" + (i-1) + ")'&gt;Prev..&lt;/a&gt; | &lt;a href='#show' onclick='show(" + (i+1) + ")'&gt;Next..&lt;/a&gt;&lt;/small&gt;&lt;/div&gt;"  ;<br />
document.getElementById("show").innerHTML=txt;<br />
}<br />
//crea tabella coi record relativi alla singola divisione<br />
function createTable(t) {<br />
document.getElementById("show").innerHTML="&lt;em&gt;"+t+": click on a table row to display the full production information.&lt;/em&gt;";<br />
txt="&lt;table style='border: 2px solid #ccc; width: 100%;'&gt;";<br />
altStyle=0;<br />
for (var i=0;i&lt;x.length;i++)<br />
{<br />
if (x[i].getElementsByTagName("logunit")[0].getAttribute("id")==t) {<br />
altStyle++;<br />
if (altStyle % 2 == 0) { txt=txt+"&lt;tr style='background: #e3efff;' onclick='show(" + i + ")'&gt;"; }<br />
else { txt=txt+"&lt;tr style='border-bottom: 1px dotted #ccc;' onclick='show(" + i + ")'&gt;"; }<br />
txt=txt+"&lt;td id='item"+i+"'&gt;&lt;img src='cal.png' alt='ico'/&gt;&lt;a href='#show'&gt;";<br />
txt=txt+(x[i].getElementsByTagName("period")[0].childNodes[0].nodeValue);<br />
txt=txt+"&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;img src='car.png' alt='ico'/&gt;&lt;a href='#show'&gt;";<br />
txt=txt+(x[i].getElementsByTagName("description")[0].childNodes[0].nodeValue);<br />
txt=txt+"&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;";<br />
}<br />
}<br />
txt=txt+"&lt;/table&gt;";<br />
document.getElementById("table-content").innerHTML=txt;<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;img src='mobile-logo.gif' alt='logo' /&gt;&lt;br/&gt;<br />
&lt;div id='show' style='background: #e3efff; padding: 3px; margin: 3px 0; border: 2px solid #ccc;'&gt;&lt;em&gt;Select Logistic Unit then click on a table row to display the full production information.&lt;/em&gt;&lt;/div&gt;<br />
&lt;!--Per aggiungere una divisione, modificare questo menu --&gt;<br />
&lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0010")'&gt;Italy Milan&lt;/a&gt; | &lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0020")'&gt;Italy Rome&lt;/a&gt; | &lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0030")'&gt;USA&lt;/a&gt; | &lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0040")'&gt;Germany&lt;/a&gt; | &lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0050")'&gt;China&lt;/a&gt; | &lt;img src='industry.png' alt='ico'/&gt;&lt;a href='#show' onclick='createTable("0060")'&gt;Brasil&lt;/a&gt;<br />
&lt;!-- fine menu selezione divisione --&gt;<br />
&lt;div id='table-content'&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</code></p>
<p>Il codice è interamente commentato, e più che descriverlo a parole vale la pena scorrerlo e leggere i commenti. <strong>Se vuoi scaricare l&#8217;esempio completo, con sorgenti e immagini: </strong><a title="xml ajax - esempio" href="http://www.diplod.it/wp-content/uploads/2010/04/xml-demo.zip"><strong>ecco lo zip</strong></a>.</p>
<p>La scelta di incorporare css e javascript all&#8217;interno della stessa singola pagina è voluta, per ottimizzare il caricamento da parte di dispositivi mobili. Certo questa è solo una base di partenza, dalla quale si potrebbero sviluppare altre funzionalità: l&#8217;esigenza di avere dati disponibili anche su <strong>dispositivi mobili</strong> è sempre più sentita; è inevitabile che in <strong>futuro</strong> si debba far fronte a queste richieste.<br />
In fondo è pure divertente!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/04/22/un-esempio-di-applicazione-ajax-ottimizzata-per-dispositivi-mobili-xml-e-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ottimizzare wordpress per iPhone, Nokia e PDA</title>
		<link>http://www.diplod.it/2009/01/23/ottimizzare-wordpress-per-iphone-nokia-e-pda/</link>
		<comments>http://www.diplod.it/2009/01/23/ottimizzare-wordpress-per-iphone-nokia-e-pda/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 00:35:03 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[cellulari]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[ottimizzazione]]></category>
		<category><![CDATA[pda]]></category>
		<category><![CDATA[user agent]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=726</guid>
		<description><![CDATA[Ottimizzare il proprio blog wordpress per dispositivi mobili è sempre più importante, vista la loro diffusione. Ecco come fare con due plugin di wordpress.]]></description>
				<content:encoded><![CDATA[<p>I dati di Google Analytics parlano chiaro, sempre più spesso si ricevono <strong>visite da dispositivi mobili</strong>: iPhone e PDA stanno diventando uno strumento di navigazione, ma l&#8217;utente torna solo se trova qualcosa di effettivamente navigabile. Un sito web in grado di riconoscere i dispositivi con schermo piccolo è in grado di catturare anche quei navigatori d&#8217;avanguarda (passatemi il termine) e fornire a loro una <strong>versione ottimizzata del layout</strong>.</p>
<p>Il browser, e di conseguenza il dispositivo, con cui l&#8217;utente fa accesso a un sito web è riconoscibile attravero lo <em>User Agent</em>.</p>
<blockquote><p>Oltre ai browser, gli user agent del web possono essere i <a title="Crawler" href="http://it.wikipedia.org/wiki/Crawler">crawler</a> dei <a title="Motore di ricerca" href="http://it.wikipedia.org/wiki/Motore_di_ricerca">motori di ricerca</a>, i <a title="Telefono cellulare" href="http://it.wikipedia.org/wiki/Telefono_cellulare">telefoni cellulari</a>, i <a title="Screen reader" href="http://it.wikipedia.org/wiki/Screen_reader">lettori di schermo</a> ed i browser <a title="Braille" href="http://it.wikipedia.org/wiki/Braille">braille</a> usati da persone non vedenti.<br />
Quando gli utenti di Internet visitano un sito web, una stringa di testo è solitamente inviata per fare identificare al <a class="mw-redirect" title="Web server" href="http://it.wikipedia.org/wiki/Web_server">server</a> lo user agent. Questo fa parte della richiesta <a title="HTTP" href="http://it.wikipedia.org/wiki/HTTP">HTTP</a>, con prefisso &#8220;<tt>User-agent:</tt>&#8221; o &#8220;<tt>User-Agent:</tt>&#8221; e tipicamente include informazioni come il nome dell&#8217;applicazione client, la versione, il <a title="Sistema operativo" href="http://it.wikipedia.org/wiki/Sistema_operativo">sistema operativo</a> e la lingua. I <a title="Bot" href="http://it.wikipedia.org/wiki/Bot">bot</a> spesso includono anche l&#8217;indirizzo web e la mail del proprietario, in modo tale che l&#8217;amministratore del sito possa contattarlo.<br />
La stringa dell&#8217;user-agent è uno dei criteri per i quali alcuni bot possono essere esclusi da alcune pagine usando il file <a title="Robots.txt" href="http://it.wikipedia.org/wiki/Robots.txt">robots.txt</a>. Questo permette ai webmaster, che ritengono che alcune parti del loro sito (o tutto il sito) non debba essere incluso nei dati raccolti da un particolare bot o che quel particolare bot stia usando troppa <a title="Banda" href="http://it.wikipedia.org/wiki/Banda">banda</a>, di bloccare l&#8217;accesso alle pagine. [wikipedia]</p></blockquote>
<p>E&#8217; arrivato dunque il momento di <strong>pensare al design del blog</strong>, fondamentalmente ci sono due modi per scremare opportunamente gli utenti che accedono al sito web: tramite il <strong>file .htaccess</strong> o tramite <strong>php</strong>. Noi ci concentreremo sulla seconda soluzione.</p>
<p><span id="more-726"></span></p>
<p>Esistono due interessanti plugin per formattare un blog in versione mobile:</p>
<ol>
<li><a title="Wp PDA" href="http://imthi.com/wp-pda" target="_blank">WP-PDA</a>: riconosce in automatico un sacco di user agent relativi a dispositivi mobili windows mobile, playstation portatile, cellulari, ecc..), è possibile aggiungerne altri tramite il pannello di amministrazione. Per l&#8217;iPhone carica un tema particolare, concepito appositamente secondo il design apple. Nelle immagini sottostanti potete vedere la versione di questo blog vista rispettivamente su iPhone e su un browser Nokia.<br />
<a href="http://www.diplod.it/wp-content/uploads/2009/01/diplod-iphonewppda.png"><img class="alignnone size-medium wp-image-728" title="diplod-iphonewppda" src="http://www.diplod.it/wp-content/uploads/2009/01/diplod-iphonewppda-92x300.png" alt="diploD visto con iPhone" width="92" height="300" /></a> <a href="http://www.diplod.it/wp-content/uploads/2009/01/diplod-wppda.png"><img class="alignnone size-medium wp-image-729" title="diplod-wppda" src="http://www.diplod.it/wp-content/uploads/2009/01/diplod-wppda-195x300.png" alt="diploD visto da Nokia N79" width="195" height="300" /></a></li>
<li><a title="WP Touch" href="http://www.bravenewcode.com/wptouch/" target="_blank">WP Touch</a>: è ottimizzato per formattare le pagine quando vi si accede con l&#8217;iPhone. Il design è delizioso, ma il grosso limite è che riconosce sono lo user agent dell&#8217;iPhone e non quelli degli altri dispositivi mobili. Nell&#8217;immagine sottostante la versione di un mio blog di test.<br />
<a href="http://www.diplod.it/wp-content/uploads/2009/01/diplod-iphone.png"><img class="alignnone size-medium wp-image-730" title="diplod-iphone" src="http://www.diplod.it/wp-content/uploads/2009/01/diplod-iphone-155x300.png" alt="diploD Lab visto con iPhone" width="155" height="300" /></a></li>
</ol>
<p>Il principio di funzionamento è uguale per entrambi i plugin: in base allo user agent viene caricato un tema apposito. Il tema è in tutto e per tutto uguale agli altri temi wordpress, utilizza gli stessi file php, ma viene semplificato il layout: meno div, meno classi css, meno fronzoli.. <strong><br />
Nei prossimi giorni ho intenzione di rilasciare qualche tema gratuito appositamente pensato per i dispositivi mobili, da caricare nelle relative cartelle dei plugin per personalizzare ulteriormente il proprio sito.</strong></p>
<p>Per testare la visualizzazione sui diversi dispositivi, senza possederli (daltronde costano davvero caro..), esiste una comodissima estensione di firefox che cambia a piacimento gli user agent: <a title="Firefox: user agent switcher" href="http://chrispederick.com/work/user-agent-switcher/" target="_blank">User Agent Switcher</a>.</p>
<p><a href="Nessuna"><img class="alignnone size-full wp-image-731" title="user-agent-firefox" src="http://www.diplod.it/wp-content/uploads/2009/01/user-agent-firefox.png" alt="" width="500" height="371" /></a></p>
<p>Per chi volesse divertirsi a fare tesi, qui c&#8217;è una <a title="user agent database" href="http://www.useragents.org/database.asp" target="_blank">esaustiva lista di user agent string</a>, per estendere la lista di quelli disponibili nell&#8217;estensione di firefox.<br />
E&#8217; arrivato il momento di concentrarsi anche su questi aggeggini, via con le customizzazioni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2009/01/23/ottimizzare-wordpress-per-iphone-nokia-e-pda/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
