free hit counter
April, 2008 - Pietro Brambati Blog - Site Home - MSDN Blogs

Pietro Brambati Blog

Developer's stories

April, 2008

  • Pietro Brambati Blog

    Virual Earth 6.1 & Javascript support in Visual Studio 2008

    • 0 Comments

    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 .

    Come usarle

    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.

    image 

    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.

    image

    Conclusione

    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

  • Pietro Brambati Blog

    Mix Essentials : Windows Live

    • 1 Comments

    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.

    image 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.

    Pietro   Click to IM Pietro

    -p.s.: ora sapete cosa rappresenta quell'immagine di fianco alla mia firma

  • Pietro Brambati Blog

    Virtual Earth 6.1

    • 1 Comments

    Tra le novità annunciate con il rilascio della versione 6.1 di Virtual Earth e del relativo Virtual Earth Map Control, ho voluto provare

    • il nuovo controllo localizzabile in italiano
    • la nuova vista Ibrida a volo d'uccello (Bird's Eye Hybrid )
    • e la possibilità di scegliere un percorso tra due punti specificando se siamo a piedi o in auto ( comodo nel caso di sensi unici )

    Il nuovo Controllo

    Per istanziare una mappa utilizzando il nuovo controllo, basta specificare il codice seguente, in cui potete notare

    • il numero di versione del controllo stesso (6.1)
    • il mercato di riferimento "it-it" per l'italia, che permette di avere un'interfaccia con le scritte in italiano
    • VEMapStyle.BirdseyeHybrid consentendo alla mappa di partire con la nuova modalità e avere una vista a 45 gradi con, impresse sopra la mappa, il nome delle vie e la direzione di percorrenza delle strade

    image

    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.

    image

    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'

    image

    Calcoliamo il percorso tra due punti in macchina e a piedi

    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:

    image

    Il risultato è il seguente in cui si vede che non percorriamo il senso-unico contro mano sulla via Ghiberti.

    image

    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:

    image

    Ed il risultato, che in modo evidente dimostra che stiamo andando contro-mano, ma perchè siamo a piedi!

    image

    Conclusione

    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

  • Pietro Brambati Blog

    LINQ, LINQ to SQL e ADO.NET Entity Framework

    • 3 Comments

    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.

    LINQ to *

    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

    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:

    image

    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.

    image

    LINQ to SQL e Store Procedure - Insert/Update/Delete

    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.

    image

    image

    LINQ to SQL  Store Precedure & TVF

    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:

    image

    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:

    image

    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:

    image

    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

    image 

    ADO.NET Entity Framework (EF) e LINQ to Entities

    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:

    • è stato implementato un nuvo provider EntityClient che si appoggia sul meccanismo a provider di ADO.NET 2.0
    • per "parlare" con EF  esiste un linguaggio  Entity SQL, che è espresso per mezzo di una stringa, ma che mi permette di lavorare con Entità e non con tabelle.
    • LINQ to Entities è una implementazione di LINQ per lavorare con EF (sia lettura, che scrittura)

    image

    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.

    Quando usare LINQ to SQL e quando usare LINQ to Entities ?

    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 ...

  • Pietro Brambati Blog

    Prossima fermata Perugia …

    • 6 Comments

    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 ?

    • Cos'è LINQ ?
    • Come funziona LINQ to SQL ? (Vedremo anche come usare le Store Procedure :-))
    • Che relazione c'è tra LINQ to SQL e LINQ to Entities ? Quando usare l'uno e quando usare l'altro ?
    • Cos'è l' ADO.NET Entity Framework  e che relazione c'è con LINQ to Entities ?

    A presto e ci si vede a Perugia

  • Pietro Brambati Blog

    LINQ su LINQItalia

    • 0 Comments

    image 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

  • Pietro Brambati Blog

    Materiali sessione Web dal 'Lancio' di Visual Studio 2008 e Tutorial su ASP.NET 3.5

    • 3 Comments

    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) .

    Registrazione sessione via Silverlight Streaming

    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

    [Update]

    image

    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.

    Tutorial su ASP.NET 3.5

    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

Page 1 of 1 (7 items)