di .NET e di altre amenità

Appunti di WPF: Un po' di link alla rinfusa #2

E' un po' di tempo che non pubblico molto su WPF, a causa di un lavoro che sto portando avanti che per ora mi assorbe fino all'ultimo minuto. Per oggi pubblico una serie di link che ho trovato nel web... 

 

: Robert Relyea spiega per quale motivo XAML è case-sensitive

: Un utile elenco delle braking changes tra la versione del Mix e la prossima release.

: E' stato pubblicato in versione stand-alone WPFPerf, il tool per le performance in WPF. Qualcosa anche .

: un nuovo sito sulle tecnologie WPF con anche una bella di applicazioni.

: Un'immagine PNG che riassume le feature di Silverlight.

 

Appunti di WPF: WPF Coding Guidelines

Paul Stovell ha pubblicato sul suo weblog una serie di linee guida per la stesura di codice XAML. Ad una prima analisi ci sono un po' di cose che non mi piacciono, ma comunque si tratta di un buon punto di partenza

Link: XAML and WPF coding guidelines

Appunti di WPF: ComponentOne public Beta

ComponentOne ha da qualche settimana iniziato una fase di beta test su prodotti dedicati a windows Presentation Foundation. La beta è pubblica ed è possibile iscriversi ad essa dal seguente indirizzo:

Link:

Appunti di WPF: Expression distribuite con MSDN

Probabilmente la notizia è già girata ieri, ma la ribadisco perché serva da informazione di completamento per chi mi ha seguito al meeting di un mese fa. In buona sostanza è stato annunciato che l'uscita dalla beta degli strumenti della linea "expression" li vedrà disponibili al pubblico all'interno di MSDN Premium.
La notizia non è per nulla scontata dato che precedenti rumors davano questi prodotti per completamente esclusi da MSDN.

Appunti di WPF: Un po di link utili

WPF/E vs DHTML vs Flash vs WPF performance test: Un test che mette a contronto le performance di DHTML, Flash, WPF e WPF/e con un benchmark. Il tentativo è interessante, ma secondo me ci sono alcuni dettagli che non lo rendono del tutto attendibile.  

Xaml Editor List: Una serie di link agli editor free per WPF e WPF/e

WPF/E Pad and Others Updated for the Feb CTP: Alcuni tool per WPF/e

Listening to DependencyProperty changes: Un esempio di uso delle Dependency Property che spiega il meccanismo dell'override.

Fun Controls Bag - 9 new WPF Controls on CodePlex Una collezione di 9 controlli per WPF scaricabili da Codeplex

Appunti di WPF: Expression Blend Release Candidate

Me ne accorgo con un giorno di ritardo, ma sono lieto di apprendere che ieri Expression Blend è passato alla fase di Release Candidate ed è disponibile per il download a questo indirizzo: Microsoft Expression Blend

Appunti di WPF: Un po' di link alla rinfusa...

Il webcast è andato. Non c'era molta gente, una trentina di persone, ma me lo aspettavo dato che si tratta di un argomento un po' di la da venire. Ne aprofitto per postare un po' di link che ho nominato durante il webcast, e durante il meeting di venerdì:

Utile documento per migliorare le prestazioni di WPF: WPF Performance Whitepaper

Un esempio eccellente di applicazione WPF: http://www.otto.de/vista

Il link al sorgente e alle slide del webcast: http://www.xedotnet.org/contents/373.aspx

Grazie a tutti i partecipanti. Segnatevi il prossimo appuntamento, Mercoledì 28 Marzo 2007 - Ore 14:30 - Tecniche di Search Engine Optimization con ASP.NET 2.0

Appunti di WPF: 150 minuti con Windows Presentation Foundation...

Ieri sera si è tenuto il primo meeting della serie "New Technology Track", nel quale ho tenuto una sessione su Windows Presentation Foundation. Alla fine i 90 minuti previsti dal titolo della sessione si sono repentinamente moltiplicati per 1,5 grazie ad un pubblico che ha seguito con molta attenzione e avidità la mia esposizione facendomi molte domande cui spero di essere riuscito a rispondere con la necessaria puntualità e chiarezza. Ho iniziato la sessione un po' impacciato, però poi dopo un po' di riscalcamento finalmente le parole hanno iniziato a fluire un po' meglio e mi sono lasciato trascinare dall'argomento.

