La scorsa settimana sono stati pubblicati due webcast su be-it - il sito di video di Microsoft Italia - che ho registrato recentemente. L'argomento è l'Entity Framework 4.0, che è stato rilasciato recentemente all'interno del Framework 4.0. I webcast sono i seguenti:

  1. Entity Framework 4.0: Introduzione
  2. Entity Framework 4.0: Le novità

Sono particolarmente contento del primo che è una semplice introduzione agli ORM, realizzata con poche slide animate per raccontare le problematiche dell'object realtional mapping attraverso la lente di Entity Framework. I vostri commenti su cosa migliorare sono ben accetti ovvaimente.


Una delle caratteristiche degli extension methods che mi piace di più è la possibilità di chiamarli anche su variabili che siano "null", ovvero che non contengano alcun istanza. Tipicamente il "null" è uno di quei casi che dobbiamo sempre gestire e che ci costringe ad usare più condizioni di quelle che realmente servano. Poniamo ad esempio di dover invocare un evento all'interno di un controllo. Prima degli extension methods il codice che usavo era più o meno questo:

   1: EventHandler<EventArgs> handler = this.Clicked;
   2:  
   3: if (handler != null)
   4:     handler.Invoke(this, EventArgs.Empty);

In buona sostanza si verifica prima che qualcuno abbia "agganciato" l'EventHandler, nel qual caso la variabile non sarà "null", e poi si esegue il metodo Invoke che esegue il delegate. La prima riga, che può sembrare inutile, ha la importante funzione di prendere un riferimento all'evento allo scopo di evitare che una eventuale garbage collection ci "rubi" l'EventHandler sotto il naso causando una NullReferenceException nonostante la verifica di cui sopra.

Buona norma è mettere il codice in un metodo "OnClicked", anche se nella mia esperienza ho visto molti ripetere più volte il controllo in un unico blocco di codice (ma questo è un'altro problema...). Il codice, comunque sia, è ampiamente ripetitivo, soprattutto se il controllo espone decine di eventi, e può essere generalizzato usando un generic. Questo vale ovviamente se  non abbiamo l'esigenza di consentire l'override del metodo OnClicked. In questo caso non c'è alternativa. Se invece, come spesso accade, esporre l'override non è utile ecco un codice un po' più furbo

   1: protected void Raise<T>(EventHandler<T> handler, T e)
   2:     where T : EventArgs
   3: {
   4:     if (handler != null)
   5:         handler.Invoke(this, e);
   6: }
   7:  
   8: // --- chiamato così
   9:  
  10: this.Raise(this.Clicked, EventArgs.Empty);

Questo metodo fa uso dell'EventHandler generico e sostanzialmente ci toglie un bel po' di codice. Innanzitutto, dato che l'handler è passato come argomento diventa implicitamente assegnato ad una variabile (il parametro) e quindi siamo al sicuro dalla Garbage Collection, in secondo luogo con una sola riga facciamo tutto quello che ci serve. Si può però fare meglio, e qui entrano in gioco gli Extension Methods:

   1: public static class EventUtils
   2: {
   3:     public static void Raise<T>(this EventHandler<T> handler, object sender, T args)
   4:         where T : EventArgs
   5:     {
   6:         if (handler != null)
   7:             handler.Invoke(sender, args);
   8:     }
   9: }
  10:  
  11: // -- chiamato così
  12:  
  13: this.Clicked.Raise(this, EventArgs.Empty);

Estraendo il metodo dalla classe cui si riferisce il codice diventa molto più riutilizzabile. Grazie all'uso di un Extension Method poi tutto risulta nettamente più leggibile. Il mio consiglio è di creare una classe EventUtils ricca di metodi, che ci consentano di gestire più o meno tutti i casi possibili, con l'EventHandler generico ma anche con quello normale che spesso e volentieri è più che sufficiente per molti utilizzi.

tags: - categories:

Ho pubblicato le slide e il codice dell'ultimo Community Tour 2010.  Come ormai consueto ho usato slide share.

Colgo l'occasione ancora una volta per ringraziare infinitamente le moltissime persone che hanno partecipato all'evento, dalla mattina alla sera, seguendoci con attenzione, interagendo con noi, etc.

Alla prossima

Download: http://blog.boschin.it/download/XeDotNet.Silverlight4.zip (6.4 MB)


Giusto ieri sera guardavo un TG e ho visto il servizio in cui l'ottimo Brunetta (che per inciso gode della mia stima per certe cose) si fregiava del fatto che la Posta Elettronica Certificata è entrata ufficialmente in vigore. Per coincidenza stamattina ho ricevuto dal mio commercialista l'ennesimo messaggio di PEC che come consueto è completamente illeggibile... Credo ve ne siate resi conto tutti, che sta cosa della PEC, anche se condivisibile in termini pratici, è implementata in modo assurdo e completamente inusabile, soprattutto alle persone normali che non hanno la pazienza di decodificare il messaggio, i vari allegati e cercano di leggere il contenuto di un messaggio che il più delle volte è intercalato di strani simboli che lo rendono pressochè incomprensibile. Ovviamente ho dovuto richiedere al mio commercialista il reinvio del messaggio sotto forma di normale email, spiegando il motivo. Credo si configuri un "pattern" con il quale nei prossimi tempi dovremo aver tutti a che fare:

1) si riceve una PEC
2) si tenta di decifrarla
3) se ne richiede il reinvio
4) finalmente arriva il messaggio leggibile come posta normale.

