posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

giovedì 30 ottobre 2008

Windows Web Services API in codice nativo

È il preparatissimo Nikola Dudar a presentare questa sessione. Nikola prima era parte del team di Visual C++ e tempo fa era venuto a Milano per il Visual C++ tour, poi abbiamo fatto un intervento insieme presso un ISV e successivamente al MVP Summit.

IMG_0754  IMG_0757IMG_0758

Questa nuova libreria è un nuovo set di Win32 API con nessuna dipendenza dal Framework.NET che nascono con Windows 7. La bella notizia è che sarà disponibile come package per tutti i sistemi operativi Windows a partire da XP.

Gli standard implementati sono quelli WS-* (SOAP) che permettono l'interoperabilità con WCF, ASMX e non-Microsoft stacks.

IMG_0760 

Si parte dalla demo che vede la realizzazione di un client nativo che consuma un servizio WCF. Una utility produce un wrapper in linguaggio C che permette di dimenticare totalmente tutta l'infrastruttura e il messaggio soap. In sostanza ci sono wrapper per ciascuno dei tre pilastri di un web service: ABC (Address, Binding, Contract).

Viene poi mostrato come prendere totale controllo delle opzioni del messaggio, le modalità di trasporto, gli header in caso di trasporto http, e le opzioni per usufruire di WS-Security.

Non tutte le opzioni/protocolli di WCF sono supportati in questo momento ma considerato che WCF è in grado di esporre più endpoint contemporaneamente, non lo vedo come grosso problema.

Per quello che riguarda il messaggio XML, c'è pieno controllo al contenuto del messaggio, quindi encoding Text, Binary e MTOM. Il messaggio è fruibile con tre opzioni: XmlBuffer, XmlReader, XmlWriter.

Nella serializzazione vengono mappato lo schema Xml a dei tipi "C".

La ciliegina sulla torta è uno speciale heap che viene utilizzato per evitare le noiose allocazioni in stile C (chiedere all'API la dimensione da allocare, richiamarla con l'allocazione). Questo heap invece semplifica enormemente il task.

Ritengo questa soluzione perfetta per moltissimi scenari in modo da evitare la dipendenza da COM o Assembly. Il livello di disaccoppiamento offerto da un servizio calza alla perfezione in uno scenario di interoperabilità con il codice nativo in quanto permette una evoluzione indipendente delle versioni e soprattutto nessuna dipendenza dalla versione del compilatore C++.

IMG_0762

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) |

Mono and .NET

Non deve sorprendere di vedere Miguel de Icaza a PDC dove per tradizione sono presenti solo speaker Microsoft. Si parla ovviamente di Mono 2.0 che è stato rilasciato da poco.

IMG_0735IMG_0736

Si comincia a parlare dell'implementazione del compilatore C# 3.0 che inizialmente era di 10'000 linee di codice. Quello che la vecchia versione compilava in 17 secondi oggi compila in 2,2 secondi (82'000 righe di codice) mentre csc di Microsoft compila in 1 secondo.

Miguel poi mostra la demo di "compiler as a service" mostrando Evaluator.Evaluate che compila al volo. Per la demo parte dagli stessi esempi mostrati da Hejlsberg per poi mostrare effetti speciali notevoli. Per esempio la console interattiva in cui eseguire codice valutato a runtime, può fare l'attach di processi esterni e iniettare l'esecuzione del codice in quel processo.

Poi si parla del linker di Mono che permette di creare un sottoinsieme delle librerie di Mono in modo da creare una distribuzione minima. Ovviamente questo scenario è perfetto per l'installazione su portable/embedded devices.

Un altro argomento interessante è l'uso di Mono nel mondo dei videogame. Ovviamente si parla della porzione di scripting dei giochi che realizza in pratica l'evolvere della storia del videogame. Mono è già presente in diversi giochi (online o classici): Second Life e un noto tool di creazione di videogame: Unity3D.

IMG_0737IMG_0738

In una importante parte della presentazione si parla delle ottimizzazioni al jitter che permettono l'uso delle istruzioni SSE (SIMD nell'esempio) mostrano un guadagno netto e impressionante persino rispetto ad un tradizionale listato C++. Chi mi conosce sa bene che dico spesso che i linguaggi managed su questo tipo di algoritmo possono certamente essere più performanti di C++ con uno sforzo infinitamente inferiore.

