PDC : Projet "M" et Projet "Quadrant"

by Nicolas Calvi 19. novembre 2009 17:07


Aujourd’hui j’ai eu l’occasion de voir deux sessions très intéressantes sur les technologies « M » et « Quadrant ». La première session se focalise sur Quadrant et la deuxième sur M. Je ne connaissait pas ses deux technologies et j’avoue avoir été impressionné.
 
Langage « M »

Sous ce nom de code se cache un langage dédié à la modélisation au sens large. Le langage M est capable de modéliser des données mais peut servir aussi à modéliser des langages dynamiques. En effet il propose de définir sa propre grammaire et ainsi le coupler au moteur d’exécution de langage dynamique du Framework 4.
 
Modélisation de donnée

La première utilisation de M est pour la modélisation de donnée.  Il est possible de décrire un modèle objet très complexe mais générique (entendre par là pouvant se créer sur n’importe quelle base de données comme Oracle ou par défaut SQL Server) et en un click générer à la fois la base dans une instance SQL Server mais aussi les classes Entity Framework qui lui sont associés.
 
Là où ca devient très puissant, c’est que l’on peut par exemple écrire avec M que deux colonnes ne peuvent pas avoir la même donnée sur une même ligne. M va donc, au moment de la génération de la base, créer une procédure stockée qui va contrôler cette règle de modélisation. On a donc, avec un seul fichier de définition, la possibilité de contrôler la structure de sa base, intégrité incluse, et sa DAL via Entity Framework.
 
Il est aussi possible au niveau de la configuration du projet d’une assembly, de définir un fichier M (embarqué en ressource) pour que celui-ci déploie la base au moment de l’exécution de l’assembly si celle-ci n’existe pas.
 
Langage dynamique

La possibilité de définir avec M un langage custom, permet de créer une grammaire propre à son application. Par exemple, à l’instar des macros VBA, on peut donc proposer aux utilisateurs de son logiciel, un langage dédié entièrement à celui-ci mais totalement contrôlé.
 
La façon de décrire le langage est étonnamment facile et puissant, de plus l’interface Quadrant permet de voir en temps réel si notre grammaire répond à ce que l’on veut implémenter, mais possède aussi l’IntelliSense pour une plus grande facilité d’utilisation.
 
Outil « Quadrant »

Ce nouvel outil peut s’apparenter à SQL Manager, une interface permettant de visionner ses données, mais aussi de gérer ses fichiers écrits en M.
 
Interface et navigation

La première chose qui interpelle avec Quadrant, c’est son interface, sobre et épuré. Il faut imaginer une fenêtre totalement vide ou l’on crée de petite fenêtre (des vues). Là où les choses sortent de l’ordinaire, c’est que sa zone de host des vues peut se déplacer dans tous les sens, comme si une caméra parcourait une surface infinie. Il y a aussi la possibilité de faire des zooms et l’interface sauvegarde tout après la fermeture du programme. Tout est en WPF et permet une fluidité exemplaire. Un très bel outil.
 
Visualisation des données

Une fois connecté à une base de données, il est possible de visualiser le contenu en un click. Mais la différence avec SQL Manager est la façon de présenter les données. Par exemple, si une table possède une référence vers une autre table (clé étrangère), Quadrant va proposer l’affichage des données en arbre afin de pouvoir avancer dans la hiérarchie.
 
De plus, une fois une vue sur une table faite, on peu customiser cette vue en changeant la couleur de fond, les colonnes affichées ou leurs noms. Tout ceci se fait avec ... M !! En un click on extrait la définition de la vue en M et on peut la modifier et la sauvegarder pour la réutiliser plus tard. C’est simple et efficace.
 
Quadrant permet une multitude de présentation des données : en liste, présenté de façon plus ordonnées ou même filtrées. On sent bien à l’utilisation de l’outil que tout a été fait pour faciliter la visualisation et la recherche.
 
Pour ce qui est du filtrage des données dans une vue, là encore on fait appel a M qui permet d’écrire des requêtes, exit donc le SQL, M est beaucoup plus simple d’accès.
 
Gestion de la mise à jour des données

