Neo4J et Spring Data, avec Florent Biville

Ce premier Octobre, Zenika accueillait de nouveau le groupe Meetup dédié à Neo4J. L’occasion de faire connaissance avec Spring Data grâce à Florent Biville.

Echauffement

Débuter un Meetup par l’interlude commercial, ce n’est pas nécessairement le meilleurs départ. Mais Cédric Fauvet connait au moins le public auquel il a à faire et il fut lui-même développeur. En fait, il a même évoqué deux ou 3 choses qui ont piqué ma curiosité !

Meetup Neo4J Octobre 2013

La première réelle application de la théorie des graphes semble être celle des 7 ponts de Königsberg. Le seigneur du coin voulait savoir s’il était possible de faire un trajet dans la ville en passant une fois et une seule par chaque pont. Ce n’est pas possible et l’on peut s’en rendre compte de manière empirique, mais c’est Leonhard Euler qui le démontra mathématiquement.

Les 7 ponts de Königsberg

Il n’y avait pas Neo4J à l’époque, mais aujourd’hui on en dispose et on résoud avec d’autres problèmes ayant trait à la théorie des graphes:

  • Bien sûr il y a déjà le cas classique des réseaux sociaux, comme les suggestions de contacts utilisés par Viadeo.
  • Les analyses d’impact sur les réseaux, mis en oeuvre chez SFR.
  • Les calculs de primes de commerciaux, chez Sisco (!) Il ne faut pas moins de 2 clusters pou gérer cela.
  • Le routage des colis chez un grand opérateur en Allemagne.

Aujourd’hui la communauté Française semble se porter plutôt bien, elle compte 362 personnes inscrites sur le Meetup et un nouveau Meetup va démarrer sur Lyon.
Du point de vue de l’actualité, c’est la version 2.0 qui occupe le terrain et doit être le sujet principal de Graph Connect.

Après le pizza-break, place au sujet principale de la soirée.

Spring Data

Nous sommes face à un dilemme aujourd’hui : le monde devient de plus en plus dynamique, ce qui fait la part belle à des bases de données orientées graphe telle que Neo4J. Et pas seulement cette dernière d’ailleurs, mais aussi des solution empruntant le même paradigme:

  • Flock DB, une solution construite par Twitter.
  • Titan, une base de données orientée graphes distribuée.
  • Blueprint, qui est plutôt une abstraction au-dessus des bases de données graphe, mais aussi une stock logicielle offrant des fonctionnalités de plus haut niveau.
  • RDF, l’ancêtre de ces bases de données, qui est une normalisation par le W3C des représentations de données sous forme de triplets.
  • Orient DB qui mixte des fonctionnalités d’une base orientée documents avec une base orientée graphes.
  • InfiniteGraph

Un dilemme disais-je, car si ces solutions adaptées aux problèmes actuels se développent, l’entreprise reste, elle, conservatrice. Elle continue de s’appuyer majoritairement sur les bases de données relationnelles et donc sur les ORM pour assurer la jonction avec le code applicatif.

Meetup Neo4J Octobre 2013

Ces solutions ORM, tel que le standard JPA ne semblent pas poser de problème dans la plupart des cas, pourtant on fait rapidement face à “l’abstraction leak”, à savoir que les paradigmes fondamentaux des SGBDR et des applications sont différents et les ORM tentent de le masquer.

Les bases de données graphe offrent un mapping plus simple et plus naturel. Elles permettent en outre de satisfaire d’autres besoins :

  • L’hétérogénéité des propriétés associées aux noeuds.
  • L’absence de schéma prédéfini. Sur le papier, c’est un problème car il permet une discordance des donnés par rapport à l’intention de structuration. Mais avec Neo4J 2.0 le schéma existe de manière optionnelle.

Il y a-t-il un intérêt à proposer un mapping objet des bases orientées graphe ? Oui, si il offre une réelle simplification et des fonctionnalités intéressantes.

Hibernate OGM, une première approche

Hibernate OGM offre une approche inspirée de l’ORM qui ne convainc pas Florent. D’une part, à l’instant de JPA elle offre le plus petit dénominateur commun des bases orientées graphes, et l’idée de faire entrer toutes les bases de données NoSQL (pas seulement les bases orientées graphes) dans un même moule semble pour le moins un gros challenge…