IMG_0741

Infine nella Q&A viene annunciato che il DLR verrà incorportato in Mono grazie ad un agreement con Microsoft.

Per i curiosi c'è una conferma della notizia che avevo già detto l'anno scorso dopo aver parlato con Miguel: niente WPF e il motivo è che ci vorrebbe troppo tempo che invece può essere speso per migliorare altri aspetti considerati più importanti. Resta il fatto che se Microsoft decidesse di passare la codebase a Mono ovviamente il gioco sarebbe fatto in pochissimo tempo... chissà.

Ad ogni modo Moonlight (versione Mono di Silverlight) c'è e funziona.

IMG_0743

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (12) |

Olso: chi sei?

La faccenda di Oslo comincia a farsi più chiara, purtroppo non per gli speaker che stanno dando troppi concetti per scontato ed infatti tra gli attendees le voci sulla poca chiarezza sono sempre più forti.

La chiarezza me la sono fatta stressando alcune persone del team nello spazio exhibitors.

Olso permette, grazie al neonato linguaggio M, di definire due cose:

  • uno schema che definisce la forma dei dati
  • una grammatica che permette di definire un DSL per manipolare questi dati

Attualmente la parte di definizione dello schema permette di avere come repository solo SQL Server ma in futuro questo verrà esteso con molti altri "provider". Il modello dati (da non confondersi nel modo più assoluto con il modello ad oggetti considerato che M non è un linguaggio OOP) permette di definire 1:1 come sono definiti i dati dentro un 'container' (SQL Server nel nostro caso) e come sono le relazioni tra questi.

In pratica posso definire un nuovo tipo (equivalente di una tabella di un db) composto da una serie di informazioni (per esempio id, nome, etc.) che definiscono le colonne della tabella. Il linguaggio permette di definire tipi complessi e le relazioni dei tipi. Tutte queste cose vanno viste come le astrazioni che un normale linguaggio di programmazione ha nei confronti della piattaforma hardware.

Se M è il "linguaggio C" di SQL, un tipo in M è paragonabile ad una struct del C. Ricordo ancora una volta che M non è OOP e definisce solo dei value type ... qui si parla di dati e basta.

Per la cronaca M consente anche di creare view dei dati e di eseguire query usando la sintassi Linq.

Questo è stato il topic della sessione di Chris Sells e Martin Gaudgin (vecchie conoscenze del sottoscritto all'epoca della mailing list su DCOM nella fine anni 90).

I concetti fondamentale su cui stresso anche durante i miei corsi sono: type system e metadati, due problemi con cui il mondo dell'informatica deve fare i conti più pesanti. La compilazione di M crea un bel file .mx che contiene sostanzialmente metadati che sono fondamentali per poter descrivere il modello dei dati. La presenza di questo livello di astrazione consente di separare totalmente le differenze di type system tra mondo dei DB e del Framework.NET.
Type System e emetadati sono le motivazioni che hanno portato alla creazione di tecnologie come COM, Corba, Java e .NET Framework.

Che ci faccio con tutto questo? Gli speaker mostrano i tool di Oslo e tra questi uno che permette di creare da .mx il file di Entity Framework (ecco dove volevano arrivare!) e nei bit sono presenti ovviamente altri tool tutti da scoprire.

 

Vogliamo andare oltre? ok :)

 

Che ci faccio con i dati? Non si era detto che Olso permetteva di creare dei DSL per creare delle regole di manipolazione dei dati. È così che la persona del team mi ha mostrato la parte di grammar.

