<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Blogs @ UGIdotNET</title><link>http://blogs.ugidotnet.org/MainFeed.aspx</link><description>Bloggers UGIdotNET</description><generator>Subtext Version 2.1.0.3</generator><item><title>Evitate se possibile NHibernate not-found=&amp;rdquo;ignore&amp;rdquo;</title><link>http://blogs.ugidotnet.org/rgm/archive/2013/06/19/evitate-se-possibile-nhibernate-not-foundrdquoignorerdquo.aspx</link><pubDate>Wed, 19 Jun 2013 19:07:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/rgm/archive/2013/06/19/evitate-se-possibile-nhibernate-not-foundrdquoignorerdquo.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/rgm/comments/101588.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/101588.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/rgm/archive/2013/06/19/evitate-se-possibile-nhibernate-not-foundrdquoignorerdquo.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/101588.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/rgm/rss.aspx">Evitate se possibile NHibernate not-found=&amp;rdquo;ignore&amp;rdquo;</source><description>&lt;p&gt;Se avete un legacy database dove alcuni processi fanno manipolazioni del database al di fuori del vostro controllo potreste trovarvi in una situazione in cui l’entità A referenzia l’entità B con una many-to-one, e quindi la tabella dove viene salvata l’entità A ha una foreign-key verso la tabella B.&lt;/p&gt;  &lt;p&gt;Supponiamo inoltre che la tabella A sia stata introdotta in un momento successivo, e ci sono processi che cancellano record dalla tabella usata per salvare l’entità B, lasciando quindi i record di A orfani. In questa situazione NHibernate genererà un errore a runtime quando si tenta di accedere alla relazione di una entità orfana, perchè il lazy load non riesce a caricare la corrispondente entità B, pur avendo un id nella colonna della foreign-key.&lt;/p&gt;  &lt;p&gt;Una possibile soluzione è utilizzare l’opzione not-found=”ignore”, la quale permette di dire a nhibernate di ignorare questa situazione, se nella tabella dell’entità A ci sta un riferimento ad una entità B che non è più presente, si può ignorare questo errore, e lasciare la corrispondente proprietà di navigazione a null.&lt;/p&gt;  &lt;p&gt;Questa però è una soluzione poco efficiente per molte ragioni. La prima è che NHibernate effettuerà sempre la query per tentare di recuperare l’entità B correlata, quindi ogni volta che caricate una entità A viene sempre fatta una ulteriore select per capire se la corrispondente Entità B esiste, quindi non viene più applicato il lazy load. Quando caricate liste di entità &lt;a href="http://www.niceideas.ch/roller2/badtrash/entry/hibernate_s_not_found_ignore" target="_blank"&gt;il problema potrebbe diventare anche peggiore&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La soluzione in questo caso è una sola, fare in modo che il database non abbia foreign-key orfane, perchè avere una base dati di questo tipo è veramente molto pericoloso, quindi se avete dei processi fuori dal vostro controllo, non dimenticate la &lt;a href="http://msdn.microsoft.com/en-us/library/ms186973%28v=sql.105%29.aspx" target="_blank"&gt;ON DELETE SET NULL&lt;/a&gt;, che permette di mantenere l’integrità referenziale in maniera automatica, e quindi evitando di dover ricorrere a delle opzioni “pericolose” di NHibernate.&lt;/p&gt;  &lt;p&gt;Alk.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/101588.aspx" width="1" height="1" /&gt;</description><dc:creator>Gian Maria  Ricci</dc:creator></item><item><title>Epic e Theme in Agile Portfolio Management</title><link>http://blogs.ugidotnet.org/j3r/archive/2013/06/19/epic-e-theme-in-agile-portfolio-management.aspx</link><pubDate>Wed, 19 Jun 2013 11:39:45 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/j3r/archive/2013/06/19/epic-e-theme-in-agile-portfolio-management.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/j3r/comments/101589.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/j3r/comments/commentRss/101589.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/j3r/archive/2013/06/19/epic-e-theme-in-agile-portfolio-management.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/j3r/services/trackbacks/101589.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/j3r/rss.aspx">Epic e Theme in Agile Portfolio Management</source><description>&lt;p&gt;Oltre alla tecnologia in se, l’introduzione della funzionalita’ di Agile Portfolio Management in Team Foundation Server e Service ha un grosso impatto sulla superficie che si va a coprire con il progetto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Attenzione&lt;/strong&gt;: in molti casi parlo di progetti medio-grandi. Introdurre concetti come questo in progetti piccoli potrebbe essere controproducente. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-2IW9rJgdhuE/Ubl9lsUn3SI/AAAAAAAAA9g/T66gOR7Md3E/s1600-h/image6.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh6.ggpht.com/-8JeU1in26bE/Ubl9mc4fFWI/AAAAAAAAA9o/iZ_7G8nziws/image_thumb2.png?imgmax=800" width="532" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Fino ad oggi, il modo piu’ comune di approcciare l’agile backlog management e’ stato quelo di creare delle User Story e in seguito suddividerle in task unitari. Questo va benone e non sta cambiando, ma a volte ci si trova di fronte al seguente problema: la User Story e’ &lt;strong&gt;troppo grande&lt;/strong&gt; per essere inclusa in uno sprint.&lt;/p&gt;  &lt;p&gt;A volte capita, sfortunatamente. Per risolvere questo problema, ci viene in aiuto il concetto di &lt;strong&gt;Epic.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Un’ &lt;strong&gt;Epic&lt;/strong&gt; e’ sostanzialmente una grande User Story, che e’ a sua volta divisa in diverse sottostorie il cui effort e’ compatibile con la durata dello sprint. Si puo’ rappresentare come un obiettivo funzionale. Una Epic contiene una o piu’ User Story tenute insieme da un tema comune. Non si terminera’ mai in uno sprint, solitamente un’Epic e’ una grossa feature (spesso una killer feature) del nostro prodotto. Si gestisce &lt;em&gt;on top, &lt;/em&gt;perche’ potrebbe avere impatti anche su altri prodotti nell’organizzazione.&lt;/p&gt;  &lt;p&gt;Il &lt;strong&gt;Theme&lt;/strong&gt; e’ in coma a tutto quanto. Parlando in termini di progetto, potrebbe essere una major release. E’ una iniziativa, una pietra angolare del progetto stesso. I Theme guidano la strategia ed esprimono &lt;strong&gt;una direzione&lt;/strong&gt;, per questo sono generalmente non specifici.&lt;/p&gt;  &lt;p&gt;Al momento in Team Foundation Service (e presto in Team Foundation Server 2013) si avra’ il concetto di Epic out-of-the-box. Ma come Brian Harry ci ha detto nel suo &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/06/03/visual-studio-2013.aspx"&gt;post&lt;/a&gt;, e’ possibile effettuare delle customizzazioni con un basso effort per modificare l’esperienza d’uso e modellare in modo ancora piu’ fedele il processo.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/j3r/aggbug/101589.aspx" width="1" height="1" /&gt;</description><dc:creator>Matteo Emili</dc:creator></item><item><title>Progetti per l&amp;rsquo;estate</title><link>http://blogs.ugidotnet.org/ddl/archive/2013/06/19/progetti-per-lrsquoestate.aspx</link><pubDate>Wed, 19 Jun 2013 08:38:19 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/ddl/archive/2013/06/19/progetti-per-lrsquoestate.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/ddl/comments/101587.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/ddl/comments/commentRss/101587.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/ddl/archive/2013/06/19/progetti-per-lrsquoestate.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/ddl/services/trackbacks/101587.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/ddl/rss.aspx">Progetti per l&amp;rsquo;estate</source><description>&lt;p&gt;Come potete vedere non ho messo un [OT] all’inizio del post perché i progetti che ho in mente sono prettamente di sviluppo: &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;1) Ho appena rilasciato la versione WP8 della mia app di punta (non un enorme numero di download, ma per essere una app regionale devo dire che va molto bene): &lt;a href="http://www.windowsphone.com/it-it/store/app/meteo-fvg/4e25de16-3011-442f-a2a7-5cb4ed3ceff6" target="_blank"&gt;Meteo FVG&lt;/a&gt;. E’ mia intenzione fare alcuni post per spiegare come l’applicazione è strutturata e condividere con voi il mio codice per darvi una traccia per affrontare problematiche simili. Analizzeremo come ho utilizzato il framework &lt;a href="https://caliburnmicro.codeplex.com/" target="_blank"&gt;Caliburn.Micro&lt;/a&gt; per risolvere la mia naturale MVVM impedance mismatch, insieme a molti altre piccole soluzioni che ho dovuto trovare per arrivare ad una applicazione funzionante e spero anche “bella” da vedere. Il tutto  non sarebbe stato possibile senza &lt;a href="http://qmatteoq.com/" target="_blank"&gt;Matteo&lt;/a&gt; &lt;a href="http://wp.qmatteoq.com/" target="_blank"&gt;Pagani&lt;/a&gt;, che ho disturbato in parecchie occasioni &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Sorriso" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Progetti-per-lestate_86F8/wlEmoticon-smile_2.png" /&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;2) Sto iniziando ad usare un altro framework per il supporto allo sviluppo delle applicazioni che utilizzano in pattern MVVM: &lt;a href="https://radical.codeplex.com/" target="_blank"&gt;Radical&lt;/a&gt; del grande (e super disponibile) &lt;a href="http://blogs.ugidotnet.org/topics/Default.aspx" target="_blank"&gt;Mauro&lt;/a&gt; &lt;a href="http://milestone.topics.it/" target="_blank"&gt;Servienti&lt;/a&gt;. Ci sto trovando tutto quello che mi serve per risolvere alcuni “problemi” di iterazione con la view che il pattern MVVM presenta. La mia idea è infatti che l’utente finale non deve accettare interfacce più “brutte” solo perché a noi “viene comodo” usare MVVM e l’user experience deve essere la stessa se non migliore. Condividerò con voi le potenzialità di questo framework che vi invito a provare fin da ora. &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Occhiolino" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Progetti-per-lestate_86F8/wlEmoticon-winkingsmile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Come vedete, oltre che di buoni propositi questo post profuma di Community, un qualcosa che negli ultimi anni mi ha coinvolto sempre di più e che mi ha portato ad investire tempo (e denaro) ricavandone delle enormi soddisfazioni, chissà che non ci scappi anche un post sull’argomento. &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Occhiolino" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/Progetti-per-lestate_86F8/wlEmoticon-winkingsmile_2.png" /&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3c6aa47a-06f0-46c7-a5fa-bca9cdf175a0" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;Tag di Technorati: &lt;a href="http://technorati.com/tags/Community" rel="tag"&gt;Community&lt;/a&gt;,&lt;a href="http://technorati.com/tags/vNext" rel="tag"&gt;vNext&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Phone" rel="tag"&gt;Windows Phone&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Radical" rel="tag"&gt;Radical&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVVM" rel="tag"&gt;MVVM&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/ddl/aggbug/101587.aspx" width="1" height="1" /&gt;</description><dc:creator>Nazareno</dc:creator></item><item><title>Radical take 2: materiale</title><link>http://blogs.ugidotnet.org/topics/archive/2013/06/19/radical-take-2-materiale.aspx</link><pubDate>Wed, 19 Jun 2013 08:31:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/06/19/radical-take-2-materiale.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101584.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101584.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/06/19/radical-take-2-materiale.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101584.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">Radical take 2: materiale</source><description>&lt;p&gt;Anche il secondo giro del nostro tour serale su &lt;a href="http://radical.codeplex.com" target="_blank"&gt;Radical&lt;/a&gt; è andato, spero sia andato come speravo :-), dai feedback direi di si.&lt;/p&gt;  &lt;p&gt;Ho pubblicato on line il materiale su SkyDrive: &lt;a href="http://sdrv.ms/13DJLtT"&gt;sdrv.ms/13DJLtT&lt;/a&gt;, mentre l’esempio che abbiamo cominciato a realizzare è presente nei &lt;a href="http://radical.codeplex.com/SourceControl/latest"&gt;sorgenti della solution&lt;/a&gt; per ora, al prossimo giro lo tolgo e lo faccio diventare un progetto a se per evitarvi di dover fare il setup della vostra macchina con tutti i crismi necessari per far funzionare la solution di Radical nel suo complesso (Windows 8, Hyper-V, Blend SDK vari, WP8 etc..)&lt;/p&gt;  &lt;p&gt;Sto pianificando il prossimo step (take 3) con i seguenti argomenti:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Gestione di “&lt;strong&gt;conversazioni multiple&lt;/strong&gt;”;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Editing&lt;/strong&gt; di una entità (Person);&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Gestione di un &lt;strong&gt;grafo complesso&lt;/strong&gt; (aggiungendo ad esempio il concetto di Address&lt;strong&gt;es&lt;/strong&gt; a Person);&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Introduzione ai concetti di “&lt;strong&gt;UI Composition&lt;/strong&gt;” (partial e automatismi);&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scambio&lt;/strong&gt; di informazioni tra VM via broker;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ho messo online il “solito” doodle: &lt;a title="http://doodle.com/4p67bkyvc4b2rnb9" href="http://doodle.com/4p67bkyvc4b2rnb9"&gt;http://doodle.com/4p67bkyvc4b2rnb9&lt;/a&gt;, è luglio quindi le date disponibili sono un po’ quel che sono a sto giro.&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101584.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Re[studing] C# 5 - (WinRT)</title><link>http://blogs.ugidotnet.org/mb/archive/2013/06/19/restuding-c-5-winrt.aspx</link><pubDate>Wed, 19 Jun 2013 07:09:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/mb/archive/2013/06/19/restuding-c-5-winrt.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/mb/comments/101586.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/mb/comments/commentRss/101586.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/mb/archive/2013/06/19/restuding-c-5-winrt.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/mb/services/trackbacks/101586.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/mb/rss.aspx">Re[studing] C# 5 - (WinRT)</source><description>&lt;table&gt;
        &lt;tr&gt;
            &lt;td&gt;

