Archive for the ‘Architecture’ Category

Rencontre Alt.Net – Présentation Git

Friday, December 9th, 2011

La prochaine rencontre ALT.Net aura lieu le mercredi 14 décembre à partir de 18h30 dans les locaux de Valtech. Après une session forte intéressante sur Roslyn présentée par Jean Baptiste Evain, la prochaine présentation portera sur Git avec Sébastien Douche.

 

Git, c’est quoi ?

Git est un système de contrôle de sources distribué. Le contrôleur de source étant un des outils que le développeur utilise le plus dans son quotidien, son choix semble primordiale, car, sur des tâches répétitives (commit, merge, branche…), le gain en productivité peut être énorme. Git est un outil très puissant permettant de faciliter le travail des équipes décentralisés, l’utilisation des branches…

Alors si DVCS ne vous dis rien, si vous voulez découvrir Git, ou encore améliorer votre compréhension et utilisation de cet outil, nous vous donnons rendez-vous à Alt.net pour assister à la présentation d’un spécialiste du sujet en décembre et d’un workshop en janvier.

Venez améliorer vos connaissances !

Inscription & Accès :

  • Lieu : 103 rue de Grenelle, 75007 Paris (Plan)
  • Date : 14 décembre
  • Horaire : 18:30 – 21:30
  • Inscription : via eventbrite
  • Plus d’informations : Alt.Net

 

Rencontre Devops le 15 Juin

Tuesday, June 14th, 2011
Parisdevops

Mercredi 15 Juin, Valtech accueillera le User Group DevOps dans l’auditorium du 103 rue de Grenelle à Paris.

Cette 5ème soirée du User Group sera animée par Cyrille Le Clerc qui nous parlera de JMX et de Feature Toggle Pattern.

DevOps

Mais qu’est ce que DevOps ?  C’est un mouvement émergeant qui vise à rapprocher les équipes de développement et les opérations (la production en français) pour mieux résoudre les problèmes de déploiement et de suivi de production.

La démarche part de quelques constats : la siloïsation de l’informatique qui empêche toute synergie, les problèmes de déploiement, le phénomène « It works on my computer !« , la peur du changement qui bloque toute démarche de part et d’autre.

La solution passe par une collaboration, les échanges de point de vue autour d’une pizza, l’intégration des ops dans les projets, la montée en compétence des Ops sur le Dev et des Devs sur les Ops et au final une meilleure compréhension des contraintes des uns et des autres.

D’une certaine manière, c’est la continuité de la démarche Agile. Une application développée, mais qu’on arrive pas à déployer, n’apporte aucun service aux utilisateurs. Il faut donc travailler ensemble, Dev et Ops pour régler les problèmes.

Ces rencontres autour de sujets frontières sont une manière de rapprocher les équipes.

Pen

JMX

La première partie de la soirée sera consacrée à JMX.

JMX (Java Management Extension) est une API Java qui permet de gérer le serveur d’applications ou les applications Java à distance. Elle est fonctionnellement équivalente à LDAP.

Les MBeans JMX embarqués dans le serveur permettent de relever des valeurs via des sondes, de modifier des paramétrage ou d’invoquer à distance des opérations telles que le démarrage ou l’arrêt de services. Il possède également des fonctions de notification d’alertes.

JMX n’est ni vraiment dans la culture des Ops (c’est du Java et donc pas si simple à intégrer dans leurs outils préférés) ni des Devs qui pensent rarement à y faire appel pour faire des capteurs et interfaces de configuration du système qu’ils fabriquent. Et pourtant, c’est un outil puissant pour communiquer avec les outils de surveillance et d’alerte de manière standard.

Cyrille présentera JMX puis nous montrera comment manipuler JMX via du scripting en Groovy et l’intégrer JMX dans des outils de surveillance ou des grapheurs (Hypéric HQ, Graphite).

Pen

Feature Toggle Pattern

La seconde partie de la soirée sera consacrée au Feature Toggle Pattern.

Le Feature Toggle est une technique qui permet d’activer/désactiver des fonctionnalités présentes dans une application. L’application peut contenir plusieurs versions d’une fonctionnalité, soit parce qu’elle a évoluée, soit parce qu’on veut mettre en place des implémentations différentes.

Les motivations sont souvent liées au test, soit pour faire des tests comparatifs (A/B testing par exemple), soit pour tester sur un échantillon avant un déploiement plus large (dans un cadre de déploiement continu par exemple).
Les fonctionnalités alternatives seront activées sélectivement en fonction des instances du serveur.

Cyrille nous montrera comment l’implémenter dans l’application et comment le contrôler à distance via JMX.

Pen

S’inscrire

Nous vous attendons nombreux pour cette soirée.

Pour vous inscrire : paris-devops-meetup-5

Retrouver également les activités et actualités du User Group DevOps sur son site parisdevops.frTwitter et Google Group.

Crédit des images

http://www.flickr.com/photos/emaringolo/1404829642/

http://www.flickr.com/photos/roadsideguitars/3210448415/

http://www.flickr.com/photos/vignetfishnet/5716635630/

What’s Next Paris, Jour 2

Monday, June 6th, 2011

JAVA

La seconde journée a commencé par une keynote de Neal Gafter qui travaille désormais chez Microsoft sur les langages de la plateforme .NET, après être passé chez SUN où il a participé au design et l’implémentation de Java puis chez Google. Sa session était en partie consacrée à retracer l’historique du langage. Il commence par rappeler que Java a été créé pour pouvoir gérer le multihreading, qui selon lui va devenir de plus en plus important dans les années à venir.

