Devoxx 2017

Me voila au bout de trois jours de conférences suivies au ( ou à je ne capte plus grand chose à cette heure de la journée ) DEVOXX.


DEVOXX, pour celles et ceux qui ne connaissent pas est LA conférence pour les développeurs.
Initialement tournée autour de JAVA et JAVAEE, elle s’est tournée au fil des années vers les autres technologies qui tournent autour de JAVA ( ANGULAR, BIG DATA,…).

A l’instar des années précédentes, j’ai trouvé les conférences de ( grande) qualité. J’ai appris pas mal de choses et certaines conférences m’ont permis de « mettre l’église au milleu du village » sur pas mal de sujets .

Vous trouverez sur cette page la liste des conférences, hands on et autres ateliers de ce millésime. Personnellement, j’ai assisté à pas mal de conférences sur le bigdata ( hadoop, kafka, spark,…). J’ai également été étonné que ni google, ni oracle étaient présents cette année. Doit-on y voir un signe ?

Les conférences seront diffusées gratuitement sur YOUTUBE.

Sur ce, je m’en vais prendre mon train pour retourner dans ma campagne et récupérer de ces trois jours .

 

Installation de GNU/LINUX sur un lenovo thinkcentre m700

J’ai décidé de changer de PC. J’ai opté pour un Lenovo thinkcentre m700 afin de gagner pas mal de place et perdre quelques décibels à l’utilisation 🙂

Pour info, voici les caractéristiques techniques du modèle acheté

 

  • Modèle du processeur : Intel Core i5 6400T
  • Fréquence : 2.2 Ghz (2,8 Ghz avec TurboBoost)
  • Capacité mémoire installée : 8192 Mo
  • Marque de la carte graphique : Intel
  • Puce graphique : Intel® HD Graphics 530

 

Pour écouter la musique, j’ai également fait l’acquisition d’un DAC USB NUPRIME UDSD.

 

Après quelques backups fait sur windows 10 ( histoire de gérer le support plus tard), j’ai décidé d’installer GNU/LINUX.

J’ai tout d’abord cherché la compatibilité des différents matériaux. Pour le PC, je n’ai trouvé que l’info sur la compatibilité UBUNTU. Pour le nuprime, j’ai seulement trouvé la compatibilité avec le NAS SYNOLOGY sur le support NUPRIME. Vu que ce dernier est basé sur GNU/LINUX, j’étais plutôt confiant 🙂

Mon premier choix s’est tourné sur DEBIAN (8.7) …. et là j’ai galéré 🙁

L’installation s’est bien déroulé, mais

  • Pas de son (interne & DAC ) Les modules snd-hda-intel et snd-usb-audio étaient un peu bancales
  • Le système était un peu instable : A ce que j’ai lu sur quelques sites, la compatibilité avec l’architecture SKYLAKE et les processeurs Intel 6ème génération n’est pas encore optimale
  • etc.

Après quelques tentatives de backport, passage en testing et voodoo, j’ai décidé d’installer UBUNTU LINUX 16.04 LTS.

Et oui je suis revenu sur UBUNTU :). Là, tout fonctionne parfaitement .

  • La carte son (interne & via displayport)
  • Mon DAC fonctionne parfaitement
  • La vidéo
  • Wifi/Bluetooth/…

Bref tout va bien 🙂

Seul « petit » problème, j’ai essayé d’installer gnome-shell. J’ai sélectionné gdm3 au lieu de lightdm et j’ai eu un gros freeze de mon PC. Impossible de réparer ça. J’ai du réinstaller. Vu la vitesse, ce n’est pas trop grave.

J’ai décidé de rester pour l’instant sur UBUNTU avec le desktop UNITY. Peut-être que je basculerai sur la prochaine version de Debian quand elle sortira.

Je vous fait grâce de la liste des paquets que j’ai installé et de la configuration que j’applique. Il y a suffisamment de sites qui font ça mieux que moi 🙂

 

 

 

 

Création clé bootable GNU/LINUX (simplement)

J’ai décidé récemment de changer de PC. Afin de pouvoir installer Debian (what else) dessus, il me faut créer une clé USB Bootable. Et oui, le temps ou il y avait des lecteurs de CD/DVD est révolu…

J’ai regardé sur la documentation et plus largement sur Internet et je suis tombé sur ce logiciel : etcher. Il est libre et multi-plateforme.

Plus simple il n’y a pas 🙂

Vous sélectionnez l’image, le périphérique et c’est parti.

