<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetcampania.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Articoli</title><link>http://dotnetcampania.org/wikis/articoli/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Introducing Silverlight</title><link>http://dotnetcampania.org/wikis/articoli/introducing-silverlight/revision/0.aspx</link><pubDate>Fri, 23 Jul 2010 09:39:04 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:27</guid><dc:creator>Giorgio</dc:creator><description>Current revision posted to Articoli by Giorgio on 23/07/2010 11:39:04&lt;br /&gt;
&lt;h2&gt;Introducing Silverlight&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;Silverlight&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;Silverlight
&amp;egrave; &lt;span&gt;una
tecnologia&lt;/span&gt; di Microsoft, cross-platform e cross-browser, per lo sviluppo
delle RIA (Rich Internet Applications). Esso permette di definire interfacce
utente e animazioni per pagine Web molto accattivanti grazie alla possibilit&amp;agrave;
di poter integrare tra di loro il linguaggio XAML e la potenza del .NET
Framework per la parte di code behind con C# o con VB.Net.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;In
realt&amp;agrave; Silverlight non fornisce tutte le potenzialit&amp;agrave; del .NET Framework, ma la
necessaria porzione di funzionalit&amp;agrave; di cui si pu&amp;ograve; aver bisogno per lo sviluppo
di applicazioni web&lt;span&gt;.&lt;/span&gt; &lt;span&gt;A&lt;/span&gt;nche
il CLR (Common Language Runtime) di Silverlight non &amp;egrave; lo stesso del framework
.NET, ma &amp;egrave; un piccolo plug-in cross-browser (6Mb per la versione 4.0 del
runtime)&lt;span&gt;&amp;nbsp; &lt;/span&gt;che si pu&amp;ograve; scaricare
gratuitamente da internet&lt;span&gt;.&lt;/span&gt;
&lt;span&gt;Ino&lt;/span&gt;&lt;span&gt;ltre&lt;/span&gt;, nel caso in cui non fosse mai
stato &lt;span&gt;installato&lt;/span&gt;
il runtime, sar&amp;agrave; scaricato automaticamente, previa &lt;span&gt;a&lt;/span&gt;&lt;span&gt;utorizzazione&lt;/span&gt;, al primo accesso fatto in una pagina web
sviluppata con silverlight. Il plug-in &amp;egrave; funzionante sia sotto Windows sia
sotto MAC ed &amp;egrave; in alcuni casi supportato da apparecchiature mobile che
utilizzano come sistema operativo Windows Mobile o Symbian^1 (S60 5a edizione
per cellulari quali N97, N97 mini o 5800 Xpressmusic)e (quando usciranno i
nuovi smartphone che lo monteranno, anche se per ora ci si pu&amp;ograve; smanettare un
po&amp;rsquo;) Windows Phone, mentre per Linux bisogna scaricare l&amp;rsquo;implementazione open
source del CLR, Moonlight, sviluppato dal team di Mono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Ancora
pi&amp;ugrave; fondamentale &amp;egrave; che Silverlight, a differenza di altre tecnologie quali
Asp.net o Asp.net MVC, &amp;egrave; client-side, quindi le applicazioni sviluppate con
essa sono installate direttamente sul client, di conseguenza, considerando uno
scenario in cui non avvengono richieste al server, i tempi di risposta della stessa
sono pi&amp;ugrave; rapidi, dal momento che qualsiasi tipo di operazione viene effettuata
direttamente nel browser del client.&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tutto
questo non da problemi dal punto di vista della sicurezza perche&amp;#39; silverlight
gira in una sandbox.&lt;/span&gt;&lt;strong&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;La
prima versione fu presentata il 4 settembre del 2007, ma se volessimo fissare
una milestone fondamentale per l&amp;rsquo;inizio dell&amp;rsquo;ascesa del progetto Silverlight,
potremmo identificarla con il 21 dicembre 2006, giorno in cui Microsoft
rilasci&amp;ograve; una tecnologia che risultava essere un sottoinsieme della gi&amp;agrave; pi&amp;ugrave;
conosciuta Windows Presentation Foundation. Proprio per questo motivo la prima
release di Silverlight fu chiamata WPF/E (WPF Everywhere).&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
versione di Silverlight ancora non era fornita del CLR, ma esponeva i dati con
delle API simili al DOM, fornendo cos&amp;igrave; la possibilit&amp;agrave; di programmarne
l&amp;rsquo;interazione con javascript. Questa prima versione includeva anche un encoder
di formati video e una prima versione dell&amp;rsquo;interprete per il linguaggio XAML.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Nella
release 1.1 fu introdotta una prima versione del runtime, il vero &amp;egrave; proprio
cuore di questa versione si componeva di tre parti:&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;il &lt;strong&gt;presentation
core&lt;/strong&gt; che conteneva l&amp;rsquo;integrazione dei browser, l&amp;rsquo;interprete del linguaggio
XAML e il supporto ai media,&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;la&lt;/span&gt; &lt;strong&gt;Base Class Library&lt;/strong&gt;, grazie alla quale, quindi, si aveva la
possibilit&amp;agrave; di usare&lt;span&gt; &lt;/span&gt;&lt;span&gt;una parte&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;del&lt;/span&gt;&lt;span&gt;le&lt;/span&gt; classi
base del .NET Framework con qualsiasi linguaggio da esso supportato,&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;e
&amp;ldquo;last but not least&amp;rdquo; il gi&amp;agrave; citato &lt;strong&gt;CLR&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="padding-left:30px;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="max-width:550px;" border="0" src="http://img831.imageshack.us/img831/1378/clipimage001.png" alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img src="http://img831.imageshack.us/img831/1378/clipimage001.png" border="0" style="max-width:550px;" alt="" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;Questo
cuore di silverlight era attorniato da tre framework quali presentation framework,
traducendo semplicemente dall&amp;rsquo;inglese e per dirlo in parole povere, tutto ci&amp;ograve;
che riguardava la parte di presentazione, il data framework e le interrogazioni
dei dati, e il comunications framework per l&amp;rsquo;interfacciamento delle
applicazioni con l&amp;rsquo;esterno (es. I server). &lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
runtime di Silverlight fece Il salto di qualit&amp;agrave; con la presentazione della
versione 2.0 (rilasciata il 14 ottobre 2008), nonostante fosse considerata la
naturale evoluzione di Silverlight 1.1, il miglioramento del CLR e alcune introduzioni
la rendevano molto pi&amp;ugrave; completa e funzionale rispetto al predecessore, e, come
se non bastasse, anche se vennero fatte queste modifiche, la dimensione del
plug-in continu&amp;ograve; a rimanere notevolmente &amp;ldquo;light&amp;rdquo;, solo 4,6Mb rispetto ai 4Mb
della versione 1.1.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Quasi
un anno dopo, per essere pi&amp;ugrave; precisi il 9 luglio 2009, Microsoft rilasciava la
terza versione di Silverlight, ancora una volta colma d&amp;rsquo;innovazioni. Con questa
release Microsoft, grazie alle migliorie nel campo del supporto a flussi
streaming (Smooth Streaming &lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;), cerca di opporsi in maniera decisa a Flash.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
piattaforma supportava anche il &amp;ldquo;&lt;strong&gt;Perspective&lt;/strong&gt;
&lt;strong&gt;3-D&lt;/strong&gt;&amp;rdquo;, una modalit&amp;agrave; di
implementazione 3D&lt;span&gt;&amp;nbsp; &lt;/span&gt;limitata ad una
visualizzazione prospettica degli elementi, ed introduceva effetti grafici da
poter applicare singolarmente ad ogni elemento discendente da &amp;ldquo;&lt;strong&gt;UIElement&lt;/strong&gt;&amp;rdquo; (Pixel shader effects),
furono migliorate le performance video grazie ad un maggiore sfruttamento della
GPU, fu aggiunta la possibilit&amp;agrave; di modificare le immagini bitmap, potendo anche
modificare singolarmente i pixel, furono aggiunti anche di nuovi effetti per le
animazioni, nuovi controlli, e il navigation framework per permettere la
navigazione tra diverse pagine xaml, fu introdotto anche il &amp;ldquo;&lt;strong&gt;Binding Element to Element&lt;/strong&gt;&amp;rdquo;&lt;strong&gt; &lt;/strong&gt;&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;, il quale permetteva di bindare la propriet&amp;agrave;
di un oggetto recuperandone il valore da un altro, e il &amp;ldquo;&lt;strong&gt;Binding Validation&lt;/strong&gt;&amp;rdquo;, un sistema che consentiva di intercettare le
eccezioni sollevate nel caso in cui al variare del valore dei dati essi risultavano
non congrui con i tipi di valori consentiti , furono inserite delle nuove API
del namespace &lt;i&gt;System.Windows.Messaging&lt;/i&gt;
che consentono la comunicazione tra pi&amp;ugrave; oggetti Silverlight nella pagina (Local
connection), ed infine una delle introduzioni pi&amp;ugrave; importanti, la possibilit&amp;agrave; di
creare delle &amp;ldquo;&lt;strong&gt;Out of Browser Application&lt;/strong&gt;&amp;rdquo;
&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;,
applicazioni di silverlight che possono essere avviate direttamente dal
desktop.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
progetto Silverlight &amp;egrave; arrivato alla versione 4.0, quest&amp;rsquo;ultima &amp;egrave; stata
rilasciata il 15/04/2010 in concomitanza alla presentazione di Visual Studio
2010 e del framework 4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
pi&amp;ugrave; recente relaese della piattaforma introduce migliorie per lo sviluppo di
applicazioni &amp;ldquo;&lt;strong&gt;Out of Browser&lt;/strong&gt;&amp;rdquo;,
l&amp;rsquo;aggiunta del supporto alla stampa, quindi l&amp;rsquo;introduzione dell&amp;rsquo;oggetto &amp;ldquo;&lt;strong&gt;PrintDocument&amp;rdquo;&lt;/strong&gt; e l&amp;rsquo;uso dell&amp;rsquo;evento &amp;ldquo;&lt;strong&gt;PrintPage&amp;rdquo;&lt;/strong&gt;. Sono stati introdotti nuovi
controlli quali la &amp;ldquo;&lt;strong&gt;RichTextBox&lt;/strong&gt;&amp;rdquo;,
che permette di renderizzare il testo e di gestirne la formattazione, con la
possibilit&amp;agrave; di integrare elementi come immagini e altri oggetti, e l&amp;rsquo;oggetto &amp;ldquo;&lt;strong&gt;WebBrowser&lt;/strong&gt;&amp;rdquo; per la navigazione tra le
pagine web, il &amp;ldquo;&lt;strong&gt;Paragraph&lt;/strong&gt;&amp;rdquo; per la
formattazione del testo, che pu&amp;ograve; contenere diversi oggetti, tra i quali il pi&amp;ugrave;
interessante &amp;egrave; &amp;ldquo;&lt;strong&gt;InlineUIContainer&lt;/strong&gt;&amp;rdquo;,
che permette di inserire dei controlli all&amp;rsquo;interno del testo. E&amp;rsquo;stato anche
introdotto l&amp;rsquo;evento &lt;strong&gt;RightMouseButtonDown
&lt;/strong&gt;per il click del tasto destro del mouse e la propriet&amp;agrave; &lt;strong&gt;AllowDrop&lt;/strong&gt; per la gestione di trascinamento sul controllo &lt;strong&gt;&lt;span&gt;UIElement&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Altre
novit&amp;agrave; assolute di Silverlight 4.0 sono la classe &lt;strong&gt;NetworkCredential&lt;/strong&gt;, per l&amp;rsquo;accesso a risorse protette da username e
password, e la proprieta &lt;strong&gt;IpMulticast&lt;/strong&gt;
per l&amp;rsquo;invio di messaggi contemporaneamente con il trasferimento di pacchetti
tramite il protocollo UDP con una connessione uno a molti. E ancora, &amp;egrave; stato
introdotto il supporto alla Webcam e al microfono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Infine
&amp;egrave; giusto fare anche una piccola citazione, &amp;ldquo;piccola&amp;rdquo; perch&amp;eacute; l&amp;rsquo;argomento sar&amp;agrave;
ripreso nei prossimi articoli, al MEF (Managed Extensibility Framework), il
framework per lo sviluppo di applicazioni componibili dinamicamente, che &amp;egrave; stato
integrato nel Framework .NET 4.0, e che Silverlight 4.0 supporta.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
fatto che sia stato integrato il MEF in Silverlight 4.0, ha fatto in modo che
venissero accostati sempre pi&amp;ugrave; Silverlight e il design pattern M-V-VM
(Model-View-ViewModel), questo perch&amp;eacute; con Silverlight, come anche per WPF, lo
sviluppo di applicazioni componibili dinamicamente richiede obbligatoriamente
l&amp;rsquo;uso di M-V-VM. Sembra scontato dire, comunque, che questo design pattern
poteva essere tranquillamente usato con Silverlight anche prima della release
4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Non
mi resta altro, per questo primo articolo, se non lasciarvi i riferimenti per
scaricare i tools di sviluppo di Silverlight 4.0 in Visual Studio 2010 (la
release candidate 2), la sdk di Silverlight 4.0, il runtime e i WCF RIA Services
per Silverlight 4.0 (la release candidate 2) dal link:&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;a href="http://www.silverlight.net/getstarted/"&gt;Silverlight
4.0 develo&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;er tools and runtime&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;*Questo argomento sar&amp;agrave; ripreso negli articoli
successivi&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introducing Silverlight</title><link>http://dotnetcampania.org/wikis/articoli/introducing-silverlight/revision/2.aspx</link><pubDate>Fri, 23 Jul 2010 09:35:16 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:77</guid><dc:creator>Giorgio</dc:creator><description>Revision 2 posted to Articoli by Giorgio on 23/07/2010 11:35:16&lt;br /&gt;
&lt;h2&gt;Introducing Silverlight&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: Silverlight&lt;/div&gt;

&lt;p&gt;Silverlight
&amp;egrave; &lt;span&gt;una
tecnologia&lt;/span&gt; di Microsoft, cross-platform e cross-browser, per lo sviluppo
delle RIA (Rich Internet Applications). Esso permette di definire interfacce
utente e animazioni per pagine Web molto accattivanti grazie alla possibilit&amp;agrave;
di poter integrare tra di loro il linguaggio XAML e la potenza del .NET
Framework per la parte di code behind con C# o con VB.Net.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;In
realt&amp;agrave; Silverlight non fornisce tutte le potenzialit&amp;agrave; del .NET Framework, ma la
necessaria porzione di funzionalit&amp;agrave; di cui si pu&amp;ograve; aver bisogno per lo sviluppo
di applicazioni web&lt;span&gt;.&lt;/span&gt; &lt;span&gt;A&lt;/span&gt;nche
il CLR (Common Language Runtime) di Silverlight non &amp;egrave; lo stesso del framework
.NET, ma &amp;egrave; un piccolo plug-in cross-browser (6Mb per la versione 4.0 del
runtime)&lt;span&gt;&amp;nbsp; &lt;/span&gt;che si pu&amp;ograve; scaricare
gratuitamente da internet&lt;span&gt;.&lt;/span&gt;
&lt;span&gt;Ino&lt;/span&gt;&lt;span&gt;ltre&lt;/span&gt;, nel caso in cui non fosse mai
stato &lt;span&gt;installato&lt;/span&gt;
il runtime, sar&amp;agrave; scaricato automaticamente, previa &lt;span&gt;a&lt;/span&gt;&lt;span&gt;utorizzazione&lt;/span&gt;, al primo accesso fatto in una pagina web
sviluppata con silverlight. Il plug-in &amp;egrave; funzionante sia sotto Windows sia
sotto MAC ed &amp;egrave; in alcuni casi supportato da apparecchiature mobile che
utilizzano come sistema operativo Windows Mobile o Symbian^1 (S60 5a edizione
per cellulari quali N97, N97 mini o 5800 Xpressmusic)e (quando usciranno i
nuovi smartphone che lo monteranno, anche se per ora ci si pu&amp;ograve; smanettare un
po&amp;rsquo;) Windows Phone, mentre per Linux bisogna scaricare l&amp;rsquo;implementazione open
source del CLR, Moonlight, sviluppato dal team di Mono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Ancora
pi&amp;ugrave; fondamentale &amp;egrave; che Silverlight, a differenza di altre tecnologie quali
Asp.net o Asp.net MVC, &amp;egrave; client-side, quindi le applicazioni sviluppate con
essa sono installate direttamente sul client, di conseguenza, considerando uno
scenario in cui non avvengono richieste al server, i tempi di risposta della stessa
sono pi&amp;ugrave; rapidi, dal momento che qualsiasi tipo di operazione viene effettuata
direttamente nel browser del client.&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tutto
questo non da problemi dal punto di vista della sicurezza perche&amp;#39; silverlight
gira in una sandbox.&lt;/span&gt;&lt;strong&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;La
prima versione fu presentata il 4 settembre del 2007, ma se volessimo fissare
una milestone fondamentale per l&amp;rsquo;inizio dell&amp;rsquo;ascesa del progetto Silverlight,
potremmo identificarla con il 21 dicembre 2006, giorno in cui Microsoft
rilasci&amp;ograve; una tecnologia che risultava essere un sottoinsieme della gi&amp;agrave; pi&amp;ugrave;
conosciuta Windows Presentation Foundation. Proprio per questo motivo la prima
release di Silverlight fu chiamata WPF/E (WPF Everywhere).&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
versione di Silverlight ancora non era fornita del CLR, ma esponeva i dati con
delle API simili al DOM, fornendo cos&amp;igrave; la possibilit&amp;agrave; di programmarne
l&amp;rsquo;interazione con javascript. Questa prima versione includeva anche un encoder
di formati video e una prima versione dell&amp;rsquo;interprete per il linguaggio XAML.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Nella
release 1.1 fu introdotta una prima versione del runtime, il vero &amp;egrave; proprio
cuore di questa versione si componeva di tre parti:&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="padding-left:30px;"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;il &lt;strong&gt;presentation
core&lt;/strong&gt; che conteneva l&amp;rsquo;integrazione dei browser, l&amp;rsquo;interprete del linguaggio
XAML e il supporto ai media,&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="padding-left:30px;"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;la&lt;/span&gt; &lt;strong&gt;Base Class Library&lt;/strong&gt;, grazie alla quale, quindi, si aveva la
possibilit&amp;agrave; di usare&lt;span&gt; &lt;/span&gt;&lt;span&gt;una parte&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;del&lt;/span&gt;&lt;span&gt;le&lt;/span&gt; classi
base del .NET Framework con qualsiasi linguaggio da esso supportato,&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="padding-left:30px;"&gt;&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;e
&amp;ldquo;last but not least&amp;rdquo; il gi&amp;agrave; citato &lt;strong&gt;CLR&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="http://img831.imageshack.us/img831/1378/clipimage001.png" border="0" style="max-width:550px;" alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="padding-left:30px;"&gt;&lt;span lang="EN-US"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img style="max-width:550px;" border="0" src="http://img831.imageshack.us/img831/1378/clipimage001.png" alt="" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;Questo
cuore di silverlight era attorniato da tre framework quali presentation framework,
traducendo semplicemente dall&amp;rsquo;inglese e per dirlo in parole povere, tutto ci&amp;ograve;
che riguardava la parte di presentazione, il data framework e le interrogazioni
dei dati, e il comunications framework per l&amp;rsquo;interfacciamento delle
applicazioni con l&amp;rsquo;esterno (es. I server). &lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
runtime di Silverlight fece Il salto di qualit&amp;agrave; con la presentazione della
versione 2.0 (rilasciata il 14 ottobre 2008), nonostante fosse considerata la
naturale evoluzione di Silverlight 1.1, il miglioramento del CLR e alcune introduzioni
la rendevano molto pi&amp;ugrave; completa e funzionale rispetto al predecessore, e, come
se non bastasse, anche se vennero fatte queste modifiche, la dimensione del
plug-in continu&amp;ograve; a rimanere notevolmente &amp;ldquo;light&amp;rdquo;, solo 4,6Mb rispetto ai 4Mb
della versione 1.1.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Quasi
un anno dopo, per essere pi&amp;ugrave; precisi il 9 luglio 2009, Microsoft rilasciava la
terza versione di Silverlight, ancora una volta colma d&amp;rsquo;innovazioni. Con questa
release Microsoft, grazie alle migliorie nel campo del supporto a flussi
streaming (Smooth Streaming &lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;), cerca di opporsi in maniera decisa a Flash.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
piattaforma supportava anche il &amp;ldquo;&lt;strong&gt;Perspective&lt;/strong&gt;
&lt;strong&gt;3-D&lt;/strong&gt;&amp;rdquo;, una modalit&amp;agrave; di
implementazione 3D&lt;span&gt;&amp;nbsp; &lt;/span&gt;limitata ad una
visualizzazione prospettica degli elementi, ed introduceva effetti grafici da
poter applicare singolarmente ad ogni elemento discendente da &amp;ldquo;&lt;strong&gt;UIElement&lt;/strong&gt;&amp;rdquo; (Pixel shader effects),
furono migliorate le performance video grazie ad un maggiore sfruttamento della
GPU, fu aggiunta la possibilit&amp;agrave; di modificare le immagini bitmap, potendo anche
modificare singolarmente i pixel, furono aggiunti anche di nuovi effetti per le
animazioni, nuovi controlli, e il navigation framework per permettere la
navigazione tra diverse pagine xaml, fu introdotto anche il &amp;ldquo;&lt;strong&gt;Binding Element to Element&lt;/strong&gt;&amp;rdquo;&lt;strong&gt; &lt;/strong&gt;&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;, il quale permetteva di bindare la propriet&amp;agrave;
di un oggetto recuperandone il valore da un altro, e il &amp;ldquo;&lt;strong&gt;Binding Validation&lt;/strong&gt;&amp;rdquo;, un sistema che consentiva di intercettare le
eccezioni sollevate nel caso in cui al variare del valore dei dati essi risultavano
non congrui con i tipi di valori consentiti , furono inserite delle nuove API
del namespace &lt;i&gt;System.Windows.Messaging&lt;/i&gt;
che consentono la comunicazione tra pi&amp;ugrave; oggetti Silverlight nella pagina (Local
connection), ed infine una delle introduzioni pi&amp;ugrave; importanti, la possibilit&amp;agrave; di
creare delle &amp;ldquo;&lt;strong&gt;Out of Browser Application&lt;/strong&gt;&amp;rdquo;
&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;,
applicazioni di silverlight che possono essere avviate direttamente dal
desktop.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
progetto Silverlight &amp;egrave; arrivato alla versione 4.0, quest&amp;rsquo;ultima &amp;egrave; stata
rilasciata il 15/04/2010 in concomitanza alla presentazione di Visual Studio
2010 e del framework 4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
pi&amp;ugrave; recente relaese della piattaforma introduce migliorie per lo sviluppo di
applicazioni &amp;ldquo;&lt;strong&gt;Out of Browser&lt;/strong&gt;&amp;rdquo;,
l&amp;rsquo;aggiunta del supporto alla stampa, quindi l&amp;rsquo;introduzione dell&amp;rsquo;oggetto &amp;ldquo;&lt;strong&gt;PrintDocument&amp;rdquo;&lt;/strong&gt; e l&amp;rsquo;uso dell&amp;rsquo;evento &amp;ldquo;&lt;strong&gt;PrintPage&amp;rdquo;&lt;/strong&gt;. Sono stati introdotti nuovi
controlli quali la &amp;ldquo;&lt;strong&gt;RichTextBox&lt;/strong&gt;&amp;rdquo;,
che permette di renderizzare il testo e di gestirne la formattazione, con la
possibilit&amp;agrave; di integrare elementi come immagini e altri oggetti, e l&amp;rsquo;oggetto &amp;ldquo;&lt;strong&gt;WebBrowser&lt;/strong&gt;&amp;rdquo; per la navigazione tra le
pagine web, il &amp;ldquo;&lt;strong&gt;Paragraph&lt;/strong&gt;&amp;rdquo; per la
formattazione del testo, che pu&amp;ograve; contenere diversi oggetti, tra i quali il pi&amp;ugrave;
interessante &amp;egrave; &amp;ldquo;&lt;strong&gt;InlineUIContainer&lt;/strong&gt;&amp;rdquo;,
che permette di inserire dei controlli all&amp;rsquo;interno del testo. E&amp;rsquo;stato anche
introdotto l&amp;rsquo;evento &lt;strong&gt;RightMouseButtonDown
&lt;/strong&gt;per il click del tasto destro del mouse e la propriet&amp;agrave; &lt;strong&gt;AllowDrop&lt;/strong&gt; per la gestione di trascinamento sul controllo &lt;strong&gt;&lt;span&gt;UIElement&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Altre
novit&amp;agrave; assolute di Silverlight 4.0 sono la classe &lt;strong&gt;NetworkCredential&lt;/strong&gt;, per l&amp;rsquo;accesso a risorse protette da username e
password, e la proprieta &lt;strong&gt;IpMulticast&lt;/strong&gt;
per l&amp;rsquo;invio di messaggi contemporaneamente con il trasferimento di pacchetti
tramite il protocollo UDP con una connessione uno a molti. E ancora, &amp;egrave; stato
introdotto il supporto alla Webcam e al microfono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Infine
&amp;egrave; giusto fare anche una piccola citazione, &amp;ldquo;piccola&amp;rdquo; perch&amp;eacute; l&amp;rsquo;argomento sar&amp;agrave;
ripreso nei prossimi articoli, al MEF (Managed Extensibility Framework), il
framework per lo sviluppo di applicazioni componibili dinamicamente, che &amp;egrave; stato
integrato nel Framework .NET 4.0, e che Silverlight 4.0 supporta.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
fatto che sia stato integrato il MEF in Silverlight 4.0, ha fatto in modo che
venissero accostati sempre pi&amp;ugrave; Silverlight e il design pattern M-V-VM
(Model-View-ViewModel), questo perch&amp;eacute; con Silverlight, come anche per WPF, lo
sviluppo di applicazioni componibili dinamicamente richiede obbligatoriamente
l&amp;rsquo;uso di M-V-VM. Sembra scontato dire, comunque, che questo design pattern
poteva essere tranquillamente usato con Silverlight anche prima della release
4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Non
mi resta altro, per questo primo articolo, se non lasciarvi i riferimenti per
scaricare i tools di sviluppo di Silverlight 4.0 in Visual Studio 2010 (la
release candidate 2), la sdk di Silverlight 4.0, il runtime e i WCF RIA Services
per Silverlight 4.0 (la release candidate 2) dal link:&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bf5ab940-c011-4bd1-ad98-da671e491009&amp;amp;displaylang=en"&gt;Silverlight
4.0 develo&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;er tools and runtime&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;*Questo argomento sar&amp;agrave; ripreso negli articoli
successivi&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Introducing Silverlight</title><link>http://dotnetcampania.org/wikis/articoli/introducing-silverlight/revision/1.aspx</link><pubDate>Fri, 23 Jul 2010 09:33:44 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:76</guid><dc:creator>Giorgio</dc:creator><description>Revision 1 posted to Articoli by Giorgio on 23/07/2010 11:33:44&lt;br /&gt;
&lt;p&gt;Silverlight
&amp;egrave; &lt;span&gt;una
tecnologia&lt;/span&gt; di Microsoft, cross-platform e cross-browser, per lo sviluppo
delle RIA (Rich Internet Applications). Esso permette di definire interfacce
utente e animazioni per pagine Web molto accattivanti grazie alla possibilit&amp;agrave;
di poter integrare tra di loro il linguaggio XAML e la potenza del .NET
Framework per la parte di code behind con C# o con VB.Net.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;In
realt&amp;agrave; Silverlight non fornisce tutte le potenzialit&amp;agrave; del .NET Framework, ma la
necessaria porzione di funzionalit&amp;agrave; di cui si pu&amp;ograve; aver bisogno per lo sviluppo
di applicazioni web&lt;span&gt;.&lt;/span&gt; &lt;span&gt;A&lt;/span&gt;nche
il CLR (Common Language Runtime) di Silverlight non &amp;egrave; lo stesso del framework
.NET, ma &amp;egrave; un piccolo plug-in cross-browser (6Mb per la versione 4.0 del
runtime)&lt;span&gt;&amp;nbsp; &lt;/span&gt;che si pu&amp;ograve; scaricare
gratuitamente da internet&lt;span&gt;.&lt;/span&gt;
&lt;span&gt;Ino&lt;/span&gt;&lt;span&gt;ltre&lt;/span&gt;, nel caso in cui non fosse mai
stato &lt;span&gt;installato&lt;/span&gt;
il runtime, sar&amp;agrave; scaricato automaticamente, previa &lt;span&gt;a&lt;/span&gt;&lt;span&gt;utorizzazione&lt;/span&gt;, al primo accesso fatto in una pagina web
sviluppata con silverlight. Il plug-in &amp;egrave; funzionante sia sotto Windows sia
sotto MAC ed &amp;egrave; in alcuni casi supportato da apparecchiature mobile che
utilizzano come sistema operativo Windows Mobile o Symbian^1 (S60 5a edizione
per cellulari quali N97, N97 mini o 5800 Xpressmusic)e (quando usciranno i
nuovi smartphone che lo monteranno, anche se per ora ci si pu&amp;ograve; smanettare un
po&amp;rsquo;) Windows Phone, mentre per Linux bisogna scaricare l&amp;rsquo;implementazione open
source del CLR, Moonlight, sviluppato dal team di Mono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Ancora
pi&amp;ugrave; fondamentale &amp;egrave; che Silverlight, a differenza di altre tecnologie quali
Asp.net o Asp.net MVC, &amp;egrave; client-side, quindi le applicazioni sviluppate con
essa sono installate direttamente sul client, di conseguenza, considerando uno
scenario in cui non avvengono richieste al server, i tempi di risposta della stessa
sono pi&amp;ugrave; rapidi, dal momento che qualsiasi tipo di operazione viene effettuata
direttamente nel browser del client.&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tutto
questo non da problemi dal punto di vista della sicurezza perche&amp;#39; silverlight
gira in una sandbox.&lt;/span&gt;&lt;strong&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;La
prima versione fu presentata il 4 settembre del 2007, ma se volessimo fissare
una milestone fondamentale per l&amp;rsquo;inizio dell&amp;rsquo;ascesa del progetto Silverlight,
potremmo identificarla con il 21 dicembre 2006, giorno in cui Microsoft
rilasci&amp;ograve; una tecnologia che risultava essere un sottoinsieme della gi&amp;agrave; pi&amp;ugrave;
conosciuta Windows Presentation Foundation. Proprio per questo motivo la prima
release di Silverlight fu chiamata WPF/E (WPF Everywhere).&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
versione di Silverlight ancora non era fornita del CLR, ma esponeva i dati con
delle API simili al DOM, fornendo cos&amp;igrave; la possibilit&amp;agrave; di programmarne
l&amp;rsquo;interazione con javascript. Questa prima versione includeva anche un encoder
di formati video e una prima versione dell&amp;rsquo;interprete per il linguaggio XAML.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Nella
release 1.1 fu introdotta una prima versione del runtime, il vero &amp;egrave; proprio
cuore di questa versione si componeva di tre parti:&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;il &lt;strong&gt;presentation
core&lt;/strong&gt; che conteneva l&amp;rsquo;integrazione dei browser, l&amp;rsquo;interprete del linguaggio
XAML e il supporto ai media,&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&lt;span&gt;&amp;middot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;la&lt;/span&gt; &lt;strong&gt;Base Class Library&lt;/strong&gt;, grazie alla quale, quindi, si aveva la
possibilit&amp;agrave; di usare&lt;span&gt; &lt;/span&gt;&lt;span&gt;una parte&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;del&lt;/span&gt;&lt;span&gt;le&lt;/span&gt; classi
base del .NET Framework con qualsiasi linguaggio da esso supportato,&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;e
&amp;ldquo;last but not least&amp;rdquo; il gi&amp;agrave; citato &lt;strong&gt;CLR&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;" class="MsoListParagraphCxSpLast"&gt;&lt;span lang="EN-US"&gt;&lt;img src="http://img831.imageshack.us/img831/1378/clipimage001.png" border="0" style="max-width:550px;" alt="" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;Questo
cuore di silverlight era attorniato da tre framework quali presentation framework,
traducendo semplicemente dall&amp;rsquo;inglese e per dirlo in parole povere, tutto ci&amp;ograve;
che riguardava la parte di presentazione, il data framework e le interrogazioni
dei dati, e il comunications framework per l&amp;rsquo;interfacciamento delle
applicazioni con l&amp;rsquo;esterno (es. I server). &lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
runtime di Silverlight fece Il salto di qualit&amp;agrave; con la presentazione della
versione 2.0 (rilasciata il 14 ottobre 2008), nonostante fosse considerata la
naturale evoluzione di Silverlight 1.1, il miglioramento del CLR e alcune introduzioni
la rendevano molto pi&amp;ugrave; completa e funzionale rispetto al predecessore, e, come
se non bastasse, anche se vennero fatte queste modifiche, la dimensione del
plug-in continu&amp;ograve; a rimanere notevolmente &amp;ldquo;light&amp;rdquo;, solo 4,6Mb rispetto ai 4Mb
della versione 1.1.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Quasi
un anno dopo, per essere pi&amp;ugrave; precisi il 9 luglio 2009, Microsoft rilasciava la
terza versione di Silverlight, ancora una volta colma d&amp;rsquo;innovazioni. Con questa
release Microsoft, grazie alle migliorie nel campo del supporto a flussi
streaming (Smooth Streaming &lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;), cerca di opporsi in maniera decisa a Flash.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
piattaforma supportava anche il &amp;ldquo;&lt;b&gt;Perspective&lt;/b&gt;
&lt;b&gt;3-D&lt;/b&gt;&amp;rdquo;, una modalit&amp;agrave; di
implementazione 3D&lt;span&gt;&amp;nbsp; &lt;/span&gt;limitata ad una
visualizzazione prospettica degli elementi, ed introduceva effetti grafici da
poter applicare singolarmente ad ogni elemento discendente da &amp;ldquo;&lt;b&gt;UIElement&lt;/b&gt;&amp;rdquo; (Pixel shader effects),
furono migliorate le performance video grazie ad un maggiore sfruttamento della
GPU, fu aggiunta la possibilit&amp;agrave; di modificare le immagini bitmap, potendo anche
modificare singolarmente i pixel, furono aggiunti anche di nuovi effetti per le
animazioni, nuovi controlli, e il navigation framework per permettere la
navigazione tra diverse pagine xaml, fu introdotto anche il &amp;ldquo;&lt;b&gt;Binding Element to Element&lt;/b&gt;&amp;rdquo;&lt;b&gt; &lt;/b&gt;&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;, il quale permetteva di bindare la propriet&amp;agrave;
di un oggetto recuperandone il valore da un altro, e il &amp;ldquo;&lt;b&gt;Binding Validation&lt;/b&gt;&amp;rdquo;, un sistema che consentiva di intercettare le
eccezioni sollevate nel caso in cui al variare del valore dei dati essi risultavano
non congrui con i tipi di valori consentiti , furono inserite delle nuove API
del namespace &lt;i&gt;System.Windows.Messaging&lt;/i&gt;
che consentono la comunicazione tra pi&amp;ugrave; oggetti Silverlight nella pagina (Local
connection), ed infine una delle introduzioni pi&amp;ugrave; importanti, la possibilit&amp;agrave; di
creare delle &amp;ldquo;&lt;b&gt;Out of Browser Application&lt;/b&gt;&amp;rdquo;
&lt;sup&gt;&lt;span&gt;*&lt;/span&gt;&lt;/sup&gt;,
applicazioni di silverlight che possono essere avviate direttamente dal
desktop.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
progetto Silverlight &amp;egrave; arrivato alla versione 4.0, quest&amp;rsquo;ultima &amp;egrave; stata
rilasciata il 15/04/2010 in concomitanza alla presentazione di Visual Studio
2010 e del framework 4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Questa
pi&amp;ugrave; recente relaese della piattaforma introduce migliorie per lo sviluppo di
applicazioni &amp;ldquo;&lt;b&gt;Out of Browser&lt;/b&gt;&amp;rdquo;,
l&amp;rsquo;aggiunta del supporto alla stampa, quindi l&amp;rsquo;introduzione dell&amp;rsquo;oggetto &amp;ldquo;&lt;b&gt;PrintDocument&amp;rdquo;&lt;/b&gt; e l&amp;rsquo;uso dell&amp;rsquo;evento &amp;ldquo;&lt;b&gt;PrintPage&amp;rdquo;&lt;/b&gt;. Sono stati introdotti nuovi
controlli quali la &amp;ldquo;&lt;b&gt;RichTextBox&lt;/b&gt;&amp;rdquo;,
che permette di renderizzare il testo e di gestirne la formattazione, con la
possibilit&amp;agrave; di integrare elementi come immagini e altri oggetti, e l&amp;rsquo;oggetto &amp;ldquo;&lt;b&gt;WebBrowser&lt;/b&gt;&amp;rdquo; per la navigazione tra le
pagine web, il &amp;ldquo;&lt;b&gt;Paragraph&lt;/b&gt;&amp;rdquo; per la
formattazione del testo, che pu&amp;ograve; contenere diversi oggetti, tra i quali il pi&amp;ugrave;
interessante &amp;egrave; &amp;ldquo;&lt;b&gt;InlineUIContainer&lt;/b&gt;&amp;rdquo;,
che permette di inserire dei controlli all&amp;rsquo;interno del testo. E&amp;rsquo;stato anche
introdotto l&amp;rsquo;evento &lt;b&gt;RightMouseButtonDown
&lt;/b&gt;per il click del tasto destro del mouse e la propriet&amp;agrave; &lt;b&gt;AllowDrop&lt;/b&gt; per la gestione di trascinamento sul controllo &lt;strong&gt;&lt;span&gt;UIElement&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Altre
novit&amp;agrave; assolute di Silverlight 4.0 sono la classe &lt;b&gt;NetworkCredential&lt;/b&gt;, per l&amp;rsquo;accesso a risorse protette da username e
password, e la proprieta &lt;b&gt;IpMulticast&lt;/b&gt;
per l&amp;rsquo;invio di messaggi contemporaneamente con il trasferimento di pacchetti
tramite il protocollo UDP con una connessione uno a molti. E ancora, &amp;egrave; stato
introdotto il supporto alla Webcam e al microfono.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Infine
&amp;egrave; giusto fare anche una piccola citazione, &amp;ldquo;piccola&amp;rdquo; perch&amp;eacute; l&amp;rsquo;argomento sar&amp;agrave;
ripreso nei prossimi articoli, al MEF (Managed Extensibility Framework), il
framework per lo sviluppo di applicazioni componibili dinamicamente, che &amp;egrave; stato
integrato nel Framework .NET 4.0, e che Silverlight 4.0 supporta.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Il
fatto che sia stato integrato il MEF in Silverlight 4.0, ha fatto in modo che
venissero accostati sempre pi&amp;ugrave; Silverlight e il design pattern M-V-VM
(Model-View-ViewModel), questo perch&amp;eacute; con Silverlight, come anche per WPF, lo
sviluppo di applicazioni componibili dinamicamente richiede obbligatoriamente
l&amp;rsquo;uso di M-V-VM. Sembra scontato dire, comunque, che questo design pattern
poteva essere tranquillamente usato con Silverlight anche prima della release
4.0.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;Non
mi resta altro, per questo primo articolo, se non lasciarvi i riferimenti per
scaricare i tools di sviluppo di Silverlight 4.0 in Visual Studio 2010 (la
release candidate 2), la sdk di Silverlight 4.0, il runtime e i WCF RIA Services
per Silverlight 4.0 (la release candidate 2) dal link:&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bf5ab940-c011-4bd1-ad98-da671e491009&amp;amp;displaylang=en"&gt;Silverlight
4.0 develo&lt;span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/span&gt;er tools and runtime&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;*Questo argomento sar&amp;agrave; ripreso negli articoli
successivi&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;</description></item><item><title>Resizing e generazione di thumbnail avanzata</title><link>http://dotnetcampania.org/wikis/articoli/resizing-e-generazione-di-thumbnail-avanzata/revision/0.aspx</link><pubDate>Thu, 08 Apr 2010 20:13:18 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:26</guid><dc:creator>ilNero</dc:creator><description>Current revision posted to Articoli by ilNero on 08/04/2010 22:13:18&lt;br /&gt;
&lt;h2&gt;Resizing e generazione di thumbnail avanzata&lt;span style="text-decoration: line-through; color: red;"&gt;di&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;immagini&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;
            Introduzione&lt;/h3&gt;
