<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Il blog di Maurizio 2.0</title>
        <link>http://www.coding4art.com/Default.aspx</link>
        <description>Un giorno anche la guerra si inchinerà  davanti al suono di una chitarra elettrica (J. Morrison)</description>
        <language>en-US</language>
        <copyright>Maurizio</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <image>
            <title>Il blog di Maurizio 2.0</title>
            <url>http://www.coding4art.com/images/RSS2Image.gif</url>
            <link>http://www.coding4art.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/mauriziotammacco" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>Link utili della settimana #4</title>
            <category>Varie</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/7sb2Os12D4s/link-utili-della-settimana-4.aspx</link>
            <description>&lt;ol&gt;   &lt;li&gt;1. &lt;a href="http://my-debugbar.com/wiki/IETester/HomePage" target="_blank"&gt;IE Tester 0.4.2&lt;/a&gt; Ottimo tool gratuito per testare funzionalità di layout nelle varie versioni di Internet Explorer. Peccato che manchi un supporto per altri browser.&lt;/li&gt;    &lt;li&gt;2. &lt;a href="http://stevesmithblog.com/blog/how-to-install-windows-7-from-usb-drive/" target="_blank"&gt;Come installare Windows 7 da drive USB&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://www.coding4art.com/aggbug/134.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/7sb2Os12D4s" height="1" width="1"/&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/30/link-utili-della-settimana-4.aspx</guid>
            <pubDate>Fri, 30 Oct 2009 15:05:23 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/134.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/30/link-utili-della-settimana-4.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/134.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/134.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/30/link-utili-della-settimana-4.aspx</feedburner:origLink></item>
        <item>
            <title>&amp;lt;/xplayn.org&amp;gt;</title>
            <category>Varie</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/L4-ncjw3tx4/ltxplayn.orggt.aspx</link>
            <description>&lt;p&gt;Questo blog cambia nome, veste grafica e motore di blogging. Causa perdurata inattività, ho deciso di chiudere il sito xplayn.org, da me aperto insieme all'amico &lt;a href="http://community.ugiss.org/blogs/sgainz/default.aspx" target="_blank"&gt;Francesco Quaratino&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Il nuovo nome, &lt;a href="http://www.coding4art.com/" target="_blank"&gt;coding4art.com&lt;/a&gt; è ovviamente un omaggio alla programmazione software vista come un'arte o più precisamente un'attività ingegneristica e non artigianale. Si parla tanto di metodologie applicate alla produzione software, Agile, waterfall o MSF che sia, ma spesso e volentieri questa viene vista come un'attività artigianale, espletata senza o quasi nessuna metodologia, da programmatori senza esperienza specifica nella particolare tecnologia scelta, senza nessuna cura per il codice sorgente, senza nessuna best practice o guidelines applicata o peggio ancora con varie best practice mischiate tra loro, senza nessuna pianificazione riguardante argomenti come sicurezza, performance, scalabilità, manutenibilità ma con un unico obiettivo in testa, ovvero creare nel più breve tempo possibile una applicazione in cui i requisiti utente siano soddisfatti, ovvero che funzioni, e basta, con le conseguenze che questo approccio comporta.&lt;/p&gt;  &lt;p&gt;I miei articoli presenti su xplayn.org li ho inseriti nella apposita sezione articoli su questo &lt;a href="http://www.coding4art.com/" target="_blank"&gt;blog&lt;/a&gt;, dove conto di scriverne altri, tempo permettendo ovviamente.&lt;/p&gt;  &lt;p&gt;Come nuovo motore di blogging ho scelto &lt;a href="http://www.subtextproject.com/" target="_blank"&gt;SubText&lt;/a&gt;, ben fatto e molto veloce, parecchio più veloce di &lt;a href="http://dev.communityserver.com/" target="_blank"&gt;Community Server&lt;/a&gt;, a mio avviso, con una fantastica funzionalità già inclusa, ovvero la possibilità di importare un intero blog (commenti compresi) precedentemente esportato, il tutto mediante lo standard &lt;a href="http://en.wikipedia.org/wiki/BlogML" target="_blank"&gt;BlogML&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;L'&lt;a href="http://feeds.feedburner.com/mauriziotammacco" target="_blank"&gt;RSS feed&lt;/a&gt; è comunque invariato, poichè utilizzo il feed esterno fornito da &lt;a href="http://www.feedburner.com" target="_blank"&gt;FeedBurner&lt;/a&gt; e quindi il blog è accessibile negli RSS Aggregator senza nessuna modifica.&lt;/p&gt;  &lt;p&gt;Questo post vuol essere anche una promessa a me stesso di curare di più il mio blog, strumento in cui credo moltissimo, e di arricchirlo anche con più articoli tecnici.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/133.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/L4-ncjw3tx4" height="1" width="1"/&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/27/ltxplayn.orggt.aspx</guid>
            <pubDate>Tue, 27 Oct 2009 15:50:11 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/133.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/27/ltxplayn.orggt.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/133.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/133.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/27/ltxplayn.orggt.aspx</feedburner:origLink></item>
        <item>
            <title>Visual Studio 2010 Beta 2</title>
            <category>Visual Studio 2010</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/VnAXoumHxCk/visual-studio-2010-beta-2.aspx</link>
            <description>Disponibile il &lt;a target="_blank" href="http://www.microsoft.com/visualstudio/en-us/try/default.mspx"&gt;download&lt;/a&gt; per tutti&lt;img src="http://www.coding4art.com/aggbug/123.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/VnAXoumHxCk" height="1" width="1"/&gt;</description>
            <dc:creator>Maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/21/visual-studio-2010-beta-2.aspx</guid>
            <pubDate>Tue, 20 Oct 2009 22:00:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/123.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/21/visual-studio-2010-beta-2.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/123.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/123.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/21/visual-studio-2010-beta-2.aspx</feedburner:origLink></item>
        <item>
            <title>Link utili della settimana #3</title>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/qHyF56IAzNQ/link-utili-della-settimana-3.aspx</link>
            <description>&lt;p&gt;- &lt;a href="http://msdn.microsoft.com/en-us/devlabs/ee423534.aspx" target="_blank"&gt;Doloto&lt;/a&gt;, time optimizers for Ajax applications&lt;/p&gt; &lt;p&gt;- &lt;a href="http://automapper.codeplex.com/" target="_blank"&gt;AutoMapper&lt;/a&gt;, framework per mappare automaticamente e quindi creare un oggetto semplice, es. un DTO, mediante un oggetto complesso come una entità di dominio&lt;/p&gt; &lt;p&gt;- &lt;a href="http://www.wpftutorial.net/Home.html" target="_blank"&gt;WPF tutorial&lt;/a&gt;;&lt;/p&gt; &lt;p&gt;- &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx" target="_blank"&gt;Microsoft Ajax Library (Preview 6) e Microsoft Ajax Minifier&lt;/a&gt; ( Microsoft Ajax Javascript Library -&amp;gt; nuova e migliorata sintassi imperativa, miglior integrazione con JQuery, nuovo client script loader, Minifier Tool, per ridurre le dimensioni dei file javascript scaricati sul client mediante minification)&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/122.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/qHyF56IAzNQ" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/16/link-utili-della-settimana-3.aspx</guid>
            <pubDate>Fri, 16 Oct 2009 03:55:14 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/122.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/16/link-utili-della-settimana-3.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/122.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/122.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/16/link-utili-della-settimana-3.aspx</feedburner:origLink></item>
        <item>
            <title>Link utili della settimana #2</title>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/31J_g338FLs/link-utili-della-settimana-1.aspx</link>
            <description>&lt;p mce_keep="true"&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.sadev.co.za/content/tripping-over-logs-story-unity-part-1" target="_blank" mce_href="http://www.sadev.co.za/content/tripping-over-logs-story-unity-part-1"&gt;Descrizione&lt;/a&gt; di &lt;a href="http://www.codeplex.com/unity" target="_blank" mce_href="http://www.codeplex.com/unity"&gt;Unity&lt;/a&gt;, il framework di Inversion of Control e Dipendency Injection sviluppato dal team di P&amp;amp;P (&lt;a href="http://msdn.microsoft.com/en-us/library/dd362339.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/dd362339.aspx"&gt;qui&lt;/a&gt; è presente la versione 1.2 per Silverlight) 