Quadrant fait un pas en avant en ce qui concerne la gestion concurrentielle des données dans sa base. Imaginons le cas ou vous ouvrez une vue sur une table avec Quadrant, puis que dans cette table vous modifiez une donnée. Dans Quadrant tout est transactionnel, il faut donc faire CTRL+S pour valider vos modifications. Sauf que pendant se temps une personne modifie la même donnée mais avec une valeur différente (par exemple avec SQL Manager). Au moment de la validation coté Quadrant, un conflit et détecté, il vous affiche donc une fenêtre avec la valeur d’origine, la valeur actuelle et la valeur que vous voulez affecter, a vous de choisir quoi faire.
 
Il en va de même pour toute action sur la base, une modification met un astérisque devant la ligne, un conflit met un point d’exclamation et un point d’interrogation si une donnée a été changée entre temps et que votre vue n’est donc plus à jour.
 
Et c’est là que Quadrant fait fort, chaque visualisation ou modification se fait dans un DataSet spéciale qui fait un snapshot au moment de l’ouverture d’une table ou de l’exécution d’un filtre. Cela lui permet de d’avoir une vision « déconnecté » des données et de tracer les évolutions de celle-ci.
 
Conclusion

Le langage « M » et l’outil « Quadrant » sont pour moi une réelle avancée, déjà car cela simplifie énormément le modeling, mais aussi la façon d’accéder aux données. Les possibilités sont énormes, surtout avec la possibilité de créer ses propres grammaires. L’outil et le langage sont actuellement en CTP, mais je vais suivre cela de très prêt.

PDC : ManyCore and .Net Framework 4

by Nicolas Calvi 18. novembre 2009 08:18

Une session particulièrement enthousiasmante, qui change de l’ordinaire. Il était surtout question de parler de la démocratisation des processeurs multi-cœur, du changement que cela implique dans nos habitudes de développeur et de comment les équipes Microsoft ont travaillé pour appréhender cette approche le plus simplement et le plus efficacement possible.

La refonte complète du threadPool à permis de largement améliorer le Framework .Net dans les utilisations MultiTreading. Ce nouveau threadPool est devenu la pierre centrale de nombreux développement du Framework et en particulier les Task. Les Task apportent une véritable gestion fine des processus que nous aurions habituellement fait avec le ThreadPool, ainsi il est possible d’attendre la fin d’une à plusieurs taches, de contrôler et récupérer l’état. De plus les tasks sont customisable au niveau du scheduleur par exemple.

De plus Visual Studio 2010 amène un ensemble de fonctionnalités de débuggage spécifique aux traitements parallèles. Il est indispensable d’utiliser les fenêtres de Parallel Thread et Parallel Tasks.

PDC : ASP.Net Runtime Core et ASP.NET Futures

by Nicolas Calvi 18. novembre 2009 08:17

Deux sessions sur les nouveautés de ASP.NET 4.0

-          Peu de nouveauté sur l’ASP.Net 4.0 au niveau du core :

o   Quelques modifications sur les sessions : avec la possibilité de compresser la session, de les désactiver globalement dans le aspnet.config ou par code pour plus de précision et désactiver la fonctionnalité par page ou control.

o   Des modifications sur le cache pour pouvoir faire son custom provider de cache.

o   La nouveauté la plus intéressante est la fonctionnalité de warm up de IIS 7.5. Le principe est d’informer IIS de faire des appels à des URI au lancement des applications pool. La configuration peut être fait à la fois au niveau de IIS ou au niveau du web.config des applications.

L’effort à surtout été fourni sur l’optimisation des performances et l’ajout de quelques classes « Helper » comme le redimensionnement d’images ou l’ajout de la validation par mail dans le wizard de création de login.

Egalement présenté, la possibilité de regrouper plusieurs images au sein d’une seule et même image afin de réduire le nombre de requêtes.

En bref, pas de changement fondamentaux mais pas mal de petit plus pour nous simplifier la vie.

PDC : Dynamic Langages to Build Scriptable App

by Nicolas Calvi 18. novembre 2009 08:15

