Revue du web du 29 mars

Les tweets de la semaine

http://twitter.com/marktucker/statuses/10890277413 l’extension à l’oeuvre dans Blend avec MEF

http://twitter.com/MWillemse/statuses/10892517988 Si WCF était un monstre de jeu de rôle, on perdrait 20 points de santé mental rien qu’en le voyant

http://twitter.com/kmckelvin/statuses/10972370963  C’est beau et c’est utile. Le vectoriel a une place dans les applications métier finalement.

La question Stackoverflow

http://stackoverflow.com/questions/2285045/what-scalability-problems-have-you-solved-using-a-nosql-data-store on vous parlait la semaine dernière de db4o, une des applications souvent citées dans le mouvement NoSQL (même si strictement parlant elle se trouve plutôt à la marge). Voici une question comme on les aime : les réponses proviennent de projets réels où l’utilisation d’une base de données non relationelle fait du sens.

Actualités Microsoft 

Quand on parle des trois W dela version 3 de .NET tout le monde arrive à citer WPF et WCF mais on oublie souvent Windows WorkFlow. Dans ce billet Soma Segar essaie de donner un peu de visibilité à la version 4 de l’API qui n’a rien à voir avec la version 3.

Le designer a été ré-écrit en WPF ce qui pourra sans doute améliorer son intégration dans des applications tiers, la définition de processus étant souvent un travail effectué par une personne loin de savoir manipuler Visual Studio (et le code). Les workflow sont aussi définis en XAML (une porte ouverte pour des outils externes ?). Un nouveau type de process existe : FlowChart qui expose des process pouvant connaître un retour en arrière et/ou des conditions simples comme le switch ou decision.

Le modèle de programmation a été simplifié : fini l’obligation d’avoir un runtime pour exécuter un workflow, ceci peut se faire plus facilement notamment dans les tests. Enfin l’intégration avec WCF a été aussi revue avec de nouvelles activités pour interagir avec un service (dont une gestion de la corrélation de plusieurs messages) et une configuration plus déclarative.

Le designer en mode “hosté” :

le designer de WF en mode hosté
le designer de WF en mode hosté

Actualités “Alt.NET”

Décidémment Mono fait beaucoup parler de lui en ce moment. Mais cette fois-ci ce n’est pas technique. Etant à l’intersection des mondes Open Source Linux et de Microsoft il y a parfois des frictions des deux bords comme par exemple quand Miguel de Icaza a reçu le titre de MVP ou quand Mono a été inclu dans les package de base de Ubuntu. Aujourd’hui c’est encore une nouvelle qui est allée trop vite : une allégation d’un article du SD Times sur une déclaration du leader du projet sur la gestion par Microsoft de la communauté.NET. L’interessé a éclairci les choses dans un billet très intéressant. Il reconnaît que Microsoft fournit avec le .NET framework un produit excellent mais regrette qu’il est fermé la porte à une plus grande communauté quand Java avec la fondation Apache par exemple offre un choix d’outils, frameworks plus grands . Dans un dernier point il dit avoir espoir car la nouvelle équipe aux commandes de Microsoft a déjà changé pas mal de choses avec les projets comme ASP.NET MVC, le changement de licence sur certaines parties du framework ou encore la nouvelle fondation codeplex.org.

De l’autre côté 

Adobe a publié cette semaine une nouvelle version de ses outils de développement Flex Builder renommé Flash Builder. La quatrième incarnation de l’IDE RIA est toujours basée sur Eclipse. Cette publication coïncide aussi avec le SDK – gratuit et open source- Flex SDK.  Flash Catalyst le nouveau outil de design permet de profiter du nouveau système de composants (Spark) en exportant des designs vectoriels vers un format compatible de Flex. Les composants ont donc leur comportement séparé de leur rendu (penser au couple Button.cs et Themes\generic.xaml en WPF).

Flex est basé sur un langage déclaratif XML pour définir son interface utilisateur (MXML) et ActionScript comme langage de programmation. Un autre langage existe (FXG) qui rend compatible des artefacts créés dans d’autres outils d’Adobe. La plateforme a enrichi son databinding aussi en rendant plus facile la définition de databinding bi-directionelle.

Outre les nouveautés de l’outil comme une meilleure génération (getter, setter, event handler), la possibilité d’ajouter des breakpoints conditionnels.

Un projet

Reactive Extensions (Rx) est un projet de devlabs chez Microsoft qui a connu une certaine notoriété car Erik Meijer, le créateur de Linq, fait partie de l’équipe à l’origine de cette nouvelle API. Il est apparu d’abord dans Silverlight puis a été promu dans le framework et enfin une version pour Javascript est apparue après la conférence MIX10.

Rx se propose de simplifier le modèle de programmation asynchrone et événementielle en renversant la relation que nous avons d’habitude entre une série d’appels ou d’évènements et les fonctions de callbacks associées. Pour cela il utilise un patron de conception connu : Observable/Oberserver et l’applique aux Collections. Si on décompose le concept cela donnerait cet enchaînement : un évènement donné (MouseOver) peut-être vu comme une série (une collection) et cet ensemble peut être observé. A chaque fois qu’une nouvelle instance est créée (un mouseover x y) i.e. un élèment ajouté, le sujet (l’observé) appelle la fonction OnNext sur les observeurs. Certains l ‘appréhendent aussi comnme le relation inverse de l’énumerator où c’est votre code qui va chercher un par un les élèments de la collection. Rx expose aussi OnError pour gérer les cas d’erreur et Completed pour être prévenu lorsque le sujet n ‘est plus.

L’installation par un package msi fournit un fichier de documentation des classes et une page html d’exemple. On y trouve une version pour ScriptSharp et une version Javascript (sans intellisense pour Visual Studio pour le moment) :

Rx Installer
Rx Installer

Les fichiers installés pour la version Javascript :

Installation
Installation

Il faut aussi passer par un petit hack si on veut la complétion automatique dans Visual Studio (en espérant que cela soit résolu pour la version finale).

Voici un exemple sur l’évènement click où à chaque occurence nous imprimons dans une div les coordonnées :

//element cible

var element = $(“maDivClickable”).get(0);

//observable à partir de l’élèment et de l’event

var observable = Rx.Observable.FromHtmlEvent(element, “click”);

//ajout d’un observer

observable.Subscribe(function (clickEvent) {

  var result = $("#resultat");

  result.html("vous avez cliqué à la position : "

        + clickEvent.clientX + " , " + clickEvent.clientY);

});

le rendu de l'exemple
le rendu de l'exemple

Rien de vraiment particulier mais Rx contient quelques méthodes bien pratiques comme Throttle(dueTime) qui permet de réguler les cliques successifs par exemple en fixant une limite minimale avant de relancer un autre event :

observable.Throttle(1000).Subscribe(..)

ou Skip(1).Zip(prev, next) par exemple pour recevoir l’avant-dernière et la dernière valeur ou SkipUntil() pour utiliser une condition.

Avant de s’intégrer facilement avec les API “Web 2.0” Rx fournit une méthode pour faire des appels asynchrones successifs et transformer les résultats en sujet/observable :

Rx.Observable.XmlHttpRequest(url)

Matthew Podwysocki a écrit une série très intéressante sur Rx pour Javascript et ses usages.

Billet publié dans les rubriques Programmation le