Nella sessione ho volutamente cercato di evitare di stupire con "effetti speciali" come ho spesso visto fare con WPF. La mia preferenza è invece andata al modo consueto del nostro gruppo di presentare gli argomenti, con innumerevoli esempi di codice spiegati nel dettaglio in modo di lasciare al pubblico delle informazioni che possano diventare utili per il proprio lavoro. Ho preparato una serie di "giocattoli", così come li ho definiti durante il meeting, con l'obbiettivo di dimostrare uno ad uno gli argomenti a partire da aspetti che spesso vengono trascurati, ma che sono alla base della conoscenza di WPF quali i RoutedEvents e il Dependency Property System.

La sessione è stata lunga, molto più lunga del previsto e spero di non aver annoiato il mio pubblico, ma devo dire che nonostante la stanchezza sono soddisfatto di come sono andate le cose e di come le persone hanno mantenuto viva l'attenzione dialogando per tutto il tempo. Ora sono al lavoro per preparare i prossimi webcast, il primo dei quali si terrà la prossima settimana, e a breve metterò a disposizione il sorgente e le slide del meeting. E' mia intenzione poi preparare alcuni articoli che spieghino meglio come arrivarea certi risultati con WPF, partendo dagli esempi del meeting. Portate pazienza e prima o poi ci arriverò.

Lasciatemi quindi ringraziare innanzitutto i partecipanti, in particolar modo quelli a cui sono stati assegnati il Voucher per l'esame Microsoft e la licenza di Windows Vista per avermi subissato di quesiti. Infine, ultima ma non meno importante, INETA che ci ha fornito un bel po' di materiale e parecchio supporto per preparare i meeting.

Appunti di WPF: usare XamlWriter e problemi di serializzazione

Tempo fa ho accennato al fatto che XAML è uno dei migliori metodi di serializzazione che siano mai stati inventati. Tuttavia negli ultimi giorni ho avuto qualche delusione di troppo, che non ha variato la mia opinione in merito, ma semplicemente ha ridotto la mia fiducia nell'implementazione corrente. Il problema peggiore è dovuto ad una limitazione, per la verità esplicitata nella documentazione, che però crea più grattacapi del previsto. Se ad esempio provare a serializzare con XamlWriter un oggetto che contiene una stringa vuota vi troverete con uno XAML risultante che XamlReader non sarà in grado di riportare alla vita... Il problema come dicevo appare ovvio dopo che si è letta la documentazione. XamlReader non è in grado di deserializzare tipi che non abbiano un costruttore di default. A ben guardare il tipo String tale costruttore non lo ha proprio e l'effetto collaterale è che quando XamlReader tenta di deserializzare una stringa che abbia un valore tutto va bene, mentre ovviamente va in eccezione quando la stringa è vuota.

Comunque, per chi desidera cimentarsi, ecco un utile link dove si discute di XamlWriter

Link: http://blogs.msdn.com/mikehillberg/archive/2006/09...

Appunti di WPF: incoming meetings

Ne ho dato annuncio ieri sul sito dello usergroup, e finalmente oggi posso ribadire anche nel mio weblog l'appuntamento del prossimo 9 Marzo. In quella data infatti si terrà il primo di una serie di community meeting (come ama chiamarli l'amico Davide Vernole), organizzati da me e dagli altri soci di XeDotNet, che si snoderà nelle più moderne tecnologie proposte da Microsoft. Le date solo le seguenti:

9 Marzo 2007 - Windows Presentation Foundation - Speaker: Andrea Boschin

6 Aprile 2007 - Windows Communication Foundation - Speaker: Davide Bedin

11 Maggio 2007 - Workflow Foundation - Speaker : Raffaele Rialdi

22 Giugno 2007 - ASP.NET AJAX - Speaker: Davide Vernole & Andrea Dottor

Si tratta di un vero e proprio percorso formativo, all'interno del quale saremo guidati da persone di elevata competenza (me escluso ovviamente... :D) nella scoperta delle possibilità offerte da queste tecnologie. Come sempre gli incontri, che stavolta sono configurati come degli one-man-show per consentire di riservare un buona fetta del tempo al dibattito, verteranno sì su una overview dell'argomento ma soprattutto daranno molti esempi e spunti di codice da osservare, studiare e riutilizzare.

Vi invito perciò ad iscrivervi in massa in fretta perché al solito i posti sono limitati (30-35) e quindi chi primo arriva...

Iscrizioni: http://www.xedotnet.org/nextmeeting.aspx

Appunti di WPF: Anticipazioni "quasi" top-secret

Io non vi ho detto nulla... ma se andate a guardare bene nel sito dello troverete un primo indizio delle attività del 2007.

http://www.xedotnet.org/48/section.aspx/267