Cette session était très intéressante, elle montrait comment ajouter dans un programme .Net une fonction d’exécution de code dynamique comme JavaScript, Python ou encore Ruby. Le principe est simple, le speaker avait une application ou se trouvais un Canvas WPF. Dans celui-ci on pouvait y créer des cercles et des rectangles.

Dans cette même application, il y avait une TextBox pour pouvoir écrire du code dynamique et un bouton pour le l’exécuter à la volée. Dans son exemple, le speaker pouvait interagir en direct via le langage Ruby avec les cercles et rectangles de l’application. C’est réellement bluffant de voir que cette intégration se fait très facilement.

A la base on défini des Providers de langage dynamique appelé Runtime. Ensuite,  grâce à un système de scope, il est possible de définir les limites de l’interaction du langage dynamique avec son application, à savoir qu’elle objets et namespace sont accessibles dans l’exécution du langage dynamique. Ensuite il suffit d’injecter le code saisie dans le moteur dynamique et celui-ci est compilé et exécuté à la volé dans le scope.

Ce que l’on peut retenir de cette session :

·         Améliorer son application en un écosystème applicatif.

·         Les langages dynamiques peuvent se parler entre eux.

·         IronPython et IronRuby sont les langages dynamiques actuellement supportés.

·         Les nouvelles classes pour gérer l’exécution dynamique :

  •  
    • ScriptRuntime (Class)
      • ScriptScope (Class)
      • ScriptEngine (Class)
        • ScriptSource (Class)

·         Le but est d'enrichir les applications C# avec un langage dynamique qui peut interagir avec notre application dans un scope défini.

·         Permet un lien total entre son programme et le langage avec peu de code.

·         Le DynamicObject permet de pouvoir accéder aux propriétés d'un objet interne C# dans le moteur de script.

·         L'API Script est valable pour IronPython, IronRuby et autres DLR si le provider est là.

·         Lien : http://ironpython.codeplex.com/ 

 

Au final, si on couple cette technologie avec d’autres comme « M » ou « Quadran », il est possible de créer pour son application, un langage custom et permettre a ses utilisateurs de créer des petit programme comme les macros VBA, mais avec un contrôle total sur l’interaction du langage avec son domaine fonctionnel et applicatif.

PDC : Future directions for C# and Visual Basic

by Nicolas Calvi 18. novembre 2009 07:55

Pour ma part ma première session a été très intéressante, une présentation sur les concepts et directions que Microsoft va donner a ses langages phares que sont C# et Visual Basic. Outre le fait de montrer quelques évolutions syntaxique c’est surtout l’occasion pour le speaker de préciser qu’à l’avenir les langages seront plus tournés vers le déclaratif à l’instar de Linq que vers l’impératif (même si les deux seront toujours possible).

La première chose mise en avant est que les deux langages seront maintenant identique dans leurs possibilités, fini l’époque ou Visual Basic offrait telle fonctionnalité et C# une autre sans possibilité d’avoir les deux dans le même langage. Avec C# et  Visual Basic 4, ce que peut faire l’un, l’autre peut le faire aussi.

Dans les nouvelles fonctionnalités, une m’a particulièrement attiré, celle concernant le DynamicObject. Le concept est simple, pouvoir accéder a des accesseurs dynamique sur un objet, ce qui était avant impossible car ils étaient déterminés à la compilation. Si vous voulez voir a quoi sa ressemble coté code :  http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject%28VS.100%29.aspx

Ce qu’il faut donc retenir de cette session :

·         Plus aucune différence de fonctionnalité.

·         La version déclarative d'un code est plus lisible de la version impérative.

·         L'idée est que le déclaratif est plus facile à mettre en place et plus facile à maintenir, et pose moins de problème de compréhension.

·         Possibilité de créer ses propres fonctions de refactoring de code dans Visual Studio 2010.

 

La session proposait comme exemple la création d’un parser de fichier CSV, en combinant les nouveaux concepts déclaratif de C# 4, on arrivait à un modèle pour le fichier était chargé dans un objet donc les accesseurs était dynamique, et donc que leurs nom changeaient en fonction du fichier CSV chargé.