&lt;h2&gt;Premessa&lt;/h2&gt;

                &lt;p&gt;
                    Dopo anni di programmazione C# ho deciso di comprare un libro sull'ultima versione del
        linguaggio (5 - &lt;a href="http://en.wikipedia.org/wiki/C_Sharp_5.0"&gt;C Sharp (programming language)&lt;/a&gt;) e ri-studiarmelo.
                &lt;/p&gt;
                &lt;p&gt;
                    &lt;br /&gt;
                    Le ragioni sono:
                &lt;/p&gt;
                &lt;ul&gt;
                    &lt;li&gt;Voglio rivedere i concetti base così da imprimerli nella mente confrontandoli con l'attuale conoscenza ed esperienza&lt;/li&gt;
                    &lt;li&gt;Voglio studiare le novità dell'ultima versione ed altri aspetti non sufficientemente approfonditi delle precedenti&lt;/li&gt;
                &lt;/ul&gt;

                &lt;h2&gt;Materiale&lt;/h2&gt;

                &lt;p&gt;
                    Ho scelto come libro di testo &lt;a href="http://www.albahari.com/nutshell/whythisbook.aspx"&gt;C# 5.0 in a Nutshell&lt;/a&gt;
                    la ragione è lo stile chiaro e coinciso con esempi e illustrazioni pratiche e intuitive. Se volete
                    un idea provate a leggere questa serie di articoli sul &lt;a href="http://www.albahari.com/threading/"&gt;Threading in C#&lt;/a&gt; estratti
        dall'ononima serie.
                &lt;/p&gt;

                &lt;h2&gt;Metodo&lt;/h2&gt;

                &lt;p&gt;
                    Voglio registrare sul mio blog gli aspetti più interessanti e i piccoli appunti sulle caratteristiche
        del linguaggio che ignoravo oppure semplicemente davo per scontato.&lt;/p&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;img src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/mb/4003/r_RestudingCSharp_Lampadina.png" width="256" height="256" /&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;

    &lt;h2&gt;Iniziamo&lt;/h2&gt;

    &lt;p&gt;
        Dall'introduzione ho trovato interessante una parte che spiega che cosa è WinRT e che relazione
        ha il .NET Framework e quali sono le differenze...&lt;/p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;h3&gt;Librerie Windows Runtime (WinRT)&lt;/h3&gt;

            &lt;ul&gt;
                &lt;li&gt;Interfaccia e ambiente di esecuzione &lt;strong&gt;&lt;em&gt;indipendente dal linguaggio e OOP&lt;/em&gt;&lt;/strong&gt; (basata su un evoluzione di &lt;strong&gt;&lt;em&gt;COM&lt;/em&gt;&lt;/strong&gt;)&lt;/li&gt;
                &lt;li&gt;Supporta la nuova interfaccia &lt;strong&gt;&lt;em&gt;Metro&lt;/em&gt;&lt;/strong&gt; (ufficialmente &lt;strong&gt;&lt;em&gt;Modern-UI&lt;/em&gt;&lt;/strong&gt;)&lt;/li&gt;
                &lt;li&gt;Le funzionalità di &lt;strong&gt;&lt;em&gt;WinRT in parte si sovrappongono parzialmente al .NET Framework&lt;/em&gt;&lt;/strong&gt; e aggiungono alcune restrizioni

                        &lt;ul&gt;
                            &lt;li&gt;Esecuzione in una &lt;strong&gt;&lt;em&gt;SandBox&lt;/em&gt;&lt;/strong&gt; (accesso file impedito, ridotte funzionalità di comunicazione &lt;em&gt;inter-process&lt;/em&gt;)&lt;/li&gt;
                            &lt;li&gt;&lt;strong&gt;&lt;em&gt;Framework ridotto&lt;/em&gt;&lt;/strong&gt; per l'esecuzione su tablet con capacità limitate&lt;/li&gt;
                            &lt;li&gt;&lt;strong&gt;&lt;em&gt;WinRT non sostituisce il .NET Framework&lt;/em&gt;&lt;/strong&gt; che rimane lo standard per sviluppare applicazioni &lt;strong&gt;&lt;em&gt;Desktop e Server&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
                        &lt;/ul&gt;
                &lt;/li&gt;

                &lt;li&gt;Il profilo per le applicazioni Metro di VS (&lt;strong&gt;&lt;em&gt;Windows Store in VS 2012&lt;/em&gt;&lt;/strong&gt;) determina &lt;strong&gt;&lt;em&gt;l'esclusione delle parti del fw .NET sovrapposte e una altra altra larga parte&lt;/em&gt;&lt;/strong&gt; (non necessaria/supportata allo sviluppo di questo tipo di app)&lt;/li&gt;

            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ul&gt;&lt;img src="http://blogs.ugidotnet.org/mb/aggbug/101586.aspx" width="1" height="1" /&gt;</description><dc:creator>Marco Baldessari</dc:creator></item><item><title>Data-Driven Documents</title><link>http://blogs.ugidotnet.org/alessage/archive/2013/06/17/data-driven-documents.aspx</link><pubDate>Mon, 17 Jun 2013 16:05:52 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessage/archive/2013/06/17/data-driven-documents.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessage/comments/101585.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessage/comments/commentRss/101585.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessage/archive/2013/06/17/data-driven-documents.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessage/services/trackbacks/101585.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessage/rss.aspx">Data-Driven Documents</source><description>&lt;a href="http://d3js.org/"&gt;http://d3js.org&lt;/a&gt;&lt;br /&gt;
