martedì 9 giugno 2009
Il primo worskshop UGIDotNet in trasferta è stato un autentico successo. A volte aggettivi come questo si utilizzano un po’ a sproposito, ma stavolta io credo che illustri esattamente quanto è accaduto ieri.
Parliamo della giornata di workshop. Ho due parole che lo possono definire: Surfraf e Mono.
Surfraf è qualcosa che non posso descrivervi, non tanto perchè non sia possibile farlo, ma perchè provarci non renderebbe minimamente giustizia all’incredibile lavoro di Raf che nella sua sessione ci ha letteralmente stupefatti. Non posso fare altro che rimettermi alle buon anime che hanno scattato qualche foto dell’oggetto e a Raf stesso. A proposito: il prossimo che mi dice che Windows 7 è giusto una serive pack di Vista gli sputo in un occhio, gli spezzo le ginocchia e non contento lo denuncio al tribunale internazionale per i diritti dell’umanità.
Mono. Per me (vile, ignorante e peso come si dice nella mia terra natale) è stata un’autentica sorpresa. Un progetto incredibilmente maturo non solo dal punto di vista del framework, ma anche dei tools, sia quelli già disponibili, sia quelli che arriveranno a breve. Dopo aver abbracciato la virtualizzazione con VMWare, la persistenza con Oracle, sono deciso ad affrontare anche l’hosting di applicazioni C# su Linux, ovvero ampliare e arricchire la mia visione di “target” tecnologici. Un grazie molto sentito a Massimiliano per la sua sessione illuminante e per la chiaccherata tecnologica in albergo la sera prima del workshop.
La mia sessione sull’uso di RDBMS diversi con Entity Framework è andata abbastanza bene, devo certamente migliorare la tecnica oratoria (un po’ caotica e ripetitiva a volte), però dal punto di vista della fluidità della presentazione e il rispetto del tempo a disposizione devo dire che sono soddisfatto.
Durante tutta la giornata si è veramente respirata l’atmosfera di community, e spero che sia stato lo stesso per i partecipanti, sono tornato a casa veramente a mille anche grazie ai moschettieri Mauro, Corrado, Lorenzo, Ugo e ovviamente al Pres, promotore e anima di tutto questo.
Infine, proprio per chiudere in bellezza questo post, un pensiero alla location. Un grazie non abbastanza sufficiente a contraccambiare l’ospitalità va a Dental Trey, perchè la gentilezza e la disponibilità che ci hanno dimostrato è stata semplicemente imbarazzante. Non solo durante tutta le giornata del workshop, ma anche il giorno prima quando alcuni di noi sono stati ospiti per una cena (anzi LA cena) che credo rimarrà negli annali per qualità e quantità sia di buona compagnia, sia di libagioni.
La speranza è che questa esperienza possa essere stata la prima di un appuntamento ricorrente, una sorta di evento da consolidare anno dopo anno.
venerdì 22 maggio 2009
Come detto qualche giorno fa venerdì prossimo 29 maggio, terrò un workshop tematico su Entity Framework a BASTA! Italia 2009 in quel di Mliano.
Come mi fanno notare dalla regia, mi devo reputare abbastanza fortunato perchè per una banale concomitanza temporale, proprio questa settimana è uscito Visual Studio 2010 Beta 1, in cui è presente, fresco fresco (e magari stavolta anche libero, agile e felice), Entity Framework 4.0 Beta 1.
Ebbene, la decisione è stata presa, il dato è stato tratto, bando alle ciance, gambe in spalla:
- ho creato una bella macchina virtuale VMPlayer con Windows 7 RC, SQL Server 2008 SP1 e Visual Studio 2010 Beta 1
- sto alacremente approfondendo Entity Framework 4.0 Beta 1, almeno nelle sue peculiarità più importanti e che lo differenziano maggiormente dalla versione 1.0 attuale (la 2.0 e la 3.0 chissà che brutta fine hanno fatto poverine…)
- sto aggiornando la scaletta del workshop per fare qua e là un po’ di posto proprio al nuovo arrivato, modificando qualche demo sul tono “Prima e Dopo” (del resto “aggiungi un posto a tavola che c’è un amico in più” cit.)
Insomma chi verrà al workshop si beccherà compresa nel prezzo (quello ufficiale, alla fine della giornata passerò con un cestino delle offerte per la mia questua personale) una overview anche sulla prossima versione di Entity Framework.
E visto che ci sono, qualcosina dirò anche la sera prima al Community Night quando metterò a confronto dal punto di vista della product selection proprio Entity Framework ed NHibernate.
Dimenticavo: chi conoscesse già NHibernate 2.x, può tranquillamente farsi una pausa caffè mentre parlo di Entity Framework 4.0...
lunedì 11 maggio 2009
BASTA! Italia raddoppia e dopo la tappa di Roma stavolta è il turno di Milano (28 e 29 maggio) in una veste più orientata ai workshop.
Anche a questo giro sarò presente sulle tematiche di Entity Framework: il 29 maggio terrò un workshop di una giornata intera dove cercherò di affrontare l’uso del famigerato Entity Framework nel mondo reale.
La tappa di Roma, la vera e propria conference, è stata decisamente positiva e mi fa piacere che gli organizzatori abbiano trovato il modo di replicare a Milano andando ad approfondire tematiche che stanno riscuotendo grande attenzione. Per me il formato workshop è una novità, ma devo dire che l’aspettativa è quella di poter presentare la tecnologia nel contesto di un discorso organico, senza la premura di dover stare nella fatidica ora della singola sessione.
Di cose da dire ce ne sono decisamente molte: in Managed Designs stiamo utilizzando Entity Framework in maniera molto intensiva da quasi un anno in progetti reali, uno dei quali oggi in produzione su RDBMS Oracle. La nostra attività ci ha portato ad affrontare, oltre l’uso di un db che non sia SQL Server, anche tutte quelle problematiche relative all’uso di un Entity Data Model in contesti distribuiti con WCF e Silverlight 2, senza esserci fatti mancare ASP.NET MVC (ebbene sì, siamo dei pazzi furiosi…).
Per i soci UGIDotNET esiste uno uno sconto del 15% sulla quota di iscrizione, le informazioni a riguardo si possono trovare nella sezione Benefit.
Ovviamente non poteva mancare l’ormai irrinunciabile Community Night, la sera del 28 maggio, in cui UGIDotNET e ASPItalia si troveranno nuovamente a braccetto con tre sessioni nell’after-hour totalmente gratuito. Anche in questo caso, per scaldare i motori in vista del giorno seguente, terrò una sessione sempre su Entity Framework. Proporrò un percorso di valutazione in caso di scelta tecnologica sull’adozione di un ORM: Entity Framework o NHibernate?
giovedì 19 marzo 2009
Sono molto soddisfatto di Basta! Italia 2009.
Innanzitutto lasciatemi un plauso all’organizzazione, perchè per essere il debutto in Italia di una delle manifestazioni più importanti di Germania è stato veramente un ottimo inizio. Credo che l’anno prossimo andrà anche meglio.
La compagnia poi è stata come al solito entusiasmante, soprattutto perchè stavolta in trasferta, e le mangiate sono state spettacolari (mi avete beccato: sono state la cosa più importante…).
Per quanto riguarda le sessioni che ho potuto seguire devo dire che averne anche in inglese è solo un fatto più che positivo: dobbiamo cominciare ad essere molto meno provinciali, provare ad invitare speaker non italiani, anche solo per un confronto sull’approccio all’esposizione di una sessione.
Per quanto riguarda me, bè, tre sessioni in un giorno solo sono state un bel banco di prova, certo giocavo in casa in un certo senso (tutte e tre su Entity Framework, che uso quotidianamente da almeno 8 mesi), ma il giorno prima non ero affatto tranquillo. Sono soddisfatto sinceramente, non ho ancora i feedback ufficiali, ma personalmente penso di essere stato all’altezza di un’esposizione dignitosa. La cosa curiosa è che mi sono divertito di più nell’unica sessione in cui non ho fatto vedere codice (incentrata sul confronto qualitativo fra EF, NH e LINQ to SQL), un po’ perchè mi ha fatto tornare in mente l’esposizione della tesi all’università, un po’ perchè essendo l’ultima sessione della giornata dalle 18:00 alle 19:00 ho avuto la sensazione che la platea apprezzasse un’esposizione di questo tipo, dopo un’intera giornata di (piacevole) bombardamento a botte di Visual Studio.
Come al solito poi, ho fatto la spugna in fatto di apprendimento, rubando consigli ed esperienze a tutti coloro a cui potevo rubare.
Ultima considerazione: il viaggio. L’era degli spostamenti in aereo fra Milano e Roma è terminata. L’alta velocità è un piacere sotto tutti i punti di vista, non penso che userò mai più un aereo per andare a Roma, soprattutto quando a fine anno apriranno anche le gallerie fra Bologna e Firenze. Ovviamente da geek quale sono, durante il viaggio di ritorno, sulla tratta Bologna-Milano ho attivato il navigatore Garmin sul mio palmare per vedere a che velocità stavamo procedendo: superati i 300 km/h nel massimo comfort di viaggio.
martedì 3 marzo 2009
Quest’anno vede il debutto di una conferenza di grande successo in Germania, anche in Italia: Basta!
Si terrà a Roma, e parteciperò come speaker il giorno martedì 17 in due sessioni, entrambe incentrare su Entity Framework
La sera poi, UGIDotNET organizza l’after hour in cui è possibile votare già da qualche giorno le sessioni che si vorrebbero vedere fra alcune a scelta, ce n’è una anche da parte mia, sempre su Entity Framework, stavolta incentrata sull’accoppiata con Oracle invece che il “classico” SQL Server.
Per quanto riguarda me sarà una sorta di debutto, anche se il primo assaggio di sessione da speaker l’ho avuto questa estate al più classico workshop UGIDotNET a Segrate in casa Microsoft, ma diciamo così giocavo in casa.

