La Lanterne Rouge

La Lanterne Rouge

Warning: Geek Inside

Publié le par Nanawel
Publié dans : #dev | #java | #talend | #xml | #filezilla | #convertisseur | #gui

Pour télécharger directement l'application de migration de profil de connexion de FileZilla 2 vers FileZilla 3, allez directement à la fin de l'article.

 

L'introduction nécessaire

Dans ma boîte, nous utilisons très régulièrement un logiciel particulier, d'une lourdeur sans pareille (basé sur Eclipse, ça alors), appelé Talend Open Studio. Ce logiciel est ce que l'on appelle un ETL (pour Extract Transform Load), servant à charger, transformer, combiner des données depuis une ou plusieurs sources (fichiers à plat, bases de données) pour ensuite les sauvegarder là encore vers une ou plusieurs cibles.

talend_open_studio4.2.jpgSi nous l'utilisons, ou plutôt si quelques collègues l'utilisent, c'est qu'il représente un très bon moyen de gérer les flux de données qui transitent entre le site d'un e-commerçant (donc un de nos clients) et son ERP. Comme nous avons relativement fixé un format "standard" pour les données attendues par Magento pour mettre à jour les produits, stocks, ventes, etc., et que l'ERP de son côté peut être parfois limité (ou capricieux) dans le format de ses flux d'entrée et de sortie, il est nécessaire d'adapter les flux dans les deux directions.

Talend et ses jobs s'insèrent donc au milieu de ses deux entités logicielles et viennent adapter chacun des flux selon ce que l'émetteur génère et ce que le récepteur attend. Comme ces échanges se font en CSV, il peut s'agir de créer de nouvelles colonnes avec des valeurs fixes, ou calculées selon une valeur située dans une autre colonne, une concaténation de différents champs, un formatage spécial, etc. Tout ce qui reviendrait trop cher à implémenter sur un l'ERP, et qui serait trop spécifique ou trop usine-à-gaz pour être codé sur Magento.

- Fin de l'intro chiante (si si, avouez, c'est pompant ces histoires). -

 

Comme j'entendais depuis quelques mois autant de bien ("très puissante") que de mal ("très lourde et assez buggée") de cette plateforme, je savais qu'il me faudrait un jour m'y mettre pour me faire ma propre opinion. Et puis connaître un ETL, même superficiellement, est toujours utile et peut sûrement rendre de grands services quand on se retrouve confronté à un dilemme de tranformation/mapping de données de différents formats.

Mais comme toujours, apprendre une techno pour la beauté de la théorie ça va bien un moment, mais c'est vite inutile si je ne pratique pas. En même temps, pratiquer sans objectif ne change pas grand chose. le mieux étant alors de "tomber" sur un truc à faire qui pourrait me permettre d'apprendre quelque chose tout en en retirant un bénéfice (aussi relatif soit-il) et en me donnant le sentiment de rendre le Monde plus beau, plus juste, plus libre, tout ça quoi.

Profils FileZilla : comment migrer ?

Il y a quelques jours, voulant me connecter à un serveur en SSH, je dégaine  FileZilla (moins lourd que WinSCP pour des opérations simples) et constate que j'ai encore la version 2, vieille de plus de 6 ans.

Pour la raison c'est assez simple : j'utilisais FileZilla depuis un moment lorsque la version 3 est sortie, mais j'ai été très déçu des premières moutures de celle-ci, avec notamment des plantages et glitches graphiques assez gênants. J'ai donc continué à utiliser ma bonne version 2 sur mon Windows XP pour finalement amasser de nombreux profils de connexion. Maintenant que FZ3 est stabilisé et plus complet que son prédécesseur, le temps est venu de migrer et d'abandonner ce vestige des années 2000 qu'est FZ2.

 

Mais comment migrer mes profils de connexion ?

fz2_to_fz3_01.png

Une rapide comparaison des fichiers de configuration de FZ2 et FZ3 et trois points se dégagent :

  1. Ce sont tous les deux des fichiers XML (cool),
  2. Il n'utilisent pas le même format, ni au niveau de la structure ni au niveau des données (moins cool),
  3. FZ2 chiffre les mots de passe mais pas FZ3 (pô cool).

