<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/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>C#</title>
        <link>http://blogs.ugidotnet.org/rucka/category/304.aspx</link>
        <description>C#</description>
        <language>it-IT</language>
        <copyright>Gianluca Carucci</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <item>
            <title>Il rename refactoring sulle query Linq da Visual Studio</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2008/03/27/91911.aspx</link>
            <description>&lt;p&gt;L'Entity Framework e Linq To Sql avranno i suoi (grossi) limiti, ma vedere che da:&lt;/p&gt; &lt;font size="2"&gt;   &lt;p&gt;&lt;/p&gt;   &lt;font color="#2b91af" size="2"&gt;IEnumerable&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;CategoryView&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; views =&lt;/font&gt;    &lt;p&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt;from&lt;/font&gt;&lt;font size="2"&gt; d &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;font size="2"&gt; categories&lt;/font&gt;    &lt;p&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt;select&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;CategoryView&lt;/font&gt;&lt;font size="2"&gt;() { Id = d.Id, Name = d.Name, ImageUrl = d.ImageUrl, ImageIconUrl = d.ImageIconUrl };&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;con un semplice CNTRL-R-R il risultato è questo:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt; &lt;font size="2"&gt;   &lt;p&gt;&lt;/p&gt;   &lt;font color="#2b91af" size="2"&gt;IEnumerable&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;CategoryView&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; views =&lt;/font&gt;    &lt;p&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt;from&lt;/font&gt;&lt;font size="2"&gt; &lt;strong&gt;e&lt;/strong&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt;&lt;font size="2"&gt; categories&lt;/font&gt;    &lt;p&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt;select&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;CategoryView&lt;/font&gt;&lt;font size="2"&gt;() { Id = &lt;strong&gt;e&lt;/strong&gt;.Id, Name = &lt;strong&gt;e&lt;/strong&gt;.Name, ImageUrl = &lt;strong&gt;e&lt;/strong&gt;.ImageUrl, ImageIconUrl = &lt;strong&gt;e&lt;/strong&gt;.ImageIconUrl };&lt;/font&gt;&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;rende un uomo influenzato felice!&lt;/font&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:80f7d6a2-0936-42a3-8fa0-7785b0e9644b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Entity%20Framework" rel="tag"&gt;Entity Framework&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual%20Studio" rel="tag"&gt;Visual Studio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Refactoring" rel="tag"&gt;Refactoring&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/91911.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2008/03/27/91911.aspx</guid>
            <pubDate>Thu, 27 Mar 2008 17:26:18 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2008/03/27/91911.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/91911.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Linq To *</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2008/03/14/91695.aspx</link>
            <description>&lt;p&gt;Il solito &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;Scott&lt;/a&gt; &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/03/14/march-14th-links-asp-net-asp-net-ajax-asp-net-mvc-and-net.aspx" target="_blank"&gt;segnala&lt;/a&gt; un &lt;a href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx" target="_blank"&gt;post&lt;/a&gt; che contiene la lista aggiornata al 28 febbraio, dei providers Linq ufficiali e non.&lt;/p&gt;  &lt;p&gt;Lo stesso Charlie pubblicherà &lt;a href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx" target="_blank"&gt;qui&lt;/a&gt; i futuri aggiornamenti.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bc207dea-7504-4988-a689-7e404340556b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Providers" rel="tag"&gt;Providers&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/91695.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2008/03/14/91695.aspx</guid>
            <pubDate>Fri, 14 Mar 2008 07:20:26 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2008/03/14/91695.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/91695.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Pensate come sarebbe brutto C# se...</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2007/10/30/89308.aspx</link>
            <description>&lt;p&gt;il compilatore restituisse un errore nel caso in cui non gli piaccia l'ordine dei namespace dichiarati a inizio file.&lt;/p&gt;  &lt;p&gt;Oppure se...&lt;/p&gt;  &lt;p&gt;il compilatore restituisse un errore nel caso in cui non gli piaccia l'ordine delle classi/delegati/enumerazioni all'interno di un file.&lt;/p&gt;  &lt;p&gt;O ancora peggio se...&lt;/p&gt;  &lt;p&gt;il compilatore restituisse un errore nel caso in cui non gli piaccia l'ordine dei file da compilare.&lt;/p&gt;  &lt;p&gt;Ma anche se...&lt;/p&gt;  &lt;p&gt;con tanta fatica (e fortuna) riusciamo a trovare la giusta combinazione, ma un piccolo flag - fondamentale per la buona riuscita della compilazione - all'interno della configurazione del nostro progetto, provoca un errore di linking.&lt;/p&gt;  &lt;p&gt;Per fortuna non sono problemi che si riscontrano in C#, ma aimè sono situazioni frequenti in progetti C++; ancor più frequenti quando si cerca di compilare un software Open Source. Ci fosse una volta che si scarica un progetto C++, si lancia la compilazione e questa funziona 'al primo colpo': certo, spesso il problema è dovuto ad una cattiva organizzazione del codice (e delle librerie), ma il linguaggio certo non aiuta. &lt;/p&gt;  &lt;p&gt;Sia chiaro, non odio C++, mi piace e per certi versi lo amo (diciamo che lo stimo moltissimo); come potrei odiare un linguaggio che procaccia il cibo al mio caro &lt;a href="http://blogs.ugidotnet.org/Franny/Default.aspx" target="_blank"&gt;fratellino&lt;/a&gt; ed evita che sia io a doverlo mantenere? &lt;/p&gt;  &lt;p&gt;Quello che però proprio non riesco a mandare giù è dover perdere del tempo (in alcuni casi ore o giorni), a risolvere dei problemi completamente estranei al reale scopo della soluzione che sto sviluppando. Se c'è un pregio di C# - e .NET in generale - è proprio questo: lo sviluppo è concentrato per lo più verso l'aspetto funzionale, invece di quello tecnologico e infrastrutturale.&lt;/p&gt;  &lt;p&gt;Se avete la necessità di dover compilare con MSVC++ 2005 l'ultima versione della libreria &lt;a href="http://www.xvid.org/Downloads.43.0.html" target="_blank"&gt;xvid&lt;/a&gt; è il vostro giorno fortunato: questa sera impiegherete 4 ore a decidere come vestirvi per andare sui navigli o al &lt;a href="http://www.karement.mc/" target="_blank"&gt;Karement&lt;/a&gt; piuttosto che perderle per capire come risolvere questo errore (ovviamente, lo stesso identico progetto compila correttamente usando MSVC++ 2003):&lt;/p&gt;  &lt;p&gt;&lt;i&gt;error C2632: 'int' followed by 'int' is illegal&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Il problema è causato dal punto del codice in cui è incluso windows.h nel file &lt;em&gt;portab.h&lt;/em&gt;. Spostando l'inclusione del file all'inizio del sorgente tutto funzionerà magicamente.&lt;/p&gt;  &lt;p&gt;Per essere un po' più puliti sostituiamo la dichiarazione di inclusione (nel punto originale) con il seguente codice:&lt;/p&gt; &lt;font color="#0000ff" size="2"&gt;   &lt;p&gt;#if &lt;font color="#0000ff" size="2"&gt;defined&lt;/font&gt;&lt;font size="2"&gt;(_MSC_VER) &amp;amp;&amp;amp; _MSC_VER &amp;lt; 1400&lt;/font&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;    &lt;p&gt;#include &lt;font color="#a31515" size="2"&gt;&amp;lt;windows.h&amp;gt;&lt;/font&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;    &lt;p&gt;#endif&lt;/p&gt; &lt;/font&gt;  &lt;p&gt;ed aggiungiamo all'inizio del file il codice: &lt;/p&gt; &lt;font color="#0000ff" size="2"&gt;   &lt;p&gt;#if &lt;font color="#0000ff" size="2"&gt;defined&lt;/font&gt;&lt;font size="2"&gt;(_MSC_VER) &amp;amp;&amp;amp; _MSC_VER == 1400&lt;/font&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;    &lt;p&gt;#include &lt;font color="#a31515" size="2"&gt;&amp;lt;windows.h&amp;gt;&lt;/font&gt;&lt;/p&gt;   &lt;font color="#0000ff" size="2"&gt; &lt;/font&gt;    &lt;p&gt;#endif&lt;/p&gt; &lt;/font&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;In questo modo se il compilatore Visual C++ 2005, l'inclusione del file sarà spostata all'inizio del sorgente, altrimenti sarà lasciata dov'è.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:13ed7a3f-7f8c-43b1-ad34-8cb21c9ac2d7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/C++/" rel="tag"&gt;C++&lt;/a&gt; , &lt;a href="http://technorati.com/tags/C#/" rel="tag"&gt;C#&lt;/a&gt; , &lt;a href="http://technorati.com/tags/include/" rel="tag"&gt;include&lt;/a&gt; , &lt;a href="http://technorati.com/tags/compilazione/" rel="tag"&gt;compilazione&lt;/a&gt; , &lt;a href="http://technorati.com/tags/xvid/" rel="tag"&gt;xvid&lt;/a&gt; , &lt;a href="http://technorati.com/tags/vs2005/" rel="tag"&gt;vs2005&lt;/a&gt; &lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/89308.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2007/10/30/89308.aspx</guid>
            <pubDate>Tue, 30 Oct 2007 14:11:39 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2007/10/30/89308.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/89308.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Assert multipli all'interno di un singolo unit test</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2006/10/04/49921.aspx</link>
            <description>&lt;p&gt;Roy Osherove fornisce in &lt;a href="http://weblogs.asp.net/rosherove/archive/2006/10/04/Avoid-multiple-asserts-in-a-single-unit-test_3A00_-revisited.aspx"&gt;questo&lt;/a&gt; post, alcuni validi motivi del perchè secondo lui non dovrebbe essere possibile permettere di fallire più assert nell'esecuzione di un singolo unit test. Il post è in contrapposizione con un'altro &lt;a href="http://dotavery.com/blog/archive/2006/09/25/21263.aspx"&gt;post&lt;/a&gt; di James Avery dove viene spiegato invece, il perchè questa feature potrebbe essere utile.&lt;/p&gt;