&lt;p&gt;
            Uno dei metodi pi&amp;ugrave; comodi e pi&amp;ugrave; utilizzati per ottenere thumbnail di immagini dinamicamente
            &amp;egrave; il metodo &lt;strong&gt;GetThumbnailImage()&lt;/strong&gt; dell&amp;#39;oggetto &lt;strong&gt;Image&lt;/strong&gt; presente nel namespace
            &lt;strong&gt;System.Drawing&lt;/strong&gt;, come ripreso anche da Turibbio in uno dei suoi &lt;a href="/blogs/turibbio/archive/2009/08/18/creare-thumbnails-di-immagini-con-net.aspx"&gt;
                post&lt;/a&gt;.
            &lt;/p&gt;
&lt;p&gt;
                L&amp;#39;utilizzo di questo metodo pone per&amp;ograve; alcune limitazioni, come lo stesso msdn afferma:&lt;/p&gt;
&lt;p&gt;
                &lt;cite&gt;Il metodo GetThumbnailImage garantisce migliori risultati quando le dimensioni
                    dell&amp;#39;immagine di anteprima richiesta sono pari a circa 120x120 pixel. Se si richiede
                    un&amp;#39;immagine di anteprima di grandi dimensioni, ad esempio 300x300, da un oggetto
                    Image che dispone di un&amp;#39;anteprima incorporata, &amp;egrave; possibile che si verifichi una
                    notevole perdita di qualit&amp;agrave; dell&amp;#39;immagine dell&amp;#39;anteprima. Potrebbe essere consigliabile
                    ridimensionare l&amp;#39;immagine principale, anzich&amp;eacute; ridimensionare l&amp;#39;anteprima incorporata,
                    chiamando il metodo DrawImage.&lt;/cite&gt; (1)&lt;/p&gt;
&lt;p&gt;
                Qualche considerazione nata dalla mia esperienza di web developer: il pi&amp;ugrave; delle
                volte mi &amp;egrave; capitato di dover gestire thumbnail che fossero in qualche modo uniformi
                nelle dimensioni e nel colore di sfondo. Ho deciso di affrontare entrambi gli aspetti
                in modo da approcciare il problema nella sua variegata casistica.&lt;/p&gt;
&lt;p&gt;
                Ho affrontato il problema suddividendolo in due blocchi.&lt;br /&gt;
                Dapprima viene curato l&amp;#39;aspetto legato al &lt;strong&gt;contenitore&lt;/strong&gt; dell&amp;#39;immagine di output:
                &amp;egrave;&amp;#39; possibile immaginarlo come il livello di sfondo dell&amp;#39;immagine risultante.&lt;br /&gt;
                Successivamente viene curato il ridimensionamento dell&amp;#39;immagine e come questa viene
                disegnata rispetto al contenitore.&lt;br /&gt;
                Utilizzare la procedura proposta in questo post per effettuare il ridimensionamento
                dell&amp;#39;immagine in input preveder&amp;agrave; dunque la definizione delle dimensioni di larghezza
                ed altezza desiderate del container, e delle dimensioni di larghezza ed altezza
                desiderate dell&amp;#39;immagine ridimensionata, le quali non sempre e non necessariamente
                devono combaciare. Per questo motivo, ho definito quattro membri e relative propriet&amp;agrave;:
                &lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt;private int _imageWidth;
private int _imageHeight;
private int _containerWidth;
private int _containerHeight;

public int Width
{
    get { return _imageWidth; }
    set { _imageWidth = value; }
}
public int Height
{
    get { return _imageHeight; }
    set { _imageHeight = value; }
}
public int ContainerWidth
{
    get { return _containerWidth; }
    set { _containerWidth = value; }
}
public int ContainerHeight
{
    get { return _containerHeight; }
    set { _containerHeight = value; }
}
         &lt;/pre&gt;
&lt;p&gt;
                    Il modo in cui queste quattro dimensioni interagiscono tra di loro &amp;egrave; definito dall&amp;#39;enumerazione&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; 
public enum ScaleMode
{
    FitContainer,
    FitImage,
    FitAuto,
    NoFit
}
&lt;/pre&gt;
&lt;p&gt;
                    dove:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FitContainer&lt;/strong&gt;: forza il ridimensionamento in modo da adeguarsi alle dimensioni
                        specificate per il contenitore. L&amp;#39;immagine di output avr&amp;agrave; le dimensioni specificate
                        per il contenitore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FitImage&lt;/strong&gt;: effettua il ridimensionamento in base alle dimensioni specificate
                        per imageWidth e imageHeight, forzando il contenitore ad adeguarsi a queste dimensioni&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FitAuto&lt;/strong&gt;: esegue un ridimensionamento calcolando in automatico le dimensioni
                        dell&amp;#39;immagine risultante all&amp;#39;interno del contenitore. L&amp;#39;immagine di output avr&amp;agrave;
                        le dimensioni specificate per il contenitore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoFit&lt;/strong&gt;: non adegua il ridimensionamento al contenitore. Esegue il ridimensionamento
                        sull&amp;#39;immagine in base alle dimensioni specificate, effettuando un taglio dell&amp;#39;immagine
                        qualora questa superi le dimensioni del contenitore. L&amp;#39;immagine di output avr&amp;agrave; le
                        dimensioni specificate per il contenitore. E&amp;#39; possibile gestire la modalit&amp;agrave; di taglio
                        con le strutture seguenti:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; 
public enum Position
{
    TopLeft,
    TopCenter,
    TopRight,
    MiddleLeft,
    MiddleCenter,
    MiddleRight,
    BottomLeft,
    BottomCenter,
    BottomRight,
    Undefined
}

private int _offsetX;
private int _offsetY;
private Position _drawingPosition;

public int OffsetX
{
    get { return _offsetX; }
    set { _offsetX = value; }
}
public int OffsetY
{
    get { return _offsetY; }
    set { _offsetY = value; }
}
public Position DrawingPosition {
    get { return _drawingPosition; }
    set { _drawingPosition = value; }
}
        &lt;/pre&gt;
&lt;p&gt;
                    L&amp;#39;enumerazione &lt;strong&gt;Position&lt;/strong&gt; definisce in che modo l&amp;#39;immagine viene allineata
                    rispetto al container. E se proprio questo non bastasse &amp;egrave; possibile valorizzare
                    le variabili OffsetX e OffsetY che consentono di avere uno scostamento rispetto
                    all&amp;#39;origine (l&amp;#39;angolo superiore sinistro del contenitore).&lt;/p&gt;
&lt;p&gt;
                    A queste modalit&amp;agrave; operative si aggiunge il controllo sul ridimensionamento proporzionale,
                    come si vedr&amp;agrave; in seguito.&lt;/p&gt;
&lt;p&gt;
                    Per quanto riguarda invece la definizione del colore di sfondo, ho definito due
                    variabili, la prima &amp;egrave; il colore vero e proprio, la seconda l&amp;#39;intensit&amp;agrave; del canale
                    alfa/trasparenza. Questi due valori vengono combinati nel metodo GetBackground()
                    che inoltre effettua un controllo sulla coerenza del valore di Alpha, che ammette
                    valori compresi tra 0 e 255.&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; 
private Color _backgroundColor;
private int _alpha;

public Color BackgroundColor
{
    get { return _backgroundColor; }
    set { _backgroundColor = value; }
}
public int Alpha
{
    get { return _alpha; }
    set { _alpha = value; }
}

private SolidBrush GetBackground()
{
    int alphaCheck = 255;
    if (_alpha &amp;lt; 0)
        alphaCheck = 0;
    else if (_alpha &amp;gt; 255)
        alphaCheck = 255;
    else
        alphaCheck = _alpha;
    return new SolidBrush(Color.FromArgb(alphaCheck, _backgroundColor));
}
            &lt;/pre&gt;
&lt;p&gt;
                    Vediamo ora come utilizzare il metodo DrawImage, come suggerito in msdn.&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; 
public Image Resize(Image image)
{
    // Temp variables
    int newContainerWidth = _containerWidth;
    int newContainerHeight = _containerHeight;
    int newImageWidth = _imageWidth;
    int newImageHeight = _imageHeight;
    int newPositionX = 0;
    int newPositionY = 0;

    GetNewSizes(image, ref newContainerWidth, ref newContainerHeight, ref newImageWidth, ref newImageHeight);
    GetPositions(ref newPositionX, ref newPositionY, newContainerWidth, newContainerHeight, newImageWidth, newImageHeight);

    Bitmap retObj = new Bitmap(newContainerWidth, newContainerHeight);
    retObj.SetResolution(_horizontalResolution, _verticalResolution);

    Graphics g = Graphics.FromImage(retObj);
    g.CompositingMode = _compositingMode;
    g.CompositingQuality = _compositingQuality;
    g.SmoothingMode = _smoothing;
    g.InterpolationMode = _interpolation;
    
    g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
    g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
    g.Dispose();
    return (Image)retObj;
}
        &lt;/pre&gt;
&lt;p&gt;
                    Come si osserva dal codice, vengono definite una serie di variabili temporanee che
                    saranno popolate successivamente da due metodi di supporto che vengono richiamati
                    per effettuare i dovuti controlli sulle dimensioni del container e dell&amp;#39;immagine
                    e definire quindi i valori finali che saranno utilizzati durante il processo di
                    resizing dell&amp;#39;immagine.&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt;private void GetProportionalSizes(Image image, ref int imageWidth, ref int imageHeight)
{
    bool exceedWidth = image.Width &amp;gt; imageWidth ? true : false;
    bool exceedHeight = image.Height &amp;gt; imageHeight ? true : false;

    if (exceedWidth &amp;amp; exceedHeight)
    {
        int horizontalSurplus = image.Width - _imageWidth;
        int verticalSurplus = image.Height - _imageHeight;

        if (horizontalSurplus &amp;gt; verticalSurplus)
        {
            imageWidth = _imageWidth;
            imageHeight = imageWidth * image.Height / image.Width;
        }
        else
        {
            imageHeight = _imageHeight;
            imageWidth = imageHeight * image.Width / image.Height;
        }
    }
    else
    {
        if (exceedWidth)
        {
            imageWidth = _imageWidth;
            imageHeight = imageWidth * image.Height / image.Width;
        }
        else
        {
            imageHeight = _imageHeight;
            imageWidth = imageHeight * image.Width / image.Height;
        }
    }
}
        &lt;/pre&gt;
&lt;p&gt;
                    Il metodo GetProportionalSizes() calcola le dimensioni finali dell&amp;#39;immagine in modo
                    da effettuare un ridimensionamento proporzionale ed evitare cos&amp;igrave; il fastidioso effetto
                    di stretching delle immagini. Nella serie di if-else innestate viene eseguito un
                    controllo sulla coerenza della proporzioni in base alle dimensioni dell&amp;#39;immagine
                    originale e delle dimensioni desiderate.&lt;/p&gt;
&lt;p&gt;
                Infatti il primo controllo si occupa di verificare quale delle due dimensioni (orizzontale
                o verticale) richieste eccede rispetto alla dimensione dell&amp;#39;immagine originale.
                Se entrambe eccedono, viene verificata quale delle due dimensioni eccede maggiormente
                di modo che il calcolo proporzionale venga fatto su questa. Il discorso &amp;egrave; analogo
                qualora solo una delle due dimensioni ecceda rispetto alle dimensioni dell&amp;#39;immagine
                originale. Il terzo caso, non contemplato nel corpo del metodo, &amp;egrave; il caso in cui
                nessuna delle due dimensioni richieste per il ridimensionamento ecceda le dimensioni
                originali: in questo caso le dimensioni richieste sono superiori a quella dell&amp;#39;immagine
                originale, assumendo l&amp;#39;assenza di ridimensionamento, ed evitando quindi il calcolo
                delle dimensioni proporzionali.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; private void CheckContainerSizes(ref int imageWidth, ref int imageHeight)
{
    bool exceedWidth = imageWidth &amp;gt; _containerWidth ? true : false;
    bool exceedHeight = imageHeight &amp;gt; _containerHeight ? true : false;

    if (exceedWidth &amp;amp; exceedHeight)
    {
        int horizontalSurplus = imageWidth - _containerWidth;
        int verticalSurplus = imageHeight - _containerHeight;

        if (horizontalSurplus &amp;gt; verticalSurplus)
        {
            imageWidth = _containerWidth;
            imageHeight = imageWidth * _containerHeight / _containerWidth;
        }
        else
        {
            imageHeight = _containerHeight;
            imageWidth = imageHeight * _containerWidth / _containerHeight;
        }
    }
    else
    {
        if (exceedWidth)
        {
            imageWidth = _containerWidth;
            imageHeight = imageWidth * _containerHeight / _containerWidth;
        }
        else
        {
            imageHeight = _containerHeight;
            imageWidth = imageHeight * _containerWidth / _containerHeight;
        }
    }

    // Change required size for auto fit
    _imageWidth = imageWidth;
    _imageHeight = imageHeight;
}        
        &lt;/pre&gt;
&lt;p&gt;
                Il metodo CheckContainerSizes() viene richiamato nel solo caso in cui la modalit&amp;agrave;
                operativa scelta sia FitAuto, ovvero quando viene richiesto che l&amp;#39;immagine venga
                ridimensionata nel rispetto delle dimensioni del container, senza andare oltre queste.
                Leggendo il corpo di questo metodo, si nota che &amp;egrave; praticamente identico al corpo
                del metodo GetProportionalSizes(), ma ha una differenza importante: oltre ad effettuare
                le verifiche del caso, &amp;egrave; in grado di reimpostare le dimensioni di ridimensionamento
                richieste affinch&amp;egrave; soddisfino il criterio operativo scelto.&lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt;public void Save(Image image, ImageFormat format, string outputFile)
{
    if (format == ImageFormat.Jpeg)
    {
        ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, _jpegCompression);
        image.Save(outputFile, info[1], encoderParams);
    }
    else
    {
        image.Save(outputFile, format);
    }
}
&lt;/pre&gt;
&lt;p&gt;
                Il metodo Save() consente di salvare su filesystem l&amp;#39;immagine precedentemente ridimensionata
                (o qualunque altra immagine precedentemente istanziata, visto che tra i parametri
                di input c&amp;#39;&amp;egrave; &amp;quot;image&amp;quot;).&lt;br /&gt;
                Si nota per&amp;ograve; che nel caso venga richiesto di salvare in formato Jpeg, &amp;egrave; possibile
                controllare il grado di compressione dell&amp;#39;immagine jpeg risultante, semplicemente
                instanziando e valorizzando l&amp;#39;oggetto &lt;strong&gt;EncoderParameters&lt;/strong&gt; e passandolo in input
                ad uno specifico overload del metodo Save() dell&amp;#39;oggetto Image.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
            Tra i vari membri presenti, opportunamente mappati su propriet&amp;agrave;, ne spiccano cinque
            che consentono di avere un controllo dell&amp;#39;output piuttosto avanzato:
            &lt;/p&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt;private InterpolationMode _interpolation;
private CompositingMode _compositingMode;
private CompositingQuality _compositingQuality;
private SmoothingMode _smoothing;
private PixelOffsetMode _pixelOffsetMode;

public InterpolationMode Interpolation
{
    get { return _interpolation; }
    set { _interpolation = value; }
}
public CompositingMode CompositingMode
{
    get { return _compositingMode; }
    set { _compositingMode = value; }
}
public CompositingQuality CompositingQuality
{
    get { return _compositingQuality; }
    set { _compositingQuality = value; }
}
public SmoothingMode Smoothing
{
    get { return _smoothing; }
    set { _smoothing = value; }
}
public PixelOffsetMode PixelOffset
{
    get { return _pixelOffsetMode; }
    set { _pixelOffsetMode = value; }
}
        &lt;/pre&gt;
&lt;h3&gt;
                InterpolationMode&lt;/h3&gt;
&lt;p&gt;
                L&amp;#39;InterpolationMode &amp;egrave;, in questo contesto, di importanza vitale. Specifica infatti
                &amp;#39;algoritmo utilizzato quando le immagini vengono scalate o ruotate. Questi le possibili
                scelte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica la modalit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low&lt;/strong&gt;: Specifica un&amp;#39;interpolazione di bassa qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High&lt;/strong&gt;: Specifica un&amp;#39;interpolazione di elevata qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilinear&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bilineare. Non viene effettuata alcuna
                    operazione di prefiltraggio. Questa modalit&amp;agrave; non &amp;egrave; adatta per la compattazione di
                    un&amp;#39;immagine al di sotto del 50% delle dimensioni originali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bicubic&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bicubica. Non viene effettuata alcuna
                    operazione di prefiltraggio. Questa modalit&amp;agrave; non &amp;egrave; adatta per la compattazione di
                    un&amp;#39;immagine al di sotto del 25% delle dimensioni originali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NearestNeighbor&lt;/strong&gt;: Specifica l&amp;#39;interpolazione pi&amp;ugrave; simile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQualityBilinear&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bilineare di elevata qualit&amp;agrave;.
                    Viene effettuata un&amp;#39;operazione di prefiltraggio per assicurare una compattazione
                    di elevata qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQualityBicubic&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bicubica di elevata qualit&amp;agrave;.
                    Viene effettuata un&amp;#39;operazione di prefiltraggio per assicurare una compattazione
                    di elevata qualit&amp;agrave;. Questa modalit&amp;agrave; produce le immagini trasformate di qualit&amp;agrave; pi&amp;ugrave;
                    elevata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                CompositingMode&lt;/h3&gt;
&lt;p&gt;
                Il CompositingMode specifica il modo in cui i colori di origine vengono combinati
                con i colori dello sfondo. E&amp;#39; possibile assegnare uno dei due valori:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SourceOver&lt;/strong&gt;: quando viene eseguito il rendering di un colore, tale colore
                    viene miscelato con il colore dello sfondo. La miscela di colori viene determinata
                    dal componente alpha del colore di cui viene eseguito il rendering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SourceCopy&lt;/strong&gt;: quando viene eseguito il rendering di un colore, tale colore
                    sovrascrive il colore dello sfondo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                CompositingQuality&lt;/h3&gt;
&lt;p&gt;
                La CompositingQuality specifica il livello di qualit&amp;agrave; da utilizzare durante la composizione.
                Questi sono i valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: qualit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: alta velocit&amp;agrave;, bassa qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: composizione di elevata qualit&amp;agrave; e ridotta velocit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GammaCorrected&lt;/strong&gt;: viene utilizzata la correzione gamma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AssumeLinear&lt;/strong&gt;: vengono assunti i valori lineari.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                SmoothingMode&lt;/h3&gt;
&lt;p&gt;
                Lo SmoothingMode specifica se e come viene applicato l&amp;#39;anti-aliasing. Anche i questo
                caso abbiamo una serie di valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: Specifica il rendering con antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AntiAlias&lt;/strong&gt;: Specifica il rendering con antialias.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                PixelOffsetMode&lt;/h3&gt;
&lt;p&gt;
                Il PixelOffsetMode specifica la modalit&amp;agrave; di offset dei pixel durante l&amp;#39;esecuzione
                del rendering, in modo da controllare la qualit&amp;agrave; del rendering finale. Questi i
                valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica la modalit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: Specifica un rendering di elevata velocit&amp;agrave; e ridotta qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: Specifica un rendering di elevata qualit&amp;agrave; e ridotta velocit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt;: Specifica l&amp;#39;assenza di offset di pixel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Half&lt;/strong&gt;: Specifica l&amp;#39;offset dei pixel in base a unit&amp;agrave; - .5, sia in senso orizzontale
                    che verticale, per ottenere un anti-aliasing di elevata velocit&amp;agrave;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt;g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
&lt;/pre&gt;
&lt;p&gt;
                Definiti tutti i parametri di disegno ed effettuati i calcoli sul ridimensionamento,
                sono le due chiamate finali a generare l&amp;#39;immagine di output. Nella prima, il metodo
                FillRectangle, in uno dei suoi overload (2), disegna il livello di sfondo. Su di
                questo, la chiamata successiva, DrawImage, anch&amp;#39;essa in uno dei suoi overload (3),
                disegna l&amp;#39;immagine ridimensionata.&lt;/p&gt;
&lt;h3&gt;Il codice sorgente&lt;/h3&gt;
&lt;pre style="overflow:auto;" class="brush: c-sharp;"&gt; 
#region Using directives
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
#endregion

namespace DotNetCampania.Imager
{
    public class ImageProcessor
    {
        #region Enums
        public enum ScaleMode
        {
            FitContainer,
            FitImage,
            FitAuto,
            NoFit
        }

        public enum Position
        {
            TopLeft,
            TopCenter,
            TopRight,
            MiddleLeft,
            MiddleCenter,
            MiddleRight,
            BottomLeft,
            BottomCenter,
            BottomRight,
            Undefined
        }
        #endregion

        #region Members
        private int _imageWidth;
        private int _imageHeight;
        private int _containerWidth;
        private int _containerHeight;
        private ScaleMode _scale;
        private Position _drawingPosition;
        private bool _proportional;
        private InterpolationMode _interpolation;
        private CompositingMode _compositingMode;
        private CompositingQuality _compositingQuality;
        private SmoothingMode _smoothing;
        private PixelOffsetMode _pixelOffsetMode;
        private Color _backgroundColor;
        private int _alpha;

        private int _offsetX;
        private int _offsetY;

        private ImageFormat _outputImageFormat;
        private long _jpegCompression;
        private float _horizontalResolution;
        private float _verticalResolution;
        #endregion

        #region Properties
        public int Width
        {
            get { return _imageWidth; }
            set { _imageWidth = value; }
        }
        public int Height
        {
            get { return _imageHeight; }
            set { _imageHeight = value; }
        }
        public int ContainerWidth
        {
            get { return _containerWidth; }
            set { _containerWidth = value; }
        }
        public int ContainerHeight
        {
            get { return _containerHeight; }
            set { _containerHeight = value; }
        }
        public Position DrawingPosition
        {
            get { return _drawingPosition; }
            set { _drawingPosition = value; }
        }
        public bool Proportional
        {
            get { return _proportional; }
            set { _proportional = value; }
        }
        public InterpolationMode Interpolation
        {
            get { return _interpolation; }
            set { _interpolation = value; }
        }
        public CompositingMode CompositingMode
        {
            get { return _compositingMode; }
            set { _compositingMode = value; }
        }
        public CompositingQuality CompositingQuality
        {
            get { return _compositingQuality; }
            set { _compositingQuality = value; }
        }
        public SmoothingMode Smoothing
        {
            get { return _smoothing; }
            set { _smoothing = value; }
        }
        public PixelOffsetMode PixelOffset
        {
            get { return _pixelOffsetMode; }
            set { _pixelOffsetMode = value; }
        }
        public Color BackgroundColor
        {
            get { return _backgroundColor; }
            set { _backgroundColor = value; }
        }
        public int Alpha
        {
            get { return _alpha; }
            set { _alpha = value; }
        }
        public int OffsetX
        {
            get { return _offsetX; }
            set { _offsetX = value; }
        }
        public int OffsetY
        {
            get { return _offsetY; }
            set { _offsetY = value; }
        }
        public ImageFormat OutputImageFormat
        {
            get { return this._outputImageFormat; }
            set { _outputImageFormat = value; }
        }
        public long JPEGCompression
        {
            get { return _jpegCompression; }
            set { _jpegCompression = value; }
        }
        public float HorizontalResolution
        {
            get { return _horizontalResolution; }
            set { _horizontalResolution = value; }
        }
        public float VerticalResolution
        {
            get { return _verticalResolution; }
            set { _verticalResolution = value; }
        }
        public ScaleMode Scale
        {
            get { return _scale; }
            set { _scale = value; }
        }
        #endregion

        #region Constructor(s)
        public ImageProcessor()
        {
            _imageWidth = default(int);
            _imageHeight = default(int);
            _containerWidth = default(int);
            _containerHeight = default(int);
            _drawingPosition = Position.Undefined;
            _interpolation = InterpolationMode.HighQualityBicubic;
            _compositingMode = CompositingMode.SourceOver;
            _compositingQuality = CompositingQuality.HighQuality;
            _smoothing = SmoothingMode.HighQuality;
            _pixelOffsetMode = PixelOffsetMode.HighQuality;

            _proportional = true;
            _alpha = 255;
            _backgroundColor = Color.White;

            _offsetX = 0;
            _offsetY = 0;
            _scale = ScaleMode.FitAuto;

            _outputImageFormat = ImageFormat.Jpeg;
            _jpegCompression = 80L;
            _horizontalResolution = 72f;
            _verticalResolution = 72f;
        }
        #endregion

        #region Public methods
        public Image Resize(Image image)
        {
            // Temp variables
            int newContainerWidth = _containerWidth;
            int newContainerHeight = _containerHeight;
            int newImageWidth = _imageWidth;
            int newImageHeight = _imageHeight;
            int newPositionX = 0;
            int newPositionY = 0;

            GetNewSizes(image, ref newContainerWidth, ref newContainerHeight, ref newImageWidth, ref newImageHeight);
            GetPositions(ref newPositionX, ref newPositionY, newContainerWidth, newContainerHeight, newImageWidth, newImageHeight);

            Bitmap retObj = new Bitmap(newContainerWidth, newContainerHeight);
            retObj.SetResolution(_horizontalResolution, _verticalResolution);

            Graphics g = Graphics.FromImage(retObj);
            g.CompositingMode = _compositingMode;
            g.CompositingQuality = _compositingQuality;
            g.SmoothingMode = _smoothing;
            g.InterpolationMode = _interpolation;
            g.PixelOffsetMode = _pixelOffsetMode;
            
            g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
            g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
            g.Dispose();
            return (Image)retObj;
        }

        public void Save(Image image, ImageFormat format, string outputFile)
        {
            if (format == ImageFormat.Jpeg)
            {
                ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
                EncoderParameters encoderParams = new EncoderParameters(1);
                encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, _jpegCompression);
                image.Save(outputFile, info[1], encoderParams);
            }
            else
            {
                image.Save(outputFile, format);
            }
        }
        #endregion

        #region Private support methods
        private void GetNewSizes(Image image, ref int containerWidth, ref int containerHeight, ref int imageWidth, ref int imageHeight)
        {
            switch (_scale)
            {
                case ScaleMode.NoFit:
                    if (_proportional)
                    {
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    }
                    break;
                case ScaleMode.FitAuto:
                    CheckContainerSizes(ref imageWidth, ref imageHeight); 
                    if (_proportional)
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    break;
                case ScaleMode.FitContainer:
                    imageWidth = containerWidth;
                    imageHeight = containerHeight;
                    break;
                case ScaleMode.FitImage:
                    if (_proportional)
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    containerWidth = imageWidth;
                    containerHeight = imageHeight;
                    break;
            }
        }

        private void GetPositions(ref int positionX, ref int positionY, int containerWidth, int containerHeight, int imageWidth, int imageHeight) {
            switch (_drawingPosition) {
                case Position.BottomCenter:
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));                    
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.BottomLeft: 
                    positionX = 0;
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.BottomRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.MiddleCenter: 
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.MiddleLeft:
                    positionX = 0;
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.MiddleRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.TopCenter: 
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));
                    positionY = 0;
                    break;
                case Position.TopLeft:
                    positionX = 0;
                    positionY = 0;
                    break;
                case Position.TopRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = 0;
                    break;
            }
        }

        private void CheckContainerSizes(ref int imageWidth, ref int imageHeight)
        {
            bool exceedWidth = imageWidth &amp;gt; _containerWidth ? true : false;
            bool exceedHeight = imageHeight &amp;gt; _containerHeight ? true : false;

            if (exceedWidth &amp;amp; exceedHeight)
            {
                int horizontalSurplus = imageWidth - _containerWidth;
                int verticalSurplus = imageHeight - _containerHeight;

                if (horizontalSurplus &amp;gt; verticalSurplus)
                {
                    imageWidth = _containerWidth;
                    imageHeight = imageWidth * _containerHeight / _containerWidth;
                }
                else
                {
                    imageHeight = _containerHeight;
                    imageWidth = imageHeight * _containerWidth / _containerHeight;
                }
            }
            else
            {
                if (exceedWidth)
                {
                    imageWidth = _containerWidth;
                    imageHeight = imageWidth * _containerHeight / _containerWidth;
                }
                else
                {
                    imageHeight = _containerHeight;
                    imageWidth = imageHeight * _containerWidth / _containerHeight;
                }
            }

            // Change required size for auto fit
            _imageWidth = imageWidth;
            _imageHeight = imageHeight;
        }

        private void GetProportionalSizes(Image image, ref int imageWidth, ref int imageHeight)
        {
            bool exceedWidth = image.Width &amp;gt; imageWidth ? true : false;
            bool exceedHeight = image.Height &amp;gt; imageHeight ? true : false;

            if (exceedWidth &amp;amp; exceedHeight)
            {
                int horizontalSurplus = image.Width - _imageWidth;
                int verticalSurplus = image.Height - _imageHeight;

                if (horizontalSurplus &amp;gt; verticalSurplus)
                {
                    imageWidth = _imageWidth;
                    imageHeight = imageWidth * image.Height / image.Width;
                }
                else
                {
                    imageHeight = _imageHeight;
                    imageWidth = imageHeight * image.Width / image.Height;
                }
            }
            else
            {
                if (exceedWidth)
                {
                    imageWidth = _imageWidth;
                    imageHeight = imageWidth * image.Height / image.Width;
                }
                else
                {
                    imageHeight = _imageHeight;
                    imageWidth = imageHeight * image.Width / image.Height;
                }
            }
        }

        private SolidBrush GetBackground()
        {
            int alphaCheck = 255;
            if (_alpha &amp;lt; 0)
                alphaCheck = 0;
            else if (_alpha &amp;gt; 255)
                alphaCheck = 255;
            else
                alphaCheck = _alpha;
            return new SolidBrush(Color.FromArgb(alphaCheck, _backgroundColor));
        }
        #endregion
    }
}
        &lt;/pre&gt;