L’utilitaire fait une vérification après flash.

Quelques problèmes

Après flash, il se peut que ayez des messages au montage de la clé tels que

Après quelques tests, ça n’empêche pas la clé de booter, mais la rend inutilisable pour tout autre utilisation.

A ce que j’ai lu, c’est principalement dû à la commande dd qui fout un peu la zone…

Pour corriger ceci, il faut réinitialiser la clé avec la commande :

ou sdX est le périphérique de la clé USB.

 

 

En espérant que ça puisse servir à d’autres dans mon cas.

Découverte de JHIPSTER

Dans la série, je me réveille après les autres, me voici en train de découvrir JHIPSTER.


Pourquoi me direz-vous. En bien je souhaite réaliser un site avec des fonctionnalités assez courantes (CRUD, recherche, identification via réseaux sociaux,…) sans trop me prendre la tête. Et là, je n’ai pas encore trouvé plus simple :).

J’étais tenté de passer par PlayFramework, mais à première vue, JHIPSTER parait plus simple à mettre en œuvre.

Mais bon qu’est-ce qu’il y a sous le capot ?
Un outil de scaffolding basé sur Yeoman fournissant un front angular (1ou 2) un back basé sur spring boot, une couche de persistance pour une base de données (mongodb, cassandra ou SGBDR) et bien plus encore.

Je ne décrirai pas la procédure d’installation car elle est déjà très bien documentée.

Voici plus précisément les fonctionnalités que je teste :
Coté front

  • AngularJS
  • Bootstrap
  • JWT

Coté Back

  • Spring Boot
  • Identification avec Spring Social / Spring Security
  • Persistence avec MongoDB ( Cassandra n’est pas encore supporté pour l’identification via réseaux sociaux )
  • Utilisation de SWAGGERUI pour documenter les API

J’ai toujours été un peu réticent vis à vis des outils de ce type ( appfuse, jboss forge,..) . Mais, là je suis bluffé. Si on veut faire une application de type CRUD sans se prendre la tête à réinventer la roue pour l’identification, l’ administration des logs, la documentation, etc , JHIPSTER est, à mon avis, l’un des meilleurs choix actuellement.

Cependant, cette intégration à un coût. En effet, l’équipe a fait des choix très structurants. Ce qui est normal pour fournir une solution aussi intégrée. Il faut les accepter si on opte pour ce genre de solution. Par exemple, le monitoring des services springboot est uniquement visible par une console web alors quand dans version standard de ce FRAMEWORK, c’est visible via API REST. C’est certes pas mal quand on est tout seul à gérer l’application, mais dès que l’on veut intégrer la supervision dans une entreprise qui dispose déjà d’outils tels que NAGIOS, cela devient plus problématique.
(Supprimé suite au commentaire de J. DUBOIS)

Pour finir, je dirais que l’une des contraintes à accepter lorsqu’on utilise ce genre de FRAMEWORK est qu’il faut rester dans le cadre préétabli pour qu’il y ait une réelle productivité. Si on veut tordre le modèle on risque de perdre en efficacité et en maintenabilité. A titre personnel pour mon use case, je m’en accommode bien et ça me permet de faire plus de choses en JAVASCRIPT que je n’aurai pu faire avec une application réalisée « from scratch ».

Utilisation de la plateforme CONFLUENT pour faire du CDC

Après une pause dans mon exploration de KAFKA et KAFKA CONNECT, je me suis remis à faire du CDC.

Cette fois j’ai décidé d’utiliser les possibilités natives de la plateforme CONFLUENT. A savoir le proxy REST et les plugins JDBC et ELASTICSEARCH.

J’ai donc mis en quelques coups de cuillères à pot :

  • Une extraction de données incrémentale à partir d’une base de données
  • Un chargement dans Elasticsearch

 

Création des connecteurs

Création du connecteur d’extraction

La plateforme CONFLUENT offre un ensemble d’APIS qui permettent la configuration des connecteurs.

Ex. :

Lecture d’un état de connecteur

 curl -XGET http://127.0.0.1:8083/connectors

 

Voila comment j’ai chargé la configuration :

J’ai d’abord crée un fichier JSON

{
  "name": "jdbc-sql",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
    "tasks.max": 2,
    "connection.url": "jdbc:oracle:thin:URL",
    "mode": "incremental",
    "timestamp.column.name": "JOBSTART",
    "query":"select * from LOG",
    "topic.prefix": "jdbc-avro-jdbc",
    "table.types" : "VIEW"
  }
}

