Chrysanthemum

E anche quest'oggi l'ansia e l'emozione che ormai da 4 anni a questa parte riempiono i miei 1 Luglio mi hanno accompagnato per tutta la giornata fino a pochi minuti fa, quando è arrivato l'attesa notizia. Anche per quest'anno sono Most Valuable Professional nella categoria Silverlight, e anche quest'anno ne sono immensamente grato e orgoglioso come fosse la prima volta.

Un grazie a tutti voi che riempite le sale nei nostri meeting e che mi tenete sempre "allenato" con le più svariate domande. Un grazie agli amici che mi hanno accompagnato nell'avventura di XeDotNet, un grazie a Microsoft e al team di Silverlight per aver ancora una volta creduto in me... e un grazie alla mia famiglia per avermi sopportato.

Ora posso dire veramente che sono pronto per le ferie... per riposarmi dall'intensità senza precedenti di quest'anno che, ancora una volta è stata maggiore del precedente. Se tanto mi da tanto... chissà cosa mi aspetta per i prossimi 12 mesi.


Su vari blog è apparso l'annuncio di un nuovo programma rivolto alle piccole aziende (con meno di 10 sviluppatori) sviluppatori di ambito web. Webspark consente a questa fascia di programmatori di ottenere gli strumenti di sviluppo a costo zero per lavorare con ASP.NET, Silverlight, SharePoint e PHP.

