<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>.NET World</title>
        <link>http://blog.vivendobyte.net/category/8.aspx</link>
        <description>Programmazione, libri, snippet di codice, articoli tecnici</description>
        <language>it-IT</language>
        <copyright>Igor Damiani</copyright>
        <managingEditor>igor@vivendobyte.net</managingEditor>
        <generator>Subtext Version 2.0.0.43</generator>
        <item>
            <title>Ok, son migrato ufficialmente a Subtext 2.0!</title>
            <link>http://blog.vivendobyte.net/archive/2008/09/15/664.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Introduzione  &lt;br /&gt;&lt;/strong&gt;Sono circa due settimane che il mio blog gira con Subtext 2.0, la nuova ed ultima release del noto blog engine, che annovera fra i suoi creatori anche il buon &lt;a href="http://blogs.ugidotnet.org/piyo" target="_blank"&gt;Simone Chiaretta&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Decido di dare oggi l’ufficialità di questa cosa, &lt;strong&gt;perchè la migrazione è stata sì indolore&lt;/strong&gt;, &lt;strong&gt;&lt;font color="#ff0000"&gt;ma un po’ preoccupante per alcuni sintomi.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Parecchi di voi mi hanno detto via mail e via messenger che ogni tanto &lt;strong&gt;&lt;font color="#ff0000"&gt;il mio blog si apriva senza skin&lt;/font&gt;&lt;/strong&gt;. Urgh! &lt;/li&gt;    &lt;li&gt;Nella parte &lt;em&gt;&lt;font color="#0080c0"&gt;Admin&lt;/font&gt;&lt;/em&gt; del blog ogni tanto avevo una strana exception, che veniva tracciato correttamente nell’ErrorLog. Questo errore mi &lt;strong&gt;&lt;font color="#ff0000"&gt;impediva di salvare dalla pagina Options –&amp;gt; Configure.&lt;/font&gt;&lt;/strong&gt; In pratica, dove ci sono le impostazioni generali del blog: titolo del blog, skin da utilizzare, timezone e via dicendo. Urgh! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Primi passi per la risoluzione&lt;/strong&gt;     &lt;br /&gt;Ho deciso di indagare, perchè il mio blog engine deve girare al meglio.     &lt;br /&gt;Dopo essermi consultato con &lt;a href="http://blogs.ugidotnet.org/piyo" target="_blank"&gt;Simone&lt;/a&gt;, ho operato nel modo seguente:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Ho scaricato i sorgenti di Subtext 2.0 da &lt;a href="http://downloads.sourceforge.net/subtext/SubText-2.0-source-code.zip?modtime=1218386938&amp;amp;big_mirror=0" target="_blank"&gt;SourceForge.net&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Ho fatto un backup del database SQL Server dal mio hosting &lt;/li&gt;    &lt;li&gt;Ho ripristinato il backup del punto (2) sul mio database SQL Server locale &lt;/li&gt;    &lt;li&gt;Ho aperto i sorgenti di Subtext 2.0 con Visual Studio 2008 con il file .sln dedicato &lt;/li&gt;    &lt;li&gt;Ho configurato la stringa di connessione nel file &lt;em&gt;&lt;font color="#0080c0"&gt;web.config&lt;/font&gt;&lt;/em&gt;, così da far usare il mio database locale &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;La comodità di tutto questo è che non c’è bisogno di avere un web-server installato: è sufficiente quello integrato di Visual Studio. Basta impostare il progetto &lt;strong&gt;Subtext.Web&lt;/strong&gt; come StartUp Project ed il gioco è fatto.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Debug      &lt;br /&gt;&lt;/strong&gt;Non sto qui a raccontarvi tutti i giri di debug che mi sono fatto: non sono nemmeno da lontano la persona più adatta a parlarvene, giusto? Partiamo solo dallo StackTrace che mi veniva segnalato dall’ErrorLog di Subtext 2.0. Lo StrackTrace diceva quanto segue:&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Subtext.Framework.UI.Skinning.&lt;strong&gt;&lt;font color="#ff0000"&gt;SkinTemplateCollection.GetTemplate&lt;/font&gt;&lt;/strong&gt;(String skinKey) at Subtext.Framework.UI.Skinning.StyleSheetElementCollectionRenderer.GetStylesToBeMerged(String skinName, String media, String title, String conditional) at Subtext.Framework.Web.Handlers.CssHandler.HandleRequest(HttpContext context) at Subtext.Extensibility.Web.BaseHttpHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp;amp; completedSynchronously)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;L’Exception veniva sollevata dal metodo &lt;strong&gt;GetTemplate()&lt;/strong&gt; della classe &lt;strong&gt;SkinTemplateCollection&lt;/strong&gt;. Li ho marcati in rosso qui sopra per evidenziarli meglio. Pare che in questo metodo ci sia un .Add() su un Dictionary, e che tale .Add() tenti di inserire per due volte la stessa key. Perchè? Perchè? Perchè?&lt;/p&gt;  &lt;p&gt;Sono andato a beccarmi il codice incriminato. La classe &lt;strong&gt;SkinTemplateCollection&lt;/strong&gt; è implementata nel namespace &lt;strong&gt;Subtext.Framework.UI.Skinning&lt;/strong&gt;, nell’assembly &lt;strong&gt;Subtext.Framework&lt;/strong&gt;. Ecco il metodo:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:b15ae822-a32e-4f3a-a297-bb7c6f97adbb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; SkinTemplate GetTemplate(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; skinKey)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;{
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (_ht &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;    {
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;        _ht &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;, SkinTemplate&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Count; i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;        {
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;            _ht.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;[i].SkinKey, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;[i]);
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;        }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (_ht.ContainsKey(skinKey.ToUpper(System.Globalization.CultureInfo.InvariantCulture)))
&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;    {
&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; _ht[skinKey.ToUpper(System.Globalization.CultureInfo.InvariantCulture)];
&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Riga 8 : all’interno del ciclo for c’è la chiamata .Add() incriminata, che cerca di aggiungere al Dictionary _ht, definito come privato di classe, una chiave doppia. Non sono stato lì a farmi troppe paturnie mentali. &lt;strong&gt;&lt;font color="#ff0000"&gt;So solo che se quel ciclo for viene interrotto per qualche motivo, la return di riga (14) non verrà mai eseguita – semmai verrà restituito al chiamante un bell null.&lt;/font&gt;&lt;/strong&gt; Quindi…&lt;strong&gt;&lt;font color="#004080"&gt;Mi sono chiesto semplicemente: non è che all’interno dei files .config ho referenziato due volte lo stesso skin?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dove devono essere referenziati gli skin di Subtext 2.0 ?&lt;/strong&gt; 

  &lt;br /&gt;Io non lo sapevo: me lo sono fatto spiegare da Simone – e chi da chi altri sennò?&lt;/p&gt;

&lt;p&gt;Gli skins vengono installati dentro la directory &lt;strong&gt;Skins&lt;/strong&gt; di una normale installazione Subtext. Ogni skin viene installato in un folder separato: AnotherEnd001, DayDreaming, Gradient, KeyWest, Lightz e così via. Ma non basta, perchè bisogna gestire due files .config: uno è &lt;font color="#0080c0"&gt;&lt;em&gt;/Admin/Skins.config&lt;/em&gt;&lt;/font&gt;, l’altro è &lt;em&gt;&lt;font color="#0080c0"&gt;/Admin/Skins.user.config&lt;/font&gt;&lt;/em&gt;. Li ho scaricati in locale e li esaminati a mano, se non altro perchè hanno strutture differenti.&lt;/p&gt;

&lt;p /&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#008000"&gt;Mi sono quindi accorto che effettivamente lo skin GlossyBlue era referenziato due volte&lt;/font&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;font color="#008000"&gt;puntando alla stessa directory ma scritta in modo diverso&lt;/font&gt;&lt;/strong&gt; (“GlossyBlue” e “glossyblue”). Che sia questo il problema? Ho semplicemente cancellato il file &lt;em&gt;&lt;font color="#0080c0"&gt;/Admin/Skins.user.config&lt;/font&gt;&lt;/em&gt;, ho cancellato l’ErrorLog di Subtext e…stiamo a vedere. Adesso tutto sembra girare bene.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intanto i problemi segnalati prima non li ho più: lo skin appare sempre, e posso salvare le impostazioni.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Forse, sì, dai…fra qualche lustro potrò anche fare lo sviluppare Web (cit.).&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/Blog" rel="tag"&gt;Blog&lt;/a&gt; &lt;a href="http://technorati.com/tag/subtext" rel="tag"&gt;subtext&lt;/a&gt; &lt;a href="http://technorati.com/tag/Open-source" rel="tag"&gt;Open-source&lt;/a&gt; &lt;a href="http://technorati.com/tag/.NET Framework" rel="tag"&gt;.NET Framework&lt;/a&gt; &lt;a href="http://technorati.com/tag/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt; &lt;a href="http://technorati.com/tag/CodeClimber" rel="tag"&gt;CodeClimber&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/664.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/09/15/664.aspx</guid>
            <pubDate>Mon, 15 Sep 2008 07:31:00 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/664.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/09/15/664.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/664.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/664.aspx</trackback:ping>
        </item>
        <item>
            <title>Certo che MSDN Magazine non lo capisco proprio!</title>
            <link>http://blog.vivendobyte.net/archive/2008/09/09/660.aspx</link>
            <description>&lt;p&gt;Non parlo dei contenuti, anche se afferrare fino in fondo certi articoli richiede parecchia materia grigia, ma delle modalità che regolano il rinnovo dell’abbonamento annuale. Ne ho già parlato in passato, ma la situazione peggiora.&lt;/p&gt;  &lt;p&gt;Dunque, lasciate che vi racconti brevemente questa mia vicenda.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Il mio abbonamento doveva scadere a Maggio 2008.&lt;/font&gt;&lt;/strong&gt; Dopo aver protestato lievemente per aver perso alcuni numeri (mi pare intorno a gennaio-febbraio), &lt;strong&gt;hanno deciso di allungarmi la durata dell’abbonamento per altri due mesi&lt;/strong&gt;, in modo tale da coprire i mesi persi. Ottima iniziativa, devo dire. Quindi, &lt;strong&gt;&lt;font color="#ff0000"&gt;ho calcolato la data di scadenza a Luglio 2008.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;Mentre ero in vacanza mi sono ricordato di questa cosa: sono andato sul sito MSDN e ho cominciato la procedura per il rinnovo.&lt;/p&gt;  &lt;p&gt;Se uso l’account number, il mio abbonamento non viene trovato. Vi dirò di più: questo qui sotto è l’esempio di &lt;em&gt;label&lt;/em&gt; che il sito MSDN Magazine mette on-line per aiutare il povero utente a capire qual è esattamente il suo account number.    &lt;br /&gt;La label è questa:&lt;/p&gt;  &lt;p&gt;&lt;img src="https://www.neodata.com/images/PCD_Label.gif" /&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;&lt;strong&gt;Le parti evidenziate in azzurrino compongono il famigerato account number che dovrei inserire.     &lt;br /&gt;&lt;font color="#ff0000"&gt;Peccato che il layout della &lt;em&gt;label&lt;/em&gt; qui sopra sia completamente diverso da quello che ricevo io.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lo so, forse invece di bloggare dovrei scrivere o contattare qualcuno per risolvere il problema. L’ho già fatto: ho contattato la chat MSDN di assistenza, ho scritto e-mail a Microsoft e direttamente alla rivista. Niente: nessuno sa darmi l’account number che mi serve.&lt;/p&gt;  &lt;p&gt;Finisco: &lt;strong&gt;non so bene per quale motivo, ma ieri ho ricevuto il numero di Settembre 2008 della rivista.&lt;/strong&gt;    &lt;br /&gt;Ma…&lt;strong&gt;&lt;font color="#008000"&gt;l’abbonamento non doveva concludersi a Luglio 2008???&lt;/font&gt;&lt;/strong&gt; Boh!…finchè dura, me la godo, poi si vedrà.&lt;/p&gt;  &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/msdn magazine" rel="tag"&gt;msdn magazine&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/660.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/09/09/660.aspx</guid>
            <pubDate>Tue, 09 Sep 2008 19:11:00 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/660.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/09/09/660.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/660.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/660.aspx</trackback:ping>
        </item>
        <item>
            <title>Disponibile XamlPad 4.0</title>
            <link>http://blog.vivendobyte.net/archive/2008/09/09/661.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/llobo/archive/2008/08/25/xamlpadx-4-0.aspx" target="_blank"&gt;A questo url&lt;/a&gt; &lt;strong&gt;&lt;font color="#0000ff"&gt;è possibile scaricare la versione 4.0 di XamlPad&lt;/font&gt;&lt;/strong&gt;, un tool freeware che permette di editare codice XAML e di vederne subito la preview. Non ho letto esattamente le novità: superficialmente ho notato solo un avvio estremamente più rapido e la toolbar graficamente rinnovata.&lt;/p&gt;  &lt;p&gt;Usandolo per 5 minuti di più e dando un’occhiata alle funzioni disponibili sulla toolbar, si scopre che adesso è possibile esaminare il &lt;em&gt;&lt;font color="#004040"&gt;visual tree&lt;/font&gt;&lt;/em&gt; della classe Page o della classe Windows che si sta editando, ed è anche possibile dare un’occhiata agli stili predefiniti per ciascun controllo nativo di WPF (ricordo gli esempi di Charles Petzold sul suo libro che facevano praticamente la stessa cosa).&lt;/p&gt;  &lt;p&gt;E’ vero, forse manca l’Intellisense, ma per me sinceramente è essenziale, perchè è leggero ed è diventato nel mio cuore il ‘notepad’ XAML-oriented, anche se è utilizzabile solo per files piccoli e facilmente gestibili.&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;Download : &lt;a title="http://blogs.msdn.com/llobo/archive/2008/08/25/xamlpadx-4-0.aspx" href="http://blogs.msdn.com/llobo/archive/2008/08/25/xamlpadx-4-0.aspx" target="_blank"&gt;http://blogs.msdn.com/llobo/archive/2008/08/25/xamlpadx-4-0.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/XAML" rel="tag"&gt;XAML&lt;/a&gt; &lt;a href="http://technorati.com/tag/tool" rel="tag"&gt;tool&lt;/a&gt; &lt;a href="http://technorati.com/tag/freeware" rel="tag"&gt;freeware&lt;/a&gt; &lt;a href="http://technorati.com/tag/XamlPad" rel="tag"&gt;XamlPad&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/661.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/09/09/661.aspx</guid>
            <pubDate>Tue, 09 Sep 2008 18:17:00 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/661.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/09/09/661.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/661.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/661.aspx</trackback:ping>
        </item>
        <item>
            <title>&amp;lsquo;Sto spamming va seriamente debellato!!!</title>
            <link>http://blog.vivendobyte.net/archive/2008/09/04/658.aspx</link>
            <description>&lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;Ok, lo spamming sappiamo tutti cos’è. Ogni giorno riceviamo e-mail e messaggi di ogni tipo, che ci consigliamo acquisti di ogni tipo. Spesso di tratta di prodotti che nemmeno vogliamo e che mai ci sogneremmo di acquistare.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;E’ il caso del libro &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X" target="_blank"&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;Beginning ASP.NET MVC&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;.&lt;/font&gt;&lt;/strong&gt; Il suo autore, un &lt;em&gt;&lt;font color="#000080"&gt;certo&lt;/font&gt;&lt;/em&gt; &lt;a href="http://blogs.ugidotnet.org/piyo/Default.aspx" target="_blank"&gt;Simone Chiaretta&lt;/a&gt;, ha pensato bene di farmi spamming sul mio messenger e di &lt;strong&gt;avvisarmi che il suo primo libro&lt;/strong&gt;, rigorosamente in lingua inglese, &lt;strong&gt;è in fase di pre-sale su Amazon UK&lt;/strong&gt;. Se siete interessati, cliccate sul link di prima ed ordinatelo. Simone è una brava persona, un caro amico delle community ed in diverse occasioni è stato anche un mio compagno di viaggio nelle scorribande UGIdotNET. E poi, chiaramente, è anche un ottimo professionista, competente e preparato. Se state leggendo il mio blog, e quello di tanti altri in giro per il mondo, lo dovete anche a lui, dal momento che è uno degli sviluppatori ufficiali del &lt;a href="http://subtextproject.com/" target="_blank"&gt;blog engine Subtext&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Perciò state sicuri: &lt;strong&gt;se ha scritto un libro, merita sicuramente&lt;/strong&gt;.    &lt;br /&gt;A patto che lavoriate con ASP.NET. Mi sento escluso.&lt;/p&gt;  &lt;p&gt;Link : &lt;a title="http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X" href="http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X" target="_blank"&gt;http://www.amazon.co.uk/Beginning-ASP-NET-MVC-Simone-Chiaretta/dp/047043399X&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oggi lo spamming di Simone è perdonato. :-)   &lt;br /&gt;Comunque…va proprio debellato. Adesso pure di libri su ASP.Net mi tocca leggere.    &lt;br /&gt;Spero che non mi accada mai più! :-)&lt;/p&gt;  &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/book" rel="tag"&gt;book&lt;/a&gt; &lt;a href="http://technorati.com/tag/amazon" rel="tag"&gt;amazon&lt;/a&gt; &lt;a href="http://technorati.com/tag/CodeClimber" rel="tag"&gt;CodeClimber&lt;/a&gt; &lt;a href="http://technorati.com/tag/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt; &lt;a href="http://technorati.com/tag/MVC" rel="tag"&gt;MVC&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/658.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/09/04/658.aspx</guid>
            <pubDate>Thu, 04 Sep 2008 15:47:55 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/658.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/09/04/658.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/658.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/658.aspx</trackback:ping>
        </item>
        <item>
            <title>Piccole istruzioni Linq per semplificare un po&amp;rsquo; il codice</title>
            <link>http://blog.vivendobyte.net/archive/2008/09/02/655.aspx</link>
            <description>&lt;p&gt;Supponiamo l’esistenza di una classe &lt;strong&gt;Player&lt;/strong&gt; che tra le altre proprietà ne esponga una di tipo &lt;font color="#0000ff"&gt;intero&lt;/font&gt; denominata &lt;strong&gt;Strength&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Supponiamo l’esistenza di una classe &lt;strong&gt;Team&lt;/strong&gt; che tra le altre proprietà ne esponga una di tipo &lt;font color="#0000ff"&gt;List&amp;lt;Player&amp;gt;&lt;/font&gt; denominata &lt;strong&gt;AcquiredPlayers&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Supponiamo l’esistenza di una classe &lt;strong&gt;Match&lt;/strong&gt; che calcola l’incontro tra due Team diversi e ne calcola l’esito.&lt;/p&gt;  &lt;p&gt;Un match viene vinto dal Team che raggiunge il punteggio più alto.    &lt;br /&gt;Tale punteggio è la somma dei valori della proprietà &lt;strong&gt;Strength&lt;/strong&gt; dei giocatori appartenenti ad un Team (semplificando, chiaramente).     &lt;br /&gt;Es: l’istanza team1 ha acquisito 3 Players. Il primo ha Strength = 20, il secondo 45 ed il terzo = 56. Team1 ottiene un punteggio pari a 121. Per vincere un match, l’altro team deve ottenere un punteggio maggiore di 121.&lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;Dopo questo piccolo preambolo per illustrare lo scenario, passiamo a qualcosa di tecnico e di divertente.&lt;/p&gt;  &lt;p&gt;Come ottenere con una sola riga di C#, sfruttando Linq, il punteggio totalizzato da un team? Così:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:79d1e716-8201-48b8-9d07-d7146282a822" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:#FFFFB9;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; ScoreTeam1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;._playersTeam1.Sum(s &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; s.Player.Strength);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Semplice da leggere, efficiente e molto compatto. Se c’è una cosa bella di Linq, così come qualsiasi altra tecnologia ben congegnata, è che essa può essere sfruttata fin da subito, in progetti già avviati ed in produzione, senza bisogno di grossi stravolgimenti alla nostra applicazione o agli strumenti di sviluppo. L’unica cosa richiesta è la &lt;strong&gt;compilazione con il .NET Framework 3.5&lt;/strong&gt; ed un referenziamento all’assembly &lt;strong&gt;System.Core.dll&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/.NET Framework" rel="tag"&gt;.NET Framework&lt;/a&gt; &lt;a href="http://technorati.com/tag/Linq" rel="tag"&gt;Linq&lt;/a&gt; &lt;a href="http://technorati.com/tag/coding" rel="tag"&gt;coding&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/655.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/09/02/655.aspx</guid>
            <pubDate>Tue, 02 Sep 2008 20:15:00 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/655.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/09/02/655.aspx#feedback</comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/655.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/655.aspx</trackback:ping>
        </item>
        <item>
            <title>Download iso del Visual Studio 2008 SP1</title>
            <link>http://blog.vivendobyte.net/archive/2008/08/27/651.aspx</link>
            <description>&lt;p&gt;Se cercate su Google l'indirizzo dal quale scaricare il Service Pack 1 di Visual Studio 2008, probabilmente &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en"&gt;capiterete qua&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Siccome so di non essere l'unico a cui non piacciono gli installer da 536Kb che poi scaricano il resto dalla Rete, ecco per voi &lt;a href="http://go.microsoft.com/fwlink/?LinkId=122095"&gt;l'indirizzo dello stesso download&lt;/a&gt;, ma in formato ISO. L'ISO, lo ricordo per i pochi che non lo sapessero, è un formato che può essere utilizzato in due modi: o lo masterizzate su un CD/DVD, oppure - più semplicemente - utilizzate tools come Daemon Tools per creare un'unità CD/DVD virtuale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il download del VS2008SP1 in formato ISO è di circa 831Mb. &lt;br /&gt;
&lt;/strong&gt;Buon download!&lt;/p&gt;
&lt;p&gt;P.S. : grazie ad Alessandro Del Sole &lt;a href="http://community.visual-basic.it/Alessandro/archive/2008/08/17/23523.aspx"&gt;per il suo post di qualche giorno fa&lt;/a&gt;! :-)&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/651.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/08/27/651.aspx</guid>
            <pubDate>Wed, 27 Aug 2008 20:56:19 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/651.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/08/27/651.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/651.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/651.aspx</trackback:ping>
        </item>
        <item>
            <title>Quiz: perch&amp;egrave; NullReferenceException ?</title>
            <link>http://blog.vivendobyte.net/archive/2008/07/31/642.aspx</link>
            <description>&lt;p&gt;Questo metodo &lt;strong&gt;NetworkingSettings()&lt;/strong&gt; viene eseguito all’avvio di un’applicazione su Pocket PC 2003 su cui è installato il Compact Framework 2.0. Lo scopo, come si vede dal codice che ho scritto, è quello di creare nel registro di configurazione del dispositivo una certa chiave dentro &lt;em&gt;&lt;font color="#008040"&gt;HKLM\Comm\TcpIp\hosts&lt;/font&gt;&lt;/em&gt;. &lt;strong&gt;&lt;font color="#ff0000"&gt;Purtroppo ho inserito queste righe nella versione finale del software&lt;/font&gt;&lt;/strong&gt;, versione che è stata distribuita su una ventina di palmati Pocket PC, &lt;strong&gt;&lt;font color="#ff0000"&gt;con il risultato di scatenare un’eccezione NullReferenceException non gestita&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:97190890-7011-4622-91bf-e69ecae85ef8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; NetworkingSettings()
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;{            
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;    RegistryKey key &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Registry.LocalMachine.OpenSubKey(&lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\Comm\TcpIp\hosts\nome_server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;    
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (key &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;    {
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;        key &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Registry.LocalMachine.OpenSubKey(&lt;/span&gt;&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\Comm\TcpIp\hosts&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;        key &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; key.CreateSubKey(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;nome_server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] ip &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;]
&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;        {
&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #800080;"&gt;150&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800080;"&gt;80&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800080;"&gt;196&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;        };
&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt;        key.SetValue(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ipaddr&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, ip, RegistryValueKind.Binary);
&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;        key.Close();
&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Rispetto al codice in produzione ho cambiato alcune cose minimali: innanzitutto &lt;em&gt;nome_server&lt;/em&gt; è un dominio valido; seconda cosa, i quattro bytes del byte[] hanno valori differenti. La mia domanda è: &lt;strong&gt;&lt;font color="#004080"&gt;secondo voi, dove si scatena l’eccezione di cui sopra?&lt;/font&gt;&lt;/strong&gt; Una volta individuato il punto (che io già conosco), la domanda successiva è: &lt;strong&gt;&lt;font color="#004080"&gt;perchè?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/Registry" rel="tag"&gt;Registry&lt;/a&gt; &lt;a href="http://technorati.com/tag/Compact Framework" rel="tag"&gt;Compact Framework&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/642.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/07/31/642.aspx</guid>
            <pubDate>Thu, 31 Jul 2008 07:56:35 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/642.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/07/31/642.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/642.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/642.aspx</trackback:ping>
        </item>
        <item>
            <title>Usare in un DataTemplateSelector un ResourceDictionary definito in un file XAML</title>
            <link>http://blog.vivendobyte.net/archive/2008/07/29/641.aspx</link>
            <description>&lt;p&gt;Ok, il titolo di questo post è più confuso che altro. Amen.&lt;/p&gt;  &lt;p&gt;Nei giorni scorsi ho creato una class library per .NET Framework 3.5, all’interno del quale ci sono Windows in XAML, ResourceDictionary, immagini e video. C’è anche una bella classe &lt;strong&gt;TagDataTemplateSelector&lt;/strong&gt;, che eredita da &lt;strong&gt;DataTemplateSelector&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Come ben sa chi sviluppa in WPF, &lt;strong&gt;&lt;font color="#0000ff"&gt;una classe figlia di DataTemplateSelector ha un metodo pubblico SelectTemplate&lt;/font&gt;&lt;/strong&gt;, che restituisce un DataTemplate piuttosto che un altro, in base alla logica che implementiamo nel metodo stesso. Questo serve ad esempio se avete una ListBox e volete applicare un template differente per ogni elemento: supponiamo di avere una classe Person che espone una proprietà Sex, che può valere Sex.Male o Sex.Female usando un’enum. Se un’istanza ha Sex == Sex.Male, vogliamo uno sfondo azzurro, mentre se Sex == Sex.Female, vogliamo uno sfondo rosa. I DataTemplateSelector servono proprio a questo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Manco a farlo apposta, il mio esempio è un po’ più complesso di così.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All’interno di questa class library &lt;strong&gt;&lt;font color="#0000ff"&gt;ho creato un ResourceDictionary in un file TagStyle.xaml&lt;/font&gt;&lt;/strong&gt;. In questo ResourceDictionary ho definito due stili: &lt;strong&gt;InternetTag&lt;/strong&gt; e &lt;strong&gt;LocalTag&lt;/strong&gt;. Questi sono due stili praticamente identici, se non per un’immagine PNG che cambia. Ecco lo XAML che definisce lo stile &lt;strong&gt;InternetTag&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:bcdf028f-8c97-42b0-8d5a-61e9057b844f" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="InternetTag"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{x:Type ListBox}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ItemTemplate"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Image &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Source&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Images\InternetTagLogo.png"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Label &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;VerticalContentAlignment&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Center"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                           Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=Identifier}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                           FontSize&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="10pt"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                           Padding&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                           Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="110"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Label&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Il mio problema è che non riuscivo a restituire i due stili dalla classe TagDataTemplateSelector. Di solito, infatti, riesco a raggiungere l’istanza dello stile tramite l’applicazione corrente. In questo caso, invece, il codice gira dentro una class library, e quindi non ho un’applicazione istanziata. L’unico modo che ho trovato è quello di caricare il ResourceDictionary via codice, reperire gli stili definiti.&lt;/p&gt;

&lt;p&gt;Il costruttore del DataTemplateSelector è diventato quindi il seguente:&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:df35fc97-f58e-4dd8-9383-58fe05dc0389" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; TagDataTemplateSelector()
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;{
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;    ResourceDictionary dict &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ResourceDictionary();
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;    dict.Source &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Uri(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;pack://application:,,,/VivendoByte.WindowsLiveWriterPlugins.TechnoratiTagsWPF;component/TagStyle.xaml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;    Style s &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Style)dict[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;InternetTag&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;];
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;    Setter st &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Setter)s.Setters[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;    internetDataTemplate &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DataTemplate)st.Value;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;    s &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Style)dict[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LocalTag&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;];
&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;    st &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Setter)s.Setters[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];
&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;    localDiskDataTemplate &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DataTemplate)st.Value;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Alla riga 1 istanzio un ResourceDictionary, che viene riempito alla riga 2 specificando un Uri adeguato. In pratica, specifico l’assembly nel quale è contenuto il ResourceDictionary, e specifico anche il nome del file XAML. Le righe 7-9 e 11-14 hanno la stessa logica: nel primo blocco recupero lo style &lt;strong&gt;InternetTag&lt;/strong&gt;, poi il suo setter (riga 8) e salvo in un membro privato della classe il Value di quel setter. Tale membro privato è internetDataTemplate. La stessa cosa accade per l’altro stile &lt;strong&gt;LocalTag&lt;/strong&gt;, che viene salvato in localDiskDataTemplate.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Tutto questo accade nel costruttore. Il metodo &lt;strong&gt;SelectTemplate&lt;/strong&gt; diventa a questo punto un semplice switch:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:4d0bcd90-023e-4510-90e4-fe978d1cb4b5" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Windows.DataTemplate SelectTemplate(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; item, System.Windows.DependencyObject container)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;{
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (item &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; item &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&lt;span style="color: #000000;"&gt; TechnoratiTag)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;    {
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;        TechnoratiTag tag &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; item &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; TechnoratiTag;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (tag.Source)
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;        {
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TagSource.Internet:
&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;                {
&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; internetDataTemplate;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;                }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; TagSource.LocalDisk:
&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;                {
&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt;                    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; localDiskDataTemplate;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;                }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #000000;"&gt;        }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Il DataTemplate da restituire dipende come dicevamo da un valore della proprietà dell’oggetto item, che viene quindi &lt;em&gt;castato&lt;/em&gt; a TechnoratiTag. In base alla sua proprietà &lt;strong&gt;Source&lt;/strong&gt; restituisco alla ListBox un DataTemplate piuttosto che un altro.&lt;/p&gt;

&lt;p&gt;La particolarità di questa soluzione sta nel fatto che non passiamo da un’istanza di &lt;strong&gt;Application.Current&lt;/strong&gt;, perchè quest’ultima non esiste e di conseguenza vale null. Se potessimo accederci, invece, potremmo usare il metodo &lt;strong&gt;FindResource&lt;/strong&gt; per recuperare le risorse definite dentro App.xaml. Oppure potremmo usare la collection Windows[], ma neppure questo è fattibile. L’unica tecnica possibile, come mostrato dal codice, è quello di caricare a run-time un ResourceDictionary e cercare al suo interno i DataTemplate voluti.&lt;/p&gt;

&lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/wpf" rel="tag"&gt;wpf&lt;/a&gt; &lt;a href="http://technorati.com/tag/.NET Framework" rel="tag"&gt;.NET Framework&lt;/a&gt; &lt;a href="http://technorati.com/tag/template" rel="tag"&gt;template&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/641.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/07/29/641.aspx</guid>
            <pubDate>Tue, 29 Jul 2008 15:45:09 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/641.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/07/29/641.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/641.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/641.aspx</trackback:ping>
        </item>
        <item>
            <title>Aggiornamenti su VivendoByte Technorati Tags</title>
            <link>http://blog.vivendobyte.net/archive/2008/07/18/637.aspx</link>
            <description>&lt;p&gt;Ogni tanto vi tedio parlandovi del plug-in per Windows Live Writer che mi sono scritto in WPF per poter “compilare” velocemente i tags con cui marcare i post che poi finiscono dritti dritti sul mio blog. Ricordo che questo plug-in fa parte di una piccola suite &lt;a href="http://www.codeplex.com/VivendoByteWLWSuite" target="_blank"&gt;che ho pubblicato su CodePlex&lt;/a&gt;: i sorgenti sono pubblici e tutti voi potete utilizzarlo. Anzi, se mi trovate qualche baco, segnalatemelo!&lt;/p&gt;  &lt;p&gt;Ve ne parlo perchè nel frattempo qualcosa è cambiato. Vediamo di spiegare cosa e perchè.&lt;/p&gt;  &lt;p&gt;L’elenco di tags che il plug-in vi mostra arriva direttamente dal web-service esposto da &lt;a href="http://www.technorati.com" target="_blank"&gt;Technorati.com&lt;/a&gt;. Questo web-service chiede in input l’url di un blog e &lt;strong&gt;restituisce una List&amp;lt;string&amp;gt;&lt;/strong&gt;: fino alle precedenti versioni questa lista veniva &lt;em&gt;bindata&lt;/em&gt; ad una ListBox di WPF per poter essere selezionate dall’utente.&lt;/p&gt;  &lt;p&gt;Ho deciso di non utilizzare più stringhe, &lt;strong&gt;&lt;font color="#0000ff"&gt;ma di creare una classe ad-hoc TechnoratiTag&lt;/font&gt;&lt;/strong&gt;. Prima di potervi spiegare il perchè, occorre breve una premessa, relativa alle vecchie versioni del plug-in:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;se il PC su cui gira il plug-in risultava essere connesso alla Rete, allora l’elenco dei tags veniva preso da Technorati come spiegato prima &lt;/li&gt;    &lt;li&gt;se il PC su cui gira il plug-in NON risultava essere connesso alla Rete, l’elenco dei tags veniva preso da un file locale di cache, salvato in &lt;em&gt;&lt;font color="#008040"&gt;C:\Documents and Settings\Igor\Dati applicazioni\VivendoByte Technorati Tags&lt;/font&gt;&lt;/em&gt;. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Il web-service di Technorati restituisce i 100 tag più utilizzati: &lt;strong&gt;&lt;font color="#ff0000"&gt;se per caso ne inserivate uno a mano – non compreso nell’elenco – ve lo perdavate alla grande: il tag veniva salvato effettivamente sulla cache locale, ma in realtà non veniva più proposto, proprio perchè la cache locale veniva ignorata se eravate connessi alla Rete.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ho quindi pensato che la cosa migliore fosse quella di creare una List&amp;lt;TechnoratiTag&amp;gt;, che fosse l’unione dei tags presi da Technorati e presi dalla cache locale. La classe TechnoratiTag è così composta:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:65cee87c-332d-499f-8a40-1b37cd1c3746" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; TechnoratiTag
{
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; TagSource _source;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; _identifier;

    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; TagSource Source
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt; { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; _source; }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; { _source &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; value; }
    }

    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; Identifier
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt; { &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; _identifier; }
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; { _identifier &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; value; }
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;La proprietà &lt;strong&gt;TagSource&lt;/strong&gt; è un semplice enum che distingue i tags provenienti dalla Rete (TagSource.Internet) oppure dalla cache locale (TagSource.LocalDisk). L’implementazione del metodo &lt;strong&gt;LoadTags()&lt;/strong&gt; del mio repository service è la seguente:&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:7b05727c-053f-474e-b0f5-6000816d2443" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoadTags()
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;{
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #000000;"&gt;    List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; internetTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #000000;"&gt;    List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; localTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #000000;"&gt;    List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; tags &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (TestInternetAvaiableService.TestInternetAvaiable())
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #000000;"&gt;        internetTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.LoadRemoteTags();
&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #000000;"&gt;    localTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.LoadLocalTags();
&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (internetTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;        tags.AddRange(internetTags);
&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (localTags &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt; (TechnoratiTag t &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; localTags)
&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #000000;"&gt;        {
&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #000000;"&gt;            criteria &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; t.Identifier;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;tags.Exists(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Predicate&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TechnoratiTag&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(findTechnoratiTag)))
&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; &lt;span style="color: #000000;"&gt;                tags.Add(t);
&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt; &lt;span style="color: #000000;"&gt;        }
&lt;/span&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt; &lt;span style="color: #000000;"&gt;    tags.Sort(sortTechnoratiTag);
&lt;/span&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt; &lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; tags;
&lt;/span&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Alle righe 7 ed 8 vengono caricati i tags dal web-service di Technorati. Alla riga 10 vengono caricati i tags dalla cache locale. Questi due elenchi vengono fusi in un unico List&amp;lt;Technorati&amp;gt; alle linee 15-21, escludendo con una opportuna logica i doppioni. Il tutto viene ordinato e restituito al chiamante.&lt;/p&gt;

&lt;p&gt;Il risultato finale è che la ListBox di WPF non viene più &lt;em&gt;bindata&lt;/em&gt; da un elenco di stringhe, ma ad un elenco di TechnoratiTag. Ecco uno screenshot:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3120/2679230405_4dd985c7ff.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;Grazie ad un DataTemplateSelector viene applicato un template diverso a seconda del valore di ciascun TagSource: i tag che arrivano da Internet hanno un’iconcina con il globo, mentre quelli che arrivano dalla cache locale hanno un’iconcina del CD. &lt;strong&gt;&lt;font color="#0000ff"&gt;In questo modo anche tag poco usati, che magari Technorati non vi segnalerebbe, compaiono magicamente nella lista!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installazione
    &lt;br /&gt;&lt;/strong&gt;Oltre che su CodePlex, il download diretto dei binari è disponibile qui : &lt;a title="Windows Live Writer Plugins Technorati Tags WPF" href="http://enjoy.vivendobyte.net/igordamiani/Download/Windows%20Live%20Writer%20Plugins%20Technorati%20Tags%20WPF.zip"&gt;Windows Live Writer Plugins Technorati Tags WPF&lt;/a&gt;. E’ sufficiente aprire il file zip e dezippare il tutto in &lt;em&gt;&lt;font color="#004080"&gt;C:\Programmi\Windows Live\Writer\Plugins&lt;/font&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/Plugin" rel="tag"&gt;Plugin&lt;/a&gt; &lt;a href="http://technorati.com/tag/technorati" rel="tag"&gt;technorati&lt;/a&gt; &lt;a href="http://technorati.com/tag/codeplex" rel="tag"&gt;codeplex&lt;/a&gt; &lt;a href="http://technorati.com/tag/wpf" rel="tag"&gt;wpf&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/637.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/07/18/637.aspx</guid>
            <pubDate>Fri, 18 Jul 2008 14:34:26 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/637.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/07/18/637.aspx#feedback</comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/637.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/637.aspx</trackback:ping>
        </item>
        <item>
            <title>Uploader for Windows Sharepoint Services on CodePlex</title>
            <link>http://blog.vivendobyte.net/archive/2008/07/04/628.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Siccome &lt;a href="http://blogs.ugidotnet.org/stefandemetz/Default.aspx" target="_blank"&gt;c’è qualcuno interessato&lt;/a&gt;, oggi ho deciso di pubblicare su &lt;a href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt; il tool che ho scritto nelle settimane precedenti, &lt;strong&gt;Uploader for Windows Sharepoint Services&lt;/strong&gt;. Nome prolisso come è il mio stile.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;L’url dove trovare il tutto &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.codeplex.com/UploaderWSS" target="_blank"&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;è questo&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ci ho messo un po’ per pubblicarlo, ho dovuto ritagliarmi il tempo tra impegni di lavoro attuali e passati, tra vita privata e lavorativa e senza disdegnarne qualche giro (virtuale) &lt;a href="http://www.motorsportblog.it/post/4028/wtcc-doppietta-seat-a-curitiba" target="_blank"&gt;a Curitiba&lt;/a&gt; in Brasile.&lt;/p&gt;  &lt;p&gt;Ho ripulito il codice, ho tolto le informazioni sensibili (spero!) e ho messo on-line il tutto. Come ho già avuto modo di dire, si tratta di un tool che utilizzo anche io in prima persona, perciò state sicuri che il minimo bug verrà corretto e fixato. Se non da me, allora da chiunque vorrà scaricarsi il progetto e ricompilarlo.&lt;/p&gt;  &lt;p&gt;Caratteristiche principali del progetto:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;creato con Windows Forms &lt;/li&gt;    &lt;li&gt;si connette ad un’istanza di Sharepoint tramite web-services per &lt;em&gt;&lt;font color="#ff0000"&gt;uploadare&lt;/font&gt;&lt;/em&gt; files &lt;/li&gt;    &lt;li&gt;possibilità (più o meno già pronta) di aggiornare i metadati della document library &lt;/li&gt;    &lt;li&gt;possibilità di richiamare il tool dal classico &lt;strong&gt;SendTo&lt;/strong&gt; offerto da Windows (comodo!) &lt;/li&gt;    &lt;li&gt;multithreading per non bloccare l’interfaccia utente &lt;/li&gt;    &lt;li&gt;da oggi è open-source! &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Mi piacerebbe in futuro poter creare una feature interessante, cioè quella di sincronizzare un intero folder locale con una document library. Non come adesso…dove si lavora con un file alla volta. Chi vivrà, vedrà!&lt;/p&gt;  &lt;p&gt;Technorati Tags: &lt;a href="http://technorati.com/tag/codeplex" rel="tag"&gt;codeplex&lt;/a&gt; &lt;a href="http://technorati.com/tag/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt; &lt;a href="http://technorati.com/tag/tool" rel="tag"&gt;tool&lt;/a&gt; &lt;a href="http://technorati.com/tag/Upload" rel="tag"&gt;Upload&lt;/a&gt; &lt;a href="http://technorati.com/tag/Open-source" rel="tag"&gt;Open-source&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.vivendobyte.net/aggbug/628.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Igor Damiani</dc:creator>
            <guid>http://blog.vivendobyte.net/archive/2008/07/04/628.aspx</guid>
            <pubDate>Fri, 04 Jul 2008 11:25:00 GMT</pubDate>
            <wfw:comment>http://blog.vivendobyte.net/comments/628.aspx</wfw:comment>
            <comments>http://blog.vivendobyte.net/archive/2008/07/04/628.aspx#feedback</comments>
            <wfw:commentRss>http://blog.vivendobyte.net/comments/commentRss/628.aspx</wfw:commentRss>
            <trackback:ping>http://blog.vivendobyte.net/services/trackbacks/628.aspx</trackback:ping>
        </item>
    </channel>
</rss>