puis je l’ai chargé via l’API en utilisant une requête POST

Création du connecteur déversant dans Elasticsearch

Même principe avec ce fichier JSON

{
  "name": "jdbc-elk-sink",
  "config": {
    "connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
    "tasks.max": 2,
    "connection.url": "http://host:9200",
    "type.name": "monitor",
    "topics": "jdbc-avro-jdbc",
    "topic.key.ignore": "jdbc-avro-jdbc",
    "topic.index.map":"jdbc-avro-jdbc:monitor",
    "key.ignore": "true"
  }
}

Avec cette configuration j’ai maintenant un cluster ELASTICSEARCH qui récupère au fil de l’eau mes données provenant de la base de données.

Créer un connecteur KAFKA CONNECT

Après avoir essayé le connecteur de confluent kafka-connect-jdbc, je me suis aperçu qu’il y avait encore quelques bugs qui le rendaient inutilisable dans mon environnement ( notamment avec les champs numériques).

J’ai donc décidé de créer mon propre connecteur. Certes celui-ci sera moins générique mais il correspondra à mon besoin ( ou pas …).

API utilisées

  • JAVA8
  • API KAFKA CONNECT

Configuration maven

Cette configuration me permet de créer un fat jar avec les dépendances nécessaires à la bonne exécution du connecteur.

Voici mon fichier pom.xml

 

Développement

Comme le dit le guide de développement, il faut créer a minima une classe héritant de la classe SourceConnector et une classe héritant de SourceTask.

MySourceConnector

Cette classe permet la récupération de la configuration du connecteur.

MySourceTask

Cette classe gère l’exécution de l’extraction et chargement dans KAFKA. Elle permet dans la méthode start() de démarrer le connecteur et de lancer les ressources (connexions JDBC).

Comme le connecteur standard, je m’appuie sur un champ de type Timestamp. celui -ci me permet de créer un offset et de faire un parcours incrémental de mes résultats .

Configuration nécessaire à l’exécution du plugin

Il faudra créer également un fichier properties contenant les informations suivantes :

Exécution

De la même manière que pour le connecteur standard…

Conclusion

Voila le squelette de mon connecteur crée. Pour l’instant les données sont sérialisées de manière un peu brutale. La prochaine étape sera de les mettre au format JSON. La suite dans un prochain numéro…

Utiliser SBT derrière un proxy d’entreprise

J’essaye depuis quelques temps de faire fonctionner SBT derrière un proxy d’entreprise ( avec authentification) . Vu que je ne veux pas polluer le serveur NEXUS existant, j’ai essayé de tout faire un local …. et là c’est le drame.

g1366824328707416474

Jusqu’à présent, j’utilisais MAVEN et le plugin SCALA pour répondre aux besoins du BUILD. J’ai néanmoins trouvé une autre solution, tout aussi sale…. Installer un serveur NEXUS sur le poste de travail et s’en servir comme proxy « intelligent ».

J’ai fait la configuration suivante :

Dessin1

Je ne vais pas décrire ici l’installation de nexus tellement c’est simple.

Dans la configuration de nexus, le proxy se configure assez simplement dans la partie server

J’ai ajouté les virtual repositories suivants :

  • ivy-releases-1: https://dl.bintray.com/sbt/sbt-plugin-releases/
  • ivy-releases-2: https://dl.bintray.com/typesafe/ivy-releases/
  • mvn-typesafe-release-1: http://repo.typesafe.com/typesafe/maven-releases/
  • mvn-typesafe-release-2: http://repo.typesafe.com/typesafe/releases/

et crée deux groupes l’un pour les repo ivy (ivy-releases) et l’autre pour maven (mvn-releases)

Enfin, comme l’indique la documentation, j’ai configuré le fichier ~.sbt/repositories de la manière suivante :

Enfin, lorsque vous exécutez sbt, celui-ci utilisera automatiquement votre proxy NEXUS qui lui est capable de discuter avec un proxy d’entreprise.

En espérant que ça serve à d’autres…

Normaliser une adresse avec ElasticSearch et la base adresse nationale

Il y a fort fort longtemps, j’intégrais la base adresse nationale dans elasticsearch via logstash. Je ne suis pas allé plus loin faute de temps et peut-être d’envie.

Que peut-on faire avec ces quelques gigas de données me direz vous?

  • Faire des recherches pour avoir les coordonnées géographiques d’une adresse donnée
  • Faire une recherche pour avoir l’adresse normalisée
  • Faire un rapprochement avec d’autres données (avec Spark par exemple)
  • Sans doute plein d’autres use cases