&lt;h3&gt;
                Download&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/wikis/articoli/add.aspx/Downloads/DotNetCampania.Imager.zip"&gt;&lt;/a&gt;&lt;a href="http://www.gianlucaesposito.it/dotnetcampania/downloads/DotNetCampania.Imager.zip"&gt;Download library (5 KB)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gianlucaesposito.it/dotnetcampania/downloads/DotNetCampania.Imager.SampleWeb.zip"&gt;Download web sample (130                     KB)&lt;/a&gt;&lt;a href="/wikis/articoli/add.aspx/Downloads/DotNetCampania.Imager.SampleWeb.zip"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                Riferimenti&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Riferimento a .NET Framework - Metodo Image.GetThumbnailImage [&lt;a href="http://msdn.microsoft.com/it-it/library/system.drawing.image.getthumbnailimage.aspx"&gt;http://msdn.microsoft.com/it-it/library/system.drawing.image.getthumbnailimage.aspx&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Graphics.FillRectangle Method (Brush, Rectangle) [&lt;a href="http://msdn.microsoft.com/en-us/library/yysstebh.aspx"&gt;http://msdn.microsoft.com/en-us/library/yysstebh.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Metodo Graphics.DrawImage (Image, Int32, Int32, Int32, Int32) [&lt;a href="http://msdn.microsoft.com/it-it/library/dbsak4dc(v=VS.80).aspx"&gt;http://msdn.microsoft.com/it-it/library/dbsak4dc(v=VS.80).aspx&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Resizing e generazione di thumbnail avanzata di immagini</title><link>http://dotnetcampania.org/wikis/articoli/resizing-e-generazione-di-thumbnail-avanzata/revision/1.aspx</link><pubDate>Thu, 08 Apr 2010 20:11:21 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:75</guid><dc:creator>ilNero</dc:creator><description>Revision 1 posted to Articoli by ilNero on 08/04/2010 22:11:21&lt;br /&gt;
&lt;h3&gt;
            Introduzione&lt;/h3&gt;
&lt;p&gt;
            Uno dei metodi pi&amp;ugrave; comodi e pi&amp;ugrave; utilizzati per ottenere thumbnail di immagini dinamicamente
            &amp;egrave; il metodo &lt;strong&gt;GetThumbnailImage()&lt;/strong&gt; dell&amp;#39;oggetto &lt;strong&gt;Image&lt;/strong&gt; presente nel namespace
            &lt;strong&gt;System.Drawing&lt;/strong&gt;, come ripreso anche da Turibbio in uno dei suoi &lt;a href="/blogs/turibbio/archive/2009/08/18/creare-thumbnails-di-immagini-con-net.aspx"&gt;
                post&lt;/a&gt;.
            &lt;/p&gt;
&lt;p&gt;
                L&amp;#39;utilizzo di questo metodo pone per&amp;ograve; alcune limitazioni, come lo stesso msdn afferma:&lt;/p&gt;
&lt;p&gt;
                &lt;cite&gt;Il metodo GetThumbnailImage garantisce migliori risultati quando le dimensioni
                    dell&amp;#39;immagine di anteprima richiesta sono pari a circa 120x120 pixel. Se si richiede
                    un&amp;#39;immagine di anteprima di grandi dimensioni, ad esempio 300x300, da un oggetto
                    Image che dispone di un&amp;#39;anteprima incorporata, &amp;egrave; possibile che si verifichi una
                    notevole perdita di qualit&amp;agrave; dell&amp;#39;immagine dell&amp;#39;anteprima. Potrebbe essere consigliabile
                    ridimensionare l&amp;#39;immagine principale, anzich&amp;eacute; ridimensionare l&amp;#39;anteprima incorporata,
                    chiamando il metodo DrawImage.&lt;/cite&gt; (1)&lt;/p&gt;
&lt;p&gt;
                Qualche considerazione nata dalla mia esperienza di web developer: il pi&amp;ugrave; delle
                volte mi &amp;egrave; capitato di dover gestire thumbnail che fossero in qualche modo uniformi
                nelle dimensioni e nel colore di sfondo. Ho deciso di affrontare entrambi gli aspetti
                in modo da approcciare il problema nella sua variegata casistica.&lt;/p&gt;
&lt;p&gt;
                Ho affrontato il problema suddividendolo in due blocchi.&lt;br /&gt;
                Dapprima viene curato l&amp;#39;aspetto legato al &lt;strong&gt;contenitore&lt;/strong&gt; dell&amp;#39;immagine di output:
                &amp;egrave;&amp;#39; possibile immaginarlo come il livello di sfondo dell&amp;#39;immagine risultante.&lt;br /&gt;
                Successivamente viene curato il ridimensionamento dell&amp;#39;immagine e come questa viene
                disegnata rispetto al contenitore.&lt;br /&gt;
                Utilizzare la procedura proposta in questo post per effettuare il ridimensionamento
                dell&amp;#39;immagine in input preveder&amp;agrave; dunque la definizione delle dimensioni di larghezza
                ed altezza desiderate del container, e delle dimensioni di larghezza ed altezza
                desiderate dell&amp;#39;immagine ridimensionata, le quali non sempre e non necessariamente
                devono combaciare. Per questo motivo, ho definito quattro membri e relative propriet&amp;agrave;:
                &lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;private int _imageWidth;
private int _imageHeight;
private int _containerWidth;
private int _containerHeight;

public int Width
{
    get { return _imageWidth; }
    set { _imageWidth = value; }
}
public int Height
{
    get { return _imageHeight; }
    set { _imageHeight = value; }
}
public int ContainerWidth
{
    get { return _containerWidth; }
    set { _containerWidth = value; }
}
public int ContainerHeight
{
    get { return _containerHeight; }
    set { _containerHeight = value; }
}
         &lt;/pre&gt;
&lt;p&gt;
                    Il modo in cui queste quattro dimensioni interagiscono tra di loro &amp;egrave; definito dall&amp;#39;enumerazione&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; 
public enum ScaleMode
{
    FitContainer,
    FitImage,
    FitAuto,
    NoFit
}
&lt;/pre&gt;
&lt;p&gt;
                    dove:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FitContainer&lt;/strong&gt;: forza il ridimensionamento in modo da adeguarsi alle dimensioni
                        specificate per il contenitore. L&amp;#39;immagine di output avr&amp;agrave; le dimensioni specificate
                        per il contenitore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FitImage&lt;/strong&gt;: effettua il ridimensionamento in base alle dimensioni specificate
                        per imageWidth e imageHeight, forzando il contenitore ad adeguarsi a queste dimensioni&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FitAuto&lt;/strong&gt;: esegue un ridimensionamento calcolando in automatico le dimensioni
                        dell&amp;#39;immagine risultante all&amp;#39;interno del contenitore. L&amp;#39;immagine di output avr&amp;agrave;
                        le dimensioni specificate per il contenitore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NoFit&lt;/strong&gt;: non adegua il ridimensionamento al contenitore. Esegue il ridimensionamento
                        sull&amp;#39;immagine in base alle dimensioni specificate, effettuando un taglio dell&amp;#39;immagine
                        qualora questa superi le dimensioni del contenitore. L&amp;#39;immagine di output avr&amp;agrave; le
                        dimensioni specificate per il contenitore. E&amp;#39; possibile gestire la modalit&amp;agrave; di taglio
                        con le strutture seguenti:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; 
public enum Position
{
    TopLeft,
    TopCenter,
    TopRight,
    MiddleLeft,
    MiddleCenter,
    MiddleRight,
    BottomLeft,
    BottomCenter,
    BottomRight,
    Undefined
}

private int _offsetX;
private int _offsetY;
private Position _drawingPosition;

public int OffsetX
{
    get { return _offsetX; }
    set { _offsetX = value; }
}
public int OffsetY
{
    get { return _offsetY; }
    set { _offsetY = value; }
}
public Position DrawingPosition {
    get { return _drawingPosition; }
    set { _drawingPosition = value; }
}
        &lt;/pre&gt;
&lt;p&gt;
                    L&amp;#39;enumerazione &lt;strong&gt;Position&lt;/strong&gt; definisce in che modo l&amp;#39;immagine viene allineata
                    rispetto al container. E se proprio questo non bastasse &amp;egrave; possibile valorizzare
                    le variabili OffsetX e OffsetY che consentono di avere uno scostamento rispetto
                    all&amp;#39;origine (l&amp;#39;angolo superiore sinistro del contenitore).&lt;/p&gt;
&lt;p&gt;
                    A queste modalit&amp;agrave; operative si aggiunge il controllo sul ridimensionamento proporzionale,
                    come si vedr&amp;agrave; in seguito.&lt;/p&gt;
&lt;p&gt;
                    Per quanto riguarda invece la definizione del colore di sfondo, ho definito due
                    variabili, la prima &amp;egrave; il colore vero e proprio, la seconda l&amp;#39;intensit&amp;agrave; del canale
                    alfa/trasparenza. Questi due valori vengono combinati nel metodo GetBackground()
                    che inoltre effettua un controllo sulla coerenza del valore di Alpha, che ammette
                    valori compresi tra 0 e 255.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; 
private Color _backgroundColor;
private int _alpha;

public Color BackgroundColor
{
    get { return _backgroundColor; }
    set { _backgroundColor = value; }
}
public int Alpha
{
    get { return _alpha; }
    set { _alpha = value; }
}

private SolidBrush GetBackground()
{
    int alphaCheck = 255;
    if (_alpha &amp;lt; 0)
        alphaCheck = 0;
    else if (_alpha &amp;gt; 255)
        alphaCheck = 255;
    else
        alphaCheck = _alpha;
    return new SolidBrush(Color.FromArgb(alphaCheck, _backgroundColor));
}
            &lt;/pre&gt;
&lt;p&gt;
                    Vediamo ora come utilizzare il metodo DrawImage, come suggerito in msdn.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; 
public Image Resize(Image image)
{
    // Temp variables
    int newContainerWidth = _containerWidth;
    int newContainerHeight = _containerHeight;
    int newImageWidth = _imageWidth;
    int newImageHeight = _imageHeight;
    int newPositionX = 0;
    int newPositionY = 0;

    GetNewSizes(image, ref newContainerWidth, ref newContainerHeight, ref newImageWidth, ref newImageHeight);
    GetPositions(ref newPositionX, ref newPositionY, newContainerWidth, newContainerHeight, newImageWidth, newImageHeight);

    Bitmap retObj = new Bitmap(newContainerWidth, newContainerHeight);
    retObj.SetResolution(_horizontalResolution, _verticalResolution);

    Graphics g = Graphics.FromImage(retObj);
    g.CompositingMode = _compositingMode;
    g.CompositingQuality = _compositingQuality;
    g.SmoothingMode = _smoothing;
    g.InterpolationMode = _interpolation;
    
    g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
    g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
    g.Dispose();
    return (Image)retObj;
}
        &lt;/pre&gt;
&lt;p&gt;
                    Come si osserva dal codice, vengono definite una serie di variabili temporanee che
                    saranno popolate successivamente da due metodi di supporto che vengono richiamati
                    per effettuare i dovuti controlli sulle dimensioni del container e dell&amp;#39;immagine
                    e definire quindi i valori finali che saranno utilizzati durante il processo di
                    resizing dell&amp;#39;immagine.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;private void GetProportionalSizes(Image image, ref int imageWidth, ref int imageHeight)
{
    bool exceedWidth = image.Width &amp;gt; imageWidth ? true : false;
    bool exceedHeight = image.Height &amp;gt; imageHeight ? true : false;

    if (exceedWidth &amp;amp; exceedHeight)
    {
        int horizontalSurplus = image.Width - _imageWidth;
        int verticalSurplus = image.Height - _imageHeight;

        if (horizontalSurplus &amp;gt; verticalSurplus)
        {
            imageWidth = _imageWidth;
            imageHeight = imageWidth * image.Height / image.Width;
        }
        else
        {
            imageHeight = _imageHeight;
            imageWidth = imageHeight * image.Width / image.Height;
        }
    }
    else
    {
        if (exceedWidth)
        {
            imageWidth = _imageWidth;
            imageHeight = imageWidth * image.Height / image.Width;
        }
        else
        {
            imageHeight = _imageHeight;
            imageWidth = imageHeight * image.Width / image.Height;
        }
    }
}
        &lt;/pre&gt;
&lt;p&gt;
                    Il metodo GetProportionalSizes() calcola le dimensioni finali dell&amp;#39;immagine in modo
                    da effettuare un ridimensionamento proporzionale ed evitare cos&amp;igrave; il fastidioso effetto
                    di stretching delle immagini. Nella serie di if-else innestate viene eseguito un
                    controllo sulla coerenza della proporzioni in base alle dimensioni dell&amp;#39;immagine
                    originale e delle dimensioni desiderate.&lt;/p&gt;
&lt;p&gt;
                Infatti il primo controllo si occupa di verificare quale delle due dimensioni (orizzontale
                o verticale) richieste eccede rispetto alla dimensione dell&amp;#39;immagine originale.
                Se entrambe eccedono, viene verificata quale delle due dimensioni eccede maggiormente
                di modo che il calcolo proporzionale venga fatto su questa. Il discorso &amp;egrave; analogo
                qualora solo una delle due dimensioni ecceda rispetto alle dimensioni dell&amp;#39;immagine
                originale. Il terzo caso, non contemplato nel corpo del metodo, &amp;egrave; il caso in cui
                nessuna delle due dimensioni richieste per il ridimensionamento ecceda le dimensioni
                originali: in questo caso le dimensioni richieste sono superiori a quella dell&amp;#39;immagine
                originale, assumendo l&amp;#39;assenza di ridimensionamento, ed evitando quindi il calcolo
                delle dimensioni proporzionali.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; private void CheckContainerSizes(ref int imageWidth, ref int imageHeight)
{
    bool exceedWidth = imageWidth &amp;gt; _containerWidth ? true : false;
    bool exceedHeight = imageHeight &amp;gt; _containerHeight ? true : false;

    if (exceedWidth &amp;amp; exceedHeight)
    {
        int horizontalSurplus = imageWidth - _containerWidth;
        int verticalSurplus = imageHeight - _containerHeight;

        if (horizontalSurplus &amp;gt; verticalSurplus)
        {
            imageWidth = _containerWidth;
            imageHeight = imageWidth * _containerHeight / _containerWidth;
        }
        else
        {
            imageHeight = _containerHeight;
            imageWidth = imageHeight * _containerWidth / _containerHeight;
        }
    }
    else
    {
        if (exceedWidth)
        {
            imageWidth = _containerWidth;
            imageHeight = imageWidth * _containerHeight / _containerWidth;
        }
        else
        {
            imageHeight = _containerHeight;
            imageWidth = imageHeight * _containerWidth / _containerHeight;
        }
    }

    // Change required size for auto fit
    _imageWidth = imageWidth;
    _imageHeight = imageHeight;
}        
        &lt;/pre&gt;