&lt;/li&gt;&lt;li&gt;45 passi per diventare &lt;a href="http://blogs.dotnethell.it/ciupaz/45-passi-per-diventare-“agili”__15721.aspx" target="_blank" mce_href="http://blogs.dotnethell.it/ciupaz/45-passi-per-diventare-“agili”__15721.aspx"&gt;agili&lt;/a&gt; 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://xval.codeplex.com/" target="_blank" mce_href="http://xval.codeplex.com/"&gt;xVal&lt;/a&gt;, libreria per la validazione client side di applicazioni ASP .NET MVC 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=051EE83C-5CCF-48ED-8463-02F56A6BFC09&amp;amp;displaylang=en" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=051EE83C-5CCF-48ED-8463-02F56A6BFC09&amp;amp;displaylang=en"&gt;Anti XSS Library&lt;/a&gt; ver. 3.1 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://codepadnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33361" target="_blank" mce_href="http://codepadnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33361"&gt;CodePad .NET 1.0 Beta 2&lt;/a&gt;, un editor leggero per provare spezzoni di codice 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogs.asp.net/psteele/archive/2009/09/22/strongly-typed-session-variables-in-asp-net-mvc.aspx" target="_blank" mce_href="http://weblogs.asp.net/psteele/archive/2009/09/22/strongly-typed-session-variables-in-asp-net-mvc.aspx"&gt;Strongly typed session variables in ASP .NET MVC&lt;/a&gt; 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&amp;amp;displaylang=en" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&amp;amp;displaylang=en"&gt;Visual Studio 2010 e .NET Framework 4.0 Training Kit - May preview&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.coding4art.com/aggbug/121.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/31J_g338FLs" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/11/link-utili-della-settimana-1.aspx</guid>
            <pubDate>Sun, 11 Oct 2009 21:52:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/121.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/11/link-utili-della-settimana-1.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/121.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/121.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/11/link-utili-della-settimana-1.aspx</feedburner:origLink></item>
        <item>
            <title>Link utili della settimana #1</title>
            <category>.NET Framework 3.5</category>
            <category>Crittografia</category>
            <category>Cloud Computing</category>
            <category>Architecture</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/5iPMNzw1gWw/link-utili-della-settimana-2.aspx</link>
            <description>&lt;p&gt;- &lt;a href="http://www.galasoft.ch/mvvm/getstarted/" target="_blank" mce_href="http://www.galasoft.ch/mvvm/getstarted/"&gt;MVVM Toolkit Light&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://ajaxcontroltoolkit.codeplex.com/release/projectreleases.aspx?releaseid=33804" target="_blank" mce_href="http://ajaxcontroltoolkit.codeplex.com/release/projectreleases.aspx?releaseid=33804"&gt;Ajax Control Toolkit&lt;/a&gt; release 30930 (30 sett 2009);&lt;/p&gt;