&lt;p&gt; Un piccolo assaggio che quoto in pieno:&lt;/p&gt;
&lt;p&gt;"&lt;em&gt;Even if we assume that all the asserts are run, you're essentially running multiple tests on code that has "dirty" state. For example, asserting on the result of a method call may actually change the state of the object under test so that the next call to that method may actually be skewed because of the previous asserts. that's a bad world to be in. having single assert per test means you also know exactly the state of your object before the assert.&lt;/em&gt;"&lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/UnitTest"&gt;UnitTest&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/TDD"&gt;TDD&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Agile"&gt;Agile&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Assert"&gt;Assert&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/assert"&gt;assert&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/49921.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2006/10/04/49921.aspx</guid>
            <pubDate>Wed, 04 Oct 2006 07:48:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2006/10/04/49921.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/49921.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Nuovo ma già obsoleto?!?!?</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2006/08/31/47019.aspx</link>
            <description>&lt;div class="majorTitle"&gt;Ogni tanto, leggendo l'msdn, escono cose simpatiche:)&lt;/div&gt;
&lt;div class="majorTitle"&gt;Tratto dalla documentazione del metodo &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.visualc.cppcodeprovider.createcompiler.aspx"&gt;CppCodeProvider.CreateCompiler&lt;/a&gt; su MSDN Library:&lt;/div&gt;
&lt;div class="majorTitle"&gt; &lt;/div&gt;
&lt;div class="majorTitle"&gt;"&lt;/div&gt;
&lt;div class="majorTitle"&gt;.&lt;em&gt;NET Framework Class Library  &lt;/em&gt;&lt;/div&gt;
&lt;div class="title"&gt;&lt;em&gt;CppCodeProvider.CreateCompiler Method  &lt;/em&gt;&lt;/div&gt;&lt;!--Content type: DocStudio. Transform: devdiv2mtps.xslt.--&gt;
&lt;div id="mainSection"&gt;
&lt;div id="mainBody"&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="COLOR: red"&gt;Note: This method is new in the .NET Framework version 2.0.&lt;/span&gt; &lt;/em&gt;
&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;
&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;span style="COLOR: red"&gt;&lt;b&gt;NOTE: This method is now obsolete.&lt;/b&gt;&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;&lt;em&gt;Creates an instance of the C++ code compiler. &lt;/em&gt;
&lt;p&gt;&lt;em&gt;&lt;b&gt;Namespace:&lt;/b&gt; Microsoft.VisualC&lt;br /&gt;&lt;b&gt;Assembly:&lt;/b&gt; CppCodeProvider (in cppcodeprovider.dll)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;"&lt;/p&gt;
&lt;p&gt;Non bastasse, l'implementazione del metodo restituisce un NotImplementedException....&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/Msdn"&gt;Msdn&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/Codedom"&gt;Codedom&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/47019.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2006/08/31/47019.aspx</guid>
            <pubDate>Thu, 31 Aug 2006 08:07:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2006/08/31/47019.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/47019.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Generics e alias</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2005/12/23/31931.aspx</link>
            <description>&lt;p&gt;In c++, quando utilizziamo un template (prendiamo ad esempio il tipo std::vector), è pratica abbastanza diffusa definire un nuovo tipo del template specializzato. &lt;/p&gt;