&lt;img src="http://d3js.org/ex/bubble.png" alt="" /&gt; &lt;img src="http://d3js.org/ex/tree.png" alt="" /&gt; &lt;img src="http://d3js.org/ex/cubism.png" alt="" /&gt; &lt;img src="http://d3js.org/ex/force-collision.png" alt="" /&gt;&lt;img src="http://blogs.ugidotnet.org/alessage/aggbug/101585.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Gervasoni</dc:creator></item><item><title>ACL++: Anti Curruption Layer &amp;ldquo;on steroids&amp;rdquo;</title><link>http://blogs.ugidotnet.org/topics/archive/2013/06/17/acl-anti-curruption-layer-ldquoon-steroidsrdquo.aspx</link><pubDate>Mon, 17 Jun 2013 08:17:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/06/17/acl-anti-curruption-layer-ldquoon-steroidsrdquo.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101583.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101583.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/06/17/acl-anti-curruption-layer-ldquoon-steroidsrdquo.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101583.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">ACL++: Anti Curruption Layer &amp;ldquo;on steroids&amp;rdquo;</source><description>&lt;p&gt;C’era una volta la velleità di avere il mega-sistemone che facesse tutto, velleità rapidamente abbandonata al crescere del monolite per ovvi motivi. Nel tentativo di realizzare il monolite ci si scontra molto rapidamente con il fatto che tipicamente i requisiti di business cambiano più rapidamente del tempo necessario per la realizzazione, ci si scontra con il fatto che non è possibile pensare di fare il deploy del monolite bloccando ogni volta tutta l’infrastruttura, ci si scontra con il dettaglio che non è possibile far evolvere indipendentemente le varie parti del monolite.&lt;/p&gt;  &lt;p&gt;Tutto questo, e molto altro, ci fa dire che tentare di realizzare un monolite non ha senso, o meglio non è economicamente sensato, perché è plausibile &lt;em&gt;ipotizzare&lt;/em&gt; che dato un quantitativo di risorse sensate sia possibile abbattere in misura sensibile i problemi di cui sopra rendendolo possibile, ma non necessariamente sensato.&lt;/p&gt;  &lt;p&gt;Detto questo diventa evidente che dobbiamo convivere con sistemi eterogenei, con un ciclo di vita, e di rilascio, indipendente gli uni dagli altri; sistemi che hanno ognuno le proprie logiche e i propri formati di persistenza, e tante belle (o brutte) cose che li rendono molto isolati e distanti tra loro.&lt;/p&gt;  &lt;p&gt;Risulta altresì vero che i requisiti di business sempre più spesso ci spingono verso la necessità di far parlare tra loro questi sistemi, in una parola si rende necessario parlare di &lt;strong&gt;integrazione&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Ma quando abbiamo a che fare con sistemi che non sono, almeno nel ciclo di vita, sotto il nostro controllo diventa necessario introdurre qualcosa che protegga il nostro sistema da evoluzioni non retro-compatibili dei sistemi esterni con cui desideriamo dialogare.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_2.png" rel="lightbox"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_thumb.png" width="370" height="158" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un ACL ha quindi lo scopo di frapporsi far i due:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_10.png" rel="lightbox"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_thumb_4.png" width="370" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Se abbiamo quindi due mondi molto diversi che in qualche modo devono poter dialogare, due mondi molto diversi come nell’esempio di cui sopra, ha molto senso mettere un cuscino di sicurezza che faccia da mediatore nel dialogo e che in alcuni casi ci possa dare molto di più.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_12.png" rel="lightbox"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/ACL-Anti-Curruption-Layer_A11E/image_thumb_5.png" width="570" height="310" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;esagerato :-)&lt;/p&gt;  &lt;p&gt;Il cuscino, il nostro ACL, in questo caso è molto ma molto di più di un semplice cuscino, abbiamo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;un sistema (AS400) la cui forma dei dati è molto, ma molto diversa da quello che servirebbe a noi, inoltre noi non siamo gli unici a cui servirebbero quei dati; &lt;/li&gt;    &lt;li&gt;c’è quindi un software commerciale di terze parti il cui unico scopo è quello di travasare, ogni 15 minuti, da AS400 a SQL Server i dati, una gran quantità di dati, e anche di fare un primo passaggio di normalizzazione/trasformazione; &lt;/li&gt;    &lt;li&gt;a questo punto da SQL Server siamo in grado di lanciare (al termine di ogni sync) un processo che capisce cosa è effettivamente cambiato dall’ultima sync e si limita a mettere in una coda queste informazioni; &lt;/li&gt;    &lt;li&gt;c’è quindi un servizio in ascolto su quella coda privata che estrae le informazioni da SQL, fa un po’ di ragionamenti e le trasforma nella forma definitiva che il mondo esterno desidera salvando i dati su MongoDB; &lt;/li&gt;    &lt;li&gt;infine il processo di salvataggio su MongoDB notifica su una coda pubblica l’evento avvenuto; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Che cosa otteniamo alla fine? &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Una cosa &lt;u&gt;fantastica&lt;/u&gt; un sistema &lt;em&gt;push&lt;/em&gt; che notifica tutti gli interessati di ogni modifica che avviane sul sistema di origine.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ovviamente con lo scotto dei 15 minuti di ritardo e con il fatto che se nella finestra temporale ci sono più modifiche le perdiamo, ma ci interessa poco perché se ci pensate passiamo dal non avere nulla di nulla ad avere una catena di integrazione facilissima da utilizzare per qualsivoglia tecnologia ci sia la fuori.&lt;/p&gt;  &lt;p&gt;Easy peasy, lemon squeezy… ;-)&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101583.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Flat UI </title><link>http://blogs.ugidotnet.org/alessage/archive/2013/06/12/flat-ui.aspx</link><pubDate>Wed, 12 Jun 2013 13:39:01 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessage/archive/2013/06/12/flat-ui.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessage/comments/101582.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessage/comments/commentRss/101582.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessage/archive/2013/06/12/flat-ui.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessage/services/trackbacks/101582.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessage/rss.aspx">Flat UI </source><description>&lt;p class="demo-logo"&gt;&lt;small&gt;Free Web User Interface Kit&lt;/small&gt;&lt;/p&gt;
&lt;a href="http://designmodo.com/demo/flat-ui/"&gt;http://designmodo.com/demo/flat-ui/&lt;/a&gt;&lt;img src="http://blogs.ugidotnet.org/alessage/aggbug/101582.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Gervasoni</dc:creator></item><item><title>MVVM w/ Radical take 2: logistica</title><link>http://blogs.ugidotnet.org/topics/archive/2013/06/11/mvvm-w-radical-take-2-logistica.aspx</link><pubDate>Tue, 11 Jun 2013 13:39:12 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/06/11/mvvm-w-radical-take-2-logistica.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101581.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101581.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/06/11/mvvm-w-radical-take-2-logistica.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101581.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">MVVM w/ Radical take 2: logistica</source><description>&lt;p&gt;Ci siamo domani sera ci sarà il secondo appuntamento con MVVM w/ &lt;a href="http://radical.codeplex.com" target="_blank"&gt;Radical&lt;/a&gt;, ancora per questo giro la piattaforma è quella di Live Meeting, di seguito i dettagli:&lt;/p&gt;  &lt;p&gt;Url per la partecipazione: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=7N746Q&amp;amp;role=attend&amp;amp;pw=FrWm%2B_-6f"&gt;https://www.livemeeting.com/cc/mvp/join?id=7N746Q&amp;amp;role=attend&amp;amp;pw=FrWm%2B_-6f&lt;/a&gt;    &lt;br /&gt;Meeting ID: 7N746Q    &lt;br /&gt;Access Code: FrWm+_-6f &lt;/p&gt;  &lt;p&gt;A domani!&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101581.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Edward Snowden: l'informatore dietro le rivelazioni sulla sorveglianza della NSA</title><link>http://blogs.ugidotnet.org/luKa/archive/2013/06/10/edward-snowden-linformatore-dietro-le-rivelazioni-sulla-sorveglianza-della-nsa.aspx</link><pubDate>Sun, 09 Jun 2013 22:08:37 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/luKa/archive/2013/06/10/edward-snowden-linformatore-dietro-le-rivelazioni-sulla-sorveglianza-della-nsa.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/luKa/comments/101580.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/luKa/comments/commentRss/101580.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/luKa/archive/2013/06/10/edward-snowden-linformatore-dietro-le-rivelazioni-sulla-sorveglianza-della-nsa.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/luKa/services/trackbacks/101580.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/luKa/rss.aspx">Edward Snowden: l'informatore dietro le rivelazioni sulla sorveglianza della NSA</source><description>Segue la traduzione in italiano del articolo pubblicato online dal Guardian la sera del 9 Giugno.
Essendo un argomento importante che riguarda tutti gli utenti Italiani di Internet e dei servizi internet di aziende Americane (Google, YouTube, Microsoft, Skype, Apple, Yahoo!, Facebook) lo ho tradotto. (Clicca sul titolo per continuare a leggere).&lt;img src="http://blogs.ugidotnet.org/luKa/aggbug/101580.aspx" width="1" height="1" /&gt;</description><dc:creator>Luca Minudel</dc:creator></item><item><title>Javascript &amp; HTML 5 - Chiamate cross-domain usando iFrame, postMessage e localStorage</title><link>http://blogs.ugidotnet.org/alessandro_sorcinelli/archive/2013/06/04/chiamate-cross-domain-usando-javascript-iframe-postmessage-e-localstorage.aspx</link><pubDate>Tue, 04 Jun 2013 14:28:45 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessandro_sorcinelli/archive/2013/06/04/chiamate-cross-domain-usando-javascript-iframe-postmessage-e-localstorage.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessandro_sorcinelli/comments/101579.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessandro_sorcinelli/comments/commentRss/101579.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessandro_sorcinelli/archive/2013/06/04/chiamate-cross-domain-usando-javascript-iframe-postmessage-e-localstorage.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessandro_sorcinelli/services/trackbacks/101579.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessandro_sorcinelli/rss.aspx">Javascript &amp; HTML 5 - Chiamate cross-domain usando iFrame, postMessage e localStorage</source><description>&lt;p&gt;L’esigenza penso che possa essere comune a molti: supponiamo di avere due pagine, A e B memorizzate su domini differenti. Supponiamo di aprire B da A  e di voler refreshare A quando un determinato evento si verifica in B (ad esempio l’utente preme sul classico bottone “Salva”).&lt;/p&gt;
&lt;p&gt;Come fare? Il solito Google ci viene in aiuto con una miriade di hack e trucchi vari che però nel nostro scenario non sono tutti applicabili. Se la pagina B viene aperta con il classico &lt;strong&gt;window.open&lt;/strong&gt;, una soluzione banale è quella di impostare il &lt;strong&gt;document.domain&lt;/strong&gt; di entrambe la pagine ad un valore comune. Facendo questo la pagina B può richiamare una funzione qualsiasi del chiamante usando la sintassi: &lt;strong&gt;window.opener.MyFunction&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Questa soluzione è efficace nei casi più semplici, ma può generare effetti spiacevoli, soprattutto se A o B (o entrambe) richiamano a loro volta altre funzioni o altre pagine. In questi casi infatti il &lt;strong&gt;document.domain&lt;/strong&gt; va impostato su tutte le pagine, altrimenti avremo problemi di sicurezza in altre chiamate.&lt;/p&gt;
&lt;p&gt;La soluzione che propongo in questo post è un po’ più complessa ed è un mix delle varie tecniche che si possono trovare in giro:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Al verificarsi dell’evento desiderato nella pagina B, andremo ad impostare un valore usando il &lt;a href="http://www.w3schools.com/html/html5_webstorage.asp"&gt;localStorage&lt;/a&gt;.       &lt;br /&gt;
               
    &lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; height: 30px; text-align: left; line-height: 12pt; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum1" style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; localStorage.setItem(&lt;span style="color: rgb(0, 96, 128);"&gt;"MyProperty"&lt;/span&gt;, &lt;span style="color: rgb(0, 96, 128);"&gt;'myValue'&lt;/span&gt;);&lt;/pre&gt;
    &lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Il &lt;strong&gt;localStorage&lt;/strong&gt; è una delle tante novità di HTML 5 ed è supportato su tutti i browser moderni (per IE dalla versione 8 in su). In alternativa al &lt;strong&gt;localStorage&lt;/strong&gt; si può usare il &lt;strong&gt;sessionStorage&lt;/strong&gt; oppure per maggiore compatibilità anche i “vecchi” cookie.       &lt;br /&gt;
    &lt;br /&gt;
    Il valore impostato sarà disponibile per il dominio B, ma non per A che quindi, se ci accede, lo troverà vuoto.       &lt;br /&gt;
    &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Nella pagina A inseriamo un iFrame che punterà ad una nuova pagina C, memorizzata nello stesso dominio di B. La pagina C può essere una semplice pagina HTML che conterrà il seguente codice javascript:      &lt;br /&gt;
       
    &lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; height: 140px; text-align: left; line-height: 12pt; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum1" style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; setInterval(&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt; () {      &lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum2" style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; storageValue = localStorage.getItem(&lt;span style="color: rgb(0, 96, 128);"&gt;"MyProperty"&lt;/span&gt;);&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum3" style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (storageValue != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;) {&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum4" style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;         window.parent.postMessage(storageValue, &lt;span style="color: rgb(0, 96, 128);"&gt;"*"&lt;/span&gt;);&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum5" style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt;         &lt;span style="color: rgb(0, 128, 0);"&gt;// Remove the property&lt;/span&gt;&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum6" style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;         localStorage.removeItem(&lt;span style="color: rgb(0, 96, 128);"&gt;"MyProperty"&lt;/span&gt;);&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum7" style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum8" style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt; }, 400);    &lt;/pre&gt;
    &lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    Sostanzialmente viene creato un timer che ciclamente controlla la proprietà andando a leggere il &lt;strong&gt;localStorage&lt;/strong&gt;. Nel caso venisse trovata valorizzata la proprietà cercata, verrà postato un messaggio al parent utilizzando il metodo &lt;a href="http://www.w3.org/TR/webmessaging/#channel-messaging"&gt;postMessage&lt;/a&gt;. Il metodo consente di inviare messaggi cross domain tra le finestre del browser. Nell’esempio &lt;strong&gt;window.parent&lt;/strong&gt; referenzierà la pagina A che è quella che sta aprendo C all'interno dell’iframe. Il secondo parametro del metodo &lt;strong&gt;postMessage&lt;/strong&gt; è l’origine del messaggio e andrebbe valorizzato con il giusto dominio, nel nostro caso con quello della pagina A. Una volta inviato il messaggio alla pagina parent la proprietà verrà rimossa dal &lt;strong&gt;localStorage&lt;/strong&gt; per evitare messaggi multipli.       &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Nella pagina A va aggiunto un listener che rimarrà in attesa di eventuali messaggi provenienti dall’iFrame:           &lt;br /&gt;
       
    &lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; height: 140px; text-align: left; line-height: 12pt; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum1" style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; eventMethod = window.addEventListener ? &lt;span style="color: rgb(0, 96, 128);"&gt;"addEventListener"&lt;/span&gt; : &lt;span style="color: rgb(0, 96, 128);"&gt;"attachEvent"&lt;/span&gt;;&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum2" style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; eventer = window[eventMethod];&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum3" style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt; messageEvent = eventMethod == &lt;span style="color: rgb(0, 96, 128);"&gt;"attachEvent"&lt;/span&gt; ? &lt;span style="color: rgb(0, 96, 128);"&gt;"onmessage"&lt;/span&gt; : &lt;span style="color: rgb(0, 96, 128);"&gt;"message"&lt;/span&gt;;&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum4" style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum5" style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;// Listen to message from child IFrame window&lt;/span&gt;&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum6" style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt; eventer(messageEvent, &lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt; (e) {    &lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span id="lnum7" style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     alert(e.data);&lt;/pre&gt;
    &lt;!--CRLF--&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&lt;span id="lnum8" style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt; }, &lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;);&lt;/pre&gt;
    &lt;!--CRLF--&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;br /&gt;
    I messaggi inviati alla pagina A vengono gestiti dal listener sull’evento &lt;strong&gt;onmessage&lt;/strong&gt; (o sul vecchio &lt;strong&gt;message&lt;/strong&gt; nel caso si usi &lt;strong&gt;attachEvent&lt;/strong&gt;). Nell’esempio ogni qual volta B invia un messaggio, la pagina A gestirà tale messaggio e la proprietà &lt;strong&gt;e.data&lt;/strong&gt; conterrà il valore &lt;strong&gt;MyValue&lt;/strong&gt;. Chiaramente all’interno della funzione che riceve il messaggio è possibile implementare qualsiasi tipo di logica ed è anche possibile distinguere le eventuali origini dei messaggi utilizzando la proprietà &lt;strong&gt;origin&lt;/strong&gt; dell’oggetto e.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;   &lt;br /&gt;
