.Net 2.0 http://blogs.ugidotnet.org/Crad/category/.Net 2.0.aspx Una raccolda di post sul nuovo framework di casa Microsoft it-IT Marco De Sanctis Subtext Version 2.6.0.0 Costanti pubbliche? AHIAHIAHI http://blogs.ugidotnet.org/Crad/archive/2008/01/31/costanti-pubbliche-ahiahiahi.aspx <p>Premessa: ciò che scriverò è una banalità, ma secondo me in tanti non ne sono al corrente o non ci pensano. Di cosa parlo? Di cose del genere:</p> <p> </p><div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:23264bd7-da92-41a5-ba6e-3c35ed74d666" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width:100%;;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">const</span><span style="color: #000000;"> </span><span style="color: #0000FF;">int</span><span style="color: #000000;"> MyConst </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">10</span><span style="color: #000000;">;</span></div></pre></div> <p>Il danno potenziale che le <strong>costanti pubbliche </strong>possono creare alla stabilità delle nostre applicazioni è enorme.</p> <p>Why? Perché le costanti non sono altro che <strong>placeholder</strong> risolti <strong>in fase di compilazione</strong>. Questo vuol dire che, finché non si ricompila, il valore non viene aggiornato.</p> <p>Implicazioni?</p> <ol> <li>Assembly A che definisce una costante MyConst = 10</li> <li>Assembly B che referenzia Assembly A e ne utilizza MyConst</li> <li>Assembly A cambia MyConst a 15</li> <li><strong>Finché non ricompilo Assembly B</strong>, questo continua a vedere MyConst = 10</li></ol> <p>Ogni tanto mi capita di trovare righe di codice simili a quella in alto, con seguenti bug "strani" e dolori per scovarli. Ecco perché cerco sempre di abituare i junior che lavorano con me alla regola:</p> <blockquote> <p><em><strong>Le costanti devono essere sempre private o internal. Se serve esporle allora si utilizzino dei field readonly</strong>.</em></p></blockquote> <p>Augh!</p> <p> </p><div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e23a99d5-f626-4d0a-a547-d6a97a6dad5b" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Costanti" rel="tag">Costanti</a>, <a href="http://technorati.com/tags/Readonly%20field" rel="tag">Readonly field</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/90956.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2008/01/31/costanti-pubbliche-ahiahiahi.aspx Thu, 31 Jan 2008 16:15:13 GMT http://blogs.ugidotnet.org/Crad/archive/2008/01/31/costanti-pubbliche-ahiahiahi.aspx#feedback 6 http://blogs.ugidotnet.org/Crad/comments/commentRss/90956.aspx Multithreading su Aspitalia.com http://blogs.ugidotnet.org/Crad/archive/2007/10/16/multithreading-su-aspitalia.com.aspx <p>Dopo <a href="http://www.aspitalia.com/articoli/architettura/nhibernate.aspx">il mio precedente lavoro</a> su <a href="http://www.nhibernate.org">NHibernate</a>, oggi <a href="http://www.aspitalia.com">Aspitalia.com</a> ha pubblicato <a href="http://www.aspitalia.com/articoli/asp.net2/multi-threading.aspx">un mio nuovo articolo sul multithreading</a>.</p> <p>Grazie mille a <a href="http://blogs.aspitalia.com/daniele/">Daniele</a> per lo spazio che mi ha concesso e a <a href="http://blogs.aspitalia.com/rickyvr/">Ricky</a> per la pazienza nel correggerlo!</p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:e17002a9-ea13-427f-b53c-4973f297e17b" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Articoli" rel="tag">Articoli</a>, <a href="http://technorati.com/tags/Multithreading" rel="tag">Multithreading</a>, <a href="http://technorati.com/tags/ASP.NET" rel="tag">ASP.NET</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/88969.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/10/16/multithreading-su-aspitalia.com.aspx Tue, 16 Oct 2007 11:04:25 GMT http://blogs.ugidotnet.org/Crad/archive/2007/10/16/multithreading-su-aspitalia.com.aspx#feedback 4 http://blogs.ugidotnet.org/Crad/comments/commentRss/88969.aspx BlogManager cambia nome e diviene open source http://blogs.ugidotnet.org/Crad/archive/2007/10/08/blogmanager-cambia-nome-e-diviene-open-source.aspx <p>Chi l'avrebbe mai detto che <a href="http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx">un programmino</a> fatto in un weekend per utilizzo personale riscuotesse tutto questo successo... L'hanno provato <a href="http://codeclimber.net.nz">Simone</a> e addirittura <a href="http://haacked.com/">Phil Haack</a>, e entrambi ne hanno <a href="http://codeclimber.net.nz/archive/2007/09/29/manage-categories-and-tags-of-your-blog.aspx">parlato</a> <a href="http://haacked.com/archive/2007/09/29/bulk-tagging-and-category-management-for-blogs.aspx">benone</a> nei loro blog, convincendomi a farlo diventare un progetto open source a cui si sono aggiunti come committer!!</p> <p>Detto, fatto, lo trovate su <a href="http://code.google.com/">Google Code</a>, rinominato per l'occasione come <a href="http://code.google.com/p/blogcommander/">Blog Commander</a> (BlogManager era già utilizzato e faceva anche un filo schifo!!). Chi vuole apportare migliorie, mi droppi una mail!</p> <p>Ciao!</p> <p> </p><div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:79974142-b9b3-46c3-9239-125e4026fe1d" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Blog%20Commander" rel="tag">Blog Commander</a>, <a href="http://technorati.com/tags/Tools" rel="tag">Tools</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/88802.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/10/08/blogmanager-cambia-nome-e-diviene-open-source.aspx Mon, 08 Oct 2007 12:05:46 GMT http://blogs.ugidotnet.org/Crad/archive/2007/10/08/blogmanager-cambia-nome-e-diviene-open-source.aspx#feedback 2 http://blogs.ugidotnet.org/Crad/comments/commentRss/88802.aspx Volete organizzare tutti i Technorati Tags in pochi minuti? http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx <p>Bene, allora la nuova versione di Blog Manager (il nome è uno schifo, lo so) fa per voi! <a href="http://blogs.ugidotnet.org/Crad/archive/2007/09/13/un-semplice-tool-per-gestire-le-categorie-sul-blog.aspx">Qualche post fa</a>, se ricordate, vi ho raccontato di un piccolo tool realizzato dal sottoscritto che, grazie ad un'interfaccia simil-Explorer, consente di riorganizzare velocemente tutte le categorie del blog facendo uso dei <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog API</a>.</p> <p>Mi è sembrato così comodo che, dopo essere stato lì a compiacermi come un fesso (e senza cambiare le categorie), mi son detto: "ma perchè non fare lo stesso anche per i <a href="http://technorati.com/tag/">Technorati Tags</a>, che <a href="http://blogs.ugidotnet.org/piyo/archive/2007/08/14/87813.aspx">son così pallosi da inserire nei post vecchi</a> che ne sono sprovvisti? In questo modo potrei sfoggiare una rigogliosa Tag Cloud e il mondo sarebbe finalmente mio!!"</p> <p>Da questo vero e proprio documento dei requisiti, ho partorito la versione 1.1, che offre uno stupendo e alquanto esplicativo Tab</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image013.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image012.png" width="240" border="0" /></a> </p> <p>Come funziona? Selezioniamo nella toolbar il numero di post da scaricare e poi click sul pulsante Download.</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image0_thumb22.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="61" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image0_thumb21.png" width="240" border="0" /></a> </p> <p>A quel punto, grazie ad una serie di Regex, tutti i tag contenuti nei post scaricati verranno elencati nella CheckedListBox in basso, mentre i post appariranno nella ListView a destra, con tanto di Tooltip con il contenuto.</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image042.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image041.png" width="240" border="0" /></a> </p> <p>Ora basta selezionare un po' di post, e spuntare i checkbox relativi ai tag desiderati e poi premere il button Salva sulla Toolbar in alto.</p> <p><strong>Attenzione! </strong>A differenza delle categorie, la funzione dei Technorati Tags lavora per forza di cose tramite regex, perchè devono essere estratte dal body del post; pertanto potrebbe esserci un certo margine di errore nel match del pattern utilizzato. Io l'ho provato in diversi casi e lo stesso ha fatto il bravo <a href="http://blogs.ugidotnet.org/piyo/">Simone</a> <a href="http://codeclimber.net.nz/">Chiaretta</a> che mi ha dato una mano con i test, e non abbiamo evidenziato problemi. Sarebbe comunque opportuno effettuare un backup dei post per sicurezza. Per chi, come me, ha un blog su uno spazio condiviso e non ha accesso al database, ci sono due alternative</p> <ol> <li>Se si utilizza Subtext, esportare i post su BlogML tramite l'apposita funzione nella sezione Admin; </li><li> Utilizzare le funzionalità di Backup e Restore (quest'ultimo spero di no <img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" />) che si trovano in Blog Manager nel menu Tools.</li></ol> <p>Ovviamente, <a href="http://blogs.ugidotnet.org/Crad/archive/2007/09/13/un-semplice-tool-per-gestire-le-categorie-sul-blog.aspx">come per la volta precedente</a>, vale la seguente regola ferrea:</p> <blockquote> <p><em><font color="#ff0000">Questo software è rilasciato gratuitamente "AS IS". L'autore (cioé il sottoscritto) non è in alcun modo tenuto a fornire assistenza né tantomeno potrà essere ritenuto responsabile per eventuali problemi inerenti il suo utilizzo. In altre parole, se vi si sminkia (questa volta con la "K") totalmente il blog o il sistema operativo, se un hacker accede al vostro conto in banca, ecc.ecc., non bussate alla mia porta!</font></em></p></blockquote> <p><font color="#400040">E chi non è d'accordo, eviti di utilizzarlo. Cosa manca? Ah sì, i link: <a href="http://www.marcodesanctis.it/public/BlogManagerSolution.rar">qui per i sorgenti</a> (rigorosamente Visual Studio 2008 ma su .NET 2.0) e <a href="http://www.marcodesanctis.it/public/BlogManager.rar">qui l'eseguibile</a>.</font></p> <p><font color="#400040">Ogni feedback è prezioso come un litro di birra ghiacciata nel deserto.</font></p> <p><font color="#400040">Ciao <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /></font></p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:d5e8f891-3f12-4ceb-9c74-689584ba6836" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Tools" rel="tag">Tools</a>, <a href="http://technorati.com/tags/Blog%20Commander" rel="tag">Blog Commander</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/88536.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx Wed, 26 Sep 2007 02:12:21 GMT http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx#feedback 4 http://blogs.ugidotnet.org/Crad/comments/commentRss/88536.aspx XML-RPC e .NET http://blogs.ugidotnet.org/Crad/archive/2007/09/11/xml-rpc-e-.net.aspx <p>La scorsa domenica ho dedicato un paio d'ore di tempo alla realizzazione di un piccolo tool per la gestione delle categorie sul blog, di cui parlerò più approfonditamente tra un paio di giorni (appena riesco ad ultimarlo).</p> <p>Come sa chiunque utilizzi abitualmente Windows Live Writer, SubText, il vecchio .Text e altri blog engine espongono una serie di servizi remoti chiamati MetaWeblog API (<a href="http://www.xmlrpc.com/metaWeblogApi">qui</a> un piccolo white paper), raggiungibili all'URL</p> <blockquote> <p>http://<em>[blogurl]</em>/services/metablogapi.aspx</p></blockquote> <p>Il protocollo utilizzato è XML-RPC (<a href="http://www.xmlrpc.com/">qui</a> maggiori informazioni) ed è basato su uno standard di comunicazione estremamente più semplice dei Web Service tradizionali. Non trattandosi di SOAP, però, essi non sono direttamente utilizzabili all'interno di un'applicazione .NET tramite l'introduzione di una Web Reference.</p> <p>Come fare dunque? Beh, Windows Live Writer ha un suo provider interno di interfacciamento; io, per evitare di riscrivere tutto, ho usato <a href="http://www.xml-rpc.net/">XML-RPC.Net</a>, che è gratuito e funziona benone.</p> <p>Per utilizzarlo è sufficiente creare un'interfaccia con i metodi desiderati, che devono essere poi mappati sulle corrispondenti procedure esposte dal servizio tramite un custom attribute:</p> <p></p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:2ffc62d7-cee0-4622-b71f-1c7cb8a68839" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width: 100%; background-color: #eeeeee"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #999999">1</span> <span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> IMyService : IXmlRpcProxy </span><span style="color: #999999">2</span> <span style="color: #000000">{ </span><span style="color: #999999">3</span> <span style="color: #000000"> [XmlRpcMethod(</span><span style="color: #800000">"</span><span style="color: #800000">nomeDelMetodoRemoto</span><span style="color: #800000">"</span><span style="color: #000000">)] </span><span style="color: #999999">4</span> <span style="color: #000000"> </span><span style="color: #0000ff">string</span><span style="color: #000000"> RemoteMethodThatReturnsAString(</span><span style="color: #0000ff">int</span><span style="color: #000000"> parametro1, MyType parametro2); </span><span style="color: #999999">5</span> <span style="color: #000000">}</span></div></pre></div> <p>Nel caso in cui i tipi coinvolti (siano essi parametri o valori di ritorno) siano tipi complessi, come MyType nello snippet precedente, è sufficiente definire opportune struct, avendo cura di esporne i relativi membri come field pubblici:</p> <p></p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:246bd2b5-eb27-4797-8b8f-e00047352541" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width: 100%; background-color: #eeeeee"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #999999">1</span> <span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">struct</span><span style="color: #000000"> MyType </span><span style="color: #999999">2</span> <span style="color: #000000">{ </span><span style="color: #999999">3</span> <span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> booleanField; </span><span style="color: #999999">4</span> <span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">string</span><span style="color: #000000"> stringField; </span><span style="color: #999999">5</span> <span style="color: #000000"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> OtherType complexField; </span><span style="color: #999999">6</span> <span style="color: #000000">}</span></div></pre></div> <p>A questo punto, per invocare il servizio è sufficiente costruire un proxy ed eseguirne i metodi:</p> <p></p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:aae6c606-a8be-401a-b21c-0e07bcade23a" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width: 100%; background-color: #eeeeee"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #999999">1</span> <span style="color: #000000">IMyService proxy </span><span style="color: #000000">=</span><span style="color: #000000"> XmlRpcProxyGen.Create</span><span style="color: #000000">&lt;</span><span style="color: #000000">IMyService</span><span style="color: #000000">&gt;</span><span style="color: #000000">(); </span><span style="color: #999999">2</span> <span style="color: #000000">proxy.Url </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800000">"</span><span style="color: #800000">http://urldelserivizio</span><span style="color: #800000">"</span><span style="color: #000000">; </span><span style="color: #999999">3</span> <span style="color: #000000"></span><span style="color: #0000ff">string</span><span style="color: #000000"> res </span><span style="color: #000000">=</span><span style="color: #000000"> proxy.RemoteMethodThatReturnsAString(...parametri...);</span></div></pre></div> <p>La generazione dinamica del proxy avviene tramite Reflection.Emit, ed è quindi piuttosto veloce. A <a href="http://www.dotnetjunkies.com/WebLog/joshuagough/archive/2006/05/23/139019.aspx">questo link</a> trovate un esempio di utilizzo di XML-RPC.Net proprio per invocare le MetaWeblog API.</p> <p>Sciaooo :-)</p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:b712c589-2456-479c-b535-590717274635" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Web%20Services" rel="tag">Web Services</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/88247.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/09/11/xml-rpc-e-.net.aspx Tue, 11 Sep 2007 16:36:51 GMT http://blogs.ugidotnet.org/Crad/archive/2007/09/11/xml-rpc-e-.net.aspx#feedback http://blogs.ugidotnet.org/Crad/comments/commentRss/88247.aspx Forse un problemino in OracleClient? http://blogs.ugidotnet.org/Crad/archive/2007/03/21/73444.aspx <p>E' sicuramente una best practice quella di chiudere un datareader quando questo è stato utilizzato. Consideriamo però il seguente snippet di codice:</p> <p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:78b07966-768a-498d-bdcc-df67de6d4f32" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width:100%;;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #000000;">DBConnection connection; </span><span style="color: #0000FF;">using</span><span style="color: #000000;"> (connection </span><span style="color: #000000;">=</span><span style="color: #000000;"> factory.CreateConnection()) { DBCommand cmd </span><span style="color: #000000;">=</span><span style="color: #000000;"> connection.CreateCommand(); </span><span style="color: #008000;">//</span><span style="color: #008000;"> some code</span><span style="color: #008000;"> </span><span style="color: #000000;"> DBDataReader dr </span><span style="color: #000000;">=</span><span style="color: #000000;"> cmd.ExecuteReader(); </span><span style="color: #008000;">//</span><span style="color: #008000;"> some code</span><span style="color: #008000;"> </span><span style="color: #000000;">} Console.WriteLine(connection.State);</span></div></pre></div></p> <p>Il cursore non viene esplicitamente chiuso, questo è vero, ma viene comunque invocata la dispose della connection verso il DB.</p> <p>Con SqlClient questo snippet funziona come previsto, stesso dicasi per OleDbClient e per Oracle.DataAccess: lo snippet stampa "Closed" sulla console e, se si disabilita il connection pool, si può notare come all'esterno del blocco using non ci sia alcuna connessione attiva presso il DB Server.</p> <p>Con System.Data.OracleClient, invece, si verifica un comportamento anomalo: nonostante la connection risulti comunque chiusa, fisicamente al termine dello snippet si può verificare come rimanga una connessione appesa e quindi non riutilizzabile neanche dal connection pool. Questo non accade chiudendo esplicitamente il datareader, con una leggera variante allo snippet di prima:</p> <p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:01b65fe4-9bac-41f3-bcad-b95c94ddd76b" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width:100%;;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #000000;">DBConnection connection; </span><span style="color: #0000FF;">using</span><span style="color: #000000;"> (connection </span><span style="color: #000000;">=</span><span style="color: #000000;"> factory.CreateConnection()) { DBCommand cmd </span><span style="color: #000000;">=</span><span style="color: #000000;"> connection.CreateCommand(); </span><span style="color: #008000;">//</span><span style="color: #008000;"> some code</span><span style="color: #008000;"> </span><span style="color: #000000;"> </span><span style="color: #0000FF;">using</span><span style="color: #000000;"> (DBDataReader dr </span><span style="color: #000000;">=</span><span style="color: #000000;"> cmd.ExecuteReader()) { </span><span style="color: #008000;">//</span><span style="color: #008000;"> some code</span><span style="color: #008000;"> </span><span style="color: #000000;"> } } Console.WriteLine(connection.State);</span></div></pre></div></p> <p>Ovviamente me ne sono accorto in produzione :-(</p><img src="http://blogs.ugidotnet.org/Crad/aggbug/73444.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/03/21/73444.aspx Wed, 21 Mar 2007 17:40:00 GMT http://blogs.ugidotnet.org/Crad/archive/2007/03/21/73444.aspx#feedback http://blogs.ugidotnet.org/Crad/comments/commentRss/73444.aspx [70-526] Lo preparo a tempo di record http://blogs.ugidotnet.org/Crad/archive/2007/01/13/66633.aspx <p>Vediamo se riesco... dato che comunque mi sembra piuttosto simile al vecchio 70-316 che ho superato circa un annetto fa, ho pensato di dare un'accelerata drastica ai miei studi e sostenerlo entro il mese di gennaio. Chissà se ce la farò!</p> <p>In ogni modo, ho appena acquistato i test su MeasureUp; cavoli,&nbsp;certo che 55€ per la versione online di 30gg non è proprio a buon mercato!!</p><img src="http://blogs.ugidotnet.org/Crad/aggbug/66633.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/01/13/66633.aspx Sat, 13 Jan 2007 18:53:00 GMT http://blogs.ugidotnet.org/Crad/archive/2007/01/13/66633.aspx#feedback 3 http://blogs.ugidotnet.org/Crad/comments/commentRss/66633.aspx Memory Leak in .NET http://blogs.ugidotnet.org/Crad/archive/2007/01/07/65348.aspx <p>Prendo spunto dai post di <a href="http://blogs.ugidotnet.org/lbarbieri/archive/2007/01/06/65325.aspx">Lorenzo</a> e di <a href="http://blogs.ugidotnet.org/raffaele/archive/2007/01/06/65265.aspx">Raffo</a>&nbsp;per segnalarvi un <a href="http://msdn.microsoft.com/msdnmag/issues/07/01/ManagedLeaks/default.aspx">bell'articolo di MSDN Magazine di Gennaio</a> di <a href="http://www.jameskovacs.com/blog/">James Kovacs</a> a proposito dei memory leak che possono verificarsi nelle nostre applicazioni .NET se scritte "male", anche nel caso di solo codice managed.</p> <p>Credo che ogni sviluppatore di buon livello debba annoverare, nel suo bagaglio culturale, la conoscenza di come funzionano le cose a basso livello, perché in alcuni casi <em>bisogna</em> implementare IDisposable (tempo fa ho scritto qualcosa in proposito <a href="http://blogs.ugidotnet.org/crad/posts/41688.aspx">qui</a>), cosa sono boxing e unboxing, cosa succede quando scriviamo</p> <p></p> <div class="wlWriterSmartContent" id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:4f8ce4c7-c444-419c-9345-e7bf520fecac" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"><pre style="width:100%;;"><div><!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><span style="color: #000000;">myButton.Click </span><span style="color: #000000;">+=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">new</span><span style="color: #000000;"> EventHandler(myButtonClickHandler);</span></div></pre></div> <p></p> <p>o qual è l'overhead di lavoro a cui costringiamo il CLR nel caso in cui chiamiamo un metodo marcato come <em>virtual</em>.</p> <p>Quindi... comprate tutti <a href="http://www.amazon.com/CLR-via-Second-Jeffrey-Richter/dp/0735621632/sr=8-1/qid=1168168984/ref=pd_bbs_sr_1/103-5446374-5857402?ie=UTF8&amp;s=books">CLR via C#</a> di <a href="http://www.wintellect.com/Weblogs/CategoryView,category,Jeffrey%20Richter.aspx">Jeffrey Richter</a>, da bravi! <img src="http://www.tuttogratis.it/img/emoticons/_okay.gif"></p><img src="http://blogs.ugidotnet.org/Crad/aggbug/65348.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/01/07/65348.aspx Sun, 07 Jan 2007 13:32:00 GMT http://blogs.ugidotnet.org/Crad/archive/2007/01/07/65348.aspx#feedback 1 http://blogs.ugidotnet.org/Crad/comments/commentRss/65348.aspx Passato il 70 - 536 http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60033.aspx <FONT face=Verdana size=2> <P>Preparato in poco tempo (un paio di weekend), passato oggi con 896.</P> <P>Per essere contento son contento, anche se ho seri dubbi sulla reale utilità di un esame del genere: che senso ha valutare il candidato su quesiti che, 9 volte su 10, si risolvono consultando la library... mah! Nozionismo puro e&nbsp;programma estremamente vasto...&nbsp;A me è sembrato inutilmente complicato, fortuna che me lo son buttato alle spalle, va'...</P> <P>Speriamo che quelli per win e web siano più interessanti. Sciaoooo!</P> <P> </FONT> <FONT face=Verdana size=2><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/60033.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60033.aspx Mon, 18 Dec 2006 13:05:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60033.aspx#feedback 2 http://blogs.ugidotnet.org/Crad/comments/commentRss/60033.aspx La mia sull'evento di DotNetMarche http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60029.aspx <FONT face=Verdana size=2> <P>Scrivo solo oggi perché ho avuto un weekend piuttosto intenso! Che dire... contentissimo! Intanto mi sento di ringraziare <A title="" href="http://blogs.ugidotnet.org/rgm/" target="" name="">Gian Maria</A>, <A title="" href="http://blogs.ugidotnet.org/GisSharpBlog/" target="" name="">Diego</A>, <A title="" href="http://blogs.ugidotnet.org/ste8/" target="" name="">Stefano</A> e tutti gli altri ragazzi per la splendida organizzazione, per il caffé nel termos che mi ha salvato dal crollo, per i pasticcini che invece hanno salvato <A title="" href="http://blogs.ugidotnet.org/idamiani/" target="" name="">Igor</A> e soprattutto l'albero di natale aziendale, senza il quale io e <A title="" href="http://blogs.ugidotnet.org/janky" target="" name="">Janky</A> non avremmo potuto sistemare le ultime robine sulle slide durante la sessione di <A title="" href="http://www.codeclimber.net.nz/" target="" name="">Simone</A> (già... perché da che mondo&nbsp;è mondo, le slide e le demo devono essere completate 30 secondi prima di parlare, altrimenti porta sfiga).</P> <P>Mi spiace di essere andato un po' lungo ed aver sottratto un po' di tempo a Giancarlo, probabilmente non mi aspettavo tutte quelle domande e quindi il timing che avevo programmato è un po' andato a farsi friggere. Mi dispiace anche per la mancanza delle pallavoliste, se ci sarà mai occasione di replicare, giuro che io e janky faremo di tutto per portare una biondona in carne ed ossa! (azz... oramai l'ho detto!!)</P> <P>Però ragazzi, lasciatemelo dire... la cena! CHE CENA!! Quei ravioli al tartufo *spettacolari* e una compagnia che definire cordiale e divertente è dire poco! Peccato solo non esserci intrufolati al festino nell'altra sala <IMG height=19 src="http://www.imhoproject.org/files/risate.gif" width=19 align=absMiddle border=0></P> <P><A title="" href="http://blogs.ugidotnet.org/GisSharpBlog/archive/2006/12/16/59775.aspx" target="" name="">Ho letto</A> sul blog di Diego che è rimasto un po' deluso dalla presenza di pochi marchigiani. Beh, personalmente invece sono molto soddisfatto dell'afflusso di persone e il fatto che un evento così "in piccolo" abbia attirato gente da Arezzo, Bari, Brescia, vi deve rendere solo orgogliosi ragazzi! Continuate così. <IMG height=19 src="http://www.imhoproject.org/files/occhiolino.gif" width=19 align=absMiddle border=0></P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/60029.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60029.aspx Mon, 18 Dec 2006 13:01:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/12/18/60029.aspx#feedback 1 http://blogs.ugidotnet.org/Crad/comments/commentRss/60029.aspx