Stamattina è iniziata bene. Scendo a colazione e una inserviente al piano mi saluta e mi sorride. Arrivo a colazione e un cameriere mi saluta. Vabbè dico io, è il loro lavoro sarà perfettamente normale... ma la cosa continua. un tizio al tavolo si avvicina e mi stringe la mano per salutarmi, poi si siede e parte una piacevole chiacchierata. Chi lo ha mai visto...

Esco e mi reco allo Starbucks e mentre do uno sguardo interessato alle brioches un tizio dall'altra parte mi fa : "hello, how are you!". Sorriso stampato sulle labbra. Sono le 6:30 di mattina. Dalle nostre parti mi avrebbero sbattuto un cappuccino sul tavolo guardandomi storto.

Poi la cosa continua. Un tizio che si assicura di non avermi sopravanzato alla cassa. L'autista dell'autobus che mi accoglie sorridendo come fosse la più bella giornata dell'anno. Scendo dall'autobus e una cortese signora mi augura buona giornata. Sono estasiato. Dove devo firmare per avere giornate come questa tutti i giorni?

Ora sono seduto in attesa che Pablo Castro inizi una sessione su ........... ... (sorry ma non posso dire cosa). Tutti contenti, ci si sorride a vicenda. Sarà pure una stupidaggine ma vivere in questo modo è sicuramente più leggere e semplice.

Mi sa che da noi c'è molto da imparare.


DSC_5994 Finalmente oggi mi sono deciso a dedicare qualche minuto al mio blog. La somma di jet lag, una nuova città da esplorare, le compere per la moglie e il summit alle porte ha fatto in modo che non sia riuscito a trovare un momento per scrivere qualcosa nel blog come avevo promesso. Oggi, dopo aver abbandonato una sessione di scarso interesse nella calma della camera d'albergo ho deciso di raccontarvi qualcosa.

Il viaggio di Sabato è andato liscio come l'olio a differenza degli amici che hanno deciso di viaggiare con British Airways e stanno tuttora aspettando che il bagaglio arrivi a destinazione. Sono arrivato con solo una mezzora di ritardo, più o meno la stessa mezzora di ritardo alla partenza da Venezia. Il pomeriggio l'ho passato a combattere a spada tratta con il jet lag. Mentre il mio corpo mi "suggeriva" con tutte le sue forze che per me era ora di riposare, io ho stoicamente totalizzato 28 ore consecutive insonni andando a letto alle 21:00 dopo aver lasciato la compagnia di Alessandro e Davide.

Il giorno dopo alle 6:30 sono sceso e ho fatto colazione con una pila di pancakes con sciroppo d'acero in hotel e sono uscito ben intenzionato a fare mia la città. Una visita che mi ha impegnato per ben 2 ore, per cominciare, fino all'incontro con gli altri MVP presso lo Starbucks. Da li ci siamo mossi assieme verso Fry's dove ho dato sfogo alle mie "voglie" acquistando un piccolo lettore MP3 per mia figlia (il suo primo lettore...) e un Creative ZEN strepitoso... per me.

Poi nel pomeriggio la visita allo Space Needle in compagnia di Giovanni Dicanio ha chiuso la giornata. In serata siamo andati tutti assieme a gustare degli ottimi Crabs in un locale del porto.

Stamane dopo le ultime compere per la moglie, è iniziata l'avventura del Summit...

Technorati Tag: ,

Il nuovo Microsoft .NET Compact Framework 3.5 ha introdotto la possibilità di consumare servizi WCF da dispositivi mobili. Naturalmente come ci si può attendere ci sono svariate limitazioni nel farlo, ad esempio l'uso esclusivo del BasicHttpBinding (l'equivalente del vecchio ASMX), l'impossibilità di usare la Session e altre cose.