Tinkerpop Frames

Cette solution se focalise également sur la construction d’une abstraction des bases orientées graphes (et seulement celles-ci). Elle propose son propre langage de requête, Gremlin. Las aujourd’hui le langage de requête de Neo4J, Cypher est l’un des atouts important du produit et de gros efforts sont consentis pour en améliorer les fonctionnalités. On se retrouve donc dans une course à la fonctionnalité… que Gremlin peut difficilement gagner.

Spring Data

Suivant l’idée d’origine de Spring, il s’agit d’une brique très légère. En fait, à l’origine même de ce sous-projet, il y a la rencontre entre Emil Eifrem et Rod Johnson, à savoir respectivement les créateurs de Neo4J et de Spring !

Un atout important de Spring Data est aussi son concept de “multi-store”. Nous avons évoqué la frilosité des entreprises par rapport aux nouveau paradigmes de bases de données. Spring Data adresse cela en permettant des ponts entre différents paradigmes (par exemple relationnel vers graphe) permettant des transitions douces vers ces nouveaux mondes !
D’un point de vue pratique, pour un repository standard, tout ce que l’on a à faire, c’est d’hériter de l’interface GraphRepository<> … et Spring Data s’occupe du reste ! Derrière le rideau, cette interface hérite de quelques autres (je ne vais pas les lister, elles sont sur le slide 31). Derrière le second rideau, au niveau de l’implémentation générée, cela va bien entendu être la “foire aux proxys” ! Bon, comme on dit : on ne peut pas tout avoir !
Spring Data offre d’importantes facilités pour écrire, ou plutôt ne pas écrire, des méthodes de recherches :

  • Des “find”, où la simple convention de hommage va permettre de connaitre les critères de recherche en les mappant sur les paramètres.
  • Des recherches plus complexes s’appuyant sur des clauses Cypher figurant en annotation @Query de la méthode.

En annotant des classes @NodeEntity, on peut spécifier ce qui est persisté et ce qui ne l’est pas, ce qui constitue des arcs, et bien d’autres choses encore !
Les templates Neo4J, à la façon de ce qui existe pour d’autres modules Spring, permettent d’opérer des requêtes de projection en éliminant la plomberie inhérente à l’utilisation brute de la base.

Spring Data offre de nombreuses fonctionnalités supplémentaires, comprenant bien entendu les famaux “cross store storage” que nous avons évoqué au début.

Pour conclure
Une soirée instructive sur les possibilités de Spring Data, bien que j’ai regretté que cela aille un peu vite sur les NodeEntity et que l’on ne s’arrête guère sur les stores multiples, car cela me parait un point clé pour Neo4J en entreprise, bien plus que l’économie de code que permet le framework !
Par ailleurs Florent a initié une série d’articles très bien écrits pour s’initier à Neo4J : le premier de la série est ici.

Note de lecture : Scrum, a Breathtakingly Brief and Agile Introduction, par Hillary Louise Johnson & Chris Sims

Note : 7 ; Une très bonne introduction à Scrum pour l’impatient : brève, claire et bien écrite.

Plutôt qu’un livre, il s’agit d’un livret. Sous sa forme papier il pèse moins de 50 pages (et encore, des pas bien longues). Ce texte se situe à mi-chemin entre le « Scrum en 5 minutes » et le fameux « Scrum and XP from the Trenches » d’Henrik Kniberg. Il se situe plus près du premier titre et ne saurait se comparer au best-seller de notre Suédois préféré.

S’il ne prends pas 5 minutes, il ne nécessite pas tellement plus d’une heure. Le texte se lit d’autant plus vite que le style est vraiment concis et alerte : un vrai plaisir pour le lecteur.

Après une courte introduction (vraiment courte : une page pour expliquer « pourquoi Scrum »), le texte se présente en 3 parties :

La première présente les 3 rôles. C’est clair et le partage des responsabilités et l’état d’esprit attendus sont sans équivoques. Chacun des 3 aspects est plié en une paire de pages, ou peu s’en faut !

La seconde partie traité des « artefacts » : le product backlog, le sprint backlog, le burdown / burnup chart, le tableau des tâches et la définition de terminé. Encore une fois la clarté prime, mais les auteurs ne font pas de raccourcis pour expliquer par exemple l’aspect adaptatif du détail du backlog ou encore comment se présente une User Story.