&lt;p&gt;-&lt;a href="http://wscfblue.codeplex.com/" target="_blank" mce_href="http://wscfblue.codeplex.com/"&gt;thinktecture.WSCF.blue&lt;/a&gt; (Contract first WCF Tool)&lt;/p&gt;
&lt;p&gt;- The &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx"&gt;ModelView-ViewModel&lt;/a&gt; design pattern for WPF&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://www.coderun.com/" target="_blank" mce_href="http://www.coderun.com/"&gt;Code Run&lt;/a&gt; (questo è davvero incredibile, si evincono chiaramente le potenzialità del Cloud Computing).  Trattasi di un IDE Online, con cui è possibile sviluppare progetti .NET direttamente nel browser, potendo anche disporre di un ambiente di host on the cloud, su cui è possibile effettuare il deployment delle proprie applicazioni sviluppate on line.&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://www.we-coffee.com/bonnie.aspx" target="_blank" mce_href="http://www.we-coffee.com/bonnie.aspx"&gt;Bonnie .NET&lt;/a&gt; API per sviluppare applicazioni che usano la crittografia della informazioni o certificati X.509&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/120.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/5iPMNzw1gWw" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/10/08/link-utili-della-settimana-2.aspx</guid>
            <pubDate>Thu, 08 Oct 2009 21:50:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/120.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/10/08/link-utili-della-settimana-2.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/120.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/120.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/10/08/link-utili-della-settimana-2.aspx</feedburner:origLink></item>
        <item>
            <title>ASP .Net e i thread secondari</title>
            <category>ASP .NET</category>
            <category>Tips &amp;amp; tricks</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/EOBXnVqGE9o/asp-net-e-i-thread-secondari.aspx</link>
            <description>&lt;p&gt;Interessantissimo &lt;a href="http://blogs.msdn.com/itasupport/archive/2009/09/27/sempre-chiamare-il-metodo-dispose.aspx" target="_blank"&gt;post&lt;/a&gt; di &lt;a href="http://blogs.msdn.com/itasupport/archive/tags/Stefano+Pronti/default.aspx" target="_blank"&gt;Stefano Pronti&lt;/a&gt; del nuovo &lt;a href="http://blogs.msdn.com/itasupport/" target="_blank"&gt;blog MSDN di Supporto Tecnico agli Sviluppatori&lt;/a&gt;, che spiega le disastrose conseguenze di non richiamare il metodo Dispose su risorse unmanaged, utilizzate all'interno di una web application.&lt;/p&gt; &lt;p&gt;Per farla breve, le risorse unmanaged utilizzavano un thread secondario rispetto a quello che prende in carico la web request, ed in questo thread secondario veniva sollevata una eccezione non gestita durante la fase di finalizzazione del garbage collector, che, come è noto, viene eseguito in un thread diverso.&lt;/p&gt; &lt;p&gt;In questo caso il comportamento di ASP .NET a partire dalla versione 2.0 è quello di interrompere immediatamente il processo in esecuzione, con conseguenze facilmente immaginabili.&lt;/p&gt; &lt;p&gt;Ho già parlato &lt;a href="http://xplayn.org/cs/blogs/maurizio/archive/2008/01/10/311.aspx" target="_blank"&gt;qui&lt;/a&gt; di questo comportamento di ASP .NET e di come sia possibile utilizzare la modalità pre-versione 2.0 di gestione delle eccezioni non gestite sollevate all'interno di thread diversi.&lt;/p&gt; &lt;p&gt;Anche a me è capitato di dover "impazzire" con una applicazione in produzione, abbastanza vasta, che soffriva di frequenti ed improvvise cadute della sessione corrente, con enorme disagio degli utenti.&lt;/p&gt; &lt;p&gt;Nel caso specifico non è stato indispensabile attaccare un debugger per ottenere il dump della memoria al momento dell'eccezione, è bastato debuggare il codice, che non conoscevo neanche bene, e scoprire che venivano creati thread aggiuntivi (!?) il cui codice, in particolari circostanze, sollevava l'eccezione fatale che provocava il riavvio del worker process.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/119.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/EOBXnVqGE9o" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/09/28/asp-net-e-i-thread-secondari.aspx</guid>
            <pubDate>Mon, 28 Sep 2009 00:24:09 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/119.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/09/28/asp-net-e-i-thread-secondari.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/119.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/119.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/09/28/asp-net-e-i-thread-secondari.aspx</feedburner:origLink></item>
        <item>
            <title>Link utili della settimana</title>
            <category>Tools</category>
            <category>ASP .NET MVC</category>
            <category>Visual Studio 2010</category>
            <category>Ioc</category>
            <category>Metodologie agili</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/h5vv2wlrbUU/link-utili-della-settimana.aspx</link>
            <description>&lt;p /&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://www.sadev.co.za/content/tripping-over-logs-story-unity-part-1" target="_blank"&gt;Descrizione&lt;/a&gt; di &lt;a href="http://www.codeplex.com/unity" target="_blank"&gt;Unity&lt;/a&gt;, il framework di Inversion of Control e Dipendency Injection sviluppato dal team di P&amp;amp;P (&lt;a href="http://msdn.microsoft.com/en-us/library/dd362339.aspx" target="_blank"&gt;qui&lt;/a&gt; è presente la versione 1.2 per Silverlight)  &lt;/li&gt;&lt;li&gt;45 passi per diventare &lt;a href="http://blogs.dotnethell.it/ciupaz/45-passi-per-diventare-“agili”__15721.aspx" target="_blank"&gt;agili&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="http://xval.codeplex.com/" target="_blank"&gt;xVal&lt;/a&gt;, libreria per la validazione client side di applicazioni ASP .NET MVC  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=051EE83C-5CCF-48ED-8463-02F56A6BFC09&amp;amp;displaylang=en" target="_blank"&gt;Anti XSS Library&lt;/a&gt; ver. 3.1  &lt;/li&gt;&lt;li&gt;&lt;a href="http://codepadnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33361" target="_blank"&gt;CodePad .NET 1.0 Beta 2&lt;/a&gt;, un editor leggero per provare spezzoni di codice  &lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogs.asp.net/psteele/archive/2009/09/22/strongly-typed-session-variables-in-asp-net-mvc.aspx" target="_blank"&gt;Strongly typed session variables in ASP .NET MVC&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&amp;amp;displaylang=en" target="_blank"&gt;Visual Studio 2010 e .NET Framework 4.0 Training Kit - May preview&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://www.coding4art.com/aggbug/118.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/h5vv2wlrbUU" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/09/25/link-utili-della-settimana.aspx</guid>
            <pubDate>Fri, 25 Sep 2009 01:28:26 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/118.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/09/25/link-utili-della-settimana.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/118.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/118.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/09/25/link-utili-della-settimana.aspx</feedburner:origLink></item>
        <item>
            <title>i4o (ovvero index for objects)</title>
            <category>LINQ</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/SFT_pGeknkQ/i4o-ovvero-index-for-objects.aspx</link>
            <description>&lt;p&gt;Per chi (come me) utilizza LINQ  questo &lt;a href="http://i4o.codeplex.com/" target="_blank"&gt;progetto&lt;/a&gt; presente su &lt;a href="http://www.codeplex.com/" target="_blank"&gt;Codeplex&lt;/a&gt; è senz'altro interessante.&lt;/p&gt; &lt;p&gt;Come è noto LINQ  effettua  le ricerche in modo sequenziale, cosa che su collezioni con parecchi items può dar luogo ad un degrado delle prestazioni.&lt;/p&gt; &lt;p&gt;Questo progetto si prefigge come obiettivo quello di dotare LINQ della ricerca indicizzata degli elementi, che, stando a quanto riportato nella descrizione del progetto, è in grado di rendere le query oltre mille volte più veloci rispetto alla ricerca sequenziale.&lt;/p&gt; &lt;p&gt;Il progetto è attualmente in Beta 3, e non ci sono rilasci pianificati. &lt;/p&gt; &lt;p&gt;Sarebbe interessante da provare (avendone il tempo ! &lt;img alt="smile_regular" src="http://spaces.live.com/rte/emoticons/smile_regular.gif" /&gt;).&lt;/p&gt; &lt;p&gt;Se qualcuno lo ha già fatto sarei lieto di leggerele impressioni di utilizzo.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/117.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/SFT_pGeknkQ" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/09/02/i4o-ovvero-index-for-objects.aspx</guid>
            <pubDate>Wed, 02 Sep 2009 03:12:42 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/117.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/09/02/i4o-ovvero-index-for-objects.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/117.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/117.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/09/02/i4o-ovvero-index-for-objects.aspx</feedburner:origLink></item>
        <item>
            <title>Invocazione di metodo remoto da Javascript</title>
            <category>ASP .NET 4.0</category>
            <category>Javascript</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/QrSG5SDGnR0/invocazione-di-metodo-remoto-da-javascript.aspx</link>
            <description>&lt;p&gt;A partire da ASP .NET 3.5 è possibile da JavaScript richiamare un metodo esterno, implementato nella stessa pagina aspx che invoca il codice Javascript, oppure in un ASP .NET XML Web Services (per intenderci, quello in formato .asmx), oppure in un WCF Services (in formato .svc), tutto questo senza passare attraverso il normale ciclo di vita della pagina, ma invocando semplicemente un metodo pubblico di una classe, visto che la pagina aspx è una classe a tutti gli effetti.&lt;/p&gt; &lt;p&gt;Al metodo è possibile passare dei parametri e ricevere indietro un valore di ritorno, che sarà serializzato / deserializzato in modalità JSON.&lt;/p&gt; &lt;p&gt;Se si ha la necessità di eseguire codice lato server senza passare dall'intero ciclo di vita della pagine, invocare un metodo pubblico della pagina è sicuramente la soluzione più veloce da implementare, poichè non necessita di creare una applicazione a sè stante (il web service o il WCF Service), e quindi è anche più facile da installare e da manutenere, ma non è esente da limitazioni, la maggiore delle quali è l'impossibilità di richiamare il metodo pubblico da parte di pagine diverse rispetto a quella in cui lo stesso è dichiarato (in tal caso è necessario creare un servizio web, ASP .NET XML Web Service oppure WCF Service).&lt;/p&gt; &lt;p&gt;Di seguito i passi necessari per richiamare un metodo pubblico esposto dalla classe che genera la pagina aspx, da codice Javascript:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;E' necessario creare un metodo pubblico e statico all'interno della classe che identifica la pagina aspx e decorarlo con l'attributo System.Web.Services.WebMethodAttribute;&lt;/li&gt;&lt;/ul&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;[WebMethod]&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; GetValueFromServer(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; param1, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; param2)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;{&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #006080"&gt;"TEST_RETURN_VALUE"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E' necessario assegnare True alla proprietà  EnablePageMethods dell'oggetto ScriptManager ospitato dalla pagina in questione (il valore di default è False), per abilitare l'invocazione di metodi di pagina;&lt;/li&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 69px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:ScriptManager&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ScriptManager1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;EnablePageMethods&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/ul&gt;