Tra queste limitazioni c'è anche la mancata deserializzazione delle FaultException che arrivano dalle eccezioni sollevate sul server. In effetti se si va a vedere nella proprietà FaultMessage dell'oggetto CFFaultException che viene autogenerato dal netcfsvcutil.exe si trova uno spezzone di xml che rappresenta la porzione del messaggio SOAP che contiene i dettagli del Fault. Dato che è utile poter leggere informazioni queli la FaultString o lo StackTrace mi sono fatto un paio di classine che deserializzano il messaggio su piattaforma CF 3.5 e lo trasformano nell'istanza di una classe. Ecco qui di seguito le classine:

   1: // CORPO DEL MESSAGGIO
   2:  
   3: [XmlRoot("Fault", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
   4: public class ServiceFault
   5: {
   6:     public static readonly ServiceFault Empty = new ServiceFault() { FaultString = "No Fault" };
   7:  
   8:     public ServiceFault()
   9:     {
  10:         this.Detail = new List<ServiceFaultDetail>();
  11:     }
  12:  
  13:     [XmlElement("faultcode", Namespace = "")]
  14:     public string FaultCode { get; set; }
  15:     [XmlElement("faultstring", Namespace = "")]
  16:     public string FaultString { get; set; }
  17:     [XmlArray("detail", Namespace = "")]
  18:     [XmlArrayItem(typeof(ServiceFaultDetail), Namespace = "http://schemas.datacontract.org/2004/07/System.ServiceModel")]
  19:     public List<ServiceFaultDetail> Detail { get; set; }
  20: }
  21:  
  22: // DETTAGLI DELL'ECCEZIONE
  23:  
  24: [XmlType(TypeName = "ExceptionDetail")]
  25: public class ServiceFaultDetail
  26: {
  27:     public ServiceFaultDetail()
  28:     { }
  29:  
  30:     [XmlElement("Message", Namespace = "http://schemas.datacontract.org/2004/07/System.ServiceModel")]
  31:     public string Message { get; set; }
  32:     [XmlElement("StackTrace", Namespace = "http://schemas.datacontract.org/2004/07/System.ServiceModel")]
  33:     public string StackTrace { get; set; }
  34:     [XmlElement("Type", Namespace = "http://schemas.datacontract.org/2004/07/System.ServiceModel")]
  35:     public string Type { get; set; }
  36: }

Una cosa evidente è la presenza di molti namespace che in effetti hanno reso la realizzazione della classe un po' difficile. Basti pensare che se date in pasto a xsd.exe l'xml del FaultMessage vi creerà correttamente l'xsd ma poi da questo non sarà in grado di scrivere la classe che lo deserializza. In seguito per comodità mi sono scritto anche una classe di supporto che mi fa la deserializzazione (e anche la serializzazione casomai servisse...) e ve la riporto in toto:

   1: public static class FaultSerializer
   2: {
   3:     /// <summary>
   4:     /// Deserializes the specified fault.
   5:     /// </summary>
   6:     /// <param name="fault">The fault.</param>
   7:     /// <returns></returns>
   8:     public static ServiceFault Deserialize(CFFaultException fault)
   9:     {
  10:         if (fault == null)
  11:             throw new ArgumentNullException("fault", "f ault cannot be null");
  12:         if (string.IsNullOrEmpty(fault.FaultMessage))
  13:             return ServiceFault.Empty;
  14:  
  15:         string xml = fault.FaultMessage;
  16:  
  17:         using (StringReader reader = new StringReader(xml))
  18:         {
  19:             XmlSerializer serializer = new XmlSerializer(typeof(ServiceFault), "http://schemas.xmlsoap.org/soap/envelope/");
  20:             return serializer.Deserialize(reader) as ServiceFault;
  21:         }
  22:     }
  23:  
  24:     /// <summary>
  25:     /// Serializes the specified fault.
  26:     /// </summary>
  27:     /// <param name="fault">The fault.</param>
  28:     /// <returns></returns>
  29:     public static string Serialize(ServiceFault fault)
  30:     {
  31:         StringBuilder builder = new StringBuilder();
  32:  
  33:         using (StringWriter writer = new StringWriter(builder))
  34:         {
  35:             XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  36:             ns.Add("s", "http://schemas.xmlsoap.org/soap/envelope/");
  37:             ns.Add("i", "http://www.w3.org/2001/XMLSchema-instance");
  38:             ns.Add("a", "http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher");
  39:  
  40:             XmlSerializer serializer = new XmlSerializer(fault.GetType(), "http://schemas.xmlsoap.org/soap/envelope/");
  41:             serializer.Serialize(writer, fault, ns);
  42:         }
  43:  
  44:         return builder.ToString();
  45:     }
  46: }

Anche in questo caso è necessario fare molta attenzione ai namespace. Nella classe ServiceFaultDetail ho volutamente "scartato" le proprietà HelpLink e InnerException perchè al momento a me non servono e mi avrebbero richiesto un po' lavoro aggiuntivo. Credo comunque che implementare anche questa parte non sia poi così complesso.

Un grazie a per il prezioso aiuto nel districare i namespace...


Son mesi che attendo questo momento. Sabato mattina finalmente mi imbarcherò su volo Lufthansa in partenza da Venezia alla volta di Francoforte e poi di seguito verso Seattle e Redmond.

E' la mia prima volta al Summit e non sto davvero più nella pelle. Naturalmente nei prossimi giorni blogghero da Seattle, nei limiti di quanto la NDA mi consente. Male che vi vada vedrete delle belle foto!

A presto!!!


Sono lieto di poter finalmente annunciare un nuovo evento. e l'associazione di organizzano un evento dedicato agli sviluppatori web nella città Pordenone. Abbiamo lavorato alacremente per preparare questo evento, che si terrà il 29 Maggio prossimo, perchè siamo coscienti che nella zona del Friuli (Pordenone, Udine, Gorizia e Trieste) vengono organizzati eventi molto di rado nonostante questa sia un'area in cui sono presenti un numero elevato di medio-piccole aziende molto produttive.

Per l'occasione abbiamo preparato un dove è pubblicata la presentazione dell'evento, con l'agenda delle sessioni, e dove è già possibile preannunciare la propria adesione. Sono certo che un evento di questo tipo è allettante per molti persone, appassionati, studenti o professionisti perciò vi prego di intervenire in massa così da convincerci che si tratta di un'esperienza da ripetere.

Link: http://webcongress.xedotnet.org

Technorati Tag: ,,
tags: - categories: News

della mia vita e di altre amenità

Ero qui seduto mentre le mie "ragazze" si stanno preparando per il cenone di stasera e mi sono reso conto che fra poche ore saremo in un nuovo anno. Di certo il cambio di una cifra sul calendario non inciderà più di tanto sull'andamento della mia vita ma il sapore di "nuovo inizio" di queste ore ben si sposa con quello che mi attendo dal 2012.

Il 2011 non si può certo dire sia stato un anno positivo. Venti di crisi a parte, il mio 2011 è stato dominato almeno per una buona metà da problemi di lavoro che a lungo ho trascurato in precedenza - per pigrizia lo ammetto - finché alla fine verso fine Maggio si sono concretizzati in uno sconvolgimento societario dell'azienda per cui lavoravo che ha avuto pesanti ripercussioni sul mio buon umore. Intendiamoci, non si è trattato di timore di poter rimanere disoccupato - timore che peraltro poteva anche non essere del tutto infondato visti i tempi - ma soprattutto del fatto che sono stato messo nelle condizioni di dover scegliere tra il mio lavoro e i miei principi. Alla fine hanno vinto i miei principi ma non è stata una facile decisione, tanto è vero che altri nelle stesse condizioni si sono piegati alle più bieche nefandezze al grido di "salviamo il posto!", seguendo una compagine societaria i cui scrupoli sono del tutto svaniti.

Non faccio nomi per ovvi motivi - non mi va di ergermi a giudice e boia e sono certo che le malefatte saranno prima o poi pagate - ma se mi incontrate in giro non fatevi remore a chiedere spiegazioni e sarò lieto di raccontarvi le vicende e i protagonisti di questo periodo davvero allucinante.

Archiviato il 2011, la speranza di un migliore 2012 è probabilmente malcelata. Ed ecco l'occasione di mettere giù un po di buoni propositi.

1) tanto per cominciare l'idea di tornare a bloggare con regolarità ormai mi solletica da tempo. In parte su http://www.silverlightplayground.org (che per inciso ora è anche http://www.xamlplayground.org) per gli aspetti tecnologici, ma anche un sano bloggare del più e del meno su http://blog.boschin.it

2) ritornare anche a twittare. dopo le vicende di questa seconda parte dell'anno twitter mi ha visto diradare l'attività. Non tornerò di certo con l'assiduità di prima ma twitter è una delle "cose buone" della rete.