L’historique

  • Ainsi on remonte jusqu’en 1996 et la parution du JDK 1.0. Dès l’année suivante, c’est le JDK 1.1 qui apparait. Ce sera la version de java la plus déployée, grâce notamment aux navigateurs web qui l’embarquent. C’est l’apparition des inner class, de l’interface de marquage Serializable, de JDBC, de RMI, et de la reflection. La base de java est là !
  • En 1998, c’est le JDK 1.2 qui sort, avec Swing, les collections, le JIT (runtime compiler), et la version ‘professionelle’ de java, l’ancêtre de JEE.  La conférence JavaOne réunit 14 000 personnes pour sa 3ème édition puis 20 000 un an après.
  • En 1999 c’est aussi les JSR qui apparaissent avec notamment celle sur les Generics. J2ME sort ainsi que Java Professionnal Edition 1.2.
  • En 2000, on voit apparaître J2SE 1.3, la fameuse API de debugging JPDA, les Dynamic Proxy et JNDI. 25 000 personnes se retrouveront pour la JavaOne.
  • En 2001 c’est la sortie de J2EE 1.3 et la fin du procès entre Sun et Microsoft.
  • En 2002, c’est J2SE 1.4 avec les assertions, le chainage d’exceptions , les I/O non bloquants et puis les API pour le XML, la sécurité et cryptographie, les logs et les regexp. C’est aussi la naissance de C# avec sa version 1. 14 000 personnes participent à JavaOne.
  • 2003 est l’année de J2EE 1.4. La baisse de fréquentation de JavaOne continue mais avec tout de même 12 000 participants.
  • 2004: C’est J2SE 5 avec les Generics, les annotations, les enums, foreach, le boxing/autoboxing, les varargs. 14 000 personnes à JavaOne.
  • 2005 restera une année plus creuse pour java,  15 000 participants se retrouvent tout de même à JavaOne. De son coté, C# 2 inclus les generics et les closures.
  • 2006: J2SE 6 avec les nombres à virgule flottante hexa décimaux (ah ?), l’API de scripting, les annotation processing, les stackmaps et aussi une amélioration des performances. C’est aussi JEE 5 et le lancement de l’openJDK. 13 personnes à JavaOne. En 2007 JavaFxScript est rendu open source, C# 3 sort mais pas de changement de Java.
  • 2008 : 15 000 personnes à la JavaOne, JavaFX 1.0 sort mais toujours pas de changements du langage.
  • 2009: Toujours autant de participants à JavaOne, JEE 6 sort mais toujours rien pour Java.
  • En 2010 Oracle rachète SUN, JavaOne est fait en même temps que OracleOW, JavaFXScript est arrété et Java n’évolue plus. IBM adopte l’OpenJDK plutot qu’Apache Harmony et Oracle parle enfin de J2SE 7 et 8. Oracle poursuit Google en justice pour violation de copyrights et vol de brevets sur android (basé sur Apache/Harmony).
  • En 2011 nous verrons J2SE 7 avec les switch sur les String, le type inference, le multicatch (sans violence), try-with-resource, encore un nouveau système d’I/O, et fork-join concurrency. JavaOne et OracleOW sont de nouveau séparés.

try-with-resources

try (FileReader fr = new FileReader("App.java");
  BufferedReader br = new BufferedReader(fr)){
 
  String line = null;
  while (line = br.readLine() != null){
    System.out.println(">>" + line);
  }
} catch (IOException ioEx){
  ioEx.printStackTrace();
}

Multicatch

try {
  Class c = Example.class;
  Field f = c.getDeclaredField("field");
  f.set(null, "12");
} catch (NoSuchFieldException|IllegallAccessException x){
  x.printStackTrace();
}

Type Inference

Map<string, list<integer="">&gt; map = new Hashmap&lt;&gt;();
</string,>
  • En 2012 nous aurons le droit à J2SE 8 avec les expressions lambda, les “virtual interface extension methods”, “bulk data operation”, et peut-être les annotations sur les types, la modularisation…

En conclusion

Neal conclue par les priorités d’Oracle qui seraient la facilité d’écriture de code, sa lisibilité, et puis les performances notamment avec le support des processeurs multi-core. Enfin pour Neal, c’est une bonne chose qu’Oracle soit “aux commandes” de java qui avait besoin de çà pour avancer, et surtout avancer dans la bonne direction. Il regrette tout de même le procès à Google qui a pour effet de diviser la communauté Java.

Bonus

Au milieu de sa présentation Neal Gafter avait proposé 2 puzzles. Le second avait déja été exposé par Joshua Bloch (co-auteur du livre java puzzles)  aux Devoxx 2010 mais pour ceux qui le découvriraient cela vaut le détour:
No Pain, No Gain:

public class Rhymes{
  private static Random rnd = new Random();
  public static void main(String[] args){
    StringBuffer word = null;
    switch(rnd.nextInt(2)){
      case 1: &nbsp;word = new StringBuffer('P');
      case 2: &nbsp;word = new StringBuffer('G');
      default:&nbsp;word = new StringBuffer('M');
    }
    word.append('a');
    word.append('i');
    word.append('n');
    System.out.println(word);
  }
}
  1. Pain, Gain ou Main (de façon aléatoire)
  2. Pain ou Main (de façon aléatoire)
  3. Main (toujours)
  4. Autre chose

J’éditerai la réponse dans quelques jours :) (allez quand même 1 indice: il y a 3 erreurs différentes dans ce code)

It’s elementary (le plus dur):

public class Elementary {
  public static void main(String[] args) {
    System.out.println(12345 + 5432l);
  }
}

Quel est le résultat ?

  1. 66666
  2. 17777
  3. Autre chose

Indice: Mais que fait la police ?

Microsoft Azure For Java