Je vais m’attarder sur le deuxième point. A quoi ça sert ? et bien à avoir une adresse « propre » et utilisable par un système d’information (ex. ce que font les impôts, ou amazon). Il existe quelques solutions propriétaires qui réalisent ceci et sont assez chers. Je me suis donc mis dans la tête de le faire via elasticsearch.

Rappels des épisodes précédents

Voici le schéma de l’architecture

Présentation1

Pré-requis

Configuration Logstash

Voici ma configuration Logstash

J’ai configuré LOGSTASH pour réaliser les actions suivantes :

  • extraction des données d’un fichier
  • suppression de la ligne d’en-tête
  • gestion de la localisation avec un champ de type ‘geo_point’.

C’est assez simple (pour l’instant)

Mapping ELASTICSEARCH

Analyzers

J’ai configuré les analyzers de la manière suivante:

J’ analyse tous les mots (whitespace tokenizer) en minuscule en appliquant un filtre (ngram) permet de rechercher par caractère (ex. imp au lieu de impasse).

La c’est super couteux en espace disque et impose un plus gros traitement lors de l’insertion mais permet d’ alléger le temps de traitement des requêtes ( le gros du travail est fait lors du chargement).

Mapping

La je n’ai pas fait grand chose de particulier si ce n’est le typage des différents champs (ex. la localisation )

Création de l’index

Dans sense ou via cUrl, lancer la commande suivante :

Pour le mapping complet, voir sur mon compte github

Chargement

voir mon article précédent

Interrogation

Maintenant je peux interroger mon index

Imaginons que je fasse saisir le code postal, la ville et l’adresse et que j’interroge elasticsearch pour obtenir une adresse normalisée

Conclusion

Ce n’est qu’un début. Ce n’est sans doute pas encore très performant, si vous avez des remarques, n’hésitez pas. En tout cas, les briques et outils décrits ci-dessus permettent de normaliser des adresses a minima avec des logiciels libres, ce qui n’est pas rien.

Les sources sont disponibles sur GITHUB. Je ne pense pas que je vais en faire un projet à proprement parler mais plutôt d’une boîte à outils pour manipuler ce genre de données. J’y ajouterai sans doute quelques recherches géospatiales et peut être l’ intégration de graph.

Quoi de neuf du coté du front-end

Depuis le début de l’année je suis en train de faire une spécialisation Coursera : Full Stack Developer.

Pourquoi me direz-vous ? Tout d’abord, j’ai principalement travaillé sur du back-office ou de l’outillage. Ça m’a servi de rattrapage sur ces technologies :

  • HTML/CSS ( ne rigolez pas j’ai appris des choses…)
  • Bootstrap
  • Angular
  • Applications mobiles hybrides
  • NodeJS

Sachant que j’ai principalement travaillé sur JAVA, ça m’a fait un peu bizarre

Qu’est-ce que j’en ai retenu:

Javascript et les langages interprétés, ce n’est pas fait pour moi. Un compilateur c’est quand même bien pour découvrir des erreurs de syntaxes (je suis trop vieux pour ces co%%%£$$) …. Les puristes du javascript me diront qu’il y a les tests unitaires. Pour moi ça ne remplace pas un compilateur. Pas étonnant que des initiatives comme typescript ou babeljs arrivent massivement sur le marché.

Je comprends pourquoi AngularJS a inondé le marché ces dernières années. C’est assez bien foutu.

Le combo NodeJS/express/mongoose permet de réaliser des APIS et des requêtes facilement .

Un exemple de route pour une requête GET

Un exemple de requête qui m’a bluffé

Pour conclure, je ne  pense pas que je ferai des sites web de sitôt, mais ça m’a donné une bonne vision d’ensemble des technologies.

Devoxx 2016

Ben voila, j’écris ce billet entre deux confs lors de l’édition 2016 du devoxx.index
QUOI, vous ne connaissez pas devoxx ? c’est à mon avis LA conférence française du développement JAVA, SCALA,BIG DATA.

C’est très très technique et c’est tant mieux. Commerciaux et chefs de projets, vous pouvez passer votre chemin 🙂

J’ai pu notamment faire des hands on sur apache kafka, vert.x et sur la création d’architectures.

Petite nouveauté, les conférences seront disponibles sur youtube ( je ne connais pas encore la chaîne ).

Si vous ne connaissez pas, voici quelques conférences de l’année dernière