NeatCoding http://blogs.ugidotnet.org/Box/Default.aspx Che cos'è il genio? E' fantasia, intuizione, colpo d'occhio, velocità d'esecuzione. it-IT Alessandro Ghizzardi Subtext Version 2.6.0.0 NeatCoding http://blogs.ugidotnet.org/images/RSS2Image.gif http://blogs.ugidotnet.org/Box/Default.aspx 77 60 Ricersca sviluppatore Umbraco su Milano Off Topic http://blogs.ugidotnet.org/Box/archive/2011/06/16/ricersca-sviluppatore-umbraco-su-milano.aspx "Sporco" il wall perchè credo che il forum dell'area lavoro di UGI non sia poi così frequentato... :)<br /> <br /> Cerchiamo uno/due sviluppatori .NET con esperienza C# e (graditissima se ci fosse) conoscenza Umbraco (XSLT, custom datatype ed extension) a Milano, per aumentare il nostro organico interno. Il contratto e di assunzione, stiamo cercando persone con conoscenza ma da formare sui progetti interni e sulle problematiche del nostro team. Se siete interessati contattatemi tramite il contatto del blog, tramite twitter (ghizzardia), o sul sito di <a href="javascript:void(0);/*1308247305256*/">Umbracoitalia</a>.<img src="http://blogs.ugidotnet.org/Box/aggbug/100140.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2011/06/16/ricersca-sviluppatore-umbraco-su-milano.aspx Thu, 16 Jun 2011 21:01:48 GMT http://blogs.ugidotnet.org/Box/archive/2011/06/16/ricersca-sviluppatore-umbraco-su-milano.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/100140.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/100140.aspx Umbracoitalia ha i forum! ASP.NET Umbraco http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbracoitalia-ha-i-forum.aspx Dopo lunga gestazione, abbiamo inserito la funzionalità di <a target="_blank" href="http://www.umbracoitalia.org/forum">forum in Umbracoitalia.<br /> </a>Finalmente c'è un posto tutto italiano per scambiarsi problemi (e soluzioni) basate su questo CMS.<br /> <br /> Li abbiamo "lanciati" online a forza, quindi saranno magari pieni di bug... segnalateceli :)<img src="http://blogs.ugidotnet.org/Box/aggbug/99924.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbracoitalia-ha-i-forum.aspx Thu, 07 Apr 2011 20:56:18 GMT http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbracoitalia-ha-i-forum.aspx#feedback 2 http://blogs.ugidotnet.org/Box/comments/commentRss/99924.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/99924.aspx [Umbraco] Bug nel cut & paste da word in 4.6.1 ASP.NET Umbraco http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbraco-bug-nel-cut-paste-da-word-in-4.6.1.aspx La versione 4.6.1 di Umbraco è uscita con alcuni bug minori relativi alla parte editoriale.<br /> Uno dei più noiosi è un bug nel TinyMCE relativo al cut&amp;paste da word. Il bug è stato risolto nella versione 4.7, ma per chi non riuscisse ad upgradare in tempo, <a href="http://our.umbraco.org/forum/ourumb-dev-forum/bugs/16453-Pasting-from-word-%28tinymce3%29-not-working-correctly-in-version-461%20for%20more%20info" target="_blank">trovate qui</a> i dati relativi al bug ed anche il file javascript per fixare il problema.<img src="http://blogs.ugidotnet.org/Box/aggbug/99923.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbraco-bug-nel-cut-paste-da-word-in-4.6.1.aspx Thu, 07 Apr 2011 20:54:53 GMT http://blogs.ugidotnet.org/Box/archive/2011/04/07/umbraco-bug-nel-cut-paste-da-word-in-4.6.1.aspx#feedback 1 http://blogs.ugidotnet.org/Box/comments/commentRss/99923.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/99923.aspx Aprile... Off Topic http://blogs.ugidotnet.org/Box/archive/2011/04/06/aprile.aspx ... ma che succede ad Aprile? Perchè tutte le scadenze di tutti i progetti di tutti i clienti sono ad Aprile? Ma capita solo a me o anche a qualcun'altro?? <br /> <br /> P.S.... si, sono ancora vivo! Non credavate eh? :)<img src="http://blogs.ugidotnet.org/Box/aggbug/99917.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2011/04/06/aprile.aspx Wed, 06 Apr 2011 19:50:08 GMT http://blogs.ugidotnet.org/Box/archive/2011/04/06/aprile.aspx#feedback 8 http://blogs.ugidotnet.org/Box/comments/commentRss/99917.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/99917.aspx [Umbraco] Umbracoitalia finalmente online! Umbraco http://blogs.ugidotnet.org/Box/archive/2010/06/16/umbraco-umbracoitalia-finalmente-online.aspx <p> <br />Oddio.. in realtà è già dal 14 Maggio che siamo online…</p> <p>Ma le mie (note) manie di perfezionismo mi hanno portato ad attendere per il “lancio” ufficiale. <br />Il portale pubblicato un mese fa aveva alcune carenze (registrazione, sezione eventi, spazio dei partner) che mi hanno praticamente costretto ad aspettare oggi. Ora, appena finito la pubblicazione delle nuove sezioni, dopo aver perso diverse notti posso finalmente invitarvi a <a href="http://www.umbracoitalia.org/" target="_blank">visitare il sito di Umbracoitalia</a>, che presto si arricchirà di nuovi articoli e informazioni riguardanti questo splendido CMS.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dafaf064-8ac2-463c-bff9-920c4c8a96bd" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/Umbracoitalia" rel="tag">Umbracoitalia</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98802.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/06/16/umbraco-umbracoitalia-finalmente-online.aspx Wed, 16 Jun 2010 20:37:26 GMT http://blogs.ugidotnet.org/Box/archive/2010/06/16/umbraco-umbracoitalia-finalmente-online.aspx#feedback 1 http://blogs.ugidotnet.org/Box/comments/commentRss/98802.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98802.aspx [OT] Breve assenza&hellip; Off Topic Umbraco http://blogs.ugidotnet.org/Box/archive/2010/05/26/ot-breve-assenzahellip.aspx <p> <br />Sono stato un pò ingrato nei confronti di questo blog, nelle ultime settimane. </p> <p>Molti di voi avranno notato la mia assenza, molti altri no… forse più no :) In realtà in questo caso il lavoro c’entra ma relativamente, il grande colpevole è il mio impegno in un progetto community che, teoricamente, è già partito… ma ancora in sordina, perchè da perfezionista come sono preferisco parlarne ufficialmente quando sarà pronto come si deve :)</p> <p>Nel frattempo ringrazio chiunque abbia già partecipato al progetto (chi lo ha fatto, lo sa :)): io sto per partire per New York finalmente, per una mini meritata vacanza… al mio ritorno, vi aggiornerò ufficialmente sui progetti futuri :)</p><img src="http://blogs.ugidotnet.org/Box/aggbug/98647.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/05/26/ot-breve-assenzahellip.aspx Wed, 26 May 2010 12:41:33 GMT http://blogs.ugidotnet.org/Box/archive/2010/05/26/ot-breve-assenzahellip.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98647.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98647.aspx [Weekly Issue] Disabilitare il debug in ASP.NET a livello di server ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/05/13/weekly-issue-disabilitare-il-debug-in-asp.net-a-livello-di.aspx <p><a target="_blank" href="http://blogs.ugidotnet.org/Box/archive/0001/01/01/weekly-issue-web.config-ltcompilation-debugrdquotruerdquogt-e-produzione.aspx">Qualche post fa</a> avevo evidenziato i principali effetti deleteri dell’avere in produzione un applicativo con il debug abilitato. </p> <p>Ultimamente (ieri), mi è capitato ancora una volta di trovare un applicativo in produzione da parecchio tempo che, per motivi ancora da chiarire, si è ritrovato con il debug abilitato. Gli effetti sono stati che l’architettura bilanciata su due nodi continuava a cadere, provocando disservizio. Un frontend che fino al giorno prima reggeva tranquillamente un milione e mezzo di pagine viste al giorno, si è ritrovato a non sopportarne più di 400 mila, con gravi danni per l’advertising. Una volta riconfigurato il web.config, tutto è tornato agli antichi splendori.</p> <p>Per evitare questo problema, ringrazio Simone per avermi segnalato la direttiva di configurazione “<strong>deployment</strong>”:</p> <p><strong>&lt;configuration&gt; <br />    &lt;system.web&gt; <br />       &lt;deployment retail="true"/&gt; <br />    &lt;/system.web&gt; <br /> &lt;/configuration&gt;</strong></p> <p>Questa direttiva è disponibile solo a livello di macchina (quindi machine.config) e non a livello di applicazione. Come si legge nella <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms228298(v=VS.90).aspx">reference</a> (e un pò meglio <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx">qui</a> dal caro Scott), permette di disabilitare per tutta la macchina il debug ed il trace, mettendosi al riparo da eventuali “errori” dello sviluppatore o, peggio, del building server. </p> <p>La contropartita è che, se ci fosse mai la necessità di riabilitare il debug per un sito qualsiasi, non è possibile farlo senza cambiarlo per tutto il server… ma in ambienti di produzione collaudati direi che questo è un effetto abbastanza trascurabile, se paragonato ai benefici che porta.</p> <div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:055a90a0-beba-4ffb-bb4d-79401a0f97e9" class="wlWriterEditableSmartContent">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/ASP.NET">ASP.NET</a>,<a rel="tag" href="http://technorati.com/tags/debug">debug</a>,<a rel="tag" href="http://technorati.com/tags/deploy">deploy</a>,<a rel="tag" href="http://technorati.com/tags/machine.config">machine.config</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98555.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/05/13/weekly-issue-disabilitare-il-debug-in-asp.net-a-livello-di.aspx Thu, 13 May 2010 17:21:13 GMT http://blogs.ugidotnet.org/Box/archive/2010/05/13/weekly-issue-disabilitare-il-debug-in-asp.net-a-livello-di.aspx#feedback 1 http://blogs.ugidotnet.org/Box/comments/commentRss/98555.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98555.aspx [Umbraco] Macro o non Macro? Questo &egrave; il problema&hellip; ASP.NET Umbraco Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/05/11/umbraco-macro-o-non-macro-questo-egrave-il-problemahellip.aspx <p> <br />Chi di voi ha utilizzato almeno qualche volta Umbraco, conosce sicuramente il meccanismo potente delle macro. </p> <p>Come probabilmente sapete, le macro hanno la possibilità di essere “cachate” (utilizzano la cache nativa di ASP.NET) per evitare che vengano interpretate ogni volta. Questa funzionalità è, però, tanto utile quanto pericolosa. Il rischio, infatti, è di “abusare” in maniera eccessiva di questa facilitazione, soprattutto quando si parla di macro XSLT.</p> <p>Un esempio: chiunque lavori in XSLT da più di qualche ora sa che ci sono dei selettori che in generale è meglio evitare. Qualcosa come</p> <p><strong>$currentPage/ancestor-or-self::node//node</strong></p> <p>Permette di risalire tutto l’albero di umbraco e prendere _tutti_ i nodi figli, per effettuare magari qualche filtro. Il problema con questo approccio è che, ovviamente, finchè l’albero rimane sotto la quarantina di pagine non ci sono troppi problemi. Con siti medio complessi, il tempo di parsing dell’XML, che può raggiungere svariati megabyte, diventa proibitivo. Come risultato, l’application pool impiega una vita a partire e, quando la cache scade, il sito può subire dei forti rallentamenti a causa di questo genere di istruzioni, poichè Umbraco deve reinterpretare la macro prima di metterla in cache.</p> <p>Il mio consiglio è: ricordatevi che Umbraco viene fornito con una base dati. Niente ci vieta di “espanderlo” con delle nostre classi. In certi casi può essere necessario creare delle tabelle di appoggio, e caricare i dati “pesanti” con lavori asincroni. In altri casi, può essere semplicemente sufficente leggere direttamente i dati dal database. Ho visto ultimamente fare una query XSLT per restituire l’ultimo contenuto aggiornato… quando in realtà sarebbe bastata una stored procedure che prendeva l’ultimo record con published = 1 dalla tabella cmsDocument, ordinandolo per data. Una query assolutamente banale per un motore come SQL Server, ma che trasposta in XSLT può diventare un vero problema.</p> <p>In conclusione, pensiamo sempre se non ci sono modi migliori per effettuare operazioni che possono insistere su tutto l’albero dei contenuti, o su una gran parte di essi.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d86f0fdf-8129-407f-b107-435bc33830db" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/macro" rel="tag">macro</a>,<a href="http://technorati.com/tags/xslt" rel="tag">xslt</a>,<a href="http://technorati.com/tags/cache" rel="tag">cache</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98542.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/05/11/umbraco-macro-o-non-macro-questo-egrave-il-problemahellip.aspx Tue, 11 May 2010 12:08:40 GMT http://blogs.ugidotnet.org/Box/archive/2010/05/11/umbraco-macro-o-non-macro-questo-egrave-il-problemahellip.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98542.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98542.aspx [Umbraco] Import massivo ed errori di Lucene Weekly Issues Umbraco ASP.NET http://blogs.ugidotnet.org/Box/archive/2010/04/28/umbraco-import-massivo-ed-errori-di-lucene.aspx <p> <br />Una delle maggiori richieste quando si implementa qualcosa in Umbraco che ha del pregresso è, ovviamente, l’importazione.</p> <p>Personalmente, mi sono trovato bene con <a href="http://www.cmsimport.com/" target="_blank">CmsImport</a> (prima noto come UmbImport), un package commerciale che per 99 dollari permette di fare l’importazione “semplice” e, tramite custom action, maneggiare il documento importato in modo da fare virtualmente qualsiasi cosa. A meno che l’<a href="http://www.richardsoeteman.net/" target="_blank">autore</a> non abbia aggiornato la documentazione o il blog mentre leggete questo post, vi consiglio di scrivergli per chiedergli esempi: è possibile fare veramente tante cose e lui è molto disponibile ad aiutarvi, ma gli esempi e la documentazione online sono un pò carenti.</p> <p>Uno dei più “lunghi” problemi che ho avuto nel suo utilizzo è che, oltre i 100 nodi importati, tutto andava in bomba ed iniziavano ad essere lanciate strane eccezioni relative agli indici di <a href="http://lucene.apache.org/lucene.net/" target="_blank">Lucene</a>:</p> <p><strong>System.IO.IOException. The process cannot access the file [path to some lucene index file].</strong></p> <p>Googlando anche nelle community di Lucene, ho scoperto un comando</p> <p><strong>Lucene.Net.Store.FSDirectory.SetDisableLocks(true);</strong></p> <p>Che dovrebbe disabilirate il locking. Altrimenti, da quello che ho capito, il fatto che l’importazione non sia thread safe può fare accavallare le cose (praticamente lo stesso problema che si ha se si usa la funzionalità di reindicizzazione di Umbraco mentre qualcuno pubblica…)</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4501650d-5f14-4e96-909c-be18c6ae7945" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/CmsImport" rel="tag">CmsImport</a>,<a href="http://technorati.com/tags/Lucene" rel="tag">Lucene</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98455.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/04/28/umbraco-import-massivo-ed-errori-di-lucene.aspx Wed, 28 Apr 2010 17:17:28 GMT http://blogs.ugidotnet.org/Box/archive/2010/04/28/umbraco-import-massivo-ed-errori-di-lucene.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98455.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98455.aspx [Weekly Issue] SQL Server, clustered index e GUID Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/04/20/weekly-issue-sql-server-clustered-index-e-guid.aspx <p> <br />Il disegno di un database è un punto centrale per tutte le applicazioni. Nel mondo web, anche visto il funzionamento disconnesso di ADO.NET, è forse ancora più imperativo definire bene le cose prima di incorrere in errori.</p> <p>Una delle grandi diatribe relative alle tabelle è l’utilizzo delle chiavi primarie. Identity, GUID, chiavi composte… spesso non si sa cosa scegliere! Io, personalmente, cerco sempre di scegliere i GUID, quando il progetto lo consente. Ma non è, come sempre, “LA” soluzione. Bisogna ponderare di volta in volta per l’effettivo utilizzo.</p> <p>Nel caso, però, si scelgano di utilizzare i GUID, una funzione disponibile da SQL Server 2005 da ricordare assolutamente è <strong>NEWSEQUENTIALID()</strong>. Direttamente dalla guida:</p> <p><em>In SQL Server 2005 and later versions, you can use the NEWSEQUENTIALID() function generate GUIDs in a sequential order to help eliminate this fragmentation.</em></p> <p>Questo ci permette di evitare uno dei maggiori problemi nell’utilizzo dei GUID, insieme a quello ovviamente della relativa “grandezza” del tipo di dato.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8550cdfa-077c-4017-89ed-bf7056858a6b" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/sql+server" rel="tag">sql server</a>,<a href="http://technorati.com/tags/clustered+index" rel="tag">clustered index</a>,<a href="http://technorati.com/tags/GUID" rel="tag">GUID</a>,<a href="http://technorati.com/tags/newsequentialid" rel="tag">newsequentialid</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98411.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/04/20/weekly-issue-sql-server-clustered-index-e-guid.aspx Tue, 20 Apr 2010 21:31:04 GMT http://blogs.ugidotnet.org/Box/archive/2010/04/20/weekly-issue-sql-server-clustered-index-e-guid.aspx#feedback 1 http://blogs.ugidotnet.org/Box/comments/commentRss/98411.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98411.aspx [Weekly Issue] web.config, &lt;compilation debug=&rdquo;true&rdquo;&gt; e produzione ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/04/15/weekly-issue-web.config-ltcompilation-debugrdquotruerdquogt-e-produzione.aspx <p> <br />Spesso (troppo) vedo un gran numero di progetti web che finiscono in produzione senza le dovute precauzioni.</p> <p>La cosa peggiore che si può fare è, quasi certamente, dimenticarsi di cambiare l’attributo “debug” nel web.config quando si pubblica. Vedere</p> <p>&lt;compilation debug=”true”&gt; <br /> .. <br />&lt;/compilation&gt;</p> <p>nei web.config dei server di produzione dei miei clienti ormai mi da istinti omicidi :)</p> <p>Molti non lo fanno per pigrizia o perchè “così se c’è un errore, ho informazioni più dettagliate”. Questo approccio è _assolutamente sbagliato_: una forte politica di logging mette al sicuro dagli errori sconosciuti e, se proprio è necessario, si riabilita il debug ma solo per il tempo necessario ad ottenere le dovute informazioni.</p> <p>Questo perchè, anche se purtroppo molti lo ignorano, tenere il debug abilitato ha un sacco di effetti deleteri, tra cui:</p> <p>- I file creati nella directory temporanea di ASP.NET sono molti di più in debug che in release, quindi il framework deve gestire piu accessi al file system; <br />- La batch compilation non funziona. Quindi, invece di compilare tutte le pagine in una cartella, ASP.NET compila file per file... finchè qualcuno non "vede" la pagina questa non viene compilata! <br />- Le pagine non hanno timeout applicativo. Moooolto pericoloso se ci sono errori di qualsiasi genere che possono inchiodare le richieste (contando che ASP.NET ha richieste limitate, se 10 utenti chiedono una pagina che va in attesa di qualcosa, non viene tirato giù il processo e il server diventa autistico....) <br /> <br />Direi che già questi sono un ottimo motivo per levare quell’inutile direttiva :)</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f8c65276-0374-4c6f-aafa-89ad67470df0" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/ASP.NET" rel="tag">ASP.NET</a>,<a href="http://technorati.com/tags/Debug" rel="tag">Debug</a>,<a href="http://technorati.com/tags/Performance" rel="tag">Performance</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98368.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/04/15/weekly-issue-web.config-ltcompilation-debugrdquotruerdquogt-e-produzione.aspx Thu, 15 Apr 2010 16:41:58 GMT http://blogs.ugidotnet.org/Box/archive/2010/04/15/weekly-issue-web.config-ltcompilation-debugrdquotruerdquogt-e-produzione.aspx#feedback 5 http://blogs.ugidotnet.org/Box/comments/commentRss/98368.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98368.aspx [Weekly Issue] Header runat=server e doppio tag &lt;title&gt; ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/04/14/weekly-issue-header-runatserver-e-doppio-tag-lttitlegt.aspx <p> <br />Lavorando spesso con siti frontend, il <a href="http://it.wikipedia.org/wiki/Ottimizzazione_(motori_di_ricerca)" target="_blank">SEO</a> diventa una priorità non trascurabile.</p> <p>L’ottimizzazione per i motori di ricerca è una delle richieste più pressanti da parte del cliente, e questo porta spesso a dover generare titolo, keyword e abstract direttamente da backend (o, utilizzando un CMS, prendendolo dalle proprietà del documento corrente).</p> <p>Un problema che ho rilevato è che, interagendo direttamente con l’header runat=”server” e inserendo un tag &lt;title&gt; direttamente a runtime, il ASP.NET si “incasina” e, non sapendo che voi avete aggiunto effettivamente un tag &lt;title&gt; magari nel page_load, lo aggiunge lui. Questo porta ad avere due tag &lt;title&gt;, di cui uno vuoto e uno valorizzato con i vostri dati. </p> <p>Malgrado non sia effettivamente un errore, e non influisca negativamente sul ranking dei motori di ricerca, può essere poco divertente e far fallire qualche validatore di terze parti. Il consiglio che vi posso dare è di creare comunque un tag title con un dato ID, e di andare a modificare quello con un FindControl. In questo modo, la gestione è anche più pulita.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fa3b36b5-f191-436c-9c46-0fb5fe4647ac" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/SEO" rel="tag">SEO</a>,<a href="http://technorati.com/tags/Head" rel="tag">Head</a>,<a href="http://technorati.com/tags/Title" rel="tag">Title</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98363.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/04/14/weekly-issue-header-runatserver-e-doppio-tag-lttitlegt.aspx Wed, 14 Apr 2010 16:43:34 GMT http://blogs.ugidotnet.org/Box/archive/2010/04/14/weekly-issue-header-runatserver-e-doppio-tag-lttitlegt.aspx#feedback 2 http://blogs.ugidotnet.org/Box/comments/commentRss/98363.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98363.aspx [Weekly Issue] XSLT 1.0 e divisione ASP.NET Umbraco Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/03/31/weekly-issue-xslt-1.0-e-divisione.aspx <p> <br />Lavorando così tanto con Umbraco, XSLT ormai è diventato un mio secondo linguaggio.</p> <p>Scendere a patti con la paginazione in XSLT, spesso, può essere un problema. Il problema principale è la mancanza di divisione con resto: idiv è stata introdotta con XSLT 2.0, che purtroppo non è supportato dal Framework ne, quindi, da Umbraco.</p> <p>L’alternativa è:</p> <p>- Introdurre un parser XSLT di terze parti e mettersi a modificare il core (come quello di Altova, che è disponibile gratuitamente). Particolarmente complesso :)</p> <p>- Utilizzare la funzione <strong>floor()</strong>, che restituisce il numero intero indipendentemente da quello che viene dopo la virgola. </p> <p>Quindi utilizzando <strong>floor() </strong>in congiunzione con <strong>mod</strong> (resto della divisione, che invece esiste anche in XSLT 1.0) possiamo avere il classico vecchio “numero di pagine” senza particolari problemi!</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:93115189-58bc-405a-b624-06fd48399e2c" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/XSLT+1.0" rel="tag">XSLT 1.0</a>,<a href="http://technorati.com/tags/XSLT+2.0" rel="tag">XSLT 2.0</a>,<a href="http://technorati.com/tags/Paginazione" rel="tag">Paginazione</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98295.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/03/31/weekly-issue-xslt-1.0-e-divisione.aspx Wed, 31 Mar 2010 19:37:53 GMT http://blogs.ugidotnet.org/Box/archive/2010/03/31/weekly-issue-xslt-1.0-e-divisione.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98295.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98295.aspx [Umbraco] Tips and Tricks ASP.NET Umbraco Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/03/09/umbraco-tips-and-tricks.aspx <p> <br />Ci sono molte parti di Umbraco che hanno bisogno di essere… “aiutate” per funzionare correttamente!</p> <p>Molto si trova con la pratica, molto leggendo blog come il mio :) <br />Quindi, visto che non sono geloso, vi giro un altro blog da cui ricavo un sacco di informazioni utili, che spesso utilizzo:</p> <p><a title="http://www.nibble.be/" href="http://www.nibble.be/">http://www.nibble.be/</a></p> <p>A discapito dell’estensione, il sito è in comprensibilissimo inglese, e punta molto sull’argomento “startup” di Umbraco, che io spesso posso tralasciare per motivi pratici… </p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:91b69143-7a2c-489a-a725-eabbdbd3bb5f" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/Tips+%26+Tricks" rel="tag">Tips &amp; Tricks</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98163.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/03/09/umbraco-tips-and-tricks.aspx Tue, 09 Mar 2010 15:49:03 GMT http://blogs.ugidotnet.org/Box/archive/2010/03/09/umbraco-tips-and-tricks.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98163.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98163.aspx [Weekly Issue] ASP.NET, System.Drawing.Image.Save() e Generic Error in GDI+ ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/03/04/weekly-issue-asp.net-system.drawing.image.save-e-generic-error-in-gdi.aspx <p> <br />Utilizzando l’oggetto Image, può capitare di ricevere un errore, abbastanza criptico, che spesso è impossibile da interpretare:</p> <p><strong>Generic Error in GDI+</strong></p> <p>Chiaramente, i componenti COM non hanno la buona educazione di avvisarci riguardo a _quale_ sia effettivamente l’errore…. <br />Per fortuna, in ASP.NET le cause per questo errore sono principalmente due:</p> <p>1: Permessi. Ossia, stiamo cercando di salvare un immagine in un percorso in cui l’utente interattivo non ha i permessi di scrittura. Come al solito, ma non solo in questo caso, è buona norma assicurarsi che i permessi siano corretti soprattutto quando si portano i file dal proprio PC al server di stage/produzione</p> <p>2: Si sta chiamando il metodo Save() passandogli il full path del file. Non so perchè, ma in quasi tutte le prove che ho fatto questo metodo fallisce. Purtroppo, non in tutte. Il giorno in cui capirò perchè sarò, probabilmente, un uomo felice. Nel frattempo, ostento finta felicità utilizzando un oggetto FileStream:</p> <p>using (FileStream fileStream = System.IO.File.Create(filePath)) <br />{ <br />   img.Save(fileStream, ImageFormat.Jpeg); <br />}</p> <p>In questo modo, di solito, non fallisce :)</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:64a2a97a-f6e4-4454-8efd-6e23951ccf42" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Image.Save" rel="tag">Image.Save</a>,<a href="http://technorati.com/tags/GDI%2b" rel="tag">GDI+</a>,<a href="http://technorati.com/tags/FileStream" rel="tag">FileStream</a>,<a href="http://technorati.com/tags/ASP.NET" rel="tag">ASP.NET</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98136.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/03/04/weekly-issue-asp.net-system.drawing.image.save-e-generic-error-in-gdi.aspx Thu, 04 Mar 2010 17:04:07 GMT http://blogs.ugidotnet.org/Box/archive/2010/03/04/weekly-issue-asp.net-system.drawing.image.save-e-generic-error-in-gdi.aspx#feedback 4 http://blogs.ugidotnet.org/Box/comments/commentRss/98136.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98136.aspx [Weekly Issue] DataReader.GetOrdinal e invalid column name ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/03/03/weekly-issue-datareader.getordinal-e-invalid-column-name.aspx <p> <br />Mi è capitato un problema bizzarro, ultimamente, uno dei tanti in cui mi sto scontrando lavorando con siti con alto traffico di utenti.</p> <p>Il problema in questione era che il DataReader, improvvisamente, è “impazzito”, restituendo una System.IndexOutOfRangeException nel metodo GetOrdinal. In pratica, mi diceva che nel set di dati restituito mancava la colonna che cercava di leggere. Peccato che, nel metodo in questione, la colonna ci fosse, la stored fosse corretta… insomma, funzionasse tutto “normalmente”. Come nel classico dei bachi, il problema si presentava in maniera assolutamente randomica. Quindi, per esempio, andava perfettamente in 10 casi, l’undicesimo esplodeva.</p> <p>Il progetto in questione utilizza un mio “storico” data access helper, utilizzato ormai in una marea di progetti anche con più traffico, e più importanti, di questo. Quindi, ho cercato in altri punti il problema, senza arrivare a soluzione alcuna. Mi sono quindi rimesso in discussione, ed ho ricontrollato il data access, trovandolo senza falla (per fortuna!). L’unico dubbio che mi è, per fortuna, venuto, riguarda il fatto che il progetto era gestito da un’altra azienda, cui ho dato alcune dritte, ma che poteva tranquillamente aver male interpretato le mie istruzioni. Quindi, vado a rivedere _come_ è stato utilizzato il mio data access… ed ho trovato la magagna!</p> <p>In sostanza, il mio data access ha la possibilità di operare in ambiente multi transazionale. Aprendo una transazione, ed una connessione, il data access si predispone a “transazionare” tutti gli oggetti di business in un determinato contesto. Senza questa funzionalità attiva, il data access si predispone per aprire, utilizzare, e richiudere subito la connessione in modo da rimandarla nel pool. L’utilizzo improprio, invece, ha fatto in modo che la connessione venisse aperta _fuori da un contesto transazionale_, e poi di fila venivano chiamati 5 o 6 metodi che riempivano un reader e lo consumavano, chiudendolo ma senza utilizzare CommandBehavior.CloseConnection. Alla fine di tutto, veniva chiusa la connessione. </p> <p>Senza nessun contesto transazionale attivo, e vista l’intrinseca concorrenzialità di un progetto web, succedeva che i dati del datareader venissero “mischiati” da una chiamata arrivata tra la lettura e l’effettivo consumo del reader. Ho trovato una buona spiegazione di questo problema in <a href="http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/74a5db87-c63f-4386-b317-e848dedb2cd9" target="_blank">questo post</a> sul forum. Per risolvere è bastato rimuovere le connessioni aperte e chiuse in maniera programmatica, e lasciare fare a lui il suo lavoro. </p> <p>E con questo siamo a due problemi di concorrenza su thread nel corso di una sola settimana… è un segno che, in giro, si fa troppa poca attenzione a questo genere di problematiche? :)</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:49be976c-f0cb-492a-8655-567bc81b17aa" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Multithread" rel="tag">Multithread</a>,<a href="http://technorati.com/tags/ADO.NET" rel="tag">ADO.NET</a>,<a href="http://technorati.com/tags/IndexOutOfRangeException" rel="tag">IndexOutOfRangeException</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98128.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/03/03/weekly-issue-datareader.getordinal-e-invalid-column-name.aspx Wed, 03 Mar 2010 16:25:45 GMT http://blogs.ugidotnet.org/Box/archive/2010/03/03/weekly-issue-datareader.getordinal-e-invalid-column-name.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98128.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98128.aspx [Weekly Issue] Generic collection &amp; Multithread ASP.NET Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/03/01/weekly-issue-generic-collection-amp-multithread.aspx <p> <br />In uno dei tanti progetti che sto seguendo, mi è capitato un errore di quelli che nessuno vorrebbe mai avere: l’applicativo schizza come una lippa ma, improvvisamente, la CPU schizza al 100% (su un server con 16 core e 16 giga di ram…) e rimane li, inchiodata, per quasi un minuto. Poi va giù, senza generare errori rappresentativi, e ritorna a funzionare… per non si sa quanto!</p> <p>Abbiamo passato differenti giornate a cercare di capire il problema. Alla fine, siamo abbastanza sicuri di aver isolato la causa: l’utilizzo di una cache esterna basata su Dictionary, “falliva” in ambiente multithread in quanto si era dimenticata che le Generic Collection non sono thread-safe. Come dice giustamente in <a href="http://blogs.msdn.com/bclteam/archive/2005/03/15/396399.aspx" target="_blank">questo post</a>, la funzionalità è stata volutamente lasciata fuori. Peccato che, in certi casi, un FindElement su una collection che è magari stata modificata nel frattempo da un altro thread, può portare .NET a un loop infinito (e questo, però, vorrei tanto capire per quale motivo dovrebbe succedere….). <a href="http://blogs.msdn.com/tess/archive/2009/12/21/high-cpu-in-net-app-using-a-static-generic-dictionary.aspx" target="_blank">Questo post</a> mi ha abbastanza aperto gli occhi sul motivo per cui si sono rivelati i problemi! </p> <p>Modale della favola: fate attenzione quando utilizzate tutti gli oggetti, anche quelli forniti dal Framework, e controllate bene se sono thread-safe, in caso vogliate usarli in applicativi con alto traffico! Ora, rimane solo da vedere se la cosa risolve veramente :)</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8f21a4eb-14d1-4e66-89f4-8a3edc7ad554" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Generics" rel="tag">Generics</a>,<a href="http://technorati.com/tags/ASP.NET" rel="tag">ASP.NET</a>,<a href="http://technorati.com/tags/Multithread" rel="tag">Multithread</a>,<a href="http://technorati.com/tags/List" rel="tag">List</a>,<a href="http://technorati.com/tags/Dictionary" rel="tag">Dictionary</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98117.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/03/01/weekly-issue-generic-collection-amp-multithread.aspx Mon, 01 Mar 2010 19:06:48 GMT http://blogs.ugidotnet.org/Box/archive/2010/03/01/weekly-issue-generic-collection-amp-multithread.aspx#feedback 2 http://blogs.ugidotnet.org/Box/comments/commentRss/98117.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98117.aspx [Umbraco] Template, XSLT e parametri ASP.NET Umbraco Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/02/25/umbraco-template-xslt-e-parametri.aspx <p> <br />Probabilmente molti di voi, usando Umbraco, si appoggiano a dei template XSLT per gestire le proprie macro. Se già non lo fate, iniziate a farlo… la gestione dei template è importante, e permette di mantenere gli XSLT relativamente semplici da gestire.</p> <p>Una comodissima funzionalità dei template XSLT è la possibilità di richiamare un dato template, passando dei parametri. Questi parametri possono essere passati, o avere un valore di default che verrà utilizzato all’interno del template stesso. </p> <p>Per dichiarare il template con i parametri, la sintassi è </p> <p>&lt;xsl:template match="node" mode="list"&gt; <br />    &lt;xsl:param name="startingLetter"&gt;A&lt;/xsl:param&gt; <br />    &lt;!-- do something here –&gt; <br />&lt;/xsl:template&gt;</p> <p>Per richiamarlo, invece, la sintassi è </p> <p>&lt;xsl:apply-templates select="$currentPage" mode="list"&gt; <br />    &lt;xsl:with-param name="startingLetter"&gt; <br />        &lt;xsl:value-of select="$startingLetter" /&gt; <br />    &lt;/xsl:with-param&gt; <br />&lt;/xsl:apply-templates&gt;</p> <p>In questo modo, se non si passa il parametro, il template prenderà il valore di default “A”.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c4ccb65d-b2cb-46ac-9f92-cb82e1a2afe9" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Template" rel="tag">Template</a>,<a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/Xslt.+Parametri" rel="tag">Xslt. Parametri</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98100.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/02/25/umbraco-template-xslt-e-parametri.aspx Thu, 25 Feb 2010 16:51:53 GMT http://blogs.ugidotnet.org/Box/archive/2010/02/25/umbraco-template-xslt-e-parametri.aspx#feedback http://blogs.ugidotnet.org/Box/comments/commentRss/98100.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98100.aspx [OT] Finally live&hellip; Vogue Italia! Off Topic Umbraco http://blogs.ugidotnet.org/Box/archive/2010/02/24/ot-finally-livehellip-vogue-italia.aspx <p> <br />… e speriamo che sia l’inizio di un periodo con più sonno! :)</p> <p>E’ online da pochi minuti il <a href="http://www.vogue.it" target="_blank">nuovo sito di Vogue Italia</a>, la mia ultima fatica in Umbraco! Così capirete cosa intendo quando parlo di “siti impossibili” usando Umbraco :) </p><img src="http://blogs.ugidotnet.org/Box/aggbug/98092.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/02/24/ot-finally-livehellip-vogue-italia.aspx Wed, 24 Feb 2010 01:07:08 GMT http://blogs.ugidotnet.org/Box/archive/2010/02/24/ot-finally-livehellip-vogue-italia.aspx#feedback 5 http://blogs.ugidotnet.org/Box/comments/commentRss/98092.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98092.aspx [Umbraco] Remove old versions ASP.NET Umbraco Weekly Issues http://blogs.ugidotnet.org/Box/archive/2010/02/23/umbraco-remove-old-versions.aspx <p> <br />Umbraco ha alcune grandi pecche. Una delle più grandi è la crescita, a volte incontrollata, della base dati. Questo succede perchè per ogni salvataggio, Umbraco si tiene una versione di tutte le proprietà specificate per un DocumentType, nella tabella cmsPropertyData. Questo è comodissimo dal punto di vista redattoriale, ma per siti con grande ricambio di dati (come le testate giornalistiche che sto seguendo in questo periodo) si traduce in una crescita veramente esponenziale. Inoltre, anche la tabella umbracoLog cresce a dismisura, poichè non è possibile filtrare il livello di verbosity: o si spegne tutto, o ci si becca qualsiasi operazione loggata (salvataggio, pubblicazione, etc). Su <a href="http://www.style.it" target="_blank">Style.it</a>, lanciato a fine Novembre, in soli tre mesi di attività eravamo arrivati a 4gb di dati. </p> <p>Per la umbracoLog, è necessario cancellare la tabella. Per le versioni vecchie, invece, purtroppo non è prevista (per ora) una funzionalità di cancellazione delle versioni vecchie. E’ quindi necessario farlo a mano. In <a href="http://blog.thoehler.com/2009/01/08/cleaning-versions-in-the-umbraco-db-for-given-nodes-via-sql" target="_blank">questo post</a>, viene spiegato quali istruzioni SQL lanciare per farlo. Dopo aver cancellato le ultime versioni ed eseguito il clear del log, il database si è ridotto da 4gb a 400mb.</p> <p>Esistono anche dei tools offline, la maggior parte non sono aggiornati. I più “recenti”, cioè quelli che dicono di funzionare sulla 4.x, sono i <a href="http://clienttools4umbraco.codeplex.com/" target="_blank">Client Tools for Umbraco</a>, che però purtroppo non sono mai riuscito a far funzionare… se qualcuno ci riesce me lo faccia sapere :)</p> <p>Io personalmente ho una stored, grazie all’aiuto di Xeed, che prende le ultime versioni precedenti ad una certa data, e cancella i relativi dati. Molto utile per evitare di zappare tutti i contenuti alla redazione: lasciargli solo l’ultima settimana di aggiornamenti è piu che sufficente per salvare spazio, e mantiene un certo livello di sicurezza agli editori.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5af083c9-4d7a-432b-b5e9-c6c2add3d2de" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Umbraco" rel="tag">Umbraco</a>,<a href="http://technorati.com/tags/Old+Versions" rel="tag">Old Versions</a>,<a href="http://technorati.com/tags/umbracoLog" rel="tag">umbracoLog</a>,<a href="http://technorati.com/tags/cmsPropertyData" rel="tag">cmsPropertyData</a></div><img src="http://blogs.ugidotnet.org/Box/aggbug/98090.aspx" width="1" height="1" /> Alessandro Ghizzardi http://blogs.ugidotnet.org/Box/archive/2010/02/23/umbraco-remove-old-versions.aspx Tue, 23 Feb 2010 19:53:37 GMT http://blogs.ugidotnet.org/Box/archive/2010/02/23/umbraco-remove-old-versions.aspx#feedback 2 http://blogs.ugidotnet.org/Box/comments/commentRss/98090.aspx http://blogs.ugidotnet.org/Box/services/trackbacks/98090.aspx