&lt;p&gt;Qualcosa di questo tipo per intenderci:&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080"&gt;typedef std::vector&lt;int&gt;  IntVector;&lt;/int&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Come sappiamo  usare un template (o un tipo generico del framework) allunga incredibilmente il nome del tipo e risulta molto scomodo dover ripetere lo stesso nome per intero ad ogni cast, istanziazione etc etc. Esiste qualcosa di simile al tipedef anche in C#? La risposta è si, ma tenendo ben presente l'aggettivo SIMILE. In C# possiamo definire un alias utilizzando la key &lt;em&gt;using&lt;/em&gt;. La "dichiarazione duale del tipo IntVector di c++, in c# sarebbe:&lt;/p&gt;
&lt;p&gt;&lt;font color="#000080"&gt;using IntList = System.Collection.Generic.List&lt;int&gt;;&lt;/int&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Leggere attentamente le avvertenze: lo statement &lt;em&gt;using&lt;/em&gt;, come avviene con i namespace, definisce solo un alias, non esiste un vero e proprio equivalente del typedef del c++. Questo è supportato dal fatto che, una volta compilato il codice, nel nostro assembly non esisterà nessun metadata che fa riferimento al tipo IntList. Se proprio vogliamo definire un tipo specializzato del generic dobbiamo creare una classe che eredita dalla versione specializzata del tipo generico(magari può essere utile un codesnippet per questo).&lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/C++"&gt;C++&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/using"&gt;using&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/template"&gt;template&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/generics"&gt;generics&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/31931.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2005/12/23/31931.aspx</guid>
            <pubDate>Fri, 23 Dec 2005 10:41:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2005/12/23/31931.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/31931.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Testare classi che utilizzano Remoting</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2005/12/20/31784.aspx</link>
            <description>&lt;p&gt;Problema: dobbiamo scrivere una serie di unit test che testano le funzionalità di un singleton pubblicato con Remoting. &lt;/p&gt;
