<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Evangelism 2.0: riflessioni sul business del software da un punto di vista privilegiato! : .NET General</title><link>http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx</link><description>Tags: .NET General</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Ricerca di Nucleus su Patterns &amp; Practices</title><link>http://blogs.msdn.com/scoriani/archive/2009/01/16/ricerca-di-nucleus-su-patterns-practices.aspx</link><pubDate>Fri, 16 Jan 2009 14:47:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9327248</guid><dc:creator>scoriani</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/9327248.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=9327248</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=9327248</wfw:comment><description>&lt;p&gt;Seguo molto attentamente l’evoluzione del programma &lt;a href="http://msdn.microsoft.com/practices"&gt;Patterns &amp;amp; Practices&lt;/a&gt; che i colleghi di MS Corporation hanno iniziato ormai tanti anni fa, praticamente con la nascita del .NET Framework, e lo considero una risorsa importantissima sia per le librerie di codice disponibili che per le interessantissime guide. Mi era sfuggita però questa ricerca di &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3696068D-BE4A-4731-AB15-492377AA4C6D&amp;amp;displaylang=en"&gt;Nucleus&lt;/a&gt; che presenta esperienze reali vissute da clienti e partner nell’adozione di questi strumenti insieme con suggerimenti e linee guida per introdurli nella propria organizzazione.&lt;/p&gt;  &lt;p&gt;Ho sperimentato personalmente il contenuto di questo paragrafo:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Prepare for adoption resistance &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Because patterns and practices introduces standardization and its benefits increase with the rate of reuse, the more broadly Microsoft patterns and practices is adopted, the greater will be the returns. However, changes to development practices typically encounter cultural issues, and Microsoft patterns and practices is no exception. Developers sometimes resist adoption because of its emphasis on     &lt;br /&gt;reuse, since developers typically prefer to create their own work rather than customize someone else’s.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;e credo che effettivamente sia lo scoglio più grande da superare per convincere le persone ad utilizzare le componenti di codice riutilizzabile disponibile. In ogni caso, con tutti le dovute cautele, il riutilizzo di tali componenti può portare vantaggi misurabili nello sviluppo di soluzioni di qualsiasi tipologia.&lt;/p&gt;  &lt;p&gt;Anche in questo caso, una letta è sicuramente utile…&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9327248" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category></item><item><title>Team Foundation Server Branching Guide 2.0</title><link>http://blogs.msdn.com/scoriani/archive/2008/12/22/team-foundation-server-branching-guide-2-0.aspx</link><pubDate>Mon, 22 Dec 2008 03:51:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9246011</guid><dc:creator>scoriani</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/9246011.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=9246011</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=9246011</wfw:comment><description>&lt;p&gt;Nella mia vita professionale ho lavorato, più o meno a stretto contatto, con diverse tipologie di aziende che si occupano di sviluppo software. Da quelle che lavorano più “a progetto”, dove ogni commessa è (quasi) diversa da un’altra, a chi invece si è dedicato alla creazione ed evoluzione di una o più linee di prodotto. Qualunque fosse la modalità con la quale queste aziende si presentavano sul mercato, il problema di gestire il ciclo di vita delle soluzioni software è sempre stato vitale, anche se poi nella realtà gli approcci adottati erano troppo approssimativi e poco efficaci.&lt;/p&gt;  &lt;p&gt;Qualche giorno fa è stata rilasciata su Codeplex la &lt;a href="http://www.codeplex.com/TFSBranchingGuideII"&gt;guida&lt;/a&gt; al branching con TFS, sviluppata da un gruppo di colleghi dei Servizi di Microsoft, chiamati VSTS Rangers, insieme con alcuni contributi esterni, che vuole essere uno strumento utile e interessante per dare uno spunto a chi, nei diversi scenari affrontati, ha proprio la necessità di capire quale strategia di branching è più adeguata alle sue esigenze.&lt;/p&gt;  &lt;p&gt;La guida, pur essendo stata pensata per TFS, può in realtà dare degli spunti utili anche per chi utilizza altri strumenti di gestione del codice sorgente e del processo di sviluppo.&lt;/p&gt;  &lt;p&gt;Secondo me una occhiata la merita.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9246011" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Software+Development+Process/default.aspx">Software Development Process</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/ALM/default.aspx">ALM</category></item><item><title>Riflessioni su Entity Framework v1 e vNext #2</title><link>http://blogs.msdn.com/scoriani/archive/2008/10/20/riflessioni-su-entity-framework-v1-e-vnext-2.aspx</link><pubDate>Mon, 20 Oct 2008 19:22:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9007716</guid><dc:creator>scoriani</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/9007716.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=9007716</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=9007716</wfw:comment><description>&lt;p&gt;&lt;strong&gt;EntityClient&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Entity Framework != O/RM &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sappiamo tutti che il buon vecchio pattern in un ADO.NET Data Provider è Connection/Command/Reader, dove attraverso una connessione fisica ad una base dati inviamo un comando in SQL nativo per quella particolare base dati per interagire con il modello logico che rappresenta la struttura fisica dei dati in un particolare database, ed eventualmente riceviamo uno stream di dati ai quali accediamo attraverso un approccio cursor-based in sola lettura. Per interagire con l’EDM, l’Entity Framework ci mette a disposizione un particolare Data Provider ADO.NET chiamato EntityClient. Quest’ultimo presenta l’identico pattern di utilizzo, ma invece di interagire con delle righe e delle colonne ci permette di interagire con delle entità. Accetta quindi un comando che, invece di essere in SQL nativo, ha una nuova sintassi orientata alle entità chiamata Entity SQL (o eSQL), indipendente dal dialetto SQL utilizzato dalla base dati sottostante e dalla struttura logica del database. Questo eSQL “capisce” invece quanto definito nell’EDM (meglio dire nei metadati generati a partire dall’EDM) in termini di relazioni, navigabilità tra le entità e quant’altro. Quando un comando eSQL viene passato all’EntityClient Provider questo lo traduce in un albero di comandi chiamato CCT (o Canonical Command Tree) che viene a sua volta girato all’ADO.NET Data Provider sottostante. Infatti, perchè quest’ultimo sia utilizzabile con EF ha come requisito fondamentale la capacità di ricevere un CCT e di tradurlo nel dialetto SQL che la base dati utilizzata è in grado di risolvere. In seguito all’esecuzione di questo comando l’ADO.NET Data Provider potrà restituire un DataReader all’EntityClient che, in accordo con quanto definito nei metadati generati a partire dall’EDM, prenderà i dati restituiti con un certo formato dalla base dati e li “manipolerà” restituendoli al chiamante con la “forma” delle entità richieste dalla query eSQL. A livello di mapping, i metadati contengono le informazioni legate all’area concettuale (CSpace, l’EDM vero e proprio), all’area di storage (SSpace, tutto ciò che è legato al modello logico dello spazio di storage, tabelle tipicamente ma potrebbe essere altro) e al mapping tra questi due “spazi” di rappresentazione delle informazioni. Questi metadati vengono generati a partire dai tre “asset” chiamati CSDL, MSL e SSDL, oggi conosciuti come schema XML, eventualmente embedded negli assembly della nostra applicazione ma domani chissà… :)&lt;/p&gt;  &lt;p&gt;Fino a qui, nulla di tutto questo ha a che fare direttamente con le funzionalità di un O/RM, mentre ha molto a che fare con una sorta di “azionabilità” o utilizzabilità dell’EDM da parte di altre tecnologie che necessitano di un modello concettuale di astrazione rispetto a diverse rappresentazione logiche di dati di natura diversa.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Entity Framework e O/RM&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dove EF inizia a sovrapporsi a tecnologie di Object/Relational Mapping è con l’entrata in campo degli Object Services, componente che abbandona il pattern Connection/Command/Reader per abbracciare concetti quali ObjectContext, DataClasses e ObjectQuery&amp;lt;T&amp;gt;. Gli Object Services possono ancora ricevere comandi in termini di eSQL, come l’Entity Client, ma invece di ritornare un Reader il risultato di una query è una enumerazione di qualche tipo (IEnumerable&amp;lt;T&amp;gt;), la materializzazione di oggetti sulla base delle informazioni restituite dai layer inferiori e delle informazioni relative al modello a oggetti (OSpace) e al mapping (OCSpace) contenute nei metadati. I servizi offerti sono relativi, per esempio, alla materializzazione degli oggetti secondo quanto richiesto dai comandi eseguiti al tracking dello stato delle istanze degli oggetti materializzati e alla persistenza delle modifiche nella base dati sottostante.&lt;/p&gt;  &lt;p&gt;Essendo ObjectQuery&amp;lt;T&amp;gt; una implementazione di IQueryable&amp;lt;T&amp;gt;, diventa naturale intuire che gli Object Services di EF sono naturalmente un provider LINQ e consentono quindi anche questa ulteriore modalità, oltre a eSQL di interagire con lo stack sottostante.&lt;/p&gt;  &lt;p&gt;Sicuramente in un confronto 1:1 con un tool O/RM esistente come NHibernate (POCO, Lazy Loading, ecc.) o altri, quanto messo a disposizione da EF in questo campo ha dei limiti (come &lt;a href="http://blogs.msdn.com/timmall/archive/2008/07/17/newsflash-ef-v1-0-was-not-intended-to-be-a-nhibernate-compete.aspx"&gt;ammesso&lt;/a&gt; anche da Tim, PM del prodotto) che la v2 sembra in grado di ridurre rapidamente (&lt;a href="http://blogs.msdn.com/jkowalski/archive/2008/09/25/ef-poco-adapter-updated-v1-03.aspx"&gt;qui&lt;/a&gt; e &lt;a href="http://blogs.msdn.com/jkowalski/archive/tags/EFLazyLoading/default.aspx"&gt;qui&lt;/a&gt; trovate già alcune implementazioni fatte da persone del team per testare gli scenari per la v2), ma l’obiettivo non è esattamente questo, quanto piuttosto una visione di più ampio respiro che spero queste mie riflessioni abbiano in qualche modo iniziato a spiegare.&lt;/p&gt;  &lt;p&gt;More to come…&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9007716" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>Storie di successo con NHibernate</title><link>http://blogs.msdn.com/scoriani/archive/2008/10/18/storie-di-successo-con-nhibernate.aspx</link><pubDate>Sat, 18 Oct 2008 03:40:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9004028</guid><dc:creator>scoriani</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/9004028.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=9004028</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=9004028</wfw:comment><description>&lt;p&gt;Forza ragazzi!! Ditemi che sapete fare meglio di &lt;a href="http://nhforge.org/wikis/successstories/success-stories.aspx"&gt;così&lt;/a&gt;… :)&lt;/p&gt;  &lt;p&gt;E’ un feedback che inizio a sentire spesso: &lt;strong&gt;tutti&lt;/strong&gt; ne parlano, certo, fa molto fighetto in questo momento, insieme ovviamente alle solite riflessioni architetturali, che nel 90% dei casi non sono nemmeno adatte agli scenari o ai requisiti del cliente, ma visto che:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Fa fighetto, di nuovo&lt;/li&gt;    &lt;li&gt;Tipicamente vi pagano a giornate no? Se ho un cliente al quale riesco a “vendere” i mirabolanti benefici di un approccio di un certo tipo, sono fatture che volano… &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Pochi&lt;/strong&gt; lo conoscono bene, e questo significa che molti andranno a tentoni, utlizzando uno strumento e un approccio che equivale spesso a “sparare con un cannone ad una zanzara”. &lt;/p&gt;  &lt;p&gt;Ricordiamoci che la maggior parte di noi non sta sviluppando solo applicazioni mission critical per andare sulla luna….&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Nessuno&lt;/strong&gt; vuole ancora prendersi la risponsabilità di metterci la sua faccia dietro ad un progetto così. Essendo un progetto non MS, come si fà poi ad incolparla in caso che il lavoro che abbiamo realizzato non funzioni a dovere???&lt;/p&gt;  &lt;p&gt;Mah, in ogni caso sui vari blog, forum e quant’altro si leggono delle conversazioni surreali, alcune al limite del ridicolo.&lt;/p&gt;  &lt;p&gt;Secondo me importante ricordare che:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Controllo, controllo, controllo&lt;/li&gt;    &lt;li&gt;CHI HA DETTO CHE IL DATASET E’ IL MALE ASSOLUTO? Come tutti gli strumenti bisogna vedere come si usa, e spesso viene usato a sproposito, e il problema dovrebbe essere del DataSet? Il primo che dice “è pesante….” dopo che si vedono certi mastodonti poi ne parliamo di persona. E quali sono i difetti e i pregi se lo utilizzo come contenitore generico (o meglio ancora tipizzato) di DTO? Non capisco certi thread che vedo in giro… ma siete tutti impazziti? Non date retta a quei 20 prestigiatori in cerca di autore (e di spettatori….).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Meditare gente, meditare…&lt;/p&gt;  &lt;p&gt;P.S: per la serie.. c’è gente che ha tanto tempo da &lt;a href="http://blogs.aspitalia.com/az/post2404/Podi-Benchmark-Linq-Entity-Framework-Nhibernate.aspx"&gt;perdere&lt;/a&gt; in cose veramente poco utili e obiettive…&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9004028" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Data+Programmability/default.aspx">Data Programmability</category></item><item><title>Project Velocity: e COM+ IMDB rivive!!</title><link>http://blogs.msdn.com/scoriani/archive/2008/06/09/project-velocity-e-com-imdb-rivive.aspx</link><pubDate>Mon, 09 Jun 2008 19:33:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8586401</guid><dc:creator>scoriani</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/8586401.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=8586401</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=8586401</wfw:comment><description>&lt;p&gt;Chi si occupava già di sviluppo sulla piattaforma Microsoft verso la fine degli anni '90, ricorderà che una delle ultime feature tagliate dall'ultima Beta prima del lancio di Windows 2000 si chiamava In Memory DataBase ed apparteneva alle tecnologie legate a COM+. La cosa passò abbastanza inosservata visto che allora non erano moltissime le applicazioni in architettura distribuita che avevano veramente bisogno di una tecnologia così avanzata, ma all'epoca le motivazioni date furono relative alla potenziale complessità che una soluzione di questo genere avrebbe potuto generare sulla piattaforma.&lt;/p&gt; &lt;p&gt;Oggi, a quasi 10 anni di distanza viene presentato il legittimo erede di IMDB, ovviamente integrato con il .NET Framework e per ora conosciuto come &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=B24C3708-EEFF-4055-A867-19B5851E7CD2&amp;amp;displaylang=en"&gt;Project Velocity&lt;/a&gt;, attualmente disponibile nella sua prima Community Technology Preview.&lt;/p&gt; &lt;p&gt;L'obiettivo di Velicity è quello di fornire alle applicazioni una cache in memoria altamente scalabile e distribuita, in modo da evitare chiamate non necessarie verso il database server, consentendo un incremento delle prestazioni in scenari di grande carico di lavoro. Ovviamente un obiettivo è quello di non impattare per questo sulla complessità delle applicazioni che andranno a utilizzare questo servizio, supportando anche scenari di concorrenza ottimistica e pessimistica e diverse modalità di configurazione.&lt;/p&gt; &lt;p&gt;Componenti del sistema sono un servizio Windows che si occupa della gestione fisica della cache, di una API che consenta ai programmatori di interagire con i servizi erogati e di una serie di file di configurazione del tutto, il tutto distribuibile all'interno di un "cluster" di nodi logici e fisici sulla rete. Ovviamente pre-requisito indispensabile è la versione 3.5 di Microsoft .NET Framework.&lt;/p&gt; &lt;p&gt;In attesa di ulteriori aggiornamenti vi consiglio di scaricare il tutto e di iniziare a fare qualche test, rigorosamente su una macchina NON di produzione :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8586401" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category></item><item><title>Microsoft Software Licensing and Protection (SLP) Services</title><link>http://blogs.msdn.com/scoriani/archive/2008/05/26/microsoft-software-licensing-and-protection-slp-services.aspx</link><pubDate>Mon, 26 May 2008 02:17:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8551640</guid><dc:creator>scoriani</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/8551640.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=8551640</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=8551640</wfw:comment><description>&lt;p&gt;Qualunque azienda che abbia fondato il proprio business sulla creazione e vendita di software si è posta almeno una volta la domanda su come fare per proteggere la proprietà intellettuale del prodotto realizzato e di evitarne l'utilizzo illegale. Si calcola che l'industria del software a livello mondiale perda qualcosa come 40B$ tra pirateria e contraffazione dei propri prodotti, e non si parla solamente delle grandi realtà multinazionali, ma anche delle piccole software house o system integrator locali che tanto hanno faticato a sviluppare e mettere a punto un proprio prodotto o una soluzione custom per uno o più clienti. Nel tempo sono nate centinaia di soluzioni a questo problema, qualcuna basata su sistemi artigianali e facilmente eludibili, altre su vere e proprie piattaforma di protezione e di gestione delle licenze d'uso. Microsoft è entrata da qualche tempo anche in questo mercato attraverso una soluzione dedicata a chi sviluppa codice managed (leggi che utilizza Microsoft .NET Framework come ambiente di esecuzione) chiamata appunto &lt;a href="http://www.microsoft.com/slps/Default.aspx"&gt;Microsoft Software Licensing and Protection Services&lt;/a&gt;, in breve SLP.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Come funziona?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;SLP si differenzia dalle tradizionali tecniche di Obfuscation, Encryption o Code Splitting (con l'utilizzo o meno di dispositivi esterni di sicurezza quali Smart Card o Secure Memory Stick), introducendo il concetto di &lt;em&gt;Secure Virtual Machine&lt;/em&gt; (SVM) e di &lt;em&gt;Secure Virtual Machine Language&lt;/em&gt;, termini assimilabili in qualche modo al concetto di "Virtual CPU" e relativo linguaggio. Al contrario di tecniche di encryption del &lt;em&gt;Microsoft Intermediate Language&lt;/em&gt; (MSIL), che deve essere decrittato prima di essere effettivamente eseguito dal &lt;em&gt;Common Language Runtime&lt;/em&gt; (CLR) di Microsoft .NET Framework, il SVML viene eseguito direttamente dalla SVM ospitata direttamente nell'applicazione, formando una coppia univoca diversa per ogni chiave generata dal sistema di gestione delle licenze.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_thumb.png" width="451" height="205"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In pratica il processo di protezione dell'applicazione aggiunge al ciclo tradizionale di sviluppo una fase nella quale, attraverso uno specifico tool chiamato &lt;em&gt;SLP Code Protector&lt;/em&gt;, viene eseguita una attività chiamata &lt;em&gt;Permutation&lt;/em&gt;. Le informazioni legate alla erogazione e gestione delle chiavi di licenza sono prodotte attraverso un prodotto chiamato &lt;em&gt;Microsoft SLP Server 2008 &lt;/em&gt;o, in piena chiave Software+Services, dai relativi &lt;em&gt;SLP Online Services&lt;/em&gt; combinati con gli &lt;em&gt;Activation Packs&lt;/em&gt;, ovviamente pacchetti di licenze singole di attivazione.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_thumb_1.png" width="456" height="127"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Non essendoci librerie esterne, chiavi esterne o embedded o altro del genere, diventa praticamente impossibile sia eseguire attività di reverse engineering sia violare i termini di licenza definiti.&lt;/p&gt; &lt;p&gt;L'obiettivo di SLP è anche quello di bilanciare le esigenze di protezione della proprietà intellettuale con quelle legate alle performance in fase di esecuzione di una applicazione protetta, per questo in fase definizione del codice da proteggere è possibile indicare quali sono le funzioni contenente la logica chiave, il core business dell'applicazione ed evitare invece quelle parti di codice non particolarmente significative. &lt;/p&gt; &lt;p&gt;Per intenderci, al termine della trasformazione il nostro codice sorgente potrebbe apparire, a chi tentasse di disassemblarlo, una cosa del genere:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_thumb_2.png" width="487" height="360"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Ovviamente la componente di back-end che si occupa di generare e gestire le licenze e le relative attivazioni fornisce un ricco set di funzionalità che consentono di creare differenti versioni del proprio applicativo (Es. Enterprise, Standard, ecc.) consentendo agli utenti l'accesso al solo livello di funzionalità acquistate, di creare delle versioni Trial o Time Bombed che scadono dopo un certo periodo di tempo o un determinato utilizzo da parte del cliente, controllando le attivazioni eseguite per ciascuna chiave e fornendo una completa reportistica su qualsiasi evento tracciato dal sistema e relativo alle operazioni legate al licensing eseguite dai propri clienti.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_thumb_3.png" width="477" height="392"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;A questo punto l'applicazione presenterà all'utilizzatore finale o a chi è deputato alla sua installazione una maschera simile a quella sottostante per l'attiviazione, supportando una moltitudine di modelli di licensing legati all'acquisto, l'utilizzo o l'aggiornamento della propria applicazione.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/scoriani/WindowsLiveWriter/MicrosoftSoftwareLicensingandProtectionS_E8D7/image_thumb_4.png" width="469" height="308"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In pratica Microsoft SLP consente a chiunque faccia business sulla rivendita di software pacchettizzato o su commessa, di proteggere la proprietà intellettuale della propria creazione garantendo un corretto ritorno economico da parte dei propri clienti che utilizzeranno una modalità semplice ed intuitiva per l'attivazione e l'utilizzo del software acquistato.&lt;/p&gt; &lt;p&gt;Sicuramente la scelta di limitare la disponibilità di questa soluzione al solo codice managed farà discutere, ma questa è una ulteriore conferma di come Microsoft posizioni in pole position la piattaforma .NET Framework per lo sviluppo di soluzioni su client, server e dispositivi. Sul mercato esistono comunque diversi partner (per esempio Acresso, i nuovi proprietari di InstallShield, tra gli altri) che forniscono soluzioni simili per chi ancora sviluppa nel mondo del codice nativo.&lt;/p&gt; &lt;p&gt;A questo indirizzo (&lt;a title="http://www.microsoft.com/slps/resources.aspx" href="http://www.microsoft.com/slps/resources.aspx"&gt;http://www.microsoft.com/slps/resources.aspx&lt;/a&gt;) potete trovare una serie di risorse tecniche per approfondire la conoscenza sul tema.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8551640" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/.NET+General/default.aspx">.NET General</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Business/default.aspx">Business</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Licensing/default.aspx">Licensing</category></item></channel></rss>