Je réfléchis rapidement : je suis informaticien (donc flemmard), et développeur (c'est pire) donc hors de question de copier les profils de connexion de la version 2 vers la 3 manuellement par l'interface graphique. Puis de toute façon je n'ai pas les mots de passe donc il me faudrait encore tous les déchiffrer un par un pour ensuite les copier-coller. Ça va pas non ?

Non, ce que je vais faire, c'est prendre 3 fois plus de temps et créer un programme qui va faire ça automatiquement ! C'est l'occasion d'installer les... pfouh... 900 Mo de Talend et de savoir enfin ce qu'il a dans le ventre. (la métaphore que vous cherchez c'est "tuer un moustique au fusil à pompe", c'est un peu l'idée, mais là le fusil à pompe fait 20m de long et les plombs sont des missiles à tête chercheuse)

La solution par Talend

Pendant l'interminable installation de l'arme de guerre sus-mentionnée, une recherche sur le Web me permet de trouver plusieurs algos permettant de déchiffrer les mots de passe de FZ2. Bon point.

Le premier lancement de l'Outil de l'Apocalypse est l'occasion d'aller faire la vaisselle qui s'accumule dans l'évier, de passer l'aspirateur et de préparer le repas.

La création d'un nouveau projet se revèle quant à elle être le parfait moment pour prendre le repas ainsi qu'un café et un digestif.

Aurais-je oublié de parler de la lenteur et de la lourdeur de ce logiciel ? Si oui, ne m'en veuillez pas, mais je n'aime pas trop m'appesantir sur des défauts finalement fort peu objectifs. Ah tiens, il me semble que l'interface vient de finir de préparer les quelques vues Eclipse qui composent l'interface...

fz2_to_fz3_02.png

La prise en main n'est pas aisée, mais les quelques aperçus que j'ai pu avoir au boulot ont certainement facilité ma découverte de l'outil.

Il ne m'aura fallu qu'un peu plus de trois heures pour créer un job chargé de lire le fichier de configuration de FZ2, en extraire les profils de connexion, adapter les données au moyen de simples cascades de if-else pour les énumérations, et d'une "routine utilisateur" (vocabulaire Talend pour désigner une classe helper codée par l'utilisateur) pour le déchiffrement du mot de passe, et enfin insérer les nouvelles données dans un fichier de configuration de FZ3, sans écraser les données pré-existantes (et notamment les profils).

Voici la tête du job qui réalise ce travail :

fzsc_job.png

C'est évidemment très petit, mais le sujet est aussi très simple. Il n'est pas rare dans un job plus "réaliste" d'avoir plusieurs dizaines de composants et des flux multiples qui se combinent. Mais je préférais ne pas me dégoûter trop vite avec un sujet trop complexe et vaste, cela arrivera sûrement bien assez tôt.

tMap

Bien sûr, une personne avec une bonne connnaissance de Talend serait arrivée au même résultat en moins de 20 minutes, et c'est ce qu'il faut retenir de ce logiciel : avec quelques schémas graphiques, de la configuration et de tout petits bouts de code, on peut facilement créer un job pour adapter un flux source vers une cible. Pas besoin d'écrire plusieurs centaines de lignes pour parser un fichier XML, vérifier les types des données, les adapter, puis réécrire le résultat.

L'abstraction joue ici le premier rôle et on peut se concentrer pleinement sur "quoi faire" et non "comment le faire" (à condition de connaître un peu évidemment). C'est surtout primordial quand les spécifications des formats ne sont pas fixées et susceptibles de changer du jour au lendemain. Il est plus commode de réarranger un schéma que de rééditer du code en s'assurant de ne pas introduire d'effet de bord tout en le réorganisant pour conserver sa lisibilité.

Intégration du job dans une application

Le job achevé, on peut ensuite l'exporter sous forme d'exécutable standalone (au format JAR bien sûr), ce qui génère également deux fichiers .BAT et .SH respectivement pour les environnements Windows et UNIX/GNU-Linux contenant les amorces de configuration (mémoire allouée, classpath, fichier de contexte).