Mi chiedo quanto questo renda inutile la PEC stessa... Sinceramente trovo questo servizio l'ennesima italianata di cui probabilmente beneficerà solamente Infocamere che per quanto ne so è l'istituzione (no, non chiamatela azienda, non lo è) che ha in carico la PEC.

Per quanto mi riguarda farò quanto in mio potere per dissuadere le persone dall'usarla (per quanto potrà servire), e spero che anche questa cosa si risolva nell'ennesimo fallimento della telematica italiana. In attesa magari che qualche servizio più efficace ne prenda il posto... lo so, è una vana speranza ma che ci volete fare, sono un sognatore.


g_04682230 Dopo una breve e infelice pausa, nella quale ho adottato un router , acquistato durante il summit a Seattle, ieri sera appena tornato dalla SQL Conference mi sono subito buttato nell'installare e configurare il nuovissimo che è arrivato mentre ero assente.

Da soddisfatto utente di un Netgear DG834G, avrei dovuto immaginare che lasciare la vecchia strada per quella nuova non era certo una buona idea, ma devo dire che dopo l'esperienza del Belkin questo luogo comune è ampiamente dimostrato.

Dopo poche ore di utilizzo il nuovo DGN 3500 si è rivelato all'altezza del suo predecessore. Connesso in pochi minuti, configurazione intuitiva e perfettamente funzionante e una stabilità della connessione eccezionale. Per intenderci il Belkin non riusciva a garantirmi più di un paio d'ore consecutive di connessione e quando si disconnetteva sembrava non rendersene conto e non riusciva a recuperare. Il nuovo router è connesso da quasi 20 ore consecutive senza dare segno di cedimento.

Sinceramente, se vi serve un router nuovo questo modello Netgear è più che consigliabile.


Che io sia venuto via da WenHost4Life credo sia di pubblico dominio. Rimane l'amaro in bocca per l'aver perso quello che era un efficace provider... ma le mail che mi stanno giungendo in questi giorni rispetto l'hosting che è tuttora attivo fino a naturale scadenza dimostrano (se necessario) la bontà delle mia decisione:

"We wanted to let you know that we have not yet received your payment of 0.00 for your "codeblock" account."

Ok. Resta tutto da capire cosa abbia causato questo immane disastro, ma che si siano fumati il cervello ormai è assodato.


vs2010_logo Certo è che non si può proprio dire che stiamo con le mani in mano. Ho circa un milione di cose da fare, tra ora e giovedì prossimo, per cercare di far funzionare al meglio questi due appuntamenti. Tra moduli di feedback da stampare, telefonate, email di conferma, reminder, logistica, e qualunque altra cosa vi venga in mente, ho racimolato questi dieci minuti per ricordarvi cosa vi/ci aspetta.

Domani sera si terrà il terzo Community Meeting del semestre, quello che tratta di tecnologie web, con il buon Andrea Dottor che sta alacremente lavorando per mostrarvi le meraviglie di ASP.NET MVC. Se il risultato della sua sessione sarà pari anche solo a metà dell'entusiasmo con cui di giorno in giorno mi martella per illustrarmi questa o quella "figata" allora il meeting sarà certamente un successo. Dall'altro capo di Italia c'è anche Andrea Colaci, pronto di certo a parlare delle meraviglie del core di ASP.NET, ma spero altrettanto pronto all'epico viaggio (nelle mani suo malgrado di Alitalia) che lo aspetta nella giornata di domani per raggiungerci a Mestre.

Giovedì prossimo, il 15 Aprile, torneremo a trovarci, in compagnia del lancio di Visual Studio 2010. Unica community del Nord Italia ad ospitare Vittorio Bertocci, vivremo con lui e con Lorenzo Barbieri, Davide Vernole, Davide Senatore, Andrea Dottor e il sottoscritto,  una giornata spettacolare in cui ci sarà il tempo di conoscere le novità targate 2010. Da Visual Studio, Identity Foundation, Silverlight, ASP.NET, WPF, e naturalmente l'attesissimo Windows Phone 7.