Une fois sa présentation terminée, Neal a fait intervenir un de ses collègues de chez Microsoft France pour promouvoir le cloud de Microsoft qui supporte le langage Java. La session était articulée autour d’une démonstration du produit et d’un discours qui cherchait à séduire l’assistance manifestement adepte de Java.
Clairement positionné en concurrent d’Amazon et GoogleApp Engine, la plate-forme propose une interface pour déployer sur le cloud avec Eclipse, Visual Studio et en ligne de commande grâce à un starter kit.

Microsoft Azure For Java permet de gérer le front-end et le back-end en proposant entre autre une base SQL, NOSQL, du file storage, …
Les drivers JDBC sont implémentés et Hibernate fonctionne. On peut également choisir la JRE de son choix et son serveur d’application. Il y a un starter kit avec Tomcat.

RabbitMQ

RabbitMQ est un système de messaging open source entre applications. Ses principaux atouts sont l’implémentation AMQP, un standard open source pour le messaging, le support de nombreux langages et sa “scalabilité”.
Rob Harrop, développeur senior sur le projet, insiste tout d’abord sur la profonde différence entre AMQP et JMS: “Forget what you know !”.

Après avoir lancer RabbitMQ sur son poste, il commence par présenter l’interface de gestion web. On y retrouve également différentes statistiques sur les messages qui transitent.
Rob expose ensuite les 2 concepts de base de RabbitMQ: les “queues” et “exchanges”.
Les messages sur les queues peuvent transiter sous forme de String, XML, JSON, …

Puis nous avons le droit à une longe démonstration de la plate-forme de messagerie avec des l’envoie et la réception de message depuis plusieurs applicatifs écrits dans des langages différents et avec différents protocoles. Rien de moins que Java, Python, Erlang et JavaScript (avec NodeJS) pour les langages et AMQP et STOMP pour les protocoles.

Architectures découplées

Theo Schlossnagl est le fondateur de plusieurs sociétés de conseil, il est également auteur du livre Scalable Internet Architectures et participe à un nombre impressionnant de projets open source, dont nodejs sur lequel il développe l’implémentation AMQP.
S’il ne fallait retenir qu’une seule session de ces deux jours, ce serait sans aucun doute celle là. Le charisme du personnage et son discours bien trempé ont permis de remettre quelques idées à plat.

Loin d’être sceptique sur les architectures décentralisées dans le cloud, il souligne quelques points. En effet le cloud ne résous pas tous les problèmes. Ainsi toutes les entreprises ne souhaitent pas forcément faire sortir toues leurs données de leurs serveurs. Il nous met également en garde sur le fait que ce n’est pas parce qu’une application est déployée sur 100 serveurs que celle ci va savoir s’en servir pour améliorer ses performances.

Pour Theo, avant de penser à scaler en rajoutant une instance pour son application, il faut faire un travail de recensement des flux de l’application. D’après son expérience, rien n’est jamais comme on pense que c’est fait: une transaction en trop lors des écritures en base, des allers retours client/serveurs inutiles, … Bref il préconise la ‘data flow map’ basée sur la réalité et non sur le supposé.

Dans un deuxième temps il montre que l’expérience utilisateur sur une application influe directement sur l’architecture technique à mettre en place. Il rappelle que les systèmes finissent toujours par être en erreur à un moment ou à un autre et qu’il faut prévoir ces cas. Le cas le pire étant les systèmes qui ne répondent que de façon occasionnelle (un serveur complètement tombé peut être redémarré).
Dans une démonstration d’une application sociale qui récompenserait l’utilisateur pour une action sur le site, par exemple se logger, il montre l’importance de choisir son architecture de telle sorte que la main soit rendue à l’utilisateur dès lors qu’il est connecté. Cette stratégie est bien meilleure que d’attendre que le calcul de la récompense soit terminé, surtout si une panne ou une surcharge intervient sur le système responsable de ce calcul.
Pour la démonstration, il utilise NodeJS. Selon lui, JavaScript n’est pas aussi performant que Java, mais bien suffisamment pour faire tourner un serveur web. Et surtout “JS does scale”.

Si vous êtes intéressés par les problématique de ces architectures, je vous conseille de, comme moi, vous jeter sur son livre !

Flex 4.5

Michaël Chaize, ingénieur et avant-vente chez Adobe, nous a présenter Flex 4.5. La présentation était forcément un peu commerciale mais elle a eu le mérite de donner la parole à des pro-flex quand aujourd’hui on n’entend plus parler que de HTML 5.

Après quelques rappels sur l’offre, Michaël a insisté sur la popularité de la plateforme. Adobe se targue d’avoir signer un accord avec 19 des 20 acteurs majeurs de l’IT. Il souligne tout de même qu’après un premier refus, Apple autorise aujourd’hui d’installer sur ses terminaux mobiles des applications dont le code a été généré. C’est grâce à cette technologie qu’il est donc possible de lancer ses application Flex sur IPhone/IPad.
Adobe propose donc avec son nouveau SDK de développer une seule fois une application mobile qui pourra être déployée sur les plateformes tournant sur Android, iOS et sur le Blackberry PlayBook.

Des composants spécifiques aux terminaux mobiles ont été ajoutés ajoutés ainsi que les comportements classiques comme le retour arrière. La gestion de la mémoire a été optimisée avec comme la destruction automatique d’une vue dès que l’on passe à la vue suivante (configurable). La gestion des résolutions d’écran différentes entre les terminaux fait également partie du lot.
Michaël nous assure que les performances sont les mêmes que pour une application native.

La démonstration a continué avec l’implémentation en quelques minutes d’un client (lecture) twitter. Il y a aussi eu l’intervention sur scène d’un développeur qui faisait partie du public, pour montrer son application flex tourner sur 3 différentes machines.