Il programma fornisce:

  • 3 licenze di Visual Studio 2008 Professional Edition
  • 1 licenze di Expression Studio 3 (Expression Blend + Sketchflow + Web)
  • 2 licenze di Expression Web 3
  • 4 licenze-processore di Windows Web Server 2008 R2
  • 4 licenze-processore di SQL Server 2008 Web Edition
  • DotNetPanel control panel
  • In tempo di crisi e in un paese come l'italia dove le aziende di piccole dimensioni sono la grande maggioranza mi sembra un'ottima opportunità di migliorare il proprio business abbattendo i costi per tre anni.

    Riferimenti WebsiteSpark

    Annuncio: Announcing the WebsiteSpark Program


    cc950524_SmallBasic_logo(en-us) Leggendo tra i blog ho scoperto un interessante gioco che devo far provare a mia figlia. Si tratta di Small Basic, un interprete basic sviluppato appositamente per favorire l'apprendimento della logica dei linguaggi di programmazione ai bambini.

    L'editor è fatto davvero molto bene, e in pochi minuti mette in grado di scrivere qualche routine divertente che mi riporta ai giorni in cui - da bambino - facevo i miei primi esperimenti con il mio MSX. Dispone di un intellisense estesicamente molto bello e soprattutto molto usabile e descrittivo.

    Splendida poi la funzione che consente di pubblicare sul web gli spezzoni di codice e recuperarli con un semplice codice alfanumerico dall'editor oppure da un url nel browser. Ecco qui il risultato di qualche esperimento con l'oggetto Turtle che consente di scrivere con la logica del .

    Link: http://smallbasic.com/program/?NVK970

    Chi lo volesse scaricare lo trova a questo indirizzo:

    http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

    Technorati Tag:

    Rientrato dal Community After Hour di ieri sera è giunto il momento dei ringraziamenti. E di ringraziamenti ce ne sono molti, non fosse altro che per il successo che considero senza precedenti. Per la prima volta infatti ad un evento abbiamo avuto più partecipanti che iscritti e già questo è motivo di grande orgoglio. Se poi mettiamo in conto che la comunicazione è partita molto a ridosso della data dell’evento allora questo risultato  diventa ancora più significativo.

    Il primo ringraziamento va al team del DPE di Microsoft Italia che ha dimostrato una capacità organizzativa eccezionale. Non c’è ombra di dubbio che senza di loro avremmo faticato molto a raggiungere un risultato come questo. In secondo luogo un ringraziamento ai colleghi dello user group che hanno tenuto le sessioni accanto a me per l’incredibile qualità dei contenuti che sono riusciti a produrre nonostante gli impegni di lavoro che so essere stati molto pressanti. Infine, da ultimo ma indubbiamente più importante di tutti, un ringraziamento alle persone che hanno deciso di investire una serata in nostra compagnia, con una speciale menzione per quegli “eroi” (ed erano la maggioranza) che hanno prolungato la loro presenza durante la giornata totalizzando ben 14 ore consecutive…

    Ora dobbiamo concentrarci sul futuro. Altri eventi ci e il lavoro da fare è molto. Ma almeno sappiamo che il nostro tempo è ben riposto.

    Technorati Tags:

    Ormai ci siamo. Domani sera saremo tutti al Community After Hour di Padova (allo Sheraton) per condividere qualche ora sugli argomenti caldi del momento. Le slide sono pronte, il codice anche, e tutto sommato dovrebbe essere pronto anche lo speaker dato che pur uscendo da un periodo di superlavoro sono riuscito a ritagliarmi il giusto tempo per preparare la sessione.

    Si parlerà di un argomento caldo: l'accesso ai dati da applicazioni RIA. L'argomento è molto sentito e non manca occasione perchè - oggi al messenger domani ad un evento - non mi senta rivolgere qualche domanda su questo "problema". Così la mia sessione sarà di carattere squisitamente pratico. Analizzeremo il problema dell'accesso ai dati così come è oggi e introdurremo una soluzione diversa che va nella direzione di risparmiare tempo sulle cose ripetitive che tipicamente sono la tomba della produttività.

    Soprattuto vedremo come l'investire tempo nell'apprendimento di nuove tecnologie quali sono l'Entity Framework e gli ADO.NET Data Services possa pagare velocemente in termini di risparmio sul lavoro senza per questo dimenticare le buone norme di programmazione e architetturali.

    Sarà una bella chiacchierata, che spero vi sia utile e che vi dia un impulso ulteriore - se ce n'è bisogno - nello sviluppo con Silverlight 2.0 e ASP.NET AJAX. E se la cosa vi piace vedremo di ripetere questa esperienza in qualche prossimo evento cercando di trovare sempre più il risvolto pratico e lasciare ad altri la mera enunciazione di nuove feature.

    Qui i dettagli: http://www.microsoft.com/italy/eventi/days/community/xedotnet.mspx


    Dopo il successo dello scorso 6 Marzo in questo mese ripeteremo la bella esperienza del Community After Hour. Il prossimo 23 Ottobre infatti troverete me e alcuni colleghi di XeDotNet al booth ATE dei Microsoft Days08 di Padova e alla sera potrete ascoltare le sessioni di , e di .

    Qui trovate l'agenda della serata: http://www.microsoft.com/italy/eventi/days/community/xedotnet.mspx

    L'argomento che affronterò durante la mia sessione sarà di sapore squisitamente pratico. Mi aspetto di avere poche slide, e una bella quantità di codice da vedere. L'accesso ai dati da applicazioni RIA è uno degli argomenti che mi viene richiesto spesso e volentieri, perciò ho deciso di mostrare un interessante connubio dato dall'Entity Framework e ADO.NET Data Services. Tramite essi saremo in grado di connetterci ad un database sia da Silverlight 2.0 che da AJAX. Si tratta di uno strumento efficace in questo contesto che consente di mantenere la suddivisione imposta da questo tipo di applicazioni che tipicamente non hanno accesso diretto alla base dati, ma nel contempo di evitare di scrivere decine di metodi di un webservice.

    Vi aspetto numerosi. Passeremo assieme un'oretta decisamente proficua che potrebbe farvi cambiare l'approccio nella realizzazione di molte applicazioni.

    Iscrizioni: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032391659&Culture=it-IT


    Il fatto di avere a che fare con un runtime che permette di eseguire CLR non significa che non serva mai ricorrere all'uso di Javascript. M'è capitato ormai svariate volte di dovermi agganciare ad un evento del DOM HTML  o di dover in qualche modo interagire con altri oggetti nella pagina. In Silverlight 2.0 è possibile fare ciò per mezzo dell'oggetto HtmlPage che espone un punto di accesso al contenuto della pagina. Con esso possiamo ad esempio collegarci ad eventi del dom (AttachEvent) o modificare elementi e attributi o ancora invocare metodi Javascript.

    A me è capitato ad esempio di dover interagire con uno ScriptControl che normalmente viene registrato nella pagina dalla Ajax Library ed è accessibile mediante il metodo $find(). Per invocare il medesimo metodo da Silverlight occorre usare la seguente sintassi:

       1: ScriptObject map = 
       2:     (ScriptObject)HtmlPage.Window.Invoke("$find", "map");

    Ci sono casi in cui non è disponibile uno shortcut definito come nel caso di $find. Ad esempio se dobbiamo usare il metodo Sys.UI.DomElement.getBounds() le cose si complicano notevolmente:

       1: ((ScriptObject)((ScriptObject)((ScriptObject)((ScriptObject)
       2:         HtmlPage.Window
       3:             .GetProperty("Sys"))
       4:             .GetProperty("UI"))
       5:             .GetProperty("DomElement"))
       6:             .Invoke("getBounds", HtmlPage.Document.Body));

    In sostanza dobbiamo cercare ricorsivamente le proprietà e alla fine invocare il metodo. COn un po' di codice è possibile scrivere dei metodi che aiutino a semplificare questo lavoro:

       1: /// <summary>
       2: /// Invokes the ex.
       3: /// </summary>
       4: /// <param name="so">The so.</param>
       5: /// <param name="methodPath">The method path.</param>
       6: /// <param name="args">The args.</param>
       7: /// <returns></returns>
       8: public static object InvokeEx(this ScriptObject so, string methodPath, params object [] args)
       9: {
      10:     IEnumerable<string> parts = Parse(methodPath);
      11:  
      12:     foreach (string part in parts)
      13:     {
      14:         if (part != parts.Last())
      15:             so = (ScriptObject)so.GetProperty(part);
      16:         else
      17:             return so.Invoke(part, args);
      18:     }
      19:  
      20:     throw new ArgumentException("methodPath");
      21: }
      22:  
      23: /// <summary>
      24: /// Gets the property ex.
      25: /// </summary>
      26: /// <param name="so">The so.</param>
      27: /// <param name="propertyPath">The property path.</param>
      28: /// <returns></returns>
      29: public static ScriptObject GetPropertyEx(this ScriptObject so, string propertyPath)
      30: {
      31:     IEnumerable<string> parts = Parse(propertyPath);
      32:  
      33:     foreach (string part in parts)
      34:         so = (ScriptObject)so.GetProperty(part);
      35:  
      36:     return so;
      37: }
      38:  
      39: /// <summary>
      40: /// Parses the specified path.
      41: /// </summary>
      42: /// <param name="path">The path.</param>
      43: /// <returns></returns>
      44: private static IEnumerable<string> Parse(string path)
      45: {
      46:     Match match = Regex.Match(path, @"(?<part>[^\.]*)(\.(?<part>[^\.]*))*");
      47:  
      48:     if (match.Success)
      52:         return from Capture cp in match.Groups["part"].Captures
      53:                select cp.Value;
      55:  
      56:     throw new ApplicationException(string.Format("Unable to parse path '{0}'}", path));
      57: }

    Si tratta di un paio di Extension Method che estendono la classe ScriptObject e consentono di specificare il metodo o la proprietà con la classica notazione puntata. Il metodo principale, Parse, fa uso di una regular expression per verificare la validità della stringa passata ed estrarre la varie porzioni. Ecco come usare il nuovo metodo:

       1: ScriptObject bounds = 
       2:     (ScriptObject)HtmlPage.Window.InvokeEx("Sys.UI.DomElement.getBounds", HtmlPage.Document.Body);
    Technorati Tag: ,,

    A questo indirizzo sono disponibili per il download tre e-book su AJAX, LINQ e Silverlight 1.0.

    UPDATE: Mi hanno fatto notare che si tratta solo di un estratto. Ho verificato e nel caso dei libri su AJAX e Silverlight questo è vero... Solo il ibro su LINQ è praticamente completo.

    Link: http://csna01.libredigital.com/?urvs5cn3s8


    E' disponibile la beta del Microsoft Download Center realizzata interamente in Silverlight 1.0. Si tratta di una bella dimostrazione di quello che si può fare con la presente versione di Silverlight. Il caricamento è un po' lungo, ma evidentemente ancora non è ottimizzata ne tantomeno sono presenti downloaders. Davvero bello il menù che si apre (con calma) selezionando "Browse Downloads"...

    Spero che qualcuno prenda spunto per il concorso italiano.. http://italy.silverlightchallenge.eu

    Link: http://preview.microsoft.com/downloads/homepage.aspx


    In azienda abbiamo deciso di arrivare quanto prima al livello di Certified Partner, perciò stamane durante una riunione abbiamo valutato gli atti necessari per il compimento della certificazione. Tra questi vi è il raggiungimento di una "competenza" e naturalmente abbiamo scelto tra quelle disponibili quella che più si avvicina all'ambito di lavoro del team. Il problema si è posto quando abbiamo elencato gli esami necessari per ottenere la competenza che comprende al suo interno lo sviluppo di portali, e soluzioni web. Tra gli esami che si riferiscono a questa competenza non ce n'è nemmeno uno che riguarda il web in senso stretto, mentre è presente un esame di Windows Forms.

    Allora abbiamo provato una sorta di reverse engineer... cercando di capire quale è la competenza che possiamo raggiungere con gli esami che attualmente abbiamo superato. Parlando per me, è emerso che un esame prettamente ASP.NET oriented come il 70-315 (Developing and Implementing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET) è applicabile ad una competenza di tipo Mobility Solutions (Windows Mobile).

    Non mi è mai stato del tutto chiaro come scegliere un esame, e come determinarne i benefici, ma devo dire che in questo caso la scelta è molto aleatoria. Che cos'ha a che fare l'esame in questione con il mondo Mobile? Io che l'ho fatto vi assicuro che non c'era una sola domanda che lo riguardasse, e oltrettutto vi dirò che sono l'ultima persona cui penserei come "preparato" per il Mobile...

    Ma anche ammesso e non concesso che l'esame possa ricadere in questa categoria per qualche imperscrutabile motivo, la domanda seguante è: perchè questo esame non è incluso in una competenza spiccatamente web-oriented? A voi la risposta... se l'avete.