&lt;p&gt;Perchè è un problema? Perchè se specifico la porta usata dall'HttpChannel ed eseguo due test consecuitivi che registrano il nostro oggetto mediante l'httpchannel, il secondo test fallirà sempre. Il problema è dovuto al fatto che il socket del canale viene chiuso in maniera non determinstica (quando ne ha voglia il GC), quindi, quando viene eseguita (indirettamente dall'httpchannel) la bind per la seconda volta, viene lanciata un'eccezione che ci avverte che la porta tcp è già in uso ("only one usage of each socket address (protocol/IP address/port) is permitted"). &lt;/p&gt;
&lt;p&gt;Come risolverlo? Normalmente basterebbe chiudere il socket alla fine del test, peccato che l'httpchannel non fornisce nessuna reference al socket utlizzato e il channel non ha neanche un metodo Dispose che lo faccia indirettamente. Armato dei sani principi YAGNI e KISS, al posto di imbattermi in sinkprovider per cercare il socket perduto e chiuderlo a manina, ho trovato un piccolo workaround. La soluzione è banale, basta aprire l'httpchannel con il parametro port = 0. In questo modo, la porta del socket, viene scelta in modo automatico dal sistema (automatico=prima libera). A questo punto basta leggere la porta su cui ascolta il server ed usarla per creare il proxy. Ovviamente la porta scelta dinamicamente viene usata solo per i test, in produzione ha senso fissarne una decisa in fase di configurazione.&lt;/p&gt;
&lt;p&gt;Ecco lo snippet di codice: &lt;br /&gt;Creo il canale &lt;br /&gt;HttpChannel channel = new HttpChannel(0); &lt;br /&gt;ChannelServices.RegisterChannel(channel); &lt;br /&gt;&lt;br /&gt;//Registro il servizio &lt;br /&gt;RemoteConfiguration.RegisterWellKnownServiceType(typeof(Server), "MyService", WellKnownObjectMode.Singleton); &lt;br /&gt;//Leggo l'indirizzo associato al servizio &lt;br /&gt;string[] urls = channel.GetUrlsForUri("MyService"); &lt;br /&gt;int port = (new Uri(urls[0])).Port; &lt;br /&gt;&lt;br /&gt;//Istanzio il proxy &lt;br /&gt;IServer server = (IServer)Activator.GetObject(typeof(IServer), string.Format("http://localhost:&lt;a rel="tag" href="http://technorati.com/tags/remoting"&gt;remoting&lt;/a&gt;/MyService", port)); &lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/remoting"&gt;remoting&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/31784.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2005/12/20/31784.aspx</guid>
            <pubDate>Tue, 20 Dec 2005 14:24:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2005/12/20/31784.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/31784.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Convertire un array di byte in stringa esadecimale</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2005/04/29/15404.aspx</link>
            <description>&lt;P&gt;Visto che ne ho avuto bisogno, pubblico&amp;nbsp;un piccolo snippet per risolvere il problema:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; ConvertToHex(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; msg)&lt;/FONT&gt; &lt;BR&gt;&lt;FONT size=2&gt;{ &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (msg == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt; || msg == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty) &lt;BR&gt;&amp;nbsp; { &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty; &lt;BR&gt;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp; System.Text.StringBuilder sb = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; StringBuilder(); &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; byte&lt;/FONT&gt;&lt;FONT size=2&gt;[] bmsgs = ASCIIEncoding.ASCII.GetBytes(msg);&amp;nbsp;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; foreach&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;byte&lt;/FONT&gt;&lt;FONT size=2&gt; inByte &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;FONT size=2&gt; bmsgs) &lt;BR&gt;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(String.Format("{0:X2} ",inByte).Trim()); &lt;BR&gt;&amp;nbsp; } &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; return&lt;/FONT&gt;&lt;FONT size=2&gt; sb.ToString(); &lt;BR&gt;}&lt;/FONT&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/15404.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2005/04/29/15404.aspx</guid>
            <pubDate>Fri, 29 Apr 2005 11:48:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2005/04/29/15404.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/15404.aspx</wfw:commentRss>
        </item>
        <item>
            <title>AOP NET la parola a Don Box....</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2005/04/15/14092.aspx</link>
            <description>&lt;p&gt;Riprendo il &lt;a href="http://blogs.ugidotnet.org/lbarbieri/archive/2005/04/15/14090.aspx"&gt;post&lt;/a&gt; di &lt;a href="http://blogs.ugidotnet.org/lbarbieri/"&gt;Lorenzo&lt;/a&gt; riguardo l'AOP e Net fornendo uno stralcio dell'intervista a Don Box (per la quanle nn finirò mai di ringraziare il nostro caro &lt;a href="http://blogs.ugidotnet.org/pape/"&gt;presidente &lt;/a&gt;:) che esprime il suo parere proprio sull'AOP e sulle tecniche di interception. &lt;/p&gt;
