J’avais prévenu tout le monde pour ma première, mari et collègues : ce soir, c’est soirée entre filles. On code.
Je ne vous raconte pas la surprise en trouvant au 8ème étage des locaux de So@t, une salle remplie de garçons : “- Euh, les Duchess, c’est bien là ?”
Oui, c’était bien là. 23 garçons et 4 filles – quand même – tous réunis pour découvrir Apache Mahout (dire maoute), une librairie Open Source Java. Parce que les soirées code des Duchess sont ouvertes à tout le monde et c’est tant mieux.
Donc je m’installe au premier rang, pour prendre une des dernières places restantes et refais avec celui qui sera mon binôme de la soirée l’inventaire des tâches préparatoires (Inquiétude soudaine, n’ai-je rien oublié ? Il faut dire que je suis un peu venue les mains dans les poches, sans même préparer le sujet !) :
Ouf, c’était bon, très facile d’ailleurs.
La soirée commence. Le principe : une présentation avant de passer au concret avec un petit exercice de codage à réaliser.
Quelle chance ! Je suis tombée sur un sujet passionnant : le Machine Learning. Pour rappel, ce sous-domaine de l’ Intelligence Artificielle, étudie les machines capables “d’apprendre”, c’est-à-dire qui adaptent leur comportement en fonction des données reçues.
La librairie Apache Mahout est donc un ensemble d’implémentations d’algorithmes permettant de rajouter des fonctionnalités intelligentes aux applications à partir des données issues du comportement des utilisateurs.
On rencontre déjà sur le web des applications utilisant des algorithmes de Machine Learning :
Le machine Learning est un bon complément aux moteurs de Recherche puisqu’il peut être utilisé pour améliorer l’affichage des résultats d’une recherche utilisateur. (Tiens ça, j’ai déjà entendu parler dans un sujet connexe, le Web Sémantique, par Nuxeo. Cette fonctionnalité de filtre de recherche est en effet intéressante pour un ECM (Enterprise Content Management).)
Bref, Apache Mahout, propose justement de mettre en oeuvre ce type de fonctionnalités et ce de manière très aisée.
Nous devons réaliser un moteur de recherche de recettes de cuisine. Plus précisément, l’application propose des recettes de cuisine proches des goûts de l’utilisateur, si, si, ça marche !
En quelques lignes de code (5 précisément), et un ajustement empirique du paramétrage, j’obtiens sur mon écran une suggestion de recettes (éclair au chocolat, fondant au chocolat, salade au fenouil…) rentrées dans la base par mon voisin (lui aussi aime le chocolat). Tout cela après avoir défini les recettes que j’aime…dont quelques unes à base de chocolat.
Alors, comment fonctionne le moteur de recommandations ?
1) Vous spécifiez le datamodel (l’ensemble des données à prendre en compte en entrée) :
DataModel dataModel =
2) vous définissez le type de “similarité” :
UserSimilarity userSimilarity =
3) vous calculez le “voisinage”, un ensemble d’utilisateurs proches selon la règle de similarité définie au point 2 :
UserNeighborhood userNeighborhood =
4) Votre moteur est prêt, vous pouvez l’utiliser pour récupérer des items à recommander à l’utilisateur.
Ici, c’est l’algorithme de Recommandation “User-based” qui a été mis en oeuvre. Au lieu du critère des utilisateurs similaires, il est possible de retrouver les items qui ont des points en commun : c’est l’algo Item-based. L’application ayant reconnu que j’avais des points communs avec mon binôme m’a proposé ses items. Tout un programme !
Bien sûr, agilité et bonnes pratiques obligent, nous avons réalisé la fonctionnalité après avoir fait fonctionner le test unitaire !
Vous voyez, c’était vraiment très simple et rapide, même en comptant les pauses pour déguster les sushis. (et boissons de toutes sortes, de quoi sustenter tous les amateurs de marmite à volonté. Bravo pour l’organisation. ) Bon, je ne vous cache pas, la méthode de choix des implémentations restait pifométrique à ce stade : LogLikelihoodSimilarity
et pourquoi pas TanimotoCoefficientSimilarity
? NearestNUserNeighborhood
plutôt que ThresholdUserNeighborhood
, etc… On peut encore s’améliorer.
Quelle soirée sympa et intéressante.
J’ai hâte d’être à la prochaine marmite avec les Duchess. Hé les filles, vous venez la prochaine fois ?
Apache Mahout est à l’honneur au mois de novembre chez les Duchess ! Et comme on aime le code, le vrai, c’est naturellement lors d’une soirée main dans le code que nous vous invitons pour tester un peu cette librairie dont on entend de plus en plus parler le mardi 22 novembre avec Michael Figuière et Jean-Baptiste Lemée !
Les utilisations de Mahout sont diverses :
Pour tous ses concepts, Apache Mahout met à notre disposition plusieurs algorithmes, facilitant leur intégration dans nos applications et se veut donc ‘ready-to-use’.
Après une brève présentation de Mahout, vous attaquerez votre propre système de recommandation lors de ce hands-on. Faisant parti de l’écosystème Mahout, Taste est un moteur rapide de filtrage collaboratif pour Java. Il permet par exemple de recommander à un client les livres qu’il pourrait aimer en fonction de son panier ou des dernières pages visitées. Vous apprendrez à construire un outil de recommandation basé sur Taste/Mahout et à le customiser.
Michaël Figuiere est consultant chez Xebia où il intervient notamment sur des sites Web à fort trafic. A son aise tant avec les environnements JEE qu’avec les technologies de plus bas niveau, il est spécialisé dans les architectures distribuées et les technologies innovantes telles que NoSQL, les moteurs de recherche, ou encore le data mining.
Jean-Baptiste Lemée est un consultant chez Lateral Thoughts spécialisé dans les technologies Java/JEE et innovantes (NoSQL , Mahout …). Il est passionné par la création de logiciels dans leur globalité : organisation des équipes, méthodes de développement et usabilité du produit.
Après un article commun pour éviter des redites sur les Wouah ! et les sessions auxquelles on a toutes assisté, un point de vue plus personnel.
Devoxx 2010, 5 jours hors du temps avec un programme très chargé et beaucoup de discussions que l’on mettra du temps à vraiment intégrer. Voici donc une première synthèse des choses que j’ai retenues une fois passées au crible de mon filtre personnel.
Hadoop est aussi à la base de plusieurs bases de données NoSql comme HBase et Cassandra. Il y assure la couche de stockage. D’autres projets, liés à la manipulation de données à la SQL voient également le jour comme Hive et Pig qui ont été présentés également lors de cette session.
A noter ce projet Apache est co-dirigé par une femme, Isabel Drost. Ainsi Devoxx a compté 2 speakers femme cette année, Isabel Drost pour Mahout et Linda DeMichiel pour Hibernate/JPA. Une présentation agréable, mais très difficile pour les gens qui n’ont pas de background statistique. J’y reviendrai plus en détail un de ces jours.
Le cache a des inconvénients de consommation de mémoire et de cohérence avec les données persistantes (le SOR, system of Record). Autre problème lié aux fréquences d’accès de chaque donnée. L’accès aux données de référence suit généralement une distribution de Pareto et certaines données de référence (les codes des grands pays par exemple) sont utiles en cache alors que d’autres ne sont quasiment jamais redemandées. Le cache ne sert à rien si le taux de hit dans le cache est faible.
Pour ces raisons il faut souvent gérer plusieurs niveaux de cache plus ou moins efficaces, les plus rapide étant les plus limités en taille et vice versa. La localité, c’est à dire la proximité des données avec le programme qui les utilise joue aussi un grand rôle et les caches distribués sont utiles en permettant des disposer des données au plus près de l’endroit où elles seront utilisées.
De temps en temps, Devoxx c’est un peu comme chez le glacier. Trop de parfums et on ne sait plus choisir entre ceux qu’on aime bien et les inconnus qui ont l’air bien tentants aussi. Ce jour là j’hésitais entre 3 salles et je n’avais pas de critère bien défini à ce moment là. Après avoir vu des tas de présentations de niveau bien inégal, j’ai adopté le critère des vieux routards de Devoxx : il vaut mieux une présentation d’un bon speaker sur un sujet auquel on s’intéresse moyennement, qu’une mauvaise présentation sur un sujet auquel on s’intéresse … parce qu’on arrive pas au bout. Au pire dans le premier cas on aura passé un bon moment.
En l’occurrence je suis rentrée avec une vague connaissance du développement Android et la ferme certitude que développer des IHM ne m’intéresse pas, et après 3h à voir développer des superbes IHM Android j’en suis ressorti en cherchant une idée pour faire une application Android. C’est ça une présentation réussie. Une présentation qui donne envie d’aller plus loin, d’explorer le produit, qui nous a fait toucher du doigt l’environnement de développement et fait croire qu’on pouvait nous aussi faire une application Android en moins d’une heure, et nous fait rêver à chercher des idées d’applications.
Il y a eu quelques présentation très réussies, mais peu finalement. Beaucoup de speakers veulent faire passer trop de messages et on ressort sans arriver à faire le point. Beaucoup veulent nous donner trop de détails, nous passent en revue toute l’API slide après slide, verbe après verbe. A l’heure d’Internet, on peut trouver ces informations en quelques clics, lorsque l’on en aura besoin et on pourra les lire confortablement sur son écran. Ce qui importe est de savoir que ça existe, à quoi ça sert, comment on démarre si on n’a jamais utilisé l’outil et les principes de fonctionnement. Lorsque l’on est intéressé pouvoir poser des questions aussi, ce qui est quand même la différence essentielle avec la lecture d’un article sur Internet. Alors le reste du temps, on s’accroche parce que le contenu est là et qu’on s’intéresse au sujet. Mais c’est un peu pénible.
Bon et la présentation Dive into Android ? On a appris à faire un layout custom avec du code en live, les explications sur les layouts et l’utilisation des contrôles graphique ont été distillées au fur et à mesure, on a appris à faire un reflet en illustration de quelques fonctions de dessin. Un ping pong sympa entre les speakers, du code en live, un bon moment et des leçons retenues.
Pour finir une mention spéciale pour From Dev/Ops to DevOps. Amazing the difference one character can make.
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). Une présentation à base de vampires et loup-garous assez amusante pour faire passer l’idée.
La communauté DevOps s’organise en France. Une première réunion a eu lieu à Lille la semaine dernière. La première réunion DevOps Paris aura lieu mercredi 1er décembre. Si cette initiative vous intéresse vous pouvez rejoindre le groupe devopsfr ou consulter devops.fr (site très minimaliste pour le moment). On en reparlera !
En continuant à utiliser le site, vous acceptez l’utilisation des cookies. Plus d’informations
Les paramètres des cookies sur ce site sont définis sur « accepter les cookies » pour vous offrir la meilleure expérience de navigation possible. Si vous continuez à utiliser ce site sans changer vos paramètres de cookies ou si vous cliquez sur "Accepter" ci-dessous, vous consentez à cela.