<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>Coding</title>
        <link>http://blogs.ugidotnet.org/odamiani/category/1864.aspx</link>
        <description>Tutto ciò che riguarda programmazione e codice...in .Net ma non solo...</description>
        <language>it-IT</language>
        <copyright>Omar Damiani</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <item>
            <title>SharpZipLib e falsi positivi</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2010/09/16/sharpziplib-e-falsi-positivi.aspx</link>
            <description>&lt;p&gt;In questi giorni mi sono scontrato con una serie strana di fatti che solo grazie alla pazienza e supporto del cliente e ad un pizzico di costanza, sono riuscito *forse* a venirne a capo.&lt;/p&gt;  &lt;p&gt;Dico forse perchè le prime avvisaglie ci sono, ma vedremo presto se la statistica si assesta :)&lt;/p&gt;  &lt;p&gt;Quel che è certo è questo: se avete deciso di utilizzare o utilizzate la libreria &lt;a href="http://www.icsharpcode.net/opensource/sharpziplib/" target="_blank"&gt;SharpZipLib&lt;/a&gt; per creare i vostri file compressi (zip), e *magari*, tanto che ci siete dovete anche inviarli via email, occhio ai &lt;a href="http://www.notrace.it/glossario/Falso-Positivo/" target="_blank"&gt;falsi positivi&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Il mio cliente utilizza come sistema integrato antivirus, antispam, eccetera &lt;a href="http://www.safenet-inc.com/Products/Data_Protection/Content_Security/eSafe-anti-spam-anti-phishing.aspx" target="_blank"&gt;eSafe&lt;/a&gt;, ed il problema è che il file zip allegato veniva sistematicamente rimosso.&lt;/p&gt;  &lt;p&gt;La cosa che mi ha fatto insospettire è che l’errore fosse il 738: “The 'Block oversized files in archives' rule is active”.&lt;/p&gt;  &lt;p&gt;Questo mi porta a pensare che non siano “semplici” falsi positivi, ma che la libreria in questione generi dei file compressi con dei metadati errati, per esempio *magari* la dimensione del file…&lt;/p&gt;  &lt;p&gt;La mia soluzione è stato sostituire la libreria di compressione con &lt;a href="http://dotnetzip.codeplex.com/" target="_blank"&gt;DotNetZip&lt;/a&gt; e devo dire che ora sembra tutto molto meglio :)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/99211.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2010/09/16/sharpziplib-e-falsi-positivi.aspx</guid>
            <pubDate>Thu, 16 Sep 2010 12:33:43 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/99211.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2010/09/16/sharpziplib-e-falsi-positivi.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/99211.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/99211.aspx</trackback:ping>
        </item>
        <item>
            <title>COM Interoperability&amp;hellip;some tricks ;)</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2010/09/13/com-interoperabilityhellipsome-tricks.aspx</link>
            <description>&lt;p&gt;Dovendo sviluppare in questi giorni un wrapper COM per una mia libreria, ho reinstallato su una mia macchina virtuale &lt;strike&gt;il mitico&lt;/strike&gt; lo storico ambiente di sviluppo Visual Basic 6.0. Che tempi! :)&lt;/p&gt;  &lt;p&gt;Beh, ho sempre sentito parlare, anche nei vari esametti che ci sono in giro di questa COM Interop, a dire il vero l’avevo già usata “al contrario” (ovvero usare oggetti COM da .Net), ma non mi era mai successo di dover usare .Net da COM.&lt;/p&gt;  &lt;p&gt;E così un bel territorio nuovo, ma non sapevo che avrei trovato due insidie *carine*.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Prima Insidia&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Qualcuno di voi, leggendo fin qui magari si è chiesto: “ma scusa, dato che si possono utilizzare oggetti COM in .Net perchè non ha utilizzato direttamente il suo wrapper, una volta costruito, direttamente in VS? Perchè vuole farsi del male installando VB6?”&lt;/p&gt;  &lt;p&gt;Ve lo siete chiesti vero? :)&lt;/p&gt;  &lt;p&gt;Amo il realismo e quindi volevo provare nell’ambiente “vero”.&lt;/p&gt;  &lt;p&gt;No, non è per quello. Ci mancherebbe. La risposta è più semplice: non si può. (!)&lt;/p&gt;  &lt;p&gt;Cioè se create una classe .Net, la wrappate COM e tentate di usarla in .Net come COM, non si può fare. Punto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Seconda Insidia&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Beh, insomma nulla di difficile, la cosa più lunga sarà installare VB6 e fare un progettino &lt;strike&gt;idiota&lt;/strike&gt; di prova.&lt;/p&gt;  &lt;p&gt;Vero.&lt;/p&gt;  &lt;p&gt;Ma solo per la prima prova. (ecco svelati perchè tutti i milioni di esempi che si trovano sulla Rete *comunque* funzionano…la prima volta…)&lt;/p&gt;  &lt;p&gt;Leggerete che occorre creare un Interfaccia (possiamo anche farla creare in automatico con l’attributo &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.classinterfaceattribute.aspx" target="_blank"&gt;ClassInterface&lt;/a&gt;), poi una bella classe che implementa quell’interfaccia, esposta in COM tramite &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.progidattribute.aspx" target="_blank"&gt;ProgId&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.guidattribute.aspx" target="_blank"&gt;Guid&lt;/a&gt;…&lt;/p&gt;  &lt;p&gt;Nulla di nuovo, sono stati scritti due esempi completi: &lt;a href="http://www.codeproject.com/KB/COM/nettocom.aspx" target="_blank"&gt;uno più immediato&lt;/a&gt; e l’&lt;a href="http://www.codeproject.com/KB/COM/cominterop.aspx" target="_blank"&gt;altro&lt;/a&gt; molto utile per approfondire…&lt;/p&gt;  &lt;p&gt;Cosa non dicono?&lt;/p&gt;  &lt;p&gt;Beh, fatte le vostre prove *probabilmente* vorrete cambiare l’interfaccia aggiungendo, sostituendo metodi, no?&lt;/p&gt;  &lt;p&gt;E via, a botte di regasm a far rigenerare il tlb (Type Library)…e a ricaricarla come referenza da VB6.&lt;/p&gt;  &lt;p&gt;E li cominciano i primi dubbi amletici: non cambia assolutamente nulla. Anzi cominciano ad uscirvi errori dal 429 al 438 ActiveX che, ve la faccio breve, significano che la vostra classe non implementa i metodi richiesti.&lt;/p&gt;  &lt;p&gt;Posto che voi invece li abbiate sviluppati (altrimenti avete un altro problema…:D), come fare in modo che la rigenerazione del tlb corrisponda effettivamente ad un refresh delle referenze?&lt;/p&gt;  &lt;p&gt;Semplice, una volta che si sa: occorre incrementare la versione del vostro COM wrapper.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Terza Insidia&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ricordatevi, in fase di generazione/rigenerazione del tlb che, se avete utilizzato delle dipendenze, dovete aggiungere l’opzione /codebase, così include tutte le dipendenze nell’esportazione.&lt;/p&gt;  &lt;p&gt;Ora siete pronti per il vostro viaggio nel mondo unmanaged :)&lt;/p&gt;  &lt;p&gt;That’s all folks!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/99197.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2010/09/13/com-interoperabilityhellipsome-tricks.aspx</guid>
            <pubDate>Mon, 13 Sep 2010 15:55:06 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/99197.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2010/09/13/com-interoperabilityhellipsome-tricks.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/99197.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/99197.aspx</trackback:ping>
        </item>
        <item>
            <title>ThickBox e Gallery</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2010/04/06/thickbox-e-gallery.aspx</link>
            <description>&lt;p&gt;Mi sono appena scontrato con un problemino da 0.45 ore di perdita di tempo.&lt;/p&gt;  &lt;p&gt;Il fatto è che sono abituato a pensare che, quando qualcosa non va, nella logica 80/20, l’80% delle volte è perchè io non so farla andare, e non che davvero le cose non funzionino o siano bacate.&lt;/p&gt;  &lt;p&gt;Ma evidentemente non è questo il caso (e a questo punto capire se è meglio perdere 0.45 ore perchè non so fare una cosa o perchè qualcosa non va, è un bel match).&lt;/p&gt;  &lt;p&gt;Ciancio alle bande, veniamo al punto: &lt;a href="http://jquery.com/demo/thickbox/" target="_blank"&gt;ThickBox&lt;/a&gt; ha un problema con una versione aggiornata di jQuery (credo dalla 1.3.2 ma non ho avuto modo di verificare) nella modalità “Gallery”.&lt;/p&gt;  &lt;p&gt;Ovvero, la ricerca dell’attributo “rel” che specifica a quale gallery appartiene una determinata immagine, viene cercato (per me correttamente, ma non capisco perchè non funziona) tramite XPath “@rel”.&lt;/p&gt;  &lt;p&gt;Fortunatamente, e con stupore, ho trovato &lt;a href="http://www.essentialtech.co.nz/drupal_blogs/thickbox_31_and_jquery_problem_rel" target="_blank"&gt;questo post&lt;/a&gt;, che spiega meglio di me la cosa…&lt;/p&gt;  &lt;p&gt;happy ThinkBoxing! :)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/98314.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2010/04/06/thickbox-e-gallery.aspx</guid>
            <pubDate>Tue, 06 Apr 2010 14:25:34 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/98314.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2010/04/06/thickbox-e-gallery.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/98314.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/98314.aspx</trackback:ping>
        </item>
        <item>
            <title>Weekend ;)</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2010/02/19/weekend.aspx</link>
            <description>&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; ret = &lt;span class="kwrd"&gt;false&lt;/span&gt;;