La fin de la démo montrait une application utiliser le LiveCycle, l’offre payante de Flex qui permet ici d’incorporer très facilement la vidéo et le son (visioconférence).

Enfin il a rappelé que grâce à la communauté open source, tous les outils disponibles sur Java existent sur Flex: Tests unitaires, Sonar, intégration continue avec Maven ou Ant, … (pour ma part je fais aussi des tests IHM automatisés). L’IDE FlexBuilder est payant mais on peut aussi utiliser IntelliJ IDEAL (payant aussi).

ElasticSearch

Shay Banon est le créateur d’elasticsearch qu’il voit comme le successeur de Compass. C’est un projet open source de recherche basé sur Lucene.

Aucun slide pour cette présentation mais une démo assez complète des fonctionnalités de l’outil. Tout d’abord il insiste sur sa “scalabilité” en déployant et supprimant à chaud des nouvelles instances du moteur.
Pour la recherche, l’indexation et l’ajout de contenu tout se fait facilement en REST avec du JSON. Il existe également une API Java et Groovy mais qui ne seront pas montrées.

Mis à part les recherches classiques, Shay a fait une démonstration d’un Percolator. C’est une requête pré-enregistrée qui renvoie ses résultats à la fin d’une indexation. Il a aussi parlé des Facets. Une facet est un élément fournit dans chacun des résultats. Elle permet d’enrichir la réponse dans sa globalité (pour un usage statistique par exemple).

What’s Next Paris, Jour 1

Monday, June 6th, 2011

Les 26 et 27 mai se déroulait au Grand REX une conférence java organisée par Zenika. Les intervenants se sont succédé pendant 2 jours sur des sessions de 60 à 90 minutes.

Cloudfoundry

Le premier à se prêter à l’exercice était Adrian Coyler, le CTO de springsource.
Dans sa présentation, il insiste sur les nouveaux besoins : de nouveaux modes d’interactions, de nouvelles façons d’accéder aux applications et donc de nouvelles façons de développer (langages récents, frameworks innovants) et déployer. Ainsi la virtualisation permet de gérer les besoins de dimensionnement des applications beaucoup plus rapidement. Les applications “sociales” sont aussi de plus en plus nombreuses.

Ainsi il présente le concept de PaaS et l’offre dans ce sens de springsource vmware : Cloud Foundry. Clound Foundry est open source (cloudfoundry.org), supporte plusieurs langages (Java, Grails, Rails, Ruby, JavaScript avec node.js). Clound Foundry propose également plusieurs services tels que MySql, MongoDB, Redis, …

3 formats sont proposés :

  • le cloud public, par exemple pour déployer des applications ‘sociales’
  • un cloud privé, que l’on peut installer sur ses serveurs
  • puis le micro cloud que l’on peut installer sur son poste de travail pour tester !

Il nous montre ensuite comment interagir avec le cloud depuis une interface en lignes de commandes ou bien une vue de STS (l’IDE springsource basé sur eclipse).

Une réserve est tout de même émise sur la ‘scalabilité’. Ce n’est pas parce qu’une application est sur le cloud qu’elle est ‘scalable’. Le ‘design to scale’ prend alors toute son importance.

Pour conclure je reprendrai son “PaaS, this is where things are going”.

Orion

Boris Bokowski, ingénieur chez IBM et leader technique sur eclipse, a commencé sa présentation par le constat que beaucoup de choses étaient aujourd’hui réalisées dans le navigateur web : les spécifications, le suivi d’anomalies, la consultation du contrôle de version, la navigation dans le système de fichier,…
Bref, tout sauf l’IDE !

Il parle ensuite de la difficulté de développer et d’intégrer des plugins dans les IDE. Pareil pour les compilations en script avec lesquelles les dépendances sont difficilement gérables.

C’est donc le pari d’Orion que d’amener l’IDE dans le navigateur. Très vite, Boris passe à la démonstration pour nous présenter les fonctionnalités déjà implémentées.
Ainsi on trouve la classique indentation de code, le formatage, la complétion de code (simpliste), le debugging, la gestion de configuration (avec le support de git), …

L’intérêt majeur est en fait l’intégration très simplifiée de plugins grâce aux standards du web. Ainsi on peut utiliser des services proposés par d’autres sites comme google page speed, des générateurs de css, du formatage de code, des validateurs de normes de développement, des outils de génération d’expressions régulières, bien sûr le debugging avec par exemple firebug sous firefox,…
Il apprécie aussi, avec le sourire, le fait que la gestion des onglets est maintenant gérée par l’éditeur du navigateur et non plus par l’IDE.

Orion propose une version bêta publique pour chaque millestone et prévoit une première release pour juin.

Clojure

Howard Lewis Ship, le créateur d’entre autres Tapestry, HiveMind et Cascade, a fait une présentation du langage fonctionnel Clojure, qui s’exécute dans la JVM. La session était d’un haut niveau et la syntaxe du langage ne rendait pas la tâche aisée pour le néophyte.
C’était donc une première approche de ce langage avec quelques exemples de fonctions pourtant répandues dans ce genre d’exercice, mais qui auraient tout de même mérité que l’on s’attarde un peu plus sur chacun d’entre elles.

Gestion de la mémoire

Une session sur la gestion de la mémoire, du processeur jusqu’au langage java en passant par l’OS, qui m’a laissé perplexe (même si cela m’a rappelé quelques cours d’architecture). Aux dires des personnes qui avaient invité Jevgeni Kabanov, le CTO de JRebel, c’est au 4ème visionnage de la session que l’on comprend vraiment ce que raconte cet intervenant survolté.

SQLFabric