La troisième partie nous fait voyager au sein d’un Sprint. Si les auteurs parlent de sprint d’une ou deux semaines, ils font le choix de nous présenter un sprint d’une semaine. Les cérémonies sont présentées de manière précise et concise : qu’est-ce qu’on y fait et dans quel ordre.

Petite particularité de l’ouvrage, il parle du « story time », temps dédié à la préparation du Sprint suivant. De l’aveu des auteurs, cela ne fait pas encore partie de Scrum et c’est la première fois que je vois cela évoqué, même si je l’ai moi-même pratiqué.

En appendice, on trouve les valeurs et pratiques agile, donc le fameux manifeste, mais curieusement pas la liste des pratiques et valeurs de Scrum !

Ce texte est un condensé d’un autre ouvrage des mêmes auteur : « The Elements of Scrum » qui en constitue en quelque sorte la version longue. La version électronique coûte moins d’un euro et je recommande sans réserve ce texte pour initier rapidement un équipier à Scrum. Plus encore que le Scrum en 5 minutes !

Scrum a breathtakingly brief and agile introduction

Référence complète : Scrum, a Breathtakingly Brief and Agile Introduction – Hillary Louise Johnson & Chris Sims – Dymaxicon 2012 – ASIN : B007P5N8D4 (Kindle edt.)

Scrum: a Breathtakingly Brief and Agile Introduction


https://www.goodreads.com/book/add_to_books_widget_frame/193796504X?atmb_widget%5Bbutton%5D=atmb_widget_1.png

Post #500

Il me semble qu’il n’y a pourtant pas si longtemps que j’ai marqué d’une pierre blanche la première année de mon blog. Oui, c’était il y a à peine plus d’un an. Mon rythme est donc disons… honorable ! Revoyons tout cela en chiffres !

Mon blog en chiffres !

Il y a un an, je me réjouissais de mes 221 posts. Un an et deux semaines plus tard, ce sont donc 279 nouvelles entrées qui s’y sont ajoutées.
Au niveau rythme, après un petit creux de début d’année, je tourne à une moyenne d’un peu plus de 20 posts par mois. Considérez quand même qu’un post sur trois est une citation et cela rend la chose moins démente.

Histogramme posts tumblr

Plus intéressant à mon goût : l’évolution des Notes de lectures si je les compare aux autres billets (en excluant les citations). Sur les 12 derniers mois, la tendance s’est inversée par rapport à l’année précédente. Les billets dépassent en nombre les notes de lecture, parfois de beaucoup.

Stats billets vs Note de lecture

La fréquentation

Elle semble en augmentation !

Statistique de fréquentation 2012-2013

En fait, il faut la rapprocher de celle de l’année précédente. Toutefois comme je n’ai mis en place les analytics qu’en Mars 2012, il me faut “normaliser” les données sur les deux années. J’ai donc multiplié les données de la première année par 1,5 ; ce n’est pas tout à fait juste, mais disons que c’est une approximation acceptable.

Stats 1ère année vs 2nd année

Les chiffres font apparaitre une augmentation substantielle des visites, ou plutôt des visiteurs uniques (le chiffre que je préfère suivre). 

Les rebonds paraissent important (en baisse insignifiante), mais c’est plus probablement lié au fait que la plupart des visites viennent des liens Twitter. Malgré tout, deux chiffres me surprennent : la diminution très sensible des pages vues par visite : de 2,72 à 1,7 ! Cela se traduit de manière naturelle par une diminution du temps passé à chaque visite : de 2,72 mn à 1,77 mn. Normalisé à une page, cela fait 57 sec par page sur la première année et 1,13 min par page sur cette dernière année.
Qu’en est-il des browsers ? C’est assez stable, avec un poil de perte de terrain de Firefox et un poil de regain côté Safari, mais pas de gros changements à part ça…

Stats browsers 2nd année

See you next time

Déjà 500 posts. Peut-être devrais-je réduire le rythme ? Hélas, j’ai encore quelques sujets sur la pile. La prochaine synthèse est prévue pour mon millième post. Espérons que ce soit dans un bout de temps !