Se volete iscrivervi avete più o meno pochi minuti per domani dato che ormai le iscrizioni sono in fase di chiusura. Per giovedì prossimo invece è vero che c'è ancora tempo, ma visto la velocità con cui i posti stanno andando via non mi stupirei di poter annunciare il sold-out parecchio prima della chisura programmata.

Non faccio nemmeno lo sforzo di mascherare la mia felicità per il ragguardevole numero di persone che hanno scelto di unirsi a noi, ma se poi mi regalate la soddisfazione di dover chiedere all'hotel di ampliare la sala ve ne sarò eternamente grato.

tags: - categories: News

Non lo so, forse si tratta della mia immaginazione, ma ho come l'impressione che ultimamente tutti cerchino di vendermi qualcosa in più di quello che effettivamente mi serve. Mi spiego: vado alla posta a pagare una bolletta della luce - lo so è arcaico recarsi alla posta per certe cose ma lasciatemi un certo margine di irragionevolezza - e mentre sto aspettando che mi sia restituito il bollettino pagato l'impiegata mi propone di acquistare un (inutile) album della Fiat 500; mi fermo all'autogrill per il rituale cappuccio-e-brioche, e mentre sono alla cassa l'impiegato addetto alla riscossione mi sussurra: che faccio, aggiungo un gratta e vinci?... a me, che fatico a giocare al superenalotto quando ci sono centinaia di milioni in palio... puah.

E' una sensazione, sgradevole, che spero rimanga solo tale. Posso capire che tutti si stia cercando di uscire da questa strana situazione che molti chiamano crisi, ma tediare il prossimo con inutili subdole proposte non può essere la soluzione per trarne qualcosa di positivo. Dobbiamo per forza buttare i nostri risparmi in qualche inutilità? Non è che questo invece farà peggiorare le cose?

Lo so, forse sono io troppo sensibile sull'argomento, ma sono da sempre fortemente convinto che se ho bisogno di qualcosa allora me la vado a cercare senza che uno sconosciuto debba tentare di solleticare la mia psiche per crearmi un bisogno che ora non ho. Perciò se per caso mi incontrate mentre impreco verso un incauto impiegato delle poste, vi prego capite come mi sento... :)


Se leggete questo post significa che il mio blog si è felicemente trasferito verso un nuovo hosting. Probabilmente molti di voi hanno saputo indirettamente - se non ne sono stati coinvolti direttamente - che il mio precedente provider WebHost4Life si è arenato su una migrazione che già a prima vista puzzava di fatica biblica. Così, dopo aver saputo da molti colleghi che tipo di (disastrosi) problemi stavano sperimentando, ho deciso di muovere tutto verso WinHost. 

Devo dire che inizialmente ero un po' scettico ma ora dopo aver provato i servizi non sento la mancanza del pannello di controllo di WebHost4Life che era enormemente più completo ma nettamente più difficile da usare. Se poi consideriamo che il 70% delle feature non le ho mai usate allora si intuisce che non ho perso molto nella migrazione, ma probabilmente ne ho guadagnato, almeno in termini di costi.

La migrazione del blog però è stata accompagnata anche da un cambio di piattaforma. Ho abbandonato l'ormai vetusta versione di SubText (che non avevo mai aggiornato) per passare a BlogEngine. Così ora mi trovo con due blog che si appoggiano a questo motore di blog molto ben fatto.

L'unico problema che ho riscontrato è la sostanziale differenza negli url del vecchio blog con il nuovo. Per fortuna, smanettando un po' con il modulo di rewrite di IIS7 che è accessibile dal manager remoto fornito da WinHost sono riuscito a recuperare buona parte dei vecchi url e rimapparli con un redirect 301 che spero ottenga l'effetto desiderato nei confronti di google.

Chiunque trovi problemi risultanti dalla migrazione è invitato a scrivermi per farmelo sapere. E' fondamentale che nulla degli ultimi 6 anni di blogging vada perso...

tags: - categories: News

Un vrebe post per segnalare che il prossimo 23 marzo dalle 15 alle 16 si terrà una interessante chat con gli evangelist di Microsoft sui temi del MIX 2010. Chi non ha potuto recarsi (o anche solo seguire) questa importante conferenza, troverà sicuramente utile investire un'oretta in questo appuntamento

http://blogs.msdn.com/italy/archive/2010/03/17/chat-live-il-23-marzo-per-parlare-delle-novit-del-mix-2010.aspx

tags: - categories: News