L’après-midi a continué par la présentation de SQLFabric. J’ai surtout retenu qu’aujourd’hui, tout le monde ne développait pas un site qui gère des centaines de milliers d’utilisateurs avec des péta octets de données et donc qu’il ne fallait pas tomber dans le choix systématique et à la mode du NoSQL.

WebSockets

La journée s’est finie par une brillante présentation des WebSockets par Brad Drysdale de chez Kaazing.

Brad commence par le constat que nos applications web ne font pas du temps réel, ou alors de façon vraiment pas efficace et/ou très coûteuse en bande passante ou encore en passant par des plugins. Mais ces solutions de contournements ne sont pas prêtes pour le “cloud” car elles ne sont pas “scalables”.

L’enjeu est donc d’avoir des connexions “full duplex” entre les clients et le serveur et non plus comme aujourd’hui simplement “half duplex” en faisant du polling, du long polling ou encore du streaming.

La réponse à toutes ces problématiques est donc l’utilisation des websockets, qui viennent avec HTML5.

En effet le mécanisme implique une consommation drastiquement diminuée de la bande passante (2 octets en plus par trame une fois le protocole négocié contre au minimum 800 octets pour chaque trame HTTP).
Les autres avantages abordés sont la standardisation du protocole, du full duplex sur une seule socket, le support des firewalls, proxy et routeurs sans problème, la possibilité de récupérer des données depuis plusieurs sites, un seul port ouvert (le même que HTTP), et enfin la possibilité de sécuriser les flux comme HTTPS le fait, via TLS.

Retour sur les après-midi du développement sur Windows Phone 7

Tuesday, December 7th, 2010

La présentation du 03 Décembre réalisée par Pierre Cauchois (microsoft france) ainsi que par Julien Corioland et Simon Ferquel, nous a permis de voir la plupart des fonctionnalités présentes dans la version 1 du SDK de Windows Phone 7. Pour citer quelques fonctionnalités de celui-ci nous avons:

  • Géolocalisation [lien]
  • Gestion des médias et de la radio [lien]
  • Gestion de la vibration du téléphone
  • Interactions possibles entre Silverlight et le Javascript
  • Thème METRO
  • etc

Pour voir toutes les fonctionnalités disponibles, (more…)

Retour sur Devoxx 2010

Wednesday, November 24th, 2010

Valtech était à Devoxx 2010, une longue semaine de travail et de discussion et un retour d’Anvers fatiguée mais bourrée d’idées.

Emmanuel Bernard, Hibernate

Tout d’abord félicitations à Stephen Janssen et à l’équipe de Devoxx : un cinéma avec des fauteuils confortables, une logistique pour 3 000 personnes, des conférences intéressantes sur des sujets variés et la retransmission sur Parleys pour que ceux qui n’ont pas fait le déplacement puisse profiter des meilleures présentations.

Devoxx 2010, c’est un programme quotidien très chargé (5 jours de 9h30 à 22h pour les plus assidus et jusqu’à 6 salles en parallèles) donc énormément de sujets et je ne reviendrai pas sur tout en détail.

C’est aussi beaucoup de discussions entre les sessions et plus tard en soirée sur les langages, notre métier et diverses choses qui font que des réseaux se forment.

Que contenait la fournée 2010 ?

D’abord les annonces officielles d’Oracle sur Java EE 6 et Java SE 7 ainsi que sur le devenir d’Open JDK. Open JDK restera et Java sera plus simple, plus pratique et plus facile à utiliser. Plusieurs présentations JPA/Hibernate viennent compléter ce tableau. Les évolutions les plus attractives de Java SE comme le projet Lambda (langage fonctionnel) ou le projet Jigsaw (modularité et gestion des dépendances) sont reportés à Java SE 8. La vie semble reprendre après une période difficile.

Un gros thème NoSql cette année, même si ça n’est pas strictement du Java. Cloudera (Hadoop, HBase), Cassandra, MongoDB, Infinitest et plusieurs grands site Web utilisateurs de bases NoSql avaient fait le déplacement. Des présentations assez inégales mais qui donnaient l’opportunité aux développeurs Java de découvrir cet univers. Dans ce thème aussi une présentation très intéressante des fondamentaux du cache distribué et Ehcache The essence of Caching.

Autre gros thème cette années, les interfaces utilisateur avec des sujets sur Android, HTML5 et Flex avec la même préoccupation qui revient constamment “On n’est pas obligé de faire des IHM moches avec Java”. Une très belle présentation de Romain Guy et Chet Haas Dive into Android avec du code en live et des explications sur le graphisme avec Android.

DevOps

Bien sûr quelques sujets sur les fondamentaux Java sur les bonnes pratiques du développeur, avec un zeste de Cloud cette année? J’ai un peu zappé car d’autres sujets mon plus intéressé mais j’ai un peu regretté de n’avoir pu accéder à aucune  des présentations de Joshua Bloch (Effective Java, Java Puzzle), trop de monde à chaque fois. Un peu de Scala et de Groovy/Grails mais les langages n’étaient pas très représentés.

Dans  les présentations plus processus une mention spéciale pour From Dev/Ops to DevOps. Amazing the difference one character can make (en photo). DevOps est un mouvement émergeant qui vise à rapprocher les équipes de développement et les opérations (la production en français) pour mieux résoudre les problèmes de déploiement et de suivi de production. Le sujet avait aussi été abordé au CITCON en relation avec le Continuous Deployment (aussi présent à Devoxx mais on doit faire des choix vu le nombre de sujets et je ne l’ai pas vue). On en reparlera !

Et pour finir un peu d’humour les derniers jours avec les enregistrements Live des podcasts Java Posse et Les Cast Codeurs.

On attend avec impatience l’édition 2011, mais en attendant voilà des dizaines de pistes à explorer avant l’années prochaine.