Note de lecture : SQL Server 2008 Integration Services, par Erik Veerman, Jessica M. Moss, Brian Knight & Jay Hackney

Note : 7 ; Un ouvrage vraiment fait pour bien utiliser SSIS et pas seulement l’expliquer

Pas facile de trouver un ouvrage sur SSIS en expliquant le fond, le bon usage et ne se limitant pas à la description de l’outil ! Ce livre est celui-ci. Il s’adresse au praticien déjà expérimenté de l’ETL de Microsoft et propose une série de patterns de mise en œuvre afin de bien architecturer un projet SSIS ! Franchement c’est tout simplement la seule source d’information (livres et Web inclus) que j’ai peu identifier faisant cela !

Le biais du livre, désavantageux du point de vue de ma propre utilisation, est qu’il est orienté solution BI. Ainsi les 12 chapitres de ce livre de 420 pages s’orientent-ils dans ce sens selon les étapes logiques de réalisation d’un projet SSAS. Mon intérêt direct d’arrêtant donc vers les chapitres 6 ou 7. Mais je ne doute pas que le développeur BI trouvera beaucoup d’intérêt au reste du livre.

Je dois bien aussi avouer que même si seule la première moitié du livre m’a intéressé (la seule que j’ai lu, en fait), j’ai considéré mon achat amorti sur cette seule partie !

Le premier chapitre évoque les architectures de déploiement possibles avec SSIS. Pour chacune d’entre elle, on évalue ainsi les bénéfices et les aspects négatifs. Tout ce qu’il faut pour arrêter un choix en connaissance de cause.

Au chapitre 2, on traite la mise en place d’un « Framework » dans lequel vont s’inscrire les intégrations. Cela recouvre les problématiques de configuration d’auditabilité, de logging et de gestion d’erreur. Là encore des domaines où sont plus détaillées les caractéristiques de SSIS que la façon intelligente de les mettre en œuvre. Comme ici. Oserai-je dire qu’à ce point, j’avais déjà de quoi être satisfait de mon achat ?

Le chapitre 3 est assez court, il traite des options de déploiement des packages SSIS. Il y en a plusieurs, mais jamais avant cela on ne m’avais expliqué les traits des différentes options. C’est chose faite, je comprend mieux et saurais désormais décider en connaissance de cause !

A partir du chapitre 4, on rentre dans l’usage des tâches de SSIS. Et pour commencer le traitements des fichiers. Les auteurs présentent ici leur approche encore une fois, pas seulement l’utilisation de l’outil. Même si j’ai moins appris que sur les chapitres précédents, il y a clairement du savoir faire à réutiliser…

Le chapitre 4 propose des « bests practices » pour les problématiques d’extraction et de stagging des données. Même s’il est d’usage général, ce chapitre s’inscrit plus dans une optique de projet BI.

Il en va de même pour les chapitre 6 (où j’ai arrêté ma lecture) qui s’attache aux problématiques de nettoyage des données.

Je reprendrais certainement cette lecture un jour, en fait les problématiques BI m’intéressent également. Quoi qu’il en soit, j recommande sans réserve ce livre pour le praticien déjà aguerri de SSIS : le savoir-faire qu’il propose n’existe pas ailleurs !

sql-server2008-IS-wrox

Référence complète : SQL Server 2008 Integration Services : problem, design, solution – Erik Veerman, Jessica M. Moss, Brian Knight  Jay Hackney – Wrox 2010 – ISBN : 978 0 470 52576 0

Microsoft SQL Server 2008 Integration Services: Problem, Design, Solution

http://www.goodreads.com/book/add_to_books_widget_frame/0470525762?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on

Carnet de route : Agile Tour Bruxelles 2013 (2/2)

Lunch break

En gagnant en taille, l’Agile Tour Bruxelles gagne en standing ! Fini les sandwiches, bienvenue au buffet commerce équitable ! La qualité est au rendez-vous, mais l’attente est un petit peu longue. Difficile de d’être parfait en la matière.

atbru13-06lunch02

De mon côté, je ne tiens pas réellement la forme. On sert aussi du potage en Belgique et je trouve en l’occurrence que c’est une très bonne idée. Surtout quand, comme ici, il est excellent.

atbru13-06lunch04