IList&amp;lt;Woman&amp;gt; women = (from p &lt;span class="kwrd"&gt;in&lt;/span&gt; omar.KnownPersons
                         &lt;span class="kwrd"&gt;where&lt;/span&gt; p.Gender == &lt;span class="str"&gt;'f'&lt;/span&gt; &amp;amp;&amp;amp;
                         p.BeautifulPoints &amp;gt;=65
                      select p
                      ).ToList();

&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(Woman w &lt;span class="kwrd"&gt;in&lt;/span&gt; women)
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt;(w.SheWillGiveItTo(omar))
      {
          ret = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
          &lt;span class="kwrd"&gt;break&lt;/span&gt;;
      }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
      {
          w.StandBy();
      }

   &lt;span class="kwrd"&gt;if&lt;/span&gt;(ret)
      omar.LetsRock();
   &lt;span class="kwrd"&gt;else&lt;/span&gt;
      omar.ContinueYourWorthlessLife();
}&lt;/pre&gt;

&lt;pre class="csharpcode"&gt; &lt;/pre&gt;

&lt;p&gt;Non ho compilato ma dovrebbe andare…&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/98064.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2010/02/19/weekend.aspx</guid>
            <pubDate>Fri, 19 Feb 2010 17:19:31 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/98064.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2010/02/19/weekend.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/98064.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/98064.aspx</trackback:ping>
        </item>
        <item>
            <title>TFS2010: un po&amp;rsquo; di &amp;ldquo;esercizi&amp;rdquo; :)</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2009/12/24/tfs2010-un-porsquo-di-ldquoesercizirdquo.aspx</link>
            <description>&lt;p&gt;Da qualche tempo ho deciso di smetterla di “tenere in piedi” una Virtual Machine (tra l’altro hostata in &lt;a href="http://www.microsoft.com/windows/virtual-pc/" target="_blank"&gt;Windows Virtual PC&lt;/a&gt;…e non dico altro) sul PC di &lt;a href="http://blog.vivendobyte.net/Default.aspx" target="_blank"&gt;mio fratello&lt;/a&gt; che, povero, era costretto a giocare a &lt;a href="http://modernwarfare2.infinityward.com/agegate.php" target="_blank"&gt;COD Modern Warfare 2&lt;/a&gt; con la VM attiva, con evidenti “effetti speciali” del frame rate…&lt;/p&gt;  &lt;p&gt;Senza contare il fatto che necessitavo del suo PC acceso mentre lavoravo (il che tradotto, data la mia doppia vita, significa dalle 21 alle 2) e che, comunque, non era raggiungibile dall’esterno (essendo semplicemente in LAN).&lt;/p&gt;  &lt;p&gt;Allora ho deciso di orientarmi all’acquisto di un VPS, mi sono rivolto a &lt;a href="http://www.ipnext.it/" target="_blank"&gt;IP Next&lt;/a&gt;, dato che fanno parte di un brand che mi fanno già da fornitori per altro hardware.&lt;/p&gt;  &lt;p&gt;Inizialmente l’idea era quella di utilizzare TFS2008, ma poi ho deciso di “tentare” direttamente il salto a &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/default.aspx" target="_blank"&gt;TFS2010 Beta 2&lt;/a&gt;, dato che anche il server lo dovrò per forza reinstallare verso, al massimo, Giugno.&lt;/p&gt;  &lt;p&gt;Dato l’esiguo spazio a disposizione (16Gb di HD) ho dovuto optare per un’installazione ultralight (ahimè non ho potuto sfruttare la Core Installation di Windows Server 2008 data la mia ignoranza che sto cominciando a colmare…): SQLExpress + TFS2010 Basic.&lt;/p&gt;  &lt;p&gt;L’installazione è stata *fantasticamente* liscia, grazie alla &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f" target="_blank"&gt;guida&lt;/a&gt; ufficiale.&lt;/p&gt;  &lt;p&gt;Poi in realtà ho avuto anche qualche problema, e qui nasce l’idea di questo post.&lt;/p&gt;  &lt;p&gt;I problemi, in ordine erano i seguenti:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Errore alla creazione di un nuovo Team Project&lt;/li&gt;    &lt;li&gt;Impossibilità di cancellare un Team Project la cui creazione era fallita&lt;/li&gt;    &lt;li&gt;Problema a mappare sul nuovo server il progetto&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;1. Errore creazione Team Project&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;L’errore esatto era “There is insufficient system memory in resource pool 'internal' to run this query”.&lt;/p&gt;  &lt;p&gt;Dopo aver perso circa 24 ore (lavorative o non?!? boh…) nell’investigare questa cosa è risultata in una mazzata sui denti per me: stupidamente non avevo installato il SP1 di SQL Server e, in un meandro della Rete della quale ho perso il link, è risultato che una causa *poteva* essere quella.&lt;/p&gt;  &lt;p&gt;Installato –&amp;gt; Risolto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Impossibilità di cancellare un Team Project *creato* ma *fallito*&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dato l’errore di cui al punto 1, non veniva eseguito il rollback della procedura di creazione del Team Project, quindi risultava una situazione *spuria* sul server: Team Project non presente ma, se si tentava di creare un nuovo progetto con lo stesso nome, un messaggio mi avvisava che c’era già…&lt;/p&gt;  &lt;p&gt;Mi sono quindi documentato su vari *giochini* a &lt;a href="http://msdn.microsoft.com/en-us/library/ms253088(VS.100).aspx" target="_blank"&gt;linea di comando&lt;/a&gt; e ho trovato utili al mio scopo questi due, in sequenza:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;tfsconfig repair&lt;/li&gt;    &lt;li&gt;tfsconfig remapDBs /databaseName:Nettuno\SQLEXPRESS;Tfs_Configuration /sqlInstances:Nettuno\SQLEXPRESS&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Dopodichè, nella Team Fondation Server Console, finalmente il Team Project.&lt;/p&gt;  &lt;p&gt;Quindi l’ho cancellato e ricreato –&amp;gt; Risolto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Problema nel mappare sul nuovo server il progetto&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Questo è stato un problema più strano (qui non c’entra nulla la versione di TFS).&lt;/p&gt;  &lt;p&gt;Quello che non riuscivo a fare era, dopo aver slegato (unbind) del progetto al vecchio server TFS, mappare il folder locale sul nuovo server per fare il primo checkin di tutto il codice.&lt;/p&gt;  &lt;p&gt;L’errore che ottenevo quando tentavo di configurare il nuovo workspace era:&lt;/p&gt;  &lt;p&gt;“The path … is already mapped in workspace …”&lt;/p&gt;  &lt;p&gt;Dopo aver fatto unbind e aver cancellato (manualmente) (operazione comunque inutile) i file vssscc?!?!&lt;/p&gt;  &lt;p&gt;Qui non è stata farina del mio sacco, la &lt;a href="http://blogs.msdn.com/buckh/archive/2006/09/12/path-is-already-mapped-in-workspace.aspx" target="_blank"&gt;soluzione&lt;/a&gt; si è presentata in *automatico* grazie ad una veloce ricerca.&lt;/p&gt;  &lt;p&gt;Risolto.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Bene, a questo punto posso anche cominciare a comprare i regali…azz…ma è il 24 Dicembre?!?!?&lt;/p&gt;  &lt;p&gt;Auguri di Buon Natale a tutti allora!!! :)))&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/97756.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2009/12/24/tfs2010-un-porsquo-di-ldquoesercizirdquo.aspx</guid>
            <pubDate>Thu, 24 Dec 2009 00:50:22 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/97756.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2009/12/24/tfs2010-un-porsquo-di-ldquoesercizirdquo.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/97756.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/97756.aspx</trackback:ping>
        </item>
        <item>
            <title>Intervista su SCRUM</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2009/03/19/intervista-su-scrum.aspx</link>
            <description>&lt;p&gt;Mi era sfuggita (e si che lo sapevo che doveva uscire…) e devo dire che l’ho seguita con interesse.&lt;/p&gt;  &lt;p&gt;Non sapevo minimanente di cose si trattasse, mi sembra una cosa molto utile da sapere…sarebbe bello anche applicarla…&lt;/p&gt;  &lt;p&gt;Seguitela &lt;a href="http://channel9.msdn.com/posts/PietroBrambati/Scrum-in-10-minuti/" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/95747.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2009/03/19/intervista-su-scrum.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 12:01:35 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/95747.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2009/03/19/intervista-su-scrum.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/95747.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/95747.aspx</trackback:ping>
        </item>
        <item>
            <title>Navigazione Custom in SharePoint</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2009/03/12/navigazione-custom-in-sharepoint.aspx</link>
            <description>&lt;p&gt;Girando per la Rete, ho trovato questo &lt;em&gt;simpatico&lt;/em&gt; post che in più di un caso potrebbe servirmi per risolvere una questione &lt;em&gt;scomoda&lt;/em&gt; che SharePoint non risolve out-of-the-box.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://cregan.wordpress.com/2008/05/09/wss-navigation-flyouts-security-trimming-custom-nav-items/" href="http://cregan.wordpress.com/2008/05/09/wss-navigation-flyouts-security-trimming-custom-nav-items/"&gt;http://cregan.wordpress.com/2008/05/09/wss-navigation-flyouts-security-trimming-custom-nav-items/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Spiega tutto perfettamente e direi che non c’è da aggiungere altro se non un complimento per la scelta tecnica ;)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/95680.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2009/03/12/navigazione-custom-in-sharepoint.aspx</guid>
            <pubDate>Thu, 12 Mar 2009 13:30:13 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/95680.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2009/03/12/navigazione-custom-in-sharepoint.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/95680.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/95680.aspx</trackback:ping>
        </item>
        <item>
            <title>SharePoint web services, Visual Studio e l'autenticazione perduta (?!?)</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2008/12/24/95013.aspx</link>
            <description>&lt;p&gt;Questa cosa davvero bizzarra (vi prego, ditemi che ho qualche grossa lacuna, preferirei...) la scrivo perchè (spero che sia complice qualche festicciola natalizia) mi ha fatto perdere due giorni lavorativi.&lt;/p&gt; &lt;p&gt;Finalmente stasera ho avuto l'illuminazione. Ho dovuto abbandonare la mia razionalità, ma d'altronde Einstein insegna "&lt;em&gt;Imagination is more important than knowledge&lt;/em&gt;".&lt;/p&gt; &lt;p&gt;Veniamo al dunque.&lt;/p&gt; &lt;p&gt;Premesso che, fino a lunedì, ancora non avevo mai utilizzato &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank"&gt;WCF&lt;/a&gt;, ho deciso di non farmi problemi ad utilizzarlo per referenziare i web service di SharePoint.&lt;/p&gt; &lt;p&gt;Fin qua tutto ok.&lt;/p&gt; &lt;p&gt;Peccato che poi, alla chiamata di un qualsiasi metodo di un qualsiasi web service (tra quelli di SharePoint ovviamente), ricevo un errore di autenticazione.&lt;/p&gt; &lt;p&gt;Io purtroppo sul discorso security sono un po' carente moltiplicato per la mia carenza WCF crea un bel mondo di incognite...:)&lt;/p&gt; &lt;p&gt;Eppure...mi sembra tutto giusto, perchè non mi autentica con la mia utenza (che tra l'altro è admin del mio sito SharePoint) ?&lt;/p&gt; &lt;p&gt;&lt;em&gt;listService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;&lt;br /&gt;listService.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("pippo", "pippo99", "SHARE1");&lt;br /&gt;listService.ClientCredentials.Windows.AllowNtlm = true;&lt;/em&gt;  &lt;/p&gt;&lt;p&gt;Niente da fare, non mi autentica.  &lt;/p&gt;&lt;p&gt;Cerco informazioni un po' su internet, un po' su vari libri di WCF dando la colpa alla mia ignoranza sull'argomento. Chissà come si implementa l'NTLM con WCF...  &lt;/p&gt;&lt;p&gt;Niente da fare, tutto mi riporta al fatto che, così come ho fatto è giusto. Anche la sezione Security dell'app.config è ok.  &lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;security mode="TransportCredentialOnly"&amp;gt;&lt;br /&gt;  &amp;lt;transport clientCredentialType="Ntlm"/&amp;gt;&lt;br /&gt;  &amp;lt;message clientCredentialType="UserName" algorithmSuite="Default" /&amp;gt; &lt;/em&gt; &lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;/security&amp;gt;&lt;/em&gt;  &lt;/p&gt;&lt;p&gt;Mi arrendo e mi dico: proviamo a farlo nella vecchia maniera...ovvero aggiungere il servizio come web service e non come servizio WCF.&lt;/p&gt; &lt;p&gt;Così faccio, cambio leggermente il codice:&lt;/p&gt; &lt;p&gt;&lt;em&gt;listService.Credentials = new NetworkCredential("pippo", "pippo99", "SHARE1"); &lt;/em&gt; &lt;/p&gt;&lt;p&gt;Stesso errore, ancora non mi autentica. Provo ancora a controllare la validità della mia utenza con il browser ed è ok.  &lt;/p&gt;&lt;p&gt;Non capisco cosa devo fare e mi arrovello, perdendo tempo in inutili tentativi.  &lt;/p&gt;&lt;p&gt;Alla fine, provo impostando direttamente l'Url del webservice una volta istanziato e...sorpresa: funziona!  &lt;/p&gt;&lt;p&gt;Ma come è possibile? E' lo stesso Url con la quale l'ho referenziato, chi l'ha cambiato?!?  &lt;/p&gt;&lt;p&gt;Nessuno: Visual Studio, quando viene referenziato un web service di SharePoint, elimina qualsiasi menzione a eventuali sottositi.&lt;br /&gt;Se per esempio quindi il web service referenziato (come nel nostro caso) è:  &lt;/p&gt;&lt;p&gt;&lt;em&gt;http://nomedominio.com/sottosito/_vti_bin/lists.asmx &lt;/em&gt; &lt;/p&gt;&lt;p&gt;Visual Studio in realtà memorizzerà l'indirizzo così:  &lt;/p&gt;&lt;p&gt;&lt;em&gt;http://nomedominio.com/_vti_bin/lists.asmx &lt;/em&gt; &lt;/p&gt;&lt;p&gt;Nella logica delle directory virtuali di SharePoint non fa una piega, ma in effetti è chiaro che utilizzare il web service dalla root o da un suo sottosito, non è esattamente la stessa cosa...  &lt;/p&gt;&lt;p&gt;Alla fine, sono tornato nel mio progetto dove l'avevo referenziato con WCF, mi è bastato impostare l'Url corretto e...funziona.  &lt;/p&gt;&lt;p&gt;&lt;em&gt;listService.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://nomedominio.com/sottosito/_vti_bin/lists.asmx"); &lt;/em&gt; &lt;/p&gt;&lt;p&gt;Non aggiungo altro.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/95013.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2008/12/24/95013.aspx</guid>
            <pubDate>Tue, 23 Dec 2008 23:43:25 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/95013.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2008/12/24/95013.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/95013.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/95013.aspx</trackback:ping>
        </item>
        <item>
            <title>SharePoint e Architettura...why not? #1</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2008/12/17/94964.aspx</link>
            <description>&lt;p&gt;Una volta &lt;em&gt;qualcuno&lt;/em&gt; mi ha chiesto "Ma perchè ti interessi di Architettura (del software &lt;em&gt;nda&lt;/em&gt;)? Tu mica lavori con SharePoint?".&lt;/p&gt; &lt;p&gt;A parte il fatto che &lt;strike&gt;fortunatamente&lt;/strike&gt; non lavoro solo con SharePoint, non capisco dove sia il nesso. Una buona architettura ti aiuta. Sempre. (dove per buona &lt;strong&gt;non&lt;/strong&gt; intendo che la sua bontà sia direttamente proporzionale alla sua cardinalità, per non dire complessità).&lt;/p&gt; &lt;p&gt;Detto questo volevo portare questo mio esempio (niente codice, solo teoria quindi, &lt;em&gt;veri coders&lt;/em&gt;, cambiate pure post :D) senza avere nessuna pretesa, solo come &lt;em&gt;case study &lt;/em&gt;(addirittura?).&lt;/p&gt; &lt;p&gt;Mesi fa, avendo riscontrato una certa ripetitività codice in alcune WebPart da me sviluppate, ho pensato bene di centralizzare il codice che gestisce la generazione e la modifica di codice CAML in una libreria a se stante, referenziandola poi in tutte le WebPart che ne avessero avuto bisogno.&lt;/p&gt; &lt;p&gt;Il tutto funzionava perfettamente e avere il codice centralizzato è un grosso vantaggio.&lt;/p&gt; &lt;p&gt;Forse.&lt;/p&gt; &lt;p&gt;La centralizzazione è in realtà un boomerang se va di pari passo con la dipendenza.&lt;/p&gt; &lt;p&gt;Eh si...perchè se cambio qualcosa, qualsiasi cosa nella libreria centralizzata devo ricompilare tutti i componenti (nel nostro caso, WebPart) che ne fanno uso.&lt;/p&gt; &lt;p&gt;Non sarebbe comodo normalmente, figuriamoci se si parla di WebPart.&lt;/p&gt; &lt;p&gt;Ho capito subito la &lt;a href="http://blogs.ugidotnet.org/odamiani/archive/2008/07/11/93355.aspx" target="_blank"&gt;prima volta che ho sentito parlare&lt;/a&gt; di &lt;a href="http://en.wikipedia.org/wiki/Inversion_of_Control" target="_blank"&gt;IoC&lt;/a&gt; che quella era la strada da percorrere.&lt;/p&gt; &lt;p&gt;Allora ho fatto un po' di refactoring.&lt;/p&gt; &lt;p&gt;Mi sono creato una libreria di "base" contenente solo l'interfaccia del CAML Manager. Questo è l'assembly referenziato da tutte le WebPart.&lt;/p&gt; &lt;p&gt;Il "vero" CAML Manager è ora un'altra libreria che aderisce a quell'interfaccia e che verrà instanziata via reflection dalle WebPart.&lt;/p&gt; &lt;p&gt;Ho ricompilato (per l'ultima volta però...) tutte le WebPart ed ho installato il tutto.&lt;/p&gt; &lt;p&gt;Il vantaggio di tutto questo è che finalmente se devo cambiare qualcosa nella libreria centralizzata, non è più necessario che ricompili chi la utilizza (fintanto che non cambio anche l'interfaccia, ovviamente, ma quella si spera non cambi tanto facilmente).&lt;/p&gt; &lt;p&gt;Obiettivo raggiunto.&lt;/p&gt; &lt;p&gt;Spero di completare questo post con uno più di dettaglio.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/94964.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2008/12/17/94964.aspx</guid>
            <pubDate>Wed, 17 Dec 2008 00:15:28 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/94964.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2008/12/17/94964.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/94964.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/94964.aspx</trackback:ping>
        </item>
        <item>
            <title>Dependency Injection with Unity</title>
            <link>http://blogs.ugidotnet.org/odamiani/archive/2008/09/24/94147.aspx</link>
            <description>&lt;p&gt;Da quando ho sentito parlare per la &lt;a href="http://www.communitydays.it/events/communitydays2008milano/bof001.aspx" target="_blank"&gt;prima volta&lt;/a&gt; di &lt;a href="http://martinfowler.com/articles/injection.html" target="_blank"&gt;IoC e di DI&lt;/a&gt;, devo dire che la cosa mi ha interessato sempre più e, non ho ancora ben capito se è causa o conseguenza, è sempre più presente nella mia vita professionale di tutti i giorni.&lt;/p&gt; &lt;p&gt;Innanzitutto volevo segnalare &lt;a href="http://www.codeproject.com/KB/aspnet/IOCandDI.aspx" target="_blank"&gt;questo bell'articolo&lt;/a&gt; che spiega di base sia di cosa si tratta, sia come risolverlo con &lt;a href="http://msdn.microsoft.com/en-us/library/cc440954.aspx" target="_blank"&gt;Unity&lt;/a&gt;, la soluzione Microsoft per la Dependency Injection.&lt;/p&gt; &lt;p&gt;Come dicevo pochi secondi fa a &lt;a href="http://blog.mgutman.net/" target="_blank"&gt;mgutman&lt;/a&gt;, la DI è una di quelle cose che io pensavo fossere irrisolvibili. Un assunto. Tipo "Babbo Natale non esiste".&lt;/p&gt; &lt;p&gt;Impossibile pensare di cambiare un componente dipendente senza spezzare la dipendenza.&lt;/p&gt; &lt;p&gt;Invece non è così. E questo mi piace molto (stavo per dire "&lt;em&gt;oltre ogni cosa&lt;/em&gt;" ma poi me ne è venuta in mente una...ma effettivamente è una).&lt;/p&gt; &lt;p&gt;Proprio in questi giorni ho un progetto in &lt;a href="http://en.wikipedia.org/wiki/Proof_of_concept" target="_blank"&gt;POC&lt;/a&gt; in cui devo incastonare una web part in SharePoint 2003 in un modo non proprio tradizionale.&lt;/p&gt; &lt;p&gt;Dopo aver dimostrato che tecnicamente è fattibile ho ora un problema di dipendenza a cascata e la DI potrebbe seriamente venirmi in aiuto (anche se su SharePoint 2003 devo arzigogolare un po').&lt;/p&gt; &lt;p&gt;Dopo questa segnalazione, torno allo studio ;)&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/odamiani/aggbug/94147.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Omar Damiani</dc:creator>
            <guid>http://blogs.ugidotnet.org/odamiani/archive/2008/09/24/94147.aspx</guid>
            <pubDate>Wed, 24 Sep 2008 13:02:20 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/odamiani/comments/94147.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/odamiani/archive/2008/09/24/94147.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/odamiani/comments/commentRss/94147.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/odamiani/services/trackbacks/94147.aspx</trackback:ping>
        </item>
    </channel>
</rss>
