Radical
Anno nuovo buone nuove :-) Grazie al preziosissimo aiuto di Michael (https://github.com/micdenny) ed Enos (https://github.com/enosrecanati) stiamo dando linfa a Radical A new home Siamo sempre su GitHub, niente paura, ma abbiamo anche deciso di sfruttare la GitHub Pages per avere un bel front-end: http://radical.topics.it Universal Apps Cominciato dall’instancabile Enos e portato a termine in queste vacanze natalizie oziose possiamo finalmente annunciare che abbiamo il supporto per Universal Apps, la nuova versione è in un repository separato per agevolare il versioning che non ha senso che vada di pari passo con quello della versione desktop. ...
Abbiamo già parlato del lavoro legato alla performance di Radical, i punti toccati non sono stati poi molti, il voro nocciolo della questione giro intorno ad un signore che si chiama “Ensure” e che vi permette di scrivere qualcosa del tipo: class MyClass
{
public void Foo( String arg )
{
Ensure.That( arg ).Named( () => arg ).IsNotNullNorEmpty();
}
}
A runtime quello che succede è che se “arg” è null o empty vi beccate una simpatica eccezione con tutti i dettagli del caso, compreso:
...
Aurelio è uno dei tanti fruitori di Radical (che vi ricordo ha cambiato casa) e mi ha segnalato un fastidioso problema di performance nel momento in cui viene messa in binding una list di entità, basate sulla classe base “AbstractViewModel” di Radical, la cui numerosità sia corposa: Nell’esempio, che Aurelio ha prodotto per riprodurre il problema, a sinistra vengono create 2.000 istanze di un banalissimo ViewModel che implementa direttamente INotifyPropertyChanged, mentre a destra viene fatta la stessa cosa con un ViewModel che eredita da “AbstractViewModel”. Come si nota i tempi sono abissalmente superiori e anche inaccettabili...
Grandi novità per Radical che grazie al preziosissimo supporto di Micheal ha cambiato casa spostandosi da CodePlex a GitHub: https://github.com/RadicalFx/radical/ Il motivo è complessivamente semplice, è molto più facile gestire la collaborazione, abbiamo migrato i sorgenti, la documentazione esistente e tutti gli issue presenti (aperti). Ne abbiamo approfittato anche per creare un gruppo su Google che può essere un ottimo modo per continuare il corposo lavoro che abbiamo iniziato con gli web cast: https://groups.google.com/forum/#!forum/radical-mvvm-framework/ .m
Con grande rammarico causa pressanti e impellenti impegni lavorativi devo purtroppo annullare l’appuntamento di stasera. Avevo previsto di preparare il materiale nel weekend, ma ho lavorato tutto il weekend. Mi scuso con tutti gli iscritti per il disguido e vi aggiorno a breve su quali potrebbero essere le nuove date. Scusate ancora. .m
Come precedentemente annunciato è adesso possibile localizzare il “display name” di una proprietà del ViewModel, per ora solo per la gestione degli errori, per ora… :-) [Display( ResourceType = typeof( Properties.Resources ), Name = "MyProperty" )]
public String FirstName
{
get { return this.GetPropertyValue( () => this.FirstName ); }
set { this.SetPropertyValue( () => this.FirstName, value ); }
}
Utilizzando l’attributo Display, delle DataAnnotations, al posto dell’attributo DisplayName, è possibile localizzare il valore. Attenzione che per come funzionano le DataAnnotations le risorse devono essere pubbliche, cosa che purtroppo non è il comportamento...
Nonostante il disastro totale che è la mia agenda in questo periodo ce la possiamo fare :-) La data in cui riesco a pianificare e rendere sostenibile la preparazione del quarto appuntamento con Radical è Lunedì 25/11 alle 21.30 (magari anche un po’ prima, ma quello lo decidiamo insieme). L’agenda, o meglio una possibile idea di agenda, è: Introduzione del polimorfismo nel modello dati al fine di capire come gestire visualizzazioni condivise e editing diverso; Approfondimento dei concetti di “UI Composition” per capire come strutturare un’applicazione a moduli/plugin; ...
A seguito di una richiesta da parte di un utente ho aggiunto una piccola ma a lungo parcheggiata funzionalità nella gestione degli errori offerta da Radical. è finalmente possibile specificare un DisplayName per le proprietà che vengono validate, come si vede dall’esempio la proprietà validata si chiama Text, o Sample, ma viene visualizzato, nel riepilogo degli errori, un nome diverso. La cosa è apparentemente semplice, ma volendo supportare la localizzazione (feature che arriverà a breve) non è proprio così immediata. Per tagliare corto quello che potete fare adesso è usare la validazione come avete sempre fatto,...
L’ultima volta ci siamo lasciati con l’impegno di affrontare i seguenti argomenti: Introduzione del polimorfismo nel modello dati al fine di capire come gestire visualizzazioni condivise e editing diverso; Approfondimento dei concetti di “UI Composition” per capire come strutturare un’applicazione a moduli/plugin; Adesso vediamo di definire come e quando riprendere i nostri incontri: http://doodle.com/4etu7et382shtcen Inoltre se avete richieste particolari e/o argomenti che vorrete veder trattati come al solito approfittate dei commenti o dei contatti che avete (come la mail nelle slide dei precedenti eventi). .m
Anche il materiale del terzo incontro è disponibile per il download, lo trovate su SkyDrive: http://sdrv.ms/17OBNzo. Se qualcuno si fosse perso le puntate precedenti sono disponibili registrazioni, esempi e slide: http://sdrv.ms/12y2IO9 http://sdrv.ms/13DJLtT Il prossimo appuntamento sarà presumibilmente dopo la metà di settembre, more to come, è gli argomenti “vorrebbero” essere i seguenti: Introduzione del polimorfismo nel modello dati al fine di capire come gestire visualizzazioni condivise e editing diverso; Approfondimento dei concetti di “UI Composition” per capire come strutturare un’applicazione...
Ci siamo, anche il 3° appuntamento con Radical è definito: ci “sentiamo” giovedì 18/7 alle 21.30, sempre via Live Meeting: Meeting ID: D7GGNM; Entry Code: FrWm+_-6f; URL: https://www.livemeeting.com/cc/mvp/join?id=D7GGNM&role=attend&pw=FrWm%2B_-6f; Gli argomenti saranno il naturale prosieguo di dove abbiamo lasciato l’ultima volta: Gestione di “conversazioni multiple”; Editing di una entità (Person); Gestione di un grafo complesso (aggiungendo ad esempio il concetto di Addresses a Person); ...
Anche il secondo giro del nostro tour serale su Radical è andato, spero sia andato come speravo :-), dai feedback direi di si. Ho pubblicato on line il materiale su SkyDrive: sdrv.ms/13DJLtT, mentre l’esempio che abbiamo cominciato a realizzare è presente nei sorgenti della solution per ora, al prossimo giro lo tolgo e lo faccio diventare un progetto a se per evitarvi di dover fare il setup della vostra macchina con tutti i crismi necessari per far funzionare la solution di Radical nel suo complesso (Windows 8, Hyper-V, Blend SDK vari, WP8 etc..) Sto pianificando il prossimo step...
Ci siamo domani sera ci sarà il secondo appuntamento con MVVM w/ Radical, ancora per questo giro la piattaforma è quella di Live Meeting, di seguito i dettagli: Url per la partecipazione: https://www.livemeeting.com/cc/mvp/join?id=7N746Q&role=attend&pw=FrWm%2B_-6f Meeting ID: 7N746Q Access Code: FrWm+_-6f A domani! .m
Confermato, la seconda puntata di “MVVM con Radical” è fissata per il 12 giugno, ore 21.30, a breve i dettagli sulle modalità di partecipazione. http://www.doodle.com/m5rpuudxt474ies7 .m
Direi che ci siamo quasi, come abbiamo già avuto modo di dire la seconda “puntata” ci porterà verso una prima bozza di applicazione reale. Ho purtroppo dovuto modificare il doodle perché una data disponibile, il 5/6, purtroppo per cause di forza maggiore non lo è più, direi che lascio aperto il sondaggio fino a fine settimana e sabato pubblico la data definitiva. .m
Il primo “giro” di Radical mi sembra di poter dire sia andato bene, ci sono un po’ di cose da affinare ma direi che non mi posso lamentare troppo, ovviamente grazie a tutti i partecipanti. La registrazione e il materiale del primo incontro è disponibile per il download. Come da richiesta stiamo organizzando il secondo round il cui scopo è affrontare una “semplice applicazione per editare delle anagrafiche”, gli argomenti che tratteremo sono: CRUD usando RavenDB Embedded allo scopo di tener bassissima la complessità, pensate a RavenDB (in questo caso) come un mero meccanismo...
Siamo quasi pronti :-) abbiamo due opzioni, di cui la seconda sarà usata come backup. Office Live Meeting La scelta principale è Office Live Meeting, offre più funzionalità per chi presenta, miglior gestione della conferenza e delle registrazioni, i dettagli del meeting pianificato sono i seguenti: Accesso: https://www.livemeeting.com/cc/mvp/join?id=Radical1&role=attend Meeting ID: Radical1 Il tutto sarà live dalle 21 di stasera, vi pregherei di connettervi il prima possibile per assicurarci che entro le 21.30 tutto sia pronto e testato. è necessario aver installato il client di Live Meeting (installabile dalla pagina di cui sopra)...