<?xml version="1.0" encoding="iso-8859-15"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>blogs.ASPItalia.com</title><link>http://blogs.aspitalia.com//cradle//</link><description>blogs.ASPItalia.com</description><language>it-it</language><copyright>1998-2012 ASPItalia.com/blogs.ASPItalia.com</copyright><generator>Generated by feed.ASPItalia.com 'Cortana' 2012.1.31</generator><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><sy:updateBase>1998-01-01T12:00+00:00</sy:updateBase><lastBuildDate>Thu, 12 Jan 2012 08:30:00 GMT</lastBuildDate><image><title>blogs.ASPItalia.com</title><url>http://gui.aspitalia.com/images/aspitalia/syndication.gif</url><link>http://blogs.aspitalia.com//cradle//</link></image><item><title>PhoneGap e Titanium, esiste davvero il write once run anywhere su mobile?</title><link>http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx</link><pubDate>Thu, 12 Jan 2012 08:30:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2730" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;Ultimamente si fa davvero un gran parlare di framework che consentono di sviluppare sulle varie piattaforme mobile, &lt;strong&gt;senza dover necessariamente scrivere codice nativo&lt;/strong&gt;. Tra queste, probabilmente la più famosa è &lt;strong&gt;&lt;a href="http://phonegap.com/"&gt;PhoneGap&lt;/a&gt;&lt;/strong&gt;, ultimamente davvero non passa giorno senza che venga nominata da qualche parte, ma anche &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator Titanium&lt;/a&gt;, seppur meno menzionato, recita in un ruolo di protagonista nell'ambito di questo genere di prodotti. Alcune settimane fa, con &lt;a href="http://www.5dlabs.it/"&gt;&lt;strong&gt;5DLabs&lt;/strong&gt;&lt;/a&gt; abbiamo fatto una serie di studi di fattibilità in merito per conto di un cliente, e ho pensato di riportarvi un po' l'esperienza maturata. &lt;/p&gt; &lt;p&gt;Ma andiamo con ordine e spendiamo qualche parola su PhoneGap e Titanium per capire un po' meglio di cosa stiamo parlando. Iniziamo col dire che ambedue questi servono per sviluppare &lt;strong&gt;applicazioni native&lt;/strong&gt;, pronte cioè a essere distribuite tramite &lt;strong&gt;AppStore&lt;/strong&gt;, &lt;strong&gt;Android Market&lt;/strong&gt;, &lt;strong&gt;Marketplace &lt;/strong&gt;di Window Phone, ecc.ecc.. Entrambi utilizzano &lt;strong&gt;Javascript&lt;/strong&gt; come linguaggio di sviluppo, ma con due filosofie profondamente diverse. In ogni caso, non possono prescindere, ovviamente, dagli SDK nativi per queste piattaforme. Conseguenza: se dovete sviluppare per iOS vi serve comunque un &lt;strong&gt;Mac con OSX&lt;/strong&gt;.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;PhoneGap&lt;/h3&gt; &lt;p&gt;PhoneGap è un framework di sviluppo &lt;strong&gt;ibrido&lt;/strong&gt;, nel senso che consente di realizzare App native per un &amp;#xa0;gran numero di piattaforme (sono supportate tutte le più diffuse, &lt;a href="http://phonegap.com/about/features/"&gt;come riportato qui&lt;/a&gt;) utilizzando &lt;strong&gt;HTML5 + CSS3 + Javascript&lt;/strong&gt;. Ok, ma come funziona nella pratica? Un'applicazione PhoneGap fondamentalmente è costituita da un'insieme di pagine eseguite all'interno di &lt;strong&gt;un controllo browser&lt;/strong&gt;, pagine il cui codice Javascript sostituisce&lt;strong&gt; in tutto e per tutto&lt;/strong&gt; quello che scriveremmo in Objective-C, Java o C#. Dovete invocare un servizio web? Chiamata AJAX, magari con &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;. Dovete realizzare una form di input di dati? Vai di styling CSS, o &lt;a href="http://jquerymobile.com/"&gt;jQuery Mobile&lt;/a&gt; o &lt;a href="http://www.sencha.com/products/touch"&gt;Sencha Touch&lt;/a&gt; che dir si voglia.&lt;/p&gt; &lt;p&gt;Ok, ma allora a cosa serve il framework? Beh, PhoneGap, oltre ad una serie di template di progetto per i vari ambienti di sviluppo, fondamentalmente è costituito da una libreria javascript che fa da &lt;strong&gt;bridge&lt;/strong&gt; tra il nostro codice in pagina e le funzionalità native del telefono, dandoci di fatto la possibilità di accedere a funzionalità native del sistema e del dispositivo, come i &lt;strong&gt;contatti&lt;/strong&gt;, il &lt;strong&gt;GPS&lt;/strong&gt; o la &lt;strong&gt;fotocamera&lt;/strong&gt;.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Punti a favore&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Sicuramente il fatto che &lt;strong&gt;non dobbiamo praticamente imparare nulla&lt;/strong&gt;, il Javascript è quello che abbiamo sempre usato, i framework anche, stesso discorso per i &lt;strong&gt;tool&lt;/strong&gt; (e scusate se è poco!). Il passo per convertire un'app web in una nativa è davvero brevissimo. Inoltre l'enorme numero di dispositivi supportati, praticamente tutti gli smartphone moderni, è sicuramente un fattore non trascurabile. In buona sostanza, &lt;strong&gt;ad un costo quasi zero&lt;/strong&gt; siamo in grado di sviluppare un'app nativa, anche considerando la natura assolutamente gratuita di questo prodotto. Non male eh? Purtroppo però non finisce qui.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Svantaggi&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Diversi aspetti mi hanno deluso di PhoneGap, che presenta dei limiti davvero pesanti a causa dei quali non mi sono sentito di consigliarne l'adozione. In particolare, in ordine sparso:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Siamo fondamentalmente costretti a &lt;strong&gt;reinventare la ruota&lt;/strong&gt;: possiamo in buona sostanza&lt;strong&gt; dimenticarci tutti i controlli nativi&lt;/strong&gt; per la piattaforma, con il risultato che le applicazioni &lt;strong&gt;perdono&lt;/strong&gt; completamente il look &amp;amp; feel tipico del dispositivo su cui girano. Esistono alcuni plugin che supportano il rendering di 3 o 4 controlli nativi (AFAIK, TabBar, Toolbar, ActionSheet e StatusBar, e solo su iPhone), ma in questo modo si perde la portabilità. Ne vale davvero la pena, allora? &lt;/li&gt;&lt;li&gt;Conseguenza diretta del punto precedente, è che la nostra app &lt;strong&gt;rischia di non essere accettata&lt;/strong&gt;. Alcuni reviewers sono molto attenti, ad esempio, al rispetto delle guidelines della UX. Fatevi un giro su google e cercate &amp;quot;PhoneGap app rejected&amp;quot; e troverete davvero tanti casi. &lt;/li&gt;&lt;li&gt;Generalmente il funzionamento dell'applicazione è &lt;strong&gt;meno responsivo e fluido&lt;/strong&gt; di una eventuale controparte nativa (ma questo, invero, dipende dalla bontà del browser). &lt;/li&gt;&lt;li&gt;Il codice è &lt;strong&gt;interpretato&lt;/strong&gt;, niente compilazione. Quindi gli unici errori sono a &lt;strong&gt;runtime&lt;/strong&gt;. Già così non è il massimo, ma, more than worse, ... &lt;/li&gt;&lt;li&gt;..il &lt;strong&gt;debug&lt;/strong&gt;, come modernamente lo intendiamo, è praticamente &lt;strong&gt;impossibile&lt;/strong&gt;. Scordatevi di mettere un breakpoint nel codice e di procedere step by step. Molti consigliano di eseguire l'applicazione su un browser tradizionale e debuggare da lì, ma a me sembra un timido palliativo, il debug lo &lt;strong&gt;voglio&lt;/strong&gt; eseguire dal telefono o dal tablet! Alla fine vi toccherà tornare all'antico, con un sacco di begli &lt;strong&gt;alert&lt;/strong&gt; sparsi qua e là nel codice. &lt;/li&gt;&lt;li&gt;Per alcune funzionalità (es. riproduzione video) vi toccherà comunque imparare il codice nativo . &lt;/li&gt;&lt;li&gt;PhoneGap &lt;strong&gt;non&lt;/strong&gt; è Write Once Run Anywhere, semplicemente perchè se volete supportare n dispositivi avrete&lt;strong&gt; n progetti&lt;/strong&gt;, magari ognuno la &lt;strong&gt;copia&lt;/strong&gt; dell'altro, ma sempre n progetti da &lt;strong&gt;manutenere&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Appcelerator Titanium&lt;/h3&gt; &lt;p&gt;Iniziamo dicendo che Titanium è un &lt;strong&gt;prodotto commerciale&lt;/strong&gt;, si paga una fee mensile per utilizzarlo e sono previsti diversi livelli di abbonamento (tra cui uno &amp;quot;community&amp;quot; gratuito) che si distinguono, oltre che per il supporto, anche in base alle funzionalità attive. Il linguaggio utilizzato è sempre Javascript, ma l'approccio rispetto a PhoneGap è &lt;strong&gt;sensibilmente differente&lt;/strong&gt;: il codice che scriviamo, infatti, questa volta non ha nulla a che vedere con HTML, CSS o sviluppo Web in generale, bensì si appoggia ad un &lt;strong&gt;object model proprietario&lt;/strong&gt; che wrappa gli oggetti nativi delle varie piattaforme. Il risultato è che il progetto Titanium &lt;strong&gt;genera codice nativo&lt;/strong&gt;, con un layer che ne consente l'invocazione via Javascript.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Punti a favore&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Titanium ha un &lt;strong&gt;IDE proprietario&lt;/strong&gt;, basato su Eclipse. Supporta l'autocompletamento del codice e ha un &lt;strong&gt;debugger integrato&lt;/strong&gt;, basato su Firebug. Quando creiamo un nuovo progetto ci viene chiesto quali piattaforme supportare come target, poi in fase di compilazione scegliamo su quale compilare. Corollario: &lt;strong&gt;il progetto resta uno solo&lt;/strong&gt;, non dobbiamo manutenerne n copie, molto più vicino all'idea di write once run anywhere. &lt;/p&gt; &lt;p&gt;Anche qui, comunque, è richiesta la presenza degli SDK ufficiali, quindi se vogliamo sviliuppare su iOS non abbiamo scelta e dobbiamo lavorare su OSX. Il risultato finale, comunque, è davvero notevole, e soprattutto &lt;strong&gt;indistinguibile&lt;/strong&gt; da una qualsiasi app realizzata con XCode o Android SDK + Eclipse. Ovviamente &lt;strong&gt;non tutti gli oggetti&lt;/strong&gt; di Titanium hanno corrispondenti sia su iOS che su Android, e pertanto alle volte è necessario qualche &amp;quot;&lt;em&gt;if (platform == iOS)&lt;/em&gt;&amp;quot;, ma alla fine non è drammatico.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Problemi&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Il limite principale di Titanium è che, al momento, &lt;strong&gt;supporta esclusivamente Android e iOS&lt;/strong&gt;. Niente Windows Phone, pertanto. Però può essere comunque interessante valutarlo se il nostro team è già skillato sulla piattaforma Microsoft e vogliamo comunque produrre applicazioni per questi altri due target.&lt;/p&gt; &lt;p&gt;Da un punto di vista dell'utilizzo, il primo ostacolo in cui mi sono imbattuto è &lt;strong&gt;l'assenza&lt;/strong&gt; di un qualsiasi &lt;strong&gt;editor grafico&lt;/strong&gt;, o comunque di un ausilio visuale per lo sviluppo di interfacce. In pratica siamo costretti a fare tutto da codice, istanziando controlli, valorizzandone le proprietà, aggiungendoli ad un controllo contenitore, e così via. Sicuramente è un approccio che si adatta non proprio bene a interfacce complesse e che rende &lt;strong&gt;molto difficoltosa&lt;/strong&gt; l'interazione con un grafico.&lt;/p&gt; &lt;p&gt;L'aspetto che però mi è piaciuto meno, è la &lt;strong&gt;scarsa &lt;strike&gt;estendibilità&lt;/strike&gt; flessibilità&lt;/strong&gt; del framework, sicuramente uno dei limiti più difficilmente superabili dell'architettura. Nel mio caso, ad esempio, avevo bisogno di una ScrollView (i &amp;quot;pallini&amp;quot; che rappresentano la paginazione della springboard di iOS, per capirci) in direzione verticale; Titanium ne propone solo una orizzontale e sono stato costretto a parecchi hack per ottenerla, sebbene invece sia assolutamente esistente in XCode. In generale questa mancanza di flessibilità può rappresentare un problema non da poco, e dobbiamo essere pronti a rivedere le interfacce in base alle possibilità del framework.&lt;/p&gt;&lt;p&gt;[EDIT]Come mi segnala &lt;a href="http://blogs.ugidotnet.org/Box/Default.aspx"&gt;Alessandro Ghizzardi&lt;/a&gt;, in realtà, &lt;a href="http://www.slideshare.net/omorandi/extending-appcelerator-titanium-mobile-through-native-modules"&gt;è possibile realizzare dei wrapper&lt;/a&gt; di funzionalità native ed esporle tramite Javascript in Titanium. Ovviamente, però, in questo caso si ha la necessità di scrivere codice in Objective-C e/o Java (a seconda della piattaforma), quindi le skill dobbiamo averle, però sicuramente è una feature che eleva di molto il livello del prodotto.&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Conclusione&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Entrambi i prodotti sono &lt;strong&gt;ben lungi&lt;/strong&gt; dall'essere perfetti. PhoneGap, secondo me, dà come valore aggiunto il riutilizzo delle skill, ma &lt;strong&gt;ad un costo non indifferente&lt;/strong&gt;, ossia tutte le problematiche che ho citato. Pertanto lo vedo magari adatto ad un progetto &lt;strong&gt;estemporaneo&lt;/strong&gt; se non vogliamo investire su una piattaforma nel lungo periodo, per il resto davvero mi lascia molto scettico.&lt;/p&gt; &lt;p&gt;Con Titanium la storia è differente: non nego che, sebbene sulle prime mi abbia lasciato un po' spaesato, l'impressione che ne ho tratto è quella di un &lt;strong&gt;buon prodotto&lt;/strong&gt;, con alcuni limiti oggettivi che lo rendono poco &amp;quot;snello&amp;quot; in progetti di alto livello. Però davvero non è male, provate a compilare &lt;a href="https://github.com/appcelerator/KitchenSink"&gt;Kitchen Sink&lt;/a&gt; per farvi un'idea. Il framework e il modello a oggetti &lt;strong&gt;dobbiamo comunque impararlo&lt;/strong&gt;, però, quindi non ci sono grandi vantaggi se poi puntiamo ad una sola piattaforma delle due disponibili.&lt;/p&gt; &lt;p&gt;Per quanto mi riguarda, &lt;strong&gt;la prima opzione resta la piattaforma nativa&lt;/strong&gt;, per tutta una serie di ragioni: ottimizzazione e controllo del codice, debug, facilità nel reperire documentazione, informazioni e componenti di terze parti, e potrei continuare... Sono aspetti che fanno la differenza, e che secondo me già nel medio periodo ripagano l'investimento sostenuto per acquisire le skill necessarie, investimento che, da professionisti, probabilmente è &lt;strong&gt;uno dei più futuribili&lt;/strong&gt; che oggi possiamo fare.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/HTML5/" rel="tag"&gt;HTML5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Javascript/" rel="tag"&gt;Javascript&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Metro/" rel="tag"&gt;Metro&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone/" rel="tag"&gt;Windows Phone&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone_7/" rel="tag"&gt;Windows Phone 7&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Phone_7.1/" rel="tag"&gt;Windows Phone 7.1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx"&gt;&lt;em&gt;PhoneGap e Titanium, esiste davvero il write once run anywhere su mobile?&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, HTML5, Javascript, jQuery, Metro, Windows Phone, Windows Phone 7, Windows Phone 7.1</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx</guid><slash:comments>10</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2730/PhoneGap-Titanium-Esiste-Davvero-Write-Once-Run-Anywhere.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2730.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2730</trackback:ping></item><item><title>ASPItalia ti premia con Visual Studio 2010 Ultimate + MSDN Subscription!</title><link>http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx</link><pubDate>Wed, 01 Sep 2010 09:52:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2653" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Eh sì, per alleviarvi il triste ritorno dalle vacanze, ci siamo inventati un'iniziativa niente male: se siete appassionati di tecnologia e di sviluppo software, se avete pensato qualche volta che potevate contribuire con le vostre conoscenze a migliorare la community di ASPItalia, se magari in passato avete trovato delle dritte interessanti sui nostri forum e vi va di passare dalla parte di chi i consigli e le soluzioni invece le elargisce... insomma, se un po' vi riconoscete in qualcuno di questi &amp;quot;se&amp;quot;, &lt;a href="http://g.aspitalia.com/landings/competitions/"&gt;ASPItalia Community Awards 2010&lt;/a&gt; è lì per voi!&lt;/p&gt;&lt;p&gt;In base ai vostri contributi, secondo le modalità descritte nella &lt;a href="http://g.aspitalia.com/landings/competitions/"&gt;pagina dell'evento&lt;/a&gt;, stileremo una classifica e coloro che a fine mese si troveranno nelle prime &lt;strong&gt;due posizioni&lt;/strong&gt; si porteranno a casa niente meno che una &lt;strong&gt;Visual Studio 2010 Ultimate con MSDN Subscription&lt;/strong&gt; a testa (quindi in totale, regaliamo ben QUATTRO MSDN a quattro di voi!).&lt;/p&gt;&lt;p&gt;Dai, cosa aspettate? ;-)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Silverlight/" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/XAML/" rel="tag"&gt;XAML&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx"&gt;&lt;em&gt;ASPItalia ti premia con Visual Studio 2010 Ultimate + MSDN Subscription!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, ASP.NET, ASP.NET 4.0, ASPItalia.com, Silverlight, Visual Studio, XAML</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2653/ASPItalia-Premia-Visual-Studio-2010-Ultimate-MSDN-Subscription.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2653.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2653</trackback:ping></item><item><title>Ma che figo Reflector Pro di Red Gate</title><link>http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx</link><pubDate>Thu, 08 Apr 2010 22:47:25 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2608" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Come molti di voi sapranno, qualche mese fa &lt;a href="http://www.red-gate.com/"&gt;Red Gate&lt;/a&gt; ha acquistato &lt;a href="http://www.red-gate.com/products/reflector/index.htm"&gt;Reflector&lt;/a&gt;, il tool che, dopo Visual Studio, ogni sviluppatore .NET dovrebbe avviare quando si siede davanti al PC.&lt;/p&gt; &lt;p&gt;Da allora, alla versione tradizionale che è rimasta gratuita, si è aggiunto anche Reflector Pro, un'edizione a pagamento che promette cose mirabolanti. Volete un esempio? Sentite un po'.&lt;/p&gt; &lt;p&gt;Ho creato una semplice ConsoleApplication in C#, in cui ho messo questo codice:&lt;/p&gt; &lt;code&gt;List&amp;lt;string&amp;gt; someList = new List&amp;lt;string&amp;gt;(); &lt;br /&gt;someList.Add(&amp;quot;Ciao&amp;quot;);&lt;/code&gt; &lt;p&gt;Dopo aver installato Reflector Pro, in Visual Studio appare un nuovo menu, dal quale possiamo selezionare la voce &lt;strong&gt;Chose Assemblies to Debug&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_3.png" width="369" height="154" /&gt; &lt;/p&gt; &lt;p&gt;A questo punto, dalla finestra di Reflector, selezioniamo di voler debuggare &lt;strong&gt;mscorlib&lt;/strong&gt;, ossia l'assembly che contiene la definizione della classe &lt;strong&gt;List&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_5a845fd0-0f55-4616-9886-5c8139085fe0.png" width="442" height="322" /&gt; &lt;/p&gt; &lt;p&gt;Ciò che accade, è che Reflector inizia la decompilazione dell'assembly; nel nostro caso impiega qualche minuto, visto che si tratta di parecchio codice, ma esiste uno storage interno che funge da cache per queste definizioni, così che non sia necessario ripetere l'operazione. Al termine di tutto, mettiamo un breakpoint sulla seconda riga del nostro codice ed avviamo l'applicazione in debug:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_502e8894-0dbe-435b-8533-a58c12c6deca.png" width="493" height="57" /&gt;&amp;#160; &lt;/p&gt; &lt;p&gt;Quando l'esecuzione si ferma sulla riga evidenziata, premiamo F11 e...&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;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/machefigoreflectorprodiredgate_b43/image_e14d8159-c258-49d6-9820-41bd84d4c85c.png" width="400" height="236" /&gt; &lt;/p&gt; &lt;p&gt;Notate il nome della classe in alto :-) Siamo andati in Step In dentro al codice del metodo &lt;strong&gt;Add&lt;/strong&gt; di &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; e possiamo avvalerci di tutte le funzionalità del debug di Visual Studio, dai watch (come si vede in figura) a che so... il debug multithreading di cui ho parlato ieri, mentre procediamo in step by step all'interno di mscorlib.dll.&lt;/p&gt; &lt;p&gt;Mica male!!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx"&gt;&lt;em&gt;Ma che figo Reflector Pro di Red Gate&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2608/Figo-Reflector-Red-Gate.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2608.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2608</trackback:ping></item><item><title>Multithreading e parallel computing nel .NET Framework 4.0</title><link>http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx</link><pubDate>Wed, 07 Apr 2010 23:40:41 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2607" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Una delle novità dell'imminente nuova versione del .NET Framework a cui personalmente ho dato parecchia importanza è il notevole supporto per &lt;strong&gt;multithreading&lt;/strong&gt; e &lt;strong&gt;parallel computing&lt;/strong&gt;. Spesso siamo abituati a confondere questi due termini e a usarli quasi come sinonimi, anche se sinonimi veri e propri non sono. Il multithreading è un qualcosa che è sui nostri desktop già da diversi anni, supportato dal Framework sin dalle sue prime incarnazioni. Il calcolo parallelo è invece qualcosa di più, che sfrutta il multithreading per massimizzare l'uso dei core messi a disposizione dall'hardware, un aspetto fondamentale nel momento in cui anche sui laptop non è raro imbattersi in 4, 6 o 8 core.&lt;/p&gt; &lt;p&gt;Ho avuto modo di occuparmi di questi aspetti durante la stesura di uno dei capitoli dei &lt;a href="http://g.aspitalia.com/landings/hoepli.aspx"&gt;nostri libri di prossima uscita&lt;/a&gt; interamente dedicato alle tematiche di multithreading e parallel computer, e penso francamente che il .NET Framework 4.0, il nuovo CLR e Visual Studio 2010 portino l'esperienza di sviluppo di applicazioni parallele a livelli assolutamente ineguagliati al giorno d'oggi.&lt;/p&gt; &lt;p&gt;Ma quali sono sostanzialmente queste novità? Beh. innanzitutto direi la presenza di &lt;a href="http://msdn.microsoft.com/en-us/library/dd460688%28VS.100%29.aspx"&gt;PLINQ&lt;/a&gt; e della classe &lt;a href="http://msdn.microsoft.com/en-us/library/dd383736%28VS.100%29.aspx"&gt;ParallelQuery&lt;/a&gt;, grazie alla quale è possibile integrare con grandissima facilità il calcolo parallelo all'interno delle nostre query LINQ; basta usare infatti l'extension method &lt;a href="http://msdn.microsoft.com/en-us/library/dd413602%28VS.100%29.aspx"&gt;AsParallel()&lt;/a&gt; per far sì che una query del tipo&lt;/p&gt; &lt;code&gt;var query = from i in list.AsParallel() &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; where someCondition(i) &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select someResult(i)&lt;/code&gt; &lt;p&gt;venga eseguita sfruttando al massimo i core presenti nel sistema.&lt;/p&gt; &lt;p&gt;Per il codice "di tutti i giorni", invece, sono state introdotte le classi &lt;a href="http://msdn.microsoft.com/en-us/library/dd321424%28VS.100%29.aspx"&gt;Task&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/library/dd321260%28VS.100%29.aspx"&gt;TaskFactory&lt;/a&gt;, che rendono possibile creare task asincroni, gestirne le notifiche, accodarne di altri, ecc.. in una sintassi estremamente concisa e intuitiva, che ci risparmia un bel po' di lavoro manuale che eravamo costretti a svolgere usando il &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx"&gt;ThreadPool&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ma più thread contemporaneamente in esecuzione vuol dire anche gestire problematiche di concorrenza e di thread safety. Chi ha lavorato in quest'ambito in passato, sa che ad esempio avere a che fare con collection condivise tra più thread non era assolutamente banale. Il .NET Framework 4.0 espone un nuovo namespace, dal nome fin troppo indicativo: &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.concurrent%28VS.100%29.aspx"&gt;System.Collections.Concurrent&lt;/a&gt;. Esso contiene un gran numero di collection, tutte rigorosamente thread safe, che risparmiano parecchie grane quando utilizzate in scenari paralleli e i cui internals (basta dare un'occhiata con Reflector) sono tutt'altro che banali e scontati, con lo scopo di minimizzare i lock, che notoriamente vanno a braccetto con decadimenti prestazionali.&lt;/p&gt; &lt;p&gt;E la ciliegina su questa torta non poteva che essere lui, Visual Studio 2010, e il suo supporto al debug di applicazioni multithreaded. Provate a dare un'occhiata a queste due immagini in basso per capire di cosa sto parlando, valgono più di mille parole:&lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/multithreadingeparallelcomputingnel.ne.0_1315c/image_3.png" width="484" height="334" /&gt; &lt;/p&gt; &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.aspitalia.com/img/cradle/multithreadingeparallelcomputingnel.ne.0_1315c/image_6.png" width="485" height="193" /&gt; &lt;/p&gt; &lt;p&gt;Che dire. ci aspettano non solo mesi di articoli e succose novità, ma anche mesi in cui potremo sfruttare strumenti innovativi, in grado di darci una grande mano nel lavoro di tutti i giorni e, perché no, anche vantaggi sostanziali nelle potenzialità delle nostre applicazioni!&lt;/p&gt; &lt;p&gt;Ci vediamo su queste pagine!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/C#_4_Guida_completa/" rel="tag"&gt;C# 4 Guida completa&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Basic_2010_Guida_completa/" rel="tag"&gt;Visual Basic 2010 Guida completa&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx"&gt;&lt;em&gt;Multithreading e parallel computing nel .NET Framework 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, C# 4 Guida completa, Visual Basic 2010 Guida completa, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx</guid><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2607/Multithreading-Parallel-Computing-.NET-Framework-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2607.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2607</trackback:ping></item><item><title>Rilasciato ASP.NET MVC 2 Beta</title><link>http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx</link><pubDate>Tue, 17 Nov 2009 23:58:01 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2571" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;I primi effetti di PDC iniziano a farsi vedere: è stata rilasciata oggi, infatti, la beta di ASP.NET MVC 2 (solo per VS2008) che introduce alcune novità rispetto alla Preview 2 presente in Visual Studio 2010 Beta 2. Cerchiamo di vedere cosa cambia e quali sono le nuove funzionalità disponibili con questa nuova versione:&lt;/p&gt; &lt;h3&gt;Validazione Client-side&lt;/h3&gt; &lt;p&gt;La Preview 2 già aveva introdotto un supporto built-in per la validazione client-side, utilizzando un opportuno plugin per jQuery. Nella versione Beta, invece, questa funzionalità è compresa all'interno delle librerie Javascript di Microsoft, pertanto è sufficiente includere&lt;/p&gt; &lt;ul&gt; &lt;li&gt;MicrosoftAjax.js &lt;/li&gt; &lt;li&gt;MicrosoftMVCAjax.js &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;e richiamare il metodo&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;% Html.EnableClientValidation(); %&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;dalla View, affinché tutto funzioni.&lt;/p&gt; &lt;h3&gt;Add Area&lt;/h3&gt; &lt;p&gt;Il menù contestuale di un progetto MVC all'interno del solution explorer consente adesso di aggiungere in maniera guidata una nuova area all'interno dell'applicazione. Ricordiamo che le Area altro non sono che una suddivisione logica del progetto stesso in più sottocartelle, una per ogni "modulo", all'interno delle quali trova posto la struttura di cartelle standard di MVC (Views, Controllers, Models)&lt;/p&gt; &lt;h3&gt;Modifiche al funzionamento dei TempData&lt;/h3&gt; &lt;p&gt;TempData, come già abbiamo indicato nello script &lt;a href="http://www.aspitalia.com/liste/usag/script.aspx?id=989"&gt;#989&lt;/a&gt;, consente di mantenere momentaneamente in uno storage (per default la session di ASP.NET) alcuni dati, che vengono poi automaticamente rimossi al ciclo di request response successivo. In MVC 2 Beta, invece, questi dati restano memorizzati fino al loro effettivo utilizzo, dopo di che vengono automaticamente marcati per l'eliminazione. Il metodo &lt;strong&gt;Keep&lt;/strong&gt; consente comunque di conservarli anche se sono stati utilizzati.&lt;/p&gt; &lt;h3&gt;Strong typed UI Helpers&lt;/h3&gt; &lt;p&gt;Già nelle preview 2 erano presenti i primi 3 esempi di UI Helpers (Editor, Label e Display) che, sfruttando le lambda expression, rendevano possibile la creazione di elementi di interfaccia collegati a proprietà del model in maniera strong typed e con il supporto di Intellisense e Refactoring di Visual Studio. Grazie ad essi, ad esempio, si può generare un elemento Input per una proprietà Descrizione del model tramite la sintassi&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;%= Html.EditorFor(m =&amp;gt; m.Descrizione) %&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;In questa nuova versione sono stati aggiunti anche&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ValidationMessageFor &lt;/li&gt; &lt;li&gt;TextAreaFor &lt;/li&gt; &lt;li&gt;TextBoxFor &lt;/li&gt; &lt;li&gt;HiddenFor &lt;/li&gt; &lt;li&gt;DropDownListFor &lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Esecuzione asincrona delle action tramite un AsyncController&lt;/h3&gt; &lt;p&gt;ASP.NET MVC 2 Beta introduce ufficialmente una interessantissima caratteristica che, fino ad oggi, è stata parte del progetto sperimentale ASP.NET MVC Futures. Tramite la classe base AsyncController, infatti, è ora possibile realizzare Action in grado di invocare metodi asincroni, la cui esecuzione viene presa in carico da un worker thread esterno a quello utilizzato da ASP.NET.&lt;/p&gt; &lt;h3&gt;Download&lt;/h3&gt; &lt;p&gt;Il download di questa nuova versione di ASP.NET MVC 2 è disponibile a &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;familyid=4817cdb2-88ea-4af4-a455-f06b4c90fd2c"&gt;questo link&lt;/a&gt;, dove trovate anche le note di rilascio. Un'ultima nota riguarda la compatibilità con le versioni di Visual Studio. E' supportato il solo Visual Studio 2008 SP1, quindi niente versione 2010 per il momento. Tra l'altro, visto che 2008 e 2010 condividono alcune componenti, l'installazione anche sul solo 2008 &lt;strong&gt;non è supportata se risulta installata anche la versione 2010 Beta 2&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx"&gt;&lt;em&gt;Rilasciato ASP.NET MVC 2 Beta&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC, Visual Studio, ASP.NET</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2571/Rilasciato-ASP.NET-MVC-Beta.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2571.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2571</trackback:ping></item><item><title>Login sul network ASPItalia tramite Facebook</title><link>http://blogs.aspitalia.com/cradle/post2563/Login-Network-ASPItalia-Tramite-Facebook.aspx</link><pubDate>Mon, 09 Nov 2009 14:16:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2563" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;Eh sì, noi di ASPItalia non ci fermiamo proprio mai! Durante l'ultimo weekend io e &lt;a href="http://blogs.aspitalia.com/daniele/"&gt;Daniele&lt;/a&gt; ci siamo messi all'opera per allargare la schiera di provider di autenticazione supportati. Il risultato è che, da oggi, potete utilizzare il vostro account di Facebook per loggarvi su uno qualsiasi dei siti del network. Abilitare questa funzionalità è semplicissimo: è sufficiente recarsi sulla pagina di &lt;a href="https://secure.aspitalia.com/profile/login.aspx"&gt;Login&lt;/a&gt;, fare click sull'icona di Facebook Connect e seguire le istruzioni per collegare l'account di Facebook a quello di ASPItalia.&lt;br /&gt;&lt;br /&gt;Enjoy :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Security/" rel="tag"&gt;Security&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2563/Login-Network-ASPItalia-Tramite-Facebook.aspx"&gt;&lt;em&gt;Login sul network ASPItalia tramite Facebook&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, ASPItalia.com, Security</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2563/Login-Network-ASPItalia-Tramite-Facebook.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2563/Login-Network-ASPItalia-Tramite-Facebook.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2563.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2563</trackback:ping></item><item><title>Real Code Day 4.0: Agenda (quasi) completata!</title><link>http://blogs.aspitalia.com/cradle/post2561/Real-Code-Day-4.0-Agenda-Quasi-Completata.aspx</link><pubDate>Mon, 02 Nov 2009 10:16:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2561" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Bene, il RCD 4 inizia a prendere forma e essendo questo il primo evento di una certa portata in cui sono parte dell'organizzazione, beh.. lasciatemelo dire, ne sono proprio orgoglioso! L'agenda è praticamente completa (&lt;a href="http://www.aspitalia.com/eventi/21/Real-Code-Day-4.0-Costruire-Applicazioni-Reali-Firenze.aspx"&gt;la trovate qui&lt;/a&gt;) e, a mio modo di vedere, è tanto tanto tanto interessante e sapete perché? Perché realizzeremo un'applicazione from scratch, partendo cioé dai requisiti per arrivare a ben 4 &amp;quot;incarnazioni&amp;quot; differenti (Silverlight, WPF, WebForms e MVC), puntando il dito soprattutto su quando e perché va usato l'uno invece che l'altro.&lt;/p&gt;&lt;p&gt;Il tutto rigorosamente fedele alla rodata formula &amp;quot;zero-slides&amp;quot; di RCD e, soprattutto, a base delle più recenti tecnologie che il mercato offre, o meglio, offrirà, nei prossimi mesi, ossia .NET Framework 4.0 e Visual Studio 2010, con in più una bonus session assolutamente da non perdere! E se tutto questo non bastasse a farvi venire l'acquolina in bocca e prenotare il primo treno per Firenze, sappiate che MVC non vuol dire solo Model View Controller. Non dico di più perché sono sotto NDA! ;-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Architettura/" rel="tag"&gt;Architettura&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Entity_Framework/" rel="tag"&gt;Entity Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Object_Oriented_Programming/" rel="tag"&gt;Object Oriented Programming&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Silverlight/" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Silverlight_4.0/" rel="tag"&gt;Silverlight 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_7/" rel="tag"&gt;Windows 7&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Client/" rel="tag"&gt;Windows Client&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Presentation_Foundation/" rel="tag"&gt;Windows Presentation Foundation&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/XAML/" rel="tag"&gt;XAML&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2561/Real-Code-Day-4.0-Agenda-Quasi-Completata.aspx"&gt;&lt;em&gt;Real Code Day 4.0: Agenda (quasi) completata!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 3.0, .NET Framework 4.0, Architettura, ASP.NET, ASP.NET 4.0, ASP.NET MVC, ASPItalia.com, Entity Framework, Object Oriented Programming, Silverlight, Silverlight 4.0, Visual Studio, Windows 7, Windows Client, Windows Presentation Foundation, XAML</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2561/Real-Code-Day-4.0-Agenda-Quasi-Completata.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2561/Real-Code-Day-4.0-Agenda-Quasi-Completata.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2561.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2561</trackback:ping></item><item><title>Open source = elevata qualit&amp;#224;? Ma dove???</title><link>http://blogs.aspitalia.com/cradle/post2519/Open-Source-Elevata-Qualita-Dove.aspx</link><pubDate>Tue, 07 Jul 2009 09:25:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2519" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Ieri ho avuto la malsana idea di aggiornare Firefox 3.0.x alla versione 3.5 sul mio notebook aziendale. Ero già poco contento prima, ora sono a dir poco infuriato e mi accingo a disinstallare questo browser che ho usato (con soddisfazione da un po' di tempo in costante decadimento) fin dalla versione 1.&lt;br /&gt;&lt;br /&gt;Motivo? Il primo avvio di Firefox sulla mia macchina impiega un paio di minuti, e, dando un'occhiata in giro, &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=501605"&gt;mi&lt;/a&gt; &lt;a href="http://support.mozilla.com/tiki-view_forum_thread.php?locale=de&amp;forumId=1&amp;comments_parentId=381674"&gt;sembra&lt;/a&gt; &lt;a href="http://support.mozilla.com/tiki-view_forum_thread.php?locale=de&amp;forumId=1&amp;comments_parentId=379577"&gt;proprio&lt;/a&gt; &lt;a href="http://blog.borngeek.com/2009/07/02/firefox-3-5-slow-to-start/"&gt;di&lt;/a&gt; &lt;a href="http://www.techimo.com/forum/applications-operating-systems/232601-firefox-3-5-slow-start.html"&gt;non&lt;/a&gt; &lt;a href="http://forums.mozillazine.org/viewtopic.php?f=38&amp;t=1334895"&gt;essere&lt;/a&gt; l'unico sfigato a cui accade.&lt;br /&gt;&lt;br /&gt;Ora dico io: ma le release, le provano prima di pubblicarle o i problemi li si affronta solo a posteriori? Questa sarebbe la tanto decantata *qualità* del software open source? Questa è semplicemente una breaking change non sufficientemente testata. Punto. Ma sapete com'è... il rilascio di nuove versioni aumenta i download, i download aumentano gli sponsor, le quote di mercato, chi se ne frega se poi ci sono problemi, tanto il codice è libero, puoi fixarlo anche da solo.&lt;br /&gt;&lt;br /&gt;Peccato che lo stia disinstallando ora, altrimenti al prossimo riavvio, durante i 2 minuti di attesa, mi sarei potuto divertire a immaginare cosa sarebbe accaduto nei vari forum in rete nel caso in cui lo stesso problema lo avesse avuto Internet Explorer.&lt;/p&gt;&lt;p&gt;m.&lt;/p&gt;
&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2519/Open-Source-Elevata-Qualita-Dove.aspx"&gt;&lt;em&gt;Open source = elevata qualit&amp;#224;? Ma dove???&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2519/Open-Source-Elevata-Qualita-Dove.aspx</guid><slash:comments>11</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2519/Open-Source-Elevata-Qualita-Dove.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2519.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2519</trackback:ping></item><item><title>.NET Framework 4.0 beta 1: Workflow Foundation 4.0</title><link>http://blogs.aspitalia.com/cradle/post2501/.NET-Framework-4.0-Beta-1-Workflow-Foundation-4.0.aspx</link><pubDate>Mon, 18 May 2009 20:44:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2501" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;Il nuovo FX 4.0 porta con sé una vera e propria rivoluzione per quanto riguarda Workflow Foundation: si tratta di un framework nuovo di zecca, sia per quanto riguarda l'engine, che per le librerie e il designer di Visual Studio 2010. Per mantenere la compatibilità con le applicazioni sviluppate fino ad oggi, si è scelto di utilizzare namespace differenti, così che l'utente sia libero di scegliere se avvalersi della nuova tecnologia o continuare ad utilizzare il modello delle versioni 3.x. &lt;/p&gt; &lt;p&gt;Ma quali sono le novità che possono effettivamente spingerci a voltare pagina? Beh, innanzitutto le performance, che fino a questa edizione hanno rappresentato forse il più grande limite di Workflow Foundation. In WF 4.0 sono state apportate numerose ottimizzazioni, sia nell'engine di esecuzione che nei servizi di persistenza (che ora si limitano a persistere solo la parte effettivamente &amp;quot;attiva&amp;quot; del workflow, piuttosto che l'istanza nella sua interezza), che promettono di dare un vero e proprio boost alla scalabilità, raggiungendo guadagni prestazionali anche di un paio di ordini di grandezza superiori alla versione precedente.&lt;/p&gt; &lt;p&gt;La base activity library annovera alcuni nuovi elementi, quali ad esempio un set di elementi specifici per la gestione di collection di oggetti (ClearCollection, AddToCollection, RemoveFromCollection e ExistsInCollection) o ParallelForEach, che consente di eseguire dei task su elementi di una collection in parallelo; altre invece state completamente riviste: è il caso di Parallel, che ora lavora secondo un nuovo algoritmo di scheduling. E' presente un nuovo modello di workflow, chiamato Flowchart, che sostanzialmente permette di superare il limite imposto dai workflow sequenziali, che non consentivano di rimandare il flusso in una posizione precedente a quella attuale. Esso sopperirà temporaneamente alla mancanza della State Machine, non inclusa nella beta, della quale potrà mimare il comportamento grazie alla PickActivity, sostanzialmente l'alter ego in questa versione della vecchia ListenActivity.&lt;/p&gt; &lt;p&gt;La rivoluzione maggiore riguarda però l'architettura, a livello di modello a oggetti, di questo nuovo framework, in cui appaiono per la prima volta i concetti di parametri di input e di output o di variabili. I primi vengono utilizzati per rappresentare i flussi di informazione in ingresso e uscita da un'activity (o da un workflow), mentre le altre svolgono funzioni di storage. Il tutto, ovviamente, offre pieno supporto al databinding e consente un approccio più marcatamente dichiarativo, e meno funzionale, alla realizzazione del workflow stesso. Visual Studio 2010 offre un designer del tutto nuovo, realizzato in WPF, e che consente la realizzazione di progetti sia graficamente che editando direttamente lo Xaml. Da menzionare il supporto all'intellisense già all'interno della property grid, una vera e propria ciliegina sulla torta.&lt;/p&gt; &lt;p&gt;L'ultimo aspetto da citare riguarda l'integrazione con WCF, che in Workflow Foundation 4.0 si spinge oltre quanto già visto nel Framework 3.5. Grazie a WCF, infatti, sarà possibile fornire ai workflow la possibilità di accettare messaggi remoti, costruendo quindi veri e propri servizi in maniera dichiarativa tramite l'uso di activity.&lt;/p&gt;&lt;p&gt;Maggiori informazioni e le informazioni per il download sono disponibili nel nostro mini-sito dedicato al &lt;a href="http://netfx4.winfxitalia.com/"&gt;.NET Framework 4.0&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Workflow_Foundation/" rel="tag"&gt;Windows Workflow Foundation&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2501/.NET-Framework-4.0-Beta-1-Workflow-Foundation-4.0.aspx"&gt;&lt;em&gt;.NET Framework 4.0 beta 1: Workflow Foundation 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 3.0, .NET Framework 4.0, Visual Studio, Windows Workflow Foundation</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2501/.NET-Framework-4.0-Beta-1-Workflow-Foundation-4.0.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2501/.NET-Framework-4.0-Beta-1-Workflow-Foundation-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2501.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2501</trackback:ping></item><item><title>Visto che ultimamente Reflection.Emit &amp;#232; di moda...</title><link>http://blogs.aspitalia.com/cradle/post2490/Visto-Ultimamente-Reflection.Emit-Moda.aspx</link><pubDate>Thu, 30 Apr 2009 07:58:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2490" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;... e visto che non tutti masticano benissimo MSIL (io ad esempio no!), vi segnalo un simpaticissimo addin per Reflector che credo farà felici molti estimatori del codice dinamico:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=ReflectionEmitLanguage" href="http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=ReflectionEmitLanguage"&gt;http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=ReflectionEmitLanguage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leggo testualmente:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"This add-in translates the IL code of a given method into the C# code that would be needed to generate the same IL code using System.Reflection.Emit"&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Buon divertimento ;-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2490/Visto-Ultimamente-Reflection.Emit-Moda.aspx"&gt;&lt;em&gt;Visto che ultimamente Reflection.Emit &amp;#232; di moda...&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Framework 4.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2490/Visto-Ultimamente-Reflection.Emit-Moda.aspx</guid><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2490/Visto-Ultimamente-Reflection.Emit-Moda.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2490.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2490</trackback:ping></item><item><title>ILDASM e ILASM: un esempio pratico (e c&amp;#39;entra anche NHibernate)</title><link>http://blogs.aspitalia.com/cradle/post2451/ILDASM-ILASM-Esempio-Pratico-E-Centra-NHibernate.aspx</link><pubDate>Mon, 12 Jan 2009 13:18:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2451" border="0" style="width:1px; height:1px;" /&gt;
&lt;p&gt;Accadde un giorno che avevo un piccolo (e vecchio) CMS con un bug da fixare e ho avuto l'idea di aggiornare il motore di persistenza, che usava NH 1.2.0 alla nuovissima 2.0.1. Scarico quindi i due progetti NHibernate.Core e NHibernate.Caches ma... niente! Quest'ultima non ne voleva sapere di andare a causa di una reference verso la versione 2.0.0 di NHibernate che purtroppo non era più disponibile per il download.&lt;/p&gt;
&lt;p&gt;Premetto che &lt;strong&gt;ad oggi il problema è stato risolto, ora NHibernate.Caches punta alla versione corretta&lt;/strong&gt;, ma in quel frangente mi sono trovato abbastanza spaesato. Le possibili soluzioni erano:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ricompilare tutto NHibernate, modificando il numero di versione a 2.0.0, ma non mi piaceva l'idea&lt;/li&gt;
&lt;li&gt;Scaricare i sorgenti della Cache e modificare la reference, ma questi non erano disponibili se non come trunk SVN, e avrei in questo modo rischiato di portare in produzione codice non ancora ufficialmente rilasciato&lt;/li&gt;
&lt;li&gt;Utilizzare &lt;a href="http://msdn.microsoft.com/en-us/library/2fc472t2.aspx"&gt;l'Assembly Binding Redirection&lt;/a&gt; del CLR&lt;/li&gt;
&lt;li&gt;Disassemblare l'assembly NHibernate.Caches e modificare la reference per farlo puntare a NH 2.0.1&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;A dispetto delle apparenze, la soluzione 4 è in assoluto la più veloce e semplice e infatti è proprio quella che ho scelto.&lt;/p&gt;
&lt;p&gt;I passi sono estremamente banali:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si apre l'assembly con ILDASM&lt;/li&gt;
&lt;li&gt;Si seleziona File -&amp;gt; Dump, avendo cura di impostare a checked tutte le checkbox proposte&lt;/li&gt;
&lt;li&gt;A questo punto basta aprire il file .IL generato con un qualsiasi editor testuale e cercare &amp;quot;.assembly extern&amp;quot; per posizionarsi nella sezione del MSIL che contiene l'indicazione delle reference&lt;/li&gt;
&lt;li&gt;Modificare manualmente la reference alla versione voluta e salvare&lt;/li&gt;
&lt;li&gt;Ricompilare il file IL con l'istruzione a riga di comando: &lt;/li&gt;&lt;/ol&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;ILASM nomeFileMSIL.IL /DLL /OUTPUT=nomeAssembly.dll&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Et voilà, it works!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/NHibernate/" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/cradle/post2451/ILDASM-ILASM-Esempio-Pratico-E-Centra-NHibernate.aspx"&gt;&lt;em&gt;ILDASM e ILASM: un esempio pratico (e c&amp;#39;entra anche NHibernate)&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco De Sanctis</dc:creator><category>Misc, .NET Framework, NHibernate</category><guid isPermaLink="true">http://blogs.aspitalia.com/cradle/post2451/ILDASM-ILASM-Esempio-Pratico-E-Centra-NHibernate.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/cradle/post2451/ILDASM-ILASM-Esempio-Pratico-E-Centra-NHibernate.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/cradle/CommentRSS2451.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2451</trackback:ping></item></channel></rss>