&lt;p&gt;
                Il metodo CheckContainerSizes() viene richiamato nel solo caso in cui la modalit&amp;agrave;
                operativa scelta sia FitAuto, ovvero quando viene richiesto che l&amp;#39;immagine venga
                ridimensionata nel rispetto delle dimensioni del container, senza andare oltre queste.
                Leggendo il corpo di questo metodo, si nota che &amp;egrave; praticamente identico al corpo
                del metodo GetProportionalSizes(), ma ha una differenza importante: oltre ad effettuare
                le verifiche del caso, &amp;egrave; in grado di reimpostare le dimensioni di ridimensionamento
                richieste affinch&amp;egrave; soddisfino il criterio operativo scelto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;public void Save(Image image, ImageFormat format, string outputFile)
{
    if (format == ImageFormat.Jpeg)
    {
        ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, _jpegCompression);
        image.Save(outputFile, info[1], encoderParams);
    }
    else
    {
        image.Save(outputFile, format);
    }
}
&lt;/pre&gt;
&lt;p&gt;
                Il metodo Save() consente di salvare su filesystem l&amp;#39;immagine precedentemente ridimensionata
                (o qualunque altra immagine precedentemente istanziata, visto che tra i parametri
                di input c&amp;#39;&amp;egrave; &amp;quot;image&amp;quot;).&lt;br /&gt;
                Si nota per&amp;ograve; che nel caso venga richiesto di salvare in formato Jpeg, &amp;egrave; possibile
                controllare il grado di compressione dell&amp;#39;immagine jpeg risultante, semplicemente
                instanziando e valorizzando l&amp;#39;oggetto &lt;strong&gt;EncoderParameters&lt;/strong&gt; e passandolo in input
                ad uno specifico overload del metodo Save() dell&amp;#39;oggetto Image.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
            Tra i vari membri presenti, opportunamente mappati su propriet&amp;agrave;, ne spiccano cinque
            che consentono di avere un controllo dell&amp;#39;output piuttosto avanzato:
            &lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;private InterpolationMode _interpolation;
private CompositingMode _compositingMode;
private CompositingQuality _compositingQuality;
private SmoothingMode _smoothing;
private PixelOffsetMode _pixelOffsetMode;

public InterpolationMode Interpolation
{
    get { return _interpolation; }
    set { _interpolation = value; }
}
public CompositingMode CompositingMode
{
    get { return _compositingMode; }
    set { _compositingMode = value; }
}
public CompositingQuality CompositingQuality
{
    get { return _compositingQuality; }
    set { _compositingQuality = value; }
}
public SmoothingMode Smoothing
{
    get { return _smoothing; }
    set { _smoothing = value; }
}
public PixelOffsetMode PixelOffset
{
    get { return _pixelOffsetMode; }
    set { _pixelOffsetMode = value; }
}
        &lt;/pre&gt;
&lt;h3&gt;
                InterpolationMode&lt;/h3&gt;
&lt;p&gt;
                L&amp;#39;InterpolationMode &amp;egrave;, in questo contesto, di importanza vitale. Specifica infatti
                &amp;#39;algoritmo utilizzato quando le immagini vengono scalate o ruotate. Questi le possibili
                scelte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica la modalit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low&lt;/strong&gt;: Specifica un&amp;#39;interpolazione di bassa qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High&lt;/strong&gt;: Specifica un&amp;#39;interpolazione di elevata qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilinear&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bilineare. Non viene effettuata alcuna
                    operazione di prefiltraggio. Questa modalit&amp;agrave; non &amp;egrave; adatta per la compattazione di
                    un&amp;#39;immagine al di sotto del 50% delle dimensioni originali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bicubic&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bicubica. Non viene effettuata alcuna
                    operazione di prefiltraggio. Questa modalit&amp;agrave; non &amp;egrave; adatta per la compattazione di
                    un&amp;#39;immagine al di sotto del 25% delle dimensioni originali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NearestNeighbor&lt;/strong&gt;: Specifica l&amp;#39;interpolazione pi&amp;ugrave; simile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQualityBilinear&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bilineare di elevata qualit&amp;agrave;.
                    Viene effettuata un&amp;#39;operazione di prefiltraggio per assicurare una compattazione
                    di elevata qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQualityBicubic&lt;/strong&gt;: Specifica l&amp;#39;interpolazione bicubica di elevata qualit&amp;agrave;.
                    Viene effettuata un&amp;#39;operazione di prefiltraggio per assicurare una compattazione
                    di elevata qualit&amp;agrave;. Questa modalit&amp;agrave; produce le immagini trasformate di qualit&amp;agrave; pi&amp;ugrave;
                    elevata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                CompositingMode&lt;/h3&gt;
&lt;p&gt;
                Il CompositingMode specifica il modo in cui i colori di origine vengono combinati
                con i colori dello sfondo. E&amp;#39; possibile assegnare uno dei due valori:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SourceOver&lt;/strong&gt;: quando viene eseguito il rendering di un colore, tale colore
                    viene miscelato con il colore dello sfondo. La miscela di colori viene determinata
                    dal componente alpha del colore di cui viene eseguito il rendering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SourceCopy&lt;/strong&gt;: quando viene eseguito il rendering di un colore, tale colore
                    sovrascrive il colore dello sfondo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                CompositingQuality&lt;/h3&gt;
&lt;p&gt;
                La CompositingQuality specifica il livello di qualit&amp;agrave; da utilizzare durante la composizione.
                Questi sono i valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: qualit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: alta velocit&amp;agrave;, bassa qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: composizione di elevata qualit&amp;agrave; e ridotta velocit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GammaCorrected&lt;/strong&gt;: viene utilizzata la correzione gamma.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AssumeLinear&lt;/strong&gt;: vengono assunti i valori lineari.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                SmoothingMode&lt;/h3&gt;
&lt;p&gt;
                Lo SmoothingMode specifica se e come viene applicato l&amp;#39;anti-aliasing. Anche i questo
                caso abbiamo una serie di valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: Specifica il rendering con antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt;: Specifica l&amp;#39;assenza di antialias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AntiAlias&lt;/strong&gt;: Specifica il rendering con antialias.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                PixelOffsetMode&lt;/h3&gt;
&lt;p&gt;
                Il PixelOffsetMode specifica la modalit&amp;agrave; di offset dei pixel durante l&amp;#39;esecuzione
                del rendering, in modo da controllare la qualit&amp;agrave; del rendering finale. Questi i
                valori ammissibili:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: Specifica la modalit&amp;agrave; predefinita.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighSpeed&lt;/strong&gt;: Specifica un rendering di elevata velocit&amp;agrave; e ridotta qualit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HighQuality&lt;/strong&gt;: Specifica un rendering di elevata qualit&amp;agrave; e ridotta velocit&amp;agrave;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt;: Specifica l&amp;#39;assenza di offset di pixel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Half&lt;/strong&gt;: Specifica l&amp;#39;offset dei pixel in base a unit&amp;agrave; - .5, sia in senso orizzontale
                    che verticale, per ottenere un anti-aliasing di elevata velocit&amp;agrave;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
&lt;/pre&gt;
&lt;p&gt;
                Definiti tutti i parametri di disegno ed effettuati i calcoli sul ridimensionamento,
                sono le due chiamate finali a generare l&amp;#39;immagine di output. Nella prima, il metodo
                FillRectangle, in uno dei suoi overload (2), disegna il livello di sfondo. Su di
                questo, la chiamata successiva, DrawImage, anch&amp;#39;essa in uno dei suoi overload (3),
                disegna l&amp;#39;immagine ridimensionata.&lt;/p&gt;
&lt;h3&gt;Il codice sorgente&lt;/h3&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt; 
#region Using directives
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
#endregion

namespace DotNetCampania.Imager
{
    public class ImageProcessor
    {
        #region Enums
        public enum ScaleMode
        {
            FitContainer,
            FitImage,
            FitAuto,
            NoFit
        }

        public enum Position
        {
            TopLeft,
            TopCenter,
            TopRight,
            MiddleLeft,
            MiddleCenter,
            MiddleRight,
            BottomLeft,
            BottomCenter,
            BottomRight,
            Undefined
        }
        #endregion

        #region Members
        private int _imageWidth;
        private int _imageHeight;
        private int _containerWidth;
        private int _containerHeight;
        private ScaleMode _scale;
        private Position _drawingPosition;
        private bool _proportional;
        private InterpolationMode _interpolation;
        private CompositingMode _compositingMode;
        private CompositingQuality _compositingQuality;
        private SmoothingMode _smoothing;
        private PixelOffsetMode _pixelOffsetMode;
        private Color _backgroundColor;
        private int _alpha;

        private int _offsetX;
        private int _offsetY;

        private ImageFormat _outputImageFormat;
        private long _jpegCompression;
        private float _horizontalResolution;
        private float _verticalResolution;
        #endregion

        #region Properties
        public int Width
        {
            get { return _imageWidth; }
            set { _imageWidth = value; }
        }
        public int Height
        {
            get { return _imageHeight; }
            set { _imageHeight = value; }
        }
        public int ContainerWidth
        {
            get { return _containerWidth; }
            set { _containerWidth = value; }
        }
        public int ContainerHeight
        {
            get { return _containerHeight; }
            set { _containerHeight = value; }
        }
        public Position DrawingPosition
        {
            get { return _drawingPosition; }
            set { _drawingPosition = value; }
        }
        public bool Proportional
        {
            get { return _proportional; }
            set { _proportional = value; }
        }
        public InterpolationMode Interpolation
        {
            get { return _interpolation; }
            set { _interpolation = value; }
        }
        public CompositingMode CompositingMode
        {
            get { return _compositingMode; }
            set { _compositingMode = value; }
        }
        public CompositingQuality CompositingQuality
        {
            get { return _compositingQuality; }
            set { _compositingQuality = value; }
        }
        public SmoothingMode Smoothing
        {
            get { return _smoothing; }
            set { _smoothing = value; }
        }
        public PixelOffsetMode PixelOffset
        {
            get { return _pixelOffsetMode; }
            set { _pixelOffsetMode = value; }
        }
        public Color BackgroundColor
        {
            get { return _backgroundColor; }
            set { _backgroundColor = value; }
        }
        public int Alpha
        {
            get { return _alpha; }
            set { _alpha = value; }
        }
        public int OffsetX
        {
            get { return _offsetX; }
            set { _offsetX = value; }
        }
        public int OffsetY
        {
            get { return _offsetY; }
            set { _offsetY = value; }
        }
        public ImageFormat OutputImageFormat
        {
            get { return this._outputImageFormat; }
            set { _outputImageFormat = value; }
        }
        public long JPEGCompression
        {
            get { return _jpegCompression; }
            set { _jpegCompression = value; }
        }
        public float HorizontalResolution
        {
            get { return _horizontalResolution; }
            set { _horizontalResolution = value; }
        }
        public float VerticalResolution
        {
            get { return _verticalResolution; }
            set { _verticalResolution = value; }
        }
        public ScaleMode Scale
        {
            get { return _scale; }
            set { _scale = value; }
        }
        #endregion

        #region Constructor(s)
        public ImageProcessor()
        {
            _imageWidth = default(int);
            _imageHeight = default(int);
            _containerWidth = default(int);
            _containerHeight = default(int);
            _drawingPosition = Position.Undefined;
            _interpolation = InterpolationMode.HighQualityBicubic;
            _compositingMode = CompositingMode.SourceOver;
            _compositingQuality = CompositingQuality.HighQuality;
            _smoothing = SmoothingMode.HighQuality;
            _pixelOffsetMode = PixelOffsetMode.HighQuality;

            _proportional = true;
            _alpha = 255;
            _backgroundColor = Color.White;

            _offsetX = 0;
            _offsetY = 0;
            _scale = ScaleMode.FitAuto;

            _outputImageFormat = ImageFormat.Jpeg;
            _jpegCompression = 80L;
            _horizontalResolution = 72f;
            _verticalResolution = 72f;
        }
        #endregion

        #region Public methods
        public Image Resize(Image image)
        {
            // Temp variables
            int newContainerWidth = _containerWidth;
            int newContainerHeight = _containerHeight;
            int newImageWidth = _imageWidth;
            int newImageHeight = _imageHeight;
            int newPositionX = 0;
            int newPositionY = 0;

            GetNewSizes(image, ref newContainerWidth, ref newContainerHeight, ref newImageWidth, ref newImageHeight);
            GetPositions(ref newPositionX, ref newPositionY, newContainerWidth, newContainerHeight, newImageWidth, newImageHeight);

            Bitmap retObj = new Bitmap(newContainerWidth, newContainerHeight);
            retObj.SetResolution(_horizontalResolution, _verticalResolution);

            Graphics g = Graphics.FromImage(retObj);
            g.CompositingMode = _compositingMode;
            g.CompositingQuality = _compositingQuality;
            g.SmoothingMode = _smoothing;
            g.InterpolationMode = _interpolation;
            g.PixelOffsetMode = _pixelOffsetMode;
            
            g.FillRectangle(GetBackground(), 0f, 0f, newContainerWidth, newContainerHeight);
            g.DrawImage(image, newPositionX + _offsetX, newPositionY + _offsetY, newImageWidth, newImageHeight);
            g.Dispose();
            return (Image)retObj;
        }

        public void Save(Image image, ImageFormat format, string outputFile)
        {
            if (format == ImageFormat.Jpeg)
            {
                ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
                EncoderParameters encoderParams = new EncoderParameters(1);
                encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, _jpegCompression);
                image.Save(outputFile, info[1], encoderParams);
            }
            else
            {
                image.Save(outputFile, format);
            }
        }
        #endregion

        #region Private support methods
        private void GetNewSizes(Image image, ref int containerWidth, ref int containerHeight, ref int imageWidth, ref int imageHeight)
        {
            switch (_scale)
            {
                case ScaleMode.NoFit:
                    if (_proportional)
                    {
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    }
                    break;
                case ScaleMode.FitAuto:
                    CheckContainerSizes(ref imageWidth, ref imageHeight); 
                    if (_proportional)
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    break;
                case ScaleMode.FitContainer:
                    imageWidth = containerWidth;
                    imageHeight = containerHeight;
                    break;
                case ScaleMode.FitImage:
                    if (_proportional)
                        GetProportionalSizes(image, ref  imageWidth, ref  imageHeight);
                    containerWidth = imageWidth;
                    containerHeight = imageHeight;
                    break;
            }
        }

        private void GetPositions(ref int positionX, ref int positionY, int containerWidth, int containerHeight, int imageWidth, int imageHeight) {
            switch (_drawingPosition) {
                case Position.BottomCenter:
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));                    
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.BottomLeft: 
                    positionX = 0;
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.BottomRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = containerHeight - imageHeight;
                    break;
                case Position.MiddleCenter: 
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.MiddleLeft:
                    positionX = 0;
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.MiddleRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = (int)((containerHeight / 2) - (imageHeight / 2));
                    break;
                case Position.TopCenter: 
                    positionX = (int)((containerWidth / 2) - (imageWidth / 2));
                    positionY = 0;
                    break;
                case Position.TopLeft:
                    positionX = 0;
                    positionY = 0;
                    break;
                case Position.TopRight: 
                    positionX = containerWidth - imageWidth;
                    positionY = 0;
                    break;
            }
        }

        private void CheckContainerSizes(ref int imageWidth, ref int imageHeight)
        {
            bool exceedWidth = imageWidth &amp;gt; _containerWidth ? true : false;
            bool exceedHeight = imageHeight &amp;gt; _containerHeight ? true : false;

            if (exceedWidth &amp;amp; exceedHeight)
            {
                int horizontalSurplus = imageWidth - _containerWidth;
                int verticalSurplus = imageHeight - _containerHeight;

                if (horizontalSurplus &amp;gt; verticalSurplus)
                {
                    imageWidth = _containerWidth;
                    imageHeight = imageWidth * _containerHeight / _containerWidth;
                }
                else
                {
                    imageHeight = _containerHeight;
                    imageWidth = imageHeight * _containerWidth / _containerHeight;
                }
            }
            else
            {
                if (exceedWidth)
                {
                    imageWidth = _containerWidth;
                    imageHeight = imageWidth * _containerHeight / _containerWidth;
                }
                else
                {
                    imageHeight = _containerHeight;
                    imageWidth = imageHeight * _containerWidth / _containerHeight;
                }
            }

            // Change required size for auto fit
            _imageWidth = imageWidth;
            _imageHeight = imageHeight;
        }

        private void GetProportionalSizes(Image image, ref int imageWidth, ref int imageHeight)
        {
            bool exceedWidth = image.Width &amp;gt; imageWidth ? true : false;
            bool exceedHeight = image.Height &amp;gt; imageHeight ? true : false;

            if (exceedWidth &amp;amp; exceedHeight)
            {
                int horizontalSurplus = image.Width - _imageWidth;
                int verticalSurplus = image.Height - _imageHeight;

                if (horizontalSurplus &amp;gt; verticalSurplus)
                {
                    imageWidth = _imageWidth;
                    imageHeight = imageWidth * image.Height / image.Width;
                }
                else
                {
                    imageHeight = _imageHeight;
                    imageWidth = imageHeight * image.Width / image.Height;
                }
            }
            else
            {
                if (exceedWidth)
                {
                    imageWidth = _imageWidth;
                    imageHeight = imageWidth * image.Height / image.Width;
                }
                else
                {
                    imageHeight = _imageHeight;
                    imageWidth = imageHeight * image.Width / image.Height;
                }
            }
        }

        private SolidBrush GetBackground()
        {
            int alphaCheck = 255;
            if (_alpha &amp;lt; 0)
                alphaCheck = 0;
            else if (_alpha &amp;gt; 255)
                alphaCheck = 255;
            else
                alphaCheck = _alpha;
            return new SolidBrush(Color.FromArgb(alphaCheck, _backgroundColor));
        }
        #endregion
    }
}
        &lt;/pre&gt;
&lt;h3&gt;
                Download&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/wikis/articoli/add.aspx/Downloads/DotNetCampania.Imager.zip"&gt;&lt;/a&gt;&lt;a href="http://www.gianlucaesposito.it/dotnetcampania/downloads/DotNetCampania.Imager.zip"&gt;Download library (5 KB)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gianlucaesposito.it/dotnetcampania/downloads/DotNetCampania.Imager.SampleWeb.zip"&gt;Download web sample (130                     KB)&lt;/a&gt;&lt;a href="/wikis/articoli/add.aspx/Downloads/DotNetCampania.Imager.SampleWeb.zip"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
                Riferimenti&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Riferimento a .NET Framework - Metodo Image.GetThumbnailImage [&lt;a href="http://msdn.microsoft.com/it-it/library/system.drawing.image.getthumbnailimage.aspx"&gt;http://msdn.microsoft.com/it-it/library/system.drawing.image.getthumbnailimage.aspx&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;Graphics.FillRectangle Method (Brush, Rectangle) [&lt;a href="http://msdn.microsoft.com/en-us/library/yysstebh.aspx"&gt;http://msdn.microsoft.com/en-us/library/yysstebh.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Metodo Graphics.DrawImage (Image, Int32, Int32, Int32, Int32) [&lt;a href="http://msdn.microsoft.com/it-it/library/dbsak4dc(v=VS.80).aspx"&gt;http://msdn.microsoft.com/it-it/library/dbsak4dc(v=VS.80).aspx&lt;/a&gt;]&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/0.aspx</link><pubDate>Thu, 08 Apr 2010 20:05:05 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:25</guid><dc:creator>ilNero</dc:creator><description>Current revision posted to Articoli by ilNero on 08/04/2010 22:05:05&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;@&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;import&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;url&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;http://www.gianlucaesposito.it/dotnetcampania/styles/shCore.css&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;@&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;import&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;url&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;http://www.gianlucaesposito.it/dotnetcampania/styles/shThemeDefault.css&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="overflow:auto;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi :)&lt;/p&gt;
&lt;p&gt;
&lt;script type="text/javascript"&gt;
&amp;lt;!--
        SyntaxHighlighter.all();
// --&amp;gt;
&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/9.aspx</link><pubDate>Thu, 08 Apr 2010 20:04:27 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:74</guid><dc:creator>ilNero</dc:creator><description>Revision 9 posted to Articoli by ilNero on 08/04/2010 22:04:27&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;link&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;href=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shCore.css&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;type=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;media=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;screen&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;rel=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;link&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;href=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shThemeDefault.css&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;lt;style&lt;/span&gt; type=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;media=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;screen&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;rel=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;/&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;quot;text/css&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;@&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;import&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;url&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.gianlucaesposito.it/dotnetcampania/styles/shCore.css&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;@&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;import&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;url&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;http://www.gianlucaesposito.it/dotnetcampania/styles/shThemeDefault.css&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shCore.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shBrushCSharp.js"&gt;&lt;/script&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi :)&lt;/p&gt;
&lt;p&gt;
&lt;script type="text/javascript"&gt;
&amp;lt;!--
        SyntaxHighlighter.all();
// --&amp;gt;
&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/8.aspx</link><pubDate>Thu, 08 Apr 2010 20:02:31 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:73</guid><dc:creator>ilNero</dc:creator><description>Revision 8 posted to Articoli by ilNero on 08/04/2010 22:02:31&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&amp;lt;link href=&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shCore.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; rel=&amp;quot;Stylesheet&amp;quot; /&amp;gt;
&amp;lt;link href=&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shThemeDefault.css&amp;quot; type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; rel=&amp;quot;Stylesheet&amp;quot; /&amp;gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shCore.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shBrushCSharp.js"&gt;&lt;/script&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi :)&lt;/p&gt;
&lt;p&gt;
&lt;script type="text/javascript"&gt;
&amp;lt;!--
        SyntaxHighlighter.all();
// --&amp;gt;
&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/7.aspx</link><pubDate>Thu, 08 Apr 2010 19:56:44 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:72</guid><dc:creator>ilNero</dc:creator><description>Revision 7 posted to Articoli by ilNero on 08/04/2010 21:56:44&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;link&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;href=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shCore.css&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;type=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;media=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;screen&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;rel=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;&amp;lt;link&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;href=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;http://www.gianlucaesposito.it/dotnetcampania/styles/shThemeDefault.css&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;type=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;media=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;screen&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;rel=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shCore.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://www.gianlucaesposito.it/dotnetcampania/js/shBrushCSharp.js"&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi :)&lt;/p&gt;
&lt;p&gt;
&lt;script type="text/javascript"&gt;&lt;span style="background: SpringGreen;"&gt;&amp;lt;!--&lt;/span&gt;
        &lt;span style="background: SpringGreen;"&gt;SyntaxHighlighter.all()&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;;&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/6.aspx</link><pubDate>Thu, 08 Apr 2010 18:35:09 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:71</guid><dc:creator>ilNero</dc:creator><description>Revision 6 posted to Articoli by ilNero on 08/04/2010 20:35:09&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://crockford.com/javascript/jsmin" target="_blank"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dojotoolkit.org/docs/shrinksafe" target="_blank"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dean.edwards.name/packer/" target="_blank"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/compressor/" target="_blank"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a href="http://yuicompressor.codeplex.com/" target="_blank"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre style="font-size:11px;overflow:auto;" class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi &lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;mentre&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;mi&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;godo&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;il&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;fresco&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;di&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;questo&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;temporalone&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;estivo&lt;/span&gt; :)&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/5.aspx</link><pubDate>Thu, 08 Apr 2010 11:03:02 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:70</guid><dc:creator>ilNero</dc:creator><description>Revision 5 posted to Articoli by ilNero on 08/04/2010 13:03:02&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="font-size:11px;overflow:auto;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi, mentre mi godo il fresco di questo temporalone estivo :)&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/4.aspx</link><pubDate>Thu, 08 Apr 2010 11:02:08 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:69</guid><dc:creator>ilNero</dc:creator><description>Revision 4 posted to Articoli by ilNero on 08/04/2010 13:02:08&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://crockford.com/javascript/jsmin" target="_blank"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dojotoolkit.org/docs/shrinksafe" target="_blank"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dean.edwards.name/packer/" target="_blank"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/compressor/" target="_blank"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a href="http://yuicompressor.codeplex.com/" target="_blank"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre style="font-size:11px;" class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi, mentre mi godo il fresco di questo temporalone estivo :)&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/3.aspx</link><pubDate>Thu, 08 Apr 2010 11:01:46 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:68</guid><dc:creator>ilNero</dc:creator><description>Revision 3 posted to Articoli by ilNero on 08/04/2010 13:01:46&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;" style="font-size:10px;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi, mentre mi godo il fresco di questo temporalone estivo :)&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/2.aspx</link><pubDate>Thu, 08 Apr 2010 10:57:56 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:67</guid><dc:creator>ilNero</dc:creator><description>Revision 2 posted to Articoli by ilNero on 08/04/2010 12:57:56&lt;br /&gt;
&lt;h2&gt;CSS e Javascript minification con ASP.NET&lt;/h2&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://crockford.com/javascript/jsmin" target="_blank"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dojotoolkit.org/docs/shrinksafe" target="_blank"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dean.edwards.name/packer/" target="_blank"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/compressor/" target="_blank"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a href="http://yuicompressor.codeplex.com/" target="_blank"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Yahoo.Yui.Compressor;

namespace DotNetCampania.Web.Handlers
{
	public class YUICompressor : IHttpHandler
	{
		private const int DEFAULT_CACHE_DURATION = 1440;
		private bool useCache = true;
		private bool noCompression = false;

		public bool IsReusable { get { return true; } }
		
		public void ProcessRequest(HttpContext context)
		{
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
			bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
			context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
			string filePath = GetFilePath();
			string fileExtension = Path.GetExtension(filePath);
			if (File.Exists(filePath))
			{
				context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
				switch (fileExtension)
				{
					case &amp;quot;.css&amp;quot;:
						context.Response.ContentType = &amp;quot;text/css&amp;quot;;
						if (!this.noCompression) 
							CompressCSS(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					case &amp;quot;.js&amp;quot; :
						context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
						if (!this.noCompression)
							CompressJavaScript(filePath);
						else
							HttpContext.Current.Response.WriteFile(filePath);
						break;
					default :
						context.Response.StatusCode = 404;
						break;
				}
			}
			else
			{
				context.Response.StatusCode = 404;
			}
			context.Response.Flush();
			context.Response.End();
		}
		
		private string GetFilePath()
		{
			string filePath = HttpContext.Current.Request.Url.AbsolutePath;
			filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
			filePath = HttpContext.Current.Server.MapPath(filePath);
			return filePath;
		}

		private void CompressCSS(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = CssCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}

		private void CompressJavaScript(string filePath)
		{
			if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
			{
				HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
				return;
			}
			object fileLock = new object();
			lock (fileLock)
			{
				StreamReader sr = new StreamReader(filePath, true);
				string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
				HttpContext.Current.Response.Write(compressed);
				if (this.useCache)
					HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
				sr.Close();
			}
		}
	}
}
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi, mentre mi godo il fresco di questo temporalone estivo :)&lt;/p&gt;</description></item><item><title>CSS e Javascript minification con ASP.NET</title><link>http://dotnetcampania.org/wikis/articoli/css-e-javascript-minification-con-asp-net/revision/1.aspx</link><pubDate>Thu, 08 Apr 2010 10:57:01 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:66</guid><dc:creator>ilNero</dc:creator><description>Revision 1 posted to Articoli by ilNero on 08/04/2010 12:57:01&lt;br /&gt;
&lt;p&gt;
        Chiunque abbia a che fare con la programmazione web si sar&amp;agrave; reso conto che l&amp;#39;utilizzo
        dei CSS, cos&amp;igrave; come l&amp;#39;utilizzo di framework javascript come jQuery, sia ormai praticamente
        uno standard de-facto.&lt;br /&gt;
        Per quanto riguarda i framework Javascript, questi vengono rilasciati costantemente
        sia in versione &amp;#39;sources&amp;#39; che in versione &amp;#39;minified&amp;#39;, lasciando per&amp;ograve; la scelta del
        minifier da utilizzare esclusivamente ai creatori/mantainer del framework.&lt;br /&gt;
        Purtroppo ho la smania di tenere costantemente tutto sotto controllo, ragion per
        cui negli ultimi mesi ho cominciato a studiare i vari software che operano la &lt;em&gt;minification&lt;/em&gt;.&lt;br /&gt;
        Sul web se ne trovano diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://crockford.com/javascript/jsmin"&gt;JSMIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dojotoolkit.org/docs/shrinksafe"&gt;the Dojo compressor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://dean.edwards.name/packer/"&gt;Dean Edwards&amp;#39; Packer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
        Su tutti, la mia attenzione si &amp;egrave; focalizzata molto su &lt;strong&gt;YUI Compressor&lt;/strong&gt;, che
        a detta dei suoi sviluppatori&lt;/p&gt;
&lt;p&gt;
        &lt;em&gt;The YUI Compressor is JavaScript minifier designed to be 100% safe and yield a higher
            compression ratio than most other tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
        Dopo diversi test e diverse rilasci in produzione di fogli di stile e codice javascript
        minimizzato con questo tool, posso affermare di non aver mai riscontrato incompatibilit&amp;agrave;
        o problemi di sorta.&lt;br /&gt;
        L&amp;#39;unico grande difetto di questo tool &amp;egrave; il suo essere un tool da riga di comando,
        il che si traduce in una serie di step da eseguire in pre-produzione.&lt;br /&gt;
        Se da un lato, le modifiche a queste tipologie di file, sono rare, una volta raggiunta
        la fase di rilascio, &amp;egrave; pur vero che piccole migliorie vengono sempre apportate dopo
        il rilascio di una applicazione web.&lt;br /&gt;
        Stanco quindi di aprire frequentemente il prompt dei comandi, ho cercato una soluzione
        da inglobare direttamente nei progetti web, che riuscisse a minimizzare &lt;em&gt;on-the-fly&lt;/em&gt;
        i CSS e i JS.&lt;/p&gt;
&lt;p&gt;
        Animato dall&amp;#39;esigenza e dalla scoperta di questo porting per .NET &lt;a target="_blank" href="http://yuicompressor.codeplex.com/"&gt;YUI Compresso for .NET&lt;/a&gt;, ho buttato gi&amp;ugrave; questo semplice HttpHandler,
        capace di riconoscere le richieste giuste e rispondere con la versione minimizzata
        del file richiesto.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;        using System;
        using System.Collections.Generic;
        using System.IO;
        using System.Linq;
        using System.Text;
        using System.Web;
        using Yahoo.Yui.Compressor;

        namespace DotNetCampania.Web.Handlers
        {
            public class YUICompressor : IHttpHandler
            {
                private const int DEFAULT_CACHE_DURATION = 1440;
                private bool useCache = true;
                private bool noCompression = false;

                public bool IsReusable { get { return true; } }
                
                public void ProcessRequest(HttpContext context)
                {
                    bool.TryParse(context.Request.QueryString.Get(&amp;quot;useCache&amp;quot;), out this.useCache);
                    bool.TryParse(context.Request.QueryString.Get(&amp;quot;noCompression&amp;quot;), out this.noCompression);
                    context.Response.ContentType = &amp;quot;text/plain&amp;quot;;
                    string filePath = GetFilePath();
                    string fileExtension = Path.GetExtension(filePath);
                    if (File.Exists(filePath))
                    {
                        context.Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &amp;quot;filename=&amp;quot; + Path.GetFileName(filePath));
                        switch (fileExtension)
                        {
                            case &amp;quot;.css&amp;quot;:
                                context.Response.ContentType = &amp;quot;text/css&amp;quot;;
                                if (!this.noCompression) 
                                    CompressCSS(filePath);
                                else
                                    HttpContext.Current.Response.WriteFile(filePath);
                                break;
                            case &amp;quot;.js&amp;quot; :
                                context.Response.ContentType = &amp;quot;application/x-javascript&amp;quot;;
                                if (!this.noCompression)
                                    CompressJavaScript(filePath);
                                else
                                    HttpContext.Current.Response.WriteFile(filePath);
                                break;
                            default :
                                context.Response.StatusCode = 404;
                                break;
                        }
                    }
                    else
                    {
                        context.Response.StatusCode = 404;
                    }
                    context.Response.Flush();
                    context.Response.End();
                }
                
                private string GetFilePath()
                {
                    string filePath = HttpContext.Current.Request.Url.AbsolutePath;
                    filePath = filePath.TrimEnd(&amp;quot;.axd&amp;quot;.ToCharArray());
                    filePath = HttpContext.Current.Server.MapPath(filePath);
                    return filePath;
                }

                private void CompressCSS(string filePath)
                {
                    if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
                    {
                        HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
                        return;
                    }
                    object fileLock = new object();
                    lock (fileLock)
                    {
                        StreamReader sr = new StreamReader(filePath, true);
                        string compressed = CssCompressor.Compress(sr.ReadToEnd());
                        HttpContext.Current.Response.Write(compressed);
                        if (this.useCache)
                            HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
                        sr.Close();
                    }
                }

                private void CompressJavaScript(string filePath)
                {
                    if (this.useCache &amp;amp; HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()] != null)
                    {
                        HttpContext.Current.Response.Write((string)HttpContext.Current.Cache[HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString()]);
                        return;
                    }
                    object fileLock = new object();
                    lock (fileLock)
                    {
                        StreamReader sr = new StreamReader(filePath, true);
                        string compressed = JavaScriptCompressor.Compress(sr.ReadToEnd());
                        HttpContext.Current.Response.Write(compressed);
                        if (this.useCache)
                            HttpContext.Current.Cache.Add(HttpContext.Current.Request.Url.AbsolutePath.GetHashCode().ToString(), compressed, null, DateTime.MaxValue, new TimeSpan(0, DEFAULT_CACHE_DURATION, 0), System.Web.Caching.CacheItemPriority.Normal, null);
                        sr.Close();
                    }
                }
            }
        }
    &lt;/pre&gt;
&lt;p&gt;
        L&amp;#39;handler va ovviamente mappato nel web.config. Devo per&amp;ograve; fornire una doverosa annotazione:
        nel mio caso ho mappato le estensioni &lt;strong&gt;*.js.axd&lt;/strong&gt; e &lt;strong&gt;*.css.axd&lt;/strong&gt;. Questa
        scelta mi obbliga a dover fare attenzione nelle pagine .aspx o .html che creo, in
        quanto i riferimenti ai fogli di stile ed ai file javascript devono finire con questa
        estensione per essere processati. In un contesto di hosting condiviso (leggi Aruba),
        dove non ho possibilit&amp;agrave; di intervento sulle estensioni mappate in IIS, questa mi
        sembrava la scelta migliore. In contesti di maggior libert&amp;agrave; di mapping delle estensioni
        in IIS, sarebbe bastato mappare le estensioni .css e .js sull&amp;#39;engine di ASP.NET,
        e mappare le stesse estensioni sull&amp;#39;handler.&lt;/p&gt;
&lt;p&gt;
        Come si evince dal codice, l&amp;#39;handler utilizza anche la cache in modo da evitare
        di processare i singoli file ad ogni richiesta, ma solo quando strettamente necessario.&lt;/p&gt;
&lt;p&gt;
        Una ulteriore aggiunta potrebbe essere l&amp;#39;utilizzo di chiavi negli appSettings, in
        modo da controllare l&amp;#39;abilitazione globale dell&amp;#39;handler direttamente da web.config,
        ma lo lascio fare a voi, mentre mi godo il fresco di questo temporalone estivo :)&lt;/p&gt;</description></item><item><title>Progetto GeRi – Parte 3</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-3/revision/0.aspx</link><pubDate>Wed, 07 Apr 2010 18:53:50 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:24</guid><dc:creator>Alessandro Forte</dc:creator><description>Current revision posted to Articoli by Alessandro Forte on 07/04/2010 20:53:50&lt;br /&gt;