Prima abbiamo scritto la frase testuale "create a word document dated 10/29/2008" e grazie ad M che ha le capacità di un linguaggio funzionale, ha scritto le regole di parsing che hanno permesso di:

  • istanziare il tipo document
  • assegnargli l'enumeratore "Word" nel suo tipo
  • assegnargli una data di creazione
  • assegnargli un Id Guid (aveva creato un int identity ma gliel'ho fatto cambiare con un guid ;-) )
  • inserire l'ambaradan dentro il db (viene generata la insert automaticamente)

Infine da una console application possiamo istanziare una sorta di runtime che ci permette di usare tutto ciò e se volete mappare questi dati alle vostre entity con la Persistance Ignorance, detto fatto, c'è Entity Framework.

Tanto per capirci ho avuto conferma che con la parte di DSL è possibile (ed è tra gli esempi dell'SDK) costruire un nuovo linguaggio con tanto di for, if, etc. etc. che viene parsato ed eseguito.

Signori questo è Oslo e se la cosa vi piace:

  • L'architettura dati va ripensata ed è una evoluzione di quella rivoluzione iniziata da Linq
  • Provvede ad uno strato di astrazione dai dati che è prezioso come l'oro
  • Permette il versioning sulle varie versioni dello schema
  • Fornisce metadati che ci permettono di pluggare di tutto di più
  • Ci da la possibilità di creare un DSL specifico ma se ci basta una delle grammar fornite da Microsoft, questa parte è già pronta.

Bene, ora basta con la teoria perché non c'è nulla di meglio che sbatterci la testa con i bit sotto le dita.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) |

Panel sull'evoluzione dei linguaggi

Questa sessione è un "classico" della PDC che vede i guru dei linguaggi a confronto intervistati da Eric Meijer.

IMG_0716 IMG_0718

Alla domanda di quale siano i problemi prioritari da risolvere nei linguaggi le risposte sono: complessità, riuso, sicurezza e concorrenza.

Tutti concordano che il linguaggio va scelto sulla base del problema da risolvere: non esiste il linguaggio universale. C'è scetticismo invece sulla possibilità che "transactional memory" sia una possibile soluzione ai problemi di concurrency.

Anders Hejlsberg sottolinea come uno degli obiettivi di C# sia quello di fornire gli strumenti per espandere il compilatore (vedi il post su C# 4.0 e il "compiler as a service"). Questo topic solleva una discussione al limite della rivalità tra i vari rappresentanti dei linguaggi. Ad una domanda successiva il tema riprende portando come esempio le parallel extension PFX che usano le lambda extension e le feature di C# 3.0 per definire una sorta di linguaggio specifico per quella libreria.

Tra i temi sollevati troviamo argomenti classici come la direzione dei DSL, pro e contro dei linguaggi dinamici, gli elementi di successo per un linguaggio, l'adozione di un linguaggio in termini di moda, etc.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) |

Microsoft Research protagonista della terza keynote

Se c'è una Microsoft che non manca mai di tecnologie brillanti e innovative, bene questa è certamente Microsoft Research.

Rick Rashid conduce tutta la terza keynote che inizia ripercorrendo le tappe fondamentali di Microsoft Research e di se stesso in quanto creatore delle architetture NUMA, porzioni di OS Macintosh derivate da NeXT e molto altro ancora.

 

IMG_0694 IMG_0711

La presentazione è stata tutta interessante e tra le cose che mi hanno colpito di più sono:

  • I sensori (temperatura/umidità/...) che permettono di monitorare e ottimizzare il consumo di energia del mondo IT. Nella foto si vede il consumo di energia all'interno del padiglione in un intervallo di tempo.

IMG_0702 IMG_0704

  • La lunghissima serie di appoggio alla ricerca scientifica, molto nel campo della medicina. Un esempio è l'aiuto fornito a decrittare le informazioni genetiche del virus HIV
  • Il World Wide Telescope che è già online

IMG_0707 IMG_0708 

  • L'evoluzione di Windows Surface ("Second Light") che permette di proiettare oltre lo schermo che viene toccato. In PDC è pieno di Surface da usare e testare liberamente e devo dire che è realmente fantastico
  • Boku, una sorta di "videogame" che consente ai bambini di avvicinarsi al mondo della programmazione. Con un joystick è possibile creare le regole in cui i personaggi e gli oggetti del mondo virtuale si muovono. I bambini si possono così avvicinare alle regole logiche base della programmazione senza necessità di imparare un linguaggio.
    È una ginnastica mentale magnifica se pensiamo che le nostre scuole sono praticamente a zero di qualsiasi cognizione di logica per tutti i tredici anni di una carriera scolastica.

Complimenti a Microsoft Research e ai più di mille interni che ogni anno sono presi dalle varie università e scuole per collaborare a questi e altri progetti.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (3) |

Powered by:
Powered By Subtext Powered By ASP.NET