Détecteur d’événements sous Android : l’application BigBrother

Thursday, May 6th, 2010

Le SDK d’Android propose un modèle de composants et des APIs pour gérer différents dispositifs qui font la particularité des plateformes mobiles : connectivité, capteurs, téléphonie, multimédia …
Dans cet article nous allons nous intéresser à la détection d’événements liés à la téléphonie et la géolocalisation.

Un modèle de composants adapté

L’activité est le premier composant essentiel permettant Anatomie de l'applicationde gérer le cycle de vie d’une application et l’interactivité avec l’utilisateur ; mais qu’en est-il lorsqu’on souhaite exécuter un traitement en tâche de fond, qui démarre automatiquement, et qui doit réagir à des événements externes comme un appel téléphonique ? Le framework propose pour cela des composants de type service et receiver qui utilisent des intentions (Intent) pour collaborer.

Les services : pour des traitements en tâche de fond

Le service peut être vu comme une activité à longue durée de vie (potentiellement infinie), en tâche de fond, et privée d’IHM; il est implémenté par une classe qui doit étendre android.app.Service.
Démarrage du service : à la différence d’une activité, l’utilisateur ne dispose pas de raccourci dans son bureau, il faudra donc démarrer le service explicitement de manière programmatique (souvent depuis une activité).
Les services d’une application doivent être déclarés dans son manifeste :

  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity .../>
    <service android:name=".Service" />
  </application>

Un service peut, comme une activité, enregistrer des écouteurs spécialisés (listeners) pour obtenir des informations sur un capteur particulier, il est alors responsable du désenregistrement des listeners.

Receiver : un déclencheur léger

Le receiver est un composant susceptible de recevoir des intentions exprimées par le système Android ou d’autres applications. Les intentions symbolisent des requêtes (ou souhaits) et sont orchestrées par le framework ; cela offre un cadre simple et générique qui fait penser au style d’architecture REST (ou au Web), et confère un niveau d’abstraction intéressant pour faciliter l’intégration de composants. (more…)

Valtech et Talend à l’heure du MDM…

Tuesday, April 20th, 2010

logo talendRetours du Talend Partner Summit, 15 avril 2010

En 2008, Valtech Technology signait un partenariat avec Talend, jeune éditeur de solutions d’intégration de données Open Source et challenger d’un marché de l’ETL dominé par les solutions propriétaires coûteuses et ciblant avant tout les projets de Business Intelligence.

De ce fait, le positionnement initial de Talend visait l’intégration opérationnelle, c’est-à-dire la synchronisation de données entre applications. Un domaine où les développements spécifiques étaient légions (les fameux « batchs » de données) et sur lequel l’ETL Talend Open Studio était particulièrement compétitif : outil intuitif et facile d’utilisation, connectable à de multiples sources de données grâce à la richesse de ses connecteurs, proposant une large palette de composants prêts à l’emploi pour traiter les données et un design graphique des flux de données au sein d’une interface familière au commun des développeurs Java, le tout sans coût initial d’achat de licences !

Nombre de DSI ont tenté l’aventure et les gains de productivité, d’évolutivité et de maintenabilité des développements middleware ont rapidement convaincu. J’aurai même tendance à dire que le succès de l’ETL Talend, et plus généralement de l’ETL Open Source, a fait de l’ombre à d’autres stratégies d’intégration middleware (notamment l’ESB) car ces outils ont aussi la capacité à gérer des flux en quasi-temps réel ! (Grâce à la technologie de Change Data Capture, ou encore l’exposition possible d’un flux en tant que WebService.)

Depuis, Talend a convaincu certains clients d’utiliser l’ETL sur des problématiques d’alimentation d’entrepôt de données décisionnel (là où la concurrence est plus rude avec des solutions très performantes comme la solution Informatica Powercenter…) et a aussi enrichi son offre : une ligne de produits dédiée à la qualité de la donnée (Talend Data Quality, proposant des fonctions de Data Profiling, Data Cleansing, de portail Web de reporting sur la qualité des données), et surtout, depuis le début de l’année 2010, une offre de Master Data Management : Talend MDM.

Alors, que dire sur le MDM ? Certes, je ne vais surprendre personne en disant que les problématiques de Data Management sont revenues ces dernières années sur le devant de la scène. La faute à des référentiels de données de piètre qualité : donnée incomplète, incohérente, non valide, doublonnée, associée à des valorisations multiples… Le constat d’une mauvaise qualité des données, pourtant vitales et stratégiques aux activités de l’entreprise (le « patrimoine informationnel » de l’entreprise), remonte à tous les niveaux de décisions. Car la donnée de référence est par définition diffusée à l’échelle du SI : applications de CRM, de finance, de RH, de logistique, etc…

Quelles sont les raisons de ce constat ? Citons entre autre : un manque de maîtrise dans la modélisation des données, le manque de contrôles appliqués sur la saisie, des responsabilités mal définies sur la gouvernance des données, des IHMs de saisie souvent obsolètes (technologies 90s’), difficilement maintenables par manque de compétences ou d’intérêt, utilisateurs métier réfractaires à leur utilisation, process d’acquisition et de diffusion des données non rationalisés et mal maîtrisés…

Alors le Master Data Management, qui est à la fois une démarche et un outillage, vise à résoudre ces problèmes soulevés sur la mauvaise qualité du patrimoine informationnel de l’entreprise. Les aspects démarches et outillage se complètent. En effet, aucun outil ne pourra par exemple assurer la pertinence d’une modélisation adaptée à l’ensemble des besoins de l’entreprise, ni encore la cohérence d’une architecture centrée autour d’un Hub de données (le « point de vérité ») et alimenté par de multiples points d’acquisition. Le projet de Data Management est ainsi avant tout une démarche d’urbanisation du SI.