&lt;p class="achievement" style="MARGIN-BOTTOM: 3pt; MARGIN-LEFT: 12.25pt; MARGIN-RIGHT: 12.25pt; mso-margin-top-alt: 0cm"&gt;&lt;em&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;Personally, I think there are a lot of interesting programming paradigms out there, and I think that the industry has beaten the "attributes+interception" style of AOP to death.  Personally, I've been much more inspired by the ideas that sprang from functional programming and think that Whidbey brings several of those ideas to the masses. Specifically, C#'s anonymous methods (closures) and iterators are far more interesting than yet another way to inject logging code.&lt;/span&gt;&lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p class="achievement" style="MARGIN-BOTTOM: 3pt; MARGIN-LEFT: 12.25pt; MARGIN-RIGHT: 12.25pt; mso-margin-top-alt: 0cm"&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;&lt;em&gt;&lt;font size="+0"&gt; &lt;/font&gt;&lt;/em&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;&lt;em&gt;BTW, the definitive method for injecting interceptors is the profiling API, which lets you catch every method invocation, not just those that cross a boundary. That stated, the API is so low level that statistically no one is qualified to program with it. In contrast, the C# features borrowed from functional programming are pretty darned accessible to a wide audience.&lt;/em&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="achievement" style="MARGIN-BOTTOM: 3pt; MARGIN-LEFT: 12.25pt; MARGIN-RIGHT: 12.25pt; mso-margin-top-alt: 0cm"&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Arial" size="2"&gt;&lt;span lang="EN-US" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial; LETTER-SPACING: -0.25pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;Il futuro dell'AOP nn sembra molto roseo...:) Prometto di scrivere al più presto un articolo sull'intervista  con il testo integrale e qualche commento e considerazione... Parola di lupetto:D&lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/AOP"&gt;AOP&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/design"&gt;design&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/14092.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2005/04/15/14092.aspx</guid>
            <pubDate>Fri, 15 Apr 2005 09:29:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2005/04/15/14092.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/14092.aspx</wfw:commentRss>
        </item>
        <item>
            <title>DavsGen Prima Versione</title>
            <link>http://blogs.ugidotnet.org/rucka/archive/2005/02/25/11479.aspx</link>
            <description>&lt;p&gt;Il codedom si sa è una delle parti più interessanti del framework. Visto che c'è, perchè non usarlo? &lt;a href="http://devarchitect.dyndns.tv/DesktopDefault.aspx?tabid=48"&gt;DavsGen &lt;/a&gt;è la prima versione versione di una serie di wizard integrati nel visual studio. Quando si aggiunge una classe ad un progetto di vs (sia esso in csharp che in vb) potrebbe essere utile avere una GUI  per dichiarare i membri della classe e  associargli automaticamente le propietà  senza doversele scrivere ogni volta a mano. &lt;/p&gt;