Bref, l’ambiance est au beau fixe. On est bientôt d’attaque pour la seconde mi-temps !

atbru13-06lunch03

Joanne Ho : Agile methodologies for research

Scrum nous enseigne que l’agilité s’applique bien au domaine des projets complexes, mais n’est pas conçue pour les domaines “chaotiques”. J’ai toujours (à tord ou à raison) classé la recherche dans cette catégorie. Joanne Ho nous donne l’occasion d’en savoir plus sur l’adéquation de l’approche agile pour les chercheurs.

atbru13-07joanne-ho02

L’un des points marquants du fonctionnement des chercheurs est qu’ils ne travaillent pas en équipe ! 

Pourtant la recherche est fondamentalement adaptée au mode itératif : étymologiquement cela ne signifie-t-il pas [Re]cherche ?
Pour Joanne Ho, chercheur environnementale, on peut faire une correspondance entre le travail de chercheur (du moins le sien) et Scrum:

  • Le client : c’est la société (au sens large).
  • Le produit : de nouvelles connaissances
  • La Définition de terminé : la pertinence sociale

Enfin oui, Joanne utilise un backlog. 

Un backlog très mouvant, il faut bien le dire, car :

  • Un item peut ne pas aboutir, nécessiter de nouvelles de nouvelles informations et donc être mis en suspens.
  • Il peut générer d’autres items.
  • Provoquer l’obsolescence d’items déjà présent dans le backlog.

Ce sont des choses qui existent déjà plus ou moins dans le fonctionnement des projets agiles. Sauf qu’il est très difficile d’avoir un plan de bataille fixe pour une itération. Donc la plupart du temps, Joanne dépile simplement l’item le plus prioritaire. Ce ne sont sont donc pas des sprints fixes et l’on est plus proche de XP que de Scrum, n’était-ce la présence du backlog…
Mais si on ne sait pas se fixer précisément d’horizon aux itérations, celles-ci gardent-elles un sens ? La réponse est : oui ! Les itérations aident à faire du bon boulot en gardant le rythme. Sans itération, la masse de travail devant soi devient vite déprimante. Les itérations permettent de se voir avancer, de délivrer de la connaissance grâce auxquelles il sera plus aisé de prendre des décisions en connaissance de cause.
Et les rétrospectives ? Mauvaise nouvelle : les chercheurs sont bien trop occupés pour se livrer à cela !

IMG_0121

Joanne Ho nous donne ensuite en exemple un travail récent sur les biogaz. Comment cela s’est-il organisé ?
Traditionnellement, la structure d’une telle équipe serait :

  • Le travail en silo est le standard.
  • Beaucoup de compétition interne.
  • Peu de transparence. Les revues de pair tournent vite aux critiques, voir aux insultes !
  • Les stakeholders sont des personnes imaginaires.
  • Une reconnaissance basée sur la quantité.

Pour cette étude, il a été constitué une équipe pluridisciplinaire, avec un mode de travail en pair et du test de groupe sur les hypothèses. Le processus était le suivant :

  • D’abord comprendre le problème, définir ce que l’on veut tester. Et donc faire l’expérience du stakeholder en allant sur le terrain.
  • Définir l’objectif, en définissant le critère de succès.
  • Une réflexion en binôme, pour modéliser toutes les facettes du problème. Ce travail doit produire des hypothèses.
  • Les tests unitaires, ce que Joanne appelle le “reality check”.
  • L’intégration continue : la mise en commun des éléments.
  • L’acceptance test : Une solution globale acceptable par le stakeholder.

En conclusion…

  • On peut utiliser l’agilité littéralement partout !
  • L’agilité est surtout une attitude.
  • Sans dialogue, on n’aboutit à rien.
  • Se déplacer pour aller réfléchir à différents endroits, sur le terrain.
  • Mettre toutes ses tâches dans un backlog.
  • Travailler en équipe est une chose nouvelle dans les université. ON n’a pas encore de modèle de fonctionnement pour cela.

En définitive, on fait émerger de meilleures questions, on prends d’avantage de plaisir !
La présentation de Joanne Ho reprends les thèmes développé dans son livre sur Leanpub.

Facile à bien utiliser, difficile à mal utiliser