Una soluzione simile, ma più semplice, è applicabile anche quando B è direttamente "hostata" dentro un iFrame di A. In questo caso sarà possibile scambiare messaggi tra A e B senza passare dal localStorage, ma usando direttamente la &lt;strong&gt;postMessage&lt;/strong&gt; con relativa gestione attraverso il listener.    &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/alessandro_sorcinelli/aggbug/101579.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Sorcinelli</dc:creator></item><item><title>Un salto verso l&amp;rsquo;Agile Portfolio Management</title><link>http://blogs.ugidotnet.org/j3r/archive/2013/06/04/un-salto-verso-lrsquoagile-portfolio-management.aspx</link><pubDate>Tue, 04 Jun 2013 08:48:25 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/j3r/archive/2013/06/04/un-salto-verso-lrsquoagile-portfolio-management.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/j3r/comments/101577.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/j3r/comments/commentRss/101577.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/j3r/archive/2013/06/04/un-salto-verso-lrsquoagile-portfolio-management.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/j3r/services/trackbacks/101577.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/j3r/rss.aspx">Un salto verso l&amp;rsquo;Agile Portfolio Management</source><description>&lt;p&gt;Fino a ieri, volendo gestire qualcosa in piu’ di User Story e Task, Bug, etc. si doveva usare un certo livello di astrazione e l’uso di tool specifici come Project Server, spesso &lt;em&gt;forzati&lt;/em&gt; ad un comportamento ai limiti del consentito.&lt;/p&gt;  &lt;p&gt;Con le nuove feature rivelate ieri per l’Agile Portfolio Management possiamo evitare di scomodare Project Server per compiti nei quali sarebbe eccessivo, ma comunque potremo integrarlo con TFS 2013 se necessario.&lt;/p&gt;  &lt;p&gt;Prendiamo questo esempio: vogliamo creare un sistema, e una delle sue feaure e’ il &lt;strong&gt;cestino dei rifiuti&lt;/strong&gt;. Quindi creiamo la feature con il nuovo Work Item Type, e la vediamo nel backlog filtrando per feature:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-tnMfXkSOxSs/Uayow-OC-RI/AAAAAAAAA74/2Zf7Gwg1muk/s1600-h/image%25255B9%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-KcaB4i-3Wc4/UayoxVjWJEI/AAAAAAAAA8A/IM9njjEbSoM/image_thumb%25255B3%25255D.png?imgmax=800" width="127" height="70" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/-OXR1OIxH1s8/Uayox99v9XI/AAAAAAAAA8I/671J67BmlhA/s1600-h/image%25255B15%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-o1UfUH7IoKg/UayoyUvq3PI/AAAAAAAAA8Q/oFRjIrvSyAI/image_thumb%25255B9%25255D.png?imgmax=800" width="455" height="66" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ovviamente questa feaure avra’ delle user story al suo interno. Diciamo che vogliamo &lt;strong&gt;mettere roba nel cestino&lt;/strong&gt; e &lt;strong&gt;svuotare il cestino&lt;/strong&gt; quando necessario.&lt;/p&gt;  &lt;p&gt;Queste sono Product Backlog Item, o Requirement a seconda del  Process Template che si utilizza. Sto usando MSF for CMMI, quindi sono requisiti – ora posso nuovamente cambiare il filtro per visualizzarli:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-MtAvmGjbNQk/UayozHpEL-I/AAAAAAAAA8Y/-Ay4sT5dhkA/s1600-h/image%25255B18%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-70i2PWcYrhM/Uayo0gQV4MI/AAAAAAAAA8g/XxbXNwHI9LU/image_thumb%25255B10%25255D.png?imgmax=800" width="148" height="63" /&gt;&lt;/a&gt; &lt;a href="http://lh5.ggpht.com/-g0fXjtWSA8o/Uayo1IPExGI/AAAAAAAAA8o/ktlMQ6dBP9Q/s1600-h/image%25255B23%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh3.ggpht.com/-aGTg6VwtWf0/Uayo1sgkinI/AAAAAAAAA8w/xkCY4_7WcDg/image_thumb%25255B13%25255D.png?imgmax=800" width="449" height="102" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ovviamente questi Requirement saranno suddivisi in una serie di Task, non ci sono differenze rispetto al passato. Ecco cosa vedo cambiando ancora il filtro:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Z0_pvX0VQ5s/Uayo2WqHbPI/AAAAAAAAA84/o4b_f4ciuHg/s1600-h/image%25255B26%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh5.ggpht.com/-2T_TviOrYY8/Uayo3FlYtFI/AAAAAAAAA9A/e8DnW4HFOMk/image_thumb%25255B14%25255D.png?imgmax=800" width="110" height="62" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/-LfSrcZHu9kQ/Uayo3rdQAUI/AAAAAAAAA9I/3DdIXWTOjsc/s1600-h/image%25255B30%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-HGKW9SOs3bQ/Uayo4Enf0aI/AAAAAAAAA9Q/eg3kCi5cjBI/image_thumb%25255B16%25255D.png?imgmax=800" width="421" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Questa vista e’ esattamente quello che vogliamo ottenere. Ed e’ molto piu’ semplice da capire e visualizzare. piuttosto che usare altri strumenti magari in modo improprio.&lt;/p&gt;  &lt;p&gt;Allarghiamo questo concetto: puo’ essere utile se si hanno diversi team Scrum a lavorare sullo stesso backlog? E se si hanno backlog differenti (anche se non si dovrebbe…) perche’ non unire tutto nello stesso backlog in questo modo? Era dura spiegare ad alcuni manager come il progetto sta progredendo in termini di feature e copertura del mercato. Ora non lo e’ usando il Work Item Type &lt;strong&gt;Feature&lt;/strong&gt; come una &lt;strong&gt;astrazione&lt;/strong&gt; sul lavoro che stanno svolgendo i team. Ed e’ out-of-the-box, il che non e’ mai male.&lt;/p&gt;  &lt;p&gt;Come &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/06/03/visual-studio-2013.aspx"&gt;Brian&lt;/a&gt; ha detto, e’ solo l’inizio…c’e’ sicuramente molto ancora da aggiungere qui.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/j3r/aggbug/101577.aspx" width="1" height="1" /&gt;</description><dc:creator>Matteo Emili</dc:creator></item><item><title>Tutte le novita&amp;rsquo; di Visual Studio 2013</title><link>http://blogs.ugidotnet.org/PuntoRete/archive/2013/06/04/101576.aspx</link><pubDate>Mon, 03 Jun 2013 23:22:37 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/PuntoRete/archive/2013/06/04/101576.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/PuntoRete/comments/101576.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/PuntoRete/comments/commentRss/101576.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/PuntoRete/archive/2013/06/04/101576.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/PuntoRete/services/trackbacks/101576.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/PuntoRete/rss.aspx">Tutte le novita&amp;rsquo; di Visual Studio 2013</source><description>&lt;p&gt;Nel post di Brian Harry qui:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/06/03/visual-studio-2013.aspx"&gt;http://blogs.msdn.com/b/bharry/archive/2013/06/03/visual-studio-2013.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La prima preview build di VS 2013 verra’ rilasciata alla fine del mese di Giugno alla conferenza “Build 2013”.&lt;/p&gt;  &lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:073d82d4-7c73-424f-a4eb-e1a2a78ae5ee" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Visual+Studio+2013" rel="tag"&gt;Visual Studio 2013&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/PuntoRete/aggbug/101576.aspx" width="1" height="1" /&gt;</description><dc:creator>Michele Bersani</dc:creator></item><item><title>Azure blob storage e pdf</title><link>http://blogs.ugidotnet.org/flexy/archive/2013/06/03/azure-blob-storage-e-pdf.aspx</link><pubDate>Tue, 04 Jun 2013 10:19:13 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/flexy/archive/2013/06/03/azure-blob-storage-e-pdf.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/flexy/comments/101578.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/flexy/comments/commentRss/101578.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/flexy/archive/2013/06/03/azure-blob-storage-e-pdf.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/flexy/services/trackbacks/101578.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/flexy/rss.aspx">Azure blob storage e pdf</source><description>&lt;p&gt;Probabilmente se usate i blob storage di azure ma non usate chrome non vi siete mai accorti che caricando un pdf nel blob, chrome poi non ve lo scarica linkandolo. Questo perchè probabilmente non avete impostato il content type delle proprietà del blob quando avete caricato il file:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;blockBlob.Properties.ContentType = &lt;span class="str"&gt;"application/pdf"&lt;/span&gt;;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Spero vi sia utile.&lt;/p&gt;

&lt;p&gt;--Michele&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/flexy/aggbug/101578.aspx" width="1" height="1" /&gt;</description><dc:creator>Michele Aponte</dc:creator></item><item><title>Cambiare la startup page nelle applicazioni Windows Phone con Caliburn</title><link>http://blogs.ugidotnet.org/ddl/archive/2013/06/03/cambiare-la-startup-page-nelle-applicazioni-windows-phone-con-caliburn.aspx</link><pubDate>Mon, 03 Jun 2013 21:16:17 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/ddl/archive/2013/06/03/cambiare-la-startup-page-nelle-applicazioni-windows-phone-con-caliburn.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/ddl/comments/101575.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/ddl/comments/commentRss/101575.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/ddl/archive/2013/06/03/cambiare-la-startup-page-nelle-applicazioni-windows-phone-con-caliburn.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/ddl/services/trackbacks/101575.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/ddl/rss.aspx">Cambiare la startup page nelle applicazioni Windows Phone con Caliburn</source><description>&lt;p&gt;In &lt;a href="http://blogs.ugidotnet.org/ddl/archive/2012/07/15/cambiare-la-startup-page-nelle-applicazioni-wp7.aspx"&gt;un mio precedente post&lt;/a&gt; abbiamo visto come cambiare la pagina di startup di un progetto Windows Phone per poter decidere all’avvio della applicazione quale pagina aprire. &lt;/p&gt;  &lt;p&gt;Nel mio caso era per visualizzare una pagina di mancata disponibilità della rete dati, ma le applicazioni possono essere molteplici. &lt;/p&gt;  &lt;p&gt;Per la nuova versione &lt;a href="http://www.windowsphone.com/it-it/store/app/meteo-fvg/4e25de16-3011-442f-a2a7-5cb4ed3ceff6"&gt;della mia app&lt;/a&gt; (pensata espressamente per WP8) ho deciso di usare il &lt;a href="http://caliburnmicro.codeplex.com/"&gt;framework Caliburn.Micro&lt;/a&gt; ispirato dai &lt;a href="http://qmatteoq.com/Tags/Archive/Caliburn"&gt;post del bravo e disponibilissimo Matteo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Salto tutti i dettagli del setup di una app che utilizza Calibrun, perchè nel link qui sopra potete trovare tutte le informazioni necessarie. &lt;img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Occhiolino" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/ddl/Windows-Live-Writer/CambiarelastartuppagenelleapplicazioniWi_10CE3/wlEmoticon-winkingsmile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;La soluzione si è perfino semplificata:&lt;/p&gt;  &lt;p&gt;- Nel bootstrapper dell’applicazione facciamo l’override della funzione CreatePhoneApplicationFrame&lt;/p&gt;  &lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; PhoneApplicationFrame CreatePhoneApplicationFrame()
        {
            var frame = &lt;span class="kwrd"&gt;new&lt;/span&gt; PhoneApplicationFrame { UriMapper = &lt;span class="kwrd"&gt;new&lt;/span&gt; AssociationUriMapper() };
            &lt;span class="kwrd"&gt;return&lt;/span&gt; frame;
        }&lt;/pre&gt;