3) cancellarmi da facebook... tanto è perfettamente inutile e la mia continua non-presenza lo testimonia.

4) perdere un po' di peso... lo so è una vana speranza...

5) migliorare la mia concentrazione su quello che sto facendo. mi capita troppo spesso di iniziare a fare qualcosa e poi cedere alle richieste di qualcuno per "motivi di urgenza".

Non è molto ma è inutile che mi prefigga di diventare un fotomodello... non ce la farò mai Con la lingua fuori

Auguro perciò a me stesso un 2012 che mi  porti questi risultati e magari anche altri. E nel frattempo auguro anche a voi un anno in netta positività.

Buon 2012 a tutti!

tags: - categories: News

Commenti (2) -

# | michele Italy | 14.01.2012 - 13.03

Ciao Andrea,
sono felice di vedere i nuovi post sul tuo blog. Mi chiedevo che fine avevi fatto.... leggendo posso intuire i motivi della tua assenza.
In passato ho partecipato e mi ero iscritto a XeDotNet, poi per motivi di lavoro (ora vivo e lavoro a Trento) non ho + potuto seguirvi. Conto di rifarmi per il 2012!.
Ho apprezzato e condivido molto la frase "ma soprattutto del fatto che sono stato messo nelle condizioni di dover scegliere tra il mio lavoro e i miei principi." e la scelta che dici di aver fatto. Di questi tempi è ammirevole! ed è soprattutto un esempio per le nuove generazioni.
Un caro saluto,
Michele Fioretto

# | Andrea Boschin Italy | 14.01.2012 - 16.49

Ciao Michele,
fa piacere sapere che mi è rimasto ancora qualche lettore. In effetti il motivo della mia assenza è chiaro ma ora spero di avervi posto rimedio.
Credo fermamente che "Parigi non vale una messa" ma ti posso assicurare che metterlo in pratica non è stato così semplice.
A presto.

Aggiungi Commento