En terme d’outillage, Talend rentre donc sur le marché du MDM avec une solution proposée en 2 versions : la Community Edition (gratuite) et l’Entreprise Edition (version à souscription). Le principe est le même que sur les deux lignes de produits précédentes. La version gratuite permet d’utiliser l’outil sans restriction (licence GPL) et la version payante apporte des briques qui facilitent le travail en équipe et l’exploitation de la plateforme de production.

Talend MDM est un outil complet. Il centralise en une seule plateforme les fonctions de gestion, de gouvernance et d’intégration des données. Citons notamment les fonctionnalités suivantes :

  • un éditeur XML pour modéliser (ou consulter) la structure des entités de référence (vue uniquement hiérarchique) ;
  • le Studio talend pour définir les jobs d’intégration (connecteurs spécifiques fournies pour les entités du MDM) ;
  • un gestionnaire d’évènements pour déclencher les contrôles nécessaires à la validation des données et les jobs assurant leur diffusion ;
  • un module de BPM (basé sur la solution de BPM Open Source BonitaSoft) pour assurer les workflows collaboratifs de contrôle et de validation des données ;
  • une appli web pour la saisie et le stewardship des données (supervision de la qualité des données).

La solution de Talend vise à outiller les référentiels « génériques ». Elle ne fournit pas de modèle de données pré-défini orienté Produit ou Client et se distingue ainsi de bons nombres de solutions de MDM PIM ou CDM. La concurrence est donc plutôt à chercher actuellement du côté de la solution EBX Platform (Orchestra Networks).

Mais attention, le marché du MDM « générique », boosté par l’offre de Talend, risque de voir arriver sous peu de nouveaux entrants. L’américain Informatica n’a t-il pas annoncé le rachat de l’éditeur de solutions MDM (multi-domaines) Siperian, quasiment le même jour que la sortie de Talend MDM ?!

En tout cas, nul ne se plaindra d’une offre de solutions MDM élargie car la cause est noble : assurer la qualité des référentiels de données afin de fiabiliser les entrants des processus opérationnels et décisionnels à l’échelle de l’ensemble des activités de l’entreprise.

Bertrand Alazard
Valtech technology
Consultant Architecture de SI et Data Management

Soirée Scala du Paris JUG

Wednesday, April 14th, 2010

Présentation de Sadek Drobi

La Soirée Scala au Paris JUG a été riche en découvertes. Les langages fonctionnels et Scala sont encore peu répandus et tout le monde était curieux de découvrir ces nouveaux concepts.

 

Mais avant de commencer il a fallu patienter un peu :

  • une annonce de l’Agile France par Sébastien Douche. Cette conférence aura lieu du 31 Mai au 1 Juin 2010.
  • la présentation des sponsors 2010 dont Valtech fait partie
  • la présentation d’un nouveau membre de l’équipage du Paris JUG, moi, terminée par quelques mots sur Duchess France et le blog en ligne depuis quelques semaines

 

Les concepts des langages fonctionnels

Pour commencer, la présentation de Sadek Drobi de Valtech Technology Consulting sur  les concepts de base de la programmation fonctionnelle.

D’abord les types et l’inférence de type. Puis la fonction qui est un concept très simple : une fonction prend des choses en paramètre et renvoie quelque chose.  Dans les langages fonctionnels, c’est un type comme un autre qui peut être utilisé de bien des manières. Sa simplicité permet de la définir au fil de l’eau, de la réutiliser, de la combiner, de la transformer.

La présentation très pédagogique pour les débutants a été ponctuée d’exemples en Scala codés en live.

Faute de temps, les aspects plus spécifiquement OOP  et les traits ont été balayés très rapidement.

 

Scala par la pratique

La seconde présentation a été assurée par Romain Maton et Nicolas Jozwiak de la société Xebia. Cette présentation a été plus concrète et plus spécifiquement Scala.

Les présentateurs ont tout d’abord présenté les origines de Scala et mis en évidence sa croissance récente dans l’ensemble des langages de la JVM.

Viennent ensuite quelques exemples concrets d’utilisation et une présentation des capacités du pattern matching, de l’API Actor qui permet une meilleure gestion de la concurrence via des échanges asynchrones de messages non mutables,  et des traits, un moyen d’étendre les fonctionnalités d’un objet dynamiquement par une technique de mixin.

Scala a déjà quelques frameworks réputés : Akka, un framework qui étend l’API Actor, ainsi que Lift, un framework de développement Web.  Quelques outils de développement (pluging Eclipse ou IntelliJ, ScalaTest) et nous voilà prêts à développer en Scala.

La dernière partie à été consacrée au futur de Scala, le potentiel et les évolutions prévues pour ce nouveau langage mais aussi le challenge qui résulte du changement de paradigme des langages fonctionnels.

 

Et ça n’est pas fini

Comme d’habitude, la soirée s’est terminée dans un café proche pour diner ensemble, débattre de tout ce que l’on a découvert et discuter avec les speakers.

 

La prochaine rencontre du Paris JUG est prévue le 11 mai sur le thème “Share, Build and Deploy” avec un focus sur l’outil de gestion de configuration Git, Maven 3 et l’outil de déploiement Deployit.

Programmation par contrat avec .Net

Monday, May 4th, 2009

Ce billet souhaite inaugurer le début d’une série de billets pour mettre en lumière l’ensemble des technologies gravitant autour de la plateforme .Net de Microsoft, l’intérêt que porte Valtech à cette plateforme ainsi que le savoir faire de la communauté .Net au sein de Valtech.