C’était à mon tour, sur le créneau suivant. Pas de résumé de ma session, il ne faut pas pousser, mais la publication de ma présentation très bientôt, et celle-ci sous forme d’article lorsque je l’aurais complété !

IMG_0234

La mesure de mon temps n’était pas non plus excellente. Je vais jouer le joker “état grippal” sur ce coup. Il faut dire que j’avais quand même prévu 20 exercice pour une heure. J’ai probablement été optimiste…

atbru13-08easy-touse01

Domenico Musto : Event-Driven Architecture in Practice

Domenico est venu nous perler d’EDA. Il commence avec un point sur lequel j’achoppe : l’architecture doit être planifiée ! 

Enfin, surtout pour les gros projets d’après lui, et EDA n’est pas pour les petits projets.
Mais pourquoi EDA ? Parce que l’architecture doit être “business drivent” , suivre la structure des flux d’évènements métier. Au contraire, les architectures SOA favorisent l’intégration point à point, aboutissant à un réseau inextricable quand le nombre de composants augmente.

atbru13-09eda04

Les flux EDA ne sont pas nécessairement des messages d’un MOM, c’est surtout un concept logique qui peut se traduire en :

  • Enregistrements d’une base de données.
  • Fichiers
  • Messages d’un MOM (quand même !)

Le support de ces messages, le canal, transmet différents types d’évènements qui peuvent être :

  • Des évènements
  • Des commandes
  • Des doc-messages ; ce dernier type de message est auto-porteur. C’est un paradigme “push” dans lequel le message comporte tout ce qui est nécessaire au traitement par le composant cible. C’est le modèle vers lequel on souhaite se diriger.

L’architecture EDA implique aussi de nombreux corollaires :

  • Le cas des données de référence : Elles doivent être embarquées en partie dans le doc-message. Cela me rappelle un certain nombre de considérations autour du MDM…
  • La consistance (de l’ordre) des identifiants d’évènements : leur ordre est-il garanti ? S’il ne l’est pas, il peut y avoir nécessité de versionner les entités afin d’en reconsidérer l’historique depuis n’importe quel évènement.
  • L’idempotence, ou la capacité à rejouer un évènement. Cette propriété va de pair avec le versionning.

L’architecture EDA se matérialise par un pattern publish-subscribe asynchrone au niveau de l’architecture. Cela n’est pas sans poser certains challenges en terme de tests. Mais dans cet ordre d’idée, une fois la capacité de test acquise, les composants sont relativement indépendants les uns des autres.
La communication à base d’évènements rend aussi possible le business monitoring (le fameux BAM). Par contre les “évènements avec états” sont un autre niveau de challenge. Il est (en partie) adressé du côté des Web Services avec les corrélations, mais surtout avec les moteurs de workflow type BPEL / BPMN 2.0
Terminons avec les infrastructures techniques. Domenico s’est appuyé sur les “reactive extensions” de Rabbit MQ pour implémenter EDA. De mon côté je pense aussi à Storm que nous mettons en oeuvre actuellement…

Clôture et dernier verre !

Il est l’heure de nous rassembler à nouveau pour conclure ce second Agile Tour Bruxelles.

atbru13-10cloture01

C’est de nouveau Bruno qui nous donne rendez-vous aux prochains évènements Belges : XP Day Benelux (le seul, le vrai…), l’Agile Tour Namur … et bien entendu l’Agile Tour Bruxelles de l’an prochain !

atbru13-10cloture03

Comme l’an dernier aussi, les conférenciers ont droit à un cadeau local. Au menu : bierre, confiserie, chocolat et Schtroumph, entre autres…

Agile Tour Bruxelles 2013 : presenter gift

Pas questions de se barrer comme des voleurs à Bruxelles ! L’an dernier, on avait dégainé la bière locale. Cette année on est visiblement monté en gamme (comme je le disais au début).

atbru13-11dernier-verre02

J’avais prévu mon train de retour suffisamment tard pour discuter un peu. Et nous l’avons fait à propos de l’informatique et de l’éducation, de la représentation trop faible des femmes et des minorités dans notre métier en nous demandant pourquoi et en ne sachant toujours pas vraiment y répondre…

atbru13-11dernier-verre08

Il est temps de s’en retourner. Un grand merci à la très sympathique équipe organisatrice. Et à l’an prochain, si tout va bien…