• Raffaele Fanizzi su LinkedIn

Archives

Archives / 2011
  • Windows Azure Table Storage InsertOrUpdate

    E' ormai da diverse settimane che mi cimento nello sviluppo di un sistema destinato a girare nell'infrastruttura Cloud di Microsoft e, in particolare, le tecnologie che sto impiegando sono Windows Azure, SQL Azure, Windows Azure Table Storage, Windows Azure Blob Storage e AppFabric Cache. Una delle più grandi sfide quando si utilizza lo storage di Windows Azure è l'abbattimento del numero di accessi ad esso. Come probabilmente saprete, accedere agli storage di Windows Azure ha un costo calcolato sia sulla base della quantità di spazio occupata, sia sul numero di transazioni, cioè di operazioni di lettura/scrittura.

    Supponiamo di dover eseguire la classica Insert Or Update di un dato all'interno del Table Storage. Avendo sempre ben in mente che stiamo parlando di un database NoSQL nel quale, quindi, il concetto di transazione non esiste, per implementare questo tipo di operazione è necessario scrivere qualcosa del genere:

    CloudTableClient tableClient = GetTableClient();
    TableServiceContext context = tableClient.GetDataServiceContext();
    context.IgnoreResourceNotFoundException = true;
    var item = context.CreateQuery<cacheentity>(tableName)
               .Where(p => p.PartitionKey == partitionName && p.RowKey == storageKey)
               .FirstOrDefault();
    if (item != null) 
    { 
       context.DeleteObject(item); 
    } 
    context.AddObject(tableName, newItem); 
    context.SaveChangesWithRetries(); 
    

    Il problema di questo approccio è che il numero di operazioni effettuate è, nel caso peggiore, pari a tre (in realtà si potrebbe fare la delete e la insert in batch, ma non è importante), mentre nel caso migliore è pari a due.

    Grazie all'Insert-Or-Update Entity introdotto da qualche mese è possibile ridurre il numero di accessi nel modo seguente:

    CloudTableClient tableClient = GetTableClient();
    TableServiceContext context = tableClient.GetDataServiceContext();
    context.AttachTo(tableName, newItem);
    context.UpdateObject(tableName, newItem);
    context.SaveChangesWithRetries(SaveChangesOptions.ReplaceOnUpdate); 
    

    Questo codice esegue la Insert o, eventualmente, l'update dell'elemento in tabella grazie all'uso dell'opzione ReplaceOnUpdate. Naturalmente non poteva essere tutto così semplice: se provate quest'ultimo codice in locale vi renderete conto che non funziona. Il problema è che la Insert-Or-Update Entity non è disponibile per il local storage, compreso quindi il vostro storage emulato. Per risolvere questo problema potete affidavi alla propria booleana statica RoleEnvironment.IsEmulated ed implementare, quindi, nel caso in cui sia true la soluzione meno efficiente che però verrà eseguita solo in ambiente di sviluppo, il che è assolutamente accettabile.

    altro

  • WPC 2011: WinRT e Cloud

    E' ormai il terzo anno di fila che frequento il WPC 2011: da quando il mio ex responsabile me lo fece conoscere nell'apparentemente vicino, ma incredibilmente lontano 2008, ho fatto di tutto per convincere, dapprima i miei datori di lavoro, ed oggi i miei soci, che partecipare a quest'evento è importante.

    Non è importante perché ciò di cui si parla al WPC è impossibile apprendere in altro modo, anzi mi è capitato più di una volta di seguire sessioni i cui contenuti mi erano già noti anche al 90%, ma è importante perché si tratta di un full immersion formativo e di confronto con altri professionisti del settore che, sia per mancanza di tempo, che di opportunità, è a dir poco impossibile replicare. Insomma, pensateci bene: quante volte vi è capitato di ascoltare per tre giorni di fila sessioni tecniche dalla mattina alla sera? Se escludiamo i pochi di voi che hanno avuto la fortuna di fare qualche corso di formazione, probabilmente la risposta è mai.

    Volendo fare un sunto degli argomenti trattati in questo WPC, posso dire che il 2012 è sicuramente l'anno del cloud e di Windows 8, un anno ricco di novità quindi, sia per quanto concerne lo sviluppo lato server, che lato client.

    Lato server sono ormai parecchi mesi che gli addetti al settore avvertono che la direzione intrapresa è quella del cloud e ne è una prova anche la nascita di diversi provider di servizi di cloud computing, non necessariamente legate al mondo Microsoft. E' chiaro che per chi, come il sottoscritto, si è specializzato nelle tecnologie Microsoft, Windows Azure rappresenta la naturale piattaforma di riferimento ed è curioso vedere come le cose stiano evolvendo rapidamente: un anno fa Windows Azure era quasi un'entità astratta, oggi c'è un SDK maturo ed un'integrazione con Visual Studio 2010 davvero notevole.

    Oltre a Windows Azure, ho seguito alcune sessioni anche sullo sviluppo lato client e, in particolare, su HTML5 e WinRT. Può sembrare curioso che io, che ho tenuto una sessione su HTML5 al Workshop Future Development, ne vada a seguire altre, ma nel campo dell'informatica, al di là degli appellativi attribuiti e/o guadagnati (junion, senior, technical lead, ecc....), non bisogna mai perdere l'umiltà e la voglia di apprendere e confrontarsi. Ed è proprio a tal proposito che vi racconto l'impressione che ho avuto seguendo le sessioni su WinRT e HTML5.

    Osservando le reazioni delle persone e discutendo con alcuni miei collegi ed amici, penso che si sia creata parecchia confusione in merito a questi due argomenti. Alcuni pensano che .NET sia destinato al macero e che HTML5 rappresenti il futuro dello sviluppo per Windows 8, beh non è così e vi invito a leggere con attenzione la seguente frase.

    WinRT è un'API nativa implementata in Windows 8 attraverso la quale è possibile sviluppare applicazioni Metro Style utilizzando come linguaggio di programmazione C++, C#, VB.NET e javascript e come linguaggio per la definizione della UI HTML5 e XAML.

    Ho evidenziato la frase precedente perché mettere in risalto l'errore che commettono coloro che accostano WinRT a HTML5 come modello di programmazione primario. In particolare mi permetto di sottolineare i seguenti aspetti

    • WinRT nasce per lo sviluppo di applicazioni Metro Style, quelle che, quindi, saranno accessibili dall'interfaccia Metro introdotta da Windows Phone e che sarà adottata anche in Windows 8. Quest'ultimo, tuttavia, consente di utilizzare anche la classica interfaccia di Explorer il che significa che si possono continuare a sviluppare applicazioni "vecchia maniera" senza problemi
    • Le applicazioni Metro Style sono simili alle App dei dispositivi mobile: sono installabili solo mediante il Market Place, funzionano in una sandbox e nascono con l'obiettivo di facilitare l'uso di Windows specie su dispositivi touch come i tablet
    • Programmare usando HTML5 e Javascript con le API WinRT, cioè per sviluppare applicazioni Metro Style, non consente nel modo più assoluto di poter riutilizzare lo stesso codice sia di markup, che javascript per fare un'applicazione web. Nel momento in cui si accede alle librerie WinRT (e lo si deve fare per forza perché altrimenti non si sta sviluppando un'applicazione Metro Style) l'applicazione risultante resta confinata al mondo WinRT
    • Analogamente all'accoppiata HTML5/javascript, programmare usando C++/C#/VB.NET e XAML non significa avere la medesima applicazione disponibile, sia in versione Metro Style, che classica perché cambia il target di compilazione e cambiano i namespace di moltissime classi (ad esempio quelle della UI rispetto a WPF), oltre al fatto che WinRT espone un subset del .NET Framework e non il framework completo

    .NET è, quindi, vivo e vegeto e nel 2012 uscirà la versione 4.5 che, tra le altre cose, porterà miglioramenti significativi proprio nello sviluppo di applicazioni WPF, oltre a tante altre novità che ne aumenteranno notevolmente la produttività (ad esempio la nuova gestione dei task asincroni).

    A mio parere con WinRT Microsoft ha semplicemente voluto mettere a disposizione del più ampio parco di programmatori possibile (C++, .NET e Javascript) uno strumento per lo sviluppo delle applicazioni Metro Style probabilmente con la speranza che in ambito desktop/notebook/tablet accada ciò a cui assistiamo ormai da qualche anno in ambito mobile: un market place, specie quello di Apple, con migliaia di applicazioni disponibili e migliaia di acquisti effettuati grazie ai bassi costi che mediante queste anno.

    Insomma, come avrete intuito, il tutto non ha la finalità di ottenere la pace nel mondo, ma le aspettative probabilmente sono quelle lecite di sempre: abbattimento della pirateria ed incremento dei profitti. E per noi programmatori cosa cambia? Fondamentalmente abbiamo l'occasione di sviluppare questo nuovo tipo di applicazioni, affrontando le sfide che esse ci porranno senza rinunciare al nostro linguaggio di programmazione preferito. Cosa possiamo chiedere di più? :-)

    altro

  • Vifani 3.0: si passa ad Orchard

    Prima o poi doveva accadere, era solo una questione di tempo. Chi mi conosce lo sa, ho un incontenibile passione per il mio lavoro, lo sviluppatore software, ma poiché in linea di principio è sempre bene allargare i propri orizzonti e non fossilizzarsi sempre sugli stessi aspetti, ho deciso di far evolvere il mio sito che, per la prima volta, invece di essere realizzato in toto dal sottoscritto, è basato su Orchard.

    Per chi non lo conoscesse Orchard è un CMS opensource basato su ASP.NET MVC 3 che sta riscutendo un discreto successo, sia perché è uno dei pochissimi CMS opensource basato su tecnologie .NET all'avanguardia, sia perché rispetto ad altri CMS analoghi (vedi DotNetNuke), non risulta essere legato ad un pesante passato fatto di plugin e moduli più o meno pesanti e basati su ASP.NET Web Form, ma utilizza le più recenti ed efficienti tecnologie web Microsoft. A dirla tutta mi risulta che DotNetNuke recentemente con la versione 6 si sia anch'esso svecchiato, ma, come spesso faccio, al faticosamente evoluto ho preferito scegliere il totalmente nuovo.

    Non posso chiaramente sottrarmi al classico confronto CMS vs "sito fatto a mano". Personalmente trovo che Orchard sia un CMS molto ordinato e preciso, ma è bene subito chiarire che l'idea secondo la quale affidarsi ad un CMS consenta di concentrarsi esclusivamente sui contenuti è una balla spaziale. Ho dedicato non poco tempo alla configurazione di Orchard, specie per quanto concerne l'aspetto grafico. Chiaramente esistono una serie di temi già preconfezionati, ma se uno ha un'idea ben precisa e vuole realizzarla, allora deve inevitabilmente mettere mano alle sue doti di programmatore o, se vogliamo, web designer per realizzare layout, stili CSS e quant'altro serva per dare corpo ad un tema di Orchard in maniera non molto dissimile da quanto ho già fatto con i miei siti web.

    In particolare la mia idea era quella di migrare ad Orchard conservando il tema precedente non perché mi faccia particolarmente impazzire, ma perché rappresentava per me una sfida. Nel complesso penso di esserci riuscito e di essere andato oltre: non solo ho fatto in modo di ottenere un tema il più possibile simile al prevedente sito, ma ho inoltre utilizzato alcune funzionalità tipiche del nuovo standard HTML5: i tag semantici e il border radius. Il tutto dovrebbe sia migliorare l'indicizzazione sui motori di ricerca (sperando che Google e company utilizzino effettivamente i tag semantici per meglio comprendere la struttura dei contenuti di un sito web), che ridurre la quantità di codice HTML presente nella pagina e, in particolare, tutta la sfilza di div e micro div necessari per realizzare bordi arrotondati alla vecchia maniera. Lo scotto da pagare è di aver definitivamente buttato nel cesso la retrocompatibilità con i browser più datati: Internet Explorer 6 e 7 potrebbero avere qualche problema nella visualizzazione della barra di navigazione e di ricerca, mentre tutti i browser che non supportano semplicemente il border radius dello standard CSS 3, vedranno le varie sezioni squadrate.

    Esistono chiaramente soluzioni per non imporsi tali limitazioni, ma innovare spesso significa anche tagliare i ponti col passato e questa è stata la mia scelta. Tra le nuove funzionalità del sito troverete il supporto all'open authentication e questo vi consentirà di accedere al mio sito ed utilizzare i vostri account di Facebook, Tweeter, ecc..., per autenticarvi e commentare il blog.

    altro

  • DotNetSide Workshop "Future Development"

    L'estate ormai è alle spalle, benché il meteo fino a qualche giorno fa poteva far pensare il contrario (almeno qui in Puglia), ed ecco che anche la comminity di DotNetSide si è risvegliata proponendovi il nuovo workshop "Future Development".

    E' stata un'occasione molto interessante per toccare con mano alcune delle tecnologie che saranno alla base dello sviluppo software web e non, nei prossimi anni. In particolare il sottoscritto vi ha proposto una sessione su HTML5, il nuovo standard in via di definizione, spinto molto da Microsoft non solo attraverso le nuove versioni di Internet Explorer, ma anche come piattaforma di sviluppo per le applicazioni Metro Style di Windows 8.

    Estremamente piacevoli ed interessanti sono state anche le sessioni tenute da Vito Arconzo, Giuseppe Dimauro e Stefano Fio. Il primo ha mostrato uno sviluppo diverso dal solito, basato sul SDK di Kinect, mentre gli altri due ci hanno deliziato con le ultimissime tecnologie Microsoft in termini di sistemi operativi server, desktop e relativi strumenti di sviluppo.

    Al seguente link potete scaricare il file contenente sia le slide che la demo mostrata nel corso della mia sessione.

    Download Slide e Demo

    altro

  • Orario Treni 1.2 per iOS e beta per WP7 Mango

    Ieri è stata pubblicata sull'Apple Store la nuova versione di Orario Treni che introduce le seguenti novità:

    • E' stata aggiunta nella maschera di ricerca delle soluzioni di viaggio la visualizzazione degli scioperi nazionali nel settore dei trasporti, utile per evitare spiacevoli sorprese. La nuova funzionalità è accessibile attraverso il tasto "i" presente in alto a destra
    • Luca ha lavorato molto per migliorare il supporto allo Screen Reader Voice Over di iOS, grazie al quale Orario Treni è diventato un'applicazione meglio accessibile da coloro che hanno difficoltà e che per questo motivo si affidano a tale tecnologia per utilizzare un iPhone
    • In generale sono stati adottati una serie di trucchi per migliorare le performance nella ricerca e nella visualizzazione dei risultati
    • Abbiamo risolto, inoltre, una serie di bug segnalati dagli attuali utilizzatori dell'app

    Vi mostro, inoltre, un work in progress della versione per Windows Phone 7

    Devo ammettere di trovare la programmazione su Windows Phone 7 molto più semplice e rapida rispetto a quanto accade con iOS, nonostante l'uso di Monotouch. In ogni caso immagino che queste sensazioni siano normali: grazie al mio lavoro, .NET e Silverlight li conosco in maniera molto approfondita, mentre Monotouch (e le API delle quali fa il binding) è stato tutto da scoprire.

    Se dovessi fare un paragone tra le API messe a disposizione da Microsoft e Apple, ritengo lampante la differenza: lavorare con iOS equivale a lavorare a più basso livello, dove concetti come il data binding sono molto lontani. Questo non significa che non ci sia spazio per l'applicazione di pattern e, anzi, l'infrastruttura di iOS è stata per me un ottimo esempio di implementazione del pattern MVC su una piattaforma non managed. Tuttavia è evidente che con linguaggi come lo XAML ed il portentoso motore di binding messo in piedi con WPF e Silverlight, la piattaforma Microsoft risulta essere molto più evoluta, oltre a permettere l'applicazione di pattern come il MVVM del quale sono diventato uno scrupoloso adepto.

    altro

  • Microsoft .NET Framework 4 Platform Update 1

    Forse non tutti sanno che nel mese di Aprile di quest'anno Microsoft ha rilasciato un aggiornamento del .NET Framework 4 particolarmente importante e che a mio avviso avrebbe dovuto ricevere maggiore attenzione dalla community online di sviluppatori .NET, ma che per ragioni poco comprensibili è passato quasi inosservato.

    Sto parlando del Platform Update 1, un aggiornamento che si compone di tre diversi pacchetti:

    • Microsoft .NET Framework 4 Platform Update 1 (KB2478063)
    • Multi-Targeting Pack for Microsoft .NET Framework 4 Platform Update 1 (KB2495638)
    • Microsoft .NET Framework 4 Platform Update 1 – Design-time Package for Visual Studio 2010 SP1 (KB2495593)

    Il Platform Update 1 porta una interessantissima novità in Windows Workflow Foundation 4: le macchine a stati. Chi di voi ha seguito questa API, sa bene che una delle sue deficienze, anzi probabilmente l'unica sua pecca, è rappresentata dall'impossibità di realizzare workflow a stati in maniera esplicita.

    Il Platform Update 1 colma questa lacuna e l'importanza di questo aggiornamento è tale da farlo quasi sembrare una sorta di Service Pack 1 del .NET Framework 4 in quanto per utilizzare le nuove funzionalità è necessario installare il runtime (il primo dei tre pacchetti che vi ho citato), aggiungere il supporto al multi-targeting (secondo pacchetto) ed aggiungere un pacchetto dedicato al designer dei workflow di Visual Studio 2010 SP1.

     

    Installati tutti e tre i pacchetti è necessario cambiare il target del progetto .NET impostandolo esplicitamente a ".NET Framework 4 Platform Update 1 (KB2478063)". Senza effettuare questa operazione non è possibile utilizzare i nuovi workflow a stati.

    Ho già testato questi nuovi workflow e non ho riscontrato particolari problemi, anzi consentono di modellare in maniera abbastanza esauriente un flusso a stati. Consiglio a chi fosse interessato ad approfondirli, di dare un'occhiata ad un articolo pubblicato nei blog MSDN che effettua una panoramica sulle novità introdotte.

    L'unico elemento negativo che mi sento di sottoporre alla vostra attenzione è la modalità con cui Microsoft ha rilasciato tale aggiornamento. Chi credeva che con il .NET Framework 4 fossero finite le incongruenze nelle modalità con il quale il framework è stato versionato in passato (3.0, 3.5, 3.5 SP1, ecc...), dovrà ricredersi visto che, invece di chiamare questo aggiornamento 4.1 (come saggiamente fatto dal team dell'Entity Framework), hanno deciso di adottare il termine Platform Update 1 che vi ritrovare addirittura nel menu a tendina del target completo di numero della knowledge base. Una scelta che certamente non va nella direzione della massima chiarezza.

    altro

  • Orario Treni si aggiorna alla versione 1.1.1

    Quest'oggi vi segnalo che Orario Treni è stata aggiornata alla versione 1.1.1 che introduce molteplici novità:

    • Ferrovie locali: è stato aggiunto il supporto alle ferrovie locali Trenord (ex Lenord), integrate in Trenitalia, e alle Ferrovie Sud Est, supporto che fa di Orario Treni l'unica applicazione nel suo genere a proporre soluzioni di viaggio che vanno oltre le classiche tratte di Trenitalia
    • Orario Treni è già pronto per le CPU dual core alla base dei prossimi iPhone: una serie di operazioni, tra cui la ricerca contemporanea su più linee ferroviarie, è stata parallelizzata in modo da sfruttare al meglio la prossima generazione di processori
    • Accessibilità: è stato migliorato notevolmente il supporto alla tecnologia Screen Reader Voice Over di iOS per consentire la massima fruibilità anche a persone con difficoltà nell'uso dei dispositivi touchscreen
    • Performance: oltre alle migliori performance dovute alla parallelizzazione di alcune operazioni, anche sulle attuali generazioni di iPhone è stata ottimizzata la visualizzazione dei risultati delle ricerche
    • Bug: una serie di bug che ci sono stati segnalati sono stati risolti

    Ma le novità non finiscono qui. Ben presto presenterò un nuovo progetto sempre per iPhone/iPad e nel frattempo ho intenzione di preparare un post sull'Entity Framework. Stay tuned!

    altro

  • Orario Treni per iPhone

    Non è mai semplice approcciarsi ad una nuova tecnologia, specie quando stiamo parlando di qualcosa di realmente nuovo come può essere lo sviluppo di un'applicazione per iPhone per uno che ha sempre avuto a che fare con ambienti Microsoft.

    Nonostante tuttto, dopo un'attenta analisi e un po' di ore di sviluppo è nata Orario Treni, un'applicazione che ha l'obiettivo di aiutare tutti coloro che fanno del treno il loro mezzo di locomozione principale, fornendo informazioni utili per poter pianificare il proprio viaggio:

    • Soluzioni di viaggio dirette e con cambi, indicando una stazione di partenza e di arrivo
    • Treni in arrivo ed in partenza data una stazione, completo di segnalazione dell'eventuale ritardo
    • Dettaglio di un treno a partire dal suo numero o dalle funzionalità precedenti, che consente di monitorare il percorso del treno, completo di numero di binario e minuti di ritardo per ogni sua fermata

    Dal punto funzionale vorrei porre l'accento del progetto sulla completa apertura da parte di noi sviluppatori a critiche e suggerimenti che gli utenti vorranno sottoporci attraverso l'apposito indirizzo email support@vifani.com. Si tratta di un'applicazione fatta per le persone ed è pertanto fondamentale per noi ricevere il loro parere al fine di poter migliorare il servizio. Contrariamente a quanto accade spesso con molte applicazioni disponibili sull'Apple Store, non è nostro obiettivo abbandonare Orario Treni al suo destino, ma vogliamo farla evolvere al fine di diventare un vero e proprio punto di riferimento nel panorama degli strumenti utili a pianificare un viaggio con un mezzo di locomozione che, visti i prezzi dei carburanti, assumerà un'importanza sempre maggiore nella vita delle persone.

    Al momento Orario Treni tratta esclusivamente treni delle Ferrovie dello stato, ma tra le prime evoluzioni che abbiamo intenzione di implementare, c'è anche l'integrazione di ferrovie locali come LeNORD e Ferrovie Sud Est.

    Dal punto di vista tecnico Orario Treni riprende quanto già vi avevo accennato in un precedente post: si tratta essenzialmente di un client di un'applicazione service oriented e questo ci consentirà ben presto di completare l'implementazione di una versione per Windows Phone 7, già in avanzato stato di sviluppo.

    Maggiori informazioni sull'applicazione potete trovarle nell'apposita pagina di questo sito. Ah, quasi dimenticavo, naturalmente l'applicazione è disponibile su Apple Store ;-)

    altro

  • Applied Patterns e Dependency Injection: le slide

    Sono molto contento di aver partecipato al workshop Applied Patterns. Contrariamente a quanto fatto fino ad ora, infatti, quello di giovedì 31 è stato un workshop diverso dagli altri, uno di quelli che possono veramente essere associati alle espressioni "community" e "condivisione della conoscenza". Per carità, non è mia intenzione sminuire le esperienze precedenti, ma in questo caso penso che ci sia stato qualcosa in più.

    Non ci siamo limitati semplicemente a raccontare come funziona una tecnologia Microsoft, ma abbiamo discusso di pattern di programmazione con i presenti, raccontando le nostre esperienze, le difficoltà che si incontrano sia in fase di progettazione, che di realizzazione adottando questi pattern, soprattutto quando si deve fare i conti con parecchio codice legacy.

    Insomma un'esperienza nuova ed appassionante, che penso sia stata molto apprezzata dai partecipanti e che spero riusciremo a replicare in futuro con maggior frequenza.

    Non posso esimermi dal ringraziare nuovamente Fabio e DotNetSide per avermi offerto nuovamente l'occasione di fare da speaker, e saluto anche a Leo che mi ha fatto conoscere il mondo di MEF, un'interessantissima API che, sono certo, non mancherò di adottare al momento opportuno.

    Il link di seguito vi permetterà di scaricare le slide e la soluzione di esempio che ho mostrato nel corso della mia sessione sulla Dependency Injection, completo di file sql per generare il database SQL Server di esempio.

    Slide e Demo su Dependency Injection

    altro

  • DotNetSide Workshop "Applied Patterns"

    Il prossimo 31 Marzo, la community DotNetSide, terrà un workshop denominato "Applied Patterns" presso il Rondò Hotel di Bari.

    In questa occasione sarò nuovamente presente in qualità di speaker e vi presenterò un design pattern che ho studiato ed applicato da ormai 4 anni e del quale ho imparato ad apprezzare i molteplici benefici al punto che ad oggi lo applico abitualmente in fase di progettazione ed implementazione non solo lato server, ma anche lato client.

    Parlo della Dependency Injection, anche nota come Inversion Of Control, un pattern ad oggi disponibile in .NET mediante svariante librerie. Io vi presenterò Unity 2.0, facente parte dell'Enterprise Library 5, disponibile sia per progetti .NET che Silverlight, mostrandovi anche un caso pratico di adozione di questa libreria e design pattern a partire da un progetto sviluppato con il pattern "spaghetti code" :-)

    Oltre alla mia sessione, Leonardo Alario vi parlerà di altri pattern per la realizzazione di applicazioni estendibili, ed infine ci sarà una Open Session nella quale discuteremo degli argomenti trattati con ampio spazio per dibattiti e domande.

    Correte a registrarvi sul sito di DotNetSide!

    altro

  • Visual Studio 2010 SP1 ed Internet Explorer 9

    Tantissime sono le novità che si sono susseguite in queste ultime due settimane nel mondo MIcrosoft ed eccomi qui pronto a riassumervele brevemente.

    Visual Studio 2010 SP1
    Assolutamente un must per tutti gli sviluppatori .NET. Vi consiglio caldamente di installarlo in quanto, oltre a risolvere tutta una serie di bug riscontrati nella versione iniziale di Visual Studio 2010, migliora moltissimo alcuni scenari nella programmazione. Volete alcuni esempi? Avete mai provato a visualizzare nel debugger di Visual Studio 2010 un Dictionary in un progetto Silverlight? Bene, se non lo avete fatto, fatelo e vi renderete conto che è molto difficile, per non dire impossibile, visualizzarne il contenuto. Il problema era stato già risolto nel SP1 di Visual Studio 2008, ma sembra che i ragazzi di Microsoft abbiano sviluppato il visualizer dell'ultima versione senza partire da quella precedentemente più aggiornata. Con il Service Pack 1 il problema viene risolto.

    Altra interessante funzionalità, per chi ha una versione di Visual Studio 2010 dotata di profiler, è la possibilità di eseguire il profiling di applicazioni Silverlight comodamente dalla UI, senza dover effettuare tutte le operazioni manuali da riga di comando fino ad ora necessarie.

    Attenzione al processo di installazione che potrebbe fare un po' i capricci. Al sottoscritto, per esempio, verso la metà dell'installazione ha mostrato un'allarmante procedura di rollback rivelatasi essere, però, una sorta di bluff. Completato il rollback, infatti, il setup ha concluso col messaggio "Installazione completata correttamente" e, effettivamente, Visual Studio risulta essere perfettamente funzionante con il Service Pack 1 installato.

    Internet Explorer 9
    E' uscita la nuova versione del browser Microsoft che integra moltissime novità. Consiglio caldamente di installarlo a tutti coloro che vari motivi hanno sempre utilizzato Internet Explorer come browser principale. Inoltre, anche a chi non ricade in questa categoria, ma utilizza altri strumenti per navigare sul web, suggerisco di dargli un'occhiata. Sono stati effettuati notevoli passi in avanti da tanti punti di vista. Le prestazioni ad esempio sono aumentate tantissimo non solo per quanto riguarda l'avvio del browser stesso, ma soprattutto nel rendering delle pagine web e nell'esecuzione di codice javascript. Il tutto è stato ottenuto grazie sia ad un nuovo motore javascript ottimizzato per sfruttare le CPU a più core di ultima generazione, che all'accelerazione in hardware via GPU della visualizzazione di qualsiasi elemento sullo schermo: dal testo, alle immagini, ad addirittura Flash Player (a patto di aggiornare quest'ultimo alla versione 10.2).

    Interessante per gli sviluppatori anche il supporto agli standard HTML5 e CSS3, oltre agli strumenti integrati per lo sviluppo web: profiler, debugging di javascript e network monitor.

    altro

  • Nuovo hosting

    Finalmente mi sono liberato di Aruba!!!

    Chi inizia a sviluppare siti web in Italia non può non conoscere e lasciarsi tentare anche dai discreti prezzi di Aruba per l'hosting. Tuttavia vi assicuro che quando si vuole iniziare a fare qualcosa di serio, magari con l'ausilio delle ultime tecnologie, ci si rende immediatamente conto che Aruba è assolutamente inadeguato e fortemente limitante. Ve ne avevo già parlato alla presentazione della nuova veste di questo blog e, dopo una ricerca abbastanza approfondita, penso di aver fatto una buona scelta passando a ASPNIX.

    Diversi amici e colleghi me lo hanno consigliato e si tratta tra l'altro dell'hosting anche di DotNetSide. Il trasferimento è stato piuttosto rapido (2-3 giorni lavorativi) e l'adeguamento del sito al nuovo hosting è stato molto più semplice del previsto. Finalmente ho potuto togliere le estensioni alle regole di routing, obbligatorie per far funzionare ASP.NET MVC su Aruba, oltre ad aver potuto converiire il progetto con target .NET Framework 4.

    altro

  • SMAU Bari 2011: un altro evento fantastico

    Un altro evento è stato fatto, il secondo nel quale partecipo in qualità di speaker con la community di DotNetSide. E' stato molto bello rivedere tanti amici e colleghi allo SMAU 2011 di Bari, un evento che frequentavo ogni anno circa 10 anni fa nella location di Milano quando scrivevo recensioni hardware sul web, e che mi ha fatto molto piacere veder riproposto nella mia città.

    Come sempre, questi eventi e fiere, rappresentano delle occasioni per reincontrare persone che si conoscono e per conoscerne di nuove, e poiché è da questi incontri che emergono nuove occasioni sia di business, che di arricchimento professionale e umano, consiglio vivamente tutti coloro che per motivi di tempo o per scetticismo non sono potuti essere presenti, di non mancare alle prossime occorrenze.

    Mi ha fatto molto piacere vedere persone interessate all'approfondimento delle tecnologie alla base del .NET Framework e a tal proposito di seguito vi pubblico un link dal quale potrete scaricare le slide, insieme alla soluzione di esempio che ho mostrato nel corso della sessione, completa di script per l'installazione del database Nothwind.

    Ringrazio nuovamente Fabio e Vito per la loro accoglienza e cortesia e tutta la community di DotNetSide che, sono sicuro, continuerò a frequentare anche nelle prossime puntate :)

    Notevoli novità sono in arrivo e chi segue il mio profilo su LinkedIn se ne sarà già reso conto, ma i dettagli ve li riporterò in una prossima occasione. Stay Tuned!

    SLIDE e DEMO Entity Framework

    altro

  • DotNetSide Community Tour @ SMAU Bari 2011

    Il prossimo 10 Febbraio, in collaborazione con Microsoft, DotNetSide terrà l'evento Community Tour @ SMAU Bari 2011, nel quale sarò presente anche io in veste di speaker.

    L'evento si terrà presso la Fiera del Levante e verranno trattati i seguenti argomenti: ASP.NET MVC 3, WCF, Windows Phone 7, Silverlight e ADO.NET Entity Framework. E' una bella occasione per apprendere, discutere e confrontarsi con altri professionisti del settore e pertanto vi invito tutti a partecipare attivamente.

    Per maggiori informazioni vi invito a visitare la pagina dedicata della community DotNetSide.

    altro

  • Installare Microsoft Forefront Security 2010

    Anche se da sempre dal punto di vista professionale ho lavorato nel mondo dello sviluppo software, non ho mai disprezzato la controparte sistemistica. Anzi, come ogni buon informatico che si rispetti, ho la mia cerchia di amici e parenti che sovente mi chiedono aiuto e consigli. Qualche volta mi capita anche di assemblare qualche PC, un'attività che trovo sempre interessante perché mi consente di mantenermi al passo con i tempi anche dal punto di vista hardware.

    E' capitato, tuttavia, che nella mia azienda, in questi giorni si è deciso di affidare la sicurezza al nuovo prodotto Microsoft Forefront Security 2010. Molti potrebbero pensare che quest'attività sia semplice e banale, magari basata su un classico setup del tipo "Avanti, Avanti, Avanti.... Fine". Beh ho potuto constatare con mano che non sempre è così e che il lavoro del sistemista sia un lavoro che meriti moltissimo rispetto, se non altro per l'enorme pazienza di cui bisogna armarsi quando ci si agginge a fare un'operazione come quella che ho fatto io.

    Per installare Forefront Security 2010 è necessario, infatti, installare prima Windows Update Services e System Center Configuration Manager, due strumenti che consentono di centralizzare gli aggiornamenti di Windows all'interno di un dominio e di gestire tutta una serie di operazioni tra le quali, la più importante per chi, come me, voleva installare Forefront Security 2010, deployare sulle macchine appartenenti al dominio un'applicazione.

    Inutile dirvi che c'è da perdersi nell'elenco di prerequisiti dei prerequisiti che sono necessari, oltre a tutta una serie di operazioni più o meno ufficiali, ma di fondamentale importanza al fine di raggiungere il risultato atteso.

    Morale della favola: dopo tre giorni di duro lavoro tra Group Policy, aggiornamenti, impostazioni varie, regole del firewall e quant'altro, e dopo che un mio carissimo collega, in un attimo di smarrimento, mi ha ricordato con una domanda retorica ("ma non doveve installare solo un antivirus?") quale era il mio obiettivo, sono riuscito a raggiungerlo :-)

    La più grande soddisfazione l'ho ottenuta a seguito della prima scansione schedulata sui client: due virus trovati, uno dei quali pensavamo di essere riusciti a debellare completamente nel corso dell'estate :-D

    altro

  • Silverlight e la sua asincronicità

    Avete mai lavorato ad un progetto Silverlight con un backend fatto con il .NET Framework 4? Se lo avete fatto, vi renderete conto che una volta abituati a tutta una serie di comodità come, ad esempio, Parallel FX, ma anche semplici classi per la compressione degli stream, vorrete ben presto convincere il responsabile del progetto ad abbandonare l'idea di un sistema client fatto in Silverlight per ripiegare su WPF.

    La realtà è che noi siamo informatici e che il nostro lavoro è per buona parte quello di risolvere problemi. Possiamo scegliere di farlo ad alto livello, risolvendo un problema ad un cliente, o a basso livello, risolvendo un problema di programmazione, ma in fin dei conti sempre di ideare/trovare/scopiazzare soluzioni stiamo parlando.

    Nella fattispecie sto trovando molto stimolante l'ultimo progetto a cui sto lavorando, perché lavorare con Silverlight mi ha posto di fronte sfide nuove e la ricerca delle soluzioni non è mai stata noiosa e banale. Vi faccio qualche esempio di una serie di situazioni che mi hanno coinvolto.

    Se sviluppate un'applicazione business in Silverlight, prima o poi vi scontrerete con l'accesso ai dati e vi renderete ben conto che ovviamente non esiste uno straccio di ADO.NET. Questo può essere un grande problema per chi è abituato a lavorare a botte di DataSet e DataTable, ma oggi esistono gli strumenti per andare oltre ADO.NET grazie ad ORM come l'Entity Framework 4 e al supporto dei POCO.

    Chiaramente l'accesso ai dati da parte di Silverlight non viene fatto direttamente mediante connessione a database, ma solo tramite WCF. Poco male diranno i molti che conoscono WCF e che sanno bene quanto è semplice esporre servizi (e quindi dati) con questa potente API.

    Ciò che però molti ignorano è che utilizzare WCF da Silverlight non è esattamente uguale ad usarlo da altre applicazioni .NET per una semplicissima ragione: Silverlight richiede necessariamente l'uso di chiamate asincrone.

    I pattern asincroni sono ben noti fin dalle prime versioni del .NET Framework, ma diciamoci la verità: ragionare e progettare un sistema in modo asincrono non viene naturale quanto lo è farlo in modo sincrono e, pertanto, la realtà è che pochissimi hanno utilizzato questo tipo di pattern nella progettazione di un'applicazione standard.

    Inizialmente ho provato a forzare il sistema tentando di de-asincronizzare le chiamate utilizzando un AutoResetEvent, un trucco meschino devo ammetterlo, che tra l'altro è fallito miseramente perché se mettete in attesa il thread della UI, bloccate automaticamente la vostra applicazione e non riceverete neanche la vostra response dal servizio WCF.

    A questo punto ho preso la decisione di fermarmi, di sedermi a tavolino e di riprogettare le componenti client utilizzando pattern asincroni a go go. Bene, sapete che vi dico? Che sono molto soddisfatto del risultato che sto raggiungendo insieme al mio team di sviluppo. Non è semplice effettuare questo cambio di prospettiva, ma è bastato fare di necessità virtù e lavorare sodo per ottenere risultati più che ragguardevoli.

    Il consiglio che posso dare a tutti coloro che hanno riscontrato difficoltà di questo tipo con Silverlight, è di non arrendervi, ma anzi di cogliere l'occasione per approfondire approcci meno canonici ai nostri problemi.

    altro

Archivio Blog