&lt;p&gt;Il &lt;a href="http://devarchitect.dyndns.tv/DesktopDefault.aspx?tabid=48"&gt;wizard &lt;/a&gt;è liberamente scaricabile dal &lt;a href="http://www.devarchitect.tk"&gt;sito&lt;/a&gt;. DavsGen è distribuito sotto forma di file di installazione per semplificare il deploy del wizard. Ovviamente ogni feedback, idea o commento è ben accetto!&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://devarchitect.dyndns.tv/Portals/57ad7180-c5e7-49f5-b282-c6475cdb7ee7/wizard.JPG"&gt;&lt;img height="600" src="http://devarchitect.dyndns.tv/Portals/57ad7180-c5e7-49f5-b282-c6475cdb7ee7/wizard.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="margin: 0px; padding: 0px; display: inline;" contenteditable="false" class="wlWriterSmartContent"&gt;Technorati tags: &lt;a rel="tag" href="http://technorati.com/tags/codedom"&gt;codedom&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/code%20generator"&gt;code generator&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/rucka/aggbug/11479.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gianluca Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rucka/archive/2005/02/25/11479.aspx</guid>
            <pubDate>Fri, 25 Feb 2005 11:06:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rucka/archive/2005/02/25/11479.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rucka/comments/commentRss/11479.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