Pour réutiliser le job dans une application Java existante, il suffit de récupérer le JAR contenant le job ainsi que les bibliothèques Talend dans l'arborescence créée par l'export, coller le tout dans votre répertoire de source et ajuster le classpath. Vous pouvez ensuite instancier le job, paramétrer le contexte (les valeurs de travail) et l'exécuter comme suivant :

import filezilla2sitesconverter.filezillasitesconverter_0_1.FileZillaSitesConverter;

[...]

FileZillaSitesConverter job = new FileZillaSitesConverter();
job.getContext().setProperty("my_property", myValue);
String[] args = new String[] {};
job.runJob(args);

Simple non ?

L'interface

Un job de conversion c'est bien, mais c'est un peu triste de lancer ça en ligne de commande. L'occasion idéale pour me remettre à Swing et de créer une petite interface graphique pour paramétrer et lancer le job d'une manière plus user-friendly.

Après avoir galéré 2h pour tenter de placer les composants correctement au moyen de BorderLayout, GridLayout et GridBagLayout en code pur, je réalise que c'est toujours aussi ch**** de créer des GUI en Java. Un petit tour sur le Web pour découvrir WindowBuilder Pro, un plugin Eclipse de génération d'interface récemment devenu gratuit et passé sous licence libre et open-source (EPL) depuis l'acquisition de la boîte à son origine par Google.

Installation en 5 minutes, redémarrage d'Eclipse et, oh, un nouvel onglet sur ma vue d'édition de code Java : "Design"...

wbp_design_tab1.png

Un clic plus tard, et je tombais dans les pommes.

POURQUOI A-T-IL FALLU ATTENDRE AUSSI LONGTEMPS POUR AVOIR CE TYPE D'OUTIL DANS ECLIPSE ??!! NetBeans peut définitivement aller se rhabiller.

Mon code existant (qui comprenait déjà quasiment tout, seuls les 6 composants du centre n'étaient pas bien placés) est parsé et l'interface résultante est affichée en aperçu. Je peux alors déplacer les composants d'un simple glisser-déposer, modifier leurs propriétés, et le plus beau : le code généré CONSERVE LE FORMATAGE ORIGINAL, et les NOUVELLES VARIABLES ONT DES NOMS EXPLICITES ET PROPRES. Je crois qu'il va me falloir un peu de temps pour m'habituer à cette idée, c'est simplement un nouveau monde qui s'offre à moi, je ... je crois que je vais pleurer.

wbp_design_tab2.png

Le produit fini

Comme ma motivation sur ce petit projet diminuait doucement mais sûrement, je n'ai pas poussé bien loin les fonctionnalités. Je ne peux notamment pas assurer que tous les champs de configuration des sites de FileZilla 2 sont bien reportés sur FileZilla 3. J'ai fait le test avec mes propres profils (qui comprenaient des sites FTP, FTPS et SFTP, en identification normale ou anonyme) et tout s'est très bien passé, mais je ne prétends pas à l'exhaustivité.

Le résultat est néanmoins là, il s'agit d'une "petite" appli (3 Mo quand même, notamment à cause de Talend), qui saura migrer les profils de connexion de FileZilla 2 vers FileZilla 3 en toute simplicité.

fzsc_1.0.0_screenshot.png

Je n'ai pas inclu le job Talend pour des raisons de taille et pour l'intérêt limité, mais si vous êtes intéressé, je peux le mettre à disposition.

fzsc icon Télécharger FileZilla Sites Converter 1.0.0 (27/08/2011) :
  http://nanawel.free.fr/dev/filezillasitesconverter/1.0.0/filezillasitesconverter_1.0.0_bin+src.7z

 

C'est tout. Il me fallait un article geek avec du code, je pense que cela répond au besoin. Il me reste encore à parler de l'outil que j'ai créé pour le lecteur audio MPD, mais il reste encore quelques bugs et je n'ai pas cherché comment générer un paquet Debian, donc ça attendra.

Commenter cet article