Per chi di voi durante l’estate è interessato ad approfondire/imparare ad usare WPF, ecco un paio di libri che apprezzo sull’argomento. WPF, come sapete, è una tecnologia che è stata inizialmente presentata con .NET 3.0, ma forse non è ancora ben conosciuta/usata da molti developer; personalemente la ritengo semplicemente straordinaria. Ammetto che quando mi ci sono avvicinato per la prima volta qualche anno fa, io, che ero abituato alle Windows Forms, l’ho trovata un po’ difficile; in realtà dopo poco, mi sono reso conto che, capiti i concetti più nuovi che ne sono alla base, si è rilevata incredibilmente soddisfacente e interessante se usata nelle moderne interfacce utente. So che molte aziende hanno investito molto in applicazioni che fanno uso di Windows Forms, ma grazie all’interoperabilità tra le due tecnologie, sono sicuramente interessanti anche approcci misti Windows Forms /WPF che sappiano prendere il meglio dell’una e dell’altra, rendendo possibile una modifica incrementale delle applicazioni esistenti.
Inoltre lo XAML usato da Silverlight 2 è un sottoinsieme di quello usato da WPF, e quindi come dire: si imparano due tecnolgie al costo (di apprendimento) di una :-)
Ecco quindi i miei preferiti, ovviamente è un giuzio soggettivo:
Il primo libro è di Adam Nathan, sicuramente interessante per chi inizia da zero con WPF, perché è molto ben spiegato, scritto in modo chiaro, brillante e mi ha sempre colpito perché spiega il “perchè” delle tecnologia mettendone in luce vantaggi e scenari d’uso.
WPF Unleashed, Adam Nathan, partite da qui.
Il secondo libro è decisamente molto completo, preciso e aggiornato con le novità di WPF introdotte con .NET 3.5. In questo libro trovate anche un capitolo sul Multithreading ed come utilizzare il nuovo modello degli Add-In introdotto con .NET 3.5.
Pro WPF in C# 2008, Matthew MacDonald
Buone letture
Nel suo bellissimo post history.forward() Sam Ramji, Director Open Source Software Lab in Microsoft, ha reso noto i contenuti della sua keynote alla OSCON, una delle più grandi conferenze sull’ Open Source, con i recenti passi di Microsoft come contributor nel mondo Open Source. In sintesi:
Quest’ultimo punto, in particolare, non va inteso come allontanamento da IIS, su cui Microsoft continua e continuerà ad investire con IIS 8.
Leggete l’annuncio completo con dettagli e chiarimenti qui.
Ok, forse sono un po’ fissato, ma ammetto che da quando ero giovanissimo ho sempre dedicato parte del periodo estivo a letture “tecnologiche”; in effetti non sono proprio il tipo da gialli.
Spero di fare cosa gradita segnalandovi un po’ di libri sulle tecnologie più importanti per Microsoft e per il sottoscritto e quindi ecco il primo.
Nuovissimo libro su Silverlight 2, vi rimando direttamente al sito dell’ autore, Laurence Moroney, che ne descrive l’indice ed i contenuti e qualche anticipazione su un capitolo bonus…
Anche quest’anno in Microsoft Italia si svolgeranno i Community Days, l’appuntamento con alcune delle più note community italiane , per approfondire i temi più nuovi e di maggior interesse nell’ambito dello sviluppo .NET.
L’evento, completamente gratuito, si svolgerà il giorno 9 e 10 luglio. Il 9 mattina sarò presente anch’io con due sessione di cui trovate qualche anticipazione nel seguito:
Silverlight 2
Questa sessione è assolutamente “no-slide” e partirò da un’applicazione che svilupperò durante l’intera sessione e che mi darà la possibilità di parlare di Silverlight 2.
Windows Live
Ho già avuto modo di vedere che Windows Live è poco conosciuto al mondo dai developer e quindi è un vero piacere poterne parlare! Nella percezione comune il termine viene associato solo a una serire di servizi per utenti finali, come ad esempio il Messenger, l’aspetto interessante è che in questi anni Microsoft ha lavorato al fine di “aprire la piattaforma” e quindi sono disponibili una serie di API (web) e controlli multipiattaforma per l’accesso a tali servizi.
Nella sessione presenterò anche un controllo, non ancora scaricabile pubblicamente, che farà presto parte dei Windows Live Tools per Visual Studio 2008…. Un’anteprima da non perdere!
Le due sessioni sono quindi rivolte ad un pubblico di sviluppatori.
Conclusione
Le due giornate saranno molto ricche e se non l’avete già fatto vi conviene dare uno sguardo all’agenda, troverete sicuramente molte sessioni che vi interesseranno.
Quindi che dire …. non mancate!
Ciao e a presto
Aggiornamento del percorso formativo su Silverlight 2, ecco i link diretti, ai webcast in italiano:
Il primo webcast è visibile in streaming qui
Ho trovato molto utili questi post fatti dopo il rilascio della beta 2:
Introduzione
User Interface
Networking
Visual State Manager
Styling e Skinning(o Templating)
BCL
HTML Bridge
Animazioni
Varie
Documentazione
Spero che vi risulti interessante il materiale che vi ho segnalato e se trovate qualche altro link, lasciate pure un commento a questo post.
-Pietro
Sapete a cosa serve questo checkbox ?
Lo trovate nel wizard di creazione di un nuovo progetto creato con la beta 2 di Silverlight.
Leggete la risposta qui.
Con la beta 2 di Silverlight 2 ci sono dei cambiamenti nel modo in cui viene gestito il bubbling degli eventi in Silverlight. Con questo termine ci si riferisce alla funzionalità per cui alcuni eventi, quelli definiti in UIElement, che vengono scatenati su un elemento presente nel layout dell’applicazione vengo “portati” su e possono essere gestiti anche dagli handler(se presenti) di quegli elementi che li contengono. Mi spiego con un esempio: se inserisco un rettangolo in una griglia e premo il pulsante sinistro sul rettangolo questo evento può essere gestito (se presente) da un handler definito sul rettangolo e da un handler nel contenitore del rettangolo stesso (quindi la griglia nel nostro esempio). Questi eventi che possono essere gestiti da questo meccanismo di “Event Bubling” vengono definiti come Routed Events.
Se non vogliamo che l’evento venga gestito da altri handler più esterni, basta impostare la proprietà e.Handled = true come prima proprietà all’interno del handler dell’evento (“ e” è il parametro di tipo EventArgs specializzato che arriva nel metodo).
Per chi conosce WPF: non esiste con la beta 2 di SL 2 la possibilità di registrarsi ad un evento di tipo “handledEventsToo”. Il comportamento della beta 2 è diverso rispetto a quello che succedeva con la beta 1.
Mi potrei aspettare che la stessa cosa succeda anche se inserissi un bottone e volessi gestire l’evento MouseLeftButtonDown. Con la beta 1 questo era vero, ma non con la beta 2 in cui questo evento è intrinsecamente già gestito e quindi “non scatta” e non può essere gestito. Se volete dunque gestire l’evento di click nel caso di un bottone dovete utilizzare l’evento Click, che è anche la cosa più intuitiva da fare. Potete anche leggere questo post per un esempio più dettagliato.
Link utili:
Se volete qualche dettaglio in più sulla gestionde degli eventi in Silverlight potete leggere a questo link oppure consultare la documentazione MSDN su Events Overview in Silverlight 2.
In questo post cercherò di raccontarvi le novità della beta 2 relative ai controlli e al Visual State Manger (VSM).
Molti dei controlli che nella beta 1 erano inclusi nell’ SDK, ora sono stati inseriti nel run-time, che è diventato di conseguenza leggermente più grosso circa 4,6MB, rispetto ai 4 precedenti, ma questo consente di creare delle applicazioni più piccole, perché molto è già incluso nel run-time. I controlli si trovano ora in System.Windows.dll, chi ha usato la beta1 noterà delle diversità nei reference alle dll incluse di default nel progetto. Alcuni controlli: DataGrid, Calendar , GridSplitter e TabPanel (novità della beta 2) sono ancora a parte, li trovate in Windows.Controls.Extended.dll. Trascinando i controlli dalla toolbox di Visual Studio, vengono aggiunti i reference corretti al progetto e definiti i namespace nello XAML, come si vede dalla figura seguente per “my1” e “my”, che vegono aggiunti quando faccio drag& Drop dei controlli.
I tooltip non possono più essere impostati direttamente, ma devono essere impostati tramite il ToolTipService
Calendar, DataGrid, TextBox hanno subito miglioramenti che trovate descritti nel post di scottGu. Il WaterMarkTextBox non è più presente per rendere il framework della UI di Silverlight sempre più vicino a quello di WPF. Nella versione definitiva di Silverlight 2 saranno presenti molti altri controlli.
Una delle novità più importanti della beta 2 è quello che viene definito il Visual State Manager, grazie al quale è più semplice ridefinire il template di un controllo, cioè il suo layout. Il VSM può essere utilizzato sia con i controlli custom che gli User Control. In generale possiamo pensare ad un bottone; modificare il template vuol dire cambiarne completamente l’aspetto, ma fare in modo che si presenti a tutti gli effetti come un bottone, cioè risponda ad un evento di click da parte dell’utente. Possiamo pensare all’operazione di personalizzazione del template di un controllo come se stessimo lavorando su una macchina a stati finiti. Il nostro controllo, ad esempio un bottone, ha diversi stati associati, ad esempio lo stato “Pressed”, “Normal” etc. che possono essere modificati. Rispetto a questo modello possiamo pensare di avere delle transizioni da uno stato al successivo. Ora lo stato del controllo definisce il layout del controllo in un particolare momento, ad esempio quando premo il bottone, il layout del suo stato pressed e rosso e quando è nello stato Normal è invece verde. Un’ transizione è un’animazione che porta il nostro controllo dallo stato Pressed allo stato Normal. Nella documentazione trovate documentati i diversi stati che ogni controllo può avere.
La modifica del template di un controllo è supportata da Expression Blend 2.5 June Preview che supporta appieno questo modello.
Da Visual Studio 2008, dopo aver installato i Tools per sviluppare per Silverlight 2 beta 2, posso accedere alla classe VisualStateManager, questa classe contiene gli stati del template del nostro controllo e si occupa di gestire la transizione da uno all’altro in base a quello che avviene sul controllo stesso.
Da codice .NET posso ad esempio invocare il metodo GoToState sulla classe VisualStateManager per passare ad nuovo stato
Facciamo un semplice esempio e creiamo un progetto Silverlight 2 con Blend 2.5 ed inseriamo due bottoni che rappresentano il bottone di Login e Logout che potremmo avere nella nostra applicazione. Posso selezionare uno dei bottoni, ad esempio quello di login, tasto destro, selezionare Edit Control Parts (Template) e quindi nel menù successivo Edit a Copy, come in figura:
Questa operazione crea nelle risorse dell’applicazione la copia del template del nostro bottone. Possiamo renderci conto quindi degli stati e delle transizioni nella nuova finestra States, come in figura:
Nella finestra ho evidenziato gli stati Normal e Pressed ed inoltre un asterisco ci dice che provenendo da qualsiasi stato se vado nello stato Mouse Over, viene attivata un’animazione della durata di circa 0,2s. Posso aggiungere anche delle transizioni che portano verso un qualsiasi stato.
Se volete vedere come è fatto lo XAML generato, noterete qualcosa del genere:
In cui dovreste riuscire a distinguere gli stati (VisualState) e le transizioni (VisualTransition).
Ora apriamo lo stesso progetto con Visual Studio 2008 e aggiungiamo un handler per la gestione dell’evento di click del secondo bottone quello di Logout. Questo semplice esempio ci permette di capire come utilizzare da codice la classe VisualStateManager per cambiare lo stato di un controllo, in questo caso “pilotando” da un secondo controllo.
In questo caso al metodo GoToState viene passato il controllo al quale applicheremo un cambio di stato, cioè il bottone login, lo stato di destinazione “Disabled” e true come parametro per dire di utilizzare una transizione tra i due stati.
L’utilizzo del Visual State Manger consente di creare più facilmente template per i controlli, inoltre Expression Blend 2.5 ora supporta questo modello, consentendo di lavorare con un tool in modo visuale, risparmiandoci di scrivere il codice per definire il layout, che personalmente non trovo entusiasmante da scrivere. Il progetto ottenuto è apribile da Visual Studio 2008 dove posso usare da .NET le opportune classi per interagire con questo modello.
Qui,qui e qui
La beta 2 è stata rilasciata tra la notte di venerdì e sabato, direi quindi che i colleghi di corp hanno rispettato quando annunciato al TechEd la scorsa settimana. Se non avete ancora letto la notizia direi che potete leggere il post ufficiale di scottgu qui. Sabato mattina sono giusto riuscito a far partire il post sul blog MSDN italy con il video (5 minuti) che avevo registrato qualche giorno fa, prima di essere fagocitato dal weekend :-). Ora che siamo giunti a lunedì ho un po’ di tempo per raccontare a chi legge per la prima volta le novità di questo rilascio.
La beta2 è la naturale evoluzione della beta 1 di Silverlight 2, con in più la licenza go-live, che vi permette di iniziare ad usare SL 2 per fini commerciali.
Il modo più rapido è andare sul sito silverlight.net/GetStarted dove trovate tutto: se non avete una versione di Visual Studio 2008 potete scaricare una trial, dalla Standard in su. La beta 2 di Silverlight 2 è compatibile con la beta 1 di .NET Framework 3.5, a differenza della beta1 di SL. Ora scaricate il file Silverlight-chainer dal sito Microsoft che , verificherà la corretta installazione delle fix per Visual Studio 2008 RTM, installerà il run-time di Silverlight, l’SDK che contiene documentazione ed esempi ed i Tools per Visual Studio 2008: il tutto in un colpo solo!
Ora procedete con l’installazione di Expression Blend 2.5 June CTP: questo è un tool per designer, ma anche per developer, nel senso che vi dà la possibilità di non scrivere il codice un “po’ noioso” che di solito ai dev non piace scrivere: personalmente non mi piace e trovo quasi impossibile come definire il gradiente di colore di un bottone! Una delle novità più importanti di Expression Blend è il supporto per il Visual State Manager (VSM), un pattern per realizzare lo “skinning” dei controlli, di cui vi parlerò in un prossimo post.
Installate ora Deep Zoom Composer: è il tool che serve per lavorare con l’omonima tecnologia, che consente di far navigare un utente su web in immagini ad altissima risoluzione, andando sempre più in profondità per scoprire particolari difficilmente visibili dall’immagine nella visione originale: pensate quanto può essere bello avere delle immagini di dipinti di un museo e poter “navigare” nell’immagine a livelli di zoom diversi.
La beta 2 è compatibile con Silverlight 1.0 (RTW) , la versione di Silverlight già rilasciata, mentre ci sono alcune modifiche da apportare per chi ha usato la beta 1, le modifiche alle API sono documentate qui: breaking changes between beta 1 and beta 2. Per chi ha progetti con la beta 1 penso troverà utile anche questo post.
Beh, andate sul sito www.microsoft.com/silverlight che vi dirà che avete installato l’ultima versione di SL
Facendo tasto destro sull’applicazione SL notiamo quache nuovo tab, come vedete in figura:
Il DRM è una delle novità della beta 2 , tramite il supporto a Windows DRM e PlayReady DRM.
Inoltre è presente un tab per la gestione dell’ “Application Storage”. SL 2 dà la possibilità di avere uno spazio isolato, detto Isolated Storage, cioè uno spazio virtuale su file system, legato al profilo dell’utente e alle applicazioni web. Le applicazioni web condividono tale spazio a livello di dominio web ( ad esempio più applicazioni web nello stesso dominio microsoft.com, condividono la stessa quota). La quota iniziale è di circa 1MB (nella beta 2), ma è possibile, utilizzando un’opportuna API, aumentare lo spazio a disposizione. Le applicazioni SL 2 non hanno accesso diretto all’ I/O su disco dell’utente, per ovvie ragioni di sicurezza, ma possono avere accesso a questo spazio “protetto”. Nel tab potete abilitare sul client l’Application Storage e gestirlo, cancellando l’eventuale sapzio già allocato.
E’ già raggiungibile a questo url la documentazione su MSDN.
Potete anche scaricare il CHM, consultabile offline.
Qui potete raggiungere il quick start sulla beta 2.
Ai prossimi post per approfondimenti …
Una domanda tipica che mi viene fatta quando parlo di IIS 7 è se esista qualche meccanismo di rewrite degli url già fatto. Un meccanismo/engine di rewrite degli url può avere diverse funzionalità, come quella di mascherare l’url “vero”, che gestisce la nostra richiesta, di rendere più facile da ricordare un url, piuttosto che facilmente indicizzabile da un motore di ricerca.
Bene, da poco è disponibile una Techical Preview per IIS 7 di un modulo di URL Rewrite.
Queste le funzionalità:
Per provarlo:
Installate il file msi da uno dei link riportati sotto ( per piattaforma x86 e x64):
Ora aprite la console di IIS 7 (io sto usando Vista SP1, ma potete usare anche Windows Server 2008) e troverete una nuova opzione
Premendo add Rule nella scherma successiva potete ora creare una nuova regola , con le modalità elencate sopra
A questo link trovate un tutorial che vi guiderà passo-passo nella realizzazione di una semplice regola, ma dove comunque vengono messe in luce le funzionalità di questo modulo.
Potete anche vedere come realizzare una permalink per WordPress su una macchina configurata con FastCGI e WordPress.
Annuncio BillS IIS blog
Tutorial: Using Url Rewrite Module
Url Rewrite Module Configuration
Download x86 CTP per IIS 7.0: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1691
Download x64 CTP per IIS 7.0: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1692
Andrea Marzilli ha intervistato alcune persone alla fine del PhpDay2008, ecco la mia:
http://www.ictv.it/file/vedi/693/brambati-iis7-fastcgi-e-php/
Sono un po' noioso lo so, scusate :-)
Anche quest'anno (sono arrivato alla mia seconda edizione!) ho partecipato al PhpDay, svoltosi a Rimini lo scorso venerdì e sabato.
Mi ha fatto piacere rivedere alcune facce note, che potete vedere nella foto scattata, l'unica nella mia macchina
Le slide della sessione le trovate sotto, in sintesi gli argomenti trattati:
Un titolo un po' complicato, certo, vediamo di chiarire meglio il contenuto di questo post. Lo scopo è di illustrare con un po' di codice una delle novità della SP1 di .NET 3.5, in particolare il supporto di WCF per la serializzazione delle entità generate dall' Entity Framework, anche quest'ultimo, come forse avete letto, lo trovate ora, insieme al designer installando la SP1. Potete leggere le novità della SP1 qui.
Dopo aver installato l'SP1 su una macchina di test, creiamo dunque un progetto di tipo WCF Service Application, come mostrato in figura:
Aggiungiamo ora un nuovo item di tipo ADO.NET Entity Data Model. Due parole sull' Entity Data Model (EDM), per chi non ne ha mai sentito parlare, per gli altri saltate pure il paragrafo. L' EDM rapprenta il cuore dell ' Entity Framework (EF), consentendovi di "rappresentare" il dominio applicativo della vostra applicazione. L'insieme delle classi che ne scaturiscono non sono necessariamente legate a come è fatto il vostro database in termini di tabelle etc.L' EDM è implementato attraverso un file CSDL, come descritto nella documentazione. Nella sua intimità il designer di VS, che useremo nell'esempio, crea tre file XML: il CSDL descrive appunto le entità con cui la nostra applicazione vuole parlare, ad esempio un cliente ed un ordine, un secondo file SSDL descrive invece come è la struttura relazionale del nostro database, che può non necessariamente mapparsi in modo diretto sulle entità, ad esempio posso avere più tabelle che rappresentano sul db come è fatto un customer. Un terzo e ultimo file MDL descrive invece il mapping tra le entità e le tabelle sul database. Il designer che Visual Studio 2008 ci mette a disposizione crea un file .edmx, che al suo interno è fatto appunto dai tre file XML. Ok, scusate la brevità, ma potete leggere un'introduzione a EF e EDM a questo link.
Nella figura seguente aggiungiamo quindi un nuovo item e seguendo il wizard proposto utilizzate come database il classico Northwind e per gli scopi di questo post inserite solo le tabelle Customers e Orders.
Il risultato mostrato nel designer dell'EF sarà qualcosa del genere, in cui vedete espressa, una relazione 1-a-molti tra le entità, ad ogni entità corrisponde una classe che poi useremo nell'applicazione. Infatti il designer creerà delle classi, oggetti .NET, che useremo per scrivere il codice e una classe NorthwindEntities che serve a EF e che sarà il nostro entry-point per poter lavorare con EF.
Ora vogliamo esporre un servizio WCF con un semplice metodo che restituisca l'elenco dei client e dei relativi ordini, per fare questo per prima cosa modifichiamo il file IService1 creato in automatico quando abbiamo aggiunto il progetto WCF, come in figura:
Nella figura vedete che ho aggiunto il namespace NorthwindModel, che mi è stato creato quando ho usato il designer dell' EF, quindi ho definito nell'interfaccia un unico metodo che restituisce l'elenco di customers, il numero massimo è controllato dal parametro del metodo. Il metodo ha intenzione di restituire l'elenco di clienti e relativi ordini all'applicazione client che invocherà il servizio. Implementiamo ora il servizio nel file service1.svc.cs usando una query LINQ to Entities. LINQ to Entities è una delle modalità di interrogazione che offre EF, potete anche usare Entity SQL in diversi scenari... questi argomenti sono fuori dallo scopo di questo post.
Nell'esempio vedete una semplice query LINQ to Entities, che espone i Customers (al massimo il numero indicato). Nella query notate la clausola Include. Questa viene usata perchè l'EF ha un meccanismo esplicito per il caricamento delle entità, possiamo vedere la query generata su database ad esempio usando il Profiler di SQL Server. Se volete saperne di più sulle strategie di caricamento dell' EF e modalità di interrogazione, leggete questo interessante articolo.
Bene, ora aggiungiamo una semplice console application e aggiungiamo un riferimento al servizio WCF presente nella solution, come mostrato in figura, in cui stiamo, per l'appunto, aggiungendo una Service Referece all'applicazione console.
Ora scriviamo il codice necessario per mostrare l'elenco dei clienti, diciamo i primi due e i relativi ordini
Quello che succede è che l'applicazione client non vede la classe Orders, poichè questa non è stata serializzata, perdiamo quindi la possibilità di navigare da un generico Customer a tutti i suoi Orders, se non esponendo gli ordini direttamente dal metodo WCF.
Le novità introdotte a WCF nella SP1 supportano la serializzazione del grafo delle entità generate dall'Entity Framework, quindi possiamo scrivere il seguente codice, che ci permette di fare sul client quello che volevamo senza complicare il metodo del servizio WCF.
Ecco il codice, in cui vedete che abbiamo accesso, dato un cliente, anche alla lista degli ordini.
Il risultato è quello atteso:
Potete scaricare l'esempio di codice a questo link.
Sono disponibili per il download le sessioni del The Next Web Now, Mix Essentials. Potete scaricaricare la mia sessione sullo sviluppo con Windows Live ai due link sotto:
Windows Live - parte I
Windows Live - parte II
Se siete interessati ad approfondire l'argomento vi annuncio in anteprima che stiamo lavornado, insieme a Davide Vernole, Microsoft MVP, ad un tutorial su Windows Live, che sarà a breve disponibile, un po' di pazienza ...
Sono disponibili anche tutte le altre sessioni sullo sviluppo con Silverlight 2 , Silverlight per mobile e la keynote tecnica:
Ecco i link diretti:
Happy Coding
Tra le novità di Microsoft Expression Web 2, da poco rilasciato, c'è il supporto per PHP. Potete leggere un articolo completo sulle novità a questo link. Nell'articolo trovate utili informazioni su come configurare il run-time PHP per lo sviluppo con Expression Web 2.
In sintesi qualche snap-shot sulle funzionalità:
Consente di vedere la preview della pagina che contiene codice HTML/CSS e PHP, compresa la preview delle pagine inserite via php include: nella figura la pagina menu.php inserita nella pagina principale usando lo script include, viene visualizzata nelle finestra di preview sottostante.
Per testare un'applicazione PHP direttamente usando Expression Web, usando comunque il run-time PHP. Nell'immagine la preview della pagina viene lanciata premendo F12 da Expression Web 2 e gira in un processo apposito lanciato dall' IDE su una porta generata dinamicamente.
Chi usa PHP per lo sviluppo di applicazioni web troverà sicuramente vantaggio nel supporto avanzato per i CSS e la loro preview direttamente nell' IDE.
Se volete provare con mano le novità, potete scaricare una versione trial di Expression Web 2.
Oggi in effetti ho avuto una giornata un po' particolare, sicuramente diversa dal solito. Sono infatti stato intervistato in televisione per la trasmissione MyTech di Class Life, che va in onda su Sky e sul digitale terrestre.
Ammetto è stata un'esperienza nuova e sicuramente emozionante, al contempo divertente, e sebbene sia abituato a parle in pubblico anche difronte a molte persone, abbia fatto un po' di interviste su internet registrare qui in Microsoft, una trasmissione televisiva è sicuramente un'esperienza diversa.
La prima cosa di cui sono rimasto colpito è l' "angolo" nel quale Davide Fumagalli mi ha intervistato, si trovava in fatti all'interno di una redazione giornalistica e quindi abbiamo registrato mentre altri lavoravano ... spero di non aver dato troppo fastidio. Problemi: sicuramente parlare di fronte ad una videocamera non è facilissimo, ma ammetto la sgradevole sensazione che si prova quando registro un webcast è sicuramente peggio. Il format mi è piaciuto molto: un mix di domande, risposte e servizi mandati in onda e da commentare; sicuramente diverso dalle mie solite presentazioni in cui alterno slide e demo.
Grazie all'aiuto di Luciano che mi ha accompagnato, sono riuscito a scattare questa frugale foto, subito dopo la registrazione.
Ora mi rimane un unico dubbio: ma sarò venuto bene in tv? Ma devo aspettare di vedermi...
Se volete seguire la trasmissione vi farò sapere quando andrà in onda ... e se volete farmi sapere cosa ne pensate sono qui. Forse sarà anche scaricabile ... ok aggiornerò il blog, nel caso
Ciao
Con la beta 1 della SP1 di .NET 3.5 arriva una nuova importante modalità di installazione del .NET Framework. Un sottoinsieme delle librerie di .NET 3.5 SP1 saranno pacchettizzate per offrire le funzionalità necessarie alle sole applicazioni client. Inoltre un nuovo bootstrapper più leggero (circa 200KB) migliorerà le performance in fase di installazione.
Perchè una versione Client di .NET ?
Con la maturità e complettezza delle funzionalità di .NET 3.5 la dimensione del framework è diventata ormai importante. Per chi sviluppa applicazioni client si apre quindi una nuova possibilità: usare una versione ridotta di .NET FX 3.5 pensata appunto per le sole applicazioni client.
La versione client di .NET è composta da un sottoinsieme, che occupa circa 26 MB, degli assembly del full-net framework: le librerie sono le stesse, non serve quindi ricompilare un'applicazione pacchettizzata per .NET client profile per farla girare sulla versione full. Le componenti di massima incluse sono:
Scenari di installazione del .NET Framework
Il nuovo bootstrapper è in grado di gestire scenari di upgrade, ad esempio se ho una macchina con installato già .NET 3.0, verranno scaricati solo i file di update per la versione 3.5 SP1 del framework e le relative fix per la versione 2.0 e 3.0 del framework.
Supporto in Visual Studio 2008
VS 2008 già supporta la possibilità di scegliere il framework di riferimento per creare un' applicazione, con la nota funzionalità detta di multi-targeting con cui posso decidere se sviluppare per .NET 2.0, .NET 3.0 o .NET 3.5. Ora una proprietà di progetto, esposta tramite un check-box abiliterà il supporto per l'uso del Client Framework, come si vede in figura:
In caso useremo API o metteremo reference a dll non presenti nella versione client del Framework riceveremo un warning a compile-time. Le applicazioni così realizzate verrano inoltre marcate nel manifest con un opportuno flag che permetterà al run-time in esecuzione di sapere se l'applicazione è in grado di girare correttamente. Se si cerca di far girare un'applicazione che richiede il full-framework, il client profile avvertirà quindi l'utente di scaricare la versione completa.
La nuova SP1 di .NET 3.5 (rilasciata oggi in beta 1) e Visual Studio 2008 contiene molte altre novità, potete partire da questo post per farvi un'idea.
Una delle novità che durante il lancio di VS 2008 ho visto essere più apprezzate, per chi sviluppa per il web, è il supporto per l'intellisese del JavaScript che viene sicuramente in aiuto in molti siti che ne fanno sempre più uso.
Dopo il recente annuncio della nuova versione delle API e del controllo di Virtual Earth 6.1 sono state aggiornate su CodePlex le librerie che consentono di avere il supporto per JavaScript quando si sviluppa con Virtual Earth. Come ho avuto modo di mostrare di recente, per creare un' applicazione che usa VE basterebbe una semplice pagina HTML, scritta con notepad, che fa delle semplici chiamate in JavaScript. Ora, non so quanti oggi siano disposti a seguire questa modalità di programmazione, ma per chi, come me, preferisce un po' di aiuto dato da VS 2008 troverà sicuramente utili le librerie seguenti, che vi consentono di avere supporto pieno all' intellisese con Virtual Earth 6.1 quando lavoriamo in Visual Studio 2008.
Quindi scaricate come prima cosa le Virtual Earth JavaScript Intellisense Helper .
Una volta scaricato da CodePlex il progetto, se volete riutilizzare le librerie in un vostro progetto, potete semplicemente copiare la cartella VEJS, che contiene il riferimento a VeJavaScriptIntellisenseHelper.js. nel folder del vostro progetto e referenziarlo come vedete in figura. La pagina default.aspx, utilizza la sezione Scripts dello ScriptManager per istanziare i controlli VE 6.1 (nella figura non è visibile chiaramente) e il file javascript da me creato mymap.js che conterrà la logica per interagire con le mappe ed i riferimenti all' helper VeJavaScriptIntellisenseHelper.js che, a design-time, sarà responsabile di fornire il supporto all' Intellisese per VE 6.1.
Vediamo ora come è fatto il file mymap.js: il file contiene, con la sintassi di Visual Studio 2008, il riferimento al file js che contiene l'Help per il Javascript di Virtual Earth. Come vedete, sulla funzione Load dell'oggetto map ho l'intellisese per il controllo.
Nel file ho evidenziato in verde e in giallo due punti particolari del codice che ora vado a spiegare. In verde viene instanziata la classe VEMap a livello di pagina, questo consente, quando lavoriamo a design-time, di poter avere l'intellisese sull'oggetto map in tutte le funzioni in cui viene usato localmente. La funzione AddPushpin, infatti, utilizza di nuovo l'oggetto map, richiamando il metodo AddShape per aggiungere un Pushpin. Se non avessimo istanziato a livello di pagina l'oggetto map, il supporto per l'intellisese si sarebbe limitato solo alla funzione pageLoad(). Quindi questo approccio funziona bene per quando lavoriamo a design-time.
Nel momento in cui, non ci interessa più avere il supporto a design-time, perchè andiamo a rilasciare l'applicazione, possiamo invece istanziare la classe VEMap , come viene usualmente fatto e inizializzare a null, l'oggetto map, come nella parte gialla. Il motivo di questo artificio è che a causa di una limitazione del JavaScript, se usassimo subito la parte in giallo, quella standard per l'uso delle librerie di VE, avremmo intellisesse sull'oggetto map solo nella funzione pageLoad e non nella AddPushpin ed in tutte quelle successive.
In questo breve post avete visto un vantaggio del supporto al JavaScript di VS 2008 per chi sviluppa con VE e di come siano utili le nuovissime librerie che ci risparmiano un po' di lavoro quando lavoriamo con VE.
Happy Coding with VS 2008 + VE 6.1
Ieri si è svolto a Milano Mix Essentials, evento a cui ho partecipato come speaker, parlando della Piattaforma Windows Live. Windows Live sta diventando una piattaforma applicativa, sempre più ricca di nuove API e controlli verso servizi che prima utilizzavamo solo come utenti finali.
Nella slide vedete l'agenda che ho tenuto, in cui ho cercato sia di mostrare come utilizzare via API e via Controlli servizi già presenti nella piattaforma, ma anche novità annunciate al Mix08 tenutosi a Las Vegas quest'anno.
Ho copiato le slide sul mio skydrive (spazio gratuito per utenti che hanno un account Live ID) e qualche esempio di codice.
Le slide contengono parecchi link per reference, ma l'unico link da ricordare è dev.live.com, da cui potete partire per avere accesso a tutta la documentazione e soprattutto a molti Interactive SDK. Questi ultimi consento praticamente di fare taglia e copia del codice da usare per API e Controlli.
Come ho cercato di mostrare potete accedere alle API utilizzando protocolli diversi (SOAP, REST, WebDAV, AtomPub) a seconda del tipo di servizio a cui accedete; i controlli sono semplici controlli HTML e Javascript che non hanno dipendenze da particolari framework. Inoltre ho mostrato i Windows Live Tools per Visual Studio 2008, che semplificano l'utilizzo della piattaforma per gli sviluppatori ASP.NET. Alcuni degli esempi che ho uplodato li utilizzano. Potete scaricare la CTP dei Windows Live Tools qui.
Le informazioni sulle altre sessioni le trovate sul blog di team MSDN Italia.
Grazie a tutti per la partecipazione e fatemi sapere se vi servissero le slide in altri formati.
-p.s.: ora sapete cosa rappresenta quell'immagine di fianco alla mia firma
Tra le novità annunciate con il rilascio della versione 6.1 di Virtual Earth e del relativo Virtual Earth Map Control, ho voluto provare
Per istanziare una mappa utilizzando il nuovo controllo, basta specificare il codice seguente, in cui potete notare
Il seguente codice serve per istanziare il controllo e visualizzare la mappa in un punto da me scelto ed espresso in termini di latitudine e longitudine. Il valore 18 è il livello di zoom, potete vedere tutti i dettagli del metodo LoadMap qui.
A questo link trovate invece l'elenco di tutte le modalità di visualizzazione supportate.
Il risultato è il seguente: in cui notate i nomi delle strade in overlay alla mappa e il controllo 'in italiano'
Ora calcoliamo il percorso tra due punti, non scelti a caso, il primo si trova in un senso unico, il secondo fuori dal senso unico, come avrete modo di notare meglio nel seguito. Ora se fossimo in macchina, e fossimo contro-mano, dovremmo percorre il senso unico interamente e fare "il giro" per raggiungere il secondo punto, invece se fossimo a piedi, le cose sarebbero più semplici.
Mi spiego meglio: scrivendo questo codice:
Il risultato è il seguente in cui si vede che non percorriamo il senso-unico contro mano sulla via Ghiberti.
Ora invece specifichiamo nella classe VERouteOptions la possibilità di calcolare il percorso a piedi, grazie al valore della proprietà RouteMode che andiamo ad impostare a VERouteMode.Walking.
Ecco il codice:
Ed il risultato, che in modo evidente dimostra che stiamo andando contro-mano, ma perchè siamo a piedi!
Le nuove API di Virtual Earth 6.1 ed il relativo Map Control, offrono sicuramente funzionalità interessanti anche per il mercato italiano, come quelle mostrate. Potete già consultare la documentazione on line e il nuovo interactive SDK.
Trovate l'esempio di codice di questo post al link che è una semplice pagina HTML.
Happy coding with Windows Live
Si è appena concluso l'evento di Lancio a Perugia con i ragazzi di .NetUmbria, grazie a tutti per i feedback ricevuti, ecco un breve sunto della sessione, con qualche link utile ...spero.
Una delle novità più impotanti di .NET Framework 3.5 è sicuramente LINQ. Con Language Integrated Query abbiamo a disposizione una "sintassi alla SQL" per accedere a diverse sorgenti dati: collezioni di oggetti, nodi XML, DataSet e SQL Server, permettendo di lavorare utilizzando un approccio dichiarativo invece che imperativo. Questo ci consente di esprime ciò che vogliamo nel nostro codice in modo più semplice e leggibile, in molte situazioni.
La mia presentazione non è stata proprio introduttiva sull'argomento e per chi vuole saperne di più sulle novità ai Linguaggi C# 3.0, VB 9, o vuole avere una panoramica un po' più ampia sull'argomento consiglio di iniziare da questo tutorial scaricabile su LINQ e le novità dei linguaggi .NET. Durante la sessione mi sono concentrato di più su LINQ to SQL e ho introdotto l'ADO.NET Entity Framework cercando di chiarirne gli obbiettivi e di metterne in eveidenza le potenzialità d'utilizzo, nonchè di far capire che relazione esiste con LINQ to Entities.
Linq to SQL è l' implementazione LINQ per SQL Server, e solo per SQL Server. E' possibile utilizzare LINQ sia per interrogare SQL Server che per effettuare operazioni di aggiornamento/inserimento e modifica. Il linguaggio usato da LINQ to SQL è sicuramente molto espressivo, tanto che non è possibile avere una query T-SQL non esprimibile con LINQ to SQL. Per essere ancora più chiari, tenete presente che le query generate dall'engine sono state fatte dal team di prodotto di SQL Server. Da un certo punto di vista LINQ to SQL è anche più potente del T-SQL, permettendo di scrivere query come quella mostrata nell' esempio:
In cui possiamo chiedere la lista di clienti della città London e, tra questi, solo quelli che hanno un numero di ordini superiori a 4. Nel tipo anonimo ritornato una delle due proprietà è una lista di particolari ordini per quel cliente. Questa query LINQ, tutto sommato comprensibile, genera del codice SQL più complesso, con tanto di LEFT OUTER JOIN.
Una delle domande che più spesso ricevo è se si possono usare le store procedure con LINQ to SQL. La risposta è sì e con pieno supporto del designer. Ad esempio posso modificare il comportamento di quello che viene definito come "Behaviour" delle classi generate per fare in modo di andare ad inserire le mie logiche di Insert/Update/Delete. Nell'immagine vedete come selezionare una classe generata dal Designer di Visual Studio e come sia possibile mappare sull'operazione di Update di LINQ to SQL il comportamento di una Store Procedure. Prima dobbiamo avere associato (facendo drag-&-drop) delle store procedure al designer di Visual Studio (nel mio caso la StoreProcedure UpdateOrder): questo genera dietro le quinte il codice necessario per eseguire la chiamata alla store procedure.
E' da notare che il modificare il comportamento di LINQ to SQL per dirgli di utilizzare una store procedure per effettuare un'operazione di update non ha impatto sul codice che scriveremmo nell'applicazione per creare un ordine, aggiungere l'ordine alla collezione degli ordini del cliente e così via: ho omesso questo codice nelle figure seguenti, dove si vedere solo come dire alle classi di LINQ to SQL di utilizzare una store procedure invece di utilizzare il codice generato dal run-time stesso. Spero di essere stato sufficentemente chiaro.
E se ho una store procedure che recupera dati, anzichè fare insert/update o delete ? Certo la posso utilizzare ad esempio posso richiamare una store procedure che recupera i clienti per città e utilizzarla dalla classe DataContext specializzata. Quindi posso scrivere:
Dove db è sempre il Data Context specializzato, mentre il metodo va a richiamare una store procedure su database.
Ora, dato che la store procedure recupera una lista di clienti, mi potrebbe venire in mente di effettuare un'operazione di filtraggio (con una where) sul risultato. Quello che succede è che il filtraggio viene però eseguito in memoria, cioè se scrivo:
Quello che vediamo su SQL Server è solo l'esecuzione della store procedure, il risultato del nostro codice è però quello atteso: non solo ho clienti della città prescelta, ma ho filtrato in base a quelli il cui contactname inizia per "B", operazione quest'ultima effettuata in memoria.
LINQ to SQL supporta anche l'uso delle Table-Value Function (TVF), che, grazie alla loro componibilità, offrono invece un meccanismo diverso. Avendo una TVF nel db che fa le stesse operazioni che fa la store procedure, questa volta se richiamo la mia TVF e filtro come in precedenza:
Notate che nell'ultimo esempio sto chiamando un metodo diverso dal precedente, che appunto si mappa su una TVF su db.Questa volta il codice che viene eseguito su SQL Server contiene anche l'operazione di filtraggio, come vedete nella seguente immagine in cui viene appunto mostrato il codice SQL che SQL Server genera
Nella presentazione ho anche introdotto l' ADO.NET Entity Framework (EF). Ci tengo a ricordare che EF e Linq To Entities non sono stati rilasciati con Visual Studio, ma sono in beta attualmente.
L'idea di base di EF è di aumentare il livello di astrazione con cui lavoriamo nelle applicazioni. Cioè possiamo modellare delle classi che non si mappano a priori in modo diretto su una tabella di un database. Ad esempio la mia entità customer può poi mapparsi su n tabelle del mio database. Un' altra importante caratteristica di EF è che è pensato per poter essere utilizzato con diversi database. Nella slide seguente trovate l'architettura di EF in cui si evincono almeno le seguenti caratteristiche:
Ok, lungi dal voler essere completo in questo post qui trovate descritto l'esempio della sessione in cui potete vedere come ho modelli ad oggetti diversi se lavoro con LINQ to SQL rispetto a se lavoro con LINQ to Entities su un database comune di riferimento.
LINQ to SQL è pensato per essere il modo più rapido per accedere a SQL Server e in scenari in cui il nostro modello ad oggetti si mappa 1:1 con le tabelle del nostro database. LINQ to Entities è pensato per scenari in cui le il database evolve in modo indipendente dal modello ad oggetti e dove non c'è necessariamente mappaggio uno-a-uno. Con EF posso esprimere nel mio modello ad oggetti, da cui posso partire nella progettazione, relazioni molti-a-molti, come ad esempio quella tra Autori e Libri. L'architettura di EF inoltre consente di aggiungere provider per altri fornitori di DBMS. Esistono altre caratteristiche di differenziazioni e vi consiglio di leggere questo articolo per una trattazione completa.
Potete vedere le slide della sessione da SlideShare qui.
Spero che la presentazione vi sia stata utile e grazie a tutti per la numerosa partecipazione.
Penso che a breve potrete trovare sul sito di .NetUmbria un reportage fotografico della splendida giornata, nonchè il matereriale delle altre presentazioni ...
Il tour di Lancio è ormai quasi finito, sono infatti concluse le tappe “ufficiali”, in cui abbiamo toccato ben sette città italiane insieme a migliaia di persone. Le sessioni registrate a Milano sono live sul sito BE-IT, ma …. Il tour continua, infatti mancano ancora due date Perugia e Ancona dove le nostre community proseguiranno a raccontare le novità più importanti per gli sviluppatori …. e anche qualcosa in più.
Non potrò purtroppo essere presente all’evento di .NetMarche, ma per chi di voi passa da Perugia, siete invitati all’evento di .NetUmbria. La prossima settimana sarà una buona occasione per incontrarci.
L’evento di Perugia è molto fitto di argomenti interessanti e come ogni bravo speaker vi racconto qualcosa in anteprima sulla mia sessione.
Diversamente dalla mia sessione sulle novità di Visual Studio 2008 per il web, la presentazione sarà incentrata su LINQ e l’ ADO.NET Entity Framework, quest’ultimo, ci tengo a ricordarlo, non è ancora stato rilasciato, ma è comunque scaricabile in versione beta.
Cercherò di chiariare e dare risposta ad alcune domande, molte delle quali arrivano da quello che mi avete chiesto più volte ?
A presto e ci si vede a Perugia
Uno degli argomenti di maggior interesse oggi per gli sviluppatori è sicuramente LINQ, non posso che riscontrarlo ogni volta che partecipo ad un evento.
Di recente il network di ASPitalia ha aggiunto LINQitalia tra i siti specializzati su tecnologie .NET di maggior rilievo.
Oggi vorrei segnalarvi lo speciale, da poco iniziato sull'argomento.
E' da poco live il primo screencast della serie. L'argomento è come si eseguono ricerche, proiezioni e raggruppamenti con LINQ to Objects. LINQ to objects è una delle implementazioni di linq che preferisco e che ci permettono di ridurre e semplificare la scrittura di codice in molte situazioni.
Buona visione
Per chi mi ha chiesto il materiale delle sessioni del lancio di Visual Studio 2008, potete intanto vedere la registrazione della sessione di Milano, ecco gli argomenti: HTML e CSS Designer, nuovi controlli per ASP.NET 3.5: ListView, DataPager, LINQDataSource, supporto per il JavaScript, ASP.NET AJAX incluso nel runtime di .NET 3.5, nuovo template per creare applicazioni AJAX che accedono a servizi Windows Communication Foundation (WCF), AJAX Control Toolkit per ASP.NET 3.5. Non ho avuto tempo di raccontarvi molto su IIS 7, ma si sa il tempo è tirano.
Potete trovare un riassunto sul sito MSDN delle novità al seguente link: Novità di ASP.NET 3.5 e Visual Studio 2008 per lo sviluppo web (da MSDN in italiano) .
Per vedere la registrazione è necesessario installare il plug-in di Silverlight 1.0 o 2. Se state leggendo questo post da un reader è meglio che apriate direttamente la pagina. Il video è su Silverlight Streaming, uno dei servizi di Windows Live
Sono disponibili tutte le sessioni del tour di Lancio sia traccia MSDN che TechNet. Potete anche scaricare i video in locale. La mia sessione sul web include slide e codice di esempio.
Inoltre è da poco live la prima parte del Tutorial su ASP.NET 3.5. Questo tutorial è pensato per chi per la prima volta si avvicina ad ASP.NET, quindi per chi sta diventando uno sviluppatore web o per chi arriva dallo sviluppo web su altre piattaforme. Nel tutorial che verrà aggiornato nelle prossime settimane verranno mostrate anche le novità di ASP.NET 3.5 che possono essere utili a chi vuole scoprire le novità di Visual Studio 2008 e ASP.NET 3.5 per il web.
Happy coding