&lt;p&gt;- Definiamo ora la classe AssociationUriMapper che deriva la classe base UriMapperBase&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; AssociationUriMapper : UriMapperBase
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Uri MapUri(Uri uri)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (uri.OriginalString.Contains(&lt;span class="str"&gt;"AboutPageView"&lt;/span&gt;))
                &lt;span class="kwrd"&gt;return&lt;/span&gt; uri;
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; !PhoneUtilities.HasInternetConection ? &lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;"/Views/NoConnectionPageView.xaml"&lt;/span&gt;, UriKind.Relative) : uri;
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;Questa classe semplicemente ritorna l’uri a seconda di alcune condizioni (nel mio caso la presenza o assenza di rete). Per qualche View è possibile saltare il controllo (ad esempio la pagina di about non necessitò di connettività)&lt;/p&gt;

&lt;p&gt;Questa implementazione ha anche il vantaggio di funzionare per l’intera app (qualsiasi navigazione passa per il nostro UriMapper), per cui abbiamo centralizzato una gestione che prima era necessario applicare in ogni pagina.&lt;/p&gt;

&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ed8cc177-90a0-462b-b82e-fd6f4b2901ef" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;Tag di Technorati: &lt;a href="http://technorati.com/tags/Calibrun" rel="tag"&gt;Calibrun&lt;/a&gt;,&lt;a href="http://technorati.com/tags/UriMapping" rel="tag"&gt;UriMapping&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Phone" rel="tag"&gt;Windows Phone&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/ddl/aggbug/101575.aspx" width="1" height="1" /&gt;</description><dc:creator>Nazareno</dc:creator></item><item><title>Team Room in Team Foundation Service</title><link>http://blogs.ugidotnet.org/j3r/archive/2013/06/03/team-room-in-team-foundation-service.aspx</link><pubDate>Mon, 03 Jun 2013 14:56:16 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/j3r/archive/2013/06/03/team-room-in-team-foundation-service.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/j3r/comments/101574.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/j3r/comments/commentRss/101574.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/j3r/archive/2013/06/03/team-room-in-team-foundation-service.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/j3r/services/trackbacks/101574.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/j3r/rss.aspx">Team Room in Team Foundation Service</source><description>&lt;p&gt;Non sono solo uno strumento di chat all’interno del team, le appena annunciate Team Room sono un ottimo tool per arricchire la comunicazione all’interno del team.&lt;/p&gt;  &lt;p&gt;Possiamo innanzitutto configurarle per fornire comunicazioni broadcast per specifici eventi, come una build particolare o una specifica modifica nel codice.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-MXAFiIj4HjY/Uayf3z8c_fI/AAAAAAAAA6Q/Cc1Lru3a9Cw/s1600-h/image%25255B3%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh3.ggpht.com/-HvEJoW8YDxU/Uayf4pRETvI/AAAAAAAAA6Y/mML-q5e26DI/image_thumb%25255B1%25255D.png?imgmax=800" width="452" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-Dcz9pPF77ZQ/Uayf5RAJxvI/AAAAAAAAA6g/uogBTybMHuY/s1600-h/image%25255B19%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh5.ggpht.com/-n_ZfmdYspLQ/Uayf51otmsI/AAAAAAAAA6o/EWXr9yxhS_s/image_thumb%25255B7%25255D.png?imgmax=800" width="471" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-xPXpIQV7Yoo/Uayf63HARBI/AAAAAAAAA6w/m3vQgk-__xE/s1600-h/image%25255B20%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh3.ggpht.com/-noKUJz3xT8M/Uayf7pIY5BI/AAAAAAAAA64/GEPsUbPyeP8/image_thumb%25255B8%25255D.png?imgmax=800" width="490" height="401" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/--IvRV6e-QRo/Uayf8GiP-oI/AAAAAAAAA7A/F6TcNqtPKhU/s1600-h/image%25255B21%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-loXul6eYMPQ/Uayf88gkXuI/AAAAAAAAA7I/uzLEDSM-Fg0/image_thumb%25255B9%25255D.png?imgmax=800" width="505" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ma il meglio arriva con i due tag specifici per la collaborazione: &lt;strong&gt;@&lt;/strong&gt; e &lt;strong&gt;#&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Il tag &lt;strong&gt;@&lt;/strong&gt; serve per taggare un utente: &lt;a href="http://lh4.ggpht.com/-PZul5isx9Ok/Uayf9RdK5JI/AAAAAAAAA7M/R41G00ZGkdE/s1600-h/image%25255B6%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-kb1Hiun1SBs/Uayf9_gYcKI/AAAAAAAAA7Y/ZCGkAXpa9SI/image_thumb%25255B2%25255D.png?imgmax=800" width="244" height="34" /&gt;&lt;/a&gt;  che sara’ poi notificato a riguardo.&lt;/p&gt;  &lt;p&gt;il tag &lt;strong&gt;#&lt;/strong&gt; invece serve per menzionare uno specifico work item.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-NGVvztLPJE4/Uayf-Sg-rKI/AAAAAAAAA7g/YFmsKAjAnrs/s1600-h/image%25255B9%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-AWXJDAjcivc/Uayf-4XUkpI/AAAAAAAAA7o/5RVl0beE3ZM/image_thumb%25255B3%25255D.png?imgmax=800" width="244" height="66" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dopo aver cliccato sull’ hyperlink si aprira’ una nuova tab con il work item linkato.&lt;/p&gt;  &lt;p&gt;Potra’ sembrare stupido e semplicistico, ma e’ davvero un ausilio utile ed aggiunge valore anche a quelle discussioni ‘informali’ che si trascinano via email, oltre al fatto che essendo salvate su TFS rappresentano informazioni utili al team recuperabili a piacimento.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/j3r/aggbug/101574.aspx" width="1" height="1" /&gt;</description><dc:creator>Matteo Emili</dc:creator></item><item><title>Radical take 2: 12 giugno</title><link>http://blogs.ugidotnet.org/topics/archive/2013/06/03/radical-take-2-12-giugno.aspx</link><pubDate>Mon, 03 Jun 2013 08:22:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/06/03/radical-take-2-12-giugno.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101572.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101572.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/06/03/radical-take-2-12-giugno.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101572.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">Radical take 2: 12 giugno</source><description>&lt;p&gt;Confermato, la seconda puntata di “MVVM con &lt;a href="http://radical.codeplex.com" target="_blank"&gt;Radical&lt;/a&gt;” è fissata per il 12 giugno, ore 21.30, a breve i dettagli sulle modalità di partecipazione.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.doodle.com/m5rpuudxt474ies7"&gt;http://www.doodle.com/m5rpuudxt474ies7&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101572.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Le (mie) prime Windows 8 App Store (2)</title><link>http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/06/03/le-mie-prime-windows-8-app-store-2.aspx</link><pubDate>Mon, 03 Jun 2013 06:11:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/06/03/le-mie-prime-windows-8-app-store-2.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/PietroLibroBlog/comments/101573.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/101573.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/06/03/le-mie-prime-windows-8-app-store-2.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/101573.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/PietroLibroBlog/rss.aspx">Le (mie) prime Windows 8 App Store (2)</source><description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/04/24/le-mie-prime-windows-8-app-store.aspx" target="_blank"&gt;L'obiettivo&lt;/a&gt; era di 8  App presenti su Windows Store  entro la fine di maggio, ma alla fine sono arrivato "solo" a 7. Le App che si aggiungono all'elenco precedente sono:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://apps.microsoft.com/windows/app/roma-trova-hotel/51380d51-1d11-4df3-aee0-291d848d78c" target="_blank"&gt;Roma Trova Hotel&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;br /&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://apps.microsoft.com/windows/app/impianti-sportivi-roma/02bfbfef-d91e-44c4-aa97-3ad8cf937c4b" target="_blank"&gt;Impianti Sportivi Roma&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;br /&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://apps.microsoft.com/windows/app/scuole-comunali-infanzia/f3129b2b-4aad-46cf-ac05-71cf52cc76b1" target="_blank"&gt;Scuole Comunali Infanzia Roma&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;br /&gt;  &lt;p&gt;Sono principalmente delle "App Catalogo" con funzionalità di ricerca (è stata l'occasione per utilizzare SQLite). Per alcune delle 7, saranno presto rilasciati degli aggiornamenti che aggiungeranno nuove funzionalità.  &lt;/p&gt;  &lt;p&gt;Critiche e consigli costruttivi sono sempre  ben accetti.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/101573.aspx" width="1" height="1" /&gt;</description><dc:creator>Pietro Libro</dc:creator></item><item><title>Disponibile la Beta 1 di EF 6</title><link>http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/05/31/disponibile-la-beta-1-di-ef-6.aspx</link><pubDate>Fri, 31 May 2013 06:34:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/05/31/disponibile-la-beta-1-di-ef-6.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/PietroLibroBlog/comments/101571.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/PietroLibroBlog/comments/commentRss/101571.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/PietroLibroBlog/archive/2013/05/31/disponibile-la-beta-1-di-ef-6.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://blogs.ugidotnet.org/PietroLibroBlog/services/trackbacks/101571.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/PietroLibroBlog/rss.aspx">Disponibile la Beta 1 di EF 6</source><description>&lt;p&gt;Tutti i dettagli del caso nel post del blog di ADO.NET &lt;a href="http://blogs.msdn.com/b/adonet/archive/2013/05/30/ef6-beta-1-available.aspx" target="_blank"&gt;qui&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/PietroLibroBlog/aggbug/101571.aspx" width="1" height="1" /&gt;</description><dc:creator>Pietro Libro</dc:creator></item><item><title>Cytoscape.js</title><link>http://blogs.ugidotnet.org/alessage/archive/2013/05/29/cytoscape.js.aspx</link><pubDate>Wed, 29 May 2013 13:01:51 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessage/archive/2013/05/29/cytoscape.js.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessage/comments/101570.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessage/comments/commentRss/101570.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessage/archive/2013/05/29/cytoscape.js.aspx#comment</comments><slash:comments>5</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessage/services/trackbacks/101570.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessage/rss.aspx">Cytoscape.js</source><description>&lt;a href="http://cytoscape.github.io/cytoscape.js/"&gt;http://cytoscape.github.io/cytoscape.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
A JavaScript graph library for analysis and visualisation&lt;img src="http://blogs.ugidotnet.org/alessage/aggbug/101570.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Gervasoni</dc:creator></item><item><title>HandJS</title><link>http://blogs.ugidotnet.org/alessage/archive/2013/05/29/handjs.aspx</link><pubDate>Wed, 29 May 2013 12:40:45 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessage/archive/2013/05/29/handjs.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessage/comments/101569.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessage/comments/commentRss/101569.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessage/archive/2013/05/29/handjs.aspx#comment</comments><slash:comments>3</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessage/services/trackbacks/101569.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessage/rss.aspx">HandJS</source><description>&lt;a href="http://handjs.codeplex.com/"&gt;http://handjs.codeplex.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
libreria per gestire via script gli eventi generati utilizzando un interfaccia touch screen&lt;img src="http://blogs.ugidotnet.org/alessage/aggbug/101569.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Gervasoni</dc:creator></item><item><title>MVVM con Radical, take 2 un &amp;ldquo;update&amp;rdquo;</title><link>http://blogs.ugidotnet.org/topics/archive/2013/05/29/mvvm-con-radical-take-2-un-ldquoupdaterdquo.aspx</link><pubDate>Wed, 29 May 2013 11:08:17 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/05/29/mvvm-con-radical-take-2-un-ldquoupdaterdquo.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101568.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101568.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/05/29/mvvm-con-radical-take-2-un-ldquoupdaterdquo.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101568.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">MVVM con Radical, take 2 un &amp;ldquo;update&amp;rdquo;</source><description>&lt;p&gt;Direi che ci siamo quasi, come &lt;a href="http://blogs.ugidotnet.org/topics/archive/2013/05/24/mvvm-con-radical-ldquotake-2rdquo.aspx" target="_blank"&gt;abbiamo già avuto modo di dire&lt;/a&gt; la seconda “puntata” ci porterà verso una prima bozza di applicazione reale.&lt;/p&gt;  &lt;p&gt;Ho purtroppo dovuto modificare il &lt;a href="http://www.doodle.com/m5rpuudxt474ies7" target="_blank"&gt;doodle&lt;/a&gt; perché una data disponibile, il 5/6, purtroppo per cause di forza maggiore non lo è più, direi che lascio aperto il sondaggio fino a fine settimana e sabato pubblico la data definitiva.&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101568.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Aggiornare TFS</title><link>http://blogs.ugidotnet.org/rgm/archive/2013/05/29/aggiornare-tfs.aspx</link><pubDate>Wed, 29 May 2013 06:53:40 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/rgm/archive/2013/05/29/aggiornare-tfs.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/rgm/comments/101567.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/101567.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/rgm/archive/2013/05/29/aggiornare-tfs.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/101567.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/rgm/rss.aspx">Aggiornare TFS</source><description>&lt;p&gt;Dato che molte persone spesso chiedono quanto sia complesso aggiornare TFS, ho deciso di fare un post che mostra la procedura passo passo. &lt;/p&gt;  &lt;p&gt;In realtà è tutto molto semplice e si può procedere semplicemente guidati da un wizard, e soprattutto è possibile farlo su una nuova macchina, lasciando nel frattempo la vecchia online. In questo modo si può effettuare un “test di upgrade”, verificare che tutto sia a posto, risolvere con calma eventuali problemi e quando tutto è a posto procedere al reale upgrade.&lt;/p&gt;  &lt;p&gt;Come sempre potete leggere tutto su GetLatestVersion.It&lt;a href="http://www.getlatestversion.it/2013/05/28/aggiornare-tfs-2010-a-tfs-2012-su-nuova-macchina/" target="_blank"&gt;, Aggiornare TFS 2010 a TFS 2012 su una nuova macchina&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Gian Maria&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/101567.aspx" width="1" height="1" /&gt;</description><dc:creator>Gian Maria  Ricci</dc:creator></item><item><title>Migrare branch distribuite da Git a TFS con Git-Tf</title><link>http://blogs.ugidotnet.org/j3r/archive/2013/05/28/migrare-branch-distribuite-da-git-a-tfs-con-git-tf.aspx</link><pubDate>Tue, 28 May 2013 16:09:50 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/j3r/archive/2013/05/28/migrare-branch-distribuite-da-git-a-tfs-con-git-tf.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/j3r/comments/101566.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/j3r/comments/commentRss/101566.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/j3r/archive/2013/05/28/migrare-branch-distribuite-da-git-a-tfs-con-git-tf.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/j3r/services/trackbacks/101566.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/j3r/rss.aspx">Migrare branch distribuite da Git a TFS con Git-Tf</source><description>&lt;p&gt;Se dovete migrare un grosso repository Git a Team Foundation Server, e’ molto probabile che vi scontrerete contro uno dei problemi piu’ comuni quandi si migra un DVCS verso un centralizzato: capire il ciclo di vita delle branch.&lt;/p&gt;  &lt;p&gt;Brevemente, in un DVCS non si ha il concetto di branch che si trova in un VCS come quello di TFS, a causa della natura distribuita, che tende ad avere un numero di branch maggiore, e che permette relazioni fra le branch differenti [molti parent per un’unica child]. Questa struttura non e’ migrabile in Team Foundation Server, che e’ invece un VCS centralizzato e gerarchico.&lt;/p&gt;  &lt;p&gt;Si puo’ raggiungere un buon compromesso utilizzando Git-Tf, il tool Microsoft per migrare Git a Team Foundation Server. Dopo aver configurato il repository, si deve eseguire il comando &lt;strong&gt;git-tf checkin –deep &lt;/strong&gt;per replicare ogni changeset invece di un grosso unico commit. Ma si otterra’ un errore:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-p5Ui4SXnGIA/UZJUqpy4pDI/AAAAAAAAA54/r9SEod6CwqY/s1600-h/image%25255B6%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh5.ggpht.com/-4w7p3eDWCo8/UZJUr6CHo1I/AAAAAAAAA6A/dzzPDdbmNDg/image_thumb%25255B4%25255D.png?imgmax=800" width="724" height="112" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ecco cosa intendo: se si hanno piu’ parent per una branch figlia,  non si puo’ replicare in Team Foundation Server. Se si effettua un rebase, si modifica la history, e quindi non sarebbe molto corretto da un punto di vista di fedelta’ del dato&lt;/p&gt;  &lt;p&gt;Quindi? Si deve utilizzare il comando &lt;strong&gt; –autosquash&lt;/strong&gt;, che andra’ a creare una storia lineare senza modificarla. Come? Analizza le HEAD revision per trovare quella piu’ “vicina” alla branch parent gerarchica. Ovviamente non tutte le gerarchie possono essere replicate da Git a TFS, ma questa soluzione permette un buon livello di fedelta’ alla soluzione originale.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/j3r/aggbug/101566.aspx" width="1" height="1" /&gt;</description><dc:creator>Matteo Emili</dc:creator></item><item><title>MVVM con Radical: &amp;ldquo;take 2&amp;rdquo;</title><link>http://blogs.ugidotnet.org/topics/archive/2013/05/24/mvvm-con-radical-ldquotake-2rdquo.aspx</link><pubDate>Fri, 24 May 2013 07:53:10 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/05/24/mvvm-con-radical-ldquotake-2rdquo.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101564.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101564.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/05/24/mvvm-con-radical-ldquotake-2rdquo.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101564.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">MVVM con Radical: &amp;ldquo;take 2&amp;rdquo;</source><description>&lt;p&gt;Il primo “giro” di &lt;a href="http://radical.codeplex.com" target="_blank"&gt;Radical&lt;/a&gt; mi sembra di poter dire sia andato bene, ci sono un po’ di cose da affinare ma direi che non mi posso lamentare troppo, ovviamente grazie a tutti i partecipanti.&lt;/p&gt;  &lt;p&gt;La registrazione e il materiale del primo incontro è disponibile per il &lt;a href="http://t.co/Wpy8SmED4S"&gt;download&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Come da richiesta stiamo organizzando il secondo round il cui scopo è affrontare una “semplice applicazione per editare delle anagrafiche”, gli argomenti che tratteremo sono:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;CRUD&lt;/strong&gt; usando &lt;a href="http://ravendb.net/" target="_blank"&gt;RavenDB&lt;/a&gt; Embedded allo scopo di tener bassissima la complessità, pensate a RavenDB (in questo caso) come un mero meccanismo di serializzazione su disco (è molto ma molto di più ma in questo scenario lo useremo solo come storage nudo e crudo); &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Validazione&lt;/strong&gt; usando i sistemi built-in di Radical e il supporto out-of-the-box per le DataAnnotation; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Memento&lt;/strong&gt; perché in un editor di anagrafiche un undo/redo non si nega a nessuno; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Windsor Installer(s)&lt;/strong&gt; ovvero come inserirsi nella pipeline di configurazione del nostro motore di IoC preferito quando le convenzioni di Radical non soddisfano le nostre necessità;&lt;/li&gt;    &lt;li&gt;Perché no…come e che cosa possiamo sfruttare di &lt;strong&gt;async&lt;/strong&gt;/&lt;strong&gt;await&lt;/strong&gt;;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Come al solito ci sono un po’ di date (non troppe questa volta) disponibili, sotto con le votazioni: &lt;a title="http://www.doodle.com/m5rpuudxt474ies7" href="http://www.doodle.com/m5rpuudxt474ies7"&gt;http://www.doodle.com/m5rpuudxt474ies7&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101564.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>ECMAScript 6 Harmony, il JavaScript che verrà ...</title><link>http://blogs.ugidotnet.org/alessage/archive/2013/05/24/ecmascript-6-harmony-il-javascript-che-verra.aspx</link><pubDate>Fri, 24 May 2013 06:49:04 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/alessage/archive/2013/05/24/ecmascript-6-harmony-il-javascript-che-verra.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/alessage/comments/101563.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/alessage/comments/commentRss/101563.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/alessage/archive/2013/05/24/ecmascript-6-harmony-il-javascript-che-verra.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://blogs.ugidotnet.org/alessage/services/trackbacks/101563.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/alessage/rss.aspx">ECMAScript 6 Harmony, il JavaScript che verrà ...</source><description>interessante articolo da leggere &lt;br /&gt;
 &lt;a href="http://www.html.it/articoli/ecmascript-6-harmony-il-javascript-che-verra/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+HTML.it+-+Articoli"&gt;link articolo&lt;/a&gt;&lt;img src="http://blogs.ugidotnet.org/alessage/aggbug/101563.aspx" width="1" height="1" /&gt;</description><dc:creator>Alessandro Gervasoni</dc:creator></item><item><title>Metodo</title><link>http://blogs.ugidotnet.org/manuel0081/archive/2013/05/23/metodo.aspx</link><pubDate>Thu, 23 May 2013 19:02:53 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/manuel0081/archive/2013/05/23/metodo.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/manuel0081/comments/101562.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/manuel0081/comments/commentRss/101562.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/manuel0081/archive/2013/05/23/metodo.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/manuel0081/services/trackbacks/101562.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/manuel0081/rss.aspx">Metodo</source><description>&lt;font face="Arial"&gt;Ci vuole &lt;strong&gt;metodo&lt;/strong&gt;! &lt;br /&gt;