&lt;ul /&gt;
&lt;ul /&gt;
&lt;ul /&gt;
&lt;ul /&gt;
&lt;ul /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I due passaggi precedenti fanno in modo che nella pagina aspx sia iniettato del codice di script (inline) che permette di richiamare il "Web Method". Questo codice di script comprende essenzialmente un oggetto chiamato "&lt;strong&gt;PageMethods&lt;/strong&gt;", il cui nome è hardcoded e quindi non modificabile, avente metodi statici con lo stesso nome dei metodi statici di pagina, mediante cui è possibile richiamare questi ultimi passando gli opportuni parametri, e indicando una funzione di callback che sarà automaticamente richiamata al termine dell'invocazione del metodo remoto e che conterrà il valore di ritorno di quest'ultimo, piu un metodo di callback opzionale che sarà automaticamente richiamato in caso di errore del metodo remoto.   &lt;/li&gt;&lt;/ul&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 101px; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; Function1 {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    PageMethods.GetValueFromServer( param1, param2, onSuccessfullCall, onErrorCall);&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La funzione di callback richiamata in caso di errore è opzionale. Occorre tener presente che l'invocazione del metodo remoto è asincrona, quindi il controllo tornerà immediatamente al codice Javascript chiamante. Al termine della invocazione del metodo sarà invocata automaticamente la funzione di callback opportuna (chiamata conlusa con successo o con errore). Nel caso di chiamata conclusa con esito positivo, la funzione di callback conterrà anche il valore di ritorno del metodo remoto invocato.&lt;/li&gt;&lt;/ul&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onSuccessfullCall(results, userContext, methodName) {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    alert(results);&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt; &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onErrorCall(error, userContext, methodName) {&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (error !== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        alert(error.get_message());&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il parametro results della funzione di callback richiamata in caso di invocazione riuscita conterrà il valore di ritorno del metodo remoto&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.coding4art.com/aggbug/116.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/QrSG5SDGnR0" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/08/21/invocazione-di-metodo-remoto-da-javascript.aspx</guid>
            <pubDate>Fri, 21 Aug 2009 04:38:40 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/116.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/08/21/invocazione-di-metodo-remoto-da-javascript.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/116.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/116.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/08/21/invocazione-di-metodo-remoto-da-javascript.aspx</feedburner:origLink></item>
        <item>
            <title>&amp;lt;/RSSBandit&amp;gt;</title>
            <category>Aggregator</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/OY03Emo8Rpo/lt-rssbandit-gt.aspx</link>
            <description>&lt;p&gt;Stanco ormai di ricevere ogni 3x2 un messaggio di errore di RSSBandit che mi indica un errore fatale nel caricamento del file XML contenente i feeds sottoscritti, obbligandomi a caricare una copia di backup (che potrebbe essere non aggiornata) dello stesso file con l'antipatica conseguenza di ritrovarmi con tutti i feeds impostati sullo stato di "Unread" (cosa davvero antipatica se si hanno tanti feeds sottoscritti),  ho deciso di cambiare aggregator. Da oggi sto utilizzando &lt;a href="http://www.bradsoft.com/feeddemon/beta/" target="_blank"&gt;FeedDemon 3 (RC4)&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;E' ancora in versione Beta (la versione 3), ma ne parlano molto bene nelle recensioni che ho letto sulla rete.&lt;/p&gt; &lt;p&gt;Inoltre, è possibile sincronizzare i feeds con Google Reader, feature utile se non si utilizza sempre lo stesso PC.&lt;/p&gt; &lt;p&gt;Speriamo di non avere gli stessi problemi avuti con RSSBandit &lt;img alt="smile_regular" src="http://spaces.live.com/rte/emoticons/smile_regular.gif" /&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/115.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/OY03Emo8Rpo" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/08/18/lt-rssbandit-gt.aspx</guid>
            <pubDate>Mon, 17 Aug 2009 23:17:54 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/115.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/08/18/lt-rssbandit-gt.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/115.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/115.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/08/18/lt-rssbandit-gt.aspx</feedburner:origLink></item>
        <item>
            <title>C# 4.0 - Parametri opzionali</title>
            <category>C# 4.0</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/SYy6XDCprjI/c-4-0-parametri-opzionali.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt; &lt;p&gt;Leggo che tra le nuove feature di C# 4.0 c'è la possibilità di indicare come opzionali i parametri di un metodo o di un costruttore, in tal caso il parametro viene inizializzato con un valore di default fornito dal programmatore.&lt;/p&gt; &lt;p&gt;Una cosa di questo tipo:&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Person(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; firstName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; lastName, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; city = &lt;span style="color: #006080"&gt;""&lt;/span&gt;)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;{    &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;che può essere istanziata in entrambi le modalità:&lt;/p&gt;
&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
&lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;Person p = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person(&lt;span style="color: #006080"&gt;"Maurizio"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Tammacco"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;Person p1 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Person(&lt;span style="color: #006080"&gt;"Maurizio"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Tammacco"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"Bari"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Nel primo esempio, poichè il parametro "City" è opzionale, viene automaticamente assegnato il valore di default, ovvero stringa vuota in questo caso.&lt;/p&gt;
&lt;p&gt;Sinceramente questa nuova funzionalità non mi entusiasma per niente, anzi la ritengo quasi inutile visto che comunque una funzionalità analoga è possibile ottenerla con le "Automatic properties", ovvero proprietà pubbliche inizializzabili nella stessa istruzione che crea l'istanza di un oggetto, anche se questa funzionalità riguarda comunque un membro definito come proprietà.&lt;/p&gt;
&lt;p&gt;I parametri opzionali sono da sempre presenti in Visual Basic, sin dalla versione 6 e poi anche nelle varie versioni .NET. Questo comportava che, in caso di interoperabilità tra i due linguaggi, il codice C# che richiamava un metodo scritto in VB .NET con parametri opzionali era costretto a passargli comunque tutti i parametri, opzionali e non;  la stessa cosa accadeva nell'utilizzo della COM Interop da C#. Adesso non sarà più necessario passare i parametri opzionali, ma, ripeto, a mio avviso l'utilità di questa funzionalità è discutibile, e riguarda unicamente una più stretta compatibilità tra i due linguaggi più usati nel mondo .NET.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/114.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/SYy6XDCprjI" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/08/17/c-4-0-parametri-opzionali.aspx</guid>
            <pubDate>Mon, 17 Aug 2009 02:27:25 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/114.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/08/17/c-4-0-parametri-opzionali.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/114.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/114.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/08/17/c-4-0-parametri-opzionali.aspx</feedburner:origLink></item>
        <item>
            <title>Come ottenere il nome del metodo chiamante dallo stack usando reflection</title>
            <category>Tips &amp;amp; tricks</category>
            <category>.NET Framework 3.5</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/fBMqA33hj8o/come-ottenere-il-nome-del-metodo-chiamante-dallo-stack-usando.aspx</link>
            <description>&lt;p&gt;Cosi:&lt;/p&gt; &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt; &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Log(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; eventMessage)&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; { &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;    Console.WriteLine(&lt;span style="color: #006080"&gt;"Event logged by "&lt;/span&gt; + (&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StackTrace()).GetFrame(1).GetMethod().Name); &lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;    Console.WriteLine(&lt;span style="color: #006080"&gt;"Event: "&lt;/span&gt; + eventMessage);&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Fonte: &lt;a href="http://blogs.msdn.com/webdevelopertips/archive/2009/06/23/tip-83-did-you-know-you-can-get-the-name-of-the-calling-method-from-the-stack-using-reflection.aspx" target="_blank"&gt;Tips &amp;amp; Tricks for ASP.NET, IIS, and Visual Web Developer&lt;/a&gt;&lt;/p&gt;&lt;pre&gt; &lt;/pre&gt;&lt;img src="http://www.coding4art.com/aggbug/113.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/fBMqA33hj8o" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/08/14/come-ottenere-il-nome-del-metodo-chiamante-dallo-stack-usando.aspx</guid>
            <pubDate>Thu, 13 Aug 2009 23:41:14 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/113.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/08/14/come-ottenere-il-nome-del-metodo-chiamante-dallo-stack-usando.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/113.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/113.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/08/14/come-ottenere-il-nome-del-metodo-chiamante-dallo-stack-usando.aspx</feedburner:origLink></item>
        <item>
            <title>ASP .NET 4.0 #2 Servizi &amp;quot;provider based&amp;quot;</title>
            <category>ASP .NET 4.0</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/Ed_lj12qxYk/asp-net-4-0-2-servizi-quot-provider-based-quot.aspx</link>
            <description>&lt;p&gt;Proseguendo nell'analisi delle nuove feature di ASP .NET 4.0 è evidente che l'architettura a providers, di cui tempo fa ho parlato in un &lt;a href="http://www.dotnetside.org/blogs/articoli/pages/Servizi-basati-su-Provider-Model-in-ASP.NET-2.0.aspx" target="_blank"&gt;articolo&lt;/a&gt; apparso su &lt;a href="http://www.dotnetside.org" target="_blank"&gt;DotNetSide&lt;/a&gt;, è sempre più usata in modo intensivo per rendere quanto più modulare e personalizzabile l'application framework a disposizione.&lt;/p&gt; &lt;p&gt;Con la nuova versione di ASP .NET infatti questa architettura noto che sarà introdotta nei servizi di Output Caching, Browser Capabilities e Auto Start Application, almeno dalla documentazione in mio possesso.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Output Caching&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Uno dei grossi limiti dell' output caching delle precedenti versioni di ASP .NET è la limitatà flessibilità sul repository di memorizzazione dei dati in cache (output). Questi infatti potevano essere memorizzati solo nella memoria del server e da nessun altra parte. Come è facile intuire con la nuova versione è possibile scriversi un provider personalizzato per la memorizzazione dei dati e quindi utilizzare qualsivoglia repository a disposizione (es. disco locale, disco di rete, database, ecc)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Auto Start Application&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Se si utilizza IIS 7.5 e Windows Server 2008 R2 insieme ad ASP .NET 4.0, è possibile far in modo che una applicazione si avvii in automatico ed esegua del codice di inizializzazione. Questo scenario si applica soprattutto a quelle applicazioni che necessitano di tempi lunghi per inizializzarsi, e quindi per evitare che questo overhead ricada totalmente sulla prima richiesta è possibile eseguire questo codice allo start-up automatico, ovvero senza che ci sia una richiesta di pagina esplicita. Questo codice può essere incapsulato in una classe provider, e quindi si possono avere n provider da utilizzare all'occorrenza in base alle specifiche esigenze.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Browser Capabilities&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Questa funzionalità nelle precedenti versioni era fruibile solo mediante la modifica di files xml (.browser), a livello di macchina o di singola applicazione. Questi files xml non sono proprio il massimo per descrivere funzionalità come quelle del browser. Ora è possibile definire proprie funzionalità a livello di browser mediante l'uso di classi "provider based"&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/112.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/Ed_lj12qxYk" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-2-servizi-quot-provider-based-quot.aspx</guid>
            <pubDate>Wed, 22 Jul 2009 03:15:34 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/112.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-2-servizi-quot-provider-based-quot.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/112.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/112.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-2-servizi-quot-provider-based-quot.aspx</feedburner:origLink></item>
        <item>
            <title>ASP .NET 4.0 #1 Nuova propriet&amp;#224; ViewStateMode</title>
            <category>ASP .NET 4.0</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/Kg2lEjI1lD4/asp-net-4-0-1-nuova-propriet-224-viewstatemode.aspx</link>
            <description>&lt;p&gt;Per una applicazione ASP .NET soprattutto di livello enterprise la gestione del viewstate è sempre stato uno degli aspetti più delicati e, aggiungo io, più bistrattati in assoluto. Spesso e volentieri ho visto applicazioni di una certa complessità che ignorano completamente questo aspetto, che si traduce in pratica nell'utilizzo del valore di default della proprietà EnableViewState dei controlli di pagina (ovvero True), con conseguente saltataggio dei valori dello stato per tutti i controlli, a prescindere se questo salvataggio ha senso oppure no.&lt;/p&gt; &lt;p&gt;Anzi, spesso ho addirittura visto un utilizzo del ViewState a mò di Session, ovvero ho visto salvare informazioni aggiuntive rispetto allo stato dei controlli, e non parlo di tipi primitivi ma di veri e propri oggetti complessi, la cui serializzazione nel markup html provoca inevitabilmente un incremento notevole del peso della pagina web, con conseguenze facilmente immaginabili.&lt;/p&gt; &lt;p&gt;Con la prossima uscita della versione 4.0 di ASP .NET, lo sviluppatore avrà un controllo più fine sull'utilizzo del ViewState, soprattutto potrà impostare il valore di default desiderato in funzione della pagina che lo utilizza. Infatti, ogni server control (e quindi anche la classe Page) avrà a disposizione la proprietà ViewStateMode che potrà permettere ai controlli child situati all'interno di un contenitore (e quindi a tutti i controlli della pagina se guardiamo il livello più alto della gerarchia dei controlli), di ereditare la modalità di utilizzo dal rispettivo controllo container (valore &lt;em&gt;&lt;strong&gt;Inherit&lt;/strong&gt;&lt;/em&gt;), oppure di abilitare (&lt;strong&gt;&lt;em&gt;Enabled&lt;/em&gt;&lt;/strong&gt;) o disabilitare (valore &lt;strong&gt;&lt;em&gt;Disabled&lt;/em&gt;&lt;/strong&gt;) esplicitamente il Viewstate per un singolo controllo a prescindere dal valore impostato nel container.&lt;/p&gt; &lt;p&gt;Poichè il valore di default di questa nuova proprietà è &lt;strong&gt;&lt;em&gt;Inherit&lt;/em&gt;&lt;/strong&gt;, significa che a livello di pagina nessun controllo avrà il ViewState abilitato se non esplicitamente impostato dal programmatore.&lt;/p&gt; &lt;p&gt;Secondo me è un buon passo avanti verso la scrittura di applicazioni più efficienti.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/111.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/Kg2lEjI1lD4" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-1-nuova-propriet-224-viewstatemode.aspx</guid>
            <pubDate>Tue, 21 Jul 2009 23:10:20 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/111.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-1-nuova-propriet-224-viewstatemode.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/111.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/111.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/07/22/asp-net-4-0-1-nuova-propriet-224-viewstatemode.aspx</feedburner:origLink></item>
        <item>
            <title>Piccolo sfogo...</title>
            <category>Pensieri</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/lRp38wClsdk/piccolo-sfogo.aspx</link>
            <description>&lt;p&gt;Una pensiero che spesso mi viene in mente guardando il codice sorgente è: ma perchè scrivere in 10 righe di codice quello che potrebbe essere scritto in una o due righe ? &lt;img alt="smile_sad" src="http://spaces.live.com/rte/emoticons/smile_sad.gif" mce_src="http://spaces.live.com/rte/emoticons/smile_sad.gif" /&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/110.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/lRp38wClsdk" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx</guid>
            <pubDate>Wed, 15 Jul 2009 00:56:00 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/110.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/110.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/110.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/07/15/piccolo-sfogo.aspx</feedburner:origLink></item>
        <item>
            <title>Aggiornare in JavaScript la pagina chiamante in partial-rendering</title>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/5RAEX6bpam0/aggiornare-in-javascript-la-pagina-chiamante-in-partial-rendering.aspx</link>
            <description>&lt;p&gt;Mediante JavaScript è possibile eseguire programmaticamente un post della pagina mediante il richiamo della funzione&lt;/p&gt; &lt;div&gt; &lt;div class="csharpcode"&gt; &lt;div&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; __doPostBack( &lt;span class="str"&gt;'EventName'&lt;/span&gt;, &lt;span class="str"&gt;'EventArgs'&lt;/span&gt; );&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In questo caso il post generato è sincrono, ma, come ben spiegato in questo &lt;a href="http://bloggingabout.net/blogs/mveken/archive/2008/01/02/performing-async-postback-from-javascript.aspx" target="_blank"&gt;post&lt;/a&gt;, è anche possibile effettuarlo asincrono mediante l'utilizzo di un array della classe PageRequestmanager, in questo modo:&lt;/p&gt;
&lt;div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; function doPostBackAsync( eventTargetName, eventArgs )&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;     var prm = Sys.WebForms.PageRequestManager.getInstance();&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt;( !Array.contains( prm._asyncPostBackControlIDs, eventTargetName) )&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   7:&lt;/span&gt;         prm._asyncPostBackControlIDs.push(eventTargetName);&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  10:&lt;/span&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt;( !Array.contains( prm._asyncPostBackControlClientIDs, eventTargetName) )&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  12:&lt;/span&gt;         prm._asyncPostBackControlClientIDs.push(eventTargetName);&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  14:&lt;/span&gt;  &lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  15:&lt;/span&gt;     __doPostBack( eventTargetName, eventArgs );&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Mediante poi l'utilizzo dell'UpdatePanel otteniamo che a livello programmatico (quindi senza necessariamente l'interazione dell'utente mediante un controllo), possiamo generare un post asincrono con refresh parziale della pagina, mediante il richiamo esplicito della funzione di cui sopra. 
&lt;/p&gt;&lt;p&gt;Inoltre, poichè in Javascript è anche possibile, richiamare esplicitamente una funzione definita dall'utente in una pagina mentre ci si trova in un altra pagina (esempio popup), mediante il seguente costrutto: 
&lt;/p&gt;&lt;div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; window.opener.nomeFunzioneCustom(parametri); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;otteniamo che, stando un una pagina secondaria come un popup, riusciamo ad aggiornare con il partial rendering la pagina chiamante.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/109.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/5RAEX6bpam0" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/05/18/aggiornare-in-javascript-la-pagina-chiamante-in-partial-rendering.aspx</guid>
            <pubDate>Mon, 18 May 2009 01:51:27 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/109.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/05/18/aggiornare-in-javascript-la-pagina-chiamante-in-partial-rendering.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/109.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/109.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/05/18/aggiornare-in-javascript-la-pagina-chiamante-in-partial-rendering.aspx</feedburner:origLink></item>
        <item>
            <title>Visual Studio Addin - ecco quelli che uso io</title>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/B6wuxIOFrUk/visual-studio-addin-ecco-quelli-che-uso-io.aspx</link>
            <description>&lt;p&gt;L'utilizzo degli add-in di Visual Studio 2008 consente di incrementare a volte notevolmente la produttività di chi sviluppa, ad esempio rendendo possibile effettuare con pochi click operazioni ripetitive e lunghe. Tratto da &lt;a href="http://www.visualstudiogallery.com/Default.aspx" target="_blank"&gt;Visual Studio Gallery&lt;/a&gt;, ecco la serie di add-in, rigorosamente free, che utilizzo giornalmente durante l'attività di sviluppo del software:  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=800978aa-2aac-4440-8bdf-6d1a76a5c23c" target="_blank"&gt;Regionerate&lt;/a&gt;&lt;/strong&gt;, permette di creare in automatico le regioni di codice su un intero file, applicando un layout predefinito o scelto tra i layout forniti. Uno dei layout a corredo addirittura effettua il conteggio automatico degli items presenti in ogni regione e lo inserisce nel nome della stessa. E' anche possibile crearsi propri layout o scaricarli. Davvero utile.  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=df3f0c30-3d37-4e06-9ef8-3bff3508be31" target="_blank"&gt;PowerCommands&lt;/a&gt;, add-in abbastanza conosciuto e molto utile, anche se responsabile di un crash documentato di Visual Studio, di cui ho già parlato &lt;a href="http://xplayn.org/cs/blogs/maurizio/archive/2008/09/04/visual-studio-2008-ide-crash-dopo-quot-choose-items-quot-dalla-toolbox.aspx" target="_blank"&gt;qui&lt;/a&gt; e &lt;a href="http://xplayn.org/cs/blogs/maurizio/archive/2008/12/09/visual-studio-ide-crash-2.aspx" target="_blank"&gt;qui&lt;/a&gt;. Trattasi di una serie di comandi aggiuntivi sistemati in diversi punti dell'IDE. I principali comandi che uso sono:&lt;br /&gt;-&lt;strong&gt;Show All Files&lt;/strong&gt; (Solution Explorer, a livello di nodo solution)&lt;br /&gt;Questo comando mostra tutti i file per tutti i progetti caricati nella soluzione attiva, e non solo invece per il progetto attivo, come opera invece il comando omonimo a livello di progetto;&lt;br /&gt;-&lt;strong&gt;Collapse Projects&lt;/strong&gt;. Questo comando collassa il nodo selezionato e contemporaneamente tutti i suoi sottonodi. La funzionalità fornita dalla Treeview del Solution Explorer invece collassa solo il nodo selezionato, lasciando invariato lo stato dei suoi sottonodi;&lt;br /&gt;-&lt;strong&gt;Copy Class&lt;/strong&gt;. Come si può intuire, questo comando copia una intera classe o nodo nella Clipboard, permettendo di incollarla altrove (comando &lt;strong&gt;Paste Class&lt;/strong&gt;) dopo averla opportunamente rinominata per evitare errori di compilazione;&lt;br /&gt;-&lt;strong&gt;Copy References&lt;/strong&gt; (e &lt;strong&gt;Paste References&lt;/strong&gt;). Copia una reference o un set di reference nella Clipboard, per poi incollarla altrove;&lt;br /&gt;-&lt;strong&gt;Open Containing Folder&lt;/strong&gt; (davvero utile). Dal nodo di un progetto o item, apre una finestra di Windows Explorer che punta al path fisico del progetto (o dell'item) puntato;&lt;br /&gt;-&lt;strong&gt;Open Command Prompt,&lt;/strong&gt; simile a &lt;strong&gt;Open Containing Folder&lt;/strong&gt;, ma apre un prompt dei comandi invece che una finestra di windows explorer;&lt;br /&gt;-&lt;strong&gt;Remove and Sort Usings&lt;/strong&gt;, altro comando utilissimo, elimina tutti gli using inutili e ordina quelli indispensabili, in un colpo solo, per singola classe o per tutte le classi di un progetto;&lt;br /&gt;-&lt;strong&gt;Extract Constant&lt;/strong&gt;, dall'editor di codice, crea la definizione di costante per la stringa selezionata;&lt;br /&gt;-&lt;strong&gt;Clear Recent Project List&lt;/strong&gt;, elimina la lista degli ultimi progetti aperti, permettendo di selezionarli. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=d467cd03-8393-4172-a25a-7a586577f4fb" target="_blank"&gt;Sticky Notes&lt;/a&gt;, fornisce una windows dockable nella quale scrivere appunti, una per ogni file. Funzionalità sinceramente non utilissima perchè è comunque possibile inserire i propri appunti in un file sorgente a mo' di commento oppure utilizzare la window Task List. L'unico vantaggio è la possibilità di eliminare i propri appunti in un colpo solo o di inviarli per posta elettronica;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=75453691-dce3-4b02-adf9-de3449ca1a23" target="_blank"&gt;Clone Detective&lt;/a&gt;, ho già parlato &lt;a href="http://xplayn.org/cs/blogs/maurizio/archive/2009/03/06/rilevare-codice-duplicato.aspx" target="_blank"&gt;qui&lt;/a&gt; di questo tool. Consente di cercare facilmente codice duplicato all'interno della propria solution.  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeplex.com/ExportAsCodeSnippet" target="_blank"&gt;Export code as Code Snippet&lt;/a&gt;, add-in scritto dall'MVP &lt;a href="http://community.visual-basic.it/Alessandro" target="_blank"&gt;Alessandro Del Sole&lt;/a&gt;, consente di esportare facilmente blocchi di codice nel formato .snippet, e quindi riutilizzarli come Snippet Code direttamente attraverso la funzionalità presente nell'IDE  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=0099ed9b-8a69-4cb2-85f8-d996a228c158" target="_blank"&gt;Code Style Enforcer&lt;/a&gt;. Questo add-in permette di ottenere segnalazioni evidenti nel proprio codice nel caso in cui siano violate regole di naming e di best practices (visibilità membri e interfacce esplicite o no), configurabili mediante file XML;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.techinceptions.com/CodeMetrics.html" target="_blank"&gt;OxyProjectMetrics&lt;/a&gt;, estrae informazioni inerenti la metrica del codice e le mostra in un formato tabellare;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeplex.com/ResourceRefactoring" target="_blank"&gt;ResourceRefactor&lt;/a&gt;, estrae la stringa selezionata e cablata nel codice sorgente e la invia ad un apposito file di risorse;  &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.visualstudiogallery.com/ExtensionDetails.aspx?ExtensionID=0aeaaeee-3ef0-48ea-a6a9-af94c8e7c77a" target="_blank"&gt;AutoCode&lt;/a&gt;, add-in per automatizzare attività ripetitive di scrittura di codice mediante la creazione di comandi parametrici, come da esempio sotto.   &lt;/p&gt;&lt;p&gt;&lt;a href="http://tytannet.codeplex.com/" target="_blank"&gt;TytanNET&lt;/a&gt;, insieme di utili tool windows che incrementano le possibilità di refactoring del codice, e forniscono ulteriori visualizers per il debugging. Decisamente molto utile.&lt;/p&gt; &lt;p&gt;Su Visual Studio Gallery sono presenti decine e decine di altr utili add-in, sia gratuiti che non, per tutte le esigenze.&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/108.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/B6wuxIOFrUk" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/05/07/visual-studio-addin-ecco-quelli-che-uso-io.aspx</guid>
            <pubDate>Thu, 07 May 2009 04:56:22 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/108.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/05/07/visual-studio-addin-ecco-quelli-che-uso-io.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/108.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/108.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/05/07/visual-studio-addin-ecco-quelli-che-uso-io.aspx</feedburner:origLink></item>
        <item>
            <title>refactoring del codice</title>
            <category>Refactoring</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/xcdDsI9yN_k/refactoring-del-codice.aspx</link>
            <description>&lt;p&gt;Mi appunto questo &lt;a href="http://blogs.ugidotnet.org/luKa/archive/2009/03/02/un-esempio-di-semplicita-sul-refactoring-again.aspx" target="_blank"&gt;post&lt;/a&gt; molto interessante di &lt;a href="http://blogs.ugidotnet.org/luKa" target="_blank"&gt;Luca Minudel&lt;/a&gt; a proposito della attività di refactoring sul codice sorgente, molto spesso sottovalutata o ignorata del tutto in progetti reali.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/luKa" target="_blank"&gt;Minudel&lt;/a&gt; elenca le seguenti 6 attività di refactoring che ritengo personalmente indispensabili ed utili.&lt;/p&gt; &lt;p&gt;&lt;em&gt;* Estrae codice dai metodi troppo lunghi (&amp;gt;&amp;gt; 30 linee di codice)&lt;br /&gt;* Cerca i commenti e modifica il codice in modo che si spieghi da solo &lt;br /&gt;* Scorre i nomi di metodi e variabili e rinomina quelli poco chiari e quelli  poco descrittivi &lt;br /&gt;* Guarda i blocchi condizionali (If, switch, for, ...) e vede se li può eliminare&lt;br /&gt;* Trova parti di codice duplicate e le elimina&lt;br /&gt;* Scopre cosa fa ogni metodo e si chiede se si trova sulla classe giusta Inizia ogni punto mostrando come fare e quindi lascia continuare al suo collega, interviene quando serve&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/107.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/xcdDsI9yN_k" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/03/06/refactoring-del-codice.aspx</guid>
            <pubDate>Fri, 06 Mar 2009 00:37:56 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/107.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/03/06/refactoring-del-codice.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/107.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/107.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/03/06/refactoring-del-codice.aspx</feedburner:origLink></item>
        <item>
            <title>Impostare il calendarextender ad una cultura specifica</title>
            <category>Tips &amp;amp; tricks</category>
            <category>ASP .NET Ajax</category>
            <link>http://feedproxy.google.com/~r/mauriziotammacco/~3/IvK9j6cNT4c/impostare-il-calendarextender-ad-una-cultura-specifica.aspx</link>
            <description>&lt;p&gt;L'extender CalendarExtender presente nell'Ajax Toolkit presenta un bug se si cerca di globalizzarlo, ovvero adattarlo ad una specifica cultura. Infatti, la label presente in basso con l'indicazione della data odierna non viene globalizzata ma rimane impostata fissa alla cultura inglese, per cui apparirà sempre la scritta "Today". Affinchè i controlli dell'Ajax Toolkit possano essere personalizzati sulla base delle varie culture non basta impostare la specifica cultura nel file di configurazione dell'applicazione web (tag globalization), oppure impostarla tramite browser, ma occorre anche abilitare il rendering dello script al supporto di culture specifiche, tramite la proprietà &lt;a href="http://www.asp.net/Ajax/documentation/live/mref/P_System_Web_UI_ScriptManager_EnableScriptGlobalization.aspx" target="_blank"&gt;EnableScriptGlobalization&lt;/a&gt; dello ScriptManager, che deve essere ovviamente impostata a True (il valore di default è False).&lt;/p&gt;&lt;img src="http://www.coding4art.com/aggbug/106.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/mauriziotammacco/~4/IvK9j6cNT4c" height="1" width="1"/&gt;</description>
            <dc:creator>maurizio</dc:creator>
            <guid isPermaLink="false">http://www.coding4art.com/archive/2009/03/06/impostare-il-calendarextender-ad-una-cultura-specifica.aspx</guid>
            <pubDate>Fri, 06 Mar 2009 00:11:34 GMT</pubDate>
            <wfw:comment>http://www.coding4art.com/comments/106.aspx</wfw:comment>
            <comments>http://www.coding4art.com/archive/2009/03/06/impostare-il-calendarextender-ad-una-cultura-specifica.aspx#feedback</comments>
            <wfw:commentRss>http://www.coding4art.com/comments/commentRss/106.aspx</wfw:commentRss>
            <trackback:ping>http://www.coding4art.com/services/trackbacks/106.aspx</trackback:ping>
        <feedburner:origLink>http://www.coding4art.com/archive/2009/03/06/impostare-il-calendarextender-ad-una-cultura-specifica.aspx</feedburner:origLink></item>
    </channel>
</rss>