Si tratta di un assaggino però. A breve sarà pubblicato il calendario di una raffica di eventi con guest star di eccezione, cui attendiamo la vostra partecipazione in massa... non mi dispiacerebbe stavolta dover correre a cercare una nuova sala.

E per le iscrizioni??? E' ancora presto: datemi qualche giorno

Appunti di WPF: La strana coppia

Appena qualcuno nomina XAML, la maggior parte delle persone pensa immediatamente a complesse interfacce colme di effetti grafici mozzafiato. Certo, XAML è lo strumento principe per la loro realizzazione, però troppi dimenticano cos'è realmente XAML. Io stesso ho raggiunto una diversa consapevolezza solo chiacchierando con Raffaele Rialdi durante la WPC, e tale consapevolezza mi ha consentito di usarlo da subito anche se in realtà non è di user interface che ho bisogno. Veniamo al dunque: XAML è essenzialmente il miglior modo di serializzare un grafo di oggetti che sia mai stato inventato. Ciò lo rende uno strumento favoloso per rappresentare la gerarchia di oggetti che compone una user interface, ma se guardate la cosa da un diverso punto di vista potete intravedere una serie di possibilità interessanti che si aprono. All'interno degli assembly che costituiscono WPF ci sono un paio di classi statiche che sono in grado di prendere qualsiasi (o quasi) oggetto con tutta la sua gerarchia, serializzarlo in XAML e in seguito recuperarlo trasformando il markup nuovamente nell'oggetto di partenza. La bellezza di XamlWriter e XamlReader è che praticamente sono in grado di fare tutto ciò senza la minima traccia degli attributi di serializzazione cui siamo stati abituati da XmlSerializer.

Ora, prendete XAML, aggiungete un generosa dose di NHibernate, un poco di astuzia e avrete ottenuto un cocktail folgorante. Immaginate di avere degli oggetti mappati con NHibernate su un database, poco importa di che oggetti parliamo e che struttura hanno le tabelle, ma come spesso accade vi trovate ad avere la necessità di gestire delle proprietà dinamiche, un po' come fa Dynamics oppure WCF con IExtensibleObject. Succede talvolta che per gestire le customizzazioni sia necessario consentire alle classi di avere più proprietà di quelle definite nella loro dichiarazione. Si sa, i clienti riescono sempre ad inventare qualcosa che non avevamo previsto. Se avete una necessità di questo tipo e state lavorando con NHibernate, probabilmente avete un grosso problema. Il fatto è che se scrivete un file di mappatura dovete metterci tutte le proprietà e di certo non potete aggiungerne a runtime. Dovrete quindi gestirvi le mappature a mano generando i file XML da dare in pasto all'ORM e anche così i problemi che rimangono sono davvero tanti.

Bene, allora vi propongo una soluzione un po' diversa che ho adottato recentemente. Prendete il vostro database, qualunque esso sia e aggiungete alla opportuna tabella una campo di testo, il più grande possibile, un clob in Oracle, un ntext in SqlServer. Se avete la fortuna di usare SQL Server 2005 mettete direttamente un campo di tipo XML. In questo campo andranno a finire tutte le proprietà aggiuntive, di qualunque tipo esse siano, serializzate come un Dictionary<string, object> in XAML. Ora passate alla vostra classe che rappresenta l'oggetto di business e aggiungete una proprietà Xaml privata e associatela mediante il file di mappatura al campo di database di cui sopra. Una interessante caratteristica di NHibernate è di poter mappare anche i campi e le proprietà private. In questo caso è importante mappare una proprietà privata perchè i dati serializzati in XAML non devono mai essere raggiunti in questa forma ma al momento in cui sono assegnati dal runtime di NHibernate alla proprietà devono essere deserializzati e copiati in un field di tipo Dictionary<string, object> cui ho accennato poco fa. Questa operazione è semplice utilizzando le classi XamlWriter e XamlReader. Ecco come:

private string Xaml
{
    get { return XamlWriter.Save(dictionary); }
    set { dictionary = XamlReader.Load(value) as PropertyDictionary }
}

L'unica accortezza da seguire è quella di creare una classe PropertyDictionary che estenda Dictionary<string, object>. Questo perchè XamlWriter e XamlReader non sono in grado di operare su tipi generici, perciò bisogna ingannarli in questo modo. Ora, esponendo il Dictionary avrete ottenuto la vostra classe estensibile, perfettamente integrata con NHibernate. Mettete nelle proprietà praticamente quello che vi pare, e questo verrà automaticamente serializzato e deserializzato senza colpo ferire e naturalmente NHibernate provvederà a persistere il tutto sul database.