&lt;p&gt;
&lt;p&gt;Il terzo articolo di questa miniserie sullo sviluppo di un applicativo 
&amp;ldquo;enterprise&amp;rdquo; verter&amp;agrave; sull&amp;rsquo;architettura dell&amp;rsquo;applicativo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Architecture &amp;ndash; L&amp;rsquo;Architettura &lt;br /&gt;&lt;/strong&gt;GeRi &amp;egrave; una piattaforma 
software che nasce con lo scopo di gestire tutte le attivit&amp;agrave;, dirette e 
indirette, connesse ad una centro assistenza. &lt;br /&gt;Analizziamo di seguito alcune 
scelte di tipo architetturale, prima di passare direttamente alla fase di design 
dell&amp;rsquo;applicativo. &lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;SOA - Service Oriented 
Application&lt;/em&gt;&lt;/strong&gt;. &lt;br /&gt;Come &amp;egrave; stato evidenziato nei precedenti articoli, 
la nostra piattaforma deve essere in grado di &amp;ldquo;agganciarsi&amp;rdquo; a &lt;span style="text-decoration:underline;"&gt;servizi&lt;/span&gt; di 
fornitori esterni per espletare alcune operazioni. &lt;br /&gt;Un esempio su tutti &amp;egrave; la 
necessit&amp;agrave; di inviare messaggi SMS. &lt;br /&gt;Ma oltre ad &lt;span style="text-decoration:underline;"&gt;usufruire di servizi 
esterni&lt;/span&gt;, la nostra piattaforma deve essere anche in grado di &lt;span style="text-decoration:underline;"&gt;erogare 
servizi&lt;/span&gt;, acquisendo e garantendo quindi un certo grado di flessibilit&amp;agrave; con 
il mondo dell&amp;rsquo;integrazione. &lt;br /&gt;Erogare/esporre servizi, significa anche 
permettere facilmente a sistemi esterni (magari realizzati con linguaggi e 
tecnologie differenti) in prima istanza di dialogare con il nostro sistema, e in 
seconda istanza di implementare moduli di integrazione con la nostra 
piattaforma. &lt;br /&gt;Ad esempio non &amp;egrave; da ritenersi rara la possibilit&amp;agrave; di 
&amp;ldquo;integrazione&amp;rdquo; del nostro sistema con sistemi di fatturazione di terze parti. 
&lt;br /&gt;Per questo motivo ritengo valido scegliere un&amp;rsquo;architettura di tipo SOA 
ovvero &amp;ldquo;&lt;strong&gt;Orientata ai Servizi&lt;/strong&gt;&amp;rdquo;. 
&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Architectural View&lt;/em&gt;&lt;/strong&gt; &lt;br /&gt;&lt;a&gt;&lt;img style="float:left;border:0;" height="244" width="126" src="http://www.cis.net.nz/public/diagram_ntier.jpg" align="left" alt="Applicazione N-Tier" border="0" title="diagram_ntier" /&gt;&lt;/a&gt;Avendo ben chiaro il contesto architetturale nel quale 
intendiamo realizzare la nostra applicazione, analizziamo di seguito alcune 
scelte su come organizzare l&amp;rsquo;architettura dell&amp;rsquo;applicativo.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;applicazione sar&amp;agrave; organizzata secondo una classica architettura di tipo 
&lt;strong&gt;N-Tier&lt;/strong&gt;. &lt;br /&gt;Ma cos&amp;rsquo;&amp;egrave; un applicazione N-Tier? &lt;br /&gt;Una 
architettura di tipo N-Tier indica una particolare architettura software che 
prevede la suddivisione del sistema in N diversi livelli (logici e fisici) che 
svolgono funzionalit&amp;agrave; diverse (opzionalmente su nodi diversi della rete). &lt;br /&gt;Ad 
esempio esiste il livello per la gestione dell&amp;rsquo;interfaccia utente 
(&lt;strong&gt;&lt;em&gt;UI Layer&lt;/em&gt;&lt;/strong&gt;), quello per la logica funzionale 
(&lt;em&gt;&lt;strong&gt;Business Layer&lt;/strong&gt;&lt;/em&gt;) e quello per la gestione della 
persistenza dei dati (&lt;em&gt;&lt;strong&gt;Data Access Layer&lt;/strong&gt;&lt;/em&gt;). &lt;br /&gt;In 
questo modo, ciascuno degli N livelli pu&amp;ograve; essere modificato o sostituito 
indipendentemente dagli altri. &lt;br /&gt;Nella maggior parte dei casi, si intende 
anche che i diversi livelli siano distribuiti su 
diversi nodi di una rete anche eterogenea. 
&lt;br /&gt;Questo &amp;egrave; alla base della distinzione tra Layer e Tier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;strong&gt;Layer&lt;/strong&gt; indica un raggruppamento logico delle funzionalit&amp;agrave; 
&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;Tier&lt;/strong&gt; indica un raggruppamento fisico delle funzionalit&amp;agrave; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un esempio tipico di architettura N-Tier, dove N=3, detta appunto 
&lt;i&gt;three-tier&lt;/i&gt; prevede, per esempio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;un Tier di presentazione identificato da un PC dedicato all&amp;#39;interfaccia utente 
grafica (su cui persiste quindi il layer di presentazione o UI Layer) 
&lt;/li&gt;
&lt;li&gt;un Tier di Business Logic indentificato da una workstation o un application 
server per l&amp;rsquo;esecuzione di business logic 
&lt;/li&gt;
&lt;li&gt;un Tier di Database indentificato da un database server o un mainframe per 
la gestione dei dati. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In merito alla nostra applicazione avremo quindi i seguenti 
&lt;strong&gt;Layers&lt;/strong&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Data Access Layer (da ora in poi &lt;strong&gt;DAL&lt;/strong&gt;) &amp;egrave; il livello di 
interazione con la base di dati, dove si effettuano le connessioni e si eseguono 
query di selezione, inserimento, aggiornamento o cancellazione. 
&lt;/li&gt;
&lt;li&gt;Business Layer (da ora in poi &lt;strong&gt;BL&lt;/strong&gt;) &amp;egrave; il livello che ha la 
responsabilit&amp;agrave; di gestire le richieste utente ricevute attraverso l&amp;rsquo;Uil o SL, di 
effettuare il routing di queste richieste agli appropriati elementi di business, 
di processare i risultati dell&amp;#39;elaborazione e ritornare i dati necessari all&amp;rsquo;Uil 
o SL per la successiva presentazione all&amp;#39;utente. 
&lt;/li&gt;
&lt;li&gt;Service Layer (da ora in poi &lt;strong&gt;SL&lt;/strong&gt;) &amp;egrave; il livello che svolge la 
funzione di &amp;ldquo;collante&amp;rdquo; tra il BL e l&amp;rsquo;UiL ed &amp;egrave; caratterizzato da un numero di 
servizi che espongono al &amp;ldquo;mondo esterno&amp;rdquo; le funzionalit&amp;agrave; business. 
&lt;/li&gt;
&lt;li&gt;User Interface Layer (da ora in poi &lt;strong&gt;UiL&lt;/strong&gt;) &amp;egrave; il livello che 
si occupa della presentazione e della logica di interazione con l&amp;#39;utente, 
interagendo con il BL per l&amp;#39;accesso ai servizi richiesti. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Organizzati nei seguenti &lt;strong&gt;Tiers&lt;/strong&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Database Tier, ovvero il livello fisico su cui deployeremo il nostro 
Database. 
&lt;/li&gt;
&lt;li&gt;Application Server Tier, ovvero il livello fisico su cui deployeremo il BL e 
il SL. 
&lt;/li&gt;
&lt;li&gt;Presentation Tier, ovvero il livello fisico su cui deployeremo l&amp;rsquo;interfaccia 
grafica della nostra applicazione.&lt;span style="color:#ff0000;"&gt;&lt;/span&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ritengo concluso il terzo articolo della serie, che &amp;egrave; servito a delineare 
l&amp;rsquo;aspetto architetturale su cui si fonda la soluzione da implementare. &lt;br /&gt;Scopo 
del prossimo articolo sar&amp;agrave; quello di &amp;ldquo;&lt;span style="text-decoration:underline;"&gt;creare gli use cases&lt;/span&gt;&amp;rdquo; e quindi 
&amp;quot;&lt;span style="text-decoration:underline;"&gt;disegnare il nostro Core&lt;/span&gt;&amp;quot;. &lt;br /&gt;Non mi resta quindi che finire con il 
classico : &lt;br /&gt;&lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt; See u in the next 
episode &lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/p&gt;
&lt;p&gt;(Fonte : Alessandro Forte - &lt;a href="http://www.alessandroforte.it/"&gt;http://www.alessandroforte.it/&lt;/a&gt;)&lt;/p&gt;
&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/0.aspx</link><pubDate>Tue, 16 Feb 2010 10:37:01 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:16</guid><dc:creator>Liccardi Antonio</dc:creator><description>Current revision posted to Articoli by Liccardi Antonio on 16/02/2010 11:37:01&lt;br /&gt;
&lt;h2&gt;Starting on Windows Mobile&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;windows&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;mobile&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;guida&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;tutorial&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;articoli&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni, Gesture API. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a target="_blank" href="/wikis/articoli/i-fondamenti-del-net-compact-framework.aspx"&gt;I fondamenti del .Net Compact Framework&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="/wikis/articoli/sviluppo-di-una-semplice-applicazione.aspx"&gt;Sviluppo di una semplice applicazione&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="background: SpringGreen;"&gt;GUI&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Memorizzazione dei file&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;GUI&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Applicazioni Client/Server e HttpRequest&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P/Invoke&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione delle eccezioni&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione della sicurezza&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Globalizzazione e Localizzazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.Net Compact Framework Graphics&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gesture API&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/5.aspx</link><pubDate>Tue, 05 Jan 2010 23:55:00 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:61</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 5 posted to Articoli by Liccardi Antonio on 06/01/2010 00:55:00&lt;br /&gt;
&lt;h2&gt;Starting on Windows Mobile&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile guida tutorial articoli&lt;/div&gt;

&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni, Gesture API. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a target="_blank" href="/wikis/articoli/i-fondamenti-del-net-compact-framework.aspx"&gt;I fondamenti del .Net Compact Framework&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="/wikis/articoli/sviluppo-di-una-semplice-applicazione.aspx"&gt;Sviluppo di una semplice applicazione&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Memorizzazione dei file&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GUI&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Applicazioni Client/Server e HttpRequest&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P/Invoke&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione delle eccezioni&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione della sicurezza&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Globalizzazione e Localizzazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.Net Compact Framework Graphics&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gesture API&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/4.aspx</link><pubDate>Mon, 14 Sep 2009 20:42:35 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:59</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 4 posted to Articoli by Liccardi Antonio on 14/09/2009 22:42:35&lt;br /&gt;
&lt;h2&gt;Starting on Windows Mobile&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile guida tutorial articoli&lt;/div&gt;

&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni, Gesture API. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;[&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;[articoli:I&lt;/span&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="/wikis/articoli/i-fondamenti-del-net-compact-framework.aspx" target="_blank"&gt;&lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; fondamenti del .Net Compact &lt;span style="text-decoration: line-through; color: red;"&gt;Framework|http://dotnetcampania.org/wikis/articoli/i-fondamenti-del-net-compact-framework.aspx]&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;]&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Framework&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sviluppo di una semplice applicazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Memorizzazione dei file&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GUI&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Applicazioni Client/Server e HttpRequest&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P/Invoke&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione delle eccezioni&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione della sicurezza&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Globalizzazione e Localizzazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.Net Compact Framework Graphics&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gesture API&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/3.aspx</link><pubDate>Mon, 14 Sep 2009 20:41:46 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:48</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 3 posted to Articoli by Liccardi Antonio on 14/09/2009 22:41:46&lt;br /&gt;
&lt;h2&gt;Starting on Windows Mobile&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile guida tutorial articoli&lt;/div&gt;

&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni, Gesture API. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;I&lt;/span&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="background: SpringGreen;"&gt;[&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;[articoli:I&lt;/span&gt; fondamenti del .Net Compact &lt;span style="text-decoration: line-through; color: red;"&gt;Framework&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Framework|http://dotnetcampania.org/wikis/articoli/i-fondamenti-del-net-compact-framework.aspx]&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sviluppo di una semplice applicazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Memorizzazione dei file&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GUI&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Applicazioni Client/Server e HttpRequest&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P/Invoke&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione delle eccezioni&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione della sicurezza&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Globalizzazione e Localizzazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.Net Compact Framework Graphics&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gesture API&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/2.aspx</link><pubDate>Wed, 02 Sep 2009 08:33:48 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:47</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 2 posted to Articoli by Liccardi Antonio on 02/09/2009 10:33:48&lt;br /&gt;
&lt;h2&gt;Starting on Windows Mobile&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile guida tutorial articoli&lt;/div&gt;

&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Gesture&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;API&lt;/span&gt;. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;I fondamenti del .Net Compact Framework&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sviluppo di una semplice applicazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Memorizzazione dei file&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GUI&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Applicazioni Client/Server e &lt;span style="text-decoration: line-through; color: red;"&gt;Http&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Request&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;HttpRequest&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P/Invoke&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione delle eccezioni&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gestione della sicurezza&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Globalizzazione e Localizzazione&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.Net Compact Framework Graphics&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gesture API&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Starting on Windows Mobile</title><link>http://dotnetcampania.org/wikis/articoli/starting-on-windows-mobile/revision/1.aspx</link><pubDate>Tue, 01 Sep 2009 16:57:33 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:44</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 1 posted to Articoli by Liccardi Antonio on 01/09/2009 18:57:33&lt;br /&gt;
&lt;p&gt;Si pu&amp;ograve; dire con tutta certezza che ormai le vacanze sono finite. Nonostante la notte immagini ancora il sapore in bocca degli arancini al rag&amp;ugrave;, penso sia arrivato il momento di rimboccarsi le maniche e ricominciare con gli articoli dedicati al mondo di Windows Mobile.&lt;/p&gt;
&lt;p&gt;Nelle prossime settimane pubblicher&amp;ograve; 15 articoli che tratteranno l&amp;rsquo;argomento, con l&amp;rsquo;intento di finire questa prima panoramica orientativamente con l&amp;rsquo;inizio del 2010. Nel corso di questi articoli saranno affrontate tematiche basilari, proprie del .Net Compact Framework, ma anche argomenti abbastanza avanzati, come la persistenza dei dati, le P/Invoke, la localizzazione, la sicurezza e la gestione delle eccezioni. Non mi resta che darvi un elenco degli articoli (suscettibile a variazioni):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;I fondamenti del .Net Compact Framework&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sviluppo di una semplice applicazione&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistenza dei dati con SqlServer Compact Edition&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memorizzazione dei file&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUI&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Applicazioni Client/Server e Http Request&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P/Invoke&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestione delle eccezioni&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestione della sicurezza&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Globalizzazione e Localizzazione&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.Net Compact Framework Graphics&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le novit&amp;agrave; di Windows Mobile 6.5&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strumenti utili allo sviluppatore di applicazioni mobile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widget&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gesture API&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Non ho ancora deciso la modalit&amp;agrave; di pubblicazione degli articoli. Sicuramente per quelli in cui c&amp;rsquo;&amp;egrave; molta teoria, creer&amp;ograve; degli articoli di testo. Per quelli invece in cui occorre vedere da vicino codice e configurazione, penso che il webcast sia pi&amp;ugrave; adatto. &lt;/p&gt;
&lt;p&gt;Non mi resta che dirvi di restare sintonizzati!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enjoy it &amp;amp;&amp;amp; keep coding!&lt;/p&gt;</description></item><item><title>Sviluppo di una semplice applicazione</title><link>http://dotnetcampania.org/wikis/articoli/sviluppo-di-una-semplice-applicazione/revision/0.aspx</link><pubDate>Wed, 06 Jan 2010 11:21:51 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:22</guid><dc:creator>Liccardi Antonio</dc:creator><description>Current revision posted to Articoli by Liccardi Antonio on 06/01/2010 12:21:51&lt;br /&gt;
&lt;h2&gt;Sviluppo di una semplice applicazione&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;windows&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;mobile&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;first&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;app&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;Qualche mese fa ho postato un webcast in cui illustravo come realizzare una semplice applicazione per Windows Mobile. &lt;/p&gt;
&lt;p&gt;&lt;iframe marginwidth="0" width="550" frameborder="0" src="http://www.dotnetcampania.org/webcast/1_HelloWindowsMobile.html" marginheight="0" height="350" style="width:550px;height:350px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intento di questo articolo &amp;egrave; quello di approfondire ci&amp;ograve; che si &amp;egrave; detto nel webcast.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Gli strumenti&lt;/h3&gt; 
&lt;p&gt;Ci&amp;ograve; che ci occorre &amp;egrave; una copia di Visual Studio 2005 standard o maggiore (le versioni express non sono supportate!), a cui si dovranno aggiungere le installazioni dei relativi SDK per Windows Mobile. Oltre a questo deve essere poi installato sulla macchina l&amp;rsquo;Active Sync o maggiore. &lt;/p&gt;
&lt;p&gt;L&amp;rsquo;installazione di Visual Studio consente di installare anche una serie di tools (come i .net Remote Tools) che aiutano gli sviluppatori nel testare le proprie applicazioni.&lt;/p&gt;
&lt;p&gt;Non si pu&amp;ograve; fare a meno di citare anche gli &lt;em&gt;emulatori&lt;/em&gt; che non solo aiutano il testing delle applicazioni su diverse tipologie di device (ma anche di OS), ma consentono gli sviluppatori di avere un valido strumento di supporto nello sviluppo (es. gli emulatori consentono di ricreare determinate situazioni tipo una chiamata, la ricezione di un sms&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Mi pare giusto a questo punto lasciare un p&amp;ograve; di link:&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 6.0 SDK&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;Windows Mobile 6.5 DTK&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141&amp;amp;DisplayLang=it"&gt;ActiveSync 4.5&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it"&gt;Centro gestione dispositivi Windows Mobile 6.1 per Vista&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;La prima applicazione&lt;/h3&gt;
&lt;p&gt;Creare una nuova applicazione per dispositivi Windows Mobile con Visual Studio &amp;egrave; davvero semplice. Una volta aperto l&amp;rsquo;IDE basta fare click su Nuovo &amp;ndash;&amp;gt; Progetto, e scegliere tra le varie tipologie &lt;em&gt;Smart Device&lt;/em&gt; e poi selezionare la tipologia di progetto che si vuole creare, nel nostro caso &lt;em&gt;Applicazione Dispositivo&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png"&gt;&lt;img height="454" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dopo che Visual Studio ha creato tutta la struttura del progetto ci troviamo davanti (a seconda della disposizione degli elementi dell&amp;rsquo;IDE) la seguente schermata: &lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png"&gt;&lt;img height="396" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vediamo in particolare la struttura del progetto creato dal Visual Studio:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png"&gt;&lt;img height="163" width="244" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Abbiamo una serie di file/cartelle create in automatico. Da notare in primis c&amp;rsquo;&amp;egrave; il &lt;em&gt;Program.cs&lt;/em&gt; che rappresenta il l&amp;rsquo;entry-point principale dell&amp;rsquo;applicazione. Aprendo il file notiamo del codice che consente di far partire l&amp;rsquo;applicazione:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png"&gt;&lt;img height="194" width="488" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Naturalmente se decidiamo di cambiare il nome del form principale dobbiamo agire nell&amp;rsquo;unica riga di codice presente nel &lt;em&gt;Main()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Oltre al file &lt;em&gt;Program.cs &lt;/em&gt;abbiamo un form predefinito, &lt;em&gt;Form1.cs&lt;/em&gt;, che rappresenta la nostra prima schermata dell&amp;rsquo;applicazione. In tale form abbiamo la possibilit&amp;agrave; di trascinare controlli, ed abbiamo anche un &lt;em&gt;MainMenu&lt;/em&gt; da impostare per la nostra applicazione. &lt;/p&gt;
&lt;p&gt;Altri elementi predefiniti del progetto sono la cartella &lt;em&gt;Riferimenti&lt;/em&gt;, che come in altre tipologie di progetto, rappresenta la cartella di &amp;ldquo;reference&amp;rdquo; alle librerie del .Net Framework, e la cartella &lt;em&gt;Properties&lt;/em&gt;, che include un file di risorse e l&amp;rsquo;AssemblyInfo.cs, che serve per definire informazioni riguardante l&amp;rsquo;assembly generato dall&amp;rsquo;applicazione.&lt;/p&gt;
&lt;p&gt;A questo punto non ci resta che aggiungere qualche controllo al nostro form e scrivere anche qualche riga di codice nella parte di code-behind relativa ai controlli che abbiamo aggiunto e premere F5 per testarla.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Testing e debugging dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Testare la propria applicazione per dispositivi mobile &amp;egrave; come testare una semplice applicazione Web: basta premere F5 e attendere che Visual Studio setti l&amp;rsquo;ambiente di esecuzione. Unica differenza &amp;egrave; per&amp;ograve; la scelta della piattaforma di destinazione. Uno sviluppatore pu&amp;ograve; scegliere la tipologia di dispositivo in cui l&amp;rsquo;applicazione verr&amp;agrave; deployata e verificare la corretta esecuzione della stessa. In questo ambito uno sviluppatore pu&amp;ograve; scegliere se usare gli emulatori installati sulla macchina di sviluppo o se testare l&amp;rsquo;applicazione direttamente sul dispositivo fisico. In quest&amp;rsquo;ultimo caso, Visual Studio effettuer&amp;agrave; una copia dell&amp;rsquo;applicazione nel dispositivo fisico e dopo eseguir&amp;agrave; l&amp;rsquo;applicazione stessa.&lt;/p&gt;
&lt;p&gt;Anche per il debugging la situazione resta la stessa. Si hanno a disposizione i ben noti &lt;em&gt;breakpoint&lt;/em&gt;, che gli sviluppatori possono sistemare nei punti critici dell&amp;rsquo;applicazione per verificarne il corretto funzionamento.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Packaging e deploying dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Una volta terminato lo sviluppo della propria applicazione, si pu&amp;ograve; procedere con la creazione di un pacchetto di installazione della stessa. I pacchetti di installazione di software per dispositivi Windows Mobile vengono chiamati CAB (il nome deriva da &lt;em&gt;cabinet&lt;/em&gt; e portano l&amp;rsquo;estensione .cab). I file CAB non sono altri degli archivi eseguibili, che possono contenere al loro interno tutti i file correlati alla nostra applicazione (es.: dll, file di risorse, dipendenze&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Creare un CAB &amp;egrave; semplice. Basta aggiungere alla propria soluzione un nuovo progetto, e selezionare nella finestra che si apre, la sezione &amp;lsquo;Installazione e distribuzione&amp;rsquo; sotto la voce &amp;lsquo;Altri tipi di progetto&amp;rsquo;. Nel riquadro sulla destra compaiono diverse tipologie di progetto disponibili, e tra quelle presenti occorre selezionare &amp;lsquo;Progetto Cab per Smart Device&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;Una volta aggiunto il progetto, vi comparir&amp;agrave; la seguente schermata, in cui &amp;egrave; necessario aggiungere i file relativi alla vostra applicazione.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png"&gt;&lt;img height="375" width="631" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In questa schermata occorre selezionare la Cartella Applicazione e dopo aver cliccato con il pulsante destro, vi si aprir&amp;agrave; un men&amp;ugrave; contestuale in cui dovrete selezionare le voci: &lt;em&gt;Aggiungi &amp;ndash;&amp;gt; Output Progetto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png"&gt;&lt;img height="129" width="329" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vi si aprir&amp;agrave; la seguente schermata:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png"&gt;&lt;img height="371" width="322" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dove occorrer&amp;agrave; selezionare &lt;em&gt;Output Primario&lt;/em&gt; per aggiungere l&amp;rsquo;output della nostra applicazione al pacchetto di installazione. Oltre all&amp;rsquo;output primario, possono essere aggiunti diversi file al CAB, come file di dipendenze, chiavi di registro, file di risorse, collegamenti ai men&amp;ugrave; di avvio. La modalit&amp;agrave; resta sempre la stessa (ovvero Aggiungi &amp;ndash;&amp;gt; &amp;hellip;). &lt;/p&gt;
&lt;p&gt;Fatto questo, occorrer&amp;agrave; compilare la soluzione e nella cartella relativa alla stessa, sar&amp;agrave; presente una nuova cartella relativa al file CAB e, in base alla configurazione di compilazione utizzata (debug/release), sar&amp;agrave; presente una sottocartella che conterr&amp;agrave; 3 files:&lt;/p&gt;
&lt;p&gt;1)Un file CAB (la nostra applicazione : ) );&lt;/p&gt;
&lt;p&gt;2)Un file INF (che contiene informazioni riguardanti la cartella di destinazione e i requisiti di sistema per eseguire l&amp;rsquo;applicazione);&lt;/p&gt;
&lt;p&gt;3)Un file di log (che contiene informazioni relative alla procedura di packaging).&lt;/p&gt;
&lt;p&gt;Per incrementare la fiducia degli utenti nei confronti della nostra applicazione, &amp;egrave; anche possibile firmare il proprio CAB con un certificato rilasciato da un ente appropriato.&lt;/p&gt;
&lt;p&gt;A questo punto non resta che trasferire la nostra applicazione al dispositivo! Enjoy it!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;it&amp;#39;s all about development...&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Sviluppo di una semplice applicazione</title><link>http://dotnetcampania.org/wikis/articoli/sviluppo-di-una-semplice-applicazione/revision/4.aspx</link><pubDate>Tue, 05 Jan 2010 23:53:51 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:60</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 4 posted to Articoli by Liccardi Antonio on 06/01/2010 00:53:51&lt;br /&gt;
&lt;h2&gt;Sviluppo di una semplice applicazione&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile first app&lt;/div&gt;

&lt;p&gt;Qualche mese fa ho postato un webcast in cui illustravo come realizzare una semplice applicazione per Windows Mobile. &lt;/p&gt;
&lt;p&gt;&lt;iframe marginwidth="0" width="550" frameborder="0" src="http://www.dotnetcampania.org/webcast/1_HelloWindowsMobile.html" marginheight="0" height="350" style="width:550px;height:350px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intento di questo articolo &amp;egrave; quello di approfondire ci&amp;ograve; che si &amp;egrave; detto nel webcast.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Gli strumenti&lt;/h3&gt;
&lt;p&gt;Ci&amp;ograve; che ci occorre &amp;egrave; una copia di Visual Studio 2005 standard o maggiore (le versioni express non sono supportate!), a cui si dovranno aggiungere le installazioni dei relativi SDK per Windows Mobile. Oltre a questo deve essere poi installato sulla macchina l&amp;rsquo;Active Sync o maggiore. &lt;/p&gt;
&lt;p&gt;L&amp;rsquo;installazione di Visual Studio consente di installare anche una serie di tools (come i .net Remote Tools) che aiutano gli sviluppatori nel testare le proprie applicazioni.&lt;/p&gt;
&lt;p&gt;Non si pu&amp;ograve; fare a meno di citare anche gli &lt;em&gt;emulatori&lt;/em&gt; che non solo aiutano il testing delle applicazioni su diverse tipologie di device (ma anche di OS), ma consentono gli sviluppatori di avere un valido strumento di supporto nello sviluppo (es. gli emulatori consentono di ricreare determinate situazioni tipo una chiamata, la ricezione di un sms&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Mi pare giusto a questo punto lasciare un p&amp;ograve; di link:&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 6.0 SDK&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;Windows Mobile 6.5 DTK&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141&amp;amp;DisplayLang=it"&gt;ActiveSync 4.5&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it"&gt;Centro gestione dispositivi Windows Mobile 6.1 per Vista&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;La prima applicazione&lt;/h3&gt;
&lt;p&gt;Creare una nuova applicazione per dispositivi Windows Mobile con Visual Studio &amp;egrave; davvero semplice. Una volta aperto l&amp;rsquo;IDE basta fare click su Nuovo &amp;ndash;&amp;gt; Progetto, e scegliere tra le varie tipologie &lt;em&gt;Smart Device&lt;/em&gt; e poi selezionare la tipologia di progetto che si vuole creare, nel nostro caso &lt;em&gt;Applicazione Dispositivo&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png"&gt;&lt;img height="454" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dopo che Visual Studio ha creato tutta la struttura del progetto ci troviamo davanti (a seconda della disposizione degli elementi dell&amp;rsquo;IDE) la seguente schermata: &lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png"&gt;&lt;img height="396" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vediamo in particolare la struttura del progetto creato dal Visual Studio:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png"&gt;&lt;img height="163" width="244" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Abbiamo una serie di file/cartelle create in automatico. Da notare in primis c&amp;rsquo;&amp;egrave; il &lt;em&gt;Program.cs&lt;/em&gt; che rappresenta il l&amp;rsquo;entry-point principale dell&amp;rsquo;applicazione. Aprendo il file notiamo del codice che consente di far partire l&amp;rsquo;applicazione:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png"&gt;&lt;img height="194" width="488" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Naturalmente se decidiamo di cambiare il nome del form principale dobbiamo agire nell&amp;rsquo;unica riga di codice presente nel &lt;em&gt;Main()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Oltre al file &lt;em&gt;Program.cs &lt;/em&gt;abbiamo un form predefinito, &lt;em&gt;Form1.cs&lt;/em&gt;, che rappresenta la nostra prima schermata dell&amp;rsquo;applicazione. In tale form abbiamo la possibilit&amp;agrave; di trascinare controlli, ed abbiamo anche un &lt;em&gt;MainMenu&lt;/em&gt; da impostare per la nostra applicazione. &lt;/p&gt;
&lt;p&gt;Altri elementi predefiniti del progetto sono la cartella &lt;em&gt;Riferimenti&lt;/em&gt;, che come in altre tipologie di progetto, rappresenta la cartella di &amp;ldquo;reference&amp;rdquo; alle librerie del .Net Framework, e la cartella &lt;em&gt;Properties&lt;/em&gt;, che include un file di risorse e l&amp;rsquo;AssemblyInfo.cs, che serve per definire informazioni riguardante l&amp;rsquo;assembly generato dall&amp;rsquo;applicazione.&lt;/p&gt;
&lt;p&gt;A questo punto non ci resta che aggiungere qualche controllo al nostro form e scrivere anche qualche riga di codice nella parte di code-behind relativa ai controlli che abbiamo aggiunto e premere F5 per testarla.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Testing e debugging dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Testare la propria applicazione per dispositivi mobile &amp;egrave; come testare una semplice applicazione Web: basta premere F5 e attendere che Visual Studio setti l&amp;rsquo;ambiente di esecuzione. Unica differenza &amp;egrave; per&amp;ograve; la scelta della piattaforma di destinazione. Uno sviluppatore pu&amp;ograve; scegliere la tipologia di dispositivo in cui l&amp;rsquo;applicazione verr&amp;agrave; deployata e verificare la corretta esecuzione della stessa. In questo ambito uno sviluppatore pu&amp;ograve; scegliere se usare gli emulatori installati sulla macchina di sviluppo o se testare l&amp;rsquo;applicazione direttamente sul dispositivo fisico. In quest&amp;rsquo;ultimo caso, Visual Studio effettuer&amp;agrave; una copia dell&amp;rsquo;applicazione nel dispositivo fisico e dopo eseguir&amp;agrave; l&amp;rsquo;applicazione stessa.&lt;/p&gt;
&lt;p&gt;Anche per il debugging la situazione resta la stessa. Si hanno a disposizione i ben noti &lt;em&gt;breakpoint&lt;/em&gt;, che gli sviluppatori possono sistemare nei punti critici dell&amp;rsquo;applicazione per verificarne il corretto funzionamento.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Packaging e deploying dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Una volta terminato lo sviluppo della propria applicazione, si pu&amp;ograve; procedere con la creazione di un pacchetto di installazione della stessa. I pacchetti di installazione di software per dispositivi Windows Mobile vengono chiamati CAB (il nome deriva da &lt;em&gt;cabinet&lt;/em&gt; e portano l&amp;rsquo;estensione .cab). I file CAB non sono altri degli archivi eseguibili, che possono contenere al loro interno tutti i file correlati alla nostra applicazione (es.: dll, file di risorse, dipendenze&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Creare un CAB &amp;egrave; semplice. Basta aggiungere alla propria soluzione un nuovo progetto, e selezionare nella finestra che si apre, la sezione &amp;lsquo;Installazione e distribuzione&amp;rsquo; sotto la voce &amp;lsquo;Altri tipi di progetto&amp;rsquo;. Nel riquadro sulla destra compaiono diverse tipologie di progetto disponibili, e tra quelle presenti occorre selezionare &amp;lsquo;Progetto Cab per Smart Device&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;Una volta aggiunto il progetto, vi comparir&amp;agrave; la seguente schermata, in cui &amp;egrave; necessario aggiungere i file relativi alla vostra applicazione.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png"&gt;&lt;img height="375" width="631" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In questa schermata occorre selezionare la Cartella Applicazione e dopo aver cliccato con il pulsante destro, vi si aprir&amp;agrave; un men&amp;ugrave; contestuale in cui dovrete selezionare le voci: &lt;em&gt;Aggiungi &amp;ndash;&amp;gt; Output Progetto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png"&gt;&lt;img height="129" width="329" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vi si aprir&amp;agrave; la seguente schermata:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png"&gt;&lt;img height="371" width="322" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dove occorrer&amp;agrave; selezionare &lt;em&gt;Output Primario&lt;/em&gt; per aggiungere l&amp;rsquo;output della nostra applicazione al pacchetto di installazione. Oltre all&amp;rsquo;output primario, possono essere aggiunti diversi file al CAB, come file di dipendenze, chiavi di registro, file di risorse, collegamenti ai men&amp;ugrave; di avvio. La modalit&amp;agrave; resta sempre la stessa (ovvero Aggiungi &amp;ndash;&amp;gt; &amp;hellip;). &lt;/p&gt;
&lt;p&gt;Fatto questo, occorrer&amp;agrave; compilare la soluzione e nella cartella relativa alla stessa, sar&amp;agrave; presente una nuova cartella relativa al file CAB e, in base alla configurazione di compilazione utizzata (debug/release), sar&amp;agrave; presente una sottocartella che conterr&amp;agrave; 3 files:&lt;/p&gt;
&lt;p&gt;1)Un file CAB (la nostra applicazione : ) );&lt;/p&gt;
&lt;p&gt;2)Un file INF (che contiene informazioni riguardanti la cartella di destinazione e i requisiti di sistema per eseguire l&amp;rsquo;applicazione);&lt;/p&gt;
&lt;p&gt;3)Un file di log (che contiene informazioni relative alla procedura di packaging).&lt;/p&gt;
&lt;p&gt;Per incrementare la fiducia degli utenti nei confronti della nostra applicazione, &amp;egrave; anche possibile firmare il proprio CAB con un certificato rilasciato da un ente appropriato.&lt;/p&gt;
&lt;p&gt;A questo punto non resta che trasferire la nostra applicazione al dispositivo! Enjoy it!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;s&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;all&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;about&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;development..&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Sviluppo di una semplice applicazione</title><link>http://dotnetcampania.org/wikis/articoli/sviluppo-di-una-semplice-applicazione/revision/3.aspx</link><pubDate>Tue, 05 Jan 2010 23:53:05 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:58</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 3 posted to Articoli by Liccardi Antonio on 06/01/2010 00:53:05&lt;br /&gt;
&lt;h2&gt;Sviluppo di una semplice applicazione&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile first app&lt;/div&gt;

&lt;p&gt;Qualche mese fa ho postato un webcast in cui illustravo come realizzare una semplice applicazione per Windows Mobile. &lt;/p&gt;
&lt;p&gt;&lt;iframe marginwidth="0" width="550" frameborder="0" src="http://www.dotnetcampania.org/webcast/1_HelloWindowsMobile.html" marginheight="0" height="350" style="width:550px;height:350px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intento di questo articolo &amp;egrave; quello di approfondire ci&amp;ograve; che si &amp;egrave; detto nel webcast.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Gli strumenti&lt;/h3&gt;
&lt;p&gt;Ci&amp;ograve; che ci occorre &amp;egrave; una copia di Visual Studio 2005 standard o maggiore (le versioni express non sono supportate!), a cui si dovranno aggiungere le installazioni dei relativi SDK per Windows Mobile. Oltre a questo deve essere poi installato sulla macchina l&amp;rsquo;Active Sync o maggiore. &lt;/p&gt;
&lt;p&gt;L&amp;rsquo;installazione di Visual Studio consente di installare anche una serie di tools (come i .net Remote Tools) che aiutano gli sviluppatori nel testare le proprie applicazioni.&lt;/p&gt;
&lt;p&gt;Non si pu&amp;ograve; fare a meno di citare anche gli &lt;em&gt;emulatori&lt;/em&gt; che non solo aiutano il testing delle applicazioni su diverse tipologie di device (ma anche di OS), ma consentono gli sviluppatori di avere un valido strumento di supporto nello sviluppo (es. gli emulatori consentono di ricreare determinate situazioni tipo una chiamata, la ricezione di un sms&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Mi pare giusto a questo punto lasciare un p&amp;ograve; di link:&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 6.0 SDK&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;Windows Mobile 6.5 DTK&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141&amp;amp;DisplayLang=it"&gt;ActiveSync 4.5&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it"&gt;Centro gestione dispositivi Windows Mobile 6.1 per Vista&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;La prima applicazione&lt;/h3&gt;
&lt;p&gt;Creare una nuova applicazione per dispositivi Windows Mobile con Visual Studio &amp;egrave; davvero semplice. Una volta aperto l&amp;rsquo;IDE basta fare click su Nuovo &amp;ndash;&amp;gt; Progetto, e scegliere tra le varie tipologie &lt;em&gt;Smart Device&lt;/em&gt; e poi selezionare la tipologia di progetto che si vuole creare, nel nostro caso &lt;em&gt;Applicazione Dispositivo&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="454" width="600" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image5[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="454" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dopo che Visual Studio ha creato tutta la struttura del progetto ci troviamo davanti (a seconda della disposizione degli elementi dell&amp;rsquo;IDE) la seguente schermata: &lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="396" width="600" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image10[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="396" width="600" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vediamo in particolare la struttura del progetto creato dal Visual Studio:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="163" width="244" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image15[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="163" width="244" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Abbiamo una serie di file/cartelle create in automatico. Da notare in primis c&amp;rsquo;&amp;egrave; il &lt;em&gt;Program.cs&lt;/em&gt; che rappresenta il l&amp;rsquo;entry-point principale dell&amp;rsquo;applicazione. Aprendo il file notiamo del codice che consente di far partire l&amp;rsquo;applicazione:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="194" width="488" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[14].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="194" width="488" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Naturalmente se decidiamo di cambiare il nome del form principale dobbiamo agire nell&amp;rsquo;unica riga di codice presente nel &lt;em&gt;Main()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Oltre al file &lt;em&gt;Program.cs &lt;/em&gt;abbiamo un form predefinito, &lt;em&gt;Form1.cs&lt;/em&gt;, che rappresenta la nostra prima schermata dell&amp;rsquo;applicazione. In tale form abbiamo la possibilit&amp;agrave; di trascinare controlli, ed abbiamo anche un &lt;em&gt;MainMenu&lt;/em&gt; da impostare per la nostra applicazione. &lt;/p&gt;
&lt;p&gt;Altri elementi predefiniti del progetto sono la cartella &lt;em&gt;Riferimenti&lt;/em&gt;, che come in altre tipologie di progetto, rappresenta la cartella di &amp;ldquo;reference&amp;rdquo; alle librerie del .Net Framework, e la cartella &lt;em&gt;Properties&lt;/em&gt;, che include un file di risorse e l&amp;rsquo;AssemblyInfo.cs, che serve per definire informazioni riguardante l&amp;rsquo;assembly generato dall&amp;rsquo;applicazione.&lt;/p&gt;
&lt;p&gt;A questo punto non ci resta che aggiungere qualche controllo al nostro form e scrivere anche qualche riga di codice nella parte di code-behind relativa ai controlli che abbiamo aggiunto e premere F5 per testarla.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Testing e debugging dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Testare la propria applicazione per dispositivi mobile &amp;egrave; come testare una semplice applicazione Web: basta premere F5 e attendere che Visual Studio setti l&amp;rsquo;ambiente di esecuzione. Unica differenza &amp;egrave; per&amp;ograve; la scelta della piattaforma di destinazione. Uno sviluppatore pu&amp;ograve; scegliere la tipologia di dispositivo in cui l&amp;rsquo;applicazione verr&amp;agrave; deployata e verificare la corretta esecuzione della stessa. In questo ambito uno sviluppatore pu&amp;ograve; scegliere se usare gli emulatori installati sulla macchina di sviluppo o se testare l&amp;rsquo;applicazione direttamente sul dispositivo fisico. In quest&amp;rsquo;ultimo caso, Visual Studio effettuer&amp;agrave; una copia dell&amp;rsquo;applicazione nel dispositivo fisico e dopo eseguir&amp;agrave; l&amp;rsquo;applicazione stessa.&lt;/p&gt;
&lt;p&gt;Anche per il debugging la situazione resta la stessa. Si hanno a disposizione i ben noti &lt;em&gt;breakpoint&lt;/em&gt;, che gli sviluppatori possono sistemare nei punti critici dell&amp;rsquo;applicazione per verificarne il corretto funzionamento.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Packaging e deploying dell&amp;rsquo;applicazione&lt;/h3&gt;
&lt;p&gt;Una volta terminato lo sviluppo della propria applicazione, si pu&amp;ograve; procedere con la creazione di un pacchetto di installazione della stessa. I pacchetti di installazione di software per dispositivi Windows Mobile vengono chiamati CAB (il nome deriva da &lt;em&gt;cabinet&lt;/em&gt; e &lt;span style="text-decoration: line-through; color: red;"&gt;porta&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;portano&lt;/span&gt; l&amp;rsquo;estensione .cab). I file CAB non sono altri degli archivi eseguibili, che possono contenere al loro interno tutti i file correlati alla nostra applicazione (es.: dll, file di risorse, dipendenze&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Creare un CAB &amp;egrave; semplice. Basta aggiungere alla propria soluzione un nuovo progetto, e selezionare nella finestra che si apre, la sezione &amp;lsquo;Installazione e distribuzione&amp;rsquo; sotto la voce &amp;lsquo;Altri tipi di progetto&amp;rsquo;. Nel riquadro sulla destra compaiono diverse tipologie di progetto disponibili, e tra quelle presenti occorre selezionare &amp;lsquo;Progetto Cab per Smart Device&amp;rsquo;.&lt;/p&gt;
&lt;p&gt;Una volta aggiunto il progetto, vi comparir&amp;agrave; la seguente schermata, in cui &amp;egrave; necessario aggiungere i file relativi alla vostra applicazione.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="375" width="631" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[15].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="375" width="631" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In questa schermata occorre selezionare la Cartella Applicazione e dopo aver cliccato con il pulsante destro, vi si aprir&amp;agrave; un men&amp;ugrave; contestuale in cui dovrete selezionare le voci: &lt;em&gt;Aggiungi &amp;ndash;&amp;gt; Output Progetto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="129" width="329" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[16].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="129" width="329" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vi si aprir&amp;agrave; la seguente schermata:&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img height="371" width="322" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[17].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="371" width="322" src="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dove occorrer&amp;agrave; selezionare &lt;em&gt;Output Primario&lt;/em&gt; per aggiungere l&amp;rsquo;output della nostra applicazione al pacchetto di installazione. Oltre all&amp;rsquo;output primario, possono essere aggiunti diversi file al CAB, come file di dipendenze, chiavi di registro, file di risorse, collegamenti ai men&amp;ugrave; di avvio. La modalit&amp;agrave; resta sempre la stessa (ovvero Aggiungi &amp;ndash;&amp;gt; &amp;hellip;). &lt;/p&gt;
&lt;p&gt;Fatto questo, occorrer&amp;agrave; compilare la soluzione e nella cartella relativa alla stessa, sar&amp;agrave; presente una nuova cartella relativa al file CAB e, in base alla configurazione di compilazione utizzata (debug/release), sar&amp;agrave; presente una sottocartella che conterr&amp;agrave; 3 files:&lt;/p&gt;
&lt;p&gt;1)Un file CAB (la nostra applicazione : ) );&lt;/p&gt;
&lt;p&gt;2)Un file INF (che contiene informazioni riguardanti la cartella di destinazione e i requisiti di sistema per eseguire l&amp;rsquo;applicazione);&lt;/p&gt;
&lt;p&gt;3)Un file di log (che contiene informazioni relative alla procedura di packaging).&lt;/p&gt;
&lt;p&gt;Per incrementare la fiducia degli utenti nei confronti della nostra applicazione, &amp;egrave; anche possibile firmare il proprio CAB con un certificato rilasciato da un ente appropriato.&lt;/p&gt;
&lt;p&gt;A questo punto non resta che trasferire la nostra applicazione al dispositivo! Enjoy it!&lt;/p&gt;</description></item><item><title>Sviluppo di una semplice applicazione</title><link>http://dotnetcampania.org/wikis/articoli/sviluppo-di-una-semplice-applicazione/revision/2.aspx</link><pubDate>Tue, 05 Jan 2010 23:46:55 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:57</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 2 posted to Articoli by Liccardi Antonio on 06/01/2010 00:46:55&lt;br /&gt;
&lt;h2&gt;Sviluppo di una semplice applicazione&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: windows mobile first app&lt;/div&gt;

&lt;p&gt;Qualche mese fa ho postato un webcast in cui illustravo come realizzare una semplice applicazione per Windows Mobile. &lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;[&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;WEBCAST]&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;L’intento&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;iframe marginwidth="0" width="550" frameborder="0" src="http://www.dotnetcampania.org/webcast/1_HelloWindowsMobile.html" marginheight="0" height="350" style="width:550px;height:350px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;L&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;intento&lt;/span&gt; di questo articolo &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; quello di approfondire &lt;span style="text-decoration: line-through; color: red;"&gt;ciò&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ci&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; che si &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; detto nel webcast.&lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Gli strumenti&lt;/h3&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Ciò&lt;/span&gt; &lt;/h3&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;Ci&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; che ci occorre &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; una copia di Visual Studio 2005 standard o maggiore (le versioni express non sono supportate!), a cui si dovranno aggiungere le installazioni dei relativi SDK per Windows Mobile. Oltre a questo deve essere poi installato sulla macchina &lt;span style="text-decoration: line-through; color: red;"&gt;l’Active&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;Active&lt;/span&gt; Sync o maggiore. &lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;L’installazione&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;L&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;installazione&lt;/span&gt; di Visual Studio consente di installare anche una serie di tools (come i .net Remote Tools) che aiutano gli sviluppatori nel testare le proprie applicazioni.&lt;/p&gt;
&lt;p&gt;Non si &lt;span style="text-decoration: line-through; color: red;"&gt;può&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pu&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; fare a meno di citare anche gli &lt;em&gt;emulatori&lt;/em&gt; che non solo aiutano il testing delle applicazioni su diverse tipologie di device (ma anche di OS), ma consentono gli sviluppatori di avere un valido strumento di supporto nello sviluppo (es. gli emulatori consentono di ricreare determinate situazioni tipo una chiamata, la ricezione di un &lt;span style="text-decoration: line-through; color: red;"&gt;sms…)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;sms&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;hellip;).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Mi pare giusto a questo punto lasciare un &lt;span style="text-decoration: line-through; color: red;"&gt;pò&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;p&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; di link:&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://msdn.microsoft.com/it-it/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 6.0 SDK&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;Windows Mobile 6.5 DTK&lt;/a&gt;;&lt;/p&gt;
&lt;p&gt;- &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141&amp;amp;DisplayLang=it"&gt;ActiveSync 4.5&lt;/a&gt; / &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it"&gt;Centro gestione dispositivi Windows Mobile 6.1 per Vista&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;La prima applicazione&lt;/h3&gt;
&lt;p&gt;Creare una nuova applicazione per dispositivi Windows Mobile con Visual Studio &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; davvero semplice. Una volta aperto &lt;span style="text-decoration: line-through; color: red;"&gt;l’IDE&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;IDE&lt;/span&gt; basta fare click su Nuovo &lt;span style="text-decoration: line-through; color: red;"&gt;–&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;ndash;&amp;gt;&lt;/span&gt; Progetto, e scegliere tra le varie tipologie &lt;em&gt;Smart Device&lt;/em&gt; e poi selezionare la tipologia di progetto che si vuole creare, nel nostro caso &lt;em&gt;Applicazione Dispositivo&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="600" height="454" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img01.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="454" width="600" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image5[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Dopo che Visual Studio ha creato tutta la struttura del progetto ci troviamo davanti (a seconda della disposizione degli elementi &lt;span style="text-decoration: line-through; color: red;"&gt;dell’IDE&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;IDE)&lt;/span&gt; la seguente schermata: &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="600" height="396" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img02.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="396" width="600" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image10[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vediamo in particolare la struttura del progetto creato dal Visual Studio:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="244" height="163" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img03.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="163" width="244" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image15[1].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Abbiamo una serie di file/cartelle create in automatico. Da notare in primis &lt;span style="text-decoration: line-through; color: red;"&gt;c’è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;c&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;&amp;egrave;&lt;/span&gt; il &lt;em&gt;Program.cs&lt;/em&gt; che rappresenta il &lt;span style="text-decoration: line-through; color: red;"&gt;l’entry-point&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;entry-point&lt;/span&gt; principale &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione.&lt;/span&gt; Aprendo il file notiamo del codice che consente di far partire &lt;span style="text-decoration: line-through; color: red;"&gt;l’applicazione&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="488" height="194" /&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img04.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="194" width="488" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[14].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Naturalmente se decidiamo di cambiare il nome del form principale dobbiamo agire &lt;span style="text-decoration: line-through; color: red;"&gt;nell’unica&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;nell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;unica&lt;/span&gt; riga di codice presente nel &lt;em&gt;Main()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Oltre al file &lt;em&gt;Program.cs &lt;/em&gt;abbiamo un form predefinito, &lt;em&gt;Form1.cs&lt;/em&gt;, che rappresenta la nostra prima schermata &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione.&lt;/span&gt; In tale form abbiamo la &lt;span style="text-decoration: line-through; color: red;"&gt;possibilità&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;possibilit&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; di trascinare controlli, ed abbiamo anche un &lt;em&gt;MainMenu&lt;/em&gt; da impostare per la nostra applicazione. &lt;/p&gt;
&lt;p&gt;Altri elementi predefiniti del progetto sono la cartella &lt;em&gt;Riferimenti&lt;/em&gt;, che come in altre tipologie di progetto, rappresenta la cartella di &lt;span style="text-decoration: line-through; color: red;"&gt;“&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;reference”&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;ldquo;reference&amp;rdquo;&lt;/span&gt; alle librerie del .Net Framework, e la cartella &lt;em&gt;Properties&lt;/em&gt;, che include un file di risorse e &lt;span style="text-decoration: line-through; color: red;"&gt;l’AssemblyInfo.cs&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;AssemblyInfo.cs,&lt;/span&gt; che serve per definire informazioni riguardante &lt;span style="text-decoration: line-through; color: red;"&gt;l’assembly&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;assembly&lt;/span&gt; generato &lt;span style="text-decoration: line-through; color: red;"&gt;dall’applicazione&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;dall&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A questo punto non ci resta che aggiungere qualche controllo al nostro form e scrivere anche qualche riga di codice nella parte di code-behind relativa ai controlli che abbiamo aggiunto e premere F5 per testarla.&lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Testing e debugging &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Testare la propria applicazione per dispositivi mobile &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; come testare una semplice applicazione Web: basta premere F5 e attendere che Visual Studio setti &lt;span style="text-decoration: line-through; color: red;"&gt;l’ambiente&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;ambiente&lt;/span&gt; di esecuzione. Unica differenza &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;però&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;per&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; la scelta della piattaforma di destinazione. Uno sviluppatore &lt;span style="text-decoration: line-through; color: red;"&gt;può&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pu&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; scegliere la tipologia di dispositivo in cui &lt;span style="text-decoration: line-through; color: red;"&gt;l’applicazione&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;verrà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;verr&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; deployata e verificare la corretta esecuzione della stessa. In questo ambito uno sviluppatore &lt;span style="text-decoration: line-through; color: red;"&gt;può&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pu&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; scegliere se usare gli emulatori installati sulla macchina di sviluppo o se testare &lt;span style="text-decoration: line-through; color: red;"&gt;l’applicazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt; direttamente sul dispositivo fisico. In &lt;span style="text-decoration: line-through; color: red;"&gt;quest’ultimo&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;quest&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;ultimo&lt;/span&gt; caso, Visual Studio &lt;span style="text-decoration: line-through; color: red;"&gt;effettuerà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;effettuer&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; una copia &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt; nel dispositivo fisico e dopo &lt;span style="text-decoration: line-through; color: red;"&gt;eseguirà&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;l’applicazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;eseguir&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt; stessa.&lt;/p&gt;
&lt;p&gt;Anche per il debugging la situazione resta la stessa. Si hanno a disposizione i ben noti &lt;em&gt;breakpoint&lt;/em&gt;, che gli sviluppatori possono sistemare nei punti critici &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt; per verificarne il corretto funzionamento.&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt; &lt;/p&gt;

&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Packaging e deploying &lt;span style="text-decoration: line-through; color: red;"&gt;dell’applicazione&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;dell&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Una volta terminato lo sviluppo della propria applicazione, si &lt;span style="text-decoration: line-through; color: red;"&gt;può&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;pu&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ograve;&lt;/span&gt; procedere con la creazione di un pacchetto di installazione della stessa. I pacchetti di installazione di software per dispositivi Windows Mobile vengono chiamati CAB (il nome deriva da &lt;em&gt;cabinet&lt;/em&gt; e porta &lt;span style="text-decoration: line-through; color: red;"&gt;l’estensione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;estensione&lt;/span&gt; .cab). I file CAB non sono altri degli archivi eseguibili, che possono contenere al loro interno tutti i file correlati alla nostra applicazione (es.: dll, file di risorse, &lt;span style="text-decoration: line-through; color: red;"&gt;dipendenze…)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;dipendenze&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;hellip;).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Creare un CAB &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; semplice. Basta aggiungere alla propria soluzione un nuovo progetto, e selezionare nella finestra che si apre, la sezione &lt;span style="text-decoration: line-through; color: red;"&gt;‘&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Installazione&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;lsquo;Installazione&lt;/span&gt; e distribuzione&lt;span style="text-decoration: line-through; color: red;"&gt;’&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;rsquo;&lt;/span&gt; sotto la voce &lt;span style="text-decoration: line-through; color: red;"&gt;‘&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Altri&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;lsquo;Altri&lt;/span&gt; tipi di &lt;span style="text-decoration: line-through; color: red;"&gt;progetto’&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;progetto&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;.&lt;/span&gt; Nel riquadro sulla destra compaiono diverse tipologie di progetto disponibili, e tra quelle presenti occorre selezionare &lt;span style="text-decoration: line-through; color: red;"&gt;‘&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Progetto&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;lsquo;Progetto&lt;/span&gt; Cab per Smart &lt;span style="text-decoration: line-through; color: red;"&gt;Device’&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Device&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Una volta aggiunto il progetto, vi &lt;span style="text-decoration: line-through; color: red;"&gt;comparirà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;comparir&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; la seguente schermata, in cui &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; necessario aggiungere i file relativi alla vostra applicazione.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="631" height="375" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img05.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="375" width="631" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[15].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In questa schermata occorre selezionare la Cartella Applicazione e dopo aver cliccato con il pulsante destro, vi si &lt;span style="text-decoration: line-through; color: red;"&gt;aprirà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;aprir&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; un &lt;span style="text-decoration: line-through; color: red;"&gt;menù&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;men&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ugrave;&lt;/span&gt; contestuale in cui dovrete selezionare le voci: &lt;em&gt;Aggiungi &lt;span style="text-decoration: line-through; color: red;"&gt;–&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;ndash;&amp;gt;&lt;/span&gt; Output Progetto.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="329" height="129" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;#160;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img06.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="129" width="329" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[16].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vi si &lt;span style="text-decoration: line-through; color: red;"&gt;aprirà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;aprir&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; la seguente schermata:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="322" height="371" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliAntonio/art02_5F00_img07.png"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img height="371" width="322" src="/wikis/articoli/sviluppo-di-una-semplice-applicazione/edit.aspx/$image[17].png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;dove &lt;span style="text-decoration: line-through; color: red;"&gt;occorrerà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;occorrer&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; selezionare &lt;em&gt;Output Primario&lt;/em&gt; per aggiungere &lt;span style="text-decoration: line-through; color: red;"&gt;l’output&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;output&lt;/span&gt; della nostra applicazione al pacchetto di installazione. Oltre &lt;span style="text-decoration: line-through; color: red;"&gt;all’output&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;all&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;output&lt;/span&gt; primario, possono essere aggiunti diversi file al CAB, come file di dipendenze, chiavi di registro, file di risorse, collegamenti ai &lt;span style="text-decoration: line-through; color: red;"&gt;menù&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;men&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;ugrave;&lt;/span&gt; di avvio. La &lt;span style="text-decoration: line-through; color: red;"&gt;modalità&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;modalit&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; resta sempre la stessa (ovvero Aggiungi &lt;span style="text-decoration: line-through; color: red;"&gt;–&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;…&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;).&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;ndash;&amp;gt;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;hellip;).&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;Fatto questo, &lt;span style="text-decoration: line-through; color: red;"&gt;occorrerà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;occorrer&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; compilare la soluzione e nella cartella relativa alla stessa, &lt;span style="text-decoration: line-through; color: red;"&gt;sarà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;sar&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; presente una nuova cartella relativa al file CAB e, in base alla configurazione di compilazione utizzata (debug/release), &lt;span style="text-decoration: line-through; color: red;"&gt;sarà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;sar&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; presente una sottocartella che &lt;span style="text-decoration: line-through; color: red;"&gt;conterrà&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;conterr&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;agrave;&lt;/span&gt; 3 files:&lt;/p&gt;
&lt;p&gt;1)Un file CAB (la nostra applicazione : ) );&lt;/p&gt;
&lt;p&gt;2)Un file INF (che contiene informazioni riguardanti la cartella di destinazione e i requisiti di sistema per eseguire &lt;span style="text-decoration: line-through; color: red;"&gt;l’applicazione)&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;l&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;rsquo;applicazione);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;3)Un file di log (che contiene informazioni relative alla procedura di packaging).&lt;/p&gt;
&lt;p&gt;Per incrementare la fiducia degli utenti nei confronti della nostra applicazione, &lt;span style="text-decoration: line-through; color: red;"&gt;è&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;egrave;&lt;/span&gt; anche possibile firmare il proprio CAB con un certificato rilasciato da un ente appropriato.&lt;/p&gt;
&lt;p&gt;A questo punto non resta che trasferire la nostra applicazione al dispositivo! Enjoy it!&lt;/p&gt;</description></item><item><title>Sviluppo di una semplice applicazione</title><link>http://dotnetcampania.org/wikis/articoli/sviluppo-di-una-semplice-applicazione/revision/1.aspx</link><pubDate>Tue, 05 Jan 2010 23:29:50 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:56</guid><dc:creator>Liccardi Antonio</dc:creator><description>Revision 1 posted to Articoli by Liccardi Antonio on 06/01/2010 00:29:50&lt;br /&gt;
&lt;p&gt;Qualche mese fa ho postato un webcast in cui illustravo come realizzare una semplice applicazione per Windows Mobile. &lt;/p&gt;

&lt;p&gt;[WEBCAST]&lt;/p&gt;

&lt;p&gt;L’intento di questo articolo è quello di approfondire ciò che si è detto nel webcast.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Gli strumenti&lt;/h3&gt;

&lt;p&gt;Ciò che ci occorre è una copia di Visual Studio 2005 standard o maggiore (le versioni express non sono supportate!), a cui si dovranno aggiungere le installazioni dei relativi SDK per Windows Mobile. Oltre a questo deve essere poi installato sulla macchina l’Active Sync o maggiore. &lt;/p&gt;

&lt;p&gt;L’installazione di Visual Studio consente di installare anche una serie di tools (come i .net Remote Tools) che aiutano gli sviluppatori nel testare le proprie applicazioni.&lt;/p&gt;

&lt;p&gt;Non si può fare a meno di citare anche gli &lt;em&gt;emulatori&lt;/em&gt; che non solo aiutano il testing delle applicazioni su diverse tipologie di device (ma anche di OS), ma consentono gli sviluppatori di avere un valido strumento di supporto nello sviluppo (es. gli emulatori consentono di ricreare determinate situazioni tipo una chiamata, la ricezione di un sms…).&lt;/p&gt;

&lt;p&gt;Mi pare giusto a questo punto lasciare un pò di link:&lt;/p&gt;

&lt;p&gt;- &lt;a href="http://msdn.microsoft.com/it-it/vstudio/default.aspx" target="_blank"&gt;Visual Studio&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en" target="_blank"&gt;Windows Mobile 6.0 SDK&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en" target="_blank"&gt;Windows Mobile 6.5 DTK&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141&amp;amp;DisplayLang=it" target="_blank"&gt;ActiveSync 4.5&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it" target="_blank"&gt;Centro gestione dispositivi Windows Mobile 6.1 per Vista&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;La prima applicazione&lt;/h3&gt;

&lt;p&gt;Creare una nuova applicazione per dispositivi Windows Mobile con Visual Studio è davvero semplice. Una volta aperto l’IDE basta fare click su Nuovo –&amp;gt; Progetto, e scegliere tra le varie tipologie &lt;em&gt;Smart Device&lt;/em&gt; e poi selezionare la tipologia di progetto che si vuole creare, nel nostro caso &lt;em&gt;Applicazione Dispositivo&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="600" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Dopo che Visual Studio ha creato tutta la struttura del progetto ci troviamo davanti (a seconda della disposizione degli elementi dell’IDE) la seguente schermata: &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="600" height="396" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Vediamo in particolare la struttura del progetto creato dal Visual Studio:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="244" height="163" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abbiamo una serie di file/cartelle create in automatico. Da notare in primis c’è il &lt;em&gt;Program.cs&lt;/em&gt; che rappresenta il l’entry-point principale dell’applicazione. Aprendo il file notiamo del codice che consente di far partire l’applicazione:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" width="488" height="194" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Naturalmente se decidiamo di cambiare il nome del form principale dobbiamo agire nell’unica riga di codice presente nel &lt;em&gt;Main()&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Oltre al file &lt;em&gt;Program.cs &lt;/em&gt;abbiamo un form predefinito, &lt;em&gt;Form1.cs&lt;/em&gt;, che rappresenta la nostra prima schermata dell’applicazione. In tale form abbiamo la possibilità di trascinare controlli, ed abbiamo anche un &lt;em&gt;MainMenu&lt;/em&gt; da impostare per la nostra applicazione. &lt;/p&gt;

&lt;p&gt;Altri elementi predefiniti del progetto sono la cartella &lt;em&gt;Riferimenti&lt;/em&gt;, che come in altre tipologie di progetto, rappresenta la cartella di “reference” alle librerie del .Net Framework, e la cartella &lt;em&gt;Properties&lt;/em&gt;, che include un file di risorse e l’AssemblyInfo.cs, che serve per definire informazioni riguardante l’assembly generato dall’applicazione.&lt;/p&gt;

&lt;p&gt;A questo punto non ci resta che aggiungere qualche controllo al nostro form e scrivere anche qualche riga di codice nella parte di code-behind relativa ai controlli che abbiamo aggiunto e premere F5 per testarla.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Testing e debugging dell’applicazione&lt;/h3&gt;

&lt;p&gt;Testare la propria applicazione per dispositivi mobile è come testare una semplice applicazione Web: basta premere F5 e attendere che Visual Studio setti l’ambiente di esecuzione. Unica differenza è però la scelta della piattaforma di destinazione. Uno sviluppatore può scegliere la tipologia di dispositivo in cui l’applicazione verrà deployata e verificare la corretta esecuzione della stessa. In questo ambito uno sviluppatore può scegliere se usare gli emulatori installati sulla macchina di sviluppo o se testare l’applicazione direttamente sul dispositivo fisico. In quest’ultimo caso, Visual Studio effettuerà una copia dell’applicazione nel dispositivo fisico e dopo eseguirà l’applicazione stessa.&lt;/p&gt;

&lt;p&gt;Anche per il debugging la situazione resta la stessa. Si hanno a disposizione i ben noti &lt;em&gt;breakpoint&lt;/em&gt;, che gli sviluppatori possono sistemare nei punti critici dell’applicazione per verificarne il corretto funzionamento.&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h3&gt;Packaging e deploying dell’applicazione&lt;/h3&gt;

&lt;p&gt;Una volta terminato lo sviluppo della propria applicazione, si può procedere con la creazione di un pacchetto di installazione della stessa. I pacchetti di installazione di software per dispositivi Windows Mobile vengono chiamati CAB (il nome deriva da &lt;em&gt;cabinet&lt;/em&gt; e porta l’estensione .cab). I file CAB non sono altri degli archivi eseguibili, che possono contenere al loro interno tutti i file correlati alla nostra applicazione (es.: dll, file di risorse, dipendenze…).&lt;/p&gt;

&lt;p&gt;Creare un CAB è semplice. Basta aggiungere alla propria soluzione un nuovo progetto, e selezionare nella finestra che si apre, la sezione ‘Installazione e distribuzione’ sotto la voce ‘Altri tipi di progetto’. Nel riquadro sulla destra compaiono diverse tipologie di progetto disponibili, e tra quelle presenti occorre selezionare ‘Progetto Cab per Smart Device’.&lt;/p&gt;

&lt;p&gt;Una volta aggiunto il progetto, vi comparirà la seguente schermata, in cui è necessario aggiungere i file relativi alla vostra applicazione.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="631" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In questa schermata occorre selezionare la Cartella Applicazione e dopo aver cliccato con il pulsante destro, vi si aprirà un menù contestuale in cui dovrete selezionare le voci: &lt;em&gt;Aggiungi –&amp;gt; Output Progetto.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="329" height="129" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Vi si aprirà la seguente schermata:&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" width="322" height="371" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;dove occorrerà selezionare &lt;em&gt;Output Primario&lt;/em&gt; per aggiungere l’output della nostra applicazione al pacchetto di installazione. Oltre all’output primario, possono essere aggiunti diversi file al CAB, come file di dipendenze, chiavi di registro, file di risorse, collegamenti ai menù di avvio. La modalità resta sempre la stessa (ovvero Aggiungi –&amp;gt; …). &lt;/p&gt;

&lt;p&gt;Fatto questo, occorrerà compilare la soluzione e nella cartella relativa alla stessa, sarà presente una nuova cartella relativa al file CAB e, in base alla configurazione di compilazione utizzata (debug/release), sarà presente una sottocartella che conterrà 3 files:&lt;/p&gt;

&lt;p&gt;1)Un file CAB (la nostra applicazione : ) );&lt;/p&gt;

&lt;p&gt;2)Un file INF (che contiene informazioni riguardanti la cartella di destinazione e i requisiti di sistema per eseguire l’applicazione);&lt;/p&gt;

&lt;p&gt;3)Un file di log (che contiene informazioni relative alla procedura di packaging).&lt;/p&gt;

&lt;p&gt;Per incrementare la fiducia degli utenti nei confronti della nostra applicazione, è anche possibile firmare il proprio CAB con un certificato rilasciato da un ente appropriato.&lt;/p&gt;

&lt;p&gt;A questo punto non resta che trasferire la nostra applicazione al dispositivo! Enjoy it!&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 2</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-2/revision/0.aspx</link><pubDate>Sun, 13 Dec 2009 22:16:10 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:21</guid><dc:creator>Alessandro Forte</dc:creator><description>Current revision posted to Articoli by Alessandro Forte on 13/12/2009 23:16:10&lt;br /&gt;
&lt;h2&gt;Progetto GeRi - Parte 2&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;Architettura&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Progetto&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;GeRi&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il secondo articolo di questa miniserie sullo sviluppo di un applicativo 
&amp;ldquo;enterprise&amp;rdquo; verter&amp;agrave; sulla descrizione del problema da risolvere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem &amp;ndash; Il Problema &lt;br /&gt;&lt;/strong&gt;GeRi &amp;egrave; una piattaforma 
software che nasce con lo scopo di gestire tutte le attivit&amp;agrave;, dirette e 
indirette, connesse ad una centro assistenza. &lt;br /&gt;In generale possiamo dire che 
il punto focale e primario di un centro assistenza (e di molte altre attivit&amp;agrave;, 
come in seguito approfondiremo), verte sul concetto di 
&lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;Possiamo sicuramente definire una riparazione 
come un &lt;span&gt;processo&lt;/span&gt;. &lt;br /&gt;In quanto 
tale essa &amp;egrave; caratterizzata da pi&amp;ugrave; &lt;span&gt;fasi&lt;/span&gt;, e da &lt;span&gt;diversi attori&lt;/span&gt; che prendono parte al 
processo. Addentriamoci quindi nel merito della descrizione delle fasi e degli 
attori che costituiscono il processo di riparazione.&lt;/p&gt;
&lt;p&gt;La prima fase del &lt;em&gt;nostro&lt;/em&gt; processo di riparazione &amp;egrave; denominata : 
&lt;strong&gt;Ingresso&lt;/strong&gt;. &lt;br /&gt;In questa fase un &lt;strong&gt;Utente&lt;/strong&gt;, 
possessore dell&amp;rsquo;oggetto da riparare, consegna il suddetto presso il centro di 
riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di ingresso, l&amp;rsquo;&lt;strong&gt;Operatore&lt;/strong&gt; 
deputato all&amp;rsquo;ingresso degli oggetti da riparare, prende in consegna l&amp;rsquo;oggetto da 
riparare compilando un&amp;rsquo;apposita &lt;span&gt;Scheda 
di Ingresso&lt;/span&gt;. &lt;br /&gt;Tale Scheda prevede l&amp;rsquo;inserimento di diverse 
informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anagrafica cliente (Inserimento o recupero di un&amp;rsquo;anagrafica gi&amp;agrave; esistente) 
&lt;/li&gt;
&lt;li&gt;Data di ingresso dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Dati di acquisto dell&amp;rsquo;oggetto nel caso in cui l&amp;rsquo;oggetto fosse in garanzia 
&lt;br /&gt;(incluse Tipo Documento Acquisto, Numero, Data) 
&lt;/li&gt;
&lt;li&gt;Descrizione caratteristiche dell&amp;rsquo;oggetto &lt;br /&gt;(incluse Tipologia, Marca, 
Modello, Numero Serie Primario e Secondario) 
&lt;/li&gt;
&lt;li&gt;Descrizione degli eventuali accessori consegnati con l&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione dello stato generale dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione preliminare del malfunzionamento 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali non conformit&amp;agrave; 
&lt;/li&gt;
&lt;li&gt;Locazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Eventuale acquisizione di un immagine dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Definizione dell&amp;rsquo;eventuale &amp;ldquo;muletto&amp;rdquo; e/o apparecchio di cortesia consegnato 
al cliente &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Codice riparazione (nella duplice modalit&amp;agrave; 
Testo/BarCode)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Operatore assegnato alla riparazione 
&lt;br /&gt;(L&amp;rsquo;assegnazione avviene per associazione diretta o tramite un apposito 
algoritmo)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Clausole contrattuali/legali legate alla 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di ingresso si conclude con la stampa 
della Scheda di Ingresso da consegnare al cliente come ricevuta. &lt;br /&gt;Tale 
ricevuta dovr&amp;agrave; successivamente essere presentata dall&amp;#39;utente per il ritiro 
dell&amp;#39;oggetto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;La seconda fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;In 
questa fase un &lt;strong&gt;Tecnico&lt;/strong&gt;, figura deputata alla riparazione 
dell&amp;rsquo;oggetto da riparare, prende in consegna l&amp;rsquo;oggetto (con la relativa scheda 
di ingresso) e comincia l&amp;rsquo;analisi della riparazione da effettuare. 
&lt;br /&gt;Nell&amp;rsquo;operazione di riparazione, il Tecnico deputato alla riparazione 
dell&amp;rsquo;oggetto da riparare, esegue le necessarie operazioni di analisi e 
riparazioni sull&amp;rsquo;oggetto e al termine dell&amp;rsquo;intervento compila un&amp;rsquo;apposita &lt;span&gt;Scheda di Intervento&lt;/span&gt;. &lt;br /&gt;Tale Scheda 
prevede l&amp;rsquo;inserimento di diverse informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descrizione della riparazione 
&lt;/li&gt;
&lt;li&gt;Definizione dei costi della riparazione &lt;br /&gt;(inclusi Costo Sostenuto [ricami 
+ manodopera], Costo Riparazione) 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali committenti e/o centri esterni di riparazione 
&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riparazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Notifica a mezzo SMS dell&amp;#39;avvenuta 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di riparazione pu&amp;ograve; &amp;ldquo;momentaneamente&amp;rdquo; 
interrompersi in virt&amp;ugrave; delle seguenti situazioni :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;
&lt;ol&gt;
&lt;li&gt;Attesa di ricambi 
&lt;/li&gt;
&lt;li&gt;Presentazione di un Preventivo, previa riparazione dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La fase di riparazione si conclude con la redazione, da parte del Tecnico, 
della Scheda di Intervento che descrive l&amp;rsquo;elenco delle operazioni effettuate. 
&lt;br /&gt;Idealmente tale documento dovrebbe essere storato all&amp;#39;interno di un DMS - 
Document Management System, o &amp;quot;allegato&amp;quot; alla riparazione stessa. Tale 
funzionalit&amp;agrave; sar&amp;agrave; oggetto di discussione nelle future 
implementazioni.&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;La terza ed ultima fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riconsegna&lt;/strong&gt;. &lt;br /&gt;In 
questa fase l&amp;#39;Utente, proprietario dell&amp;rsquo;oggetto da riparare, passa a ritirare il 
suddetto presso il centro di riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di riconsegna, 
l&amp;rsquo;Operatore deputato alla riconsegna degli oggetti da riparare, restituisce 
l&amp;rsquo;oggetto riparato stampando e consegnando al cliente l&amp;rsquo;apposita &lt;span&gt;Scheda di Ingresso&lt;/span&gt;.&amp;nbsp; &lt;br /&gt;Tale Scheda 
non prevede l&amp;rsquo;inserimento di alcuna informazione ma&lt;/span&gt;&lt;span&gt; contempla la generazione da parte del sistema delle 
seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riconsegna dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;La fase di 
riconsegna si conclude con la stampa della Scheda di Riconsegna da consegnare al 
cliente come ricevuta.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Queste operazioni concludono quello che abbiamo definito come processo di 
riparazione. &lt;br /&gt;Risulta chiaro dall&amp;#39;analisi, che connesse direttamente al 
processo di riparazione, ci sono tutta una serie di informazioni secondarie&amp;nbsp; non 
di minore importanza. &lt;br /&gt;In particolare il nostro sistema dovr&amp;agrave; contemplare la 
presenza di :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anagrafica Clienti, Fornitori, Centri Esterni di Assistenza, Committenti 
&lt;/li&gt;
&lt;li&gt;Tabelle, per l&amp;#39;inserimento rapido delle informazioni 
&lt;/li&gt;
&lt;li&gt;Aggancio a sistemi terzi per la notifica a mezzo SMS dello stato delle 
riparazioni &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ritengo concluso il secondo articolo della serie, che &amp;egrave; servito 
esclusivamente come descrizione del problema. &lt;br /&gt;Scopo del prossimo articolo 
sar&amp;agrave; quello di &amp;quot;&lt;span style="text-decoration:underline;"&gt;avanzare un proposta di architettura&lt;/span&gt;&amp;quot;. &lt;br /&gt;Non mi resta 
quindi che finire con il classico : &lt;br /&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt; See u in the next 
episode &lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt; 
&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Fonte&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt; 
&lt;br /&gt;&lt;br /&gt;Alessandro Forte -&amp;nbsp;&lt;a href="http://www.alessandroforte.it/"&gt;http://www.alessandroforte.it/&lt;/a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 2</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-2/revision/2.aspx</link><pubDate>Sun, 13 Dec 2009 19:55:50 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:55</guid><dc:creator>Alessandro Forte</dc:creator><description>Revision 2 posted to Articoli by Alessandro Forte on 13/12/2009 20:55:50&lt;br /&gt;
&lt;h2&gt;Progetto GeRi - Parte 2&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: Architettura&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Progetto&lt;/span&gt; GeRi&lt;/div&gt;

&lt;p&gt;
&lt;p&gt;Il secondo articolo di questa miniserie sullo sviluppo di un applicativo 
&amp;ldquo;enterprise&amp;rdquo; verter&amp;agrave; sulla descrizione del problema da risolvere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem &amp;ndash; Il Problema &lt;br /&gt;&lt;/strong&gt;GeRi &amp;egrave; una piattaforma 
software che nasce con lo scopo di gestire tutte le attivit&amp;agrave;, dirette e 
indirette, connesse ad una centro assistenza. &lt;br /&gt;In generale possiamo dire che 
il punto focale e primario di un centro assistenza (e di molte altre attivit&amp;agrave;, 
come in seguito approfondiremo), verte sul concetto di 
&lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;Possiamo sicuramente definire una riparazione 
come un &lt;span&gt;processo&lt;/span&gt;. &lt;br /&gt;In quanto 
tale essa &amp;egrave; caratterizzata da pi&amp;ugrave; &lt;span&gt;fasi&lt;/span&gt;, e da &lt;span&gt;diversi attori&lt;/span&gt; che prendono parte al 
processo. Addentriamoci quindi nel merito della descrizione delle fasi e degli 
attori che costituiscono il processo di riparazione.&lt;/p&gt;
&lt;p&gt;La prima fase del &lt;em&gt;nostro&lt;/em&gt; processo di riparazione &amp;egrave; denominata : 
&lt;strong&gt;Ingresso&lt;/strong&gt;. &lt;br /&gt;In questa fase un &lt;strong&gt;Utente&lt;/strong&gt;, 
possessore dell&amp;rsquo;oggetto da riparare, consegna il suddetto presso il centro di 
riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di ingresso, l&amp;rsquo;&lt;strong&gt;Operatore&lt;/strong&gt; 
deputato all&amp;rsquo;ingresso degli oggetti da riparare, prende in consegna l&amp;rsquo;oggetto da 
riparare compilando un&amp;rsquo;apposita &lt;span&gt;Scheda 
di Ingresso&lt;/span&gt;. &lt;br /&gt;Tale Scheda prevede l&amp;rsquo;inserimento di diverse 
informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anagrafica cliente (Inserimento o recupero di un&amp;rsquo;anagrafica gi&amp;agrave; esistente) 
&lt;/li&gt;
&lt;li&gt;Data di ingresso dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Dati di acquisto dell&amp;rsquo;oggetto nel caso in cui l&amp;rsquo;oggetto fosse in garanzia 
&lt;br /&gt;(incluse Tipo Documento Acquisto, Numero, Data) 
&lt;/li&gt;
&lt;li&gt;Descrizione caratteristiche dell&amp;rsquo;oggetto &lt;br /&gt;(incluse Tipologia, Marca, 
Modello, Numero Serie Primario e Secondario) 
&lt;/li&gt;
&lt;li&gt;Descrizione degli eventuali accessori consegnati con l&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione dello stato generale dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione preliminare del malfunzionamento 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali non conformit&amp;agrave; 
&lt;/li&gt;
&lt;li&gt;Locazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Eventuale acquisizione di un immagine dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Definizione dell&amp;rsquo;eventuale &amp;ldquo;muletto&amp;rdquo; e/o apparecchio di cortesia consegnato 
al cliente &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Codice riparazione (nella duplice modalit&amp;agrave; 
Testo/BarCode)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Operatore assegnato alla riparazione 
&lt;br /&gt;(L&amp;rsquo;assegnazione avviene per associazione diretta o tramite un apposito 
algoritmo)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Clausole contrattuali/legali legate alla 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di ingresso si conclude con la stampa 
della Scheda di Ingresso da consegnare al cliente come ricevuta. &lt;br /&gt;Tale 
ricevuta dovr&amp;agrave; successivamente essere presentata dall&amp;#39;utente per il ritiro 
dell&amp;#39;oggetto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;La seconda fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;In 
questa fase un &lt;strong&gt;Tecnico&lt;/strong&gt;, figura deputata alla riparazione 
dell&amp;rsquo;oggetto da riparare, prende in consegna l&amp;rsquo;oggetto (con la relativa scheda 
di ingresso) e comincia l&amp;rsquo;analisi della riparazione da effettuare. 
&lt;br /&gt;Nell&amp;rsquo;operazione di riparazione, il Tecnico deputato alla riparazione 
dell&amp;rsquo;oggetto da riparare, esegue le necessarie operazioni di analisi e 
riparazioni sull&amp;rsquo;oggetto e al termine dell&amp;rsquo;intervento compila un&amp;rsquo;apposita &lt;span&gt;Scheda di Intervento&lt;/span&gt;. &lt;br /&gt;Tale Scheda 
prevede l&amp;rsquo;inserimento di diverse informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descrizione della riparazione 
&lt;/li&gt;
&lt;li&gt;Definizione dei costi della riparazione &lt;br /&gt;(inclusi Costo Sostenuto [ricami 
+ manodopera], Costo Riparazione) 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali committenti e/o centri esterni di riparazione 
&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riparazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Notifica a mezzo SMS dell&amp;#39;avvenuta 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di riparazione pu&amp;ograve; &amp;ldquo;momentaneamente&amp;rdquo; 
interrompersi in virt&amp;ugrave; delle seguenti situazioni :&lt;/span&gt;&lt;/p&gt;
&lt;span&gt;
&lt;ol&gt;
&lt;li&gt;Attesa di ricambi 
&lt;/li&gt;
&lt;li&gt;Presentazione di un Preventivo, previa riparazione dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La fase di riparazione si conclude con la redazione, da parte del Tecnico, 
della Scheda di Intervento che descrive l&amp;rsquo;elenco delle operazioni effettuate. 
&lt;br /&gt;Idealmente tale documento dovrebbe essere storato all&amp;#39;interno di un DMS - 
Document Management System, o &amp;quot;allegato&amp;quot; alla riparazione stessa. Tale 
funzionalit&amp;agrave; sar&amp;agrave; oggetto di discussione nelle future 
implementazioni.&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;&lt;span&gt;La terza ed ultima fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riconsegna&lt;/strong&gt;. &lt;br /&gt;In 
questa fase l&amp;#39;Utente, proprietario dell&amp;rsquo;oggetto da riparare, passa a ritirare il 
suddetto presso il centro di riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di riconsegna, 
l&amp;rsquo;Operatore deputato alla riconsegna degli oggetti da riparare, restituisce 
l&amp;rsquo;oggetto riparato stampando e consegnando al cliente l&amp;rsquo;apposita &lt;span&gt;Scheda di Ingresso&lt;/span&gt;.&amp;nbsp; &lt;br /&gt;Tale Scheda 
non prevede l&amp;rsquo;inserimento di alcuna informazione ma&lt;/span&gt;&lt;span&gt; contempla la generazione da parte del sistema delle 
seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riconsegna dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;La fase di 
riconsegna si conclude con la stampa della Scheda di Riconsegna da consegnare al 
cliente come ricevuta.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Queste operazioni concludono quello che abbiamo definito come processo di 
riparazione. &lt;br /&gt;Risulta chiaro dall&amp;#39;analisi, che connesse direttamente al 
processo di riparazione, ci sono tutta una serie di informazioni secondarie&amp;nbsp; non 
di minore importanza. &lt;br /&gt;In particolare il nostro sistema dovr&amp;agrave; contemplare la 
presenza di :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anagrafica Clienti, Fornitori, Centri Esterni di Assistenza, Committenti 
&lt;/li&gt;
&lt;li&gt;Tabelle, per l&amp;#39;inserimento rapido delle informazioni 
&lt;/li&gt;
&lt;li&gt;Aggancio a sistemi terzi per la notifica a mezzo SMS dello stato delle 
riparazioni &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ritengo concluso il secondo articolo della serie, che &amp;egrave; servito 
esclusivamente come descrizione del problema. &lt;br /&gt;Scopo del prossimo articolo 
sar&amp;agrave; quello di &amp;quot;&lt;span style="text-decoration:underline;"&gt;avanzare un proposta di architettura&lt;/span&gt;&amp;quot;. &lt;br /&gt;Non mi resta 
quindi che finire con il classico : &lt;br /&gt;&lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt; See u in the next 
episode &lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt; 
&lt;br /&gt;&lt;br /&gt;(Fonte : Alessandro Forte - &lt;a href="http://www.alessandroforte.it/"&gt;http://www.alessandroforte.it/&lt;/a&gt;)&lt;/p&gt;
&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 2</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-2/revision/1.aspx</link><pubDate>Sun, 13 Dec 2009 19:55:50 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:53</guid><dc:creator>Alessandro Forte</dc:creator><description>Revision 1 posted to Articoli by Alessandro Forte on 13/12/2009 20:55:50&lt;br /&gt;
&lt;p&gt;
&lt;p&gt;Il secondo articolo di questa miniserie sullo sviluppo di un applicativo 
&amp;ldquo;enterprise&amp;rdquo; verter&amp;agrave; sulla descrizione del problema da risolvere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem &amp;ndash; Il Problema &lt;br /&gt;&lt;/strong&gt;GeRi &amp;egrave; una piattaforma 
software che nasce con lo scopo di gestire tutte le attivit&amp;agrave;, dirette e 
indirette, connesse ad una centro assistenza. &lt;br /&gt;In generale possiamo dire che 
il punto focale e primario di un centro assistenza (e di molte altre attivit&amp;agrave;, 
come in seguito approfondiremo), verte sul concetto di 
&lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;Possiamo sicuramente definire una riparazione 
come un &lt;span&gt;processo&lt;/span&gt;. &lt;br /&gt;In quanto 
tale essa &amp;egrave; caratterizzata da pi&amp;ugrave; &lt;span&gt;fasi&lt;/span&gt;, e da &lt;span&gt;diversi attori&lt;/span&gt; che prendono parte al 
processo. Addentriamoci quindi nel merito della descrizione delle fasi e degli 
attori che costituiscono il processo di riparazione.&lt;/p&gt;
&lt;p&gt;La prima fase del &lt;em&gt;nostro&lt;/em&gt; processo di riparazione &amp;egrave; denominata : 
&lt;strong&gt;Ingresso&lt;/strong&gt;. &lt;br /&gt;In questa fase un &lt;strong&gt;Utente&lt;/strong&gt;, 
possessore dell&amp;rsquo;oggetto da riparare, consegna il suddetto presso il centro di 
riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di ingresso, l&amp;rsquo;&lt;strong&gt;Operatore&lt;/strong&gt; 
deputato all&amp;rsquo;ingresso degli oggetti da riparare, prende in consegna l&amp;rsquo;oggetto da 
riparare compilando un&amp;rsquo;apposita &lt;span&gt;Scheda 
di Ingresso&lt;/span&gt;. &lt;br /&gt;Tale Scheda prevede l&amp;rsquo;inserimento di diverse 
informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anagrafica cliente (Inserimento o recupero di un&amp;rsquo;anagrafica gi&amp;agrave; esistente) 
&lt;/li&gt;
&lt;li&gt;Data di ingresso dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Dati di acquisto dell&amp;rsquo;oggetto nel caso in cui l&amp;rsquo;oggetto fosse in garanzia 
&lt;br /&gt;(incluse Tipo Documento Acquisto, Numero, Data) 
&lt;/li&gt;
&lt;li&gt;Descrizione caratteristiche dell&amp;rsquo;oggetto &lt;br /&gt;(incluse Tipologia, Marca, 
Modello, Numero Serie Primario e Secondario) 
&lt;/li&gt;
&lt;li&gt;Descrizione degli eventuali accessori consegnati con l&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione dello stato generale dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Descrizione preliminare del malfunzionamento 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali non conformit&amp;agrave; 
&lt;/li&gt;
&lt;li&gt;Locazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Eventuale acquisizione di un immagine dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;Definizione dell&amp;rsquo;eventuale &amp;ldquo;muletto&amp;rdquo; e/o apparecchio di cortesia consegnato 
al cliente &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Codice riparazione (nella duplice modalit&amp;agrave; 
Testo/BarCode)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Operatore assegnato alla riparazione 
&lt;br /&gt;(L&amp;rsquo;assegnazione avviene per associazione diretta o tramite un apposito 
algoritmo)&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Clausole contrattuali/legali legate alla 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di ingresso si conclude con la stampa 
della Scheda di Ingresso da consegnare al cliente come ricevuta. &lt;br /&gt;Tale 
ricevuta dovr&amp;agrave; successivamente essere presentata dall&amp;#39;utente per il ritiro 
dell&amp;#39;oggetto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;La seconda fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riparazione&lt;/strong&gt;. &lt;br /&gt;In 
questa fase un &lt;strong&gt;Tecnico&lt;/strong&gt;, figura deputata alla riparazione 
dell&amp;rsquo;oggetto da riparare, prende in consegna l&amp;rsquo;oggetto (con la relativa scheda 
di ingresso) e comincia l&amp;rsquo;analisi della riparazione da effettuare. 
&lt;br /&gt;Nell&amp;rsquo;operazione di riparazione, il Tecnico deputato alla riparazione 
dell&amp;rsquo;oggetto da riparare, esegue le necessarie operazioni di analisi e 
riparazioni sull&amp;rsquo;oggetto e al termine dell&amp;rsquo;intervento compila un&amp;rsquo;apposita &lt;span&gt;Scheda di Intervento&lt;/span&gt;. &lt;br /&gt;Tale Scheda 
prevede l&amp;rsquo;inserimento di diverse informazioni, di seguito elencate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descrizione della riparazione 
&lt;/li&gt;
&lt;li&gt;Definizione dei costi della riparazione &lt;br /&gt;(inclusi Costo Sostenuto [ricami 
+ manodopera], Costo Riparazione) 
&lt;/li&gt;
&lt;li&gt;Descrizione di eventuali committenti e/o centri esterni di riparazione 
&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;mentre contempla la generazione da parte del 
sistema delle seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riparazione dell&amp;rsquo;oggetto 
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Notifica a mezzo SMS dell&amp;#39;avvenuta 
riparazione&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;La fase di riparazione pu&amp;ograve; &amp;ldquo;momentaneamente&amp;rdquo; 
interrompersi in virt&amp;ugrave; delle seguenti situazioni :&lt;/span&gt;&lt;/p&gt;
&lt;span&gt;
&lt;ol&gt;
&lt;li&gt;Attesa di ricambi 
&lt;/li&gt;
&lt;li&gt;Presentazione di un Preventivo, previa riparazione dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La fase di riparazione si conclude con la redazione, da parte del Tecnico, 
della Scheda di Intervento che descrive l&amp;rsquo;elenco delle operazioni effettuate. 
&lt;br /&gt;Idealmente tale documento dovrebbe essere storato all&amp;#39;interno di un DMS - 
Document Management System, o &amp;quot;allegato&amp;quot; alla riparazione stessa. Tale 
funzionalit&amp;agrave; sar&amp;agrave; oggetto di discussione nelle future 
implementazioni.&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;&lt;span&gt;La terza ed ultima fase del &lt;em&gt;nostro&lt;/em&gt; 
processo di riparazione &amp;egrave; denominata : &lt;strong&gt;Riconsegna&lt;/strong&gt;. &lt;br /&gt;In 
questa fase l&amp;#39;Utente, proprietario dell&amp;rsquo;oggetto da riparare, passa a ritirare il 
suddetto presso il centro di riparazione. &lt;br /&gt;Nell&amp;rsquo;operazione di riconsegna, 
l&amp;rsquo;Operatore deputato alla riconsegna degli oggetti da riparare, restituisce 
l&amp;rsquo;oggetto riparato stampando e consegnando al cliente l&amp;rsquo;apposita &lt;span&gt;Scheda di Ingresso&lt;/span&gt;.&amp;nbsp; &lt;br /&gt;Tale Scheda 
non prevede l&amp;rsquo;inserimento di alcuna informazione ma&lt;/span&gt;&lt;span&gt; contempla la generazione da parte del sistema delle 
seguenti informazioni : &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Cambiamento dello stato della 
riparazione&lt;/span&gt; 
&lt;/li&gt;
&lt;li&gt;Data di riconsegna dell&amp;rsquo;oggetto &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;La fase di 
riconsegna si conclude con la stampa della Scheda di Riconsegna da consegnare al 
cliente come ricevuta.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Queste operazioni concludono quello che abbiamo definito come processo di 
riparazione. &lt;br /&gt;Risulta chiaro dall&amp;#39;analisi, che connesse direttamente al 
processo di riparazione, ci sono tutta una serie di informazioni secondarie&amp;nbsp; non 
di minore importanza. &lt;br /&gt;In particolare il nostro sistema dovr&amp;agrave; contemplare la 
presenza di :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Anagrafica Clienti, Fornitori, Centri Esterni di Assistenza, Committenti 
&lt;/li&gt;
&lt;li&gt;Tabelle, per l&amp;#39;inserimento rapido delle informazioni 
&lt;/li&gt;
&lt;li&gt;Aggancio a sistemi terzi per la notifica a mezzo SMS dello stato delle 
riparazioni &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ritengo concluso il secondo articolo della serie, che &amp;egrave; servito 
esclusivamente come descrizione del problema. &lt;br /&gt;Scopo del prossimo articolo 
sar&amp;agrave; quello di &amp;quot;&lt;span style="text-decoration:underline;"&gt;avanzare un proposta di architettura&lt;/span&gt;&amp;quot;. &lt;br /&gt;Non mi resta 
quindi che finire con il classico : &lt;br /&gt;&lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt; See u in the next 
episode &lt;img src="http://dotnetcampania.org/emoticons/emotion-55.gif" alt="Idea" /&gt; 
&lt;br /&gt;&lt;br /&gt;(Fonte : Alessandro Forte - &lt;a href="http://www.alessandroforte.it/"&gt;http://www.alessandroforte.it/&lt;/a&gt;)&lt;/p&gt;
&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 1</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-1/revision/0.aspx</link><pubDate>Sun, 13 Dec 2009 22:15:59 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:20</guid><dc:creator>Alessandro Forte</dc:creator><description>Current revision posted to Articoli by Alessandro Forte on 13/12/2009 23:15:59&lt;br /&gt;
&lt;h2&gt;Progetto GeRi - Parte 1&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;Architettura&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Progetto&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;GeRi&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;Dopo tantissimo tempo torno a scrivere un articolo e lo faccio animato dalle migliori intenzioni.&lt;/p&gt;
&lt;p&gt;
In questa serie di articoli, mi pongo un duplice obiettivo.
Il &lt;em&gt;&lt;strong&gt;primo&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;&amp;egrave; quello di portare a termine un lavoro che mi hanno commissionato.
Il &lt;em&gt;&lt;strong&gt;secondo &lt;/strong&gt;&lt;/em&gt;&amp;egrave; quello, ben pi&amp;ugrave; sperimentale e interessante, di portare a compimento il lavoro che mi hanno commissionato tramite il vostro aiuto, rendendo poi libero il codice sorgente dell&amp;#39;applicativo.
Ho pensato di sviluppare il primo open source software in Co-Produzione con i miei utenti.
&lt;br /&gt;E ho deciso di sfruttare sia il &lt;a href="http://www.alessandroforte.it" target="_blank"&gt;mio blog personale&lt;/a&gt; che quello dello &lt;a href="http://www.dotnetcampania.org"&gt;UG &lt;/a&gt;a cui appartengo per diffondere e rendere noto il mio progetto.
Per Co-Produzione (o per meglio dire Co-Design/Co-Production/Co-Brand) intendo la capacit&amp;agrave;, partendo da miei suggerimenti, di raffinare i concetti basandomi totalmente sui vostri suggerimenti e vagliandoli uno ad uno.
Ma passiamo subito alla fase operativa e cerchiamo di capire :
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cosa dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Come lo dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Chi lo deve realizzare?&lt;/li&gt;
&lt;li&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Rispondiamo per punti alle varie domande, partendo in ordine inverso.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme
&lt;span style="font-weight:normal;"&gt;Il concetto di Co-Design, Co-Produzione, ecc... mi &amp;egrave; venuto leggendo una nota rivista. Viene attualmente utilizzato in moltissimi settori e anche in informatica.
Ovviamente nel settore informatico l&amp;#39;Open Source ne rappresenta un degno esempio .&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi lo deve realizzare&lt;/strong&gt;
Io sar&amp;ograve; il primo sviluppatore &amp;quot;ufficiale&amp;quot; (diciamo che quasi non ve l&amp;#39;aspettavate giusto?).
A me si aggiungeranno tutti colori i quali saranno ritenuti validi al corretto svolgimento delle attivit&amp;agrave;.
Per validit&amp;agrave; non intendo solo il punto di vista strettamente tecnico, ma anche e sopratutto coloro i quali mostreranno seriet&amp;agrave; e dedizione.
Spero di avervi convinto almeno un p&amp;ograve;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Come lo dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Ecco qui viene il bello della faccenda. Poich&amp;egrave; io questo sistema lo devo realizzare e commercializzare, proporr&amp;ograve; step by step la mia visione del lavoro. Abbraccer&amp;ograve; tutti i punti di vista. Spazier&amp;ograve; dall&amp;#39;architettura, all&amp;#39;organizzazione del codice, alla schedulazione delle milestones, ecc...
&lt;/span&gt;&lt;span style="font-weight:normal;"&gt;Ma il punto di forza del progetto, come gi&amp;agrave; ripetuto diverse volte, sar&amp;agrave; la vostra visione e il vostro modo di interagire con il sottoscritto apponendo critiche e suggerimenti alle soluzioni che di volta in volta proporr&amp;ograve;
&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;Cosa dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Il progetto da realizzare &amp;egrave; il GeRi acronimo di &lt;/span&gt;Ge&lt;span style="font-weight:normal;"&gt;stione &lt;/span&gt;Ri&lt;span style="font-weight:normal;"&gt;parazioni.
Il software in questione dovr&amp;agrave; risolvere tutti i problemi (e vi assicuro che ve ne sono tanti) legati alla gestione delle riparazioni. Inoltre il termine Riparazione deve assolvere a qualunque significato gli sia dato all&amp;#39;interno di contesti diversi quali possa essere un centro di assistenza telefonica piuttuosto che un negozio di computer.
&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;
Ritengo concluso il mio primo articolo della serie, che &amp;egrave; servito esclusivamente come manifesto.
Scopo del prossimo articolo sar&amp;agrave; quello di stilere un programma cominciando a definire i vari ToDo.
Tutto questo in preparazione dei primi articoli veri e proprii che verteranno sull&amp;#39;acquisizione dei requisiti, sull&amp;#39;architettura sul sistema, e su come realizzare il sistema in esame.
Non mi resta quindi che finire con il classico :&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="background: SpringGreen;"&gt;&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt; See u in the next episode &lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Fonte&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Alessandro Forte -&amp;nbsp;&lt;a href="http://www.alessandroforte.it/"&gt;http://www.alessandroforte.it/&lt;/a&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 1</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-1/revision/2.aspx</link><pubDate>Sun, 13 Dec 2009 19:56:23 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:54</guid><dc:creator>Alessandro Forte</dc:creator><description>Revision 2 posted to Articoli by Alessandro Forte on 13/12/2009 20:56:23&lt;br /&gt;
&lt;h2&gt;Progetto GeRi - Parte 1&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: Architettura, &lt;span style="text-decoration: line-through; color: red;"&gt;asp.net&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;tutorials&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;certificazioni&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Progetto&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;GeRi&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;Dopo tantissimo tempo torno a scrivere un articolo e lo faccio animato dalle migliori intenzioni.&lt;/p&gt;
&lt;p&gt;
In questa serie di articoli, mi pongo un duplice obiettivo.
Il &lt;em&gt;&lt;strong&gt;primo&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;&amp;egrave; quello di portare a termine un lavoro che mi hanno commissionato.
Il &lt;em&gt;&lt;strong&gt;secondo &lt;/strong&gt;&lt;/em&gt;&amp;egrave; quello, ben pi&amp;ugrave; sperimentale e interessante, di portare a compimento il lavoro che mi hanno commissionato tramite il vostro aiuto, rendendo poi libero il codice sorgente dell&amp;#39;applicativo.
Ho pensato di sviluppare il primo open source software in Co-Produzione con i miei utenti.
&lt;br /&gt;E ho deciso di sfruttare sia il &lt;a target="_blank" href="http://www.alessandroforte.it"&gt;mio blog personale&lt;/a&gt; che quello dello &lt;a href="http://www.dotnetcampania.org"&gt;UG &lt;/a&gt;a cui appartengo per diffondere e rendere noto il mio progetto.
Per Co-Produzione (o per meglio dire Co-Design/Co-Production/Co-Brand) intendo la capacit&amp;agrave;, partendo da miei suggerimenti, di raffinare i concetti basandomi totalmente sui vostri suggerimenti e vagliandoli uno ad uno.
Ma passiamo subito alla fase operativa e cerchiamo di capire :
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cosa dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Come lo dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Chi lo deve realizzare?&lt;/li&gt;
&lt;li&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Rispondiamo per punti alle varie domande, partendo in ordine inverso.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme
&lt;span style="font-weight:normal;"&gt;Il concetto di Co-Design, Co-Produzione, ecc... mi &amp;egrave; venuto leggendo una nota rivista. Viene attualmente utilizzato in moltissimi settori e anche in informatica.
Ovviamente nel settore informatico l&amp;#39;Open Source ne rappresenta un degno esempio .&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi lo deve realizzare&lt;/strong&gt;
Io sar&amp;ograve; il primo sviluppatore &amp;quot;ufficiale&amp;quot; (diciamo che quasi non ve l&amp;#39;aspettavate giusto?).
A me si aggiungeranno tutti colori i quali saranno ritenuti validi al corretto svolgimento delle attivit&amp;agrave;.
Per validit&amp;agrave; non intendo solo il punto di vista strettamente tecnico, ma anche e sopratutto coloro i quali mostreranno seriet&amp;agrave; e dedizione.
Spero di avervi convinto almeno un p&amp;ograve;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Come lo dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Ecco qui viene il bello della faccenda. Poich&amp;egrave; io questo sistema lo devo realizzare e commercializzare, proporr&amp;ograve; step by step la mia visione del lavoro. Abbraccer&amp;ograve; tutti i punti di vista. Spazier&amp;ograve; dall&amp;#39;architettura, all&amp;#39;organizzazione del codice, alla schedulazione delle milestones, ecc...
&lt;/span&gt;&lt;span style="font-weight:normal;"&gt;Ma il punto di forza del progetto, come gi&amp;agrave; ripetuto diverse volte, sar&amp;agrave; la vostra visione e il vostro modo di interagire con il sottoscritto apponendo critiche e suggerimenti alle soluzioni che di volta in volta proporr&amp;ograve;
&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;Cosa dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Il progetto da realizzare &amp;egrave; il GeRi acronimo di &lt;/span&gt;Ge&lt;span style="font-weight:normal;"&gt;stione &lt;/span&gt;Ri&lt;span style="font-weight:normal;"&gt;parazioni.
Il software in questione dovr&amp;agrave; risolvere tutti i problemi (e vi assicuro che ve ne sono tanti) legati alla gestione delle riparazioni. Inoltre il termine Riparazione deve assolvere a qualunque significato gli sia dato all&amp;#39;interno di contesti diversi quali possa essere un centro di assistenza telefonica piuttuosto che un negozio di computer.
&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;
Ritengo concluso il mio primo articolo della serie, che &amp;egrave; servito esclusivamente come manifesto.
Scopo del prossimo articolo sar&amp;agrave; quello di stilere un programma cominciando a definire i vari ToDo.
Tutto questo in preparazione dei primi articoli veri e proprii che verteranno sull&amp;#39;acquisizione dei requisiti, sull&amp;#39;architettura sul sistema, e su come realizzare il sistema in esame.
Non mi resta quindi che finire con il classico :&lt;/p&gt;
&lt;p&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="background: SpringGreen;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt; See u in the next episode &lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img alt="Idea" src="/emoticons/emotion-55.gif" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;Fonte&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Alessandro&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Forte&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;-&lt;/span&gt;&amp;nbsp;&lt;a href="http://www.alessandroforte.it/"&gt;&lt;span style="background: SpringGreen;"&gt;http://www.alessandroforte.it&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;/a&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Progetto GeRi - Parte 1</title><link>http://dotnetcampania.org/wikis/articoli/progetto-geri-parte-1/revision/1.aspx</link><pubDate>Tue, 29 Sep 2009 09:27:58 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:52</guid><dc:creator>Alessandro Forte</dc:creator><description>Revision 1 posted to Articoli by Alessandro Forte on 29/09/2009 11:27:58&lt;br /&gt;
&lt;p&gt;Dopo tantissimo tempo torno a scrivere un articolo e lo faccio animato dalle migliori intenzioni.&lt;/p&gt;
&lt;p&gt;
In questa serie di articoli, mi pongo un duplice obiettivo.
Il &lt;em&gt;&lt;strong&gt;primo&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;&amp;egrave; quello di portare a termine un lavoro che mi hanno commissionato.
Il &lt;em&gt;&lt;strong&gt;secondo &lt;/strong&gt;&lt;/em&gt;&amp;egrave; quello, ben pi&amp;ugrave; sperimentale e interessante, di portare a compimento il lavoro che mi hanno commissionato tramite il vostro aiuto, rendendo poi libero il codice sorgente dell&amp;#39;applicativo.
Ho pensato di sviluppare il primo open source software in Co-Produzione con i miei utenti.
&lt;br /&gt;E ho deciso di sfruttare sia il &lt;a href="http://www.alessandroforte.it" target="_blank"&gt;mio blog personale&lt;/a&gt; che quello dello &lt;a href="http://www.dotnetcampania.org"&gt;UG &lt;/a&gt;a cui appartengo per diffondere e rendere noto il mio progetto.
Per Co-Produzione (o per meglio dire Co-Design/Co-Production/Co-Brand) intendo la capacit&amp;agrave;, partendo da miei suggerimenti, di raffinare i concetti basandomi totalmente sui vostri suggerimenti e vagliandoli uno ad uno.
Ma passiamo subito alla fase operativa e cerchiamo di capire :
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cosa dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Come lo dobbiamo realizzare?&lt;/li&gt;
&lt;li&gt;Chi lo deve realizzare?&lt;/li&gt;
&lt;li&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Rispondiamo per punti alle varie domande, partendo in ordine inverso.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Perch&amp;egrave; lo dobbiamo realizzare insieme
&lt;span style="font-weight:normal;"&gt;Il concetto di Co-Design, Co-Produzione, ecc... mi &amp;egrave; venuto leggendo una nota rivista. Viene attualmente utilizzato in moltissimi settori e anche in informatica.
Ovviamente nel settore informatico l&amp;#39;Open Source ne rappresenta un degno esempio .&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi lo deve realizzare&lt;/strong&gt;
Io sar&amp;ograve; il primo sviluppatore &amp;quot;ufficiale&amp;quot; (diciamo che quasi non ve l&amp;#39;aspettavate giusto?).
A me si aggiungeranno tutti colori i quali saranno ritenuti validi al corretto svolgimento delle attivit&amp;agrave;.
Per validit&amp;agrave; non intendo solo il punto di vista strettamente tecnico, ma anche e sopratutto coloro i quali mostreranno seriet&amp;agrave; e dedizione.
Spero di avervi convinto almeno un p&amp;ograve;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Come lo dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Ecco qui viene il bello della faccenda. Poich&amp;egrave; io questo sistema lo devo realizzare e commercializzare, proporr&amp;ograve; step by step la mia visione del lavoro. Abbraccer&amp;ograve; tutti i punti di vista. Spazier&amp;ograve; dall&amp;#39;architettura, all&amp;#39;organizzazione del codice, alla schedulazione delle milestones, ecc...
&lt;/span&gt;&lt;span style="font-weight:normal;"&gt;Ma il punto di forza del progetto, come gi&amp;agrave; ripetuto diverse volte, sar&amp;agrave; la vostra visione e il vostro modo di interagire con il sottoscritto apponendo critiche e suggerimenti alle soluzioni che di volta in volta proporr&amp;ograve;
&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;Cosa dobbiamo realizzare
&lt;span style="font-weight:normal;"&gt;Il progetto da realizzare &amp;egrave; il GeRi acronimo di &lt;/span&gt;Ge&lt;span style="font-weight:normal;"&gt;stione &lt;/span&gt;Ri&lt;span style="font-weight:normal;"&gt;parazioni.
Il software in questione dovr&amp;agrave; risolvere tutti i problemi (e vi assicuro che ve ne sono tanti) legati alla gestione delle riparazioni. Inoltre il termine Riparazione deve assolvere a qualunque significato gli sia dato all&amp;#39;interno di contesti diversi quali possa essere un centro di assistenza telefonica piuttuosto che un negozio di computer.
&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;
&lt;strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/strong&gt;
Ritengo concluso il mio primo articolo della serie, che &amp;egrave; servito esclusivamente come manifesto.
Scopo del prossimo articolo sar&amp;agrave; quello di stilere un programma cominciando a definire i vari ToDo.
Tutto questo in preparazione dei primi articoli veri e proprii che verteranno sull&amp;#39;acquisizione dei requisiti, sull&amp;#39;architettura sul sistema, e su come realizzare il sistema in esame.
Non mi resta quindi che finire con il classico :&lt;/p&gt;
&lt;p&gt;
&lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt; See u in the next episode &lt;img src="/emoticons/emotion-55.gif" alt="Idea" /&gt;&lt;/p&gt;</description></item><item><title>Espression Studio: uno sguardo d'insieme</title><link>http://dotnetcampania.org/wikis/articoli/espression-studio-uno-sguardo-d-insieme/revision/0.aspx</link><pubDate>Tue, 22 Sep 2009 12:25:40 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:19</guid><dc:creator>Carmine Alfano</dc:creator><description>Current revision posted to Articoli by Carmine Alfano on 22/09/2009 14:25:40&lt;br /&gt;
&lt;h2&gt;Espression Studio: uno sguardo d&amp;#39;insieme&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: &lt;span style="text-decoration: line-through; color: red;"&gt;Expression&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Studio&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Blend&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Silverlight&lt;/span&gt;&lt;/div&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;la&lt;/span&gt; &lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="background: SpringGreen;"&gt;La&lt;/span&gt; prima incursione da parte di Microsoft nel campo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;della progettazione grafica professionale giunge ormai alla terza &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;edizione, il pacchetto comprende: applicazioni web, progettazione, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;gestione di contenuti multimediali e animazione su linea cronologica.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;I programmi pi&amp;ugrave; interessanti della suite sono: &lt;strong&gt;Expression Design&lt;/strong&gt;, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;Expression Web&lt;/strong&gt;, &lt;strong&gt;Expression Blend&lt;/strong&gt;. Tralasciamo quindi per questa volta &lt;strong&gt;Expression Encoder.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION DESIGN&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Design &amp;egrave; un software per la grafica vettoriale orientato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;esclusivamente al web, lavorare in dtp (desktop publishing) risulterebbe &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;impossibile a causa della mancanza del supporto CMYK per le stampe con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;separazioni di colore. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia &amp;egrave; stata studiata andando incontro &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alle esigenze di progettisti e webdesigner che per anni hanno utilizzato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;soltanto Freehand e Illustrator: un esempio eclatante &amp;egrave; quello delle &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;scorciatoie da tastiera del tutto simili ai software sopracitati. &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Qualcuno potrebbe obiettare che Design sia la copia sfacciata di &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Illustrator, a questo punto vorrei aprire una piccola parentesi: dobbiamo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;considerare il software di casa Adobe dal 1986 sul mercato, come uno &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;standard, infatti anche Macromedia Freehand traeva spunto dal suo (ex) &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;rivale. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg" border="0" alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg" alt="" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia nera e grigia &amp;egrave; molto elegante ma lavorando per ore su un &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;progetto potrebbe stancare la vista, possiamo risolvere in parte il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;problema selezionando expression chiaro dal pannello delle opzioni.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg" border="0" alt="" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg" alt="" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Personalmente ritengo Design un software dalle grandi potenzialit&amp;agrave; ma &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ancora troppo giovane per un confronto diretto con i suoi concorrenti.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION WEB&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;In casa Microsoft si sentiva da troppo tempo la mancanza di un software &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;WYSIWYG professionale per la realizzazione di pagine web, ecco il motivo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;per il quale Frontpage dal 2006 ha ceduto il passo ad Expression Web. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;programma permette di lavorare agevolmente con javascript, CSS e tutte le &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologie del web 2.0, offre inoltre il supporto per la codifica ASP.NET, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;elemento non di poca importanza, perch&amp;eacute;, come vedremo pi&amp;ugrave; avanti, la &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologia Microsoft per le applicazioni web, rappresenta il nucleo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essenziale di Expression Studio. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Anche in questo caso l&amp;rsquo;interfaccia &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;stata studiata per ottimizzare il flusso di lavoro del webdesigner, molto &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;semplice ed intuitiva permette anche di disegnare i DIV direttamente sul &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;piano di lavoro, inoltre, dalla versione 2.0, ha aggiunto il supporto per &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;PHP, file Silverlight e Flash. Includendo un filmato flash, Expression web oltre a creare il codice html c&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;orrispondente, consente di modificare i parametri di visualizzazione e &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alcuni attributi necessari al controllo del filmato. Per silverlight &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;possibile sia modificare le pagine html generate da Expression encoder o &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Blend sia includere un&amp;rsquo;applicazione silverlight direttamente &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;all&amp;rsquo;interno della pagina. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Le immagini create con Photoshop e salvate in formato .PSD hanno un loro, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;seppur minimale, pannello di controllo, inserendo un&amp;rsquo;immagine di questo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tipo &amp;egrave; possibile scegliere dal pannello solo i livelli che si desidera &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;importare e il tipo di compressione da usare sulla foto, la foto pu&amp;ograve; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essere convertita in formato gif png o jpg e la sua qualit&amp;agrave; viene mostrata &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;immediatamente dalla finestra d&amp;rsquo;anteprima.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression web &amp;egrave; un software maturo molto pratico ed essenziale nell&amp;rsquo;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;interfaccia.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION BLEND&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Che cos&amp;rsquo;&amp;egrave; Blend, o sarebbe meglio dire: cos&amp;rsquo;&amp;egrave; Silverlight? Procediamo con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ordine. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Blend &amp;egrave; il programma che ci permette di realizzare filmati &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;multimediali e applicazioni sfruttando la tecnologia Silverlight. Silverlight si potrebbe considerare come la risposta di Microsoft a Flash &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ma in realt&amp;agrave; si tratta di una tecnologia molto pi&amp;ugrave; complessa.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;I vantaggi &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essenziali di Silverlight sono una gestione pi&amp;ugrave; fluida dei materiali video &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ad alta definizione e una maggiore facilit&amp;agrave; di creazione di applicazioni &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;per l&amp;rsquo;utente. Silverlight utilizza inoltre un linguaggio di programmazione a base &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;testuale denominato XAML, che a differenza di Flash pu&amp;ograve; essere facilmente &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;rilevato dai motori di ricerca. Inoltre con Blend abbiamo la possibilit&amp;agrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;di realizzare delle applicazioni desktop, realizzando i layout da zero.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg" border="0" alt="" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg"&gt;&lt;span style="background: SpringGreen;"&gt;&lt;img border="0" src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg" alt="" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Chi &amp;egrave; abituato ad utilizzare Flash si trover&amp;agrave; in difficolt&amp;agrave; al primo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;approccio con Blend: l&amp;rsquo;interfaccia &amp;egrave; totalmente diversa, un p&amp;ograve; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;confusionaria, a parte questo piccolo tallone d&amp;rsquo;Achille, stiamo parlando &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;di un software dalle grandi capacit&amp;agrave; in grado di snellire i flussi di &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;lavoro tra designer e programmatori.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;CONCLUSIONI&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Studio rappresenta, nonostante le pecche, tra &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;cui &lt;span style="text-decoration: line-through; color: red;"&gt;anche&lt;/span&gt; la mancanza di una versione per Apple Mac, un prodotto valido &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;anche in ambito professionale, e merita senza dubbio di essere preso in considerazione.&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Espression Studio: uno sguardo d'insieme</title><link>http://dotnetcampania.org/wikis/articoli/espression-studio-uno-sguardo-d-insieme/revision/2.aspx</link><pubDate>Tue, 22 Sep 2009 11:53:04 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:51</guid><dc:creator>Carmine Alfano</dc:creator><description>Revision 2 posted to Articoli by Carmine Alfano on 22/09/2009 13:53:04&lt;br /&gt;
&lt;h2&gt;Espression Studio: uno sguardo d&amp;#39;insieme&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Inserito sotto: Expression Studio, Blend, Silverlight&lt;/div&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;la prima incursione da parte di Microsoft nel campo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;della progettazione grafica professionale giunge ormai alla terza &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;edizione, il pacchetto comprende: applicazioni web, progettazione, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;gestione di contenuti multimediali e animazione su linea cronologica.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;I programmi pi&amp;ugrave; interessanti della suite sono: &lt;strong&gt;Expression Design&lt;/strong&gt;, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;Expression Web&lt;/strong&gt;, &lt;strong&gt;Expression Blend&lt;/strong&gt;. Tralasciamo quindi per questa volta &lt;strong&gt;Expression Encoder.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION DESIGN&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Design &amp;egrave; un software per la grafica vettoriale orientato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;esclusivamente al web, lavorare in dtp (desktop publishing) risulterebbe &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;impossibile a causa della mancanza del supporto CMYK per le stampe con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;separazioni di colore. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia &amp;egrave; stata studiata andando incontro &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alle esigenze di progettisti e webdesigner che per anni hanno utilizzato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;soltanto Freehand e Illustrator: un esempio eclatante &amp;egrave; quello delle &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;scorciatoie da tastiera del tutto simili ai software sopracitati. &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Qualcuno potrebbe obiettare che Design sia la copia sfacciata di &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Illustrator, a questo punto vorrei aprire una piccola parentesi: dobbiamo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;considerare il software di casa Adobe dal 1986 sul mercato, come uno &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;standard, infatti anche Macromedia Freehand traeva spunto dal suo (ex) &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;rivale. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia nera e grigia &amp;egrave; molto elegante ma lavorando per ore su un &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;progetto potrebbe stancare la vista, possiamo risolvere in parte il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;problema selezionando expression chiaro dal pannello delle opzioni.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Personalmente ritengo Design un software dalle grandi potenzialit&amp;agrave; ma &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ancora troppo giovane per un confronto diretto con i suoi concorrenti.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION WEB&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;In casa Microsoft si sentiva da troppo tempo la mancanza di un software &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;WYSIWYG professionale per la realizzazione di pagine web, ecco il motivo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;per il quale Frontpage dal 2006 ha ceduto il passo ad Expression Web. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;programma permette di lavorare agevolmente con javascript, CSS e tutte le &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologie del web 2.0, offre inoltre il supporto per la codifica ASP.NET, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;elemento non di poca importanza, perch&amp;eacute;, come vedremo pi&amp;ugrave; avanti, la &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologia Microsoft per le applicazioni web, rappresenta il nucleo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essenziale di Expression Studio. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Anche in questo caso l&amp;rsquo;interfaccia &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;stata studiata per ottimizzare il flusso di lavoro del webdesigner, molto &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;semplice ed intuitiva permette anche di disegnare i DIV direttamente sul &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;piano di lavoro, inoltre, dalla versione 2.0, ha aggiunto il supporto per &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;PHP, file Silverlight e Flash. Includendo un filmato flash, Expression web oltre a creare il codice html c&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;orrispondente, consente di modificare i parametri di visualizzazione e &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alcuni attributi necessari al controllo del filmato. Per silverlight &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;possibile sia modificare le pagine html generate da Expression encoder o &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Blend sia includere un&amp;rsquo;applicazione silverlight direttamente &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;all&amp;rsquo;interno della pagina. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;br /&gt;Le immagini create con Photoshop e salvate in formato .PSD hanno un loro, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;seppur minimale, pannello di controllo, inserendo un&amp;rsquo;immagine di questo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tipo &amp;egrave; possibile scegliere dal pannello solo i livelli che si desidera &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;importare e il tipo di compressione da usare sulla foto, la foto pu&amp;ograve; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essere convertita in formato gif png o jpg e la sua qualit&amp;agrave; viene mostrata &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;immediatamente dalla finestra d&amp;rsquo;anteprima.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression web &amp;egrave; un software maturo molto pratico ed essenziale nell&amp;rsquo;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;interfaccia.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION BLEND&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Che cos&amp;rsquo;&amp;egrave; Blend, o sarebbe meglio dire: cos&amp;rsquo;&amp;egrave; Silverlight? Procediamo con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ordine. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Blend &amp;egrave; il programma che ci permette di realizzare filmati &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;multimediali e applicazioni sfruttando la tecnologia Silverlight. Silverlight si potrebbe considerare come la risposta di Microsoft a Flash &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ma in realt&amp;agrave; si tratta di una tecnologia molto pi&amp;ugrave; complessa.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;I vantaggi &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essenziali di Silverlight sono una gestione pi&amp;ugrave; fluida dei materiali video &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ad alta definizione e una maggiore facilit&amp;agrave; di creazione di applicazioni &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;per l&amp;rsquo;utente. Silverlight utilizza inoltre un linguaggio di programmazione a base &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;testuale denominato XAML, che a differenza di Flash pu&amp;ograve; essere facilmente &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;rilevato dai motori di ricerca. Inoltre con Blend abbiamo la possibilit&amp;agrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;di realizzare delle applicazioni desktop, realizzando i layout da zero.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Chi &amp;egrave; abituato ad utilizzare Flash si trover&amp;agrave; in difficolt&amp;agrave; al primo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;approccio con Blend: l&amp;rsquo;interfaccia &amp;egrave; totalmente diversa, un p&amp;ograve; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;confusionaria, a parte questo piccolo tallone d&amp;rsquo;Achille, stiamo parlando &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;di un software dalle grandi capacit&amp;agrave; in grado di snellire i flussi di &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;lavoro tra designer e programmatori.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;CONCLUSIONI&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Studio rappresenta, nonostante le pecche, tra &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;cui anche la mancanza di una versione per Apple Mac, un prodotto valido &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;anche in ambito professionale, e merita senza dubbio di essere preso in considerazione.&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Espression Studio: uno sguardo d'insieme</title><link>http://dotnetcampania.org/wikis/articoli/espression-studio-uno-sguardo-d-insieme/revision/1.aspx</link><pubDate>Tue, 22 Sep 2009 11:51:05 GMT</pubDate><guid isPermaLink="false">793b29df-8c2a-42d1-a022-8914441a68e5:50</guid><dc:creator>Carmine Alfano</dc:creator><description>Revision 1 posted to Articoli by Carmine Alfano on 22/09/2009 13:51:05&lt;br /&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;la prima incursione da parte di Microsoft nel campo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;della progettazione grafica professionale giunge ormai alla terza &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;edizione, il pacchetto comprende: applicazioni web, progettazione, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;gestione di contenuti multimediali e animazione su linea cronologica.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;I programmi pi&amp;ugrave; interessanti della suite sono: &lt;strong&gt;Expression Design&lt;/strong&gt;, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;Expression Web&lt;/strong&gt;, &lt;strong&gt;Expression Blend&lt;/strong&gt;. Tralasciamo quindi per questa volta &lt;strong&gt;Expression Encoder.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION DESIGN&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Design &amp;egrave; un software per la grafica vettoriale orientato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;esclusivamente al web, lavorare in dtp (desktop publishing) risulterebbe &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;impossibile a causa della mancanza del supporto CMYK per le stampe con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;separazioni di colore. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia &amp;egrave; stata studiata andando incontro &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alle esigenze di progettisti e webdesigner che per anni hanno utilizzato &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;soltanto Freehand e Illustrator: un esempio eclatante &amp;egrave; quello delle &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;scorciatoie da tastiera del tutto simili ai software sopracitati. &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Qualcuno potrebbe obiettare che Design sia la copia sfacciata di &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Illustrator, a questo punto vorrei aprire una piccola parentesi: dobbiamo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;considerare il software di casa Adobe dal 1986 sul mercato, come uno &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;standard, infatti anche Macromedia Freehand traeva spunto dal suo (ex) &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;rivale. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;L&amp;rsquo;interfaccia nera e grigia &amp;egrave; molto elegante ma lavorando per ore su un &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;progetto potrebbe stancare la vista, possiamo risolvere in parte il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;problema selezionando expression chiaro dal pannello delle opzioni.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;a href="/cfs-file.ashx/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg"&gt;&lt;img src="/resized-image.ashx/__size/550x0/__key/CommunityServer.Components.SiteFiles/ArticoliCarmine/expressionstudio2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Personalmente ritengo Design un software dalle grandi potenzialit&amp;agrave; ma &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ancora troppo giovane per un confronto diretto con i suoi concorrenti.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION WEB&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;In casa Microsoft si sentiva da troppo tempo la mancanza di un software &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;WYSIWYG professionale per la realizzazione di pagine web, ecco il motivo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;per il quale Frontpage dal 2006 ha ceduto il passo ad Expression Web. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Il &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;programma permette di lavorare agevolmente con javascript, CSS e tutte le &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologie del web 2.0, offre inoltre il supporto per la codifica ASP.NET, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;elemento non di poca importanza, perch&amp;eacute;, come vedremo pi&amp;ugrave; avanti, la &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tecnologia Microsoft per le applicazioni web, rappresenta il nucleo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essenziale di Expression Studio. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Anche in questo caso l&amp;rsquo;interfaccia &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;stata studiata per ottimizzare il flusso di lavoro del webdesigner, molto &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;semplice ed intuitiva permette anche di disegnare i DIV direttamente sul &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;piano di lavoro, inoltre, dalla versione 2.0, ha aggiunto il supporto per &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;PHP, file Silverlight e Flash. Includendo un filmato flash, Expression web oltre a creare il codice html c&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;orrispondente, consente di modificare i parametri di visualizzazione e &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;alcuni attributi necessari al controllo del filmato. Per silverlight &amp;egrave; &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;possibile sia modificare le pagine html generate da Expression encoder o &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression Blend sia includere un&amp;rsquo;applicazione silverlight direttamente &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;all&amp;rsquo;interno della pagina. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;br /&gt;Le immagini create con Photoshop e salvate in formato .PSD hanno un loro, &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;seppur minimale, pannello di controllo, inserendo un&amp;rsquo;immagine di questo &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;tipo &amp;egrave; possibile scegliere dal pannello solo i livelli che si desidera &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;importare e il tipo di compressione da usare sulla foto, la foto pu&amp;ograve; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;essere convertita in formato gif png o jpg e la sua qualit&amp;agrave; viene mostrata &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;immediatamente dalla finestra d&amp;rsquo;anteprima.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Expression web &amp;egrave; un software maturo molto pratico ed essenziale nell&amp;rsquo;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;interfaccia.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;EXPRESSION BLEND&lt;/span&gt;&lt;/h3&gt;
&lt;h3 class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;Che cos&amp;rsquo;&amp;egrave; Blend, o sarebbe meglio dire: cos&amp;rsquo;&amp;egrave; Silverlight? Procediamo con &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;ordine. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verdana;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:IT;mso-fareast-language:IT;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0cm 0cm 0pt;"&gt;&lt;span style="font-family:Verda