lunedì 10 novembre 2008
Facebook, blogs, web 2.0…
divertenti certo, magari per ruzzarci un po’, ma alla fine la mia vera unica grande passione per rimanere in contatto con le persone su internet è il vetusto NNTP, la mia agorà virtuale impossibile da abbandonare.
tutto il resto è noia.
Saluti.
mercoledì 3 settembre 2008
In LINQ esiste la possibilità di rendere piatta una gerarchia mediante l'utilizzo del costrutto Select Many, questo costrutto è particolarmente utile quando si vogliono selezionare Customers (entità padre) attuando un filtro sugli orders (entità figlio, ovvero un Customer è legato ad una collection di Orders e viceversa un Order è legato ad un solo Customer).
Ad esempio volendo filtrare tutti i Customer che hanno eseguito almeno un Order il cui totale è maggiore di 100 si può scrivere:
Select Many
1 IList<Customer> filteredCustomers =
2 from c in customers
3 from o in c.Orders
4 where o.Amount > 100
5 select c;
Ho scoperto che questo costrutto in Entity Framework tira dei brutti scherzi con il fetch eager dei riferimenti di una entità.
Per eseguire un fetche eager in EF si utilizza il metodo Include, quindi se vogliamo caricare un Customer e con un solo round trip sul DB anche tutti i suoi Orders possiamo scrivere come segue:
1 IList<Customer> allCustomers =
2 from c in context.Customers
3 .Include("Orders")
4 select c;
In questo caso ci ritroveremo ogni entità Customer con la lista degli Orders già caricata, e correttamente se si osserva la query SQL generata si potrà apprezzare una LEFT OUTER JOIN fra la tabella [CUSTOMERS] e la tabella [ORDERS] che serve per recuperare tutte le proprietà di ogni Order coinvolto.
Il problema nasce quando la Include viene utilizzata in un costrutto Select Many come quello proposto:
1 IList<Customer> filteredCustomers =
2 from c in context.Customers
3 .Include("Orders")
4 from o in c.Orders
5 where o.Amount > 100
6 select c;
7
Il risultato è ovviamente corretto, nel senso che vengono selezionati i Customer che hanno almeno un Order che soddisfa il filtro, ma il problema è che la Include non ha alcun effetto, ovvero i Customer non vedono inizializzata la propria lista di Orders. Osservando la query SQL effettivamente viene eseguita solo una INNER JOIN solo ed esclusivamente per legare i Customer agli Order su cui in effetti viene eseguito il filtro, ma non c'è traccia del caricamento dei dettagli degli ordini una volta individuati i Customer filtrati.
Per la cronaca osservando il Profiler di SQL Server nel primo caso EF lancia una semplice query T-SQL (un EventClass di tipo SQL), mentre nel secondo lancia una store procedure ExecuteSql (un EventClass di tipo RPC).
domenica 31 agosto 2008
Julie Lerman, che sta scrivendo un libro per O'Reilly circa Entity Frameowrk, piano piano si sta rendendo conto delle "stranezze" (chiamiamole così) in cui ci si imbatte utilizzando EF. Chiariamo una cosa, EF è un framework con cui si può lavorare, tanto che lo sto utilizzando per un progetto reale, ma è suscettibile di critica, soprattutto quando ci si rende conto che chi lo ha progettato è chiaro che non avesse in mente che cosa sia esattamente un ORM.
Per farla breve si è resa conto che probabilmente non sarebbe stata la cosa più furba del mondo esporre alla UI il concetto di EntityKey e EntityReference, di conseguenza è stata "costretta" (da EF ovviamente) a scrivere una tonnellata di codice ripetitivo per incapsulare nelle enitity stesse la gestione degli stessi (ed utilizzare il termine "sick" la dice lunga...).
Beata ignoranza! Nel senso di Persistence Ignorance, che ella scopre essere "tanto cara e tanto onesta" (cit.).
Mi lascia abbastanza scioccato il fatto che tratti l'argomento come una "issue" saltata fuori durante la stesura di codice d'esempio per il libro, come se avesse trovato un fungo velenoso durante una passeggiata nel bosco, quando un minimo di conoscenza della teoria di base degli ORM e appunto della Persistence Ignorance, gli avrebbe suggerito a priori che lo scenario che stava cercando di risolvere si sarebbe tramutato in un incubo (tanto che io ho deciso di non risolverlo, perchè context is king).
Due considerazioni a latere.
Pensiamoci tutti due volte quando siamo tentati di dire che i patterns e compagnia cantante sono solo teoremi dei massimi sistemi, che prima o poi ci troveremo a combattere contro codice di produzione "reale" in cui uno dei tanti vituperati pattern ci avrebbe salvato la vita se correttamente implementato (e quindi speriamo che il team di EF abbia capito la lezione, e che V2 sia in realtà la V1 di un prodotto che di uguale avrà solo il nome).
Rimango basito e dubbioso quando scopro che ci sono persone che di ORM e architetture che ne fanno uso (nella fattispecie basate su Domain Model) non ne sanno quasi nulla e che vengono scelte per scrivere libri inerenti: Julie lerman e David Sceppa, con due libri su EF in uscita (O'Reilly e Microsoft Press), ne sono un esempio lampante.
sabato 30 agosto 2008
Il fondatore di Castle Project e le amare riflessioni circa il nostro lavoro. Tutto il mondo è paese, non solo geograficamente, ma anche tecnologicamente.
Purtroppo.
venerdì 29 agosto 2008
Voglio solo segnalare che nella nuova preview di ASP.NET MVC gli extension methods generici di HtmlHelper sono stati spostati da System.Web.Mvc a Microsoft.Web.Mvc, nota che non compare nella release note.
Per chi può, eviti di andare di reflector come me...