free hit counter
Pietro Brambati Blog - Site Home - MSDN Blogs

Pietro Brambati Blog

Developer's stories

  • Pietro Brambati Blog

    MSP, Delegate e politica ...

    • 3 Comments

    La sessione che ho fatto agli Students Partner Open Day, in cui ho scritto codice per circa  1 ora e mezzo.... faticoso :-) ha suscitato molto interesse anche per l'uso dei delegate, forse il loro uso non è così noto a tutti

    Mauro ha ripreso l'argomento in un post da non perdere.... cosa c'entra la politica ? ...appunto leggete il post di Mauro sui delegate.

  • Pietro Brambati Blog

    IIS e PHP più vicini ...

    • 1 Comments

    Giusto prima dell' estate mi è capitata l'occasione di parlare al PHP Day ,un evento community dove ho conosciuto molta gente simpatica e con cui scambiare idee.

    Nella sessione che ho presentato, uno degli argomenti  è stato FastCGI, un modulo per IIS 6 (Winsows Server 2003) e il nuovo IIS 7 di Windows Vista e del prossimo Windows Server 2008.

    FastCGI è un progetto che è il risultato dell'accordo fatto tra Microsoft e Zend con lo scopo di far funzionare le applicazioni PHP in modo affidabile, performante sfuttando al meglio la piattaforma Windows.

    E' stata da poco rilasciata la versione di FastCGI per IIS 5.1 e II6 con licenza Go Live, che potete scaricare gratuitamente.

    Perchè FastCGI ?

    Molte delle applicazioni fatte per IIS sfuttano a fondo il modello multi-thread offerto dal IIS stesso. Molte applicazioni, originariamente scritte per Linux, usano un approccio diverso alla concorrenza, creano più processi invece che più thread. Anche se PHP supporta il multi-thread, molte delle estensioni a PHP non sono thread-safe. Questo porta a dover usare CGI come modello per far girare le applicazioni in modo affidabile su Windows, che però comporat un evidente degrado in termini di performance. FastGCI salva "capra e cavoli" consentendo di avere sia performance che affidabilità. Per maggiori dettagli su CGI/ISAPI e FastCGI partite da qui.

  • Pietro Brambati Blog

    Ecco la RC0 di Windows Server 2008

    • 0 Comments

    Sempre più vicini al rilascio definitivo!

    Vi segnalo il post di Renato sul blog TechNet per approfondimenti.

  • Pietro Brambati Blog

    Studenti & Linq

    • 3 Comments

    In questi giorni in Microsoft  si stanno svolgendo gli Students Partner Open Days. Forse il nome dell'evento non è proprio corretto, ma ... in sostanza sono stati invitati gli studenti di diverse università italiane per una serie di giornate di formazione e di divertimento :-)

    Durante l'evento ho fatto la mia sessione su LINQ. Linq rappresenta una serire di estensioni al linguaggio che consento di utilizzare un linguaggio "alla SQL" per interrogare diverse sorgenti dat: Oggetti, XML e per l'accesso al mondo Relazionale.... ok, penso di avervi stressato abbastanza :-) almeno per chi segue il mio blog.

    Ecco la slide più importante del mio intervo in cui ho parlato anche delle novità offerte dal C# 3.0 e Visual Basic 9: Local Type Inference, Object/Constructo Initializer, creazione di properties autogenerate.

    Linq Project

    Qui potete trovare le poche slides usate, la sessione è stata quasi esclusivamente codice ! Spero sia stata apprezzata.

    Ho confezionato una serire di progetti che rappresentano i passi che ho seguito durante la presentazione, più o meno i passi sono stati:

    1) Applicazione tradizionale con .NET 2.0

    image

    In giallo ho evidenziato alcune zone del codice compresso.

    2) Applicazione con LINQ to Object

    image

    3) Applicazione con LINQ to XML

    image

    4) Applicazione con LINQ to DataSet

    image

    5) Applicazione con LINQ to SQL

    image

    6) Visual Basic 9 ed il supporto per l'XML

    image

    Qui trovate i progetti degli esempi di codice. Per farli funzionare dovete scaricare la Beta 2 di Visual Studio 2008 e dovete avere installato il database northwind, installato in una istanza di SQL Server 2005 Express Edition, a meno di cambiare la stringa di connessione :-)

    E ora, ecco a voi gli studenti ...:-)

    Studenti 07 web

     

    Ciao

    -Pietro

  • Pietro Brambati Blog

    Un altro genovese su Channel 9

    • 0 Comments

    Niente da dire ai genovesi, ovviamente :-)

    image

    Vi segnalo la seconda intervista di Vittorio ad Alessandro Catorcini che fa il senior program manager nel common language runtime team.

    Il video è interessante anche per chi sta seguendo Silverlight, ma non solo ....

    Poche parole, gustatevi il video, in italiano ovviamente.

    Buona visione

    -Pietro

  • Pietro Brambati Blog

    Pioggia e ... community

    • 2 Comments

    Oggi mi trovo in Microsoft, ma ad Amsterdam.  Il tempo è veramete pessimo, pioggia a catinelle.

    In questo clima Alessandro mi segnala la nascita di una nuova community DotNetWork.

    image

    Non c'è modo migliore di descrivere cosa sia DotNetWork che dalle parole di uno dei suoi fondatori: Alberto De Luca, leggete il suo manifesto in cui descrive la mission e la vision della community (scusate per le due parole in inglese, ma è una deformazione professionale :-))).

    Non posso che augurare ad Alberto ed ai ragazzi di DotNetWork tanta fortuna per questa nuova avventura e a tutti un invito ad iscrivervi!

    Meno male ... almeno un po' di sole in questa giornata.

    -Pietro

  • Pietro Brambati Blog

    LINQ To SQL - Parte II

    • 3 Comments

    LINQ rappresenta una delle novità più importanti per lo sviluppo nella prossima release di Visual Studio.

    LINQ è una serie di estensioni al linguaggio, sia per C# che VB.NET, che ci permettono di utilizzare degli operatori "alla SQL" per lavorare su diverse sorgenti dati.

    Questa è la quarta parte di una serie di post. Negli altri post ho affrontato i segueti argomenti:

    In questo post continuo l'esplorazione di Linq to SQL. Spero che le altre puntate siano state utili :-). Grazie delle mail :-)

    Nel post precedente trovate tutti i riferimenti passo-passo su come partire a realizzare la prima applicazione con Linq to SQL in una console application. Ho cominciato a mostrare come utilizzare il designer di VS 2008 per effettuare il mappaggio tra le tabelle di un databbase SQL server con le classi della nostra applicazione, quelle che costituiranno l' Obect Model dell'applicazione stessa. Sempre nella prima parte ho mostrato come effettuare operazioni di query usando la sintassi offerta da LINQ.

    Ma se voglio aggiungere un nuovo record nel mio database o modificarne uno esistente come faccio?

    Update

    Se voglio modificare un oggetto e poi fare in modo che questo venga persistito nel database l'operazione è molto semplice: faccio tutte le modifiche del caso e quando voglio persitere lo stato del mio oggetto sul database invoco il metodo SubmitChanges().

    C#

    clip_image002

    VB.NET

    clip_image004

    In figura vedete la query generata per l'esecuzione del codice in C#. Nel precedente post ho raccontato come abilitare il trace degli statements SQL generati da LINQ.

    clip_image006

    Notate che è stata generata una sola query per la selezione del prodotto: SELECT TOP 1 ... questo grazie al Deferred Execution Model con cui LINQ lavora: ho espresso infatti la query LINQ con due blocchi di codice distinti, il primo per selezionare tutti i prodotti di una certa categoria, il secondo per ottenere il primo prodotto in base all'operatore .First().

    La seconda query è quella che forza l'Update del nostro prodotto selezionato e che viene generata da LINQ perchè abbiamo effettuato la chiamata a SubmitChanges(). Guardate come la clausola di update va a selezionare il prodotto che andrà ad oggiornare: LINQ si accorge se ci sono state modifiche fatte da altri prima di lanciare la query. LINQ gestisce quella che viene definata come Optimistic Concurrency: in sostanza l'aggiornamento del nostro prodotto, va a buon fine solo se non sono state apportate modifiche al prodotto stesso da quando lo abbiamo precedentemente letto.

    Insert/Delete

    L'inserimento di un nuovo prodotto segue linee simili.

    clip_image008

    Ho creato una nuova istanza dell' oggetto Product, che rappresenta il prodotto da aggiungere al database. Ho stampato nella console  l'ID del prodotto prima e dopo l'aggiornamento. Se eseguite il codice noterete che dopo la SubmitChanges(), tale valore è cambiato è rappresenta correttamente la chiave che la corrispondente riga ha nella tabella del database.

    Se voglio cancellare un prodotto, in VB.NET posso scrivere:

    clip_image010

    In questo caso ho usato la Remove alla quale dovevo passare un prodotto, quello da cancellare appunto, così dopo aver fatto una query che mi poteva ritornare anche più prodotti ho usato il metodo First per selezionare il primo.

    Con una Lamba Expression ...

    Avrei potuto scrivere la stessa cosa usando una sintassi equivalente:

    clip_image012

    Nel codice precedente vedete che ho indicato l'intenzione di selezionare  un solo prodotto invocando il metodo Single su Products, il codice che ho utilizzato nelle parentesi mi ha permesso di fare la selezione opportuna). L'espressione usata in figura è una lamba Expression, una delle novità di C# 3.0.

    Si può pensare ad una Lamba Expression come ad una modalità offerta dal linguaggio per scrivere del codice in-line. Avrei infatti potuto esprimere lo stesso codice in C# 2.0 in modo più verboso usando un metodo anonimo.

    Ok probabilmente ci sarebbe da fare qualche esempio in più ... in questo articolo trovate meglio descritte le Espressioni Lambda in VB.NET.

    Anche in VB.NET è possibile utilizzare una Lambda Expression, ecco come:

    clip_image014

    Aggiungere un prodotto alla Categoria "Beverages"

    Negli esempi visti in precedenza ho semplicemente aggiunto un prodotto nel nostro database inizializzando alcune proprietà come ad esempio il nome del prodotto stesso. Ok, ma abbiamo visto che un prodotto è in relazione molti-a-1 con la tabella categoria, il prodotto ha infatti un campo CategoryID, che è un intero, e che permette di navigare nel database e trovare la corrispondente riga nella tabella categoria e quindi sapere qual è il nome della categoria stessa ....

    Come faccio quindi ad aggiungere un prodotto in una specifica categoria, di cui conosciamo il nome, come ad esempio "Beverages" ? Linq To SQL ci permette di navigare in modo molto semplice tra gli oggetti della nostra applicazione e quindi selezionata una specifica categoria possiamo facilmente aggiungere un nuovo prodotto .

    Ok troppe parole, ecco il codice:-)))

    clip_image016

    Quello che succede sul database, lo vediamo andando a "spulciare" la query generata :

    clip_image018

    La query mostra la INSERT del nuovo prodotto in cui viene impostato il nome "Nuova Bevanda 2", come volevamo; notiamo , però, che viene anche impostata la categoria, tramite l 'ID della stessa, che nel nostro esempio è 1. La cosa interessante è che nel codice che abbiamo scritto con LINQ non abbiamo impostato l'ID della categoria, ma ne abbiamo usato il nome e così abbiamo aggiunto un nuovo prodotto tra quelli della categoria "Beverages", molto più semplice vero?

    Conclusione

    In questo post abbiamo visto come tramite LINQ to SQL siamo in grado di gestire anche le operazioni di Insert/Update e Delete dei nostri oggetti, a cui LINQ fa corrispondere una query sul database. LINQ non solo ci permette questo, ma per di più semplifica l'interazione con il database semplificandone la navigazione: abbiamo aggiunto un prodotto alla categoria "beverages" senza preoccuparci della relazione tra prodotto e categoria.

    Insieme al post precedente spero di essere riuscito a mostrarvi come sia semplice scrivere uno strato di accesso ai dati usando LINQ to SQL. Il tutto semplificato dall'aiuto offerto dall designer di Visual Studio 2008,  dall' Intellisense e dal fatto che le interrogazioni che facciamo con LINQ sono strong-typed.

    Ma c'è molto altro ... stay tuned!

    Link utili:

    In questo articolo LINQ to SQL viene presentato in modo chiaro e completo.

    LINQ to SQL: .NET Language-Integrated Query for Relational Data (articolo MSDN in inglese)

    Espressioni Lambda in VB.NET.

    Percorso:

    Per chi non ha seguito passo-passo consiglio il seguente percorso con laboratori:

    1. Scaricare la beta 2 di Visual Studio 2008
    2. Laboratori di Linq in C#
    3. Laboratori di Linq in VB.NET

    Ciao e alla prossima.

    -Pietro

  • Pietro Brambati Blog

    UgiMobile ... è nata!

    • 0 Comments

    Michele Locuratolo, MVP in arte Mighell, ci segnala la nascita di UgiMobile, il primo User Group italiano dedicato a Windows Mobile ed tutte le tecnologie mobile targate Microsoft!

    image

    Non aggiungo altro, leggete il post: UgiMobile.org: si parte!!!

  • Pietro Brambati Blog

    Silverlight + Expression Encoder + TechEd

    • 3 Comments

    Il mio ultimo post riguardava un video di presentazione del TechEd, che spero abbiate visto :-)

    Come avrete notato il video è un file WMV, che fa partire il lettore che avete installato sul computer. Mi sono detto, ma perchè non renderlo disponibile in streaming magari facendo un' applicazione con Silverlight ?

    Ecco come

    1) Silverlight Streaming

    Il primo problema che dobbiamo affrontare se vogliamo offrire un nostro video in streaming è avere una piattaforma di streaming :-).

    Tra i servizi di Winows Live, c'è Silverlight Streaming (in alpha), che vi consente di uplodare gratuitamente file video che possono essere consumati in streaming. Attualmente il limite delle applicazioni, vedere dopo cosa intendo, che potete uplodare è di circa 22MB, che a 300Kbs sono circa un filmato di 10 minuti. Nel mio caso il filmato dura pochi secondi e quindi non ho problemi.

    Per poter utilizzare questo servizio occorre per prima cosa avere un account Windows Live ID, account che potete comunque utilizzare per accedere agli altri servizi Windows Live.

    2) Codifichiamo il video con Expression Encoder

    Ora che abbiamo una piattaforma di streaming abbiamo bisogno di effetuare la codifica del nostro file WMV.

    Con il rilascio di Silverlight è stato anche rilasciato Expression Encoder, applicazione che potete scaricare in trial e che vi consente di effetuare diverse operazioni di codifica da formati di ingresso a diversi formati di output adatti alla pubblicazione di filmati in streaming e codificati in formato VC-1 per poter essere letti da un' applicazione Silverlight.

    Quindi dopo aver installato Expression Encoder, ho aperto il mio file WMV dal menù file, Import.., quindi ho scelto il "profilo" che mi interessava ottenere.

    step1 step2

    Nella figura si intravede il profilo scelto che corrisponde alla codifica video di VC-1 a 1.7 Mbps, andando sulla combobox con il cursore viene evidenziata questa e altre informazioni.

    E' ora possibile scegliere uno skin da applicare al video in modo che sia visibile all'interno di un "lettore", con tasti play, stop etc.

    step3

    Per fare questo in figura vedete la sezione Job Output e il template applicato "Blitz", che corrisponde alla preview che vedete in figura. Quest'operazione crea un opportuno file XAML, il linguaggio usato anche in WPF per la creazione dell'interfaccia utente, e dei file Javascript per poter gestire le interazioni con l'applicazione, come la pressione del tasto play etc.

    Premendo il tasto Encode vengono creati nella directory di output i file HTML, Javascript, XAML e WMV, quest'ultimo codificato come abbiamo scelto, necessari per lanciare l'applicazione da un qualsiasi server web, non solo IIS ma anche un server Apache o altri. In questo caso il file verrebbe consumato sfruttando il progressive download.

    3) Creare un'applicazione per Silverlight Streaming

    Possiamo creare un'applicazione per Silverlight Streaming, in modo da non appesantire il nostro server web con il download del file ma scaricando il file in streaming da questo servizio Windows Live.

    Per tutti i dettagli consultare la guida qui, vediamo ora passo passo come fare.

    Dobbiamo creare un file .zip che uploderemo successivamente. Questo file dovrà contenenere un file manifest.xml  fatto in questo modo:

    <SilverlightApp>  
    <version>1.0</version>   
    <loadFunction>StartWithParent</loadFunction>
       <jsOrder>    
    <js>MicrosoftAjax.js</js>     
    <js>BasePlayer.js</js>     
    <js>PlayerStrings.js</js>     
    <js>player.js</js>     
    <js>StartPlayer.js</js>
    </jsOrder>
    </SilverlightApp>

    Quindi i seguenti file che trovate nella directory di output di Media Encoder:

  • player.xaml - Il file XAML che contiene l'applicazione Silverlight
  • *.wmv – Video file(s)
  • *.jpg – Image file(s), thumbnails per la definizione dei capitoli e la preview ( non presenti nel nostro esempio)
  • *.js - tutti i file di script tranne Silverlight.js

    Andiamo ora nel sito di amministrazione di Silverlight Streaming nella sezione dove possiamo fare l'upload di file:

    image

    Una volta fatto l'upload trovate le istruzioni su come inserire in una pagina HTML l'applicazione Silverlight creata, che presenterà il video in streaming. Oltre la modifica ad un file HTML dovete aggiungere nella direcrtoy del vostro sito web anche un file CreateSilverligh.js che instanzia il plug-in silverlight.

    Qui trovate la pagine web funzionante che contiene l'applicazione creata.

    image

    Per completezza riporto il codice da inserire nella pagina HTML:

    Nella sezione Header

    <script type="text/javascript" src="http://agappdom.net/h/silverlight.js"></script>
    <script type="text/javascript" src="CreateSilverlight.js" mce_src="CreateSilverlight.js"></script>

    Nel Body

    <div id="Wrapper_TechEd2007Video" style="width:500px; height:400px; overflow:hidden;"></div>
    <script type="text/javascript">
    var Wrapper_TechEd2007Video = document.getElementById("Wrapper_TechEd2007Video");
    CreateSilverlight();
    </script>

    Creare il file CreateSilverlight.js che contiene

    function CreateSilverlight(){
      Silverlight.createHostedObjectEx({
        source: "streaming:/4031/TechEd2007Video",parentElement: Wrapper_TechEd2007Video});
    }

    Conclusione

    Abbiamo visto come creare un'applicazione Silverlight per visualizzare un video con Expresion Encoder ed abbiamo usato il servizio di Windows Live, Silverlight Streaming per fare lo streaming del video, senza appesantire il nostro server web, dove abbiamo creato invece una semplice pagina HTML e un file Javascript.

    Usando gli ultimi esempi di codice potete inserire nelle vostre pagine il video del TechEd 2007 che vi ho messo a disposizione!

    Per chi di voi è interessato vi consiglio di tenere d'occhio anche il blog di Roberto Cavallini, User Experience Evangelist in Microsoft Italia per aggiornamenti sui prodotti Expression.

    Buon divertimento.

    -Pietro

     

     

  • Pietro Brambati Blog

    Un video carino ...

    • 2 Comments

    Il TechEd è il più importante evento per sviluppatori e per professioni IT. Per chi di voi è interessato vi segnalo questo video, simpatico ed accattivante ...

    image

    L'evento si svolge a Barcellona a Novembre, in due settimane, la prima rivolta agli sviluppatori (TechEd Developers), la seconda ai professioni IT (TechEd IT Forum).

     

    Io sarò presente al TechEd Developer, per chi vuole incontrarmi, possiamo organizzare .... :-))

    Ciao

    -Pietro

  • Pietro Brambati Blog

    LINQ to SQL - Parte I

    • 9 Comments

    LINQ rappresenta una delle novità più importanti per lo sviluppo nella prossima release di Visual Studio.

    LINQ è una serie di estensioni al linguaggio, sia per C# che VB.NET, che ci permettono di utilizzare degli operatori "alla SQL" per lavorare su diverse sorgenti dati.

    Questa è la terza parte di una serie di post. Negli altri post ho affrontato i segueti argomenti:

    Ora vi racconto l'implementazione di Linq più interessante: LINQ to SQL. LINQ to SQL ed il designer di Visual Studio 2008 sono pensati per reallizzare applicazioni che usano SQL Server come database. Il designer genera molto del codice che fare a mano sarebbe tedioso, ma al contempo ci lascia la possibilità di intervenire con soluzioni più mirate, dandoci la possibilità di cambiare o estendere il codice generato.

    LINQ to SQL

    Linq to SQL vi permette di utilizzare la sintassi vista in precedenza per interrogare SQL Server, la query espressa verrà poi convertita in una chiamata ADO.NET. Visual Studio 2008 mette a disposizione nell' IDE  un designer che ci aiuta, a partire da un database SQL Server esistente, a mappare le tabelle alle classi che useremo nella nostra applicazione.

    Configuriamo Northwind

    Negli esempi seguenti userò come database  il famosissimo Northwind, che potete scaricare qui.  Come DBMS ho usato SQL Server 2005 Express Edition SP2, che potete scaricare gratuitamente; allo stesso link potete trovare anche la SQL Server Management Studio Express, l'applicazione client per l'amminstrazione.

    Aggiungiamo il database Northwind alla lista di quelli gestiti da SQL Server Express. Apriamo la console di SQL Server Management Studio Express.

    image

    Tasto destro su Databases, quindi Attach, appare la schermata sopra in figura, dove possiamo aggiungere il file Northwnd.MDF: premere il tasto Add ... e quindi scegliere la directory in cui è copiato il file.

    Alla fine il nostro database verrà aggiunto alla lista di quelli gestiti. Chiudiamo il Management Studio.

    Creiamo l'applicazione di test con Visual Studio 2008 ed usiamo il designer

    Creiamo ora una console application con Visual Studio 2008, in VB.NET o in C#.  Aggiungiamo alla lista delle connessioni in Visual Studio quella al database Northwind che verrà visualizzata nel Server Explorer (per visualizzarlo View -> Server Explorer). Quindi premendo il bottone "connect to database" possiamo visualizzare direttamente da Visual Studio il nostro database e avere accesso agli elementi che lo costituiscono: tabelle, store procedues, viste etc.

    image

    Per accedere al Designer che ci consente di effettuare il mappaggio delle tabelle alle classi aggiungiamo un nuovo item, tra la lista dei templates troviamo LINQ to SQL Classes come mostrato in figura.

    linq2_thumb[4]

    Una volta rinominato il file in Northwnd.dbml e aggiunto al progetto, l' IDE di VS 2008 ci dà la possibilità di fare il drag-and-drop delle tabelle del database al fine di costruire le classi ad esse associate. Così in figura ho fatto il drag-and-drop delle tabelle Products, Categories, Orders, Customers che hanno generato le relative classi Product, Category, Order e Customer.

    image

    Se diamo un'occhiata ai file del nostro progetto vedrete che sono stati aggiunti tre file, se aprite il file Northwind.designer.cs potete notare che cosa ha creato il designer di Visual Studio.

    Vi faccio notare che è stata generata una classe NorthwindDataContext che deriva dalla classe DataContex. Come vedrete a breve la query che faremo sul database sarà sullo stile di quelle viste con Linq To XML e Linq to Objects. La classe DataContext ha la funzione di "mascherare" la connessione verso il database e di rendere possibili le operazioni di aggiornamento verso il database. Ogni tabella del nostro database sarà accedibile come proprietà pubblica di questa classe e sarà, a sua volta, una classe di tipo Table. Ad esempio ci sarà la possibilità di accedere alla classe Products che è di tipo Table<Product>. La classe Product viene descritta nel prossimo paragrafo. In breve quindi la classe DataContext è l'entry point per poter utilizzare Linq To SQL.

    Come funziona il mapping del designer tra il database e le classi ?

    Sempre all'interno del file generato trovate una serie di attributi che specificano il mappaggio con il database, le tabelle e le classi.  La classe NorthwindDataContext viene mappato sul database Northwind. 

    image

    La classe Product viene  mappata sulla tabella Products.

    image

    All'interno della classe Product la proprietà ProductID viene mappata sulla corrispondente colonna della tabella del db e vengono inoltre indicate altre caratteristiche: ad esempio che è un chiave primaria ed il tipo che la rappresenta nello schema del db. L'attributo AutoSync stabilisce che relazione di sincronizzazione ci deve essere tra la proprietà dell'oggetto e la row del db. Nel nostro caso la proprietà dell'oggetto viene valorizzato quando un prodotto viene effettivamente inserito nel database, notate che sul database la colonna è una IDENTITY. Qui il dettaglio sull'attributo Column.

    image

    Il mappaggio che abbiamo visto si basa sul fatto che le classi della nostra applicazione ad esempio Products, che useremo con LINQ, sono mappate tramite una serie di attributi al nostro database. Questa non è l'unica soluzione adottabile: è infatti possibile disaccopiare la classe dall'attributo che la mappa sul database e usare un file XML per effettuare tale mappaggio, ma questo sarà un argomento di un altro post ...Per chi vuole subito informazioni su come costruire il proprio modello ad oggetti con Linq To SQL, segua il link.

    Una semplice query ...

    Vogliamo ora ottenere il nome dei prodotti della categoria "Beverages", scriviamo quindi:

    C#:

    image

    Cosa c'è da notare?:

    Ho aggiunto il namespace a System.Data.Linq; per utilizzare le estensioni al linguaggio per Linq To SQL

    Notatate che p è di tipo Products, cioè una classe con un tipo ben preciso, quello che abbiamo visto nei paragrafi sul mappaggio, inoltre da p posso accedere non solo alla proprietà Category, ma anche al nome della categoria stessa! Se andiamo a vedere la tabella Products sul database ci accorgiamo che contiene solo la colonna CategoryID che in relazione con la chiave primaria della tabella Categories. E' proprio in questa tabella che si trova la colonna CategoryName.

    image

    L'output dell'applicazione è il seguente: la lista dei prodotti della categoria cercata:

    image

    in VB.NET:

    image

    la cui logica è equivalente a quella vista in precedenza.

    Che codice SQL viene generato e quando ?

    Penso di prevedere una vostra domanda, anzi due.

    Per vedere il codice generato, inseriamo la seguente riga di codice e rieseguiamo l'applicazione:

    image

    Come vediamo ora nella console application viene mostrato il codice SQL che viene eseguito in SQL Server:

    image

    Come vedete viene eseguita una prima chiamata SELECT in LEFT OUTER JOIN tra la tabella Products e la tabella Categories, questo perchè è solo in quest'ultima tabella che troviamo il nome della categoria. Ricordate quanto è stato semplice con Linq scrivere p.Category.CategoryName, senza preoccuparci del Join tra le tabelle. Il modello ad oggetti offerto forniva già la possibilità di navigare in relazioni 1 a molti. La seconda query è stata generata perchè abbiamo voluto avere il nome della categoria nel ciclo for each. Operazione che certamente potevamo evitare, almeno in questo semplice esempio.  

    Quando viene eseguita la query sul database? Se mettiamo un break-point (F9) sul cliclo foreach nell'esempio di codice, potremmo essere sorpresi di una cosa. Se guardiamo infatti la console application non vediamo ancora visualizzato il codice di esecuzione su SQL. Questo perchè non è ancora stato eseguito! Infatti nostante ci potremmo aspettare che il codice Linq viene immediatamente tradotto in codice SQL standard, non è così. Premiamo F10 un po' divolte e ci accorgiamo che il codice viene eseguito quando serve, cioè durante l'enumerazione del ciclo. Linq utilizza un modello di esecuzione differtita (deferred execution). Questo perchè LINQ analizza le operazioni che fino a quel momento sono state eseguite prima di comporre la query. In certi scenari questo comportamento è sicuramente desiderabile, in altri sarebbe desiderabile l'opposto. E quindi possibile eseguire la query una volta e riutilizzarla successivamente. Per fare questo è sufficiente convertire il risultato della query in una collezione standard usando gli operatori ToList() o ToArray().

    In breve ...

    In questo primo post abbiamo visto come, in pochi semplici passi, possiamo trarre beneficio da Linq to SQL e dal O/R (Object Relational) Designer di VS 2008. L'uso di quest'ultimo è sicuramente di aiuto nello sviluppo di applicazioni RAD e in alcuni scenari non riechiede di scrivere codice ulteriore a quello già generato. Tuttavia nei prossimi post vedremo come personalizzare il codice gerato per adattarlo agli scenari di altri tipi di applicazioni.

    Linq to SQL ci consente di accedere ai dati in modo diverso da quello fatto tradizionalmente con ADO.NET, realizzando uno strato di software per l'accesso ai dati, che ci consente di mappare uno a uno classi e tabelle di un database SQL e di lavorare a livello applicativo concentrandoci solo sugli oggetti senza preoccuparci troppo della struttura del nostro database SQL Server.

    Nelle prossime "puntate":

    Nei prossimi post vedremo come fare operazioni di scrittura sul database e come estendere e modificare il codice generato in automatico.

    Link utili:

    In questo articolo LINQ to SQL viene presentato in modo chiaro e completo.

    LINQ to SQL: .NET Language-Integrated Query for Relational Data (articolo MSDN in inglese)

    Percorso:

    Per chi non ha seguito passo-passo consiglio il seguente percorso con laboratori:

    1. Scaricare la beta 2 di Visual Studio 2008
    2. Laboratori di Linq in C#
    3. Laboratori di Linq in VB.NET

    Ciao e alla prossima.

    -Pietro

  • Pietro Brambati Blog

    OBA ?

    • 1 Comments

    OBA è una sigla che sta per Office Business Applications. Non è mai facile spiegare in poco tempo cosa sta dietro questo acronimo, non è neppure facile spiegare quali sono gli scenari applicativi di riferimento e che architettura troviamo dietro ad un' applicazione OBA.

    Ho deciso allora di intervistare il collega Giuseppe Guerrasio, che lavora come Architect in Microsoft Italia e che è la persona che meglio mi ha aiutato a capire cosa ci sia dietro.

    Non ci credete ?

    Guardate il filmato di seguito e fatemi sapere .... dura circa 20 minuti; sì lo so è un po' lungo e le riprese non sono perfette (ok non sono proprio un buon cameraman :-). Nota per il futuro: mi devo ricordare un pennarello che scriva meglio sulla lavagna.

    Scherzi a parte, vi garantisco, che saranno 20 minuti del vostro tempo ben spesi.

    image

    Vi rimando al blog di "Gius" per avere link interessanti per approfondire l'argomento.

    Dopo aver visto il video:

    1. Leggete il post di Giuseppe
    2. Leggete anche il post di Mario Fontana sull'argomento. Mario lavora con Giuseppe come Architect in Microsoft Italia e con la sua esperienza vi può far capire le problematiche delle applicazioni odierne e come architetture moderne come SOA e pattern applicativi come OBA possono risolverli. 

    Ciao

    -Pietro

  • Pietro Brambati Blog

    Rilasciato Silverlight 1.0 e annunciato il supporto per Linux

    • 0 Comments

    Silverlight è un plug-in cross browser, cross-platform  per lo sviluppo di applicazioni web interattive ad elevato contenuto multimediale.

    E' stato da pochissimo rilasciata la versione 1.0, che potete scaricare qui.

    Qualche info tecnica:

    • Supporto integrato per diversi codec, come WMV, WMP, MP3 e soparttuto per il VC-1, per video e audio ad alta qualità e risoluzione.
    • Progressive download da qualsiasi server web (anche Apache su Linux).
    • Supporto opzionale per server di streaming.
    • Supporto per JavaScript come linguaggio per interagire con codice XAML e HTML

    Per saperne di più, leggete il post di ScottGu.

    Tra le novità c'è anche l'annuncio della partnership con Novell, che ha lo scopo di fornire un'implementazione di Silverlight per Linux. Moonlight è il nome in codice del runtime che girerà in tutte le versioni di Linux con browser FireFox, Konqueror e Opera.

    La mia applicazione Silverlight preferita ?

    image

    ...

    Per iniziare a sviluppare con Silverlight.

    Potete usare un qualsiasi editor di testo per svilupapre per Silverlight.  Se usate VS 2008 o Visual Web Developer Express 2008 edition, potete scaricare questa library per avere l'intellisense per il JavaScript per Silverlight 1.0.  Se usate anche la versione di Silverlight 1.1 Alpha, potete scaricare Silverlight Tools per VS 2008 Alpha e Expression Blend Preview.

    E' stata anche rilasciato l' Expression Encoder 1.0 . L' Expression Encoder è parte di Microsoft Expression suite e consente di codificare e pubblicare contenuti multimediali con Silverlight.  Potete importare file multimediali da diversi formati (QuickTime, WMV, AVI etc), aggiungere animazioni sopra il video e ottimizare il video codificato come output per le applicazioni web con Silverlight.

    Ciao

    -Pietro

  • Pietro Brambati Blog

    Parliamo di LINQ - parte 2

    • 3 Comments

    LINQ rappresenta una delle novità più importanti per lo sviluppo nella prossima release di Visual Studio.

    LINQ è una serie di estensioni al linguaggio, sia per C# che VB.NET, che ci permettono di utilizzare una serie di operatori "alla SQL" per lavorare su diverse sorgenti dati.

    Nel primo post di questa serie ho parlato di LINQ to Objects. Vediamo ora un' introduzione a LINQ to XML con C# e VB.NET.

     

    LINQ to XML

    Linq to XML è l'implementazione delle estensioni al linguaggio che consentono di lavorare con l'XML. Con Linq to XML possiamo creare strutture e documenti in XML in memoria e utilizzare una sintassi per l'interrogazione e la modifica delle stesse.

    Creiamo un file XML

    Creiamo una console application con Visual Studio 2008 beta 2 ed aggiungiamo il seguente namespace using System.Xml.Linq; quindi scriviamo il codice in figura:

    C#:

    image

    Mi sembra abbastanza chiaro cosa si vuole ottenere, notate l'uso delle nuove API XDocument, XDeclaretion, XElement e XAttribute. L'uso è abbastanza intuitivo.

    La stessa operazione può essere fatta anche in VB.NET, ma con una sintassi diversa che ne rende ancora più semplice l'uso.

    VB.NET:

    image

    Questa sintassi è particolare ed è unica in VB.NET, non è ammessa in C# e consente di definre in-line un frammento di XML. In VB.NET avrei potuto anche usare la sintassi equivalente a quella usata in C#, come ad esempio

    image

    Il risultato sarà comunque lo stesso: in tutti i casi un file XML che contiene:

    image

    Query sul file

    Ok, ora possiamo usare Linq per fare delle query sul file:

    C#:

    image

    Dopo aver caricato il file in un XDocument, prendiamo i nodi che sono al di sotto del tag <Clienti>, quindi i vari <Cliente>. Utilizziamo i due nodi di <nome> e <cognome> per creare un nuovo tipo, anonimo,  che contiene il valore dei due nodi dell' XML.

    Così otteniamo, avendo inserito un altro cliente nel file:

    image

    Potremmo anche utilizzare altri operatori Linq come "where" per filtrare ulteriormente la query, come ad esempio:

    image

    con cui otteniamo il cliente con attributo id uguale a C02.

    VB.NET

    Con VB.NET possiamo scrivere:

    image

    Anche in questo caso ho usato una sintassi che contiene dell XML in-line nel codice, ma avrei potuto scrivere in modo equivalente alla sintassi usata in C#:

    image

    Ora che abbiamo visto come eseguire una semplice query usando LINQ, vediamo come a partire dal risultato ottenuto possiamo creare un un nuvo file XML, con una struttura diversa.

    Supponiamo che il nostro cliente, sia diventato impiegato della nostra azienda:-) Ok, non proprio uno scenario comune, ma ci interessa solo per poter usare la query fatta in precedenza per creare un nuovo file XML con struttura diversa.

    C#:

    image

    Nell'esempio in verde vedete evidenziate le API, che abbiamo usato in precedenza per creare un file, che in questo caso usano dei valori che arrivano da una query fatta con Linq, in giallo.

    VB.NET

    In VB usiamo ancora una volta la sintassi in-line per creare il nuovo XML e usiamo una query Linq per inserire i valori.

    image

    Il nuovo XML può essere ovviamente salvato come fatto in precedenza, ma in questo caso ci limitiamo a vederne il risulato in una console appllication:

    image

    Concludendo

    In questo secondo post su Linq abbiamo visto come utilizzare delle nuove API (X*) per creare strutture XML e come poterle poi agevolmente salvare in un file. Linq ci ha aiutato ad interrogare le strutture XML in modo semplice ed intuitivo, per chi ha un po' di familiarità con il linguaggio SQL. Queste due caratteristiche le abbiamo poi combinate per realizzare una nuova struttura in XML i cui valori sono stati presi da una query Linq fatta sul altri dati.

    Infine abbiamo visto come programmare sia in C# e in VB.NET e ho mostrato come struttare le novità in VB per poter interagire con XML in-line nell'editor di Visual Studio 2008.

    Se mi avete seguito passo-passo, con una versione di Visual Studio 2008 beta 2, vi sarete accorti che la scrittura del codice è stata facilitata dall' IntelliSense. Questo anche in virtù del fatto che il codice scritto e completamente Strong-Typed, come ho già fatto notare nel post precedente, e le keywork var e Dim usate permettono al compilatore di inferire il tipo della varibile dichiarata.

    Per chi non ha seguito passo-passo consiglio il seguente percorso con laboratori:

    1. Scaricare la beta 2 di Visual Studio 2008
    2. Laboratori di Linq in C#
    3. Laboratori di Linq in VB.NET

     

    Ciao e alla prossima.

    -Pietro

  • Pietro Brambati Blog

    Parliamo di LINQ ...

    • 7 Comments

    Dopo il rilascio della beta 2 di Visual Studio 2008, penso sia giunta l'ora di cominciare a parlare di LINQ anche nel mio blog  e quindi inauguro una nuova categoria.

    LINQ (language integrated query) rappresenta una delle novità più importanti introdotte con il .NET Framework 3.5. In poche parole rappresenta un nuovo modello di programmazione con cui possiamo usare una sintassi "alla SQL", per intenderci, direttamente da C# o da VB.NET. Questa nuova sintassi non si applica solo per interrogazioni eseguite su database relazionali, ma anche alle collezioni di oggetti e all' XML.

    Pensando a VS 2008 è interessante approfondire almeno le seguenti implementazioni di questo modello di programmazione:

    • LINQ to Objects
    • LINQ to XML
    • LINQ to SQL
    • LINQ to DataSet

    LINQ si basa su delle estensioni al linguaggio che rendono possibile implementare lo stesso approccio di programmazione anche verso altre sorgenti dati.

    Vediamo qualche semplice esempio con VS 2008 per capire meglio, partiamo da LINQ to Objects, nei prossimi post mi occuperò delle altre implementazioni. LINQ to SQL ed il supporto offerto da VS 2008 in particolare è sicuramente una degli aspetti più intersessanti e di maggior utilità in molte applicazioni.

    LINQ to Objects

    Creiamo una semplice console application in C# 3.0. Notiamo come prima cosa la presenza di un nuovo namespace System.Linq. Creiamo una semplice array di stringe e poi usiamo LINQ per effettuare un'operazione di filtraggio

    linq1

    Da queste poche righe notiamo alcune cose importanti: abbiamo utilizzato LINQ per filtrare un array di stringhe, nell'esempio è molto chiaro cosa vogliamo ottenere e la sintassi che usiamo assomiglia molto a quella che avremmo usato per fare una query su un database. Nel codice f è una stringa e anche l'IDE di VS lo riconosce come tale.

    linq5

    Notate che f ha il metodo StartWith, normalmente presente per le stringhe e nella figura anch VS la riconosce con l'IntelliSense.

    Una nuova keyword "var" appare nel codice in C#. Grazie all'uso di var il compilatore stabilisce il tipo della variabile a partire dalla sua dichiarazione. Quindi la variabile nell'esempio è una stringa. Allo stesso modo scrivendo "var i = 1; var b = true;" il compilatore è in grado di inferire che la variabile i è un intero e che b è di tipo boolean.

    L'output del nostro programma è quello che ci aspettiamo la variabile fruttiPreferiti contiene le due stringhe che iniziano con la lettera "m", cioè mela e mandarino.

    Avremmo potuto utilizzare non solo stringhe ma anche dei tipi custom, come ad esempio una lista di clienti e effetuare altre operazioni utilizzando altri operatori standard di LINQ, si veda ad esempio il seguente codice:

    linq4

    Nell'esempio di codice sopra riportato si vuole ottenenere la lista dei clienti odinati in modo discendente di sola nazionalità italiana.

    Notiamo alcune cose interessanti: nella classe cliente le proprietà sono dichiarate con una sintassi semplificata. Anche questa è una delle novità introdotta dal C# 3.0. Comoda vero?

    Nella creazione della lista clienti i nuovi clienti sono creati e allo stesso tempo sono inizializzate le proprietà Nome e Nazione. Questo nuovo costrutto del linguaggio viene chiamato Object Initializer. Notate che la classe Cliente, non ha costruttori a cui passare i due parametri per inizializzare le proprietà. 

    Infine ho utilizzato due nuovi operatori orderby e descending, il cui significato mi sembra scontato.  Alla fine ecco l'output della nostra applicazione:

    image

     Usiamo VB.NET

    Fino ad ora abbiamo scritto il codice utilizzando C# ed in particolare il C# 3.0 con alcune delle nuove estensioni al linguaggio, come la keywork var, la generazione automatica delle proprietà e l'Object Initializer. Tuttavia anche VB.NET mette a disposizione le stesse estensione e altre nel nuovo VB.NET 9.0.

    Ecco un esempio:

    image

    Da notare:

    La classe Person non ha costruttori. Abbiamo creato una lista di people ed abbiamo usato anche in questo caso l'Object Initializer per creare istanze delle classe e inizializzare le relative proprietà, notate l'uso delle parentesi graffe.

    Anche in questo caso il compilatore è in grado di inferire il tipo diteeagers e di teen usato nel ciclo For Each.

    Ecco infinre l'output:

    image

    Da dove partire ...

    Spero di avere stimolato la curiosità di chi si avvicina per la prima volta a LINQ. Per chi vuole cominciare a fare qualche prova consiglio questo percorso:

    1. Scaricare la beta 2 di Visual Studio 2008
    2. Laboratori di Linq in C#
    3. Laboratori di Linq in VB.NET

     

    Qualche link utile

    The LINQ Project

    Esempi VS08 Beta 2, anche HOL (laboratori) su LINQ

    C# 3.0 Language Specification

     

    Interessante vero? Ai prossimi post su LINQ.

    -Pietro

  • Pietro Brambati Blog

    Live ID e CardSpace insieme

    • 0 Comments

    Da poco avete la possibilità di effettuare la login a Live ID usando CardSpace invece di utilizzare la tradizionale password e quindi di accedere, usando CardSpace, ad i siti che supportano Live ID come meccanismo di autenticazione. Provalo qui.

    Windows CardSpace è una tecnolgia introdotta con il .NET Framework 3.0 che vi permette di autenticarvi ad un sito o ad un servizio passando una "Card" invece di utilizzare il tradizionale meccanismo di username e password. Quando un utente vuole autenticarsi ad un sito o ad un servizio, CardSpace mostra una UI con una lista di Card tra cui può scegliere quella da utilizzare per loggarsi. Un meccanismo di scelta simile a quello che abitualmente facciamo quando estraiamo dal portafoglio uno dei documenti di identità o una delle carte di credito. La Card di CardSpace non contiene però i dati dell'utente, ma un rifermento ad un Identity Provider che la ha emessa.

    CardSpace una implementazione Microsoft di quello che viene chiamato Identity Selector. L' architettura di CardSpace poggia su standard aperti e un Identity Selector può quindi essere implementata su altre piattaforme.

    Community Site di CardSpace

    Introducing Windows CardSpace (in inglese)

  • Pietro Brambati Blog

    Tafiti

    • 0 Comments

    Tafiti, che significa "Cercare" in Swahili, rappresenta un interessante progetto di un'applicazione per aiutare nelle ricerche sul web. 

    image

    E' interessante notare quali tecnologie sono state impiegate:

    Nella sezione FAQ ne trovate le caratteristiche ed un video.

  • Pietro Brambati Blog

    Office 2007 come piattaforma applicativa

    • 2 Comments

    Non sono solito parlare di sviluppo con Office nel mio blog, ma per chi di voi è interessato all'argomento vi segnalo una serie di post fatti da Dario Airoldi, collega in Microsoft con cui ho avuto il piacere di lavorare su numerosi progetti in ambito enterprise.

    Office Platform: tutte le versioni di Office sono uguali? - Part 1

    Office Platform: tutte le versioni di Office sono uguali? - Part 2

    Office Platform: tutte le versioni di Office sono uguali? - Part 3

    Office System 2007 è oggi una piattaforma applicativa completa: nel primo post potete scoprire quali novità per lo svilluppatore ci sono dal punto di vista dello sviluppo lato client. Negli argomenti trattati in questa prima parte: la nuova user interface, il nuovo formato dei file, il nuovo modello degli Add-in ed in fine i Ribbon. Una novità di iteresse per chi si sta interessando al nuovo Visual Studio 2008 è il designer integrato per i Ribbon, nell' l'immagine successiva giusto per avere un'idea.

    Ma lo sviluppo di applicazioni con Office non si ferma alla sola parte client. Nel secondo e terzo post trovate le novità relative alla parte server.

    In particolare nel secondo trovate informazioni su Windows Sharepoint Services (WSS) v3, basato su ASP.NET 2.0 e che come sviluppatori vi consente di sfruttare le competenze già acquisite e utilizzare meccanismi già noti, come ad esempio le Master Page per la personalizzazione.

    Nel terzo post Dario introduce a Microsoft Office System Server 2007 (MOSS 2007), la componente server che si "appoggia" su WSSv3 e offre numerosi servizi intersanti in ambito aziendale. Nella slide seguente è meglio espresso questo concetto e sono elencati le aree ed i relativi servizi offerti da MOSS 2007.

    Interessante anche la lista di link forniti che saranno sicuramente utili per approfondimenti dei vari argomenti.

    In sostanza potete trovare questo post un utile punto di partenza per conoscere meglio Office System 2007 e seguire qualche link per approfondimenti.

    Buona lettura.

    -Pietro

  • Pietro Brambati Blog

    Silverlight 1.0 RC1

    • 0 Comments

    Ok, per chi di voi se la fosse persa, dopo la beta 2 di VS 2008, potete scaricare anche la RC1 di Silverlight 1.0.  Avevo già messo in evidenza alcune delle differenze delle Beta con la RC in un precedente post: la versione RC1 non è 100% compatibile con la precende.

    Vi consiglio di andare direttamente alla pagina Get Started per avere i link a tutto quello che serve per sviluppare con Silverlight 1.0 RC1. Vi consiglio almeno:

    Per l'installazione della RC non c'è bisogno di disinstallare la beta precedente. Seguite direttamente il link del runtime.

    Oltre la RC1 della verisione 1.0 è stata anche rilasciata una versione di refresh della 1.1, attualmente in alpha. Come sapete la 1.0 supporta come linguaggio di programmazione il Javascript, mentre la 1.1 offre un modello di programmazione più evoluto baso sul .NET Framework (una versione ridotta che gira interamente nel browser). Se non consocete bene la differenza delle due versioni, che sono in sostanza versioni parallele leggete qui per chiarezza .

    Se siete interssati alla nuova XBOX 360 ELITE, guardate qui... ma prima scaricate Silverlight 1.0 RC1.

    image

    Ciao

    -Pietro

  • Pietro Brambati Blog

    Visual Studio 2008 e .NET Framework 3.5 Beta 2

    • 2 Comments

    Da poco è stata rilasciata la Beta 2 di VS 2008 e di .NET 3.5. A questo link potete scaricare la versione che preferite (Professional, Team System o la Express ) oppure una virtual machine.

    Molte le novità, tra cui:

    • supporto per la scelta del .NET Framework da utilizzare nei progetti : 2.0, 3.0 o 3.5
    • il designer per le applicazioni web permette ora di avere split-view, master-page nidificate, un editor dei CSS che consente facilmente di rendersi conto dello stile applicato al documento
    • ASP.NET AJAX integrato, supporto per l'intellisense ed il debugging per il JavaScript, nuovi controlli: come l' <asp:ListView> che consente di avere pieno controllo sul codice di markup generato
    • LINQ (Language Integrated Query) un nuovo modello di programmazione che consente di usare una sintassi alla SQL per operazioni su oggetti, XML e db relazionali. Supporto dell' IDE per mappare il nostro database verso gli oggetti che utilizziamo nelle applicazioni
    • Integrazione di un designer per WPF, supporto migliorato per lo sviluppo con Office, le novità dell' IDE per lo sviluppo mobile etc, etc.

    Qui trovate una piccola video demo in italiano:

    Visual Studio 2008 demo

     

    Insomma per chi sta andando in ferie, può essere una buona occasione per fare qualche prova :-)

    Con questo vi saluto per un po', perchè anch'io andrò a breve a godermi un po' di riposo. Al rientro non mancherà occasione di fare approfondimenti su VS 2008 e .NET 3.5.

    -Pietro

  • Pietro Brambati Blog

    Open Source at Microsoft

    • 0 Comments

    e-mailbackground.gif

    E' da poco live sul sito Microsoft un portale dedicato alle iniziative in ambito Open Source. Un punto di ingresso ai diversi progetti che già da tempo sono attivi e che sicuramente fanno bene in quelle realtà complesse, come spesso accade, in cui si trova sia software Open Source che Software commerciale.

    In particolare, il nuovo sito includerà risorse specifiche per categorie di audience, come ad esempio gli IT Pro, gli sviluppatori, gli enti governativi, le università e gli studenti, illustrando i filoni principali nei quali si articola l’approccio di Microsoft:

    • collaborare per Costruire Ponti (ok la traduzione italiana non è il massimo) tra Microsoft e le tecnologie open source che aiutino a raggiungere i propri scopi. Qui si parla ad esempio dell' accordo fatto con Zend.
    • creare Opportunità Economiche per fare business con il software, a prescindere dal metodo di sviluppo
    • fornire opportunità per Community, Creatività e Apprendimento per aiutare a costruire competenze ed innovare
    • supportare un Mondo di Scelta nel quale gli attori di mercato possano fare le proprie scelte.

    Il sito andrà in questo modo ad affiancarsi a Port 25, il sito web del Microsoft Open Source Software Lab.  Port 25 continuerà dunque ad essere la fonte di informazioni tecniche e dialogo con la comunità tecnica OSS. 

    Ad esempio  nella sezione Community, Creatività e Apprendimento si parla del ciclo di sviluppo utilizzato per realizzare l' AJAX Control Toolkit, il cui sviluppo è iniziato in casa Microsoft e dipente in modo sostanziale dai feedback ricevuti dalla community. Leggete se siete interessati il case study, in inglese. In questa sezione trovate riferimento anche ai programmi di Shared Source come il Windows Academic Program pensato per il mondo universitario e di cui ho recentemente parlato in un mio post.

    La sezione FAQ è molto interessante e risponde ad alcune domande che i più si staranno ponendo...

    Ciao, Pietro

  • Pietro Brambati Blog

    Windows Academic Program .... il kernel di Windows

    • 8 Comments

    Ciao, ho già fatto un post sull'argomento, ma in occasione dell' estate io e Mauro, new entry nel team, abbiamo deciso di parlarne più diffusamente.

    WAP è un programma per le università pensato per l'insegnamento del kernel di Windows nei corsi di sistemi operativi.  Si compone di tre parti:

    • Curriculum Resource Kit (CRK): slide per tenere un corso di sistemi operativi. Le slide sono divise in moduli, in modo da poter essere utilizzate anche solo in parte. Ci sono anche laboratori, quiz etc.
    • Windows Research Kernel (WRK): i sorgenti del kernel di Windows 2003 SP1 (x86,x64) e Windows XP(x64), con un ambiente di build per la compilazione e le istruzioni per l'installazione su una virtual machine con Virtual PC.  Scusate ... nel video ho sbaglio il nome del WRK .... ho proprio bisogno di ferie.
    • Project OZ: un semplice sistema operativo per fare esperimenti ...

    Nel video potete saperne di più... e vedere la compilazione del kernel di Windows incluso nel WRK!

    Video: Windows Academic Program

    Per i docenti è inoltre da poco attivo un sito web a loro dedicato: il Faculty Connection, dove possono recuperare materiale didattico sulle tecnologie Microsoft, compreso il WAP.

    Scusate per la scarsa qualità audio/video del filmato, ah... per la cronaca ... io sono quello con la maglietta nera Imagine Cup :-)

    -Pietro

  • Pietro Brambati Blog

    Windows Communication Foundation (WCF) ... qualche web-pillola

    • 5 Comments

    Sì, spero di fare cosa gradita iniziando una serire di "web-pillole" su quest' argomento. Nel post trovate riferimenti alle pagine della documentazione ufficiale, dove trovare approfondimenti. Iniziamo con la prima e fatemi sapere se volete che ne scriva altre sull'argomento. 

    Windows Communication Foundation, WCF per gli amici, è una delle novità introdotte da .NET Framework 3.0, rilasciato con Windows Vista. Come penso sapete le altre componenti del .NET Framework 3.0 sono Windows Presentation Foundation (WPF), Windows Workflow Foundation (WF) e Windows CardSpace (WCS). Il runtime del .NET Framework 3.0 è anche disponibile per Windows XP SP2 e Windows 2003 SP1 .

    Quindi in estrema sintesi .NET 3.0 = WCF + WF + WPF + WCS. Se volete qualche informazione in più potete scaricare qualcuna delle mie vecchie presentazioni qui.

    WCF è nato con almeno i seguenti obiettivi:

    Soffermiamoci sull'ultimo punto: fino a prima di WCF, eravamo abituati a usare diversi modi di programmare, per modi intendo API e modelli di programmazione: diverso è se dobbiamo creare un'applicazione che usa .NET Remoting, Web Services, Enterprice Services, COM+ o MSMQ; questo per diverse ragioni: basti pensare che molte di queste tecnologie sono nate in momenti storici diversi. Con WCF possiamo usare un unico modello di programmazione quello di WCF e utilizzare tutti i paradigmi di programmazione prima menzionati. Tanto per fare un esempio pensiamo di scrivere con WCF un servizio, che implementa semplici funzionalità di somma, sottrazione etc. Vedremo meglio tra breve, cosa si intende per servizio, e di "esporlo" come un Web Service via http. La cosa interessante di WCF e del suo modello di programmazione e che fatto tale servizio, cambiando semplicemente i file di configurazione del client e del server, potremmo ad esempio esporre il nostro servizio,via HTTP come Web Service, ma anche via TCP/IP. In uno scenario in cui vogliamo usare i Web Service per offrire interoperabilità tra piattaforme diverse, magari esterne alla nostra azienda, e offrire al tempo stesso maggiori performance ai client che sono interni al nostro dominio aziendale WCF è sicuramente di aiuto. Con WCF il nostro servizio, sarà implementato una volta, ma il "contenitore" del servizio, lo esporrà usando due distinti trasporti. Attenzione ho detto contenitore, non ho parlato solo di IIS, ma ritornerò presto su questo.

    Quindi usiamo WCF per realizzare applicazioni distribuite, usando un paradigma di programmazione serviced-oriented.

    Ok, capito questo, vediamo come addentrarci in WCF, introducendo i concetti di EndPoint, Address, Binding e Contract. Farò riferimento, anche in seguito, agli esempi che trovate nell' SDK di Windows, che sono scaricabili anche separatamente come samples per WCF e WCS qui.

    In generale abbiamo un Client ed un Server, che comunicano usando dei messaggi: ricordate si parlava di architetture SOA … per fissare le idee, inizialmente, ma solo inizialmente, pensate a quello che sappiamo dal mondo dei Web Service.

    L'Host, cioè chi contiene il nostro servizio (e.g. libreria matematica che espone funzioni base ), lo espone  attraverso quello che viene definito come Endpoint. Endpoint = Address+Binding+ Contract (detti l'ABC di WCF!). E il client ? Anche quest'ultimo parlerà con il servizio in questione usando lo stesso Endponit. In breve:

    • Contract: interfaccia del servizio che vogliamo rendere fruibile. (Cosa posso fare?)
    • Binding: è fatto da più elementi, detti binding elements, che rappresentano il tipo di trasporto utilizzato, ad esempio TCP/IP, più altre funzionalità più specifiche che riguardano ad esempio la sicurezza, la possibilità di supportare una sessione condivisa tra client e server o il sistema di codifica utilizzato. (Come comunicare con il servizio?)
    • Address: è l'indirizzo, condiviso tra client e server per la comunicazione, specificato usando un URI, che identifica anche il trasporto usato. Ad esempio HTTP://cohowinery:8005/ServiceModelSamples/CalculatorService. (Dove posso trovare il servizio ?)

    Nell'immagine seguente è espressa una vista di insieme, spero chiara:

    SnagIt   

    Aggiungo un'importantissima considerazione: il contenitore del servizio, come l'ho definito fin'ora, l' host può essere non solo IIS, ma anche una console application, una Windows Form, un pacchetto COM+, un'applicazione WPF etc.  

    Nella figura il nostro servizio espone l'interfaccia ICalc che viene utilizzata per definire il contratto, tale contratto è utilizzato per definire due Endpoint, uno che usa un binding che internamente usa come trasporto TCP/IP e un secondo che usa come trasporto HTTP e che permette di esporre il servizio come Web Service. In entrambi i casi sono definiti due Address distinti che devono essere conosciuti dai client. I client infatti usano WCF e usano i due distinti endpoint. Il client che consuma il servizio esposto come Web Service potrebbe essere anche un client non-WCF, ad esempio un'applicazione Java su altra piattaforma.

    Nel prossimo post vedremo un esempio di codice sia di un client che un servizio.

    A questo link trovate il sito community sul .NET 3.0 e in particolare su WCF: trovate esempi, blog, etc. Interessante la sezione resources con articoli interessati. 

    Buona lettura e fatemi sapere ..

    -Pietro

  • Pietro Brambati Blog

    Silverlight ... aspettando la RC

    • 1 Comments

    imagePenso che tutti sappiate cosa sia Silverlight, ma in breve potrei definirlo come: un plug-in per diversi browser: Internet Explorer, Firefox, Safari, Opera, che gira su piattaforma Windows e MAC per sviluppare applicazioni web ad elevato contenuto multimediale ed interattivo: 2D, Animazioni, giochi etc. Ne ho già parlato un precedente blog, che vi consiglio di leggere se siete interessati a saperne di più.Se volete vedere qualche esempio di utilizzo di questa nuova tecnologia, potete partire dal sito Community, dove trovare numerosi esempi e materiale per sviluppatori. Se non avete ancora scaricato il plug-in, necessario per vedere le demo, potete farlo da questo link.

     

    Leggendo il blog di Tim Sneath, trovate qualche informazione sul prossimo rilascio della RC di Silverlight della versione 1.0, che attualmente è in Beta, mentre è in Alpha per la versione 1.1. Tim puntualizza su alcune breaking changes introdotte nella prossima versione e pubblica una preview dell' SDK per Silverlight. Se qualcuno sta già lavorando con la beta consiglio di scaricare l'SDK, che non contiente ovviamente la RC, ma un documento con le novità introdotte e le differenze con la versione beta.

     

    Nel documento in questione trovate questi paragrafi per le differenze:

      • Remove "javascript:" in event handlers
      • Remove "Sys."
      • Use the latest Silverlight.js
      • All Downloads are now Asynchronous
      • Glyph element FontURI is Resolved Asynchronously
      • Remove Visibility.Hidden
      • Extra check on ASX Tags Resulting in MediaFailed Event
      • New Parser Error on Invalid Double Values like "Auto"
      • OnLoad, OnError, OnResize, OnFullScreenChange are now Function Pointer Based Rather than String Based
      • Elements in <*.Resource> blocks must be named
      • The MediaElement Position property value can be greater than the MediaElement NaturalDuration property value
      • Additional Animation Run-Time Errors
      • Can No Longer Use ’\’ in URIs
      • All Shaped Transform Members are now of Type Transform instead of TransformGroup
      • Remove IsFilled Property
      • AddEventListener now Returns a Token to be Passed to removeEventListener to Un-Register Event Handlers
      • Replace Version Property in Plug-in with isVersionSupported method

     

    Nell' SDK trova inoltre il template per Visual Studio 2005 ( serve aver installato la SP1 o il supporto per Web Application Projects) per svilppare con Silverlight 1.0. Nel file readme, trovate le semplici istruzioni su come installare il template.

  • Pietro Brambati Blog

    Uno sguardo al nuovo Visual C++ in Visual Studio 2008 ('Orcas')

    • 0 Comments

    Oggi mi sono imbattutto in un articolo molto interessante e sintetico sulle novità del Visual C++ nel prossimo Visual Studio 2008(in inglese), che per chi di voi è interessato vi consiglio di leggere.

    Due le aree trattate:

    1. Supporto per lo sviluppo di applicazioni in Windows Vista. Applicazioni che vogliono avere il "look" di un'applicazione alla Windows Vista e applicazioni che interagiscono con lo User Account Control (UAC)
    2. Supporto per lo sviluppo di applicazioni C++ che interagiscono con il CLR: marshaling di tipi nativi e tipi CLR, etc

    Oggi se si vuole realizzare un'applicazione con il look di Vista e non si vogliono utilizzare direttamente le API native del sistema operativo, si ha la possibilità di utilizzare "Vista Bridge", che si trova nel Windows SDK e che, in buona sostanza, è una serire di Wrapper, di esempio, su alcune delle nuove API che sono, così, rese disponibili al mondo .NET. Per chi è interessato può dare uno sgurdo a questa presentazione e a questo post, in cui in parte parlo di Vista Bridge. Il nuovo VC++ ha esteso le MFC per aggiungere il supporto ai nuovi elementi della User Interface(UI) e ai temi di Vista: Common File Dialog, Windows trasparenti, Common Link Control, etc.  La cosa interessante è che se creiamo, ad esempio, una FileDialog su Vista viene visualizzata con il nuovo look, mentre se la stessa applicazione viene fatta girare su un'altro sistema operativo, come 2000, viene visualizzata nel "vecchio modo". Un'applicazione già compilata con la versione precedente delle MFC, invece, presenta la Dialog tradizionale anche su Vista. Così è comunque possibile usare le nuove MFC e forzare il look tradizionale anche su Vista, impostando un opportuno parametro ( i dettagli li trovate nell'articolo segnalato).

    Una delle maggiori nuovità per la sicurezza in Vista rigurada lo UAC, che consente alle applicazioni di girare con i privilegi minimi richiesti, anche se l'utente che si è loggatto alla macchina, e il cui account sta facendo girare l'applicazione, appartiene al gruppo degli amministratori. Una applicazione che vuole a pieno sfruttare l'UAC e funzionare nel modo più consono all'applicazione stessa deve avere un manifest opportuno. In Visual Studio 2008 esiste un nuovo switch per il linker che permette la generazione automatica del manifest. Il comportamento di default impostato nel manifest è "As-Invoker", cioè l'applicazionie gira con i privilegi (token di sicurezza) del processo che l'ha lanciata.

    image 

    Per chi ha avuto modo di utilizzare il C++ "mixando" tipi nativi e tipi CLR, usando ad esempio il C++/CLI in Visual Studio 2005, o le precendenti Managed Extensions for C++, si sarà sicuramente imbattuto nelle problematiche di marshaling tra tipi nativi e tipi CLR, in particolare per le stringhe. Guardate i file marshal*.h in "C:\Program Files\Microsoft Visual Studio 9.0\VC\include\msclr". In Visual Studio 2008 è stata aggiunta una libreria di marshaling per i tipi più comuni di stringhe. Nell'articolo che vi ho segnalato vengono poi puntalizzate altre novità per chi sviluppa usando il CLR dal VC++.

    Buona lettura.

  • Page 9 of 11 (261 items) «7891011