Pour ce premier billet, nous allons nous attarder sur un projet lancé par Microsoft et voué à rejoindre la version 4 du Framework .Net. Cet outil est actuellement déjà disponible, téléchargeable et utilisable pour peu que l’on dispose de la version 2008 de Visual Studio. Ce projet nommé « Code Contracts » consiste, comme son nom l’indique plutôt bien, à la mise en œuvre pour la plateforme .net (et donc pour l’ensemble des langages de la plateforme) du concept de programmation par contrat.

Le concept est relativement simple et « Code Contract » permet de définir au niveau d’une méthode des pré-conditions (instruction Contract.Requires), des post-conditions (instruction Contract.Ensures) et des objets invariants (instruction Contract.Invariant) c’est-à-dire qu’un objet doit remplir une condition pendant tout le temps d’un traitement (de façon à ce que des variables ne prennent pas des valeurs inattendues). Lorsqu’un des contrats n’est pas respecté, une exception est levée du type ContractException indiquant la condition non respectée.

Une telle approche doit permettre d’établir un contrat fort avec une méthode. Il n’est alors possible de l’appeler qu’avec des données valides c’est-à-dire vérifiant les pré-conditions sous peine de lever une exception. Les erreurs de traitements ou les bugs sont plus rapidement détectés grâce aux différents types de contrat disponibles.

Un autre avantage de ce framework est de pouvoir vérifier certains contrats de façon statique à la compilation et de pouvoir ainsi signaler très tôt des conditions non vérifiées au développeur et ceci à travers des warnings.

Parmi les autres objectifs fixés du projet, on notera également la possibilité d’utiliser ces contrats pour générer automatiquement des tests unitaires plus pertinents en évitant les valeurs ne vérifiant pas les pré-conditions ou en utilisant les pré-conditions pour générer des tests avec des valeurs limites.

On peut noter également que cette démarche simplifie l’écriture de tests unitaires car certains contrôles sont maintenant faits par contrat à l’intérieur de la méthode. Les tests unitaires se bornant alors à appeler la méthode avec plusieurs jeux de données et à vérifier que la méthode ne lève pas d’exception de type ContractException. La programmation par contrat n’ôte pas l’absolue nécessité d’écrire des tests unitaires mais permet d’exprimer dans le code des conditions qui auparavant ne pouvaient être que « vérifiées » par l’utilisation de tests unitaires.

« Code Contracts » devrait également pouvoir à terme servir à générer de la documentation plus pertinente en affichant les pré-conditions et les post-conditions dans la documentation des méthodes.

Quelques informations sur l’installation et la configuration.

L’installation du package téléchargé (cf en bas de cet article) intègre directement les fonctionnalités dans Visual Studio.

L’activation des fonctionnalités se fait dans les propriétés du projet, où un onglet a été ajouté (cf image ci-dessous). On peut alors activer les contrôles à la compilation et/ou ceux à l’exécution.

Pour pouvoir utiliser l’API fournie, il convient d’ajouter une référence dans le projet à l’assembly « Microsoft.Contract ».

Voici donc des exemples concrets de code source.

Toutes les méthodes pour définir des contrats sont des méthodes statiques définies dans la classe Contract présente dans le namespace System.Diagnostics .Contracts.

  • Définition de pré-conditions :
Contract.Requires( x ! = null );
 
Contract.Requires( x > y );
  • Définition de post-conditions :

normale :

Contract.Ensures( this .F > 0 );

sur une levée d’exception (avec T le type de l’exception) :

Contract.EnsuresOnThrow<T>( this.F > 0 );

sur la valeur de retour (avec T qui est le type de retour de la fonction) :

Contract.Ensures(0 < Contract.Result<T>());
  • Définition d’un objet invariant (contrat vérifié tout au long du traitement) :
Contract. Invariant ( this .y >= 0 );
Contract. Invariant ( this .x > this.y );
  • Définition d’une assertion (le contrat doit être vérifié à un endroit précis du traitement) :
Contract.Assert( this .x == 3, "la valeur devrait être 3" );

Voici donc un exemple un peu plus complet :

public class CodeContract
{
  public static void Main(string[] arg)
  {
    CodeContract cc = new CodeContract();
    cc.Test1();
    cc.Test2();
  }
  public void Test1()
  {
    DivideUnderZero(5, 3);
  }
  public void Test2()
  {
    DivideUnderZero(5, 0);
    //Warning à la compilation (problème détecté de façon statique)
    //contracts: requires is false: denominateur doit être different de 0
  }
  public float DivideUnderZero(int num, int den)
  {
    Contract.Requires(den != 0, "denominateur doit être different de 0");
    Contract.Requires(num > den);
    Contract.Ensures(0 < Contract.Result<System.Single>());
 
    //Warning à la compilation (problème potentiel détecté mais résolu lors de l'execution)
    //contracts: ensures unproven
    return num / den;
  }
}

Pour conclure, je pense que l’introduction de la programmation par contrat introduit dans le framework .Net par une approche très facile à mettre en œuvre aide le développeur à détecter rapidement ces erreurs lors de l’écriture du « bon code ». Ceci convient tout à fait à l’écriture de code métier dans lequel les erreurs peuvent coûter cher et être difficilement détectables. La programmation par contrat est donc un nouvel outil dans l’escarcelle du développeur.

D’aucun pourrait reprocher à cette approche le fait d’avoir un code moins ouvert à l’évolution. Auquel cas je répondrais que toute évolution du code nécessite de toute façon la modification des tests unitaires et donc que la modification des contrats fait aussi dans cette logique d’évolution de façon à écrire et garantir le bon fonctionnement du code écrit.

Sources :
Manuel Utilisateur
Site Web
Téléchargement de Code Contract: