<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Mauro Minella' Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mauromi/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mauromi/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:48:54 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Finali italiane di Imagine Cup 2010: Annuncio Finalisti</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/finali-italiane-di-imagine-cup-2010-annuncio-finalisti</link>
      <pubDate>Wed, 05 May 2010 00:23:48 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2010/05/05/finali-italiane-di-imagine-cup-2010-annuncio-finalisti/</guid>
      <description><![CDATA[Studenti in grado di cambiare il mondo: questa è l’idea che ha ispirato Microsoft nel creare...]]></description>
      <content:encoded><![CDATA[<p><a href="http://www.microsoft.com/italy/studenti/imagine.mspx"><img src="http://www.microsoft.com/italy/studenti/images/banner_ms4u.png" width="536" height="116" /></a></p>  <p>Studenti in grado di cambiare il mondo: questa è l’idea che ha ispirato Microsoft nel creare <a href="http://imaginecup.com/">Imagine Cup</a>, la competizione globale che incoraggia giovani talenti a utilizzare immaginazione, passione e creatività per contribuire all’innovazione tecnologica. </p>  <p>La più grande competizione mondiale di informatica giunge all’ultimo stadio delle selezioni nazionali: i team finalisti si confronteranno il prossimo 19 e 20 maggio presso la Sala Azzurra dell’Università Federico II di Napoli. Il primo classificato rappresenterà l’Italia alle finali mondiali che si terranno a Varsavia dal 3 all’8 luglio. Nella prima giornata gli studenti presenteranno il proprio progetto ad una giuria di esperti provenienti dal mondo accademico, dalla stampa e dall’ambito tecnologico (industria IT) che selezioneranno le migliori idee. La seconda giornata sarà dedicata alla premiazione dei vincitori per ciascuna categoria d’appartenenza.</p>  <p>I progetti dei nostri studenti mirano a “risolvere i problemi più ardui del pianeta” ispirandosi agli 8 <a href="http://www.un.org/millenniumgoals/">Millennium Development Goals</a> stabiliti dalle Nazioni Unite, in 3 categorie: progettazione di software (Software Design), di giochi (Game Design) e design di interfacce interattive (Surface Interaction Design). </p>  <p><strong><font color="#ff0000">Congratulazioni</font></strong> ai vincitori, che vi presentiamo in rigoroso ordine alfabetico:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="FinalistiIC2010" border="0" alt="FinalistiIC2010" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/FinaliitalianediImagineCup2010AnnuncioFi_10F56/FinalistiIC2010_3.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/FinaliitalianediImagineCup2010AnnuncioFi_10F56/FinalistiIC2010_3.png" width="416" height="740" />&#160; </p>  <p>&#160;</p>  <p>La giornata del 19 è aperta al pubblico e sarà introdotta da Microsoft e Avanade, seguite da David Platt con lo speech <strong><em>Why Software Sucks...</em></strong></p>  <p>Ecco l’agenda:</p>  <p><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" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/FinaliitalianediImagineCup2010AnnuncioFi_10F56/image9.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/FinaliitalianediImagineCup2010AnnuncioFi_10F56/image9.png" width="285" height="198" />&#160;</p>  <p>Per coloro che presenteranno la conferma di <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032451511&amp;Culture=it-IT">registrazione</a> la t-shirt ufficiale di Imagine Cup.</p>  <p>Link utili:</p>  <ul>   <li><a href="http://blogs.academicclub.org/imaginecup">Il blog ufficiale italiano di Imagine Cup</a> </li>    <li><a href="http://www.facebook.com/event.php?eid=122764717740549&amp;ref=mf" target="_blank">Imagine Cup su Facebook</a> </li> </ul>  <p>&#160;</p>  <p>Vi aspettiamo a Napoli il 19 maggio!</p>  <blockquote>   <p>Mauro Minella – Microsoft Academic Relations</p></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Nasce .NetCampus, la conferenza gratuita su tecnologie Microsoft</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/nasce-netcampus-la-conferenza-gratuita-su-tecnologie-microsoft</link>
      <pubDate>Fri, 11 Dec 2009 00:55:03 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2009/12/11/nasce-netcampus-la-conferenza-gratuita-su-tecnologie-microsoft/</guid>
      <description><![CDATA[L’università è il vivaio dove crescono i guru e i leader tecnologici di domani, i giovani...]]></description>
      <content:encoded><![CDATA[<p><a href="http://www.dotnetcampus.it/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="dotnetcampus" border="0" alt="dotnetcampus" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/Nas.NetCampuslaconferenzagratuitasullete_10CFB/dotnetcampus_3.gif" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/Nas.NetCampuslaconferenzagratuitasullete_10CFB/dotnetcampus_3.gif" width="519" height="71" /></a> </p>  <p>L’università è il vivaio dove crescono i guru e i leader tecnologici di domani, i giovani rappresentano coloro che aiuteranno la ripresa nelle aziende italiane in un futuro molto vicino, dalla scuola nasceranno gli autori dei libri che leggeremo fra qualche anno. </p>  <p>Spesso, l’incontro con il mondo del lavoro è un momento difficile per molti studenti: è il momento in cui si passa dalla teoria alla pratica, il momento in cui ci si confronta con aziende che hanno modelli di sviluppo profondamente diversi da quelli perfetti studiati sui libri. Dall’altra parte, le aziende sono il vivaio dove nascono i prodotti di domani, le persone che vi lavorano partecipano a conferenze professionali per aggiornare le proprie competenze e si rivolgono a esperti del settore per progettare e realizzare le proprie soluzioni. </p>  <p><a href="http://www.dotnetcampus.it/" target="_blank">.NET Campus</a> nasce per far incontrare questi due mondi. </p>  <p>Speaker professionisti provenienti dalle Aziende e Community IT più attive sul territorio, coordinati dal gruppo <a href="http://www.devleap.com/" target="_blank">DevLeap</a> supportato dal team italiano dei Microsoft Student Partner e formato da professionisti che affiancano da anni Microsoft in conferenze ed eventi professionali si alterneranno per una full immersion di tecnologia nelle aule dell’Università Roma3 –che rimarrà aperta di sabato per l’occasione- il prossimo 13 marzo; sarà un momento di formazione sia per studenti che per aziende, un’occasione per incontrare gli esperti del settore, per capire come muoversi e dove investire nell’immediato futuro e, non ultimo, un momento un cui imparare le infinite possibilità che questo settore offre a tutti coloro che hanno voglia di impegnarsi.</p>  <p><strong>Se sei uno studente, porta il tuo curriculum vitae!</strong> Potrai consegnarlo direttamente alle aziende e alle persone che ruotano intorno alla manifestazione. <strong>Se sei un professionista IT che già lavora in .NET</strong> e vuoi vedere in anteprima le novità attese nei prossimi mesi, o <strong>lavori in Java</strong> e sei interessato a valutare le possibilità di integrazione fra le due tecnologie più importanti sul mercato, non perdere questa occasione: 5 tracce parallele copriranno le aree di <strong>WEB</strong>, <strong>Linguaggi</strong>, <strong>Interaction Design</strong>, <strong>Sviluppo Mobile</strong> e <strong>opportunità di lavoro e formazione</strong>, quest’ultima curata dalle aziende coinvolte.</p>  <p>Le iscrizioni sono aperte già oggi: assicurati un posto in prima fila. Ci vediamo a Roma3!</p>  <p><a href="http://www.dotnetcampus.it" target="_blank">www.dotnetcampus.it</a></p>  <p></p>  <p></p>  <p><iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/DotNetCampus/iframe.html" frameborder="0" scrolling="no"></iframe></p>]]></content:encoded>
    </item>
    <item>
      <title>Come impostare VS2008 per scegliere l’istanza predefinita di SQL Server fra le disponibili</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/come-impostare-vs2008-per-scegliere-listanza-predefinita-di-sql-server-fra-le-disponibili</link>
      <pubDate>Sun, 01 Nov 2009 14:42:25 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2009/11/01/come-impostare-vs2008-per-scegliere-listanza-predefinita-di-sql-server-fra-le-disponibili/</guid>
      <description><![CDATA[Recentemente ho installato la beta2 di Visual Studio 2010 su una macchina dove era già installato...]]></description>
      <content:encoded><![CDATA[<p>Recentemente ho installato la beta2 di Visual Studio 2010 su una macchina dove era già installato Visual Studio 2008.</p>  <p>I due ambienti di sviluppo possono coesistere senza problemi, tuttavia bisogna tenere presente che SQL Server Express 2005 -installato automaticamente da VS2008- viene sostituito dal setup di VS2010 con SQL Server Express 2008.</p>  <p>A prima vista questo potrebbe essere considerato un non-problema, considerato che anche un progetto creato con la versione 2008 di Visual Studio può aprire un DB di SQL Server 2008. Tuttavia, l’IDE di VS2008 –e in particolare la sua finestra “Esplora Server”– non sono in grado di aprire database di SQL Server 2008, riportando uno dei due errori di seguito elencati:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_3.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_3.png" width="459" height="169" /> </p>  <p>&#160;<img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_9.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_9.png" width="457" height="336" /> </p>  <p>Per essere precisi, il primo messaggio di errore compare aprendo un comune database di formato SQL Server 2008, mentre il secondo viene mostrato quando si tenta di aprire il database creato automaticamente dal programma WSA (Web Site Administration tool) di ASP.NET, che serve ad impostare i criteri di protezione, gli account utente ed altre impostazioni del sito ASP.NET che state creando.</p>  <p>Per ovviare al problema e per poter continuare a tenere le mie presentazioni in pubblico su ASP.NET con la versione 2005 di Visual Studio 2005 (incluse le funzionalità integrate di accesso ai dati), ho installato nuovamente SQL Server 2005 chiamandolo SQLSERVER2005 per distinguerlo dalla versione 2008 già installata (per default con il nome di SQLEXPRESS), ritrovandomi così due servizi distinti:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_22.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_22.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_thumb_8.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_thumb_8.png" width="511" height="36" /></a> </p>  <p>Ora, da una parte il problema è risolto ricordandosi di specificare il corretto motore di SQL Server quando si crea un database SQL Server dall’interno della finestra “Esplora Server” di Visual Studio 2005:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_21.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_21.png" width="426" height="444" /> </p>  <p>Dall’altra parte però il problema persiste quando creo un database dal menu contestuale “Aggiungi nuovo elemento” sul progetto (perché non fa comparire la finestra di cui sopra, e usa la connessione a SQLEXPRESS di default). </p>  <p>Ma soprattutto il problema si presenta quando lancio il WSA che menzionavo prima, il quale pure usa la stringa di connessione “LocalSqlServer” definita per default a livello di macchina.</p>  <p>Il primo di questi due problemi si risolve modificando le seguenti due voci all’interno del menu “Strumenti – Opzioni – Strumenti di database” di Visual Studio 2005, facendo così puntare l’istanza corretta del database:</p>  <ol>   <li>Connessioni dati</li>    <li>Database di convalida</li> </ol>  <p>L’altro problema, relativo al WSA, si può risolvere in due modi:</p>  <ol>   <li>Sovrascrivere, in ogni applicativo WSA dove si vogliano mantenere le connessioni sull’istanza SQL Server 2005, la stringa di connessione “LocalSqlServer” con una che punti a server corretto, all’interno del file WEB.CONFIG; nel mio caso l’ho modificata come segue:     <br />&lt;connectionStrings&gt;      <br />&#160; &lt;remove name=&quot;LocalSqlServer&quot;/&gt;      <br />&#160; &lt;add      <br />&#160;&#160;&#160; name=&quot;LocalSqlServer&quot;      <br />&#160;&#160;&#160; connectionString=&quot;data source=.\SQLEXPRESSEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true&quot;      <br />&#160;&#160;&#160; providerName=&quot;System.Data.SqlClient&quot;/&gt;      <br />&lt;/connectionStrings&gt;      <br />      <br /></li>    <li>L’altro metodo è più radicale <u>e bisogna tenere in considerazione che tale impostazione influenza anche Visual Studio 2010</u>; esso consiste nel modificare la stringa di connessione “LocalSqlServer” accessibile dal pannello di amministrazione di IIS, facendola puntare nel mio caso all’istanza di SQLSERVER2005:      <br /><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_23.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_23.png" width="469" height="383" />       <br /><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_24.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_24.png" width="471" height="383" /> </li> </ol>]]></content:encoded>
    </item>
    <item>
      <title>Sessione Remix Creare un Sito WEB con ASP.NET: Slide e Demo</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/sessione-remix-creare-un-sito-web-con-asp-net-slide-e-demo</link>
      <pubDate>Thu, 18 Jun 2009 14:09:59 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2009/06/18/sessione-remix-creare-un-sito-web-con-asp-net-slide-e-demo/</guid>
      <description><![CDATA[Come promesso al termine della sessione che ho tenuto ieri al Remix, vi metto a disposizione slide e...]]></description>
      <content:encoded><![CDATA[<p>Come promesso al termine della sessione che ho tenuto ieri al Remix, vi metto a disposizione slide e demo utilizzate durante la mia presentazione: le trovate dunque <a href="http://maurominella.members.winisp.net/Remix/2009-06-17 RemixGS01-CreareUnSitoWebConASPNET.zip" target="_blank">a questo indirizzo</a>.</p>  <p>Chi è interessato trova <a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank">a questo link</a>, qui sul mio blog, le esercitazioni complete di database e script che guidano passo passo alla realizzazione di un sito WEB di commercio elettronico in ASP.NET.</p>  <p>&#160;</p>  <p>Buon lavoro</p>]]></content:encoded>
    </item>
    <item>
      <title>WPF: Indipendenza dalla Risoluzione Video</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/wpf-indipendenza-dalla-risoluzione-video</link>
      <pubDate>Fri, 20 Jun 2008 06:51:22 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/06/20/wpf-indipendenza-dalla-risoluzione-video/</guid>
      <description><![CDATA[Una delle caratteristiche chiave di WPF, che lo differenzia da architetture alternative come le...]]></description>
      <content:encoded><![CDATA[<p>Una delle caratteristiche chiave di WPF, che lo differenzia da architetture alternative come le Windows Form e ASP.NET, consiste nel suo sistema di misura <u>indipendente dalla risoluzione</u>. In altre parole, WPF non utilizza pi&#249; il PIXEL come unit&#224; di misura per indicare la dimensione di un bottone, di un rettangolo o di un video; infatti, il pixel non ha una dimensione standard: ce ne stanno per esempio 96 in un pollice (2,54 cm) per un monitor LCD da 19&#8217;&#8217;, ma ben 130 in uno schermo di un notebook recente; per rendersi conto di questo serve solo un righello: misurate la larghezza del vostro monitor (33,87 cm nel primo caso, 32,82 nel secondo) e la dividete per la risoluzione orizzontale (1280 nel primo, 1680 nel secondo), otterrete cos&#236; la larghezza di un pixel in centimetri, che poi potete trasformare in DPI (pixel per pollice) con una semplice equivalenza. </p>  <p>L&#8217;immediata conseguenza di indicare le misure in pixel, e questo lo sanno anche i sassi, &#232; che l'interfaccia risulta pi&#249; grande al diminuire della densit&#224;: se cambiate la risoluzione del vostro schermo da 1280x1024 a 800x600 e mantenete uguale l&#8217;area visibile vi troverete gli oggetti pi&#249; grandi del 60% perch&#233; di fatto questa &#232; la crescita che ciascun pixel ha avuto; apro e chiudo una parentesi, anche questo tutti lo sanno ma <i>repetita iuvant</i>: i monitor LCD hanno una risoluzione nativa e cambiarla equivale a fare s&#236; che il software del monitor (NON della scheda grafica) riscali la nuova risoluzione su quella nativa, con un peggioramento evidente della qualit&#224;; come vedremo pi&#249; avanti, la strada da seguire per ingrandire l&#8217;immagine &#232; agire sui DPI, NON sulla risoluzione.</p>  <p>Ma allora, che unit&#224; di misura utilizza WPF? Il millimetro, il centimetro, il pollice, il metro? Fuochino. Nel senso che utilizza un&#8217;unit&#224; di misura appunto <u>indipendente</u> dalla risoluzione; quindi invece di dire che un bottone &#232; largo 100 pixel, imposta per esempio la sua misura a 2 centimetri; a quel punto, quando l&#8217;utente si sposta su un monitor che ha una densit&#224; di pixel diversa &#8211;come negli esempi sopra- il bottone dovrebbe continuare a misurare 2 centimetri.</p>  <p>Perch&#233; dico <em>dovrebbe</em>? Beh, perfino chi ha gi&#224; sviluppato in WPF -e non si &#232; posto il problema- probabilmente non non ha ancora notato la differenza nel sistema di misura di WPF rispetto agli altri; anzi, avr&#224; notato il contrario: cambiando monitor, anche gli oggetti WPF cambiano di dimensione; addirittura, rimanendo sullo stesso monitor e cambiando risoluzione, le applicazioni WPF scalano esattamente come le Windows Forms e le applicazioni WEB. Spiegher&#242; il perch&#233; di tutto questo fra un momento.</p>  <p>Lasciatemi prima dire, anche se &#232; un dettaglio, qual &#232; l&#8217;unit&#224; di misura indipendente dalla risoluzione (che di seguito chiamer&#242; <b>DIU</b>: <i>Device Independent Unit</i>) che usa WPF; tenetevi forte: <font color="#ff0000">0,026458333333 centimetri</font>; comodo da ricordare, vero ;-) ? Per avere un&#8217;idea pi&#249; pratica, considerate che &#232; circa un quarto di millimetro. Ma probabilmente la fissiamo meglio in mente se consideriamo che ci sono esattamente 96 DIU ogni 2,54 centimetri. In altre parole 1 DIU = 1/96 di pollice. Quindi se vogliamo fare un bottone largo 1 pollice dovremo indicare <font face="Courier New"><font color="#ff0000">Width</font><font color="#0000ff">=&quot;96&quot;</font></font>, e ovviamente 10 centimetri misurano 377,95 DIU.</p>  <p>Torniamo all'osservazione di prima: prendo un righello, lancio Visual Studio, metto sulla form WPF un bottone da 96 DIU, lo misuro e... mi accorgo che NON &#232; largo necessariamente un centimetro! Abbasso la risoluzione, diventa pi&#249; largo, vado su un altro PC e cambia ancora... ma allora dov&#8217;&#232; la blasonata RESOLUTION INDEPENDENCE di WPF? Il punto &#232; che WPF si basa sulle impostazioni <b><u>di sistema</u></b>, non sulle impostazioni <b><u>del device fisico</u></b> (il monitor); se ci pensate un momento, questo ha perfettamente senso: come fa il vostro sistema a sapere quanti centimetri &#232; largo il vostro monitor? Come fa a sapere la distanza del telo dal prioettore collegato alla vostra uscita video, visto che le dimensioni dell&#8217;immagine dipendono da questa? <u>Non lo sa. A meno che non siate voi a dirglielo</u>. Come? Fate le misurazioni (vedi l&#8217;esempio introduttivo di questo post, dove calcolavo 130 DPI) e specificatele nel Pannello di Controllo (sezione <strong>DPI Scaling</strong>) come indicato di seguito:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_4.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_4.jpg" target="_blank"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="456" alt="dpiVista" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_thumb_1.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_thumb_1.jpg" width="526" border="0" /></a> </p>  <p>A questo punto impostate <font face="Courier New"><font color="#ff0000">Width</font><font color="#0000ff">=&quot;377.95&quot;</font></font> nei parametri del bottone (s&#236;, avete letto bene: i DIU si specificano in double) , prendete il righello e verificate se non ci credete: il bottone &#232; largo 10 centimetri, su qualunque monitor e, naturalmente, anche se lo stampate su una LASER da 1200 DPI o su una ad aghi!</p>  <p>Provate a fare la stessa cosa con un&#8217;applicazione tradizionale in finestra o WEB: non si pu&#242;, o meglio in teoria potreste farlo ma non certo utilizzando un&#8217;unica misura (377,95): dovreste contare quanti pixel ci vogliono per fare 10 centimentri e cambiare la dimensione di conseguenza di dispositivo in dispostivo; per curiosit&#224; e piacere di calcolo: se impostate <font face="Courier New"><font color="#ff0000">Width</font><font color="#0000ff">=&quot;377.95&quot;</font></font>, WPF accende ben 512 pixel sul monitor da 130 DPI in risoluzione nativa di 1680x1050 e solo 236 su un monitor largo uguale che abbia per&#242; una risoluzione nativa di 800x600, ma entrambi i casi la misura &#232; sempre 10 centimetri, e in tutti i casi la misura che voi avete specificato con WPF &#232; sempre la stessa (377,95 DIU)!</p>  <p>Ora anticipo la prossima obiezione, che qualcuno di persona mi ha gi&#224; fatto: <i><font color="#0000ff">d&#8217;accordo, ora &#232; chiaro come tracciare misure fisse indipendenti dalla risoluzione. Ma a me non interessa. Io voglio continuare a beneficiare del fatto che sia l&#8217;utente a scegliere le dimensioni della mia applicazione semplicemente cambiando la risoluzione del monitor oppure, ma solo se &#232; lui a deciderlo, modificando il DPI Scaling</font></i>. Ebbene, non a caso il DIU misura 1/96 di pollice; infatti, per default quando installate Windows, la scala &#232; impostata 96 DPI (vedi immagine sopra). Ci&#242; significa che, se non viene cambiato il valore 96 di default, <u>1 DIU = 1 PIXEL</u>. Quindi sviluppando in WPF avete entrambi i benefici: per default, funziona tutto come prima, ma se la vostra applicazione deve gestire dimensioni reali basta che chiediate all&#8217;utente di impostare DPI Settings al valore corretto per il suo monitor (semplicmente dividendo la larghezza del monitor per la risoluzione orizzontale); immaginate per esempio una calcolatrice touch screen: sarebbe molto scomodo che, portandola sul un monitor da 52 pollici full HD, occorresse uno spillo per premere i bottoni sul video per evitare che la punta del vostro dito pigi 3 bottoni insieme.</p>  <p>Infine, e sar&#224; argomento di un prossimo post, seguendo questa strada con WPF diventa semplice <i>scalare</i> gli oggetti di interfaccia: avete mai visto un&#8217;applicazione che quando &#232; portata a pieno schermo ingrandisce in proporzione tutti gli elementi contenuti nella finestra? Very complicato da implementare in un&#8217;applicazione tradizionale. Questo &#232; il motivo per cui spesso si leggono warning del tipo <font color="#0000ff"><em>l&#8217;applicazione richiede una risoluzione di 1024x768</em> </font>o simili, che vogliono appunto dire che se hai risoluzione maggiore la vedi piccola, mentre se vai in 800x600 ti occupa pi&#249; dello spazio visibile... non sarebbe meglio invece vederla per tutta la larghezza disponibile, eventualmente pi&#249; <i><strong>definita</strong></i> al crescere della risoluzione?</p>  <p>Concludo con un parallelo, sempre relativo a WPF, fra Resolution Independence e Time Independence: in WPF quando portate un&#8217;animazione da un PC lento ad uno molto veloce, questa non accelera: come &#232; giusto che sia, semplicmente <strong>diventa pi&#249; fluida</strong>. Anche questo argomento sar&#224; oggetto di un prossimo post.</p>  <p>&#160;</p>  <p>Riferimenti</p>  <ul>   <li>Matthew MacDonald: <strong>Pro WPF in C# 2008</strong> - <em>Introducing WPF</em>, by Apress, capitolo in parte riportato <a href="http://www.c-sharpcorner.com/UploadFile/prvn_131971/IntroducingWPF04222008000516AM/IntroducingWPF.aspx" target="_blank">qui</a> </li>    <li>Charles Petzold: <strong>Applications = Code + Markup</strong> - <em>Capitolo 1</em>, by Microsoft Press</li>    <li>Adam Nathan: <strong>Windows Presentation Foundation Unleashed</strong> - <em>Enter WPF</em>, by SAMS</li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>ABC di WCF (con screencast)</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/abc-di-wcf-con-screencast</link>
      <pubDate>Tue, 22 Apr 2008 10:50:25 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/04/22/abc-di-wcf-con-screencast/</guid>
      <description><![CDATA[In questo articolo vediamo come realizzare un'applicazione WCF partendo dall'esposizione dei...]]></description>
      <content:encoded><![CDATA[<p>In questo articolo vediamo come realizzare un'applicazione WCF partendo dall'esposizione dei principi di base, costruendone uno da zero in C# con VS2008, installandolo su IIS 7 e infine consumandolo con un client WPF.</p>  <p>Vi suggerisco di vedere prima lo screencast che segue -dura circa 10 minuti-, per avere un'idea di come si realizza un'applicazione di questo tipo, e poi provare a realizzare nuovamente la stessa seguendo passo passo il resto di questo post. Trovate i sorgenti del progetto <a href="http://maurominella.members.winisp.net/WCF/WCFService.zip" target="_blank">a questo link</a>.</p> <object style="height: 390px; width: 640px"><param name="movie" value="https://www.youtube.com/v/_NCjt48xwtw?version=3&amp;feature=player_detailpage"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="https://www.youtube.com/v/_NCjt48xwtw?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"></object>  <p>Una volta predisposta una macchina per creare ed ospitare applicazioni WCF, il primo passo per capire come funziona WCF consiste nel studiarne l'<strong><font color="#ff0000">ABC</font></strong>, non solo in senso figurato:</p>  <ul>   <li><font color="#ff0000"><strong>A</strong></font> sta per <strong><font color="#ff0000">A</font>ddress</strong>, ovvero <strong><font color="#0000ff">DOVE</font></strong> avviene la comunicazione; nella pratica, questo è l'URL utilizzato internamente per mappare richieste e risposte. </li>    <li><strong><font color="#ff0000">B</font> </strong>sta per <strong><font color="#ff0000">B</font>inding</strong>, cioè <strong><font color="#0000ff">COME</font></strong> si comunica: tramite HTTP, TCP, NamedPipes, MSMQ, o altro <u>protocollo</u> che client e server entrambi capiscono. </li>    <li><font color="#ff0000"><strong>C</strong></font> è il <strong><font color="#ff0000">C</font>ontratto</strong>: che <strong><font color="#0000ff">COSA</font></strong> client e server si dicono; in particolare, esistono due tipi di contratto:       <ul>       <li><font color="#ff00ff">Data Contract</font>: le informazioni che client e server si scambiano, la cui struttura è indicata nello schema del servizio; </li>        <li><font color="#ff00ff">Service Contract</font>: i metodi invocati sul vostro servizio dal client, la cui firma (in gergo <em>signature</em>) è contenuta nel WSDL. </li>     </ul>   </li> </ul>  <p>Partiamo lanciando Visual Studio 2008, ricordando di lanciarlo in modalità Amministratore se intendete utilizzare il server WEB della vostra macchina Windows Vista; ciò non è necessario se utilizzate il Personal Web Server.</p>  <p>Creiamo un nuovo progetto di tipo WCF (File-New Web Site...), scegliamo un nome e premiamo OK. Noterete che, come spesso succede, il progetto non è esattamente vuoto perché Visual Studio ci ha favorito inserendo qualche piccola porzione di codice, che normalmente lo sviluppatore deve sempre scrivere; in questo caso, però, poiché vogliamo capire esattamente i dettagli di WCF, lo &quot;puliremo&quot; quasi per intero.</p>  <p>Apriamo innanzi tutto il file <font color="#0000ff">App_Code\IService.cs</font> e rimuoviamo tutto il codice tranne gli <font color="#0000ff">using</font> iniziali che referenziano i namespace. In questo file si specifica l'interfaccia del servizio in termini di <font color="#ff00ff">dati</font> <font color="#ff00ff"><font color="#000000">e</font> metodi</font> attraverso cui il servizio si espone all'esterno; notate la corrispondenza fra questi due termini e i due tipi di contratto che ho indicato sopra con lo stesso colore.</p>  <p>Partiamo con il Data Contract: definiamo due tipi che useremo per comunicare; potremmo usare tipi semplici come <font color="#0000ff">string</font> e <font color="#0000ff">int</font>, ma per fare un esempio semplice e al tempo stesso estensibile userò però due classi, ciascuna con un membro pubblico: chiamerò la prima <strong>Richiesta</strong> e la seconda <strong>Risposta</strong>:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-01" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-01_5.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-01_5.jpg" width="332" height="305" /> </p>  <p>Ora, affinché la classe sia serializzabile, l'autore deve definire il data contract che dicevo sopra. L'attributo <font color="#008080">[DataContract]</font>, applicato ad una classe o ad un tipo, specifica che la classe (o il tipo) definisce o implementa un data contract ed è serializzabile da un serializatore come <font color="#0000ff">System.Runtime.Serialization.DataContractSerializer</font>; in modo simile, l'attributo <font color="#008080">[DataMember]</font> deve essere applicato ad ogni membro pubblico che si vuole esporre della classe serializzata. Ecco quindi come devono essere modificate le due classi sopra per diventare parte del data contract:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-02" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-02_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-02_3.jpg" width="333" height="369" /> </p>  <p>Oltre al Data Contract io voglio ora implementare il Service Contract: in altre parole, voglio esporre un metodo. Tale funzione, che chiamerò <strong>RendiMaiuscolo</strong>, accetta un oggetto di classe <strong>Richiesta</strong> e restituisce un oggetto di classe <strong>Risposta</strong> creato all'interno della funzione stessa; si noti che così come il Data Contract richiede la coppia <font color="#008080">[DataContract] </font>/ <font color="#008080">[DataMember]</font>, in modo simile il Service Contract richiede l'attributo <font color="#008080">[ServiceContract]</font> prima della definizione dell'interfaccia, e <font color="#008080">[OperationContract]</font> per la definizione del metodo; in pratica, scriveremo così la sua signature:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-03" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-03_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-03_3.jpg" width="372" height="98" /> </p>  <p>&#160;</p>  <p>Il prossimo passo consiste nell'implementare il contratto (in particolare il suo Service Contract) appena definito: apriamo il file <font color="#0000ff">App_Code\Service.cs</font>, rimuoviamo tutto il codice e implementiamo l'interfaccia; si può anche chiedere a Visual Studio di generare il metodo automaticamente premendo il tasto destro sul nome dell'interfaccia <strong>IService</strong> da cui si eredita, come mostrato di seguito:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-04" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-04_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-04_3.jpg" width="590" height="237" /> </p>  <p>Le seguenti tre righe di codice creano un nuovo oggetto di tipo <strong>Risposta</strong> ed assegnano al suo membro <strong>StringaRisposta</strong> la stringa contenuta nell'oggetto <strong>richiesta</strong> che viene passato al metodo, trasformata in maiuscolo:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-05" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-05_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-05_3.jpg" width="552" height="203" /> </p>  <p>Per completezza di informazione aggiungo che l'ultimo snippet di codice avrebbe potuto contenere l'attributo <font color="#008080">[ServiceBehaviour]</font> prima della definizione della classe <strong>Service</strong> che deriva dall'interfaccia <strong>IService</strong>, e l'attributo <font color="#008080">[OperationBehaviour]</font> prima dell'implementazione del metodo <strong>RendiMaiuscolo</strong>; tuttavia, questi attributi sono opzionali.</p>  <p>Con l'ultima operazione abbiamo terminato la scrittura del servizio; provate a compilarlo, non devono esserci errori. È giunto quindi il momento di consumarlo.</p>  <p>A questo proposito aggiungiamo alla soluzione un nuovo progetto di tipo WPF (nel mio caso l'ho chiamato <strong>WpfApplication1</strong>) e un riferimento all'oggetto che implementa l'interfaccia <strong>IService</strong> appena sviluppata; si noti che premendo il bottone <strong>Discover</strong>, Visual Studio analizza la soluzione e ne mostra i servizi disponibili, quindi non dobbiamo far altro che selezionare l'oggetto che ci serve specificando un namespace per noi significativo (io l'ho chiamato <strong>ServizioDiTest</strong>):</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-06" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-06_5.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-06_5.jpg" width="318" height="317" />&#160;&#160; <img style="border-width: 0px;" border="0" alt="wcf-07" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-07_7.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-07_7.jpg" width="388" height="318" /> </p>  <p>Da questo momento in avanti è possibile utilizzare proprietà e metodi pubblici del servizio attraverso l'oggetto <strong>ServizioDiTest.ServiceClient</strong>.</p>  <p>Per testarlo, aggiungete un oggetto TextBox e un Button nel file <font color="#0000ff">Window1.XAML</font>:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-08" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-08_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-08_3.jpg" width="548" height="154" /> </p>  <p>in modo da generare l'event handler dell'evento Click nel file <font color="#0000ff">Window1.xaml.cs</font>, che riempiremo con queste 6 righe di codice che instanziano il servizio, usano il suo riferimento per creare l'oggetto <strong>richiesta </strong>e per creare un riferimento <strong>risposta</strong> alla classe <strong>Risposta</strong> di cui il servizio crea l'istanza nel metodo <strong>RendiMaiuscolo</strong>.</p>  <p><img style="border-width: 0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/image_5.png" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/image_5.png" width="552" height="205" /> </p>  <p>Impostate ore l'applicazione WPF come startup project e lanciatela: premendo il bottone, la stringa verrà convertita in maiuscolo:</p>  <p><img style="border-width: 0px;" border="0" alt="wcf-09" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-09_3.jpg" original-url="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-09_3.jpg" width="305" height="305" /></p>]]></content:encoded>
    </item>
    <item>
      <title>LINQ (Language Integrated Query): le slide dei seminari</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/linq-language-integrated-query-le-slide-dei-seminari</link>
      <pubDate>Tue, 08 Apr 2008 09:38:47 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/04/08/linq-language-integrated-query-le-slide-dei-seminari/</guid>
      <description><![CDATA[La notizia, sempre gradita dal pubblico, che anticipo quando presento LINQ &#232; che la sessione ha...]]></description>
      <content:encoded><![CDATA[<p>La notizia, sempre gradita dal pubblico, che anticipo quando presento LINQ &#232; che la sessione ha pochissime slide e molte demo.</p>  <p>In effetti l'argomento non &#232; dei pi&#249; intuitivi, specie per chi proviene da un tipo di sviluppo procedurale classico e non ha particolare esperienza di programmazione procedurale. Inoltre, al fine di cogliere appieno i vantaggi di questa tecnologia, occorre conoscere concetti quali i delegate, le lambda expression, il linguaggio SQL, i Dataset, un po' di XML e chiaramente il framework .NET con almeno un linguaggio fra C# e VB.NET.</p>  <p>Ci&#242; premesso, i takeaways dell'intera presentazione su LINQ sono essenzialmente i seguenti:</p>  <ul>   <li>il linguaggio di interrogazione, SQL-like, si integra nel linguaggio di sviluppo (al momento C# 3.0 e VB.NET 9.0)</li>    <li>tratta i dati come oggetti, e viceversa</li>    <li>permette il passaggio dalla modalit&#224; imperativa a quella dichiarativa: &#232; un po' la differenza che passa fra dare indicazioni di svolta a destra/sinistra/avanti/indietro ad un tassista invece che comunicargli una volta solamente l'indirizzo di destinazione</li>    <li>funziona in modo molto simile per la gestione di dati, oggetti e stream XML</li> </ul>  <p>&#160;</p>  <p>Le slide che trovate quindi <a href="http://maurominella.members.winisp.net/LinQ/Seminario%20LinQ.zip" target="_blank">a questo link</a> sono quindi in minor numero rispetto al solito -fra l'altro, le prime tre riprendono i concetti (necessari) del Framework .NET-, ma come vi dicevo gran parte della presentazione prevede la scrittura di demo live per circa 90 minuti. </p>  <p>Seppure corredata di demo live che svolgo al momento, la sessione &#232; pur sempre teorica; viene per questo completata da una esercitazione pratica, che i ragazzi possono svolgere sui PC dell'Universit&#224; o personali. <a href="http://maurominella.members.winisp.net/LinQ/LINQ_Hands_on_Lab.zip" target="_blank">Trovate qui</a> gli script di laboratorio, e <a href="http://blogs.msdn.com/mauromi/archive/2008/03/05/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net.aspx" target="_blank">in questo mio post precedente</a> le istruzioni per predisporre la vostra macchina.</p>  <p>&#160;</p>  <p>Ho presentato questo argomento recentemente a Salerno e Catania. Se siete in zona, e interessati, mi trovate a Venezia il 10 aprile, a Napoli il 15/4, a Milano Bicocca il 17/4, a Bologna il 27/5 e a Torino l'11 giugno; pi&#249; in generale, trovate le date dei nostri eventi pubblicate sul sito degli studenti (<a title="http://www.microsoft.com/italy/studenti/" href="http://www.microsoft.com/italy/studenti/">http://www.microsoft.com/italy/studenti/</a>).</p>]]></content:encoded>
    </item>
    <item>
      <title>Dependency Property in Windows Presentation Foundation (con screencast)</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/dependency-property-in-windows-presentation-foundation-con-screencast</link>
      <pubDate>Tue, 08 Apr 2008 05:50:59 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/04/08/dependency-property-in-windows-presentation-foundation-con-screencast/</guid>
      <description><![CDATA[Inizialmente si potrebbe approcciare questo argomento con scetticismo, dal momento che complica il...]]></description>
      <content:encoded><![CDATA[<p>Inizialmente si potrebbe approcciare questo argomento con scetticismo, dal momento che complica il panorama di tipi .NET conosciuti che tipicamente presentano campi semplici, propriet&#224;, metodi ed eventi; ma si cambier&#224; idea non appena cap&#236;ti i problemi risolti attraverso le dependency property, che possono essere sfruttate per abilitare il data binding automatico, le animazioni, gli stili e molto altro. Diventa cos&#236; possibile, per esempio, scrivere nel codice di markup (XAML) operazioni di layout (dipendenti per esempio dalla posizione del mouse) che altrimenti si dovrebbero gestire da codice procedurale (C# o VB.NET).</p>  <p>Una dependency property <i>dipende</i> da diversi provider per determinare il suo valore in ogni momento; l&#8217;obiettivo &#232; di permettere funzionalit&#224; avanzate direttamente dall&#8217;interno del linguaggio di markup, senza bisogno di impostare le propriet&#224; con codice procedurale.</p>  <p>&#160;</p>  <p><font color="#0000ff">Implementazione di una Dependency Property</font></p>  <p>Le dependency property sono normali propriet&#224; di classi .NET che hanno una particolare struttura che le rende fruibili da WPF in modo speciale; nessun altro linguaggio .NET a parte XAML le riconosce come tali.</p>  <p>Per convenzione, tutti i campi DependencyProperty sono pubblici, statici e hanno il suffisso Property.</p>  <p>Poich&#233; le dependency property sono campi statici, esse consumano una quantit&#224; di memoria di molto inferiore rispetto a che se fossero tipiche propriet&#224; .NET di cui esiste in memoria una copia per istanza. Non a caso, 78 propriet&#224; su 96 dei bottoni sono dependency property.</p>  <p>Una dependency property &#232; implementata attraverso una chiamata al metodo statico <i>DependencyProperty.Register</i> che richiede un nome (es. <i>IsMouseOver</i>), un tipo (es. <i>bool</i>), il tipo della classe che le espone (es. <i>Button</i>) e, nella maggioranza dei casi, il nome della funzione di callback che viene chiamata quando tale propriet&#224; cambia.</p>  <p>&#160;</p>  <p><font color="#0000ff">Change Notification</font></p>  <p>L&#8217;implementazione della callback nelle dependency property prende il nome di <i>Change Notification</i>; per rimanere nell&#8217;esempio precedente, la propriet&#224; <i>IsMouseOver</i> permette di legare il suo valore (che dice quindi se il mouse si trova effettivamente sul controllo che la utilizza) ad un&#8217;altra propriet&#224; del controllo stesso, come <i>Background</i>. Ci&#242; significa che in questo caso non &#232; necessario gestire il background del controllo andando a scrivere codice per l&#8217;event handler di <i>MouseEnter</i> e <i>MouseLeave</i> come vorrebbe il metodo classico, il quale fra l&#8217;altro &#8220;sporca&#8221; la business logic del file C# con codice di gestione del layout.</p>  <p>Grazie all&#8217;implementazione descritta nel punto precedente, &#232; invece possibile legare il cambiamento di valore di <i>IsMouseOver</i> (da <i>True</i> a <i>False</i> o viceversa) al valore della propriet&#224; Background del bottone. </p>  <p>Il video che segue mostra appunto come sfuttare le dependency property per impostare il colore di un bottone quando il mouse ci passa sopra. Normalmente potremmo implementare questo comportamento andando a definire e poi implementare, in codice procedurale C# o VB.NET, gli event handler per gli eventi di <em>MouseEnter</em> e <em>MouseLeave</em>. Grazie alle dependency property, invece, &#232; possibile implementare questo comportamento solamente usando il codice di markup (XAML). Vediamo quindi come effettuare questa operazione, prima con il metodo classico e poi con le dependency property. Buona visione.</p> <iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/DependencyPropertiesinWPF/iframe.html" frameborder="0" scrolling="no"></iframe>]]></content:encoded>
    </item>
    <item>
      <title>Command Binding in Windows Presentation Foundation (con screencast)</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/command-binding-in-windows-presentation-foundation-con-screencast</link>
      <pubDate>Fri, 28 Mar 2008 13:39:03 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/03/28/command-binding-in-windows-presentation-foundation-con-screencast/</guid>
      <description><![CDATA[WPF fornisce supporto integrato per i comandi, permettendo di associare a ciascuno di essi una...]]></description>
      <content:encoded><![CDATA[<p>WPF fornisce supporto integrato per i <em><font color="#ff0000">comandi</font></em>, permettendo di associare a ciascuno di essi una funzione di risposta alle <font color="#808000"><strong>principali azioni</strong></font> che su di essi si possono compiere; per <em><font color="#ff0000">comandi</font> </em>si intende quelle operazioni classiche di Windows quali <em>Copy</em>, <em>Paste</em>, <em>AlignRight</em>, <em>Close</em>, <em>Open</em>, <em>Undo</em>, <em>ScrollDown</em>, <em>PreviousTrack</em> ed un altro centinaio, che WPF raggruppa in cinque classi: ApplicationCommands, ComponentCommands, MediaCommands, NavigationCommands ed EditingCommands, di cui trovate ampia documentazione su MSDN e in generale sulla rete.</p>  <p>Le &quot;<font color="#808000"><strong>principali azioni</strong></font>&quot; relative ai comandi sono tre: 1) la loro esecuzione, 2) la verifica sul fatto che possano essere effettivamente eseguite e 3) la notifica dello stato di cambiamento della loro disponibilit&#224;; per fare un esempio, la funzione <em>incolla</em> prevede come <u>esecuzione</u> l'estrazione dell'informazione dalla clipboard e la sua scrittura nell'elemento di destinazione (es. una TextBox), prevede come <u>verifica</u> il fatto che esista un'informazione in clipboard e come <u>notifica</u> il fatto che la clipboard passi da vuota a piena o viceversa; in questo modo posso utilizzare le tre funzioni per abilitare o disabilitare un bottone che ne implementa il comportamento.</p>  <p>Una volta associato il comando ai nomi delle tre funzioni di risposta (per la precisione questa operazione si chiama <em><strong>CommandBinding</strong></em>), &#232; possibile sfruttare un altro potente servizio offerto da WPF per legare il comando ad un controllo che pu&#242; essere di tipo <em>Button</em>, <em>CheckBox</em> o <em>MenuItem</em>; da quel momento, premere il bottone richiamer&#224; la funzione designata alla <u>esecuzione</u>, e la propriet&#224; <em>IsEnabled</em> dello stesso sar&#224; automaticamente legata al risultato della funzione di <u>verifica</u>. In pi&#249;, se il comando prevede una combinazione di tastiera (come il CTRL-V per la funzione <em>Incolla</em>), digitando la stessa otteniamo gratis il biding dello shortcut alla funzione di esecuzione, esattamente come se avessimo premuto il bottone ad essa riferito.</p>  <p>&#160;</p>  <p>Non vi ho convinto? In effetti, per chi proviene come me da esperienza di programmazione procedurale, risulta a volte difficile percepire il vantaggio di un sistema -come WPF- che fornisce gi&#224; integrato il supporto per operazioni che siamo sempre stati finora abituati a gestire manualmente: <em>che problema c'&#232;? -</em> mi sono chiesto la prima volta che ho studiato questo argomento - <em>basta scrivere l'operazione nella funzione di risposta al click del bottone</em>.&#160; </p>  <p>Per meglio rendermi conto della differenza ho provato ad implementare la funzione <em>incolla</em> in modo tradizionale e poi sono passato al command binding di WPF, e devo confessarvi che mi sono ricreduto: quasi per magia (il mio collega e amico <a href="http://blogs.msdn.com/darioait/" target="_blank">Dario Airoldi</a> , scherzando, mi ha chiamato <em>Silvan</em> quando ha visto la mia piccola demo :-)), continuavo a rimuovere decine di righe di codice che avevo scritto fino a scendere a <strong>zero istruzioni</strong> C# e <strong>due soli attributi </strong>del bottone in XAML, e il programma continuava a funzionare anche meglio di prima (per esempio, potevo evitare di monitorare&#160; lo stato della clipboard con un timer)!</p>  <p>In effetti, riflettendoci bisogna ammettere che &#232; quasi imbarazzante che io spieghi a Windows che quando premo CTRL-V lui deve andare a prendere il contenuto della clipboard e scriverlo nel controllo con il focus: dovrei solo potergli dire <em>incolla!</em> e poi sapr&#224; ben lui come fare, non vi pare?</p>  <p>&#160;</p>  <p>Se vi ho incuriosito a sufficienza, potete guardarvi lo screencast del mio test che ho descritto sopra, che ho registrato in modo amatoriale (dovrete alzare un po' il volume, ed &#232; sicuramente migliorabile) per il mio archivio personale ma che credo possa aiutare nella comprensione di questo argomento. </p>  <p>Vi auguro buona visione. Alla prossima</p>  <p><iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/WPF_Commands/iframe.html" frameborder="0" scrolling="no"></iframe></p>]]></content:encoded>
    </item>
    <item>
      <title>Configurazione laboratori per esercitazioni in università su tecnologie Microsoft .NET</title>
      <link>https://docs.microsoft.com/archive/blogs/mauromi/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net</link>
      <pubDate>Wed, 05 Mar 2008 05:18:05 GMT</pubDate>
      <dc:creator><![CDATA[europemauromi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mauromi/2008/03/05/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net/</guid>
      <description><![CDATA[Anche la seconda serie di seminari che sto portando in giro per l'Italia prevede, nella maggioranza...]]></description>
      <content:encoded><![CDATA[<p>Anche la seconda serie di seminari che sto portando in giro per l'Italia prevede, nella maggioranza dei casi, una mattinata dedicata all'approfondimento teorico di alcune architetture e tecnologie, ed esercitazioni pratiche il pomeriggio sugli argomenti prima presentati.</p>  <p>Per sfruttare al meglio il tempo a disposizione, &#232; necessario preparare i PC in anticipo; si tenga presente che a seconda della configurazione di partenza del PC, della disponibilit&#224; del materiale da installare (su DVD o con download dal sito Microsoft), la <u>configurazione pu&#242; richiedere anche alcune ore</u>; in questo post riassumo le istruzioni, che variano a seconda della tipologia di esercizi da svolgere. In particolare, occorre avere installati:</p>  <ul>   <li>Sistema Operativo Microsoft Windows XP SP2 o Windows Vista, aggiornati attraverso il sito <a href="http://windowsupdate.microsoft.com" target="_blank">windowsupdate.microsoft.com</a> </li> </ul>  <p><a href="http://www.WindowsUpdate.com"></a></p>  <ul>   <li>Per le esercitazioni su <font color="#0000ff"><strong>ASP.NET</strong></font>, <font color="#0000ff"><strong>ADO.NET</strong></font> e <font color="#0000ff"><strong>Master Pages</strong></font>, scaricare il file <a href="http://maurominella.members.winisp.net/HOL.ZIP" target="_blank">HOL.ZIP</a> e seguire istruzioni per la configurazione contenute <a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank">in questo post</a> o nel file <font color="#0000ff">00-INSTALLAZIONE LABORATORIO.PDF</font> contenuto in HOL.ZIP </li> </ul>  <p>&#160;</p>  <ul>   <li>Le esercitazioni su <font color="#0000ff"><strong>LINQ</strong></font> richiedono come configurazione minima una versione qualunque di <font color="#0000ff">Microsoft Visual Studio 2008 (*)</font> installata con i parametri di default, e la presenza sul PC di <font color="#0000ff">SQL Server 2005</font> (versione Express, installata da Visual Studio, oppure un&#8217;altra versione commerciale); servono inoltre i seguenti due file:       <ul>       <li>Il database <a href="http://maurominella.members.winisp.net/linq/northwind.zip" target="_blank">NorthWind</a>, da aggiungere ai database di SQL Server, per gli esercizi di LinQ to Dataset e LinQ to SQL </li>        <li>Il file <a href="http://maurominella.members.winisp.net/linq/customers.zip" target="_blank">Customers.XML</a>, per gli esercizi di LinQ to XML </li>     </ul>   </li> </ul>  <p>&#160;</p>  <ul>   <li>Per le esercitazioni su <b><font color="#0000ff">Sviluppo Mobile</font></b>, serve avere installati:       <ul>       <li>il software <b><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141" target="_blank">Activesync 4.5</a></b> (per Windows XP) o il <b><a href="http://www.microsoft.com/downloads/details.aspx?familyid=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;displaylang=it" target="_blank">Centro gestione dispositivi Windows Mobile 6.1</a></b> (per Windows Vista) scaricabili dal sito Microsoft </li>        <li>la versione <b><u>Professional</u></b> di Microsoft Visual Studio 2008 (*) </li>        <li>Il file <a href="http://maurominella.members.winisp.net/mobility/Orders.zip" target="_blank">Orders.sdf</a></li>        <li>La cartella <a href="http://maurominella.members.winisp.net/mobility/Images.zip" target="_blank">Images</a></li>        <li>Componenti <b><u>facoltativi</u></b>, solo per testare l&#8217;applicazione su ulteriori emulatori:           <ul>           <li><a href="http://www.microsoft.com/italy/msdn/risorsemsdn/mobile/default.mspx" target="_blank">Windows Mobile 6 SDK</a> (professional e standard) </li>            <li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&amp;DisplayLang=en" target="_blank">Windows Mobile 6 Localized Emulator Images</a> (Professional + Standard italiano) </li>         </ul>       </li>     </ul>   </li> </ul>  <p>&#160;</p>  <p>(*) Le seguenti opzioni sono disponibili per ottenere Microsoft Visual Studio 2008:</p>  <ul>   <li>Utilizzare l&#8217;account MSDN-AA (Academic Alliance) fornito dall&#8217;Universit&#224;, che consente a tutti gli studenti afferenti del dipartimento che lo ha sottoscritto di accedere gratuitamente al software Microsoft, fra cui tutti i sistemi operativi, i prodotti server e i prodotti di sviluppo, incluso Visual Studio 2008 Professional; </li>    <li>Scaricare la <a href="http://msdn2.microsoft.com/it-it/vstudio/products/aa700831(en-us).aspx" target="_blank">versione gratuita di valutazione di Visual Studio Professional 2008</a>, completamente funzionante per 3 mesi. </li> </ul>]]></content:encoded>
    </item>
  </channel>
</rss>