<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>Web Log di Adrian Florea</title>
        <link>http://blogs.ugidotnet.org/adrian/Default.aspx</link>
        <description>"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery</description>
        <language>it-IT</language>
        <copyright>Adrian Florea</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <image>
            <title>Web Log di Adrian Florea</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/adrian/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Quiz Sharp #72 [junior]</title>
            <category>Quiz Sharp</category>
            <category>Test Sharp</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2009/05/21/quiz-sharp-72-junior.aspx</link>
            <description>&lt;p&gt;Il seguente snippet:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;interface&lt;/strong&gt; IFoo {&lt;br /&gt;
    IFoo GetInstance();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;partial class&lt;/strong&gt; Foo : IFoo {&lt;br /&gt;
    &lt;strong&gt;public&lt;/strong&gt; IFoo GetInstance() {&lt;br /&gt;
        Console.WriteLine("Ciao");&lt;br /&gt;
        &lt;strong&gt;return this&lt;/strong&gt;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;static void&lt;/strong&gt; Main() {&lt;br /&gt;
        (&lt;strong&gt;new&lt;/strong&gt; Foo()).GetInstance().GetInstance();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;stampa:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ciao&lt;br /&gt;
Ciao&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a console. &lt;em&gt;Senza toccare lo snippet&lt;/em&gt; ma solo aggiungendone un pezzo, dobbiamo stampare a console:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ciao&lt;br /&gt;
&lt;font color="#ff0000"&gt;UGIdotNET&lt;/font&gt;&lt;br /&gt;
Ciao&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/96256.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2009/05/21/quiz-sharp-72-junior.aspx</guid>
            <pubDate>Thu, 21 May 2009 11:55:14 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2009/05/21/quiz-sharp-72-junior.aspx#feedback</comments>
            <slash:comments>335</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/96256.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/96256.aspx</trackback:ping>
        </item>
        <item>
            <title>Corso Sql Server 2008 Express per gli insegnanti arrivati all'ONI2009</title>
            <category>Quiz Sharp</category>
            <category>Test Sharp</category>
            <category>Varie</category>
            <category>RONUA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2009/04/14/corso-sql-server-2008-express-per-gli-insegnanti-arrivati-alloni2009.aspx</link>
            <description>&lt;p&gt;Ieri e l'altro ieri ho tenuto un corso su Sql Server 2008 Express per 80 insegnanti di informatica arrivati per l'occasione delle Olimpiadi Nazionali di Informatica (ONI2009) che quest'anno sono state ospitate proprio dalla mia citta'. E' stata un'esperienza interessante e inedita perche' parlare di un argomento cosi' "real world" davanti alle migliori menti in ambito pre-universitario vi assicuro che non e' facile. Gente eccezionale, che vive di algoritmi, grafi e C++, un po' lontana purtroppo dalle problematiche dei DB. Ieri, cioe' nel secondo giorno, mi sono dovuto inventare la &lt;a href="http://it.wikipedia.org/wiki/Successione_di_Fibonacci"&gt;successione di Fibonacci&lt;/a&gt; fatta in SQL...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;with&lt;/strong&gt; fibonacci(f, g) &lt;strong&gt;as &lt;/strong&gt;(&lt;br /&gt;
    &lt;strong&gt;select&lt;/strong&gt; 0, 1&lt;br /&gt;
    &lt;strong&gt;union all&lt;/strong&gt;&lt;br /&gt;
    &lt;strong&gt;select&lt;/strong&gt; f + g, f + g + g&lt;br /&gt;
    &lt;strong&gt;from&lt;/strong&gt; fibonacci&lt;br /&gt;
    &lt;strong&gt;where&lt;/strong&gt; f + g &amp;lt; 100&lt;br /&gt;
)&lt;br /&gt;
&lt;strong&gt;select&lt;/strong&gt; f&lt;br /&gt;
&lt;strong&gt;from&lt;/strong&gt; fibonacci&lt;br /&gt;
&lt;strong&gt;union all&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;select&lt;/strong&gt; g&lt;br /&gt;
&lt;strong&gt;from&lt;/strong&gt; fibonacci&lt;br /&gt;
&lt;strong&gt;order by&lt;/strong&gt; 1&lt;/p&gt;
&lt;p&gt;per tenerli svegli ;-) Hanno ricevuto con interesse il compito a casa di risolvere il &lt;a href="http://it.wikipedia.org/wiki/Rompicapo_delle_otto_regine"&gt;rompicapo delle otto regine&lt;/a&gt; sempre via &lt;a href="http://msdn.microsoft.com/en-us/library/ms190766.aspx"&gt;CTE&lt;/a&gt; :-) Molto gradito e' stato anche l'argomento sul nuovo tipo &lt;a href="http://technet.microsoft.com/en-us/library/bb677290.aspx"&gt;hierarchyid&lt;/a&gt; perche' abbastanza vicino al loro lavoro (algoritmi, alberi, etc.). Li sono piaciuti anche i nuovi tipi &lt;em&gt;geography&lt;/em&gt; e &lt;em&gt;geometry&lt;/em&gt; e l'integrazione del motore con .NET, poi il lavoro con XML, etc. In ogni caso e' stato un corso abbastanza atipico, preparato in un solo sabato, dalle 2 di notte in poi, con la soddisfazione di aver conosciuto di persona quelli che preparano le nuove generazioni di informatici rumeni.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/95948.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2009/04/14/corso-sql-server-2008-express-per-gli-insegnanti-arrivati-alloni2009.aspx</guid>
            <pubDate>Tue, 14 Apr 2009 19:36:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2009/04/14/corso-sql-server-2008-express-per-gli-insegnanti-arrivati-alloni2009.aspx#feedback</comments>
            <slash:comments>313</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/95948.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/95948.aspx</trackback:ping>
        </item>
        <item>
            <title>MVC versus Document/View in MFC</title>
            <category>Un po' di storia</category>
            <category>Pattern Dappertutto</category>
            <category>GUISA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2009/04/03/mvc-versus-documentview-in-mfc.aspx</link>
            <description>&lt;p&gt;Sto leggendo il bellissimo libro di &lt;a href="http://blogs.ugidotnet.org/dinoes/"&gt;Dino&lt;/a&gt; &amp;amp; &lt;a href="http://blogs.ugidotnet.org/pape/"&gt;Andrea&lt;/a&gt;, "&lt;a href="http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-PRO-Developer/dp/073562609X/"&gt;Microsoft .NET: Architecting Applications for the Enterprise&lt;/a&gt;" e mi ha incuriosito questa loro osservazione alla pagina 362: "[...] &lt;em&gt;Microsoft Foundation Classes (MFC) offered more than a decade ago an architecture with some points in common with MVC - particularly, the Document/View (DV) model. DV can be seen as a version of MVC where the view and controller are fused together. &lt;/em&gt;&lt;strong&gt;We really don't know whether the MFC team intentionally discarded MVC to embrace DV&lt;/strong&gt;&lt;em&gt;; our feeling, however, is that DV blossomed autonomously during the design by simply applying correctly and diffusely the SoC principle&lt;/em&gt;".&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www2.roguewave.com/support/developer/WinResources/mvc.cfm"&gt;Sembra&lt;/a&gt; che alla PDC del 1995, un membro del team di MFC abbia raccontato proprio la storia del "&lt;em&gt;MVC versus DV&lt;/em&gt;" nella scelta architetturale di MFC: "[...] &lt;em&gt;for the controller’s message mapping mechanism, can’t we just reuse MFC’s message map solution? Ideally, yes. But there is one big problem here... A separate controller class for message handlers may sound like a good idea, but MFC was designed in such a way that this was thought impossible. MFC allows commands such as menu picks to be rerouted to non-windows, but not windows messages such as mouse clicks. In MFC, only a CWnd can receive windows messages and only one instance of a CWnd can receive the messages for a real Windows window. Since a controller is meant to be a non-window that can handle windows messages and exist in multiple instances per window, we seem to be stuck! An interesting aside, this problem was sited by an original MFC team member as &lt;/em&gt;&lt;strong&gt;the main reason Microsoft emulated MVC for the CDocument and CView, but stopped short of implementing a controller&lt;/strong&gt;&lt;em&gt; (MFC Professional Developers Conference, 1995)&lt;/em&gt;". Interessante...&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/95872.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2009/04/03/mvc-versus-documentview-in-mfc.aspx</guid>
            <pubDate>Fri, 03 Apr 2009 22:18:48 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2009/04/03/mvc-versus-documentview-in-mfc.aspx#feedback</comments>
            <slash:comments>271</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/95872.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/95872.aspx</trackback:ping>
        </item>
        <item>
            <title>Vita da service pack</title>
            <category>Carillon .NET</category>
            <category>Varie</category>
            <category>Bugs?</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2009/03/26/vita-da-service-pack.aspx</link>
            <description>&lt;p&gt;Ho scoperto una cosa a mio parere strana: un metodo (&lt;a href="http://msdn.microsoft.com/en-us/library/cc491445.aspx"&gt;System.Web.UI.WebControls.ParameterCollection.Add(String, DbType, String)&lt;/a&gt;) che esiste solo nelle versioni service pack del framework .NET (2.0 SP2, 3.0 SP2, 3.5 SP1) ma non nelle versioni "normali". Mi chiedo come mai se il metodo e' stato introdotto in .NET 2.0 SP2, l'abbiano tolto dalle .NET 3.0 e .NET 3.0 SP1 per reintrodurlo nella .NET 3.0 SP2 per poi toglierlo di nuovo dalla .NET 3.5 e finalmente reintrodurlo nella .NET 3.5 SP1???...&lt;/p&gt;
&lt;p&gt;[OT] Per i tanti amici milanesi: sono a Milano dall'8 di marzo e torno in Romania settimana prossima, probabilmente mercoledi' - se vi fa piacere magari si organizza un pranzo o una cena!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/95802.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2009/03/26/vita-da-service-pack.aspx</guid>
            <pubDate>Thu, 26 Mar 2009 14:40:42 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2009/03/26/vita-da-service-pack.aspx#feedback</comments>
            <slash:comments>377</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/95802.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/95802.aspx</trackback:ping>
        </item>
        <item>
            <title>Sul cast del foreach</title>
            <category>Carillon .NET</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2009/01/14/sul-cast-del-foreach.aspx</link>
            <description>&lt;p&gt;Nel suo post di ieri, "&lt;a href="http://blogs.ugidotnet.org/luKa/archive/2009/01/13/foreach-linsidioso.aspx"&gt;foreach l'insidioso&lt;/a&gt;", Luca si e' chiesto come mai il seguente snippet:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;interface&lt;/strong&gt; IPersistent { }&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Invoice : IPersistent { }&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Order : IPersistent { }&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;static void&lt;/strong&gt; Main() {&lt;br /&gt;
        List&amp;lt;IPersistent&amp;gt; changedDocuments = &lt;strong&gt;new&lt;/strong&gt; List&amp;lt;IPersistent&amp;gt;();&lt;br /&gt;
        changedDocuments.Add(&lt;strong&gt;new&lt;/strong&gt; Invoice());&lt;br /&gt;
        changedDocuments.Add(&lt;strong&gt;new&lt;/strong&gt; Order());&lt;br /&gt;
        &lt;strong&gt;foreach&lt;/strong&gt; (Invoice changedInvoice &lt;strong&gt;in&lt;/strong&gt; changedDocuments) { }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;compili. Secondo me, il comportamento del compilatore e' giusto, voluto e documentato. Le specifiche del linguaggio (&lt;strong&gt;15.8.4&lt;/strong&gt;, &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-334.htm"&gt;ECMA-334&lt;/a&gt;), dicono:&lt;/p&gt;
&lt;p&gt;"A foreach statement of the form&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;foreach&lt;/strong&gt;(V v &lt;strong&gt;in&lt;/strong&gt; x) &lt;em&gt;embedded-statement&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;is then expanded to:&lt;/p&gt;
&lt;p&gt;{&lt;br /&gt;
    E e = ((C)(x)).GetEnumerator();&lt;br /&gt;
    &lt;strong&gt;try&lt;/strong&gt; {&lt;br /&gt;
        V v;&lt;br /&gt;
        &lt;strong&gt;while&lt;/strong&gt; (e.MoveNext()) {&lt;br /&gt;
            v = (V)(T)e.Current;&lt;br /&gt;
            &lt;em&gt;embedded-statement&lt;/em&gt;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;strong&gt;finally&lt;/strong&gt; {&lt;br /&gt;
        … // Dispose e&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;The variable e is not visible to or accessible to the expression x or the embedded statement or any other source code of the program. The variable v is read-only in the embedded statement. &lt;font color="#ff0000"&gt;&lt;strong&gt;If there is not an explicit conversion from T (the element type) to V (the type in the foreach statement), an error is produced and no further steps are taken&lt;/strong&gt;.&lt;/font&gt;"&lt;/p&gt;
&lt;p&gt;Quindi e' la responsabilita' del programmatore quella di assicurarsi che il cast sia valido. Potremmo volere per esempio fare un &lt;em&gt;foreach&lt;/em&gt; su tutte le &lt;em&gt;Label&lt;/em&gt; nella &lt;em&gt;ControlCollection&lt;/em&gt; dei &lt;em&gt;Controls&lt;/em&gt; di una &lt;em&gt;Form&lt;/em&gt; - sara' il nostro compito quello di "filtrare" gli elementi di tipo &lt;em&gt;Label&lt;/em&gt; e fare il &lt;em&gt;foreach&lt;/em&gt; soltanto su questi, oppure assicurarsi che nella &lt;em&gt;Controls&lt;/em&gt; ci sono solo &lt;em&gt;Label&lt;/em&gt;. Perche' il compilatore non ci aiuta? Probabilmente perche' la lista potrebbe essere costruita anche altrove!&lt;/p&gt;
&lt;p&gt;In ogni caso, se cerchiamo un aiuto da parte dell'intellisense e del compilatore, possiamo sostituire il &lt;em&gt;foreach&lt;/em&gt; nello snippet di Luca, con:&lt;/p&gt;
&lt;p&gt;changedDocuments.ForEach(&lt;strong&gt;delegate&lt;/strong&gt;(IPersistent persistent) { });&lt;/p&gt;
&lt;p&gt;Sorprendemente, otteniamo anche un codice IL piu' piccolo rispetto alla variante con &lt;em&gt;foreach&lt;/em&gt;. Il type parameter dell'argomento action del metodo &lt;em&gt;ForEach&lt;/em&gt;, e' vincolato ora ad essere identico al type parameter della nostra &lt;em&gt;List&lt;/em&gt;, cioe' &lt;em&gt;IPersistent&lt;/em&gt;.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/95195.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2009/01/14/sul-cast-del-foreach.aspx</guid>
            <pubDate>Wed, 14 Jan 2009 11:11:13 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2009/01/14/sul-cast-del-foreach.aspx#feedback</comments>
            <slash:comments>96</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/95195.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/95195.aspx</trackback:ping>
        </item>
        <item>
            <title>3rd Italian MDA Forum</title>
            <category>Adrian</category>
            <category>GUISA</category>
            <category>VSX</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/11/21/3rd-italian-mda-forum.aspx</link>
            <description>&lt;p&gt;Salire sul &lt;a href="http://mdaforum.soluta.net/agenda.aspx"&gt;palco&lt;/a&gt; a parlare di DSL Tools subito dopo &lt;a href="http://www.omg.org/~soley/"&gt;Richard Mark Soley&lt;/a&gt;, &lt;a href="http://www.stephenmellor.com/"&gt;Stephen J. Mellor&lt;/a&gt; e &lt;a href="http://www.cutter.com/meet-our-experts/rosenm.html"&gt;Michael Rosen&lt;/a&gt;, giuro che non e' stato facile :) Ottima l'organizzazione dell'evento, nel cinquecentesco &lt;a href="http://www.hotelpalazzostelline.it/"&gt;Palazzo delle Stelline&lt;/a&gt;, tante discussioni interessantissime sull'MDA, modellizzazione e generazione di codice. Giornata davvero speciale!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/94728.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/11/21/3rd-italian-mda-forum.aspx</guid>
            <pubDate>Fri, 21 Nov 2008 11:15:24 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/11/21/3rd-italian-mda-forum.aspx#feedback</comments>
            <slash:comments>411</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/94728.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/94728.aspx</trackback:ping>
        </item>
        <item>
            <title>Quando C# e' piuttosto l'eccezione che la regola</title>
            <category>Quiz Sharp</category>
            <category>Carillon .NET</category>
            <category>Bugs?</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/11/10/quando-c-e-piuttosto-leccezione-che-la-regola.aspx</link>
            <description>&lt;p&gt;Il comportamento del compilatore C#, presentato prima &lt;a href="http://blogs.ugidotnet.org/WamBlog/archive/2008/11/01/c-uno-strano-comportamento-con-loverride.aspx"&gt;qui&lt;/a&gt; da Diego e poi nel mio &lt;a href="http://blogs.ugidotnet.org/adrian/archive/2008/11/09/quiz-sharp-71-overrideoverload.aspx"&gt;post precedente&lt;/a&gt;, sembra singolare tra gli altri compilatori piu' conosciuti .NET. Il seguente snippet C# entra in stack overflow:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public virtual void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s) {&lt;br /&gt;
        Console.WriteLine("Foo virtual " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Bar : Foo {&lt;br /&gt;
    &lt;strong&gt;public override void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s) {&lt;br /&gt;
        Console.WriteLine("Bar override " + s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;strong&gt;public void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s, &lt;strong&gt;params string&lt;/strong&gt;[] args) {&lt;br /&gt;
        Write("Bar overload " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;static void&lt;/strong&gt; Main() {&lt;br /&gt;
        Bar bar = &lt;strong&gt;new&lt;/strong&gt; Bar();&lt;br /&gt;
        bar.Write("Ciao!"); // &lt;font color="#ff0000"&gt;Process is terminated due to StackOverflowException&lt;/font&gt;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;mentre per gli altri linguaggi, stampa &lt;em&gt;Bar override Ciao!&lt;/em&gt; Di seguito il codice equivalente in Visual Basic .NET, C++/CLI e Visual J#&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Imports&lt;/strong&gt; System&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Class&lt;/strong&gt; Foo&lt;br /&gt;
    &lt;strong&gt;Public Overridable Sub&lt;/strong&gt; Write(&lt;strong&gt;ByVal&lt;/strong&gt; s &lt;strong&gt;As String&lt;/strong&gt;)&lt;br /&gt;
        Console.WriteLine("Foo virtual " + s)&lt;br /&gt;
    &lt;strong&gt;End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Class&lt;/strong&gt; Bar : &lt;strong&gt;Inherits&lt;/strong&gt; Foo&lt;br /&gt;
    &lt;strong&gt;Public Overrides Sub&lt;/strong&gt; Write(&lt;strong&gt;ByVal&lt;/strong&gt; s &lt;strong&gt;As String&lt;/strong&gt;)&lt;br /&gt;
        Console.WriteLine("Bar override " + s)&lt;br /&gt;
    &lt;strong&gt;End Sub&lt;br /&gt;
&lt;br /&gt;
    Public Overloads Sub&lt;/strong&gt; Write(&lt;strong&gt;ByVal&lt;/strong&gt; s &lt;strong&gt;As String&lt;/strong&gt;, &lt;strong&gt;ParamArray&lt;/strong&gt; args &lt;strong&gt;As String&lt;/strong&gt;())&lt;br /&gt;
        Write("Bar overload " + s)&lt;br /&gt;
    &lt;strong&gt;End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Module&lt;/strong&gt; Program&lt;br /&gt;
    &lt;strong&gt;Sub&lt;/strong&gt; Main&lt;br /&gt;
        &lt;strong&gt;Dim&lt;/strong&gt; bar &lt;strong&gt;As&lt;/strong&gt; Bar = &lt;strong&gt;New&lt;/strong&gt; Bar&lt;br /&gt;
        bar.Write("Ciao") ' stampa &lt;font color="#ff0000"&gt;Bar override Ciao!&lt;/font&gt;&lt;br /&gt;
    &lt;strong&gt;End Sub&lt;br /&gt;
End Module&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using namespace&lt;/strong&gt; System;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;ref class&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public&lt;/strong&gt;:&lt;br /&gt;
    &lt;strong&gt;virtual void&lt;/strong&gt; Write(String^ s) {&lt;br /&gt;
        Console::WriteLine("Foo virtual " + s);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;ref class&lt;/strong&gt; Bar : Foo {&lt;br /&gt;
    &lt;strong&gt;public&lt;/strong&gt;:&lt;br /&gt;
    &lt;strong&gt;virtual void&lt;/strong&gt; Write(String^ s) &lt;strong&gt;override&lt;/strong&gt; {&lt;br /&gt;
        Console::WriteLine("Bar override " + s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;strong&gt;void&lt;/strong&gt; Write(String^ s, ... &lt;strong&gt;array&lt;/strong&gt;&amp;lt;String^&amp;gt;^ args) {&lt;br /&gt;
        Write("Bar overload " + s);&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;int&lt;/strong&gt; main() {&lt;br /&gt;
    Bar^ bar = &lt;strong&gt;gcnew&lt;/strong&gt; Bar;&lt;br /&gt;
    bar-&amp;gt;Write("Ciao!"); // stampa &lt;font color="#ff0000"&gt;Bar override Ciao!&lt;/font&gt;&lt;br /&gt;
};&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;import&lt;/strong&gt; System.*;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public void&lt;/strong&gt; Write(String s) {&lt;br /&gt;
        Console.WriteLine("Foo virtual " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Bar &lt;strong&gt;extends&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public void&lt;/strong&gt; Write(String s) {&lt;br /&gt;
        Console.WriteLine("Bar override " + s);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;strong&gt;public void&lt;/strong&gt; Write(String s, /** @attribute ParamArray() */ String[] args) {&lt;br /&gt;
        Write("Bar overload " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;public static void&lt;/strong&gt; main(String[] args) {&lt;br /&gt;
        Bar bar = &lt;strong&gt;new&lt;/strong&gt; Bar();&lt;br /&gt;
        bar.Write("Ciao"); // stampa &lt;font color="#ff0000"&gt;Bar override Ciao!&lt;/font&gt;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Ho sempre considerato C# come linguaggio "centrale" di .NET, una chiave per capire meglio lo spirito della piattaforma - percio' mi meraviglio quando trovo comportamenti in C# che sono piuttosto l'eccezione anziche' la regola rispetto agli altri linguaggi .NET. A voi quale comportamento sembra piu' corretto/intuitivo?&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/94595.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/11/10/quando-c-e-piuttosto-leccezione-che-la-regola.aspx</guid>
            <pubDate>Mon, 10 Nov 2008 23:46:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/11/10/quando-c-e-piuttosto-leccezione-che-la-regola.aspx#feedback</comments>
            <slash:comments>225</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/94595.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/94595.aspx</trackback:ping>
        </item>
        <item>
            <title>Quiz Sharp #71 [override/overload]</title>
            <category>Quiz Sharp</category>
            <category>Carillon .NET</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/11/09/quiz-sharp-71-overrideoverload.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/WamBlog/archive/2008/11/01/c-uno-strano-comportamento-con-loverride.aspx"&gt;Questo post&lt;/a&gt; di Diego Martelli, fattomi notare da un amico, riesce secondo me a sorprendere un comportamento interessante di C#, ovvero il seguente snippet di codice entra in &lt;em&gt;stack overflow&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public virtual void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s) {&lt;br /&gt;
        Console.WriteLine("Foo virtual " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Bar : Foo {&lt;br /&gt;
    &lt;strong&gt;public override void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s) {&lt;br /&gt;
        Console.WriteLine("Bar override " + s);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;strong&gt;public void&lt;/strong&gt; Write(&lt;strong&gt;string&lt;/strong&gt; s, &lt;strong&gt;params string&lt;/strong&gt;[] args) {&lt;br /&gt;
        Write("Bar overload " + s);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;static void&lt;/strong&gt; Main() {&lt;br /&gt;
        Bar bar = &lt;strong&gt;new&lt;/strong&gt; Bar();&lt;br /&gt;
        bar.Write("Ciao!");&lt;br /&gt;
    }&lt;br /&gt;
} &lt;/p&gt;
&lt;p&gt;Probabilmente molti si aspetterebbero che venisse stampato "&lt;strong&gt;Bar override Ciao!&lt;/strong&gt;" a console e invece il metodo chiamato e' il &lt;em&gt;Write&lt;/em&gt; con l'elenco variabile di parametri e non il metodo in override. Questo comportamento e' dovuto, secondo me, al fatto che abbiamo istanziato &lt;em&gt;bar&lt;/em&gt; come:&lt;/p&gt;
&lt;p&gt;Bar bar = &lt;strong&gt;new&lt;/strong&gt; Bar();&lt;/p&gt;
&lt;p&gt;e non come:&lt;/p&gt;
&lt;p&gt;Foo bar = &lt;strong&gt;new&lt;/strong&gt; Bar();&lt;/p&gt;
&lt;p&gt;Il metodo &lt;em&gt;Write&lt;/em&gt; in override nella classe &lt;em&gt;Bar&lt;/em&gt; non fa altro che &lt;em&gt;specializzare&lt;/em&gt; il metodo virtuale della classe base &lt;em&gt;Foo&lt;/em&gt;, percio' perde nella gara dei metodi in overload della classe &lt;em&gt;Bar&lt;/em&gt; perche' &lt;em&gt;Write&lt;/em&gt; nella sua &lt;em&gt;forma espansa&lt;/em&gt; (ECMA-334, 14.4.2.1) ha un parametro di tipo string e zero elementi nell'array di parametri.&lt;/p&gt;
&lt;p&gt;Detto questo, ecco il mio quiz: Cosa stampa questo snippet a console?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;using&lt;/strong&gt; System;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Foo {&lt;br /&gt;
    &lt;strong&gt;public override string&lt;/strong&gt; ToString() {&lt;br /&gt;
        &lt;strong&gt;return&lt;/strong&gt; "override ";&lt;br /&gt;
    }&lt;br /&gt;
    &lt;strong&gt;public string&lt;/strong&gt; ToString(&lt;strong&gt;params string&lt;/strong&gt;[] args) {&lt;br /&gt;
        &lt;strong&gt;return&lt;/strong&gt; "overload ";&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;class&lt;/strong&gt; Program {&lt;br /&gt;
    &lt;strong&gt;static void&lt;/strong&gt; Main() {&lt;br /&gt;
        Foo foo = &lt;strong&gt;new&lt;/strong&gt; Foo();&lt;br /&gt;
        Console.Write(foo);&lt;br /&gt;
        Console.WriteLine(foo.ToString());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;A&lt;/strong&gt;: override override &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;B&lt;/strong&gt;: override overload &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;: overload overload &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;:-)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/94564.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/11/09/quiz-sharp-71-overrideoverload.aspx</guid>
            <pubDate>Sun, 09 Nov 2008 11:14:21 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/11/09/quiz-sharp-71-overrideoverload.aspx#feedback</comments>
            <slash:comments>311</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/94564.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/94564.aspx</trackback:ping>
        </item>
        <item>
            <title>IDisposable e le partial class</title>
            <category>Carillon .NET</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/10/02/idisposable-e-le-partial-class.aspx</link>
            <description>&lt;p&gt;Oggi, parlando con il mio collega &lt;a href="http://danielseverin.blogspot.com/"&gt;Daniel&lt;/a&gt;, e' uscita fuori una situazione interessante. Supponiamo che avete un tool che vi genera una classe partial che implementa IDisposable:&lt;/p&gt;
&lt;pre&gt;using System;

&lt;strong&gt;partial class&lt;/strong&gt; Foo : IDisposable {
    &lt;strong&gt;public void&lt;/strong&gt; Dispose() {
        Console.WriteLine("implicit");
    }
}&lt;/pre&gt;
&lt;p&gt;Se volete cambiare il comportamento del Dispose senza toccare il codice generato sopra, basta implementare esplicitamente l'interfaccia IDisposable:&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;using&lt;/strong&gt; System;

&lt;strong&gt;partial class&lt;/strong&gt; Foo {
    &lt;strong&gt;void&lt;/strong&gt; IDisposable.Dispose() {
        Console.WriteLine("explicit");
    }
}&lt;/pre&gt;
&lt;p&gt;A questo punto uno using(Foo foo = new Foo()){} stampera' &lt;strong&gt;explicit&lt;/strong&gt; a console, anziche' &lt;strong&gt;implicit&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/94230.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/10/02/idisposable-e-le-partial-class.aspx</guid>
            <pubDate>Thu, 02 Oct 2008 03:23:15 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/10/02/idisposable-e-le-partial-class.aspx#feedback</comments>
            <slash:comments>116</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/94230.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/94230.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft Community Influencer</title>
            <category>Adrian</category>
            <category>Voi</category>
            <category>RONUA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/09/14/microsoft-community-influencer.aspx</link>
            <description>&lt;p&gt;Sono tornato ieri sera dal fantastico Microsoft Community Bootcamp dove ho avuto il grande onore di essere nominato Microsoft Community Influencer, un programma locale di Microsoft Romania con cui sono state premiate un numero quasi doppio di persone rispetto al piu' conosciuto programma MVP. La gioia del riconoscimento e quella di passare due splendide giornate in compagnia di tutti i Developer Evangelist, MVP, Community Influencer e Student Partner rumeni e' stata grande quanto la sorpresa. Insieme abbiamo messo a punto un piano per un impegno piu' efficace del nostro contributo perche' la voglia di fare si vedeva negli occhi di tutti. Ringrazio i nuovi amici per avermi ricevuto nella loro famiglia e ovviamente tutti voi per avermi insegnato in tanti anni cosa vuol dire community!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/94027.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/09/14/microsoft-community-influencer.aspx</guid>
            <pubDate>Sun, 14 Sep 2008 19:41:54 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/09/14/microsoft-community-influencer.aspx#feedback</comments>
            <slash:comments>1472</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/94027.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/94027.aspx</trackback:ping>
        </item>
        <item>
            <title>Axioms for software architects by software architects</title>
            <category>Varie</category>
            <category>GUISA</category>
            <category>VSX</category>
            <category>RONUA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/09/08/axioms-for-software-architects-by-software-architects.aspx</link>
            <description>&lt;p&gt;Via &lt;a href="http://memeagora.blogspot.com/2008/08/97-things-every-software-architect.html"&gt;questo post&lt;/a&gt; di Neal Ford sono arrivato a questo saggissimo wiki: &lt;a href="http://97-things.near-time.net/"&gt;97 Things Every Software Architect Should Know&lt;/a&gt;. Assolutamente da non perdere! Tre dei principi li ho gia' aggiunti alla mia &lt;a href="http://blogs.ugidotnet.org/adrian/archive/2006/03/03/36066.aspx"&gt;collezione sulla semplicita'&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[OT]: Venerdi' organizziamo il &lt;a href="http://ronua.ro/CS/forums/thread/206385.aspx"&gt;secondo workshop&lt;/a&gt; dello user group locale, RONUA Galati, con due presentazioni sullo stesso difficile tema: un'introduzione a DSL Tools e un'altra a VSX. &lt;a href="http://ronua.ro/CS/photos/23_mai_2008_--_galati_ronua_roadshow_2008/default.aspx"&gt;Guardate&lt;/a&gt; quanta gente e' venuta al primo workshop, tenuto a maggio! Incredibile... Poi sono stato invitato a partecipare questo weekend insieme a tutti gli MVP e Microsoft Influencer rumeni alla quinta edizione di Microsoft Community Bootcamp, organizzata da Microsoft Romania in montagna, ottima opportunita' di conoscerci tutti insieme! Presto mettero' da qualche parte le slide e il codice del workshop e vi aggiornero' su come e' andata al bootcamp - scusate la parte off-topic del post...&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/93965.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/09/08/axioms-for-software-architects-by-software-architects.aspx</guid>
            <pubDate>Mon, 08 Sep 2008 05:05:17 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/09/08/axioms-for-software-architects-by-software-architects.aspx#feedback</comments>
            <slash:comments>27</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/93965.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/93965.aspx</trackback:ping>
        </item>
        <item>
            <title>How I got Started in Software Development</title>
            <category>Adrian</category>
            <category>Varie</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/07/15/how-i-got-started-in-software-development.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/rucka/archive/2008/07/15/93411.aspx"&gt;Taggato da Gianluca&lt;/a&gt;, ecco le mie risposte:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A quale età hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A 17 anni, nel lontano agosto del 1985&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A giugno di quell'anno (23 anni fa...), avevo vinto la fase provinciale di un concorso di comunicazioni scientifiche (sezione matematica) e come premio mi avevano mandato per 2-3 settimane al 1° campo nazionale di informatica in Romania, a &lt;a href="http://en.wikipedia.org/wiki/C%C3%A2mpulung"&gt;Câmpulung Muscel&lt;/a&gt;, dove ho avuto la fortuna di conoscere gli &lt;a href="http://ro.wikipedia.org/wiki/Lista_autorilor_de_manuale_de_matematica"&gt;autori dei miei manuali di matematica&lt;/a&gt;, Gheorghe Rizescu e Octavian Stănăşilă, poi &lt;a href="http://ro.wikipedia.org/wiki/Adrian_Petrescu"&gt;Adrian Petrescu&lt;/a&gt; che aveva &lt;em&gt;costruito&lt;/em&gt; proprio il computer &lt;a href="http://ro.wikipedia.org/wiki/AMIC"&gt;aMIC&lt;/a&gt; su cui ci insegnarono a programmare in BASIC, poi una ragazza bionda con degli enormi occhioni verdi di cui mi innamorai perdutamente ma ebbi il corraggio di dicchiararle subito il mio impossibile amore ;) Partecipai anche i prossimi anni, '86 e '87, al 2° e al 3° campo nazionale di informatica, stavolta a &lt;a href="http://it.wikipedia.org/wiki/T%C3%A2rgu_Mure%C5%9F"&gt;Târgu Mureş&lt;/a&gt; dove ho approfondito le mie conoscenze di BASIC ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual’è stato il tuo primo linguaggio di programmazione?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BASIC&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual’è stato il primo programma vero che hai scritto?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il primo "vero" programma non ricordo ma il primo programma in assoluto non lo posso scordare: ero curioso di vedere come la funzione f(x)=(1+1/x)^x tende all'infinito verso il numero di Eulero e quindi le disegnai il grafico.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quali linguaggi hai usato da quando hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In ordine temporale: BASIC, FORTRAN, Turbo Pascal, C, dBase IV, Turbo Prolog, C++, Informix NewEra, Object Tcl, Delphi, Informix AppPage, JavaScript, Informix 4GL, Java, C#, VB.NET&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quando è stato il tuo primo vero lavoro da programmatore?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Direi nel 1996 (dal '92 al '96 ho fatto piu' matematica che informatica, come ricercatore)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con il senno di poi, rifaresti lo stesso il programmatore? Ricominceresti a programmare?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Non so, probabilmente no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Se ci fosse una cosa che hai imparato nella tua carriera e che vorresti dire ai giovani programmatori, cosa diresti?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Leggere prima la documentazione... ;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual’è la cosa più divertente che hai programmato?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;type foo.cs &amp;gt; foo.cs&lt;br /&gt;
csc /t:library foo.cs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adesso è l’ora di taggare qualcun’altro...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/luKa/"&gt;Luca Minudel&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.ugidotnet.org/rgm/"&gt;Gian Maria Ricci&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.ugidotnet.org/dotnet4ever/"&gt;Michele Bernardi&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://sharpreflections.wordpress.com/"&gt;Matteo Spreafico&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/93416.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/07/15/how-i-got-started-in-software-development.aspx</guid>
            <pubDate>Tue, 15 Jul 2008 08:09:01 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/07/15/how-i-got-started-in-software-development.aspx#feedback</comments>
            <slash:comments>180</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/93416.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/93416.aspx</trackback:ping>
        </item>
        <item>
            <title>End tag required for HTML SCRIPT element</title>
            <category>Carillon .NET</category>
            <category>Varie</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/07/14/end-tag-required-for-html-script-element.aspx</link>
            <description>&lt;p&gt;Magari lo sanno tutti ma io ci ho perso mezz'ora per capire dove sta l'errore:&lt;/p&gt;
&lt;p&gt;&amp;lt;script type="text/javascript" src="foo.js"&lt;strong&gt;&lt;font color="#ff0000"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;e&lt;/p&gt;
&lt;p&gt;&amp;lt;script type="text/javascript" src="foo.js" &lt;strong&gt;&lt;font color="#ff0000"&gt;/&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;non sono uguali! &lt;em&gt;Su IE il tag esplicito di chiusura&lt;/em&gt; (la prima variante) &lt;em&gt;e' obbligatorio&lt;/em&gt;, mentre Firefox accetta tutte e due le varianti...&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/93398.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/07/14/end-tag-required-for-html-script-element.aspx</guid>
            <pubDate>Mon, 14 Jul 2008 03:23:53 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/07/14/end-tag-required-for-html-script-element.aspx#feedback</comments>
            <slash:comments>49</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/93398.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/93398.aspx</trackback:ping>
        </item>
        <item>
            <title>I vostri migliori post, da oggi anche in rumeno</title>
            <category>Adrian</category>
            <category>Varie</category>
            <category>Voi</category>
            <category>GUISA</category>
            <category>RONUA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/06/05/i-vostri-migliori-post-da-oggi-anche-in-rumeno.aspx</link>
            <description>&lt;p&gt;Oggi ho aperto il mio primo blog in rumeno, a &lt;a href="http://ronua.ro/CS/blogs/adrianf/default.aspx"&gt;questo indirizzo&lt;/a&gt; su RONUA. Per cominciare, ho deciso di tradurre in rumeno i post piu' interessanti che trovero' nelle varie &lt;a href="http://www.microsoft.com/italy/communities/elenco.mspx"&gt;community italiane&lt;/a&gt;, per far conoscere ai miei connazionali il grande spirito che ho conosciuto e mi avete regalato negli anni passati con voi. Ogni post sara' fornito ovviamente dal link al post originale, spero di avere il vostro consenso per la traduzione. E chissa', magari si stringono amicizie nuove, etc. Il blog su UGI non finisce qui, salvo completa mancanza di ispirazione :-)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92948.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/06/05/i-vostri-migliori-post-da-oggi-anche-in-rumeno.aspx</guid>
            <pubDate>Thu, 05 Jun 2008 23:32:14 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/06/05/i-vostri-migliori-post-da-oggi-anche-in-rumeno.aspx#feedback</comments>
            <slash:comments>108</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92948.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92948.aspx</trackback:ping>
        </item>
        <item>
            <title>Lazy loading in una riga</title>
            <category>Pattern Dappertutto</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/05/28/lazy-loading-in-una-riga.aspx</link>
            <description>&lt;p&gt;Carino &lt;a href="http://realfiction.net/?q=node/157"&gt;questo&lt;/a&gt; modo proposto da &lt;a href="http://realfiction.net/"&gt;Frank Quednau&lt;/a&gt; di &lt;a href="http://blogs.ugidotnet.org/Markino/archive/2006/01/05/32476.aspx"&gt;implementare il lazy loading&lt;/a&gt; utilizzando l'operatore di null coalescing (ECMA-334, 14.12) e il fatto che &lt;em&gt;il risultato&lt;/em&gt; di un'assegnazione e' il valore assegnato all'operando sinistro (ECMA-334, 14.14.1):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;internal sealed class&lt;/strong&gt; PersonProxy : Person&lt;br /&gt;
{&lt;br /&gt;
    &lt;strong&gt;public override&lt;/strong&gt; AddressCollection Addresses&lt;br /&gt;
    {&lt;br /&gt;
        &lt;strong&gt;get&lt;/strong&gt;&lt;br /&gt;
        {&lt;br /&gt;
            &lt;strong&gt;return base&lt;/strong&gt;.Addresses ?? (&lt;strong&gt;base&lt;/strong&gt;.Addresses = &lt;strong&gt;new&lt;/strong&gt; PersonDataMapper().GetAddressesByCode(&lt;strong&gt;this&lt;/strong&gt;.Code));&lt;br /&gt;
        }&lt;br /&gt;
        &lt;strong&gt;set&lt;/strong&gt;&lt;br /&gt;
        {&lt;br /&gt;
            &lt;strong&gt;base&lt;/strong&gt;.Addresses = &lt;strong&gt;value&lt;/strong&gt;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;A me sembra molto espressivo.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92860.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/05/28/lazy-loading-in-una-riga.aspx</guid>
            <pubDate>Wed, 28 May 2008 23:04:38 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/05/28/lazy-loading-in-una-riga.aspx#feedback</comments>
            <slash:comments>108</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92860.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92860.aspx</trackback:ping>
        </item>
        <item>
            <title>Quiz Sharp #70</title>
            <category>Quiz Sharp</category>
            <category>Test Sharp</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/05/18/quiz-sharp-70.aspx</link>
            <description>&lt;p&gt;Senza utilizzare stringhe, caratteri, numeri (&lt;em&gt;literals&lt;/em&gt;) o file esterni, si chiede di scrivere un programma in C# 3.0 che stampi a console la definizione compilabile di un tipo non vuoto.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92726.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/05/18/quiz-sharp-70.aspx</guid>
            <pubDate>Sun, 18 May 2008 07:22:45 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/05/18/quiz-sharp-70.aspx#feedback</comments>
            <slash:comments>105</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92726.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92726.aspx</trackback:ping>
        </item>
        <item>
            <title>Best practice Path.Combine</title>
            <category>Carillon .NET</category>
            <category>Pattern Dappertutto</category>
            <category>Bugs?</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/05/04/best-practice-path.combine.aspx</link>
            <description>&lt;p&gt;Se vogliamo che il nostro codice giri anche su Mono, dobbiamo utilizzare:&lt;/p&gt;
&lt;p&gt;Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "aaa.bbb")&lt;/p&gt;
&lt;p&gt;al posto di:&lt;/p&gt;
&lt;p&gt;AppDomain.CurrentDomain.BaseDirectory + "aaa.bbb"&lt;/p&gt;
&lt;p&gt;perche' su Mono, &lt;em&gt;BaseDirectory&lt;/em&gt; ritorna una stringa che non finisce in &lt;em&gt;Path.DirectorySeparatorChar&lt;/em&gt;, mentre su CLR si'. E questo va anche in generale, quando costruiamo il path da piu' pezzi, non solo nel caso della &lt;em&gt;BaseDirectory&lt;/em&gt;. Per esempio, chi utilizza &lt;a href="http://www.fyireporting.com/"&gt;fyiReporting RDL Project&lt;/a&gt; su Mono, dovrebbe modificare la riga 81 nel file Runtime/RdlEngineConfig.cs nei sorgenti del progetto e ricompilare, da:&lt;/p&gt;
&lt;p&gt;file = dir + "RdlEngineConfig.xml";&lt;/p&gt;
&lt;p&gt;a:&lt;/p&gt;
&lt;p&gt;file = Path.Combine(dir, "RdlEngineConfig.xml");&lt;/p&gt;
&lt;p&gt;perche' la stringa &lt;em&gt;dir&lt;/em&gt;, per come e' stata costruita, su CLR finisce in &lt;em&gt;Path.DirectorySeparatorChar&lt;/em&gt;, mentre su Mono no. In &lt;a href="http://www.amazon.com/Framework-Standard-Library-Annotated-Reference/dp/0321154894/"&gt;SLAR 1&lt;/a&gt; alla pagina 360, &lt;a href="http://joelmarcey.com/"&gt;Joel Marcey&lt;/a&gt; aggiunge questa nota sulla storia del metodo &lt;em&gt;Combine&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;The&lt;/em&gt; Combine &lt;em&gt;method had an interesting ride in the standardization process. It was originally part of the &lt;/em&gt;Path &lt;em&gt;class, then removed because it was thought to be too platform-specific, then added back because it was decided it was not any more platform-specific than any of the other methods in this class.&lt;/em&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92512.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/05/04/best-practice-path.combine.aspx</guid>
            <pubDate>Sun, 04 May 2008 22:44:32 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/05/04/best-practice-path.combine.aspx#feedback</comments>
            <slash:comments>95</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92512.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92512.aspx</trackback:ping>
        </item>
        <item>
            <title>Un'API generico a provider per i metadata dei vari ORM</title>
            <category>Carillon .NET</category>
            <category>Pattern Dappertutto</category>
            <category>VSX</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/05/03/unapi-generico-a-provider-per-i-metadata-dei-vari-orm.aspx</link>
            <description>&lt;p&gt;Via &lt;a href="http://weblogs.asp.net/fbouma/archive/2008/05/01/dynamic-data-and-3rd-party-o-r-mappers-is-a-fact.aspx"&gt;questo post&lt;/a&gt; di &lt;a href="http://weblogs.asp.net/fbouma/"&gt;Frans Bouma&lt;/a&gt; ho scoperto sotto il namespace &lt;strong&gt;System.Web.DynamicData.ModelProviders&lt;/strong&gt; dell'assembly &lt;strong&gt;System.Web.DynamicData.dll&lt;/strong&gt; che arriva con l'ultima release della preview di &lt;a href="http://code.msdn.microsoft.com/dynamicdata"&gt;ASP.NET Dynamic Data&lt;/a&gt;, un'API generico composto da 4 provider per i metadata dei vari ORM (non solo Microsoft): &lt;strong&gt;DataModelProvider&lt;/strong&gt;, &lt;strong&gt;TableProvider&lt;/strong&gt;, &lt;strong&gt;ColumnProvider&lt;/strong&gt; ed &lt;strong&gt;AssociationProvider&lt;/strong&gt;. Questo unifica in buona misura le varie API che espongono i metadata degli ORM, per esempio &lt;strong&gt;MetaTable&lt;/strong&gt;, &lt;strong&gt;MetaDataMember&lt;/strong&gt;, &lt;strong&gt;MetaAssociation&lt;/strong&gt; nel caso di LINQ to SQL, oppure quella piu' complessa dell'Entity Framework: &lt;strong&gt;EntitySet&lt;/strong&gt;, &lt;strong&gt;EdmMember&lt;/strong&gt;, &lt;strong&gt;NavigationProperty&lt;/strong&gt;, etc. Frans ha gia' scritto un &lt;em&gt;model provider&lt;/em&gt; per il suo &lt;a href="http://www.llblgen.com/"&gt;LLBLGen Pro&lt;/a&gt;, sarebbe bellissimo averne uno anche per &lt;a href="http://www.nhibernate.org/"&gt;NHibernate&lt;/a&gt;. E poi mi piacerebbe in futuro vedere questa API staccata dal ASP.NET Dynamics Data con cui non dovrebbe avere tanto in comune.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92497.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/05/03/unapi-generico-a-provider-per-i-metadata-dei-vari-orm.aspx</guid>
            <pubDate>Sat, 03 May 2008 02:53:11 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/05/03/unapi-generico-a-provider-per-i-metadata-dei-vari-orm.aspx#feedback</comments>
            <slash:comments>104</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92497.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92497.aspx</trackback:ping>
        </item>
        <item>
            <title>RONUA Galati</title>
            <category>Adrian</category>
            <category>Varie</category>
            <category>RONUA</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/04/16/92253.aspx</link>
            <description>&lt;p&gt;E' dall'anno scorso, da quando sono tornato a casa in Romania, che sogno la costituzione di una filiale locale dello user group rumeno di .NET, &lt;a href="http://ronua.ro/CS/"&gt;RONUA&lt;/a&gt;. Ed ecco che oggi, il presidente di RONUA, &lt;a href="http://www.aurelian.ro/"&gt;Aurelian Popa&lt;/a&gt;, mi incarica con l'organizzazione della &lt;a href="http://ronua.ro/CS/forums/130/ShowForum.aspx"&gt;nuova community&lt;/a&gt;. Lo spazio per gli workshop sara' messo a disposizione grazie all'entusiasmo e all'appoggio di Catalin Arama nell'attrezzatissima sala conferenze del Parco Software di Galati. Una settantina di libri personali li metto a disposizione io per creare una piccola libreria .NET (nella stanza 408 dove &lt;a href="http://www.nexida.com/"&gt;lavoro&lt;/a&gt; presso lo stesso Parco Software). Sto pensando che potrei trovare degli sponsor per pagare alloggio e trasporto fino in Romania se qualcuno di voi avra' voglia di tenere una sessione .NET qui in Romania, nella mia &lt;a href="http://en.wikipedia.org/wiki/Gala%C5%A3i"&gt;citta'&lt;/a&gt; sul Danubio, gemellata con Ancona, Brindisi, Jesi e Salerno :-) Vi terro' aggiornati sugli sviluppi della nuova community.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92253.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/04/16/92253.aspx</guid>
            <pubDate>Wed, 16 Apr 2008 21:49:22 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/04/16/92253.aspx#feedback</comments>
            <slash:comments>85</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92253.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92253.aspx</trackback:ping>
        </item>
        <item>
            <title>Quiz Sharp #69</title>
            <category>Quiz Sharp</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/04/08/92115.aspx</link>
            <description>Scrivete una proprieta' in cui il body del getter non contenga &lt;strong&gt;return&lt;/strong&gt; o &lt;strong&gt;throw&lt;/strong&gt;.&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/92115.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/04/08/92115.aspx</guid>
            <pubDate>Tue, 08 Apr 2008 09:22:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/04/08/92115.aspx#feedback</comments>
            <slash:comments>105</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/92115.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/92115.aspx</trackback:ping>
        </item>
        <item>
            <title>Brian Grunkemeyer sulla storia del TypeCode e dell'interfaccia IConvertible</title>
            <category>Un po' di storia</category>
            <category>Carillon .NET</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/03/17/91755.aspx</link>
            <description>&lt;p&gt;Visto l'interesse che ha suscitato &lt;a href="http://blogs.ugidotnet.org/adrian/archive/2008/03/12/91669.aspx"&gt;l'ultimo post&lt;/a&gt;, ho scritto a &lt;a href="http://blogs.msdn.com/brada"&gt;Brad Abrams&lt;/a&gt; chiedendo conferma per la mia supposizione e dettagli sulla storia dell'interfaccia IValue, lui mi risponde subito indirizzandomi a &lt;a href="http://blogs.msdn.com/bclteam/"&gt;Brian Grunkemeyer&lt;/a&gt; e stamattina trovo nella mia casella email, scritto da Brian, questo splendido pezzo della storia di .NET:&lt;/p&gt; &lt;blockquote&gt;
&lt;p&gt;This is a good question. I was digging through the history of this file to see if I could figure out what happened, and it’s not clear. We’ve had this “hole” in the TypeCode enum since October of 2000, and I can’t find an older set of bits. But, I’m sure that comment in IConvertible is right – this used to be TimeSpan. For TimeSpan, it’s possible we thought it would be interesting for a while, then we realized that frankly not that many people need to convert a Decimal to a TimeSpan, then removed it.&lt;/p&gt;
&lt;p&gt;You might ask why we didn’t “fix” the enum when we removed whichever of these values we had originally added. It turns out that whenever we have a breaking change internally, we need to recompile all the code that might possibly depend on the removed or changed public surface area. For us, that would mean rebuilding everything that might have referred to TypeCode.String, whose value would have changed from 18 to 17. While we do go through that process internally in DevDiv, it is costly &amp;amp; painful for us. Back then with some underdeveloped internal processes, it usually took 2 weeks, then even longer if your change requires a rebuilt compiler to be checked in as a new “safe” build of a compiler. Back in 2000, we were racing to ship as soon as possible (even though we didn’t ship for another year or two), so we wanted to limit churn like this. It’s sometimes easier to not deal with that level of churn in the product.&lt;/p&gt;
&lt;p&gt;For your other question about IValue, that was the original name for IConvertible. We exposed a Variant type to match OLE Automation’s VARIANT type on the native side, for COM Interop reasons. The VB team actually was thinking that Variant should be conceptually the root of their object hierarchy (at least in terms of how types were exposed in VB 7), but that seemed a little silly. Fortunately, Anders Hejlsberg convinced them to use Object instead and we’d expose IConvertible on the base data types to allow VB users to easily change from one data type to another. So we marked Variant internal &amp;amp; we only use it in a handful of places internally for COM-related functionality.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Grazie ragazzi!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/91755.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/03/17/91755.aspx</guid>
            <pubDate>Mon, 17 Mar 2008 19:24:33 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/03/17/91755.aspx#feedback</comments>
            <slash:comments>165</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/91755.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/91755.aspx</trackback:ping>
        </item>
        <item>
            <title>Sull'enum TypeCode e sull'interfaccia fantoma IValue</title>
            <category>Un po' di storia</category>
            <category>Carillon .NET</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/03/12/91669.aspx</link>
            <description>&lt;p&gt;Oggi &lt;a href="http://blogs.ugidotnet.org/raffaele/"&gt;Raf&lt;/a&gt; sul messenger mi chiede se conosco un modo piu' diretto per capire se un tipo sia &lt;a href="http://msdn2.microsoft.com/en-us/library/system.type.isprimitive.aspx"&gt;primitivo&lt;/a&gt; oppure &lt;strong&gt;String&lt;/strong&gt; o &lt;strong&gt;DateTime&lt;/strong&gt; (questo per evitare degli &lt;em&gt;if&lt;/em&gt;...). Pensandoci un po', arrivo a questa soluzione:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(int)Type.GetTypeCode(type) &amp;gt; 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;dove &lt;em&gt;type&lt;/em&gt; e' il tipo in causa. Lui prova e mi dice che va benissimo mentre io gia' sto pensando di bloggare questa riga di codice :-) L'enum &lt;a href="http://msdn2.microsoft.com/en-us/library/system.typecode.aspx"&gt;TypeCode&lt;/a&gt; infatti, contiene nella sua lista di valori maggiori a 2 tutti i 12 tipi &lt;strong&gt;primitivi&lt;/strong&gt; piu' il &lt;strong&gt;DateTime&lt;/strong&gt; e lo &lt;strong&gt;String&lt;/strong&gt;, proprio quello che voleva Raf. A questo punto gli chiedo come denominare questa categoria di tipi? Primitivi non sono, &lt;em&gt;built-in&lt;/em&gt; (&lt;a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm"&gt;ECMA-335&lt;/a&gt;, &lt;strong&gt;Partition I&lt;/strong&gt;, &lt;strong&gt;8.2.2&lt;/strong&gt;) nemmeno, boh... &lt;em&gt;fondamentali&lt;/em&gt;? Qui Raf si ricorda che "&lt;em&gt;in una alpha erano refclass adesso non piu'&lt;/em&gt;". E poi fa questa osservazione giusta:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Raffaele MVP says (4:45 PM):&lt;/strong&gt;&lt;br /&gt;
io comunque metterei &amp;gt;2 e &amp;lt;18&lt;br /&gt;
non si sa mai che aggiungano altre enum in futuro&lt;br /&gt;
&lt;strong&gt;&amp;lt;drian says (4:46 PM):&lt;/strong&gt;&lt;br /&gt;
hai visto che manca 17?&lt;br /&gt;
&lt;strong&gt;Raffaele MVP says (4:46 PM):&lt;/strong&gt;&lt;br /&gt;
non ci ho fatto caso&lt;br /&gt;
&lt;strong&gt;&amp;lt;drian says (4:47 PM):&lt;/strong&gt;&lt;br /&gt;
in questo caso, dovrei fare anche != 17, perche' il 17 per adesso manca&lt;br /&gt;
e diventa un po' una schifezza&lt;br /&gt;
&lt;strong&gt;Raffaele MVP says (4:48 PM):&lt;/strong&gt;&lt;br /&gt;
a questo punto puoi legarlo ad una versione specifica di quell'assembly ma poi non funziona più automaticamente&lt;br /&gt;
&lt;strong&gt;Raffaele MVP says (4:49 PM):&lt;/strong&gt;&lt;br /&gt;
o ancora metterlo typesafe&lt;br /&gt;
&amp;gt;=boolean &amp;lt;=string&lt;br /&gt;
ma c'è sempre il 17 a rompere &lt;/p&gt;
&lt;p&gt;Spulciando poi i sorgenti di &lt;a href="http://msdn.microsoft.com/net/sscli/"&gt;Rotor&lt;/a&gt;, trovo questo commento nel file dell'interfaccia &lt;strong&gt;System.IConvertible&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#339966"&gt;// The IValue interface represents an object that contains a value. This&lt;br /&gt;
// interface is implemented by the following types in the System namespace:&lt;br /&gt;
// &lt;strong&gt;Boolean&lt;/strong&gt;, &lt;strong&gt;Char&lt;/strong&gt;, &lt;strong&gt;SByte&lt;/strong&gt;, &lt;strong&gt;Byte&lt;/strong&gt;, &lt;strong&gt;Int16&lt;/strong&gt;, &lt;strong&gt;UInt16&lt;/strong&gt;, &lt;strong&gt;Int32&lt;/strong&gt;, &lt;strong&gt;UInt32&lt;/strong&gt;, &lt;strong&gt;Int64&lt;/strong&gt;, &lt;strong&gt;UInt64&lt;/strong&gt;,&lt;br /&gt;
// &lt;strong&gt;Single&lt;/strong&gt;, &lt;strong&gt;Double&lt;/strong&gt;, &lt;strong&gt;Decimal&lt;/strong&gt;, &lt;strong&gt;DateTime&lt;/strong&gt;, &lt;font color="#ff0000"&gt;&lt;strong&gt;TimeSpan&lt;/strong&gt;&lt;/font&gt;, and &lt;strong&gt;String&lt;/strong&gt;. The interface may&lt;br /&gt;
// be implemented by other types that are to be considered values.&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;Cosa notate? Esattamente l'elenco di tipi che interessava Raf, nell'ordine di &lt;strong&gt;TypeCode&lt;/strong&gt; e... in piu' il &lt;strong&gt;&lt;font color="#ff0000"&gt;TimeSpan&lt;/font&gt;&lt;/strong&gt; tra il &lt;strong&gt;DateTime&lt;/strong&gt; = 16 e lo &lt;strong&gt;String&lt;/strong&gt; = 18, cioe' corrispondente proprio al &lt;strong&gt;&lt;font color="#ff0000"&gt;17&lt;/font&gt;&lt;/strong&gt; che mancava! Questa interfaccia, &lt;strong&gt;IValue&lt;/strong&gt;, non esiste piu' nel framework ma alcuni commenti su varie implementazioni del metodo &lt;strong&gt;GetTypeCode()&lt;/strong&gt; sono rimasti come:&lt;/p&gt;
&lt;p&gt;&lt;font color="#339966"&gt;// IValue implementation&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;perche', probabilmente, conteneva questo metodo &lt;strong&gt;GetTypeCode&lt;/strong&gt;. Questa ormai e' "&lt;em&gt;archeologia&lt;/em&gt;" di .NET! :-) E non e' tutto. Guardate nei commenti dell'enum &lt;strong&gt;System.TypeCode&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;font color="#339966"&gt;// Note that when an object has a given TypeCode, there is no guarantee that&lt;br /&gt;
// the object is an instance of the corresponding System.XXX value class. For&lt;br /&gt;
// example, &lt;strong&gt;an object with the type code TypeCode.Int32 might actually be an&lt;/strong&gt;&lt;br /&gt;
// &lt;strong&gt;instance of a nullable 32-bit integer type&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;Questo comportamento non e' piu' vero, perche' il valore di &lt;strong&gt;Type.GetTypeCode(typeof(&lt;font color="#ff0000"&gt;int?&lt;/font&gt;))&lt;/strong&gt; e' &lt;strong&gt;TypeCode.&lt;font color="#ff0000"&gt;Object&lt;/font&gt;&lt;/strong&gt;, mentre il valore di &lt;strong&gt;Type.GetTypeCode(typeof(int))&lt;/strong&gt; e' &lt;strong&gt;TypeCode.Int32&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Dopo una discussione tecnica con Raf, direi che sia impossibile non cliccare "&lt;strong&gt;New Post&lt;/strong&gt;"! :-)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/91669.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/03/12/91669.aspx</guid>
            <pubDate>Wed, 12 Mar 2008 06:49:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/03/12/91669.aspx#feedback</comments>
            <slash:comments>113</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/91669.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/91669.aspx</trackback:ping>
        </item>
        <item>
            <title>Un DSL per i mapping O/R?</title>
            <category>VSX</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/03/04/91491.aspx</link>
            <description>Guardando in questi giorni &lt;a href="http://tools.hibernate.org/"&gt;Hibernate Tools&lt;/a&gt;, mi e' piaciuta molto l'idea che sta alla base della la sua architettura: il mapping viene rappresentato da un'istanza del &lt;em&gt;metamodello&lt;/em&gt; di Hibernate (classe &lt;strong&gt;org.hibernate.cfg.Configuration&lt;/strong&gt; o derivate, equivalente di &lt;strong&gt;NHibernate.Cfg.Configuration&lt;/strong&gt;) e da questo &lt;em&gt;modello&lt;/em&gt; vengono generati i vari artefatti tramite cosiddetti &lt;em&gt;exporter&lt;/em&gt; (per esempio &lt;strong&gt;hbm2java&lt;/strong&gt;, &lt;strong&gt;hbm2ddl&lt;/strong&gt;, &lt;strong&gt;hbm2hbmxml&lt;/strong&gt;, etc), che non sono altro che classi che derivano da &lt;strong&gt;org.hibernate.tool.hbm2x.GenericExporter&lt;/strong&gt; e che, insieme a dei template FreeMarker, definiscono in modo straordinariamente flessibile la parte di generazione codice/artefatti. Quindi, al posto della &lt;strong&gt;PO&lt;font color="#ff0000"&gt;J&lt;/font&gt;OExporter&lt;/strong&gt; potremmo avere, perche' no, anche una &lt;strong&gt;PO&lt;font color="#ff0000"&gt;C&lt;/font&gt;OExporter&lt;/strong&gt; per il domain model C#. Sarebbe interessante replicare in NHibernate un'infrastruttura simile, soprattutto adesso quando &lt;a href="http://blogs.msdn.com/garethj/archive/2008/01/31/fun-use-of-t4-to-generate-strongly-typed-web-navigation.aspx"&gt;la parte di generazione codice via template T4 si trova gia' inclusa in VS2008&lt;/a&gt;. E poi, se tutto questo viene generato da un'istanza di &lt;strong&gt;Configuration&lt;/strong&gt;, ci vuole solo un passo per creare un DSL grafico (con l'immenso aiuto di &lt;a href="http://msdn2.microsoft.com/en-us/library/bb126235.aspx"&gt;DSL Tools&lt;/a&gt;) che rappresenti il mapping (N)Hibernate. E un po' quello che hanno fatto in Java con, per esempio, &lt;a href="http://www.exadel.com/exadelstudio/help/#orm2"&gt;Exadel Studio Pro&lt;/a&gt;, diventato adesso parte di &lt;a href="http://www.jboss.com/products/devstudio"&gt;Jboss Developer Studio&lt;/a&gt;. Ma poi, i concetti di mapping sono quasi independenti dagli engine e quindi, perche' non pensare a un tool visuale capace di risolvere la parte mapping per piu' ORM?&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/91491.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/03/04/91491.aspx</guid>
            <pubDate>Tue, 04 Mar 2008 00:50:22 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/03/04/91491.aspx#feedback</comments>
            <slash:comments>111</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/91491.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/91491.aspx</trackback:ping>
        </item>
        <item>
            <title>L'OR Designer e' stato scritto con DSL Tools</title>
            <category>Carillon .NET</category>
            <category>VSX</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2008/01/21/90790.aspx</link>
            <description>Lo sapevate che l'Object Relational Designer e la parte di generazione di codice per le classi LINQ to SQL in VS2008 sono state scritte utilizzando &lt;a href="http://www.microsoft.com/vstudio/dsltools"&gt;Microsoft DSL Tools&lt;/a&gt; che fa parte di &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en"&gt;VS SDK&lt;/a&gt;? - l'ho scoperto tramite il Reflector mentre &lt;a href="http://www.domainspecificdevelopment.com/"&gt;studiavo&lt;/a&gt; l'API di questo potentissimo framework che e' DSL Tools: tra le classi che derivano da &lt;strong&gt;Microsoft.VisualStudio.Modeling.ModelElement&lt;/strong&gt;, classe fondamentale per la rappresentazione degli elementi di un domain model, si trovano anche le classi internal dell'OR Designer. Questo dovrebbe dare piu' fiduccia a chi inizia o valuta di &lt;a href="http://msdn.com/vsx"&gt;estendere Visual Studio&lt;/a&gt; per un certo DSL utilizzando DSL Tools! - parti complesse del VS stesso iniziano ad essere sviluppate con questo framework.&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/90790.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2008/01/21/90790.aspx</guid>
            <pubDate>Mon, 21 Jan 2008 03:29:06 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2008/01/21/90790.aspx#feedback</comments>
            <slash:comments>225</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/90790.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/90790.aspx</trackback:ping>
        </item>
        <item>
            <title>code and solutions (and a resume)</title>
            <category>Quiz Sharp</category>
            <category>Adrian</category>
            <link>http://blogs.ugidotnet.org/adrian/archive/2007/12/11/90219.aspx</link>
            <description>&lt;p&gt;Via &lt;a href="http://infoarena.ro/blog/olimpicul-de-la-facebook"&gt;questo post&lt;/a&gt; del mio connazionale &lt;a href="http://infoarena.ro/blog"&gt;Cosmin Negruseri&lt;/a&gt;, sono venuto a conoscenza di questa idea tanto bella quanto semplice ed efficace: proprio nella &lt;a href="http://www.facebook.com/jobs/index.php"&gt;pagina Jobs&lt;/a&gt; di Facebook c'e' una &lt;a href="http://www.facebook.com/jobs_puzzles/"&gt;sezione di programming puzzles&lt;/a&gt; belli tosti, provateli per credere. Ogni problema finisce coll'invito:&lt;/p&gt;
&lt;blockquote&gt;Please send your code and solutions (and a resume) to { (0xFACEB00C &amp;gt;&amp;gt; 2) in decimal format } @ facebook.com&lt;/blockquote&gt;
&lt;p&gt;Notate "&lt;em&gt;and a resume&lt;/em&gt;" messo tra parentesi, per non dire dell'indirizzo email veramente originale ;) Complimenti!&lt;/p&gt;
&lt;p&gt;(Oggi faccio gli 'anta ;) Non si scherza piu'!)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/adrian/aggbug/90219.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Adrian Florea</dc:creator>
            <guid>http://blogs.ugidotnet.org/adrian/archive/2007/12/11/90219.aspx</guid>
            <pubDate>Tue, 11 Dec 2007 02:38:41 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/adrian/archive/2007/12/11/90219.aspx#feedback</comments>
            <slash:comments>272</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/adrian/comments/commentRss/90219.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/adrian/services/trackbacks/90219.aspx</trackback:ping>
        </item>
    </channel>
</rss>