<?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; Webdesigner</title>
	<atom:link href="http://www.diplod.it/category/webdesigner/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>Creare un web service con Google App Script. E magari leggere uno spreadsheet..</title>
		<link>http://www.diplod.it/2015/02/13/creare-un-web-service-con-google-app-script-leggere-spreadsheet/</link>
		<comments>http://www.diplod.it/2015/02/13/creare-un-web-service-con-google-app-script-leggere-spreadsheet/#comments</comments>
		<pubDate>Fri, 13 Feb 2015 14:26:10 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GAS]]></category>
		<category><![CDATA[google apps]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[spreadsheet]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1491</guid>
		<description><![CDATA[Sono lontani i tempi per cui se dovevi pubblicare un web service di test eri costretto tribolare in qualche ambiente di sviluppo, per poi caricare il tutto via ftp su un web server e testare il tuo servizio. Da qualche tempo ormai possiamo fare tutto da browser. Con Google Apps Script il concetto è semplice, basta accedere a Drive e scrivere qualche riga di codice javascript.]]></description>
				<content:encoded><![CDATA[<p>Sono lontani i tempi per cui se dovevi pubblicare un web service di test eri costretto tribolare in qualche ambiente di sviluppo, per poi caricare il tutto via ftp su un web server e testare il tuo servizio. Da qualche tempo ormai possiamo fare tutto da browser.</p>
<p>Con <strong>Google Apps Script</strong> il concetto è semplice, bisogna accedere a <strong>Drive</strong> e creare un nuovo documento. Andare su <em>Altro</em> e poi <em>Collega altre applicazioni</em>.</p>
<p>Filtrando tra quelle di Google, dobbiamo aggiungere<em> Google Apps Script</em>.</p>
<p><span id="more-1491"></span></p>
<p><a href="http://www.diplod.it/wp-content/uploads/2015/02/script.png"><img class="alignnone size-full wp-image-1494" src="http://www.diplod.it/wp-content/uploads/2015/02/script.png" alt="script" width="733" height="497" /></a></p>
<p>Ora tra i documenti disponibili abbiamo anche <em>Google Apps Script</em>.</p>
<p>Creiamo quindi un nuovo documento script.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2015/02/menu.png"><img class="alignnone size-full wp-image-1495" src="http://www.diplod.it/wp-content/uploads/2015/02/menu.png" alt="menu" width="535" height="447" /></a></p>
<p>&nbsp;</p>
<p>Si aprirà un documento dove possiamo scrivere codice javascript.</p>
<p>Come si legge nella <a title="Content Service" href="https://developers.google.com/apps-script/guides/content" target="_blank">documentazione</a>:</p>
<blockquote><p>Quando uno script viene pubblicato come una web app , la funzioni speciali di callback doGet( ) e doPost( ) vengono invocate quando viene effettuata una richiesta per l&#8217;URL dello script . Invece di restituire un oggetto dell&#8217;interfaccia utente creato con l&#8217;UI Service o l&#8217;HTML Service, il Content Service può essere utilizzato per restituire contenuto testuale crudo. Questo consente di scrivere script che agiscono come &#8220;servizi&#8221; , rispondendo alle richieste GET e POST e servono dati di vario tipo MIME.</p></blockquote>
<p>&nbsp;</p>
<p>Possiamo quindi costruire il nostro servizio web, scrivendo ad esempio queste poche righe di codice:</p>
<p><code>function doGet(){<br />
returnContentService.createTextOutput('Hello, world!');}</code></p>
<p>Di fatto abbiamo realizzato un servizio che risponde a una chiamata GET scrivendo &#8220;Hello, world!&#8221;.</p>
<p>Ora siamo pronti per pubblicarlo, per capire come funziona la pubblicazione. Poi potremmo fare qualcosa di più utile, come ad esempio rispondere con un JSON contenente qualche dato elaborato a partire da un parametro passato nella chiamata.</p>
<p>Le istruzioni per la pubblicazione sono riportate <a title="pubblicare web app GAS" href="https://developers.google.com/apps-script/guides/web#deploying_a_script_as_a_web_app" target="_blank">qui</a>, ma di fatto è sufficiente andare da menu <em>Pubblica </em>&gt; <em>Distribuisci come applicazione web..</em> e vedremo apparire questa finestra. Dopo aver salvato la versione del progetto, ci verrà chiesto come pubblicare la nostra applicazione.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2015/02/gas1.png"><img class="alignnone size-full wp-image-1496" src="http://www.diplod.it/wp-content/uploads/2015/02/gas1.png" alt="gas" width="381" height="297" /></a></p>
<p><em><strong>Esegui applicazione come</strong></em>: stabilisce qual’è l’utente che esegue lo script. Se scegliamo di farlo eseguire dall’utente che accede, quest&#8217;ultimo dovrà approvare l’esecuzione dello script prima di poterlo lanciare, se invece si sceglie di farlo eseguire come se stessi, l’utente sviluppatore dovrà approvare lo script la prima volta, poi chiunque accede potrà lanciarlo senza doverlo approvare. Con questa seconda opzione sarà quindi possibile distribuire il web service che stiamo creando anche a utenti anonimi (non loggati in Google).</p>
<p><strong>Chi accede all’applicazione</strong>: abbiamo diversi gradi, possiamo scegliere di tenere il servizio privato, oppure pubblico per utenti loggati in google o addirittura per qualsiasi utente, e di conseguenza anche qualsiasi applicazione di terzi.</p>
<p>Di fatto ora possiamo chiamare da browser l&#8217;url che Google ci restituisce dopo la pubblicazione, per vedere apparire il nostro &#8220;Hello, world!&#8221;.</p>
<p>Vediamo come fare qualcosa di più evoluto, ad esempio un servizio che prende in pasto un numero e restituisce un JSON con scritto se è pari o dispari.</p>
<p>Scriviamo questo codice:</p>
<p><code>function doGet(request) {<br />
var number = request.parameter.number;<br />
if (number % 2 == 0) { var type = "pari"; } else { var type = "dispari"; }<br />
var result = {<br />
numero: number,<br />
tipologia: type,<br />
};<br />
return ContentService.createTextOutput(JSON.stringify(result))<br />
.setMimeType(ContentService.MimeType.JSON);<br />
}</code></p>
<p>Abbiamo aggiunto l&#8217;oggetto request tra i parametri della funzione doGet(), ci salviamo il parametro &#8220;number&#8221; in una variabile e calcoliamo se è pari o dispari. Poi scriviamo tutto nell&#8217;oggetto result, restituendolo come JSON.</p>
<p>Dovremo salvare una nuova versione dello script, andando su <em>File</em> &gt; <em>Gestisci Versioni..</em> e poi tornare a pubblicare lo script in questa nuova versione. Se all&#8217;url ora aggiungiamo la stringa ?number=42, otterremo questo risultato, chiamandolo dal browser:</p>
<pre style="color: #000000;">{"numero":"42","tipologia":"pari"}</pre>
<p>Di fatto abbiamo realizzato un <strong>web service</strong> o lo abbiamo reso pubblico in un attimo, il tutto <strong>senza mai lasciare il nostro browser</strong>.</p>
<p>Se poi volessimo spingerci oltre, potremmo addirittura anche andare a leggere un foglio spreadsheet e restituire i valori delle celle che contiene. Pensiamo a quante mirabolanti applicazioni potremmo costruire se avessimo una infrastruttura basata sulle Google Apps for Enterprise, potremmo ad esempio costruire web service che pubblicano i dati di un foglio condiviso, dove più utenti di una stessa azienda collaborano alla definizione di dati che poi vengono distribuiti ad applicazioni terze.</p>
<p>E per restituire le prime 9 celle di un foglio chiamato &#8220;Foglio1&#8243; sarebbe sufficiente un pezzo di codice così:</p>
<p><code>function doGet(request) {<br />
var key = request.parameter.key;<br />
if (key == "<em>chiave_di_autenticazione</em>") {<br />
var ss = SpreadsheetApp.openById(<em>id_del_documento</em>);<br />
var values = ss.getSheetByName("Foglio1").getRange(1,1,3,3).getValues();<br />
return ContentService.createTextOutput(values);<br />
} else {<br />
return ContentService.createTextOutput("Invalid Key");<br />
}<br />
}</code></p>
<p>Bello vero? :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2015/02/13/creare-un-web-service-con-google-app-script-leggere-spreadsheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con jquery: la chiamata perfetta. Locale e cross domain, SEO friendly.</title>
		<link>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/</link>
		<comments>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/#comments</comments>
		<pubDate>Fri, 18 Jul 2014 13:57:22 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[chiamata]]></category>
		<category><![CDATA[cross domain]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[perfetta]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1452</guid>
		<description><![CDATA[I primi esempi di codice per fare una chiamata ajax erano brutti. Punto. C'era l'inevitabile if per gestire i diversi browser e qualche oggetto in più da maneggiare. Ora, grazie a jquery e a browser più umani, si riesce a gestire una chiamata ajax molto più agevolmente. Restano però alcuni aspetti critici: tra cui le chiamate cross domain e gli url SEO friendly.
Esiste quindi la chiamata perfetta? Si, ma come tutte le cose perfette, è sicuramente perfettibile.]]></description>
				<content:encoded><![CDATA[<p>I primi esempi di codice per fare una chiamata <strong>ajax</strong> erano brutti. Punto. C&#8217;era l&#8217;inevitabile if per gestire i diversi browser e qualche oggetto in più da maneggiare. Ora, grazie a <strong>jquery</strong> e a browser più umani, si riesce a gestire una chiamata ajax molto più agevolmente. Restano però alcuni aspetti critici: tra cui le chiamate <strong>cross domain</strong> e gli url <strong>SEO friendly</strong>.</p>
<p>Esiste quindi la <strong>chiamata perfetta</strong>? Si, ma come tutte le cose perfette, è sicuramente perfettibile.</p>
<p>Nell&#8217;esempio che segue c&#8217;è una pagina con due pulsanti: il primo esegue una chiamata ajax per caricare una pagina locale, il secondo esegue una chiamata cross-domain (nello specifico a Facebook) attraverso JSONP.</p>
<p>Sono arrivato all&#8217;esempio finale partendo da questi tre utilissimi spunti:</p>
<ul>
<li><a href="http://jquery-howto.blogspot.it/2013/09/jquery-cross-domain-ajax-request.html" target="_blank">4 jQuery cross domain ajax request methods</a></li>
<li><a href="http://kyleschaeffer.com/development/the-perfect-jquery-ajax-request/" target="_blank">The perfect jquery ajax request</a></li>
<li><a href="http://moz.com/blog/create-crawlable-link-friendly-ajax-websites-using-pushstate" target="_blank">Create crawlable, link-friendly ajax websites using pushState()</a></li>
</ul>
<p>Ed ecco il <a title="ajax chiamata perfetta" href="http://lab.diplod.it/ajaxcall/" target="_blank"><strong>risultato finale in funzione</strong></a>.</p>
<p><span id="more-1452"></span></p>
<p>Il codice html della pagina è il seguente:</p>
<p><code>&lt;div id="container"&gt;<br />
&lt;h1&gt;Esempi Chiamate Ajax con jQuery&lt;/h1&gt;<br />
&lt;a class="button" id="call" href="test.html" &gt;Esegui chiamata normale&lt;/a&gt;<br />
&lt;a class="button" id="call-cross" href="facebook.html"&gt;Esegui chiamata Cross Domain&lt;/a&gt;<br />
&lt;div id="ajax-panel"&gt;Questo div contiente il risultato della chiamata&lt;/div&gt;<br />
&lt;/div&gt;</code></p>
<p>Il codice javascript della chiamata locale è il seguente: di fatto viene usato il metodo $.ajax() per fare la chiamata. Nel <em>beforeSend</em> &#8211; codice eseguito prima di fare la chiamata vera e propria &#8211; viene eseguita una funzione che carica una immagine di cortesia; nel <em>success</em> &#8211; codice eseguito in caso di chiamata con esito positivo &#8211; viene elaborata la risposta, cambiando il contenuto di un div della pagina; nell&#8217;<em>error</em> &#8211; codice eseguito in caso di errore &#8211; viene mostrato un messaggio all&#8217;interno dello stesso div.</p>
<p><code>$("#call").click(function (e) {<br />
<strong>//SEO friendly</strong><br />
url = $(this).attr('href');<br />
<strong>//aggiorno l'indirizzo sulla barra del browser ed evito che si apra il link</strong><br />
history.pushState({}, '', url);<br />
e.preventDefault();<br />
<strong>//chiamata ajax</strong><br />
$.ajax({<br />
url: 'test.html',<br />
beforeSend: function () {<br />
<strong>// qui mettiamo un'immagine di caricamento: appare solo se dobbiamo caricare qualcosa di pesante</strong><br />
$('#ajax-panel').html('&lt;div class="loading"&gt;&lt;img src="http://lab.diplod.it/ajaxcall/images/ajax-loader.gif" alt="Loading..." /&gt;&lt;/div&gt;');<br />
},<br />
success: function (data) {<br />
<strong>// richiesta riuscita</strong><br />
$('#ajax-panel').empty();<br />
$('#ajax-panel').html(data);<br />
},<br />
error: function () {<br />
<strong>// richiesta fallita</strong><br />
$('#ajax-panel').html('&lt;p class="error"&gt;&lt;strong&gt;Oops!&lt;/strong&gt; Qualcosa &amp;egrave; andato storto.&lt;/p&gt;');<br />
}<br />
});<br />
</code><br />
Il codice della chiamata <strong>cross domain</strong> differisce di poco da quello precedente, se non per l&#8217;utilizzo di JSON<strong>P</strong> (attenzione: non JSON) come dataType.</p>
<p><code>$('#call-cross').click(function (e) {<br />
<strong>//SEO friendly</strong><br />
url = $(this).attr('href');<br />
<strong>//aggiorno l'indirizzo sulla barra del browser ed evito che si apra il link</strong><br />
history.pushState({}, '', url);<br />
e.preventDefault();<br />
<strong>//chiamata ajax</strong><br />
$.ajax({<br />
type: "POST",<br />
url: "https://graph.facebook.com/emergency.ong",<br />
dataType: "jsonp",<br />
beforeSend: function () {<br />
<strong>// qui mettiamo un'immagine di caricamento: appare solo se dobbiamo caricare qualcosa di pesante</strong><br />
console.log('loading..'); //scrivo qualcosa in console: si può omettere<br />
$('#ajax-panel').html('&lt;div class="loading"&gt;&lt;img src="http://lab.diplod.it/ajaxcall/images/ajax-loader.gif" alt="Loading..." /&gt;&lt;/div&gt;');<br />
},<br />
success: function (data) {<br />
<strong>// richiesta riuscita</strong><br />
console.log(data); //scrivo il risultato in console: si può omettere<br />
var obj = $.parseJSON(JSON.stringify(data));<br />
$('#ajax-panel').html('&lt;p&gt;Tutto ok&lt;/p&gt;&lt;p&gt;Descrizione dell\'oggetto JSON restituito: ' + obj.about + '&lt;/p&gt;');<br />
},<br />
error: function () {<br />
<strong>// richiesta fallita</strong><br />
$('#ajax-panel').html('&lt;p class="error"&gt;&lt;strong&gt;Oops!&lt;/strong&gt; Qualcosa &amp;egrave; andato storto.&lt;/p&gt;');<br />
}<br />
});<br />
});</code></p>
<p><strong>Vuoi provare l&#8217;esempio completo in azione e lavorarci su?</strong> <a title="chiamata ajax perfetta" href="http://www.diplod.it/wp-content/uploads/2014/07/AjaxCall.zip">Scarica tutti i sorgenti in uno zip</a> oppure <a title="chiamata ajax perfetta" href="http://lab.diplod.it/ajaxcall/" target="_blank">guardalo direttamente in funzione</a>.<a href="http://www.diplod.it/wp-content/uploads/2014/07/AjaxCall.zip"><br />
</a></p>
<p>Commenti e suggerimenti sono ben accetti. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2014/07/18/ajax-con-jquery-la-chiamata-perfetta-locale-e-cross-domain-seo-friendly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mappe &#8220;fighe&#8221;: con snazzy maps si possono personalizzare le mappe di Google.</title>
		<link>http://www.diplod.it/2014/01/17/mappe-fighe-con-snazzy-maps-si-possono-personalizzare-le-mappe-di-google/</link>
		<comments>http://www.diplod.it/2014/01/17/mappe-fighe-con-snazzy-maps-si-possono-personalizzare-le-mappe-di-google/#comments</comments>
		<pubDate>Fri, 17 Jan 2014 08:45:34 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[gmaps]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mappa]]></category>
		<category><![CDATA[mappe]]></category>
		<category><![CDATA[snazzy maps]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1434</guid>
		<description><![CDATA[Le mappe di Google sono un must per qualsiasi pagina contatti, ma possono diventare anche un accattivante elemento di design di una pagina web, se non addirittura l'elemento fondamentale di un sito. Ogni tanto è bello poterle personalizzare, coi propri colori e il proprio design. Su snazzy maps una raccolta di stili preconfezionati.]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.diplod.it/wp-content/uploads/2014/01/snazzy.png"><img class="alignnone size-full wp-image-1436" alt="snazzy" src="http://www.diplod.it/wp-content/uploads/2014/01/snazzy.png" width="600" height="310" /></a></p>
<p>Le mappe di Google sono un must per qualsiasi pagina contatti, ma possono diventare anche un accattivante elemento di design di una pagina web, se non addirittura l&#8217;elemento fondamentale di un sito. Ogni tanto è bello poterle personalizzare, coi propri colori e il proprio design. Con la versione 3 delle <a title="API Google Maps" href="https://developers.google.com/maps/documentation/javascript/styling" target="_blank">API di Google Maps</a>, è possibile cambiare lo stile alle mappe e personalizzarle.. ma bisogna perderci tempo, per <del>i pigri</del> coloro che credono nella condivisione ecco <a title="Snazzy Maps" href="http://snazzymaps.com/" target="_blank">Snazzy Maps</a>, una raccolta di mappe pronte all&#8217;uso modificate nei colori e negli elementi visualizzati, ad esempio togliendo il nome delle città o delle strade, cambiando il colore all&#8217;acqua e quant&#8217;altro..</p>
<p>Questo è il mio personale elenco di stili da tenere in considerazione:</p>
<ul>
<li><a title="Subtle Grayscale" href="http://snazzymaps.com/style/15/subtle-grayscale" target="_blank">Subtle Grayscale</a>: va bene sempre, una mappa sulla <strong>scala dei grigi</strong>, non c&#8217;è luogo in cui non si possa mettere.</li>
<li><a title="Blue water" href="http://snazzymaps.com/style/25/blue-water" target="_blank">Blue Water</a>: sempre scala di grigi, ma il blu dell&#8217;acqua accende tutto.</li>
<li><a title="Lunar landscape" href="http://snazzymaps.com/style/37/lunar-landscape" target="_blank">Lunar landscape</a>: <strong>dark style</strong>, una mappa nera nera per chi non può rinunciare alla notte.</li>
<li><a title="Paper" href="http://snazzymaps.com/style/39/paper" target="_blank">Paper</a>: da architetto, punto.</li>
<li><a title="Unimposed topography" href="http://snazzymaps.com/style/16/unimposed-topography" target="_blank">Unimposed topography</a>: senza nulla, nemmeno le strade.</li>
</ul>
<p>Buone mappe a tutti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2014/01/17/mappe-fighe-con-snazzy-maps-si-possono-personalizzare-le-mappe-di-google/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Javascript per &#8220;pagina in caricamento&#8221;: loading con eleganza.</title>
		<link>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/</link>
		<comments>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/#comments</comments>
		<pubDate>Mon, 13 Jan 2014 15:58:51 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Applicazioni Web]]></category>
		<category><![CDATA[animata]]></category>
		<category><![CDATA[boilerplate]]></category>
		<category><![CDATA[caricamento]]></category>
		<category><![CDATA[flexslider]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[initializr]]></category>
		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1419</guid>
		<description><![CDATA[Sempre più spesso si realizzano siti e applicazioni web che richiedono tempi di caricamento un po' più lunghi del normale, per evitare possibili errori nel codice javascript e rendere l'esperienza utente il più fluida possibile, è buona cosa e giusta mostrare qualcosa durante il caricamento della pagina per poi mostrare il contenuto in toto solo una volta che questo si è generato. Ecco come fare, con eleganza.]]></description>
				<content:encoded><![CDATA[<p>Sempre più spesso si realizzano siti e applicazioni web che richiedono <strong>tempi di caricamento</strong> un po&#8217; più lunghi del normale, per evitare possibili errori nel codice javascript e rendere l&#8217;<strong>esperienza utente</strong> il più <strong>fluida</strong> possibile, è buona cosa e giusta mostrare qualcosa durante il caricamento della pagina per poi mostrare il contenuto in toto solo una volta che questo si è generato.</p>
<p>La <strong>demo</strong>? <a title="Demo - caricamento con gif" href="http://lab.diplod.it/initializr-loading/" target="_blank">Eccola</a>! Provare è sempre più rapido che leggere.. ;) Attenzione che la cosa funziona bene la prima volta, poi la pagina viene messa nella cache e l&#8217;immagine di caricamento sparirà in fretta. Per chi vuole scaricare l&#8217;esempio completo e guardarlo in santa pace, basta fare il download.</p>
<p><a style="padding: 10px; background: #dadada; border: 1px solid #ccc;" href="http://lab.diplod.it/initializr-loading/">DEMO</a> <a style="padding: 10px; background: #dadada; border: 1px solid #ccc;" href="http://www.diplod.it/wp-content/uploads/2014/01/initializr-loading.zip">DOWNLOAD</a></p>
<p>Per fare ciò, la prima cosa necessaria è l&#8217;<strong>immagine di caricamento</strong>, una gif animata è l&#8217;ideale. Si possono generare con le proprie preferenze  tramite tools on line come ad esempio <a title="Preloaders" href="http://preloaders.net/" target="_blank">Preloaders </a>o <a title="Animizer" href="http://animizer.net/" target="_blank">Animizer</a>, col primo si ha a disposizione una nutrita serie di immagini eleganti e predefinite, col secondo si possono creare gif animate a partire da proprie immagini.</p>
<p><span id="more-1419"></span></p>

<a href='http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/attachment/9400/'><img width="89" height="128" src="http://www.diplod.it/wp-content/uploads/2014/01/9400.gif" class="attachment-thumbnail" alt="gif creata con Animizer" /></a>
<a href='http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/page-loader/'><img width="128" height="128" src="http://www.diplod.it/wp-content/uploads/2014/01/page-loader.gif" class="attachment-thumbnail" alt="gif creata con Preloaders" /></a>

<p>Ora veniamo all&#8217;<strong>HTML</strong>, al <strong>CSS</strong> e al caro <strong>jquery</strong>. Il riferimento principale è la documentazione del <a href="http://learn.jquery.com/using-jquery-core/document-ready/" target="_blank">$(document).ready()</a>.</p>
<p>Per fare le cose fatte bene, ho utilizzato l&#8217;<a title="HTML5 Boilerplate" href="http://html5boilerplate.com/" target="_blank">HTML5 Boilerplate</a>, un blasonato framework di frontend che agevola la scrittura del codice ma soprattutto ci da una solida guida per scriverlo bene. Nel template responsivo generato su <a title="Initializr" href="http://www.initializr.com/" target="_blank">Initializr</a> ho inserito <a title="Flexslider" href="http://www.woothemes.com/flexslider/" target="_blank">flexslider</a>, il famoso slider di woothemes. Ho scelto di impostare l&#8217;ambiente di demo in questo modo per avere a disposizione uno slider con alcune immagini ad alta risoluzione che impieghino un po&#8217; di tempo per caricarsi, ma ovviamente la parte di javascript e html che riguarda il caricamento <strong>può essere utilizzata su qualsiasi sito web</strong>.</p>
<p>Vediamo nel dettaglio la tecnica utilizzata, partendo dall&#8217;<strong>HTML</strong>. Basta inserire questo div subito dopo il tag <em>&lt;body&gt;</em>:</p>
<p><code>&lt;div class="loader"&gt;LOADING...&lt;/div&gt;</code></p>
<p>Visualizziamo la scritta loading, a tutto il resto penserà il foglio di stile.</p>
<p>Questo il <strong>CSS</strong>:</p>
<p><code>.loader {<br />
display: none;<br />
position: fixed;<br />
left: 0px;<br />
top: 0px;<br />
width: 100%;<br />
height: 100%;<br />
z-index: 9999;<br />
background: #fafafa url(../img/page-loader.gif) no-repeat center center;<br />
text-align: center;<br />
color: #999;<br />
}</code></p>
<p>Mettiamo a tutta pagina il div, per coprire tutto il contenuto, con una immagine di caricamento come sfondo. Questo blocco verrà rimosso tramite javascript una volta che il caricamento è avvenuto.</p>
<p>Ecco appunto la parte <strong>javascript</strong> (utilizzando jquery):</p>
<p><code>$( document ).ready(function() {<br />
//una volta caricato il DOM esegui questo codice<br />
//console.log( "DOM ready!" );<br />
$(window).load(function() {<br />
//una volta caricata l'intera pagina (immagini e i frames..) esegui questo codice<br />
//console.log( "Page ready!" );<br />
//faccio scomparire l'immagine di caricamento<br />
$(".loader").fadeOut("slow");<br />
});<br />
});</code></p>
<p>Il costrutto <em>$( document ).ready(function() { .. }</em> ci serve per far eseguire &#8220;qualcosa&#8221; una volta caricato tutto l&#8217;albero (DOM), in questo caso scriviamo semplicemente due righe sulla console del browser; mentre il costrutto  <em>$(window).load(function() { .. }</em> ci serve per fare eseguire &#8220;qualcosa&#8221; una volta caricata l&#8217;intera pagina, comprese appunto le immagini o roba contenuta negli iframe. E&#8217; qui, che oltre a scrivere un log sulla console, andiamo a rimuovere il div di caricamento che copriva tutto il contenuto della pagina.</p>
<p><strong>E&#8217; tutto ciò che serve!</strong></p>
<p>NB: ovviamente, se si vuole iniziare a far vedere la pagina e i suoi contenuti durante il caricamento, la stessa tecnica può essere applicata a un div che non copra tutta la pagina, ma ad esempio solo il box dello slider dove si caricheranno le immagini..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2014/01/13/javascript-per-pagina-in-caricamento-loading-con-eleganza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharepoint 2010: external list da database SQL esterno alla prova dei fatti</title>
		<link>http://www.diplod.it/2013/03/23/sharepoint-2010-external-list-da-database-sql-esterno-alla-prova-dei-fatti/</link>
		<comments>http://www.diplod.it/2013/03/23/sharepoint-2010-external-list-da-database-sql-esterno-alla-prova-dei-fatti/#comments</comments>
		<pubDate>Sat, 23 Mar 2013 16:19:11 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[BCS]]></category>
		<category><![CDATA[Businness Connectivity Services]]></category>
		<category><![CDATA[integrazione]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[Sharepoint 2010]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1279</guid>
		<description><![CDATA[Con i BCS (Businness Connectivity Services) è possibile creare liste di Sharepoint 2010 contenenti elementi che in realtà risiedono su un database SQL esterno a Sharepoint. Vediamo come funzionano, per appuntarsi qualche utile consiglio. Il primo passo per poter far funzionare il meccanismo è la definizione di una Secure Store Target Application, ovvero di un [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Con i BCS (<a title="Sharepoint 2010 BCS" href="http://msdn.microsoft.com/en-us/magazine/ee819133.aspx" target="_blank">Businness Connectivity Services</a>) è possibile creare liste di Sharepoint 2010 contenenti elementi che in realtà risiedono su un database SQL esterno a Sharepoint. Vediamo come funzionano, per appuntarsi qualche utile consiglio.</p>
<p>Il primo passo per poter far funzionare il meccanismo è la definizione di una<em> Secure Store Target Application</em>, ovvero di un elemento che memorizza le credenziali di accesso al sistema esterno, al quale Sharepoint farà riferimento per evitare che vengano chieste all&#8217;utente che in quel momento visualizza i dati. E&#8217; tuttavia possibile evitare questo passo, se si desidera che per l&#8217;accesso al database esterno vengano utilizzate le credenziali dell&#8217;utente connesso anzichè credenziali comuni.<br />
La <em>Secure Store Target Application</em> si crea dalla <em>Central Administration</em>. Navigando nella sezione <em>Application Management</em>, e cliccando su <em>Manage Service Applications</em> sotto a <em>Service Applications</em>. Apparirà una schermata con la lista delle service applications, clicchiamo su <em>Secure Store Service</em>. A questo punto clicchiamo su <em>Generate New Key</em> nel ribbon, si apre una finestra che chiede di impostare una pass phrase, servirà per poter modificare la target application, va quindi appuntata da qualche parte (ma questo appunto è superfluo, no?).</p>
<p>A questo punto si può creare una nuova target application e compilare tutti i campi necessari, come da figura sotto. Come email mettiamo quella di un amministratore di sistema, mentre come <em>Target Application Type</em> in genere si mette <em>Group</em>, perchè in questo modo è possibile associare la target application a un gruppo di utenti.</p>
<p><span id="more-1279"></span></p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage1.png"><img class="alignnone size-large wp-image-1289" title="BCSmanage1" src="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage1-1024x574.png" alt="" width="1024" height="574" /></a></p>
<p>Nel passaggio successivo è possibile quali campi associare alla target application, in genere sono sufficienti username e password: saranno poi valorizzati con le credenziali che dovranno impersonificare l&#8217;utente che si collega al database.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage2.png"><img class="alignnone size-large wp-image-1290" title="BCSmanage2" src="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage2-1024x574.png" alt="" width="1024" height="574" /></a></p>
<p>Ora bisogna specificare per quali utenti sarà disponibile questa target application, e quali sono gli utenti amministratori.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage3.png"><img class="alignnone size-large wp-image-1292" title="BCSmanage3" src="http://www.diplod.it/wp-content/uploads/2011/11/BCSmanage3-1024x334.png" alt="" width="1024" height="334" /></a></p>
<p>Ora che la <em>target application</em> è creata, non resta che settare le credenziali che utilizzerà per gli accessi al database esterno. Selezioniamo la <em>target application</em> dalla lista e premiamo il tasto<em> set credential</em> nel ribbon.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/set-credential.png"><img class="alignnone size-full wp-image-1293" title="set-credential" src="http://www.diplod.it/wp-content/uploads/2011/11/set-credential.png" alt="" width="452" height="202" /></a></p>
<p>Si aprirà una finestra dove inserire username e password, questo utente deve ovviamente avere accesso ai dati sul database esterno al quale vorremo collegare le liste di Sharepoint.</p>
<p>Ora l&#8217;attività si sposta su Sharepoint Designer 2010, per impostare i contenuti esterni e creare le liste che puntano ad essi. La prima cosa da fare è definire un External Content Type: ovvero un contenuto esterno dal quale attingere. Dopo aver aperto un sito, bisogna andare sul menù <em>External Content Type</em> e tramite il comando ribbon crearne uno nuovo.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/external-content-type.png"><img class="alignnone size-full wp-image-1285" title="external content type" src="http://www.diplod.it/wp-content/uploads/2011/11/external-content-type.png" alt="" width="546" height="190" /></a></p>
<p>Diamo un nome al contenuto esterno e clicchiamo sul link per impostare la connessione verso il sistema esterno.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/external-content.png"><img class="alignnone size-full wp-image-1286" title="external content" src="http://www.diplod.it/wp-content/uploads/2011/11/external-content.png" alt="" width="931" height="549" /></a></p>
<p>Ora bisogna cliccare sul tasto <em>Add Connection</em> per aggiungere una connessione.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/add-connection.png"><img class="alignnone size-large wp-image-1297" title="add-connection" src="http://www.diplod.it/wp-content/uploads/2011/11/add-connection-1024x357.png" alt="" width="1024" height="357" /></a></p>
<p>Apparirà una serie di schermate dove compilare i dati per l&#8217;accesso al database esterno.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/external-data-source.png"><img class="alignnone size-full wp-image-1298" title="external-data-source" src="http://www.diplod.it/wp-content/uploads/2011/11/external-data-source.png" alt="" width="312" height="98" /></a></p>
<p>Selezionare come opzione di connessione<em> Connect with Impersonated Custom Identity</em> e mettere il nome della<em> secure store application</em> definita prima sulla <em>Central Administration</em>.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/sql-connection.png"><img class="alignnone size-full wp-image-1299" title="sql-connection" src="http://www.diplod.it/wp-content/uploads/2011/11/sql-connection.png" alt="" width="378" height="256" /></a></p>
<p>Premendo <em>OK </em>il sistema chiederà le credenziali, inserire quelle dell&#8217;utente definito come amministratore della <em>secure store application</em> ai passi precedenti. Una volta validata la connessione, nell&#8217;<em>Operation Designer</em> apparirà tra le connessioni disponibili anche quella appena impostata: si espande l&#8217;albero per trovare la tabella o la vista contenente i dati che dovranno popolare la lista esterna di Sharepoint.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/operation-designer.png"><img class="alignnone size-large wp-image-1302" title="operation-designer" src="http://www.diplod.it/wp-content/uploads/2011/11/operation-designer-1024x539.png" alt="" width="1024" height="539" /></a></p>
<p>Una volta individuata, cliccando col tasto destro sulla tabella o sulla lista, è possibile generare le operazioni che servono (lettura, modifica, cancellazione, ecc..). E&#8217; possibile crearle tutte assieme, cliccando su <em>Create All Operation</em>. Nelle finestre successive dovremo dare un nome alle operazioni, si potranno settare filtri e sarà necessario marcare almeno un campo come <em>identifier </em>(ID di lista).</p>
<p>I filtri sono necessari per limitare il numero di record restituiti: di default è 2000 e a volte questo valore potrebbe non essere sufficiente, causando errore nella visualizzazione della lista tramite il browser sul sito Sharepoint.</p>
<p>Per l&#8217;operazione <em>Read List</em>, conviene settare qualche campo per la visualizzazione nel <em>picker</em>, altrimenti di default saranno visualizzati tutti e lato utente questa cosa risulta scomoda.</p>
<p>andando su <em>List and Libraries</em>, nei ribbon appare il comando <em>Elenco Esterno</em>.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/elenco-esterno.png"><img class="alignnone size-full wp-image-1282" title="elenco-esterno" src="http://www.diplod.it/wp-content/uploads/2011/11/elenco-esterno.png" alt="" width="357" height="144" /></a></p>
<p>Per chi volesse approfondire:</p>
<p><a href="http://blog.concurrency.com/sharepoint/accessing-external-data-using-business-connectivity-services-in-sharepoint-2010/">http://blog.concurrency.com/sharepoint/accessing-external-data-using-business-connectivity-services-in-sharepoint-2010/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2013/03/23/sharepoint-2010-external-list-da-database-sql-esterno-alla-prova-dei-fatti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestione dei Custom Post e dei Custom Fields in WordPress</title>
		<link>http://www.diplod.it/2012/10/01/gestione-dei-custom-post-e-dei-custom-fields-in-wordpress/</link>
		<comments>http://www.diplod.it/2012/10/01/gestione-dei-custom-post-e-dei-custom-fields-in-wordpress/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 16:23:48 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[contenuti]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[custom taxonomies]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1353</guid>
		<description><![CDATA[Sempre più temi e plugin Wordpress utilizzano custom post types e custom fields. Al di là dell'informatichese, di cosa si tratta? Ecco cosa sono e come usarli per costruire temi dedicati.]]></description>
				<content:encoded><![CDATA[<p>Sempre più temi e plugin WordPress utilizzano <strong>custom post types</strong> e <strong>custom fields</strong>. Al di là dell&#8217;informatichese, di cosa si tratta? Il modo più semplice per spiegarlo è attraverso un esempio. Immagina il sito di una band, con news e quant&#8217;altro.</p>
<p>Immagina che questa band voglia avere una sezione dove presenta i propri dischi, magari un widget sulla sidebar o una pagina dedicata. Servirà quindi un <strong>tipo di post personalizzato</strong>: non sono articoli semplici, non sono pagine. Sono dischi. E a questi dischi verranno associati anche una serie di <strong>campi personalizzati</strong>, come ad esempio l&#8217;anno di produzione, l&#8217;etichetta, i crediti per il missaggio. E poi, perchè no, anche il video di youtube, se questo esiste. Infine, questi dischi possono appartenere a due diverse categorie: album o singoli.</p>
<p>Si tratta insomma di un oggetto a parte, da usare nel pannello di amministrazione di wordpress, che poi apparirà come rappresentato nell&#8217;immagine sotto.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2012/09/dischi-bacheca.png"><img class="alignnone size-large wp-image-1354" title="dischi-bacheca" src="http://www.diplod.it/wp-content/uploads/2012/09/dischi-bacheca-1024x712.png" alt="" width="573" height="399" /></a></p>
<p><span id="more-1353"></span>Per fare ciò, il punto centrale è il famoso file di template <em>functions.php</em>, vediamo quali sono le cose da fare.</p>
<p>Dovremo innanzi tutto dichiarare il nuovo tipo post, dicendo che questo nuovo oggetto sarà &#8220;catalogabile&#8221; con due tassonomie: i <em>tag </em>e le <em>tipologie</em>. I <em>tag </em>sono i conosciuti tag nativi di wordpress che vengono utilizzati anche nei normali post del blog, mentre le <em>tipologie </em>sono una nuova tassonomia custom, che andremo a definire in seguito, e ci servirà per contraddistinguere i singoli dagli album, o comunque per creare una sorta di categorie per i post di tipo <em>disco</em>. Partiamo quindi aggiungendo il codice qui sotto:</p>
<p><code>/*******************************<br />
DISCHI<br />
aggiunge un tipo post custom dal nome "disco"<br />
che avrà un titolo, un contenuto esteso, un riassunto,<br />
il riferimento all'autore e una immagine in evidenza,<br />
oltre ad alcuni attributi custom<br />
********************************/</code></p>
<p><code> </code></p>
<p><code>add_action( 'init', 'register_cpt_disco' );<br />
function register_cpt_disco() {<br />
$labels = array(<br />
'name' =&gt; _x( 'Dischi', 'disco' ),<br />
'singular_name' =&gt; _x( 'Disco', 'disco' ),<br />
'add_new' =&gt; _x( 'Aggiungi Nuovo', 'disco' ),<br />
'add_new_item' =&gt; _x( 'Aggiungi Nuovo Disco', 'disco' ),<br />
'edit_item' =&gt; _x( 'Modifica Disco', 'disco' ),<br />
'new_item' =&gt; _x( 'Nuovo Disco', 'disco' ),<br />
'view_item' =&gt; _x( 'Visualizza Disco', 'disco' ),<br />
'search_items' =&gt; _x( 'Cerca Dischi', 'disco' ),<br />
'not_found' =&gt; _x( 'Nessun disco trovato', 'disco' ),<br />
'not_found_in_trash' =&gt; _x( 'Nessun disco trovato nel cestino', 'disco' ),<br />
'parent_item_colon' =&gt; _x( 'Disco Padre:', 'disco' ),<br />
'menu_name' =&gt; _x( 'Dischi', 'disco' ),<br />
);<br />
$args = array(<br />
'labels' =&gt; $labels,<br />
'hierarchical' =&gt; false,<br />
'description' =&gt; 'Dischi della Band',<br />
//specifico quali proprietà avrà questo nuovo tipo di post<br />
'supports' =&gt; array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'custom-fields' ),<br />
'taxonomies' =&gt; array( 'tipologie', 'post_tag' ),<br />
'public' =&gt; true,<br />
'show_ui' =&gt; true,<br />
'show_in_menu' =&gt; true,<br />
'show_in_nav_menus' =&gt; true,<br />
'publicly_queryable' =&gt; true,<br />
'exclude_from_search' =&gt; false,<br />
'has_archive' =&gt; true,<br />
'query_var' =&gt; true,<br />
'can_export' =&gt; true,<br />
'rewrite' =&gt; true,<br />
'capability_type' =&gt; 'post'<br />
);<br />
register_post_type( 'disco', $args );<br />
}<br />
/* aggiungo dei custom fields (year_completed, videoid, labelc,credits) al tipo post "disco"<br />
il primo (year_completed) lo aggiungo come "year_completed-meta"<br />
gli altri (videoid, labelc,credits) li aggiungo come "credits_meta" */<br />
add_action("admin_init", "admin_init");<br />
function admin_init(){<br />
add_meta_box("year_completed-meta", "Year Completed", "year_completed", "disco", "side", "low");<br />
add_meta_box("credits_meta", "Credits", "credits_meta", "disco", "normal", "low");<br />
}<br />
function year_completed(){<br />
global $post;<br />
$custom = get_post_custom($post-&gt;ID);<br />
$year_completed = $custom["year_completed"][0];<br />
?&gt;<br />
&lt;label&gt;Year:&lt;/label&gt;<br />
&lt;input name="year_completed" value="&lt;?php echo $year_completed; ?&gt;" /&gt;<br />
&lt;?php }<br />
function credits_meta() {<br />
global $post;<br />
$custom = get_post_custom($post-&gt;ID);<br />
$videoid = $custom["videoid"][0];<br />
$labelc = $custom["labelc"][0];<br />
$credits = $custom["credits"][0]; ?&gt;<br />
&lt;p&gt;&lt;label&gt;Youtube Video ID:&lt;/label&gt;&lt;br /&gt;<br />
&lt;textarea cols="50" rows="5" name="videoid"&gt;&lt;?php echo $videoid; ?&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;label&gt;Label credits:&lt;/label&gt;&lt;br /&gt;<br />
&lt;textarea cols="50" rows="5" name="labelc"&gt;&lt;?php echo $labelc; ?&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;label&gt;Mastering credits:&lt;/label&gt;&lt;br /&gt;<br />
&lt;textarea cols="50" rows="5" name="credits"&gt;&lt;?php echo $credits; ?&gt;&lt;/textarea&gt;&lt;/p&gt;<br />
&lt;?php } ?&gt;<br />
</code><br />
Ora dobbiamo invece definire una nuova tassonomia per questo tipo di post, servirà quindi aggiungere anche il codice sottostante:<br />
<code><br />
add_action( 'init', 'register_taxonomy_tipologie' );<br />
function register_taxonomy_tipologie() {<br />
$labels = array(<br />
'name' =&gt; _x( 'Tipologie', 'tipologie' ),<br />
'singular_name' =&gt; _x( 'Tipologia', 'tipologie' ),<br />
'search_items' =&gt; _x( 'Cerca Tipologie', 'tipologie' ),<br />
'popular_items' =&gt; _x( 'Tipologie Principali', 'tipologie' ),<br />
'all_items' =&gt; _x( 'Tutte le Tipologie', 'tipologie' ),<br />
'parent_item' =&gt; _x( 'Parent Tipologia', 'tipologie' ),<br />
'parent_item_colon' =&gt; _x( 'Parent Tipologia:', 'tipologie' ),<br />
'edit_item' =&gt; _x( 'Modifica Tipologia', 'tipologie' ),<br />
'update_item' =&gt; _x( 'Aggiorna Tipologia', 'tipologie' ),<br />
'add_new_item' =&gt; _x( 'Aggiungi nuova Tipologia', 'tipologie' ),<br />
'new_item_name' =&gt; _x( 'Nuova Tipologia', 'tipologie' ),<br />
'separate_items_with_commas' =&gt; _x( 'Separate tipologie with commas', 'tipologie' ),<br />
'add_or_remove_items' =&gt; _x( 'Add or remove tipologie', 'tipologie' ),<br />
'choose_from_most_used' =&gt; _x( 'Choose from the most used tipologie', 'tipologie' ),<br />
'menu_name' =&gt; _x( 'Tipologie', 'tipologie' ),<br />
);<br />
$args = array(<br />
'labels' =&gt; $labels,<br />
'public' =&gt; true,<br />
'show_in_nav_menus' =&gt; true,<br />
'show_ui' =&gt; true,<br />
'show_tagcloud' =&gt; false,<br />
'hierarchical' =&gt; true,<br />
'rewrite' =&gt; true,<br />
'query_var' =&gt; true<br />
);<br />
register_taxonomy( 'tipologie', array('disco'), $args );<br />
}<br />
// al salvataggio dei post i valori dei custom fields devono essere memorizzati<br />
add_action('save_post', 'save_details');<br />
function save_details(){<br />
global $post;<br />
update_post_meta($post-&gt;ID, "year_completed", $_POST["year_completed"]);<br />
update_post_meta($post-&gt;ID, "videoid", $_POST["videoid"]);<br />
update_post_meta($post-&gt;ID, "labelc", $_POST["labelc"]);<br />
update_post_meta($post-&gt;ID, "credits", $_POST["credits"]);<br />
}<br />
</code><br />
Si può scrivere questo codice a mano, oppure possono venirci in aiuto due comodissimi tool on line (entrambi di <a title="themergency generators" href="http://themergency.com/generators/" target="_blank">themergency</a>):</p>
<ul>
<li><a title="Wordpress Custom Post Types Generator" href="http://themergency.com/generators/wordpress-custom-post-types/" target="_blank">WordPress Custom Post Types Generator</a></li>
<li><a title="Wordpress custom taxonomies generator" href="http://themergency.com/generators/wordpress-custom-taxonomy/" target="_blank">WordPress Custom Taxonomies Generator</a></li>
</ul>
<p>A questo punto non resta che installare il nostro tema e popolare il sito di contenuti custom, che poi potranno essere utilizzati per creare layout specifici. Questo è un argomento che non viene trattato qui, ma giusto per dare un&#8217;imbeccata, basti pensare a come è possibile impostare la funzione <a title="Query Post" href="http://codex.wordpress.org/Function_Reference/query_posts" target="_blank">query_posts()</a> indicando di estrarre dei custom post types:</p>
<p><code><br />
&lt;?php<br />
//prendo gli ultimi 16 dischi nella categoria album<br />
query_posts('showposts=16&amp;post_type="disco"&amp;tipologie="album"');<br />
?&gt;<br />
</code></p>
<p>Per chi volesse approfondire il tema, ecco alcune <strong>utili risorse</strong>:</p>
<ul>
<li><a href="http://net.tutsplus.com/tutorials/wordpress/rock-solid-wordpress-3-0-themes-using-custom-post-types/" target="_blank">http://net.tutsplus.com/tutorials/wordpress/rock-solid-wordpress-3-0-themes-using-custom-post-types/</a></li>
<li><a href="http://wp.tutsplus.com/tutorials/quick-tip-3-tools-for-making-instant-custom-post-types/" target="_blank">http://wp.tutsplus.com/tutorials/quick-tip-3-tools-for-making-instant-custom-post-types/</a></li>
<li><a href="http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress" target="_blank">http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress</a></li>
<li><a href="http://designwoop.com/2012/05/quality-tutorials-for-creating-wordpress-custom-post-types/" target="_blank">http://designwoop.com/2012/05/quality-tutorials-for-creating-wordpress-custom-post-types/</a></li>
<li><a href="http://wptheming.com/2011/11/event-posts-in-wordpress/">http://wptheming.com/2011/11/event-posts-in-wordpress/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2012/10/01/gestione-dei-custom-post-e-dei-custom-fields-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flexslider applicato coi Rio: uno slider jquery davvero flessibile.</title>
		<link>http://www.diplod.it/2012/10/01/flexslider-applicato-coi-rio-uno-slider-jquery-davvero-flessibile/</link>
		<comments>http://www.diplod.it/2012/10/01/flexslider-applicato-coi-rio-uno-slider-jquery-davvero-flessibile/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 14:07:32 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[flexslider]]></category>
		<category><![CDATA[i rio]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[rio]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[slideshow]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1359</guid>
		<description><![CDATA[Di slider e slideshow ce ne sono una infinità. Col tempo ne ho provati e utilizzati diversi, ma come flexslider ce ne sono pochi. Credo di aver finalmente trovato ciò che cercavo: flessibile, altamente configurabile ed adattabile, semplice, e soprattutto funzionante anche con dispositivi touch (iphone, ipad, android, ecc..). Si tratta di una creazione di [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Di <strong>slider</strong> e <strong>slideshow </strong>ce ne sono una infinità. Col tempo ne ho provati e <a title="Slideshow wordpress" href="http://www.diplod.it/2009/09/06/wordpress-creare-uno-sliseshow-con-gli-articoli-in-rilievo-stile-magazine/" target="_self">utilizzati </a>diversi, ma come <strong><a title="Flexslider" href="http://www.woothemes.com/flexslider/" target="_blank">flexslider</a> </strong>ce ne sono pochi. Credo di aver finalmente trovato ciò che cercavo: flessibile, altamente configurabile ed adattabile, semplice, e soprattutto funzionante anche con dispositivi <em>touch </em>(iphone, ipad, android, ecc..). Si tratta di una creazione di <a title="Woothemes" href="http://www.woothemes.com" target="_blank">Woothemes</a>, rilasciata gratuitamente e utilizzabile da chiunque. Per vederlo subito all&#8217;opera, nel modo in cui l&#8217;ho impiegato, basta aprire il sito dei <a title="i Rio" href="http://www.rioofficial.it" target="_self">Rio</a> o di <a title="Bluebeet recording studio" href="http://www.bluebeet.it" target="_blank">Bluebeet Studio</a>. Questo per dire che ho aggiornato il portfolio, ogni tanto è bene farlo. ;)</p>
<p>Per capire come utilizzare lo slideshow di immagini si può dare un&#8217;occhiata alle demo sul sito ufficiale, ma credo che il meglio di questo slider sia nelle possibilità di utilizzo con pezzi di codice formattato (con testo e immagini), per poter creare fluide e accattivanti presentazioni di news o quant&#8217;altro.</p>
<p>Andiamo subito al sodo e vediamo come si può utilizzare all&#8217;interno di un tema <strong>wordpress</strong> per presentare articoli o elementi di altro tipo.</p>
<p><span id="more-1359"></span></p>
<p>Ci sono tre cose fondamentali: il <strong>codice javascript</strong>, il <strong>codice html</strong> e il <strong>codice CSS</strong>. Partiamo con javascript; all&#8217;interno del tag &lt;head&gt; dovremo mettere questo pezzo di codice:</p>
<p><code> &lt;script type="text/javascript"&gt;<br />
$(window).load(function() {<br />
$('#flexslider').flexslider({<br />
animation: "slide",<br />
controlsContainer: "#flex-container",<br />
prevText: "Prec",<br />
nextText: "Succ"    });<br />
});<br />
</code></p>
<p>Mentre nel codice <strong>php </strong>che presenta gli articoli, ad esempio nel file <em>home.php</em>, dovremo utilizzare questo:</p>
<p><code><br />
&lt;?php query_posts('showposts=6&amp;cat=3'); //prendo gli ultimi 6 articoli delle top news ?&gt;<br />
&lt;?php if (have_posts()) : ?&gt;<br />
&lt;div&gt;<br />
&lt;div id="flex-container"&gt;<br />
&lt;div id="flexslider"&gt;<br />
&lt;ul&gt;<br />
&lt;?php while (have_posts()) : the_post(); ?&gt;<br />
&lt;li&gt;<br />
&lt;h1&gt;&lt;a href="&lt;?php the_permalink() ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h1&gt;<br />
&lt;div&gt;<br />
&lt;?php if ( has_post_thumbnail()) : ?&gt;<br />
&lt;?php the_post_thumbnail('medium', array('class' =&gt; 'img-news')); ?&gt;<br />
&lt;?php endif; ?&gt;<br />
&lt;?php the_excerpt(); ?&gt;<br />
&lt;a href="&lt;?php the_permalink() ?&gt;" title="&lt;?php the_title(); ?&gt;"&gt;Leggi tutto...&lt;/a&gt;<br />
&lt;div&gt;&lt;div data-href="&lt;?php the_permalink() ?&gt;" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false" data-font="lucida grande"&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/li&gt;<br />
&lt;?php endwhile; ?&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;?php endif; ?&gt;<br />
&lt;?php // Reset Query<br />
wp_reset_query(); ?&gt;<br />
</code></p>
<p>Il mestiere di questo pezzo di codice non è altro che recuperare gli ultimi 6 articoli di una determinata categoria (con ID=3), tramite la function <em>query_posts()</em>; per poi presentare ogni articolo con la sua immagine in evidenza e il suo riassunto. Al di là delle classi css attribuite agli elementi, che sono comunque poco rilevanti per il nostro esempio, ciò che mi preme far notare è che tutti questi elementi stanno racchiusi in un elemento di lista <em>&lt;li&gt;</em>, che sarà uno dei 6 slide che ruoteranno.</p>
<p>Veniamo ora al bello: il<strong> foglio di stile</strong>. Di seguito il mio CSS riadattato partendo da quello di default.<br />
<code><br />
/* jQuery FlexSlider v2.0 */<br />
/* Browser Resets */<br />
.flex-container a:active,<br />
.flexslider a:active,<br />
.flex-container a:focus,<br />
.flexslider a:focus  {outline: none;}<br />
.slides,<br />
.flex-control-nav,<br />
.flex-direction-nav {margin: 0; padding: 0; list-style: none;}<br />
/* FlexSlider Necessary Styles<br />
*********************************/<br />
.flexslider {margin: 0; padding: 0;}<br />
.flexslider .slides &gt; li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */<br />
/*.flexslider .slides img {width: 100%; display: block;} */<br />
.flex-pauseplay span {text-transform: capitalize;}<br />
/* Clearfix for the .slides element */<br />
.slides:after {content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;}<br />
html[xmlns] .slides {display: block;}<br />
* html .slides {height: 1%;}<br />
/* No JavaScript Fallback */<br />
/* If you are not using another script, such as Modernizr, make sure you<br />
* include js that eliminates this class on page load */<br />
.no-js .slides &gt; li:first-child {display: block;}<br />
/* FlexSlider Default Theme<br />
*********************************/<br />
.flex-container { position: relative;}<br />
.flexslider {margin: 0 0 5px 0; position: relative;}<br />
.flex-viewport {max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;}<br />
.loading .flex-viewport {max-height: 300px;}<br />
.flexslider .slides {zoom: 1;}<br />
.carousel li {margin-right: 5px}<br />
/* Direction Nav */<br />
.flex-direction-nav { display: block; position: absolute; top: 50%; background: transparent; width: 100%;<br />
opacity: 0.2;<br />
transition:opacity 1s;<br />
-moz-transition:opacity 1s; /* Firefox 4 */<br />
-webkit-transition:opacity 1s; /* Safari and Chrome */<br />
-o-transition:opacity 1s; /* Opera */ }<br />
.flex-container .flex-direction-nav:hover { opacity: 1; }<br />
.flex-direction-nav a {width: 30px; height: 30px; margin: -30px 0 0; display: block; background: url(../images/bg_direction_nav.png) no-repeat 0 0; position: absolute; cursor: pointer; text-indent: -9999px; }<br />
.flex-direction-nav .next {background-position: 100% 0; right: 5px;}<br />
.flex-direction-nav .prev {left: 5px;}<br />
/* Control Nav */<br />
.flex-control-nav {width: 100%; position: relative; bottom: 0px; text-align: center;}<br />
.flex-control-nav li {margin: 0 6px; display: inline-block; zoom: 1; *display: inline;}<br />
.flex-control-nav li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}<br />
.flex-control-nav li a:hover { background: #333; background: rgba(0,0,0,0.7); }<br />
.flex-control-nav li a.active { background: #000; background: rgba(0,0,0,0.9); cursor: default; }<br />
.flex-control-paging li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}<br />
.flex-control-paging li a:hover { background: #333; background: rgba(0,0,0,0.7); }<br />
.flex-control-paging li a.active { background: #000; background: rgba(0,0,0,0.9); cursor: default; }<br />
.flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;}<br />
.flex-control-thumbs li {width: 25%; float: left; margin: 0;}<br />
.flex-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;}<br />
.flex-control-thumbs img:hover {opacity: 1;}<br />
.flex-control-thumbs .active {opacity: 1; cursor: default;}<br />
</code></p>
<p>Con un pizzico di CSS3 è possibile fare in modo che le frecce di navigazione appaiano evidenti solo al passaggio del mouse, mentre rimangano in trasparenza mentre scorrono le notizie. Il risultato finale si può <a title="Rio" href="http://www.rioofficial.it/" target="_blank">vedere qui</a>.</p>
<p>Buono slideshow a tutti. ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2012/10/01/flexslider-applicato-coi-rio-uno-slider-jquery-davvero-flessibile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alla NASA utilizzano JQuery</title>
		<link>http://www.diplod.it/2012/08/07/alla-nasa-utilizzano-jquery/</link>
		<comments>http://www.diplod.it/2012/08/07/alla-nasa-utilizzano-jquery/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 08:18:19 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[curiosity]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[marte]]></category>
		<category><![CDATA[nasa]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1339</guid>
		<description><![CDATA[Ma qualcuno di voi si è accorto di come hanno realizzato l&#8217;animazione che illustra l&#8217;atterraggio del Curiosity su Marte? Se date una sbirciatina al codice troverete un sacco di &#8220;cose interessanti&#8221;: la prima operazione da fare è muovere la rotellina del mouse, e noterete che attraverso lo scrolling vengono gestite le informazioni che appaiono in [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.diplod.it/wp-content/uploads/2012/08/mars.png"><img class="aligncenter size-full wp-image-1341" title="mars" src="http://www.diplod.it/wp-content/uploads/2012/08/mars.png" alt="" width="460" height="250" /></a></p>
<p>Ma qualcuno di voi si è accorto di come hanno realizzato l&#8217;animazione che illustra l&#8217;<a title="How do I land on Mars?" href="http://mars.jpl.nasa.gov/msl/multimedia/interactives/edlcuriosity/index-2.html" target="_blank"><strong>atterraggio del Curiosity su Marte</strong></a>?</p>
<p>Se date una sbirciatina al codice troverete un sacco di &#8220;cose interessanti&#8221;: la prima operazione da fare è muovere la rotellina del mouse, e noterete che attraverso lo scrolling vengono gestite le informazioni che appaiono in alto a destra. La conferma, semmai ce ne fosse bisogno, che si può fare senza flash.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2012/08/07/alla-nasa-utilizzano-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Impedire la stampa e il copia incolla da pagine wiki su Sharepoint 2010</title>
		<link>http://www.diplod.it/2011/11/22/impedire-la-stampa-e-il-copia-incolla-da-pagine-wiki-su-sharepoint-2010/</link>
		<comments>http://www.diplod.it/2011/11/22/impedire-la-stampa-e-il-copia-incolla-da-pagine-wiki-su-sharepoint-2010/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 11:23:44 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[copia incolla]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[stampa]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1307</guid>
		<description><![CDATA[L'esigenza è semplice: deve essere impedito all'utente medio di poter stampare o fare copia incolla da una pagina wiki di Sharepoint 2010.
Come fare? Ovviamente javascript e css. La rete è piena di esempi per disabilitare il cut&#038;paste o evitare la stampa di una porzione di pagina su carta; per il primo obiettivo useremo uno script semplicissimo, per il secondo un foglio di stile associato alla stampa. ]]></description>
				<content:encoded><![CDATA[<p>L&#8217;esigenza è semplice: <strong>deve essere impedito</strong> all&#8217;<em>utente medio</em> di poter <strong>stampare </strong>o fare <strong>copia incolla</strong> da una pagina wiki di <strong>Sharepoint 2010</strong>. La premessa sull&#8217;utente medio è fondamentale, perchè un utente scafato, in grado di leggere il codice e capire come fare lo troveremo sempre.. non è quindi questo il modo per proteggere fino alla morte un contenuto, si tratta semmai di un modo per sensibilizzare l&#8217;utente circa il contenuto confidenziale pubblicato su una pagina web.</p>
<p>Come fare? Ovviamente javascript e css. La rete è piena di esempi per disabilitare il <em>cut&amp;paste</em> o evitare la stampa di una porzione di pagina su carta; per il primo obiettivo useremo uno script semplicissimo, per il secondo un foglio di stile associato alla stampa. Tutto qui:</p>
<p><code>&lt;script language="JavaScript"&gt;<br />
&lt;!--<br />
// Disable selection of content<br />
function disableselect(e){return false}<br />
function reEnable(){return true}<br />
document.onselectstart=new Function ('return false')<br />
if (window.sidebar){document.onmousedown=disableselectdocument.onclick=reEnable}<br />
// --&gt;<br />
&lt;/script&gt;</code></p>
<p><code>&lt;script language="JavaScript"&gt;<br />
&lt;!--<br />
// Disable right mouse click Script<br />
var message="Function Disabled!";<br />
function clickIE4() {if (event.button==2) {alert(message);return false;}}<br />
function clickNS4(e) {if (document.layers||document.getElementById&amp;&amp;!document.all)<br />
{if (e.which==2||e.which==3){alert(message);return false;}}}<br />
if (document.layers) {document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS4;}<br />
else if (document.all&amp;&amp;!document.getElementById) {document.onmousedown=clickIE4;}<br />
document.oncontextmenu=new Function("alert(message);return false")<br />
// --&gt;<br />
&lt;/script&gt; </code></p>
<p><code> &lt;style type="text/css"&gt; @media print { body { display:none } } &lt;/style&gt;</code></p>
<p><span id="more-1307"></span></p>
<p>Con Sharepoint 2010 non è possibile però inserire javascript su una webpart di contenuto, inoltre per raggiungere lo scopo serve mettere alcune righe di codice nel tag <em>&lt;head&gt;</em> della pagina. Dovremo quindi utilizzare <strong>Sharepoint Designer</strong>, dove possiamo entrare nell&#8217;editor della pagina wiki e cliccando su <em>Modalità Avanzata</em> nel ribbon siamo in grado di modificare il codice. Ogni pagina Sharepoint contiene un tag, <em>PlaceHolderAdditionalPageHead</em>, pensato appositamente per aggiungere codice custom nell&#8217;head della pagina.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/11/designer.png"><img class="alignnone size-full wp-image-1309" title="designer" src="http://www.diplod.it/wp-content/uploads/2011/11/designer.png" alt="" width="870" height="546" /></a></p>
<p>Nell&#8217;immagine sopra ecco un esempio pratico:<strong> risultato raggiunto</strong>! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2011/11/22/impedire-la-stampa-e-il-copia-incolla-da-pagine-wiki-su-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Better Life Index: javascript e statistiche sulle nazioni dell&#8217;OCSE</title>
		<link>http://www.diplod.it/2011/10/19/better-life-index-javascript-e-statistiche-sulle-nazioni-dellocse/</link>
		<comments>http://www.diplod.it/2011/10/19/better-life-index-javascript-e-statistiche-sulle-nazioni-dellocse/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 22:26:59 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Politica]]></category>
		<category><![CDATA[better life index]]></category>
		<category><![CDATA[indice]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ocse]]></category>
		<category><![CDATA[oecd]]></category>
		<category><![CDATA[statistiche]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1273</guid>
		<description><![CDATA[Condividi il tuo Better Life Index, per scoprire qual è il Paese in cui preferisci vivere.. o semplicemente per confrontare il benessere nei Paesi OCSE.]]></description>
				<content:encoded><![CDATA[<p><iframe src="http://www.oecdbetterlifeindex.org/embed/?weight=23355524314&#038;display=alpha&#038;include=ITA" width="540" height="420" frameborder="0"></iframe></p>
<p>In attesa di tempi migliori per poter tornare a scrivere su queste pagine con più intensità (mi sono segnato davvero un sacco di appunti..), segnalo questo incantevole grafico fatto con sapienza. Si tratta del <strong><a title="better life index" href="http://www.oecdbetterlifeindex.org/#/11111111111" target="_blank">Better Life Index</a></strong>. Descrive l&#8217;indice di desiderabilità di una nazione in base ai propri valori, tenendo conto di una serie di indicatori sociali. Ecco il video di presentazione dell&#8217;iniziativa.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/n2Zqj6CzDXs" frameborder="0" allowfullscreen></iframe></p>
<p><span id="more-1273"></span></p>
<p>Tutte le informazioni sull&#8217;iniziativa sono disponibili a <a href="http://www.oecdbetterlifeindex.org/about/better-life-initiative/" target="_blank">questa pagina</a>; per farla breve: vengono confrontati i <strong>34 Paesi facenti parte dell&#8217;<a title="OCSE" href="http://it.wikipedia.org/wiki/Organizzazione_per_la_Cooperazione_e_lo_Sviluppo_Economico" target="_blank">OCSE</a></strong>, l&#8217;Organizzazione per la Cooperazione lo Sviluppo Economico. Non è soltanto un mero gioco di <strong>javascript</strong>, da questo sito si possono imparare svariate cose, cliccando sul &#8220;fiore&#8221; della nazione è infatti possibile leggere un report sulle performance in generale e sulle politiche messe in atto nei singoli aspetti del Better Life Index.</p>
<p>Si può <strong>creare il proprio Better Life Index</strong> e condividerlo come ho fatto sopra, sia su un blog che via Facebook o Twitter. <strong>Perchè provare e condividere?</strong> Ogni volta che si crea un indice, entrerà in una banca dati accessibile al pubblico. Nel corso del tempo, questo aiuterà l&#8217;OCSE a costruire un quadro di quello che i cittadini di tutto il mondo considerano come forme di benessere. Buona condivisione..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2011/10/19/better-life-index-javascript-e-statistiche-sulle-nazioni-dellocse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Branding di Sharepoint 2010: ABC e qualche appunto.</title>
		<link>http://www.diplod.it/2011/08/09/branding-di-sharepoint-2010-abc-appunti/</link>
		<comments>http://www.diplod.it/2011/08/09/branding-di-sharepoint-2010-abc-appunti/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 14:20:04 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[branding]]></category>
		<category><![CDATA[customizzazione]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[sharepoint designer]]></category>
		<category><![CDATA[sharepoint2010]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1226</guid>
		<description><![CDATA[Sharepoint 2010 è sulla scena da ormai oltre un anno, è tempo di mettere nero su bianco qualche appunto ad imperitura memoria, magari tornerà utile ad altri. L&#8217;obiettivo è una semplice e sbrigativa customizzazione di un portale Sharepoint con colori personalizzati, un minimo di vestizione grafica e la scelta della master page e dell&#8217;icona di rappresentanza. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.diplod.it/wp-content/uploads/2011/08/style-library.png"></a>Sharepoint 2010 è sulla scena da ormai oltre un anno, è tempo di mettere nero su bianco qualche appunto ad imperitura memoria, magari tornerà utile ad altri. L&#8217;obiettivo è una semplice e sbrigativa customizzazione di un portale Sharepoint con colori personalizzati, un minimo di vestizione grafica e la scelta della<em> master page</em> e dell&#8217;icona di rappresentanza.</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/08/look-and-feel.png"><img class="alignleft size-full wp-image-1240" title="look-and-feel" src="http://www.diplod.it/wp-content/uploads/2011/08/look-and-feel.png" alt="" width="267" height="139" /></a></p>
<p>Tutto parte dal menù del sito su cui si intende intervenire: <em>Site Action</em> -&gt; <em>Site Settings</em>. Sotto al gruppo <em>Look and Feel</em> troveremo varie voci, come nell&#8217;immagine a sinistra. Una prima veloce sistemata ai colori si può dare cliccando su <em>Site theme</em>, da qui possiamo impostare la tavolozza cromatica che desideriamo. Va detto, a onor del vero, che se vogliamo salvare un nuovo tema cromatico dovremo <a title="Using power point create a custom theme in sharepoint 2010" href="http://sqlserverpedia.com/blog/sql-server-bloggers/using-powerpoint-2010-to-create-a-custom-theme-for-sharepoint-2010/" target="_blank">utilizzare Power Point</a>, ma l&#8217;idea di lavorare su un sito web attraverso power point mi sconvolge talmente tanto che non l&#8217;ho presa nemmeno in considerazione. Ma volenti o nolenti prima o poi sarà da fare.</p>
<p>Una volta decisi i colori, possiamo cimentarci nella creazione di una master page personalizzata, da utilizzare come base per la nostra web application, a cui associare un foglio di style CSS che conterrà le nostre personalizzazioni ed una eventuale favicon. Per fare ciò è necessario aprire <a title="sharepoint designer 2010" href="http://office.microsoft.com/it-it/sharepoint-designer-help/introduzione-a-sharepoint-designer-2010-HA010370548.aspx" target="_blank">Sharepoint Designer 2010</a> e caricare il sito web, dal menù di sinistra dobbiamo quindi selezionare la voce &#8220;List and Libraries&#8221; e successivamente entrare nella cartella &#8220;Style Library&#8221; (vedi figura sotto).<br />
<span id="more-1226"></span></p>
<p style="text-align: center;"><a href="http://www.diplod.it/wp-content/uploads/2011/08/Cattura1.png"><img class="size-full wp-image-1325 aligncenter" style="border-style: initial; border-color: initial;" title="Cattura1" src="http://www.diplod.it/wp-content/uploads/2011/08/Cattura1.png" alt="" width="675" height="523" /></a></p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/08/Cattura1.png"></a>In questa cartella andremo a creare una nuova cartella, chiamandola &#8220;mystyle&#8221; dove posizioniamo il CSS e la favicon, oltre a eventuali immagini utili per abbellire tramite CSS il nostro sito web.</p>
<p style="text-align: center;"><a href="http://www.diplod.it/wp-content/uploads/2011/08/Cattura2.png"><img class="aligncenter size-full wp-image-1327" title="Cattura2" src="http://www.diplod.it/wp-content/uploads/2011/08/Cattura2.png" alt="" width="415" height="181" /></a></p>
<p>A questo punto è il momento di creare la master page. Come prima, da menù, andiamo sulla voce &#8220;Master Pages&#8221; (vedi figura sotto).</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/08/Cattura3.png"><img class="aligncenter size-full wp-image-1328" title="Cattura3" src="http://www.diplod.it/wp-content/uploads/2011/08/Cattura3.png" alt="" width="511" height="407" /></a></p>
<p>Noteremo che ci sono due pagine fondamentali, una dal nome &#8220;default.master&#8221; e l&#8217;altra &#8220;v4.master&#8221;. Le pagine master definiscono una struttura comune per tutte le pagine Web in Microsoft SharePoint Server. Per impostazione predefinita, quando viene richiesta una pagina, la pagina master e la pagina di contenuto sono combinate per produrre una singola pagina. Utilizzando una pagina master, tutte le pagine di contenuti e applicazioni condividono la stessa struttura della pagina e hanno lo stesso look &amp; feel. La pagina <em>default.master</em> è utile per la retro compatibilità con SharePoint 2007, la versione 2010 utilizza la pagina<em> v4.master</em>, famosa per l&#8217;interfaccia a ribbon tipica di Office.</p>
<p>Per completezza, ecco la descrizione delle master page di default dal sito Microsoft:</p>
<table>
<tbody>
<tr>
<th><strong>NAME / DEFAULT FILE NAME</strong></th>
<th><strong>DESCRIPTION</strong></th>
<th><strong>USES ON A SHAREPOINT SITE</strong></th>
</tr>
<tr>
<td>Primary master<br />
page<strong> </strong></p>
<p style="display: inline !important;"><strong>v4.master</strong></p>
</td>
<td>Used for content and administration pages. Provides the interface and layout for SharePoint 2010.</td>
<td>Team Site home page, list and library pages, and site settings page.</td>
</tr>
<tr>
<td>Minimal master page<br />
<strong> </strong></p>
<p style="display: inline !important;"><strong>minimal.master</strong></p>
</td>
<td>Contains minimal SharePoint content, used for full-screen functionality or embedded applications.</td>
<td>The home and search results pages on a Search Center, pages that host Word or Excel web applications.</td>
</tr>
<tr>
<td>Publishing master page<br />
<strong> </strong></p>
<p style="display: inline !important;"><strong>nightandday.master</strong></p>
</td>
<td>Used for pages on a SharePoint Server publishing-enabled site.</td>
<td>The home page, about us, or press release page on a publishing intranet, extranet, or Internet-facing site.</td>
</tr>
<tr>
<td>2007 default master page<br />
<strong> </strong></p>
<p style="display: inline !important;"><strong>default.master</strong></p>
</td>
<td>Used to support legacy SharePoint sites, which haven’t been visually upgraded to SharePoint 2010.</td>
<td>Home page, site pages, and list pages on a SharePoint 2007 site before visual upgrade.</td>
</tr>
</tbody>
</table>
<p>Copiamo quindi la pagina <em>v4.master</em> e nominiamola ad esempio <em>mypage.master</em>. Ora doppio clic sulla pagina appena creata e si presenterà davanti a noi una schermata, al centro c&#8217;è la voce &#8220;edit file&#8221;, clicchiamoci sopra per fare il check-in della pagina e iniziare a modificarla secondo le nostre esigenze. L&#8217;obiettivo è inserire il riferimento a un CSS che utilizzeremo per modificare esclusivamente ciò che ci interessa. Passiamo quindi alla visualizzazione del codice.</p>
<p>All&#8217;interno del tag <em>&lt;head&gt;</em> possiamo inserire i riferimenti al CSS e ad una favicon specifici.</p>
<p><code>&lt;SharePoint:SPShortcutIcon runat="server" IconUrl="/Style Library/mystyle/favicon.ico"/&gt;<br />
&lt;SharePoint:CssRegistration name="/Style Library/mystyle/style.css" After="corev4.css" runat="server"/&gt;</code></p>
<p>Abbiamo messo il riferimento ai file salvati in precedenza nella cartella appositamente creata. A questo punto dobbiamo salvare e impostare la master page appena creata come pagina di default. Per fare ciò, si può cliccare col tasto destro sul nome del file e selezionare la voce &#8220;Imposta come pagina master predefinita&#8221; oppure dal menù Site Action sul browser selezionare la voce &#8220;Master page&#8221; e impostare la pagina custom come quella predefinita (vedi immagine sotto).</p>
<p><a href="http://www.diplod.it/wp-content/uploads/2011/08/custom-master.png"><img class="aligncenter size-full wp-image-1252" title="custom master" src="http://www.diplod.it/wp-content/uploads/2011/08/custom-master.png" alt="" width="887" height="360" /></a></p>
<p>Ora siamo liberi di modificare il CSS come meglio crediamo, nel mio caso ad esempio ho inserito questo codice:</p>
<p><code>body {	background: #fff url(bg_erbetta.png) repeat-x bottom left;}<br />
.s4-title {	background: #fafafa url(header_bg.png) no-repeat bottom right;}<br />
.s4-socialdata-notif, s4-socialdata {<br />
background: #fafafa;<br />
/* Fallback for web browsers that doesn't support RGBa */<br />
background: rgb(250, 250, 250);<br />
/* RGBa with 0.6 opacity */<br />
background: rgba(250, 250, 250, 0.9);<br />
/* For IE 5.5 - 7*/<br />
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99fafafa, endColorstr=#99fafafa);<br />
/* For IE 8*/<br />
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99fafafa, endColorstr=#99fafafa)"; }<br />
.s4-ca { background: transparent;}</code></p>
<p>Ovviamente le possibilità di personalizzazione della master page sono tante altre, si possono spostare gli elementi o inserire pezzi di codice specifici. In questi appunti ho trascritto solo l&#8217;ABC, chi più ne ha più ne metta..</p>
<p>Chiudo con alcune utili risorse per chi vuole approfondire il tema:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/gg430141.aspx">http://msdn.microsoft.com/en-us/library/gg430141.aspx</a></li>
<li><a href="http://office.microsoft.com/en-us/sharepoint-designer-help/customize-a-master-page-to-brand-your-site-HA102449505.aspx">http://office.microsoft.com/en-us/sharepoint-designer-help/customize-a-master-page-to-brand-your-site-HA102449505.aspx</a></li>
<li><a href="http://www.thesharepointmuse.com/sharepoint-2010-branding/">http://www.thesharepointmuse.com/sharepoint-2010-branding/</a></li>
<li><a href="http://nonsolosharepoint.wordpress.com/2010/01/26/its-a-ribbon-behaviour/">http://nonsolosharepoint.wordpress.com/2010/01/26/its-a-ribbon-behaviour/</a> -&gt; utile riferimento sul tema ribbon..</li>
<li><a href="http://nonsolosharepoint.wordpress.com/2009/12/23/migrare-una-master-page-da-sharepoint-2007-a-sharepoint-2010/">http://nonsolosharepoint.wordpress.com/2009/12/23/migrare-una-master-page-da-sharepoint-2007-a-sharepoint-2010/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2011/08/09/branding-di-sharepoint-2010-abc-appunti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 e jQuery: finalmente un player audio video coi fiocchi</title>
		<link>http://www.diplod.it/2011/04/08/html5-e-jquery-finalmente-un-player-audio-video-coi-fiocchi/</link>
		<comments>http://www.diplod.it/2011/04/08/html5-e-jquery-finalmente-un-player-audio-video-coi-fiocchi/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 15:58:09 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1209</guid>
		<description><![CDATA[Si chiama Projekktor, ed è davvero ciò che cercavo da tempo. Un player senza fronzoli, che funzioni su tutti i browser. Senza flash, che quegli aggeggi piccoli e cool così come gli attrezzi grossi e prestanti non supportano. jQuery certo, ma anche il pulitissimo HTML5.]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.diplod.it/wp-content/uploads/2011/04/thisisprojekktor.png"><img class="size-medium wp-image-1210 aligncenter" title="thisisprojekktor" src="http://www.diplod.it/wp-content/uploads/2011/04/thisisprojekktor-300x208.png" alt="" width="300" height="208" /></a></p>
<p>Si chiama <strong><a title="projekktor" href="http://www.projekktor.com" target="_blank">Projekktor</a></strong>, ed è davvero ciò che cercavo da tempo. Un player senza fronzoli, che funzioni su tutti i browser. Senza flash, che quegli <a title="iphone" href="http://www.apple.com/it/iphone/" target="_blank">aggeggi piccoli e cool</a> così come gli <a title="flash player 64 bit" href="http://www.adobe.com/it/support/flashplayer/ts/documents/6b3af6c9.htm" target="_blank">attrezzi grossi e prestanti</a> non supportano. jQuery certo, ma anche il pulitissimo HTML5.</p>
<p>Adoro questo pezzo di codice:<br />
<code><br />
&lt;video id="player_a" poster="intro.png" title="this is Projekktor" width="640" height="385" controls&gt;<br />
&lt;source src="intro.ogv" type="video/ogg" /&gt;<br />
&lt;source src="intro.mp4" type="video/mp4" /&gt;<br />
&lt;source src="intro.webm" type="video/mp4" /&gt;<br />
&lt;/video&gt;<br />
&lt;script type="text/javascript"&gt;$(document).ready(function() {projekktor('#player_a'); // instantiation<br />
});&lt;/script&gt;<br />
</code><br />
Chiaro e leggibile, grazie al nuovo tag <a title="HTML video tag" href="http://www.w3schools.com/html5/tag_video.asp" target="_blank">&lt;video&gt; HTML5</a> ormai supportato da diversi browser. In sostanza viene specificata nell&#8217;attributo poster una immagine di partenza da far visualizzare al caricamento dell&#8217;oggetto e diverse sorgenti video, questo per garantire una maggiore compatibilità sui diversi sistemi.</p>
<p>Il plugin jQuery si occupa del resto: <a href="http://www.projekktor.com/docs/playlists" target="_blank">playlist</a>, gestione dei <a href="http://www.projekktor.com/docs/theming">temi grafici</a>.. ci sono pure le <a href="http://www.projekktor.com/docs/api">API</a> disponibili.</p>
<p>Perfetto insomma!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2011/04/08/html5-e-jquery-finalmente-un-player-audio-video-coi-fiocchi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Highcharts: grafici interattivi con jQuery ottimizzati anche per iPhone / Android</title>
		<link>http://www.diplod.it/2011/02/17/highcharts-grafici-interattivi-con-jquery-ottimizzati-anche-per-iphone-android/</link>
		<comments>http://www.diplod.it/2011/02/17/highcharts-grafici-interattivi-con-jquery-ottimizzati-anche-per-iphone-android/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 17:52:14 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Applicazioni Web]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[applicazioni]]></category>
		<category><![CDATA[charts]]></category>
		<category><![CDATA[grafici]]></category>
		<category><![CDATA[highcharts]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1176</guid>
		<description><![CDATA[Grafici interattivi e dinamici con Highcharts, un prodotto molto flessibile per costruire cruscotti o report. Possibilità di caricare i dati in maniera asincrona e svariati modi per visualizzarli.. da provare!]]></description>
				<content:encoded><![CDATA[<p><script src="http://www.diplod.it/wp-content/uploads/2011/02/highcharts.js" type="text/javascript"></script><br />
<script type="text/javascript">// <![CDATA[  
$(document).ready(function () { 
//GRAFICO CARICATO QUANDO IL DOM DEL DOCUMENTO HTML E' PRONTO             
chartTurnover = new Highcharts.Chart({               
chart: { 
//id del div all'interno del quale il grafico deve essere visualizzato                 
renderTo: 'content4',                  
zoomType: 'xy'},               
title: {
//descrizione grafico: titolo e sottotitolo
text: 'Fatturato - Obiettivi'
},               
subtitle: {
text: 'Confronto tra vendite effettive e target previsionali'
},
//definizione dell'asse X
xAxis: [
{
categories: ['Qrt1', 'Qrt2', 'Qrt3', 'Qrt4']
}],
//definizione dell'asse Y
yAxis: [{
// aggiungo il simbolo dell'euro alle etichette dell'asse Y
labels: {
formatter: function() {
return this.value +'€'; 
} 
},
//Descrizione posta a lato dell'asse Y
title: {
text: 'Targets'
}
}], 
//Definizione del testo da visualizzare nei tooltip
tooltip: {
formatter: function() {
return ''+ this.series.name + ' ' + this.x +': '+ this.y + '€';
}
}, 
//Posizionamento legenda
legend: {
layout: 'vertical',
align: 'left',
x: 120,
verticalAlign: 'top',
y: 0,
floating: true
},
//Definisco il tipo di rappresentazione grafica
plotOptions: {
column: {
stacking: 'normal'
}
},
//Definizione delle serie di valori
series: [{
name: 'Fatturato zona1',
type: 'column',
data: [14183, 12451, 7254, 9658]
},
{ 
name: 'Fatturato zona2',
type: 'column',
data: [2183, 10451, 5254, 7658]
},
{
name: 'Fatturato zona3',
type: 'column',
data: [2300, 451, 4254, 4658]
},
{
//Ultima serie, di tipo linea (spline), per valorizzare i target
name: 'Targets',
type: 'spline',
data: [18175, 21556, 17145, 19897]
}]
}); 
//end
});
// ]]&gt;</script><br />
<!-- div grafico turnover --></p>
<div id="content4" class="grid_12 box">
<div class="loading" style="background: url(http://www.diplod.it/wp-content/uploads/2011/02/ajax-loader.gif) no-repeat center center; text-align: center; min-height: 100px;">Loading..</div>
</div>
<p>Come ti sembra questo <strong>grafico</strong>? Prova a cliccare sugli elementi della legenda e vedrai che è <strong>interattivo</strong>, potresti utilizzarlo per simulare il rispetto degli obiettivi in assenza di fatturato ottenuto su alcune zone.. Prova a selezionare col mouse una zona del grafico e vedrai puoi fare lo <strong>zoom sui dati</strong> che ti interessano.. Queste e tante altre funzionalità si possono ottenere grazie ad <strong><a title="Highcharts - grafici interattivi" href="http://highcharts.com/">Highcharts</a></strong>, un validissimo <strong>javascript </strong>open source che lavora con jQuery per renderizzare grafici più o meno complessi e molto accattivanti.</p>
<p>Il tutto <strong>senza flash</strong>, cosa a cui difficilmente si poteva rinunciare in era pre-<a title="jquery" href="http://www.google.it/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CCoQFjAA&amp;url=http%3A%2F%2Fjquery.com%2F&amp;ei=MFtdTffFMMKDOrbx3bML&amp;usg=AFQjCNFA7CZ5sWRDhHPuipmhL7zVksjC2A" target="_blank">jQuery</a> se si volevano ottenere i medesimi risultati. Le tipologie di grafici sono molteplici: si va dalla immancabile <a title="Highcharts demo" href="http://highcharts.com/demo/?example=pie-basic&amp;theme=default" target="_blank">torta</a> alla più ricercata <a title="Highcharts demo" href="http://highcharts.com/demo/?example=bar-negative-stack&amp;theme=default" target="_blank">rappresentazione demografica</a>, dal <a title="Highcharts demo" href="http://highcharts.com/demo/?example=column-stacked&amp;theme=default" target="_blank">grafico a barre</a> al potente grafico zoomabile sull&#8217;<a title="Highcharts demo" href="http://highcharts.com/demo/?example=dynamic-master-detail&amp;theme=default" target="_blank">andamento delle quotazioni</a> in borsa. E&#8217; inoltre possibile caricare i dati direttamente da una tabella definita in HTML all&#8217;interno della pagina, con poche righe di codice javascript.<br />
<span id="more-1176"></span></p>
<p>Sotto è riportato il codice, opportunamente commentato, dell&#8217;esempio mostrato in questo articolo.<br />
<code>//Carico il javascript di highcharts, dopo aver caricato jQuery<br />
&lt;script src="js/highcharts.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;// &lt;![CDATA[</p>
<div id="_mcePaste">$(document).ready(function () {</div>
<div id="_mcePaste">//GRAFICO CARICATO QUANDO IL DOM DEL DOCUMENTO HTML E' PRONTO</div>
<div id="_mcePaste">chartTurnover = new Highcharts.Chart({</div>
<div id="_mcePaste">chart: {</div>
<div id="_mcePaste">//id del div all'interno del quale il grafico deve essere visualizzato</div>
<div id="_mcePaste">renderTo: 'content4',</div>
<div id="_mcePaste">zoomType: 'xy'},</div>
<div id="_mcePaste">title: {</div>
<div id="_mcePaste">//descrizione grafico: titolo e sottotitolo</div>
<div id="_mcePaste">text: 'Fatturato - Obiettivi'</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">subtitle: {</div>
<div id="_mcePaste">text: 'Confronto tra vendite effettive e target previsionali'</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">//definizione dell'asse X</div>
<div id="_mcePaste">xAxis: [</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">categories: ['Qrt1', 'Qrt2', 'Qrt3', 'Qrt4']</div>
<div id="_mcePaste">}],</div>
<div id="_mcePaste">//definizione dell'asse Y</div>
<div id="_mcePaste">yAxis: [{</div>
<div id="_mcePaste">// aggiungo il simbolo dell'euro alle etichette dell'asse Y</div>
<div id="_mcePaste">labels: {</div>
<div id="_mcePaste">formatter: function() {</div>
<div id="_mcePaste">return this.value +'€';</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">//Descrizione posta a lato dell'asse Y</div>
<div id="_mcePaste">title: {</div>
<div id="_mcePaste">text: 'Targets'</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}],</div>
<div id="_mcePaste">//Definizione del testo da visualizzare nei tooltip</div>
<div id="_mcePaste">tooltip: {</div>
<div id="_mcePaste">formatter: function() {</div>
<div id="_mcePaste">return ''+ this.series.name + ' ' + this.x +': '+ this.y + '€';</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">//Posizionamento legenda</div>
<div id="_mcePaste">legend: {</div>
<div id="_mcePaste">layout: 'vertical',</div>
<div id="_mcePaste">align: 'left',</div>
<div id="_mcePaste">x: 120,</div>
<div id="_mcePaste">verticalAlign: 'top',</div>
<div id="_mcePaste">y: 0,</div>
<div id="_mcePaste">floating: true</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">//Definisco il tipo di rappresentazione grafica</div>
<div id="_mcePaste">plotOptions: {</div>
<div id="_mcePaste">column: {</div>
<div id="_mcePaste">stacking: 'normal'</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">//Definizione delle serie di valori</div>
<div id="_mcePaste">series: [{</div>
<div id="_mcePaste">name: 'Fatturato zona1',</div>
<div id="_mcePaste">type: 'column',</div>
<div id="_mcePaste">data: [14183, 12451, 7254, 9658]</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">name: 'Fatturato zona2',</div>
<div id="_mcePaste">type: 'column',</div>
<div id="_mcePaste">data: [2183, 10451, 5254, 7658]</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">name: 'Fatturato zona3',</div>
<div id="_mcePaste">type: 'column',</div>
<div id="_mcePaste">data: [2300, 451, 4254, 4658]</div>
<div id="_mcePaste">},</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">//Ultima serie, di tipo linea (spline), per valorizzare i target</div>
<div id="_mcePaste">name: 'Targets',</div>
<div id="_mcePaste">type: 'spline',</div>
<div id="_mcePaste">data: [18175, 21556, 17145, 19897]</div>
<div id="_mcePaste">}]</div>
<div id="_mcePaste">});</div>
<div id="_mcePaste">//end</div>
<div id="_mcePaste">// ]]&gt;&lt;/script&gt;</div>
<p></code></p>
<p>Data la sua natura di puro css e javascript, questo grafico è agilmente fruibile anche da dispositivi mobili come iPhone o Android, inoltre è ben renderizzato dai principali browser. Si tratta di un prodotto davvero interessante che potrebbe tornare utile in diverse applicazioni stand-alone, a costo zero. Ben diverso dal classico <a href="http://www.diplod.it/2008/04/20/google-chart-api-grafici-dinamici-in-un-attimo/">Google Charts</a>, servizio comodissimo che però pecca in quanto ad interattività: all&#8217;utente viene infatti restituita in quel caso una immagine statica.</p>
<p><strong>Cosa Manca?</strong> Mancano i &#8220;<strong>geo-grafici</strong>&#8220;, ovvero la possibilità di visualizzare i dati su una cartina; mancano i <strong>tachimetri</strong>, per visualizzare in un colpo d&#8217;occhio l&#8217;andamento più o meno positivo di un indicatore. Sono comunque cose a cui si può sopperire spulciando bene l&#8217;elenco dei plugin jQuery..<br />
<strong>E voi? Che cosa utilizzate in questi casi?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2011/02/17/highcharts-grafici-interattivi-con-jquery-ottimizzati-anche-per-iphone-android/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lavorare con le date in javascript: il tool che salva la vita!</title>
		<link>http://www.diplod.it/2010/09/29/lavorare-con-le-date-in-javascript-il-tool-che-salva-la-vita/</link>
		<comments>http://www.diplod.it/2010/09/29/lavorare-con-le-date-in-javascript-il-tool-che-salva-la-vita/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 14:43:22 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[vb]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1140</guid>
		<description><![CDATA[jsDate. Per chi non vuole impazzire con le classiche funzioni javascript, che sono utili ma non sempre funzionali, esiste questo comodo js da includere nei propri lavori per agire in maniera efficace sulle date. La funzione più importante è sicuramente il DateDiff(), comodissimo per fare somme e differenze al volo.]]></description>
				<content:encoded><![CDATA[<p><a href="http://slingfive.com/pages/code/jsDate/jsDate.html"><strong>jsDate</strong></a>: emulatore delle funzioni native Visual Basic in javascript. Ovvero, come fare somme e differenze, trasformare in diversi formati, ricavare il giorno della settimana o il mese da stringhe che rappresentano date.</p>
<p>Per chi non vuole impazzire con le classiche funzioni javascript, che sono utili ma non sempre funzionali, esiste questo comodo js da includere nei propri lavori per agire in maniera efficace sulle date. La funzione più importante è sicuramente il DateDiff(), comodissimo per fare somme e differenze <em>al volo</em> sulle date.</p>
<p>Ecco un po&#8217; di giochetti che si possono fare grazie a questo script, lo schema esplicativo sottostante è stato preso direttamente dal <a href="http://slingfive.com/pages/code/jsDate/jsDate.html">sito dell&#8217;autore</a>.<br />
<span id="more-1140"></span></p>
<p><script language="javascript" type="text/javascript" src="http://www.diplod.it/wp-content/uploads/2010/09/jsDate.js"></script><br />
<script language="javascript" type="text/javascript" src="http://www.diplod.it/wp-content/uploads/2010/09/jsDate_demo.js"></script> </p>
<div id="params" style="float: left; width: 40%">
<h6>1) Imposta i parametri:</h6>
<p>	<label for="txtDate1"><span>date1</span> <input type="text" id="txtDate1" value="9/2/2005 1:23:45 am" /></label><br />
	<button onclick="oDate1.value = new Date();" title="set to Now">Crea una nuova data</button> </p>
<p>	<label for="txtDate2"><span>date2</span><br />
	<input type="text" id="txtDate2" value="12/5/2009 5:43:21 am" /></label><br />
	<button onclick="oDate2.value = new Date();" title="set to Now">Crea una nuova data</button> </p>
<p>	<label for="selInterval"><span>interval</span><br />
	<select id="selInterval"><br />
		<option value=""></option><br />
		<option value="yyyy" selected="selected">yyyy (year)</option><br />
		<option value="q">q &nbsp; &nbsp;(quarter)</option><br />
		<option value="m">m &nbsp; &nbsp;(month)</option><br />
		<option value="y">y &nbsp; &nbsp;(day of year)</option><br />
		<option value="d">d &nbsp; &nbsp;(day)</option><br />
		<option value="w">w &nbsp; &nbsp;(weekday)</option><br />
		<option value="ww">ww &nbsp;&nbsp;(week of year)</option><br />
		<option value="h">h &nbsp; &nbsp;(hour)</option><br />
		<option value="n">n &nbsp; &nbsp;(minute)</option><br />
		<option value="s">s &nbsp; &nbsp;(seconds)</option><br />
		<option value="ms" style="color:red;">ms &nbsp;&nbsp;(milliseconds)</option><br />
	</select></label> </p>
<p>	<label for="txtNumber"><span>number</span><br />
	<input type="text" id="txtNumber" value="1" /></label> </p>
<p>	<label for="selFirstDayOfWeek"><span>firstDayOfWeek</span><br />
	<select id="selFirstDayOfWeek"><br />
		<option value=""></option><br />
		<option value="0">0 : vbUseSystemDayOfWeek (==1)</option><br />
		<option value="1">1 : vbSunday</option><br />
		<option value="2">2 : vbMonday</option><br />
		<option value="3">3 : vbTuesday</option><br />
		<option value="4">4 : vbWednesday</option><br />
		<option value="5">5 : vbThursday</option><br />
		<option value="6">6 : vbFriday</option><br />
		<option value="7">7 : vbSaturday</option><br />
	</select></label> </p>
<p>	<label for="selNamedFormat"><span>namedFormat</span><br />
	<select id="selNamedFormat"><br />
		<option value=""></option><br />
		<option value="0" selected="selected">0 : vbGeneralDate</option><br />
		<option value="1">1 : vbLongDate</option><br />
		<option value="2">2 : vbShortDate</option><br />
		<option value="3">3 : vbLongTime</option><br />
		<option value="4">4 : vbShortTime</option><br />
	</select></label> </p>
<p>	<label for="txtFormat"><span>format</span><br />
	<input type="text" id="txtFormat" value="ddd mmm d, yyyy" 	title="possible values:

	c, d, dd, ddd, dddd, ddddd, dddddd, m, mm, mmm, mmmm, q, y, yy, yyyy

	h, hh, n, nn, s, ss, t t t t t, AM/PM, am/pm, A/P, a/p, AMPM, timezone, time24, time"/></label><br /> <br />
	<label for="chkAbbreviate"><span>abbreviate</span><br />
	<input type="checkbox" id="chkAbbreviate" value="true" /></label> </p>
</div>
<div id="functions" style="float: right; width: 40%">
<h6>2) Chiama una funzione:</h6>
<div style="display:table;">
	<button id="btnTestIsDate" assocCtlIDs="txtDate1"><b>IsDate</b> (date1)</button><br /> <br />
	<button id="btnTestCDate" assocCtlIDs="txtDate1"><b>CDate</b> (date1)</button><br /> <br />
	<button id="btnTestDateAdd" assocCtlIDs="selInterval,txtNumber,txtDate1"><b>DateAdd</b> (interval, number, date1)</button><br /> <br />
	<button id="btnTestDateDiff" assocCtlIDs="selInterval,txtDate1,txtDate2,selFirstDayOfWeek"><b>DateDiff</b> (interval, date1, date2, <i>firstDayOfWeek</i>)</button><br /> <br />
	<button id="btnTestDatePart" assocCtlIDs="selInterval,txtDate1,selFirstDayOfWeek"><b>DatePart</b> (interval, date1, <i>firstDayOfWeek</i>)</button><br /> <br />
	<button id="btnTestMonthName" assocCtlIDs="txtNumber,chkAbbreviate"><b>MonthName</b> (number, <i>abbreviate</i>)</button><br /> <br />
	<button id="btnTestWeekdayName" assocCtlIDs="txtNumber,chkAbbreviate,selFirstDayOfWeek"><b>WeekdayName</b> (number, <i>abbreviate</i>, <i>firstDayOfWeek</i>)</button><br /> <br />
	<button id="btnTestWeekday" assocCtlIDs="txtNumber,selFirstDayOfWeek"><b>Weekday</b> (number, <i>firstDayOfWeek</i>)</button><br /> <br />
	<button id="btnTestFormatDateTime" assocCtlIDs="txtDate1,selNamedFormat"><b>FormatDateTime</b> (date1, <i>namedFormat</i>)</button><br /> <br />
	<button id="btnTestFormat" assocCtlIDs="txtDate1,txtFormat,selFirstDayOfWeek"><b>Format</b> (date1, <i>format</i>, <i>firstDayOfWeek</i>)</button><br /> 
	</div>
</div>
<p><br clear="all" /> </p>
<h6 style="margin-top:-1em;">3) Ottieni questo risultato:</h6>
<div id="result" style="background: yellow;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/09/29/lavorare-con-le-date-in-javascript-il-tool-che-salva-la-vita/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Componenti Ajax e UI Toolkit per applicazioni web RIA</title>
		<link>http://www.diplod.it/2010/07/19/componenti-ajax-e-ui-toolkit-per-applicazioni-web-ria/</link>
		<comments>http://www.diplod.it/2010/07/19/componenti-ajax-e-ui-toolkit-per-applicazioni-web-ria/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 06:42:17 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Ajax e Javascript]]></category>
		<category><![CDATA[Applicazioni Web]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[toolkit]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1087</guid>
		<description><![CDATA[Volete stupire con componenti dinamici pronti all'uso? Creare applicazioni web avanzate non è poi così laborioso, oggi si trovano un sacco di risorse in rete. Ecco una breve panoramica.]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.diplod.it/wp-content/uploads/2010/07/toolkit.png"><img class="size-full wp-image-1130 aligncenter" title="toolkit" src="http://www.diplod.it/wp-content/uploads/2010/07/toolkit.png" alt="" width="415" height="212" /></a></p>
<p><strong>Volete stupire con componenti dinamici pronti all&#8217;uso?</strong> Creare <strong>applicazioni web</strong> avanzate non è poi così laborioso, oggi si trovano un sacco di risorse in rete. Una di queste è il<strong> <a title="DHTMLX" href="http://www.dhtmlx.com/" target="_blank">DHTMLX UI Toolkit</a></strong>, una serie di <strong>librerie javascript</strong> corredate da tantissimi esempi. La documentazione è ciò che fa la differenza: gli script non documentati e con pochi esempi sono quasi inutilizzabili, se non perdendo un sacco di ore per studiarseli. UI Toolkit viene distribuito in uno zip con diverse pagine di pratiche demo.</p>
<p>Per chi lavora in <strong>ambiente .NET</strong> molto interessante è questo <a title="Ajax Control Toolkit" href="http://ajaxcontroltoolkit.codeplex.com/" target="_blank"><strong>Ajax Control Toolkit</strong></a>, un insieme di controlli utilizzabili direttamente in <strong>Visual Studio</strong> con il drag and drop, per costruire form e applicazioni accattivanti. Da Codeplex si possono scaricare anche i sorgenti, corredati da diversi esempi. In <a title="Ajax control toolkit - esempi" href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/" target="_blank">questa pagina</a> si può avere una panoramica di tutte le funzionalità disponibili, sono davvero parecchie:</p>
<p><span id="more-1087"></span></p>
<ul>
<li><a id="ctl00_SamplesLinks_ctl01_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Accordion/Accordion.aspx">Accordion</a></li>
<li><a id="ctl00_SamplesLinks_ctl02_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AlwaysVisibleControl/AlwaysVisibleControl.aspx">AlwaysVisibleControl</a></li>
<li><a id="ctl00_SamplesLinks_ctl03_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Animation/Animation.aspx">Animation</a></li>
<li><a id="ctl00_SamplesLinks_ctl04_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx">AsyncFileUpload</a></li>
<li><a id="ctl00_SamplesLinks_ctl05_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AutoComplete/AutoComplete.aspx">AutoComplete</a></li>
<li><a id="ctl00_SamplesLinks_ctl06_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Calendar/Calendar.aspx">Calendar</a></li>
<li><a id="ctl00_SamplesLinks_ctl07_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/CascadingDropDown/CascadingDropDown.aspx">CascadingDropDown</a></li>
<li><a id="ctl00_SamplesLinks_ctl08_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/CollapsiblePanel/CollapsiblePanel.aspx">CollapsiblePanel</a></li>
<li><a id="ctl00_SamplesLinks_ctl09_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ColorPicker/ColorPicker.aspx">ColorPicker</a></li>
<li><a id="ctl00_SamplesLinks_ctl10_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ComboBox/ComboBox.aspx">ComboBox</a></li>
<li><a id="ctl00_SamplesLinks_ctl11_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ConfirmButton/ConfirmButton.aspx">ConfirmButton</a></li>
<li><a id="ctl00_SamplesLinks_ctl12_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/DragPanel/DragPanel.aspx">DragPanel</a></li>
<li><a id="ctl00_SamplesLinks_ctl13_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/DropDown/DropDown.aspx">DropDown</a></li>
<li><a id="ctl00_SamplesLinks_ctl14_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/DropShadow/DropShadow.aspx">DropShadow</a></li>
<li><a id="ctl00_SamplesLinks_ctl15_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/DynamicPopulate/DynamicPopulate.aspx">DynamicPopulate</a></li>
<li><a id="ctl00_SamplesLinks_ctl16_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/FilteredTextBox/FilteredTextBox.aspx">FilteredTextBox</a></li>
<li><a id="ctl00_SamplesLinks_ctl17_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/HoverMenu/HoverMenu.aspx">HoverMenu</a></li>
<li><a id="ctl00_SamplesLinks_ctl18_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/HTMLEditor/HTMLEditor.aspx">HTMLEditor</a></li>
<li><a id="ctl00_SamplesLinks_ctl19_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ListSearch/ListSearch.aspx">ListSearch</a></li>
<li><a id="ctl00_SamplesLinks_ctl20_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/MaskedEdit/MaskedEdit.aspx">MaskedEdit</a></li>
<li><a id="ctl00_SamplesLinks_ctl21_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ModalPopup/ModalPopup.aspx">ModalPopup</a></li>
<li><a id="ctl00_SamplesLinks_ctl22_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/MultiHandleSlider/MultiHandleSlider.aspx">MultiHandleSlider</a></li>
<li><a id="ctl00_SamplesLinks_ctl23_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/MutuallyExclusiveCheckBox/MutuallyExclusiveCheckBox.aspx">MutuallyExclusiveCheckBox</a></li>
<li><a id="ctl00_SamplesLinks_ctl24_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/NoBot/NoBot.aspx">NoBot</a></li>
<li><a id="ctl00_SamplesLinks_ctl25_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/NumericUpDown/NumericUpDown.aspx">NumericUpDown</a></li>
<li><a id="ctl00_SamplesLinks_ctl26_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/PagingBulletedList/PagingBulletedList.aspx">PagingBulletedList</a></li>
<li><a id="ctl00_SamplesLinks_ctl27_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/PasswordStrength/PasswordStrength.aspx">PasswordStrength</a></li>
<li><a id="ctl00_SamplesLinks_ctl28_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/PopupControl/PopupControl.aspx">PopupControl</a></li>
<li><a id="ctl00_SamplesLinks_ctl29_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Rating/Rating.aspx">Rating</a></li>
<li><a id="ctl00_SamplesLinks_ctl30_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ReorderList/ReorderList.aspx">ReorderList</a></li>
<li><a id="ctl00_SamplesLinks_ctl31_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ResizableControl/ResizableControl.aspx">ResizableControl</a></li>
<li><a id="ctl00_SamplesLinks_ctl32_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/RoundedCorners/RoundedCorners.aspx">RoundedCorners</a></li>
<li><a id="ctl00_SamplesLinks_ctl33_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Seadragon/Seadragon.aspx">Seadragon</a></li>
<li><a id="ctl00_SamplesLinks_ctl34_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Slider/Slider.aspx">Slider</a></li>
<li><a id="ctl00_SamplesLinks_ctl35_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/SlideShow/SlideShow.aspx">SlideShow</a></li>
<li><a id="ctl00_SamplesLinks_ctl36_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/Tabs/Tabs.aspx">Tabs</a></li>
<li><a id="ctl00_SamplesLinks_ctl37_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/TextBoxWatermark/TextBoxWatermark.aspx">TextBoxWatermark</a></li>
<li><a id="ctl00_SamplesLinks_ctl38_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ToggleButton/ToggleButton.aspx">ToggleButton</a></li>
<li><a id="ctl00_SamplesLinks_ctl39_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/UpdatePanelAnimation/UpdatePanelAnimation.aspx">UpdatePanelAnimation</a></li>
<li><a id="ctl00_SamplesLinks_ctl40_SamplesLink" href="http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/ValidatorCallout/ValidatorCallout.aspx">ValidatorCallout</a></li>
</ul>
<p>Per chi vuole essere indipendente da javascript e piattaforma tecnologica, esiste questo <strong><a title="Vaddin Toolkit" href="http://vaadin.com/home" target="_blank">Vaadin</a></strong>, tutto basato su <strong>Java</strong>. Quest&#8217;ultimo molto più simile ai più noti framewok come <a title="Mootools" href="http://mootools.net/" target="_blank">Mootools</a> o <a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a>: dispone di diversi componenti elementari che opportunamente combinati tra loro danno vita ad applicazioni web avanzate.</p>
<p>Da segnalare infine questo <a title="iwebkit" href="http://iwebkit.net/" target="_blank">iWebKit</a>, utile per chi vuole cimentarsi nella realizzazione di siti e applicazioni concepite specificatamente per iPhone.</p>
<p>Risorse di questo tipo ne esistono davvero a bizzeffe, ma <strong>non è facile distinguere</strong> quelle che sono effettivamente utilizzabili <strong>out of the box</strong> da quelle che invece necessitano di altro e magari nascondono limiti tali da sconsigliarne l&#8217;utilizzo. Personalmente ho utilizzato in un ambiente di produzione l&#8217;UI Toolkit di DHTMLX e posso confermare che si tratta di librerie pronte all&#8217;uso, davvero comode e funzionali. Ho intenzione di provare a breve l&#8217;Ajax Control Toolkit per .NET e vi farò sapere le mie considerazioni. <strong>Mi piacerebbe ovviamente sentire le vostre e capire se esistono altri strumenti oltre a quelli citati, che magari avete utilizzato direttamente</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/07/19/componenti-ajax-e-ui-toolkit-per-applicazioni-web-ria/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Leggere e visualizzare file XML con C# (C sharp): qualche esempio</title>
		<link>http://www.diplod.it/2010/07/13/leggere-e-visualizzare-file-xml-con-c-c-sharp-qualche-esempio/</link>
		<comments>http://www.diplod.it/2010/07/13/leggere-e-visualizzare-file-xml-con-c-c-sharp-qualche-esempio/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 12:31:32 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Applicazioni Web]]></category>
		<category><![CDATA[web standards]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[aspx]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xsd]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1127</guid>
		<description><![CDATA[C# è ormai un linguaggio diffuso, Visual Studio volenti o nolenti è un IDE collaudato e comodo anche per lo sviluppo di applicazioni web. E quando si parla di web, si parla spesso di XML. Leggere i dati di un documento XML è un'operazione semplice e veloce, farli visualizzare su una pagina web è altrettanto rapido, ma è bene sapere alcune nozioni per potersi muovere con tranquillità e sicurezza.]]></description>
				<content:encoded><![CDATA[<p><strong>C#</strong> è ormai un linguaggio diffuso, <strong>Visual Studio</strong> volenti o nolenti è un IDE collaudato e comodo anche per lo sviluppo di applicazioni web. E quando si parla di web, si parla spesso di <strong>XML</strong>.</p>
<p>Leggere i dati di un documento XML è un&#8217;operazione semplice e veloce, farli visualizzare su una pagina web è altrettanto rapido, ma è bene sapere alcune nozioni per potersi muovere con tranquillità e sicurezza.</p>
<p>Andiamo con ordine e vediamo subito un esempio di un file XML che vogliamo trattare:</p>
<p><code>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;<br />
&lt;DataSet&gt;<br />
&lt;data&gt;<br />
&lt;period&gt;2010-06-06&lt;/period&gt;<br />
&lt;logunit id="myID"&gt;Milano&lt;/logunit&gt;<br />
&lt;entered matcode="ABC001"&gt;100&lt;/entered&gt;<br />
&lt;produced matcode="ABC002"&gt;101&lt;/produced&gt;<br />
&lt;delivered matcode="ABC002"&gt;100&lt;/delivered&gt;<br />
&lt;description&gt;Caramelline alla fragola&lt;/description&gt;<br />
&lt;updated&gt;2010-06-06T13:05:21+01:00&lt;/updated&gt;<br />
&lt;note&gt;tante belle cose..&lt;/note&gt;<br />
&lt;/data&gt;<br />
&lt;data&gt;<br />
[..]<br />
&lt;/data&gt;<br />
&lt;/DataSet&gt;</code></p>
<p>Questo file potrebbe rappresentare dei dati produttivi, riguardanti ad esempio i materiali entrati in magazzino, i materiali prodotti e il venduto.</p>
<p>Il modo più rapido e banale per leggere questo file e farlo visualizzare su una pagina ASPX è tramite il seguente codice:</p>
<p><code>DataSet ds = new DataSet();<br />
ds.ReadXml(@"C:\test.xml", XmlReadMode.Auto);<br />
DataView MyDataView = new DataView(ds.Tables[0]);<br />
MyDataGrid.DataSource = MyDataView;<br />
MyDataGrid.DataBind();</code></p>
<p>Il codice non fa altro che creare un nuovo DataSet per contenere i dati che andremo a leggere, leggere il file tramite il metodo ReadXml(), creare una DataView con la tabella creata nel dataset e assegnare quest&#8217;ultima come DataSource per la DataGrid.</p>
<p><span id="more-1127"></span></p>
<p>All&#8217;interno della pagina .aspx ci sarà quindi una DataSource così fatta:</p>
<p><code>&lt;asp:DataGrid id="MyDataGrid" runat="server" &gt;<br />
    &lt;HeaderStyle CssClass="th"&gt;<br />
    &lt;/HeaderStyle&gt;<br />
&lt;/asp:DataGrid&gt;</code></p>
<p>Tralasciamo lo stile attribuito alla testata della datagrid, ciò che è importante in questo caso è solo l&#8217;ID. </p>
<p>Così facendo però ottengo una tabella di questo tipo:</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>period</td>
<td>data_Id</td>
<td>description</td>
<td>updated</td>
<td>note</td>
</tr>
<tr>
<td>2010-06-06</td>
<td>0</td>
<td>Caramelline alla fragola</td>
<td>2010-06-16T13:05:21+01:00</td>
<td>tante belle cose..</td>
</tr>
</tbody>
</table>
<p>E tutti gli altri dati che fine hanno fatto? Sono stati salvati in altre tabelle del DataSet, assieme a tutti gli attributi dell&#8217;xml; queste tabelle avranno come riferimento il <em>data_Id</em> e potrò utilizzarle come meglio credo.</p>
<p>Se infatti cambiamo il primo codice, mettendo una tabella diversa, in questo modo:</p>
<p><code>DataView MyDataView = new DataView(ds.Tables[1]);</code></p>
<p>Verrà visualizzata una pagina con la seguente tabella:</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>id</td>
<td>logunit_Text</td>
<td>data_Id</td>
</tr>
<tr>
<td>MyID</td>
<td>Milano</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>Se cambio e metto la terza tabella:</p>
<p><code>DataView MyDataView = new DataView(ds.Tables[2]);</code></p>
<p>Il risultato sarà:</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>matcode</td>
<td>entered_Text</td>
<td>data_Id</td>
</tr>
<tr>
<td>ABC001</td>
<td>100</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>Mentre per le tabelle successive, avrò questi risultati visualizzati:</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>matcode</td>
<td>produced_Text</td>
<td>data_Id</td>
</tr>
<tr>
<td>ABC002</td>
<td>101</td>
<td>0</td>
</tr>
</tbody>
</table>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>matcode</td>
<td>delivered_Text</td>
<td>data_Id</td>
</tr>
<tr>
<td>ABC002</td>
<td>100</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>Incrociando queste tabelle attraverso il campo <em>data_Id</em> potrei ricavare tutti i dati contenuti nell&#8217;XML, attributi e testi all&#8217;interno dei tag.<br />
Il mio obiettivo era però quello di far visualizzare questi dati senza gli attributi riportati nell&#8217;XML. Ciò che mi interessa sono solo i dati riportati all&#8217;interno dei tag. Vorrei avere un risultato di questo tipo:</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>period</td>
<td>description</td>
<td>updated</td>
<td>note</td>
<td>logunit</td>
<td>entered</td>
<td>produced</td>
<td>delivered</td>
</tr>
<tr>
<td>2010-06-06</td>
<td>Caramelline alla fragola</td>
<td>2010-06-16T13:05:21+01:00</td>
<td>tante belle cose..</td>
<td>Milano</td>
<td>100</td>
<td>101</td>
<td>100</td>
</tr>
</tbody>
</table>
<p>In questo caso potrebbe fare al caso nostro l&#8217; <a title="XML Schema" href="http://www.w3schools.com/schema/default.asp" target="_blank">XML Schema</a>. Si tratta di un file con estensione XSD, che descrive i dati contenuti in un file XML. Ogni file XML può avere uno schema associato che lo descrive. Esistono diversi <strong>tool</strong> che possono <strong>creare un file XSD a partire da un XML</strong>, uno di questi, che trovo molto pratico è <a title="XML 2 XSD" href="http://www.flame-ware.com/products/xml-2-xsd/default.aspx" target="_blank">quello di Flame-Ware</a> completamente on-line. </p>
<p>Il nostro file XML iniziale potrebbe essere descritto da questo XSD, supponendo che tutti i campi siano stringe.</p>
<p><code>&lt;?xml version="1.0"?&gt;<br />
&lt;!-- Generated using Flame-Ware Solutions XML-2-XSD v2.0 at <a href="http://www.flame-ware.com/Products/XML-2-XSD/">http://www.flame-ware.com/Products/XML-2-XSD/</a> --&gt;<br />
&lt;xs:schema id="DataSet" xmlns="" xmlns:xs="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"&gt;<br />
  &lt;xs:element name="DataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"&gt;<br />
    &lt;xs:complexType&gt;<br />
      &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;<br />
        &lt;xs:element name="data"&gt;<br />
          &lt;xs:complexType&gt;<br />
            &lt;xs:sequence&gt;<br />
              &lt;xs:element name="period" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="description" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="updated" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="note" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="logunit" nillable="true" minOccurs="0" maxOccurs="unbounded"&gt;<br />
                &lt;xs:complexType&gt;<br />
                  &lt;xs:simpleContent msdata:ColumnName="logunit_Text" msdata:Ordinal="1"&gt;<br />
                    &lt;xs:extension base="xs:string"&gt;<br />
                      &lt;xs:attribute name="id" type="xs:string" /&gt;<br />
                    &lt;/xs:extension&gt;<br />
                  &lt;/xs:simpleContent&gt;<br />
                &lt;/xs:complexType&gt;<br />
              &lt;/xs:element&gt;<br />
              &lt;xs:element name="entered" nillable="true" minOccurs="0" maxOccurs="unbounded"&gt;<br />
                &lt;xs:complexType&gt;<br />
                  &lt;xs:simpleContent msdata:ColumnName="entered_Text" msdata:Ordinal="1"&gt;<br />
                    &lt;xs:extension base="xs:string"&gt;<br />
                      &lt;xs:attribute name="matcode" type="xs:string" /&gt;<br />
                    &lt;/xs:extension&gt;<br />
                  &lt;/xs:simpleContent&gt;<br />
                &lt;/xs:complexType&gt;<br />
              &lt;/xs:element&gt;<br />
              &lt;xs:element name="produced" nillable="true" minOccurs="0" maxOccurs="unbounded"&gt;<br />
                &lt;xs:complexType&gt;<br />
                  &lt;xs:simpleContent msdata:ColumnName="produced_Text" msdata:Ordinal="1"&gt;<br />
                    &lt;xs:extension base="xs:string"&gt;<br />
                      &lt;xs:attribute name="matcode" type="xs:string" /&gt;<br />
                    &lt;/xs:extension&gt;<br />
                  &lt;/xs:simpleContent&gt;<br />
                &lt;/xs:complexType&gt;<br />
              &lt;/xs:element&gt;<br />
              &lt;xs:element name="delivered" nillable="true" minOccurs="0" maxOccurs="unbounded"&gt;<br />
                &lt;xs:complexType&gt;<br />
                  &lt;xs:simpleContent msdata:ColumnName="delivered_Text" msdata:Ordinal="1"&gt;<br />
                    &lt;xs:extension base="xs:string"&gt;<br />
                      &lt;xs:attribute name="matcode" type="xs:string" /&gt;<br />
                    &lt;/xs:extension&gt;<br />
                  &lt;/xs:simpleContent&gt;<br />
                &lt;/xs:complexType&gt;<br />
              &lt;/xs:element&gt;<br />
            &lt;/xs:sequence&gt;<br />
          &lt;/xs:complexType&gt;<br />
        &lt;/xs:element&gt;<br />
      &lt;/xs:choice&gt;<br />
    &lt;/xs:complexType&gt;<br />
  &lt;/xs:element&gt;<br />
&lt;/xs:schema&gt;</code></p>
<p>Per associare questo schema al file XML, è necessario dichiararlo nell&#8217;intestazione, in questo modo:</p>
<p><code>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;<br />
&lt;DataSet <span style="color: #800000;">xmlns:xsi="</span><a href="http://www.w3.org/2001/XMLSchema-instance"><span style="color: #800000;">http://www.w3.org/2001/XMLSchema-instance</span></a><span style="color: #800000;">"<br />
xsi:noNamespaceSchemaLocation="schema.xsd"</span>&gt;<br />
&lt;data&gt;<br />
&lt;period&gt;2010-06-06&lt;/period&gt;<br />
&lt;logunit id="myID"&gt;Milano&lt;/logunit&gt;<br />
&lt;entered matcode="ABC001"&gt;100&lt;/entered&gt;<br />
&lt;produced matcode="ABC002"&gt;101&lt;/produced&gt;<br />
&lt;delivered matcode="ABC002"&gt;100&lt;/delivered&gt;<br />
&lt;description&gt;Caramelline alla fragola&lt;/description&gt;<br />
&lt;updated&gt;2010-06-06T13:05:21+01:00&lt;/updated&gt;<br />
&lt;note&gt;tante belle cose..&lt;/note&gt;<br />
&lt;/data&gt;<br />
&lt;/DataSet&gt;</code></p>
<p>Così facendo però, se rilanciamo la pagina costruita in precedenza, il risultato sarà identico: un unico dataset con diverse tabelle collegate tra loro dal campo <em>data_Id</em>.</p>
<p>Quindi? La soluzione c&#8217;è. <strong>Dobbiamo solo definire uno schema XSD semplificato all&#8217;interno dell&#8217;XML stesso</strong>. In questo modo:</p>
<p><code>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;<br />
&lt;DataSet&gt;<br />
<span style="color: #800000;">&lt;xs:schema id="NewDataset" xmlns="" xmlns:xs="</span><a href="http://www.w3.org/2001/XMLSchema"><span style="color: #800000;">http://www.w3.org/2001/XMLSchema</span></a><span style="color: #800000;">" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"&gt;<br />
  &lt;xs:element name="NewDataset" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"&gt;<br />
    &lt;xs:complexType&gt;<br />
      &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;<br />
        &lt;xs:element name="data"&gt;<br />
          &lt;xs:complexType&gt;<br />
            &lt;xs:sequence&gt;<br />
              &lt;xs:element name="period" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="description" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="updated" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="note" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="logunit" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="entered" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="produced" type="xs:string" minOccurs="0" /&gt;<br />
              &lt;xs:element name="delivered" type="xs:string" minOccurs="0" /&gt;<br />
            &lt;/xs:sequence&gt;<br />
          &lt;/xs:complexType&gt;<br />
        &lt;/xs:element&gt;<br />
      &lt;/xs:choice&gt;<br />
    &lt;/xs:complexType&gt;<br />
  &lt;/xs:element&gt;<br />
&lt;/xs:schema&gt;<br />
</span>&lt;data&gt;<br />
&lt;period&gt;2010-06-06&lt;/period&gt;<br />
&lt;logunit id="myID"&gt;Milano&lt;/logunit&gt;<br />
&lt;entered matcode="ABC001"&gt;100&lt;/entered&gt;<br />
&lt;produced matcode="ABC002"&gt;101&lt;/produced&gt;<br />
&lt;delivered matcode="ABC002"&gt;100&lt;/delivered&gt;<br />
&lt;description&gt;Caramelline alla fragola&lt;/description&gt;<br />
&lt;updated&gt;2010-06-06T13:05:21+01:00&lt;/updated&gt;<br />
&lt;note&gt;tante belle cose..&lt;/note&gt;<br />
&lt;/data&gt;<br />
&lt;data&gt;<br />
&lt;period&gt;2010-06-06&lt;/period&gt;<br />
&lt;logunit id="myID"&gt;Milano&lt;/logunit&gt;<br />
&lt;entered matcode="ABC001"&gt;100&lt;/entered&gt;<br />
&lt;produced matcode="ABC002"&gt;101&lt;/produced&gt;<br />
&lt;delivered matcode="ABC002"&gt;100&lt;/delivered&gt;<br />
&lt;description&gt;Caramelline alla fragola&lt;/description&gt;<br />
&lt;updated&gt;2010-06-06T13:05:21+01:00&lt;/updated&gt;<br />
&lt;note&gt;tante belle cose..&lt;/note&gt;<br />
&lt;/data&gt;<br />
&lt;/DataSet&gt;</code></p>
<p>Il <strong>risultato finale</strong> sarà quindi una DataGrid che può essere visualizzata come sotto, utilizzando pari pari il <strong>codice C# definito all&#8217;inizio</strong> di questo articolo.</p>
<table id="MyDataGrid2" border="1" cellspacing="0" rules="all">
<tbody>
<tr>
<td>period</td>
<td>description</td>
<td>updated</td>
<td>note</td>
<td>logunit</td>
<td>entered</td>
<td>produced</td>
<td>delivered</td>
</tr>
<tr>
<td>2010-06-06</td>
<td>Caramelline alla fragola</td>
<td>2010-06-16T13:05:21+01:00</td>
<td>tante belle cose..</td>
<td>Milano</td>
<td>100</td>
<td>101</td>
<td>100</td>
</tr>
</tbody>
</table>
<p>Buon divertimento con l&#8217;XML..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/07/13/leggere-e-visualizzare-file-xml-con-c-c-sharp-qualche-esempio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ricerche Maestre: il design di un motore di ricerca</title>
		<link>http://www.diplod.it/2010/05/06/ricerche-maestre-il-design-di-un-motore-di-ricerca/</link>
		<comments>http://www.diplod.it/2010/05/06/ricerche-maestre-il-design-di-un-motore-di-ricerca/#comments</comments>
		<pubDate>Thu, 06 May 2010 16:36:13 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[bambini]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[maestre]]></category>
		<category><![CDATA[ricerche]]></category>
		<category><![CDATA[scuola]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=1090</guid>
		<description><![CDATA[Ricerche Maestre è un motore di ricerca per bambini, genitori e maestri che seleziona siti scelti da esperti insegnanti della Scuola Primaria. Si possono trovare risorse scolastiche per la scuola elementare e si può navigare all'interno di siti adatti a bambini dai 3 ai 14 anni, cercando contenuti educativi e di svago. La ricerca è immediata ed efficace. Il motore va dritto al bersaglio, tecnologia Google.]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1105" title="ricmaestre" src="http://www.diplod.it/wp-content/uploads/2010/05/ricmaestre.png" alt="" width="380" height="250" /></p>
<p><a title="Ricerche Maestre" href="http://www.ricerchemaestre.it/" target="_blank">Ricerche Maestre</a> è un <strong>motore di ricerca</strong> per bambini, genitori e maestri che seleziona siti scelti da esperti insegnanti della Scuola Primaria. Si possono trovare risorse scolastiche <strong>per la scuola elementare</strong> e si può navigare all&#8217;interno di siti adatti a bambini dai 3 ai 14 anni, cercando contenuti educativi e di svago. La ricerca è immediata ed efficace. Il motore va dritto al bersaglio, <a title="Google co-op" href="http://www.google.com/cse/" target="_blank">tecnologia Google</a>.</p>
<p>E il <strong>design</strong>? Una paginetta che mi ha dato un sacco di soddisfazioni. Nulla di sconvolgente, ma c&#8217;era una piccola sfida da affrontare: mettere tutto  su una stessa pagina html, dal form di ricerca ai risultati, compresi i testi informativi e di corredo. Con un po&#8217; di javascript, si può.</p>
<p>Innanzi tutto, un <a title="coda slider jquery plugin" href="http://jqueryfordesigners.com/coda-slider-effect/" target="_blank">plugin di jQuery</a> per riprodurre il famoso effetto del <a title="Coda - Panic" href="http://www.panic.com/coda/" target="_blank">sito di Coda</a>. Una valida alternativa potrebbe essere <a title="coda slider javascript" href="http://www.ndoherty.biz/tag/coda-slider/" target="_blank">questo coda-slider</a>, anch&#8217;esso plugin jquery, con una buona documentazione sugli esempi demo. In secondo luogo alcuni div che contengono i risultati di ricerca ed il gioco è fatto!</p>
<p>Questo fantastico effetto è facilmente replicabile, l&#8217;idea è quella di riutilizzarlo per il prossimo tema wordpress, è un&#8217;anteprima!</p>
<p>Insomma, Ricerche Maestre è un motore di ricerca personalizzato a cura del <a href="http://www.albertopiccini.it/">Maestro Alberto Piccini</a>, al quale collaborano <a href="http://xoomer.alice.it/paolalimone/">Paola Limone</a>, <a href="http://maestralidia.netsons.org/">Lidia Pantaleo</a>, <a href="http://scientificando.splinder.com/">Annarita Ruberto</a>, <a href="http://quadernoneblu.splinder.com/">Renato Murelli</a>. Ricerche Maestre al momento indicizza circa 3.000 siti selezionati tra i migliori reperibili in rete, per bambini e famiglie, a carattere divulgativo e informativo, educativi, scolastici e di insegnanti.</p>
<p>Se avete bambini: il luogo giusto per iniziare le esplorazioni della rete!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/05/06/ricerche-maestre-il-design-di-un-motore-di-ricerca/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<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>Tecnologie ICT per l&#8217;Enterprise 2.0: tra Project Management e Collaborazione</title>
		<link>http://www.diplod.it/2010/02/21/tecnologie-ict-per-lenterprise-2-0-tra-project-management-e-collaborazione/</link>
		<comments>http://www.diplod.it/2010/02/21/tecnologie-ict-per-lenterprise-2-0-tra-project-management-e-collaborazione/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:45:28 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Università]]></category>
		<category><![CDATA[enterprise20]]></category>
		<category><![CDATA[intranet]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[tesi]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=770</guid>
		<description><![CDATA[Durante lo stage e nei mesi a seguire mi sono occupato di PDM (Product Data Management) e di intranet (sorprendendomi di un versatilissimo Sharepoint) in un gran bel gruppo industriale. Avevo già pubblicato qualche idea, ora è il momento del pdf. Il tutto è rilasciato con Licenza Creative Commons.]]></description>
				<content:encoded><![CDATA[<p>Il titolo del post non deve spaventare, si tratta della mia <strong>tesi di Laurea</strong>. Finita la specialistica, è arrivato il momento di pubblicare i miei sforzi: diversi mesi di tirocinio hanno prodotto i loro frutti.</p>
<p>In realtà la laurea è avvenuta a Marzo, i festeggiamenti pure.. in un poetico irish pub addobbato a festa per <a title="San Patrizio" href="http://it.wikipedia.org/wiki/San_Patrizio" target="_blank">San Patrizio</a>.</p>
<p>Durante lo stage e nei mesi a seguire mi sono occupato di <a title="Product Data Management" href="http://it.wikipedia.org/wiki/Product_Data_Management" target="_blank">PDM</a> (Product Data Management) e di <a title="intranet" href="http://it.wikipedia.org/wiki/Intranet" target="_blank">intranet</a> (sorprendendomi di un versatilissimo Sharepoint) in un <a title="Landi Renzo" href="http://www.landi.it/" target="_blank">gran bel gruppo industriale</a>. Avevo già pubblicato <a title="qualche idea per la tesi" href="http://www.diplod.it/2008/07/10/project-management-raccolta-di-idee-per-la-tesi/" target="_self">qualche idea</a>, ora è il momento del <strong>pdf</strong>. Pubblico solo in parte, per ovvi motivi di riservatezza, il capitolo 7 relativo alla intranet sviluppata in azienda.</p>
<p>L&#8217;intero lavoro è rilasciato con licenza Creative Commons.<br />
<a class="download-link" title="tesi del monte davide" href="http://www.diplod.it/wp-content/uploads/2009/10/tesi-final-pubblica.pdf">Scarica il PDF: Tecnologie ICT per l&#8217;Enterprise 2.0: tra Project Management e Collaborazione</a></p>
<blockquote><p><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/it/"><img style="border-width:0" src="http://i.creativecommons.org/l/by-nc-nd/2.5/it/88x31.png" alt="Creative Commons License" /></a><br />
<span>Tecnologie ICT per l&#8217;enterprise 2.0: tra project management e collaborazione</span> by <a rel="cc:attributionURL" href="www.diplod.it">Davide Del Monte</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/it/">Creative Commons Attribuzione-Non commerciale-Non opere derivate 2.5 Italia License</a>.<br />
Permissions beyond the scope of this license may be available at <a rel="cc:morePermissions" href="www.diplod.it">www.diplod.it</a>.</p></blockquote>
<p>Di cosa parla questo lavoro? Il sommario vale più di mille parole:</p>
<p><span id="more-770"></span></p>
<blockquote><p><strong> 1.Introduzione&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	11<br />
</strong><br />
<strong> 2.Lo scenario&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	13</strong><br />
(a)Project Management in R&amp;D&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	14<br />
(b)La struttura organizzativa&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	18<br />
(c)Importanza della gestione progetti e Open Innovation&#8230;&#8230;&#8230;&#8230;..	21<br />
(d)Intranet: condivisione e architetture Service Oriented&#8230;&#8230;&#8230;&#8230;&#8230;	25<br />
(e)Gestione documentale abbinata ai progetti&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	27</p>
<p><strong> 3.Gli strumenti per l&#8217;innovazione&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	31</strong><br />
(a)Ai confini del Knowledge Management&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	32<br />
(b)Crowdsourcing&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	35<br />
i.caso Goldcorp&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	37<br />
ii.caso Colgate-Palmolive&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	38<br />
(c)Triz Innovation&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	38</p>
<p><strong> 4.Social Network e analisi delle reti di persone&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	45</strong><br />
(a)Enterprise 2.0 e reti sociali&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	44<br />
(b)I bisogni emergenti: Social Network e Appartenenza aperta&#8230;&#8230;.	47<br />
(c)Social Network Analysis e Value Network Analysis&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	53<br />
(d)Gli strumenti per l&#8217;analisi delle reti sociali&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	59<br />
Approfondimento tecnico: il software Ucinet&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	64<br />
(e)Small world network e i 6 Degrees su Facebook&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	68<br />
(f)Le reti a invarianza di scala e la dinamica dei sistemi complessi..	70<br />
(g)Elementi teorici per la costruzione di un Social Network&#8230;&#8230;&#8230;&#8230;.	74</p>
<p><strong> 5.Governance ICT: integrazione e architetture service oriented&#8230;&#8230;&#8230;&#8230;&#8230;	83</strong><br />
(a)complessità crescente e bisogno di integrazione&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	84<br />
(b)Service Oriented Architecture (SOA) e  Software as a Service<br />
(SaaS), Business Process Management (BPM) e Rich Internet Applications (RIA) nei modelli organizzativi rizomatici&#8230;&#8230;&#8230;&#8230;&#8230;	85<br />
(c)Dalle prime forme di scambio informazioni alla Enterprise<br />
Application Integration (EAI)&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	93<br />
(d)Accoppiamento del software: bene o male?&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	97<br />
(e)Il ruolo dell&#8217;ICT: Perché i progetti falliscono&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	99</p>
<p><strong> 6.Gli strumenti della Social Era…&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	103</strong><br />
(a)Virtual workspaces: tra wiki, blog e team di lavoro&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	104<br />
i.caso Lago&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	109<br />
ii.caso Serena&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	111<br />
(b)Sharepoint e Project Web Access: la collaborazione sui progetti<br />
secondo Microsoft&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	112<br />
(c)Qualche cenno sui vendor internazionali e i player italiani&#8230;&#8230;&#8230;	119<br />
(d)Qualche cenno sul mondo Open Source&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	124</p>
<p><strong> 7.Il caso LandiRenzo SpA: intranet per il reparto R&amp;D…&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	129</strong><br />
(a)L&#8217;azienda e l&#8217;unità R&amp;D&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	130<br />
(b)L&#8217;analisi di partenza&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	133<br />
i.Persone e progetti&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	133<br />
ii.Metodologie e prassi lavorative&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	134<br />
iii.La collaborazione e gli strumenti&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	136<br />
iv.I network relazionali&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	138<br />
v.I rapporti con le sedi estere&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	141<br />
(c)Il re-design della intranet R&amp;D: metodologie e problematiche..	142<br />
(d)Sharepoint e PWA: personalizzazioni della piattaforma e Web Parts&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	145<br />
i.Utenti, sincronizzazione Active Directory e<br />
ristrutturazione RBS&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	149<br />
ii.Calendari condivisi per i banchi e la strumentazione<br />
tecnica&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	152<br />
iii.Template Landi&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	155<br />
Approfondimento tecnico: Creazione tema 	Sharepoint&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	156<br />
iv.Realizzazione prototipo di project workspace: uno spazio collaborativo con wiki e blog&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	159<br />
(e)Product Data Management con il software CoCreate Model<br />
Manager: workflow e integrazione SAP&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	166<br />
i.Creazione di una nuova classe documentale&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	174<br />
ii.Creazione di nuovi materiali&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	176<br />
iii.Definizione workflow di approvazione disegni&#8230;&#8230;&#8230;&#8230;&#8230;.	178<br />
(f)Punti di forza e debolezza dei sistemi e ipotesi di sviluppo&#8230;&#8230;&#8230;	180<br />
i.PWA: i Key Users&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	181<br />
ii.PDM: integrazione SAP&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	183<br />
iii.Scarso utilizzo e mancanza di incentivi&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	184<br />
iv.Web Services con PDM&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	185<br />
v.Integrazione tra Sharepoint e SAP Portal&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.	186</p>
<p><strong> 8.Conclusioni: una nuova intranet di Gruppo&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	191<br />
</strong><br />
<em>Riferimenti Bibliografici&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	199<br />
Appendice A: Una Web Part con le news da Google, XML e XSL all&#8217;opera	202<br />
Appendice B: procedura per il deploy di un Application Template Sharepoint&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;	206<br />
Ringraziamenti&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..	209</em></p></blockquote>
<p>Mi piacerebbe se da questo lavoro nascessero <strong>spunti di riflessione,</strong> se qualcuno si facesse avanti per indicarmi <strong>esperienze simili</strong>, per scambiare <strong>pareri</strong> e <strong>conoscenze</strong>. Buona lettura ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/02/21/tecnologie-ict-per-lenterprise-2-0-tra-project-management-e-collaborazione/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Libri in Azienda: un esperimento 2.0 con Anobii</title>
		<link>http://www.diplod.it/2010/02/17/libri-in-azienda-un-esperimento-2-0-con-anobii/</link>
		<comments>http://www.diplod.it/2010/02/17/libri-in-azienda-un-esperimento-2-0-con-anobii/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 23:58:33 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[cultura]]></category>
		<category><![CDATA[enterprise20]]></category>
		<category><![CDATA[formazione]]></category>
		<category><![CDATA[intranet]]></category>
		<category><![CDATA[libri]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://www.diplod.it/?p=991</guid>
		<description><![CDATA[[Foto Flickr] Questa dei libri in azienda l&#8217;ho sentita per la prima volta ad una conferenza su Sharepoint organizzata da Amicucci Formazione. A detta di molti, Sharepoint sembra essere il non plus ultra per creare una intranet 2.0 come si deve: ormai è pubblicizzato in ogni dove come miglior piattaforma, io ancora devo convircermi fino [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-996 aligncenter" title="book" src="http://www.diplod.it/wp-content/uploads/2010/02/book.jpg" alt="book" width="400" height="266" /><small>[<a href="http://www.flickr.com/photos/patrickgage/3738107746/">Foto Flickr</a>]</small></p>
<p>Questa dei libri in azienda l&#8217;ho sentita per la prima volta ad una conferenza su Sharepoint organizzata da <a title="Amicucci Formazione" href="http://www.amicucciformazione.com/" target="_blank">Amicucci Formazione</a>. A detta di molti, Sharepoint sembra essere <a title="Best Intranet made with Sharepoint" href="http://leedale.wordpress.com/2009/01/16/best-intranets-of-2009-show-dramatic-increase-in-the-use-of-sharepoint/" target="_blank">il non plus ultra per creare una intranet 2.0</a> come si deve: ormai è pubblicizzato in ogni dove come miglior piattaforma, io ancora devo convircermi fino in fondo: il <a title="sharepoint browser" href="http://blogs.technet.com/sharepoint_attack/archive/2008/04/22/browser-supportati-da-moss-2007-wss-3-0.aspx" target="_blank">basso supporto di browser diversi da IE</a> e la non validità del codice <a title="sharepoint and accessibility" href="http://planetmoss.blogspot.com/2007/09/sharepoint-accessibility.html" target="_blank">secondo i canoni di accessibilità W3C</a> mi fa pensare.. Vuoi per il buon marketing che sanno fare dalle parti di Microsoft, vuoi perchè effettivamente si tratta di una piattaforma duttile, questo cosino inizia a piacermi sul serio.</p>
<p>Così, tra le verie idee, ve n&#8217;era una che mi ha catturato più di altre: <strong>Libri in Azienda</strong>. Alla base di tutto c&#8217;è la volontà di diffondere proposte di lettura ai dipendenti; la novità è che il tutto viene realizzato secondo le logiche 2.0. Ai dipendenti è lasciata facoltà di commentare e recensire i libri proposti, loro stessi possono proporli. L&#8217;azienda può limitarsi a dare consigli di lettura oppure istituire una biblioteca vera e propria, in qualche stanzino vicino alla sala caffè: dove le persone possono recarsi per prendere in prestito i libri.</p>
<p>Ho pensato di mettere in pratica la faccenda (solo a livello virtuale), con ciò che avevo a disposizione: WSS e <a title="sharepoint designer" href="http://office.microsoft.com/it-it/sharepointdesigner/FX100487631040.aspx" target="_blank">Sharepoint Designer</a>. Ecco allora che che i titoli sono presentati attraverso la intranet, che l&#8217;azienda apre un profilo su <a title="Anobii" href="http://www.anobii.com/" target="_blank">Anobii</a> e tramite i feed RSS la libreria viene presentata su una <strong>xml web part</strong>.</p>
<p><span id="more-991"></span></p>
<p>Le strade possibili erano due:</p>
<ul>
<li>Utilizzare due liste Sharepoint, dove vengono catalogati libri e recensioni.</li>
<li>Utilizzare un social network esterno come Anobii, presentandone l&#8217;attività tramite i feed RSS</li>
</ul>
<p>Cosa è meglio? Beh.. non si tratta di business, semmai di formazione collaterale del personale. Non ci sono dati sensibili, non ci sono dati da salvare; la scelta è presto fatta: servizio esterno!</p>
<p>Tramite un tenplate XSL si può processare il feed di Anobii e il codice è piuttosto snello:<br />
<code><br />
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;xsl:stylesheet xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>"<br />
xmlns:atom="<a href="http://www.w3.org/2005/Atom">http://www.w3.org/2005/Atom</a>"<br />
xmlns:rdf="<a href="http://www.w3.org/1999/02/22-rdf-syntax-ns">http://www.w3.org/1999/02/22-rdf-syntax-ns</a>#"<br />
xmlns:foo="<a href="http://purl.org/rss/1.0/">http://purl.org/rss/1.0/</a>"<br />
xmlns:dc="<a href="http://purl.org/dc/elements/1.1/">http://purl.org/dc/elements/1.1/</a>"<br />
xmlns:sy="<a href="http://purl.org/rss/1.0/modules/syndication/">http://purl.org/rss/1.0/modules/syndication/</a>"<br />
xmlns:admin="<a href="http://webns.net/mvcb/">http://webns.net/mvcb/</a>"<br />
xmlns:content="<a href="http://purl.org/rss/1.0/modules/content/">http://purl.org/rss/1.0/modules/content/</a>"<br />
xmlns:wfw="<a href="http://wellformedweb.org/CommentAPI/">http://wellformedweb.org/CommentAPI/</a>"<br />
version="1.0" xmlns:ddwrt2="urn:frontpage:internal"&gt;<br />
&lt;xsl:template match="/rss" xmlns:atom="<a href="http://www.w3.org/2005/Atom">http://www.w3.org/2005/Atom</a>" xmlns:rdf="<a href="http://www.w3.org/1999/02/22-rdf-syntax-ns">http://www.w3.org/1999/02/22-rdf-syntax-ns</a>#" xmlns:foo="<a href="http://purl.org/rss/1.0/">http://purl.org/rss/1.0/</a>" xmlns:dc="<a href="http://purl.org/dc/elements/1.1/">http://purl.org/dc/elements/1.1/</a>" xmlns:sy="<a href="http://purl.org/rss/1.0/modules/syndication/">http://purl.org/rss/1.0/modules/syndication/</a>" xmlns:admin="<a href="http://webns.net/mvcb/">http://webns.net/mvcb/</a>" xmlns:content="<a href="http://purl.org/rss/1.0/modules/content/">http://purl.org/rss/1.0/modules/content/</a>" xmlns:wfw="<a href="http://wellformedweb.org/CommentAPI/">http://wellformedweb.org/CommentAPI/</a>" xmlns:ddwrt="<a href="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">http://schemas.microsoft.com/WebParts/v2/DataView/runtime</a>"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;style type="text/css"&gt;<br />
img {border: none;}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div&gt;<br />
&lt;ul style="list-style: none; margin: 0; padding:0"&gt;<br />
&lt;xsl:for-each select="channel/item"&gt;<br />
&lt;li style="border: 1px dotted #ccc; margin: 5px; padding: 5px; background: #f9f9f9;"&gt;<br />
&lt;xsl:element name="a"&gt;<br />
&lt;xsl:attribute name="href"&gt;<br />
&lt;xsl:value-of select="link"/&gt;<br />
&lt;/xsl:attribute&gt;<br />
&lt;xsl:value-of select="title"/&gt;<br />
&lt;/xsl:element&gt;<br />
&lt;br/&gt;<br />
&lt;small style="color: #666; text-align: right"&gt;&lt;xsl:value-of select="pubDate" /&gt;&lt;/small&gt;<br />
&lt;xsl:value-of select="content:encoded" disable-output-escaping="yes" /&gt;<br />
&lt;/li&gt;<br />
&lt;/xsl:for-each&gt;<br />
&lt;/ul&gt;<br />
&lt;/div&gt;<br />
&lt;div id="footer" style="display: none;"&gt;<br />
&lt;xsl:value-of select="channel/copyright" /&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&lt;/xsl:template&gt;<br />
&lt;/xsl:stylesheet&gt;<br />
</code></p>
<p>Dal punto di vista tecnico è tutto ok, adesso si tratta solo di seguire gli sviluppi e i risultati dell&#8217;esperimento! <strong>Qualcuno ha provato cose del genere?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diplod.it/2010/02/17/libri-in-azienda-un-esperimento-2-0-con-anobii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