Ma lo sapevate che &lt;strong&gt;metodo&lt;/strong&gt; è una parola greca che significa "&lt;em&gt;inseguire&lt;/em&gt;"?&lt;br /&gt;
Inseguire per arrivare allo scopo... e, soprattutto nel nostro lavoro, questo è molto importante.&lt;br /&gt;
Quando iniziamo a lavorare su qualcosa di nuovo, possiamo permetterci una fase esplorativa ma, subito dopo, occorre un metodo di lavoro. Questo ci permetterà in futuro  di ottimizzare i procedimenti successivi simili e di rendere tali procedimenti accessibili a tutti (sempre nell'ipotesi di volerlo fare, dato che in alcune aziende alcuni pensano che l'oscurantismo sia sinonimo del mantenimento del posto di lavoro).&lt;br /&gt;
Se riusciamo a darci un metodo in ogni operazione che effettuiamo, piano piano, sapremo cosa fare in ogni situazione. Non escludo che l'insieme delle situazioni possa non essere finito, ma spesso potremo rientrare in casi precedentemente trattati.&lt;br /&gt;
In tutto ciò è molto importante capire che, se il metodo che utilizziamo è lo stesso di altri colleghi, può essere formalizzato e diventare ufficiale. In pratica si decide che  una determinata operazione si effettua in un determinato modo. E questo porta anche alla descrizione di intere procedure che permetterebbero anche a un'azienda di certificarsi più facilmente.&lt;br /&gt;
E' importante sottolineare che il metodo deve partire dalla necessità e non essere imposto dall'alto, altrimenti non può funzionare.&lt;br /&gt;
Inoltre, il metodo non può essere rigido ma deve continuamente adattarsi alle situazioni e, per tale motivo, si evolve. Questo può sembrare un paradosso. Va comunque capito quando una variazione rientra nel metodo stesso e quando, invece, si applica il metodo base e poi una successiva aggiunta.&lt;br /&gt;
L'azione metodicizzata sarà maggiormente controllabile e darà sicurezza alla persona che la utilizza.&lt;/font&gt;&lt;img src="http://blogs.ugidotnet.org/manuel0081/aggbug/101562.aspx" width="1" height="1" /&gt;</description><dc:creator>Emanuele Prato</dc:creator></item><item><title>EF 5 - IS NULL &amp;lt;&amp;gt; = NULL</title><link>http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx</link><pubDate>Fri, 17 May 2013 19:33:13 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/ainotame/comments/101559.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/ainotame/comments/commentRss/101559.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/ainotame/archive/2013/05/17/ef-5-is-null-ltgt-null.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://blogs.ugidotnet.org/ainotame/services/trackbacks/101559.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/ainotame/rss.aspx">EF 5 - IS NULL &amp;lt;&amp;gt; = NULL</source><description>&lt;p&gt;EF 5 aggiunge una importante opzione di configurazione riguardante la "traduzione" delle lambda con parametri NULL: UseCSharpNullComparisonBehavior.   &lt;br /&gt;Se impostata a true, il comportamento è simile al comportamento che noi Dev siamo abituati con il valore null di C#. Ma andiamo con ordine:&lt;/p&gt;  &lt;p&gt;Tabella:   &lt;br /&gt;Id    Name    &lt;br /&gt;1    Uno    &lt;br /&gt;2    NULL    &lt;br /&gt;3    NULL    &lt;br /&gt;4    due    &lt;br /&gt;5    tre&lt;/p&gt;  &lt;p&gt;Codice:   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name == null).Count();   &lt;br /&gt;Console.WriteLine("Entries where Name=null: {0}", result);    &lt;br /&gt;                &lt;br /&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name != null).Count();    &lt;br /&gt;Console.WriteLine("Entries where Name!=null: {0}", result);    &lt;br /&gt;                &lt;br /&gt;string name = null;    &lt;br /&gt;result = db.NullableTables.Where(e =&amp;gt; e.Name == name).Count();    &lt;br /&gt;Console.WriteLine("Entries where Name==name &amp;amp; name=null: {0}", result);&lt;/p&gt;  &lt;p&gt;Risultato standard:   &lt;br /&gt;"Entries where Name=null: 2" //corretto    &lt;br /&gt;"Entries where Name!=null: 3" //corretto    &lt;br /&gt;"Entries where Name=name &amp;amp;amp; name=null: 0" //wrong?&lt;/p&gt;  &lt;p&gt;Il problema dell'ultimo risultato riguarda il metodo utilizzato da EF per convertire la lamba expression "e=&amp;amp;gt;e.Name=name" in TSQL: "Where Name=@p1, @p1=null". In SQL =NULL è sempre false, al contrario del primo esempio dove EF converte la lambda in "where Name IS NULL".&lt;/p&gt;  &lt;p&gt;Come possiamo rendere la conversione più C# friendly? con la seguente istruzione (messa nel costruttore del nostro DbContext):   &lt;br /&gt;((IObjectContextAdapter)this).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;&lt;/p&gt;  &lt;p&gt;In questo caso, rieseguendo il codice precedente, otterremo il seguente risultato:   &lt;br /&gt;"Entries where Name=null: 2" //corretto    &lt;br /&gt;"Entries where Name!=null: 3" //corretto    &lt;br /&gt;"Entries where Name=name &amp;amp;amp; name=null: 2" //corretto?&lt;/p&gt;  &lt;p&gt;Da notare come questa opzione sia disabilitata di default(causa compatibilità).&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/ainotame/aggbug/101559.aspx" width="1" height="1" /&gt;</description><dc:creator>Roberto Sarati</dc:creator></item><item><title>L&amp;rsquo;importanza di chiamarsi&amp;hellip; Framework</title><link>http://blogs.ugidotnet.org/pape/archive/2013/05/15/lrsquoimportanza-di-chiamarsihellip-framework.aspx</link><pubDate>Wed, 15 May 2013 10:07:48 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/pape/archive/2013/05/15/lrsquoimportanza-di-chiamarsihellip-framework.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/pape/comments/101556.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/pape/comments/commentRss/101556.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/pape/archive/2013/05/15/lrsquoimportanza-di-chiamarsihellip-framework.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://blogs.ugidotnet.org/pape/services/trackbacks/101556.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/pape/rss.aspx">L&amp;rsquo;importanza di chiamarsi&amp;hellip; Framework</source><description>&lt;p&gt;Ok, spero innanzitutto che Oscar Wilde non si stia troppo lamentando per la citazione a sproposito presente nel titolo :-) Ciò premesso, questo &lt;a href="http://goo.gl/m59L4"&gt;tip&lt;/a&gt; appena pubblicato su UGIdotNET mi ha riportato alla mente un episodio che descrissi in &lt;a href="http://goo.gl/SMCn5"&gt;questo post&lt;/a&gt;: più che sull’argomento in sè ho riflettuto sul fatto che nell’anno 2000, quando mi trovai a dover risolvere il problema citato nel post, spesi svariate giornate per giungere alla soluzione ivi descritta perchè per scoprire l’esistenza di quella modalità di scrittura “non logged” di SQL Server dovetti spulciare la documentazione di SQL Server ed altrettanta ne spulciai per capire come, utilizzando le estensioni custom del suo driver ODBC, trarre vantaggio da quella tecnica.&lt;/p&gt;  &lt;p&gt;Per certi versi si trattò di un interessante esercizio speculativo che mi lasciò in dote qualche conoscenza in più in merito ad alcuni internals di SQL Server, ma con il senno di poi penso che i servizi offerti dalla classe SqlBulkCopy sono un ottimo esempio di cosa dovrebbe fare un framework, ossia offrire delle primitive ad un (ragionevole) livello di astrazione che permetta allo sviluppatore di dedicare il proprio tempo alla soluzione della parte “pregiata” (si ok, si scrive “pregiata” ma si legge “domain”…) di un problema potendo far affidamento su un substrato tecnologico che sia in grado di sfruttare la tecnologia/piattaforma sottostante.&lt;/p&gt;  &lt;p&gt;In questo senso, nonostante l’ipertrofia che ormai lo caratterizza, penso a quanto valore ci sia nel .NET Framework che ormai diamo per scontato e quanto avrei preferito, mentre nel 2000 dovevo risolvere da solo il problema in oggetto, aver a disposizione &lt;strong&gt;SqlBulkCopy&lt;/strong&gt; potendo dedicare meno tempo al lavoro e magari usare il tempo risparmiato per un Mojito in buona compagnia… :-)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/pape/aggbug/101556.aspx" width="1" height="1" /&gt;</description><dc:creator>Andrea Saltarello</dc:creator></item><item><title>Introduzione a MVVM con Radical: dove e come</title><link>http://blogs.ugidotnet.org/topics/archive/2013/05/15/introduzione-a-mvvm-con-radical-dove-e-come.aspx</link><pubDate>Wed, 15 May 2013 08:30:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/05/15/introduzione-a-mvvm-con-radical-dove-e-come.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101555.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101555.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/05/15/introduzione-a-mvvm-con-radical-dove-e-come.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101555.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">Introduzione a MVVM con Radical: dove e come</source><description>&lt;p&gt;Siamo quasi pronti :-) abbiamo due opzioni, di cui la seconda sarà usata come backup.&lt;/p&gt;  &lt;h4&gt;Office Live Meeting&lt;/h4&gt;  &lt;p&gt;La scelta principale è Office Live Meeting, offre più funzionalità per chi presenta, miglior gestione della conferenza e delle registrazioni, i dettagli del meeting pianificato sono i seguenti:&lt;/p&gt;  &lt;p&gt;Accesso: &lt;a href="https://www.livemeeting.com/cc/mvp/join?id=Radical1&amp;amp;role=attend"&gt;https://www.livemeeting.com/cc/mvp/join?id=Radical1&amp;amp;role=attend&lt;/a&gt;    &lt;br /&gt;Meeting ID: Radical1&lt;/p&gt;  &lt;p&gt;Il tutto sarà live dalle 21 di stasera, vi pregherei di connettervi il prima possibile per assicurarci che entro le 21.30 tutto sia pronto e testato.&lt;/p&gt;  &lt;p&gt;è necessario aver installato il client di Live Meeting (installabile dalla pagina di cui sopra) oppure è disponibile il client via web (che ha qualche funzionalità in mento, rilevante solo per chi presenta il meeting)&lt;/p&gt;  &lt;h4&gt;Google Hangout&lt;/h4&gt;  &lt;p&gt;Siccome potremmo avere qualche problema di banda, la qualità della mia connettività è purtroppo quel che è, ho anche già preparato un evento pubblico usando un Google Hangout che trovate qui: &lt;a href="https://plus.google.com/events/cvtsanp7b4i95afsibe7g2qfv48"&gt;https://plus.google.com/events/cvtsanp7b4i95afsibe7g2qfv48&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Decidiamo all’ultimo momento se provare a cambiare provider.&lt;/p&gt;  &lt;p&gt;Per qualsiasi cosa commentate su questo post o usate Twitter: &lt;a href="https://twitter.com/mauroservienti" target="_blank"&gt;@mauroservienti&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101555.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Nuovo sprint deployato per TF Service</title><link>http://blogs.ugidotnet.org/rgm/archive/2013/05/14/nuovo-sprint-deployato-per-tf-service.aspx</link><pubDate>Tue, 14 May 2013 20:42:24 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/rgm/archive/2013/05/14/nuovo-sprint-deployato-per-tf-service.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/rgm/comments/101554.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/101554.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/rgm/archive/2013/05/14/nuovo-sprint-deployato-per-tf-service.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/101554.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/rgm/rss.aspx">Nuovo sprint deployato per TF Service</source><description>&lt;p&gt;Potete leggere le novità del nuovo sprint deployato su TF Service &lt;a href="http://www.getlatestversion.it/2013/05/14/nuova-versione-di-tf-service/"&gt;direttamente su GetLatestVersion&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In questo caso la novità più succosa è avere più repository Git per singolo Team Project.&lt;/p&gt;  &lt;p&gt;Gian Maria.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/101554.aspx" width="1" height="1" /&gt;</description><dc:creator>Gian Maria  Ricci</dc:creator></item><item><title>Windows Phone Navigation History</title><link>http://blogs.ugidotnet.org/Nick60/archive/2013/05/14/windows-phone-navigation-history.aspx</link><pubDate>Tue, 14 May 2013 20:01:59 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/Nick60/archive/2013/05/14/windows-phone-navigation-history.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/Nick60/comments/101553.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/Nick60/comments/commentRss/101553.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/Nick60/archive/2013/05/14/windows-phone-navigation-history.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/Nick60/services/trackbacks/101553.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/Nick60/rss.aspx">Windows Phone Navigation History</source><description>&lt;p&gt;Uno degli elementi più controversi della User eXperience di Windows Phone è il tasto back, che per comportarsi “come l’utente si aspetta”, alle volte va gestito da programma.&lt;/p&gt;  &lt;p&gt;Per spiegare meglio cosa intendo, utilizzerò un come esempio un’applicazione che richiede l’autenticazione dell’utente tramite Facebook la prima volta che viene utilizzata.&lt;/p&gt;  &lt;p&gt;Un’implementazione (all’apparenza ben fatta) potrebbe essere la seguente:&lt;/p&gt;  &lt;p&gt;1. All’avvio dell’app, viene mostrata la pagina principale. La logica di programma si accorge di non avere le credenziali dell’utente (dunque è il primo utilizzo) e mostra la pagina di autenticazione;&lt;/p&gt;  &lt;p&gt;2. La pagina di autenticazione lancia l’autenticazione (utilizzando ad esempio &lt;a href="http://facebooksdk.net/" target="_blank"&gt;Facebook SDK for .NET&lt;/a&gt;) che mostra la pagina web di Facebook.&lt;/p&gt;  &lt;p&gt;3 L’utente immette i dati nella pagina web di Facebook, e si torna alla pagina iniziale dell’app.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_2.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_thumb.png" width="450" height="291" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Peccato che un’applicazione così farebbe drizzare i capelli anche a me che li ho persi da un bel pezzo, perché con quest’applicazione il tasto back si comporterebbe in un modo che l’utente giudicherebbe (eufemisticamente) non corretto.&lt;/p&gt;  &lt;p&gt;E il motivo è presto detto:&lt;/p&gt;  &lt;p&gt;Ogni volta che viene mostrata una pagina, la pagina precedente viene inserita nello stack “Navigation History”. Ogni volta che si preme il pulsante back, viene mostrata la pagina che sta in cima alla pila, e il riferimento a tale pagina viene rimosso dallo stack. Se lo stack è vuoto, il tasto back chiude l’applicazione.&lt;/p&gt;  &lt;p&gt;Dunque nel nostro caso, dopo aver completato l’autenticazione ed essere tornati alla “Main Page”, il nostro stack conterrà i seguenti elementi:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_10.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_thumb_4.png" width="450" height="291" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ora, dal punto di vista dell’utente, il tasto back dovrebbe farlo uscire dall’app. Infatti egli è entrato nell’app, ha svolto un lavoro, è tornato al punto di partenza (la “Main Page”) e col tasto back si aspetta di uscire dall’app. Poiché invece lo stack di Navigation History non è vuoto, la pressione del tasto back lo farà tornare nella “Facebook Page” dove gli verrebbe richiesto di nuovo di autenticarsi con Facebook! E peggio ancora, un’eventuale ulteriore pressione del tasto back lo farebbe tornare nella Login Page che automaticamente mostrerebbe la “Facebook Page”, entrando in un loop infinito:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_12.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Nick60/Windows-Live-Writer/406c503de8c3_E801/image_thumb_5.png" width="450" height="276" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Come si risolve il problema?&lt;/p&gt;  &lt;p&gt;Utilizzando i vari metodi messi a disposizione dal NavigationService: GoBack() e/o RemoveBackEntry().&lt;/p&gt;  &lt;p&gt;Per saperne di più:&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394012(v=vs.105).aspx" target="_blank"&gt;How to navigate using the back stack for Windows Phone&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Nick60/aggbug/101553.aspx" width="1" height="1" /&gt;</description><dc:creator>Nicolò Carandini</dc:creator></item><item><title>Introduzione a MVVM con Radical: quando</title><link>http://blogs.ugidotnet.org/topics/archive/2013/05/14/introduzione-a-mvvm-con-radical-quando.aspx</link><pubDate>Tue, 14 May 2013 14:00:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/05/14/introduzione-a-mvvm-con-radical-quando.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101552.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101552.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/05/14/introduzione-a-mvvm-con-radical-quando.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101552.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">Introduzione a MVVM con Radical: quando</source><description>&lt;p&gt;Qualche giorno fa abbiamo accennato alla possibilità di fare &lt;a href="http://blogs.ugidotnet.org/topics/archive/2013/05/10/introduzione-a-mvvm-con-radical.aspx" target="_blank"&gt;una sessione introduttiva&lt;/a&gt; a Model View ViewModel con &lt;a href="http://radical.codeplex.com" target="_blank"&gt;Radical&lt;/a&gt;: le adesioni sono per gestite con un &lt;a href="http://www.doodle.com/fvdb3zgtd2zi2wkv" target="_blank"&gt;doodle&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Sembra che la maggioranza abbia votato per domani (15/05) alle 21.30, e così sia la prima sessione la terremo domani, a breve posterò anche il link e lo modalità di erogazione. Se riusciamo la registro e magari la ripetiamo anche, o la evolviamo con una seconda puntata, se la cosa “ci” piace.&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101552.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Windows Azure ACS e le deleghe OAuth</title><link>http://blogs.ugidotnet.org/topics/archive/2013/05/14/windows-azure-acs-e-le-deleghe-oauth.aspx</link><pubDate>Tue, 14 May 2013 09:07:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/topics/archive/2013/05/14/windows-azure-acs-e-le-deleghe-oauth.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/topics/comments/101551.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/topics/comments/commentRss/101551.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/topics/archive/2013/05/14/windows-azure-acs-e-le-deleghe-oauth.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/topics/services/trackbacks/101551.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/topics/rss.aspx">Windows Azure ACS e le deleghe OAuth</source><description>&lt;p&gt;Forse non tutti sanno che… OAuth non è un protocollo di autenticazione, ma bensì un protocollo di autorizzazione il cui scopo, nello specifico, è quello di delegare un terzo attore ad accedere ad una risorsa verso cui il delegante è autenticato e autorizzato.&lt;/p&gt;  &lt;p&gt;Diciamo che questo, OAuth non è un protocollo di autenticazione, è uno dei buoni motivi per cui Twitter non è uno degli IdentityProvider supportati dell’ACS di Windows &lt;a href="http://www.windowsazure.com/" target="_blank"&gt;Azure&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Diciamo anche che avete questo scenario:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;State lavorando ad un progetto che tra le tante cose espone un’API che sarà pubblica; &lt;/li&gt;    &lt;li&gt;Avete bisogno che le applicazioni che in qualche modo vorranno consumare quell’API siano autorizzate, dall’utente che le sta usando, ad accedere ai dati dell’utente stesso in sua vece; &lt;/li&gt;    &lt;li&gt;Avete scelto di delegare tutta la gestione della sicurezza all’ACS di Windows Azure, in modo da poter supportare vari IdentityProvider tra cui ad esempio Google Account e Microsoft Account; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;L’obiettivo quindi è di far si che:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;L’applicazione, tipicamente un “app” su un device mobile, che l’utente ha scelto di usare sia in grado di connettersi all’API pubblica; &lt;/li&gt;    &lt;li&gt;Al primo tentativo di connessione esegua il processo di login delegandolo all’IdentityProvider scelto dall’utente; &lt;/li&gt;    &lt;li&gt;Se l’app non si è mai presentata all’API pubblica parta il processo di autorizzazione in cui l’utente decide se vuole delegare l’app per l’accesso ai suoi dati; &lt;/li&gt;    &lt;li&gt;Se l’utente decide di autorizzare l’applicazione venga rilasciato un token, con una scadenza, che garantisca l’accesso; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;OAuth ha esattamente questo scopo, nonostante le critiche e le idiosincrasie del protocollo se ci si mette di buzzo buono non è poi così difficile realizzare il tutto (alla fine sono un po’ di chiamate HTTP, nulla a che vedere con lo scambio di messaggi di WS-Federation).&lt;/p&gt;  &lt;p&gt;Il flusso tipico con OAuth è il seguente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_2.png" rel="lightbox"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_thumb.png" width="334" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;L’inghippo&lt;/h4&gt;  &lt;p&gt;in tutti gli esempi che trovate che parlano di OAuth si da per scontato che chi autorizza sia anche chi autentica, ma nel nostro caso vogliamo che il processo di autenticazione sia delegato all’ACS di Azure:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_4.png" rel="lightbox"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_thumb_1.png" width="452" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;L’obiettivo è come al solito quello di delegare a chi lo sa fare bene tutta la gestione dell’infrastruttura di sicurezza.&lt;/p&gt;  &lt;h4&gt;Little gem&lt;/h4&gt;  &lt;p&gt;Una delle cose poco note è che l’ACS di Azure ha già tutto il supporto per:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;gestire l’elenco della applicazioni autorizzate;&lt;/li&gt;    &lt;li&gt;gestire l’elenco delle deleghe;&lt;/li&gt;    &lt;li&gt;gestire l’emissione dei token di accesso;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Questa funzionalità si chiama “Service Identities” e la trovate sul portale di amministrazione del namespace dell’ACS:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_6.png" rel="lightbox"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/topics/Windows-Live-Writer/Windows-Azure-ACS-e-le-deleghe-OAuth2_11479/image_thumb_2.png" width="348" height="246" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una “Service Identity” rappresenta un’applicazione autorizzata a chiedervi la delega per accedere alle vostre risorse.&lt;/p&gt;  &lt;p&gt;Contorto…una “Service Identity” è un’applicazione registrata da uno sviluppatore (un po’ come quando registrate una nuova applicazione su Facebook), ad una “Service Identity” corrispondono un “application id” e un “application secret” che sono username e password dell’applicazione, l’utente finale autorizzerà poi l’applicazione (identificata da app id e secret) ad accedere alle sue risorse, questa autorizzazione si chiama delega, anche la delega è completamente gestita da Azure, ma non è visibile dal portale, c’è invece un’API rest che vi consente di manipolare i contenuti delle deleghe di ogni applicazione in modo, ad esempio, da poter dare la possibilità all’utente finale di decidere se e come revocare ad un’applicazione la delega.&lt;/p&gt;  &lt;p&gt;.m&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/topics/aggbug/101551.aspx" width="1" height="1" /&gt;</description><dc:creator>Mauro Servienti</dc:creator></item><item><title>Errore di sincronizzazione dei Work Item con TFS 2012 Update 2</title><link>http://blogs.ugidotnet.org/j3r/archive/2013/05/13/errore-di-sincronizzazione-dei-work-item-con-tfs-2012-update.aspx</link><pubDate>Mon, 13 May 2013 12:02:00 GMT</pubDate><guid isPermaLink="true">http://blogs.ugidotnet.org/j3r/archive/2013/05/13/errore-di-sincronizzazione-dei-work-item-con-tfs-2012-update.aspx</guid><wfw:comment>http://blogs.ugidotnet.org/j3r/comments/101550.aspx</wfw:comment><wfw:commentRss>http://blogs.ugidotnet.org/j3r/comments/commentRss/101550.aspx</wfw:commentRss><comments>http://blogs.ugidotnet.org/j3r/archive/2013/05/13/errore-di-sincronizzazione-dei-work-item-con-tfs-2012-update.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blogs.ugidotnet.org/j3r/services/trackbacks/101550.aspx</trackback:ping><source url="http://blogs.ugidotnet.org/j3r/rss.aspx">Errore di sincronizzazione dei Work Item con TFS 2012 Update 2</source><description>&lt;p&gt;Dopo aver installato Team Foundation Server 2012 Update 2 puo’ succedere che il Work Item Tracking Synchronization Service improvvisamente si blocchi, e che quindi non si vedano piu aree ed iterazioni aggiornate in Visual Studio, Web Access, Excel, etc.&lt;/p&gt;  &lt;p&gt;Questi sono i sintomi…&lt;em /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-c3UmlbaAm_Y/UYoT0KN754I/AAAAAAAAA4o/83vJBcbKUJ0/s1600-h/error%25255B11%25255D.png"&gt;&lt;img title="error" border="0" alt="error" src="http://lh5.ggpht.com/-M8w43DKs2wQ/UYoT3T5JdoI/AAAAAAAAA4w/cyeUKJyIfu4/error_thumb%25255B5%25255D.png?imgmax=800" width="244" height="12" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-usbUJre3ZbY/UYoT62kZU0I/AAAAAAAAA44/O41iO6NkSpM/s1600-h/image%25255B2%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh3.ggpht.com/-dzHwYCST-VA/UYoT-PSQviI/AAAAAAAAA5A/xvibjHTcUfI/image_thumb.png?imgmax=800" width="244" height="135" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ovviamente per fare troubleshooting di questo bug, i log della pagina amministrativa _oi sono essenziali:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-VEen97Fb-mM/UYoUAWsM3yI/AAAAAAAAA5I/_Bv3VOHVeIk/s1600-h/image%25255B5%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh3.ggpht.com/-0Mqr9SvjiK4/UYoUC7hVMQI/AAAAAAAAA5Q/Xx4A2chb31E/image_thumb%25255B1%25255D.png?imgmax=800" width="244" height="27" /&gt;&lt;/a&gt;  Vediamo che da un certo momento in poi, un certo numero di job &lt;strong&gt;Work Item Tracking Integration Synchronization &lt;/strong&gt;falliscono…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-msw3C1kKBdE/UYoUFv-PnaI/AAAAAAAAA5Y/LJNoHOgrYXY/s1600-h/image%25255B8%25255D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/-m_cVLIV9TzY/UYoUIZ3MBCI/AAAAAAAAA5g/vp0KqobtsNE/image_thumb%25255B2%25255D.png?imgmax=800" width="244" height="171" /&gt;&lt;/a&gt; …e nella &lt;strong&gt;Job History Details&lt;/strong&gt; troviamo un &lt;strong&gt;System.NullReferenceException&lt;/strong&gt;. Ecco il problema!&lt;/p&gt;  &lt;p&gt;Nella RC del &lt;a href="http://www.microsoft.com/en-gb/download/details.aspx?id=38832"&gt;Team Foundation Server 2012 Update 3&lt;/a&gt; troviamo una fix  per questo, come dettagliato nel &lt;a href="http://support.microsoft.com/kb/2835600"&gt;changelog&lt;/a&gt; (paragrafo &lt;strong&gt;Work Item Tracking &lt;/strong&gt;nelle fix per &lt;strong&gt;Team Foundation Server&lt;/strong&gt;).&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/j3r/aggbug/101550.aspx" width="1" height="1" /&gt;</description><dc:creator>Matteo Emili</dc:creator></item></channel></rss>