Développement - XML & Java : Delphi Package Factory Builder

 "Framework de construction de package automatique avec ANT et les classes COM "AntXmlHelpers".



Barre d'outils de l'application 'TLBDepends'...

Ce framework permet de constuire une liste d'application ou un "package"; il est composé :

  • des bibliothèques JAVA nécessaires au projet :
    • ANT 1.9.4 : apache-ant-1.9.4
    • ANT Contrib 0.6 : ant-contrib-0.6-bin
    • Parser SAXON 9.4.0.9 : SaxonPE9-4-0-9J
    • XmlTask : add-on ANT pour accès au XML via xmlproperty.


  • du SDK "AntXmlHelper.dll" constitué de classes COM qui réalisent principalement le mapping avec l'importion et l'exportation vers le format XML pivot. Ces classes embarquent un schéma pour chacune des entités : Builder, Project, ProjectVersion. Elles sont décorées de fonctions utilitaires pour aider à charger les données (lecture d'une liste de projets automatique, lecture des informations de version...).

  • du script ANT avec le fichier "build.xml" qui implémente les tâches suivantes :
    • une tâche d'initialisation "init" réalisant le chargement des classes Java nécessaires au processus ANT.
    • une tâche "prepare" utilisant des feuilles de styles XSL/T pour créer les fichiers "snapshot__Build.Xml".
    • une tâche "substitution" dans le code source permettant de modifier le code source d'une ou plusieurs unités avant la construction du projet.
    • une tâche de "versionning" réalisant la mise à jour des informations de versions dans le fichier source du projet (et dans le fichier ".rc").
    • une tâche de "Build" réalisant :
      • la compilation des ressources.
      • la compilation/construction du projet.


  • Il est possible de wrapper des tâches "UDF" avant ou après chaque tâche principale (prepare, substitution, versionning, build) de "build.xml". Ces tâches "UDF" permettent d'ajouter des traitements personnalisés dans le processus de construction avec par exemple dans le cadre d'un processus d'intégration continue les tâches de "delivery" (livraison) et "notify" (notification/information).

    Comme le nom "User Define Function" l'indique, ces tâches "UDF" ne sont volontairement pas formalisées comme par exemple le processus de substitution. Elles possèdent seulement deux attributs "When" et "PathCmd". Le premier permet de spécifier optionnellement quand cette UDF est mise en oeuvre dans le processus de construction et le second attribut permet de définir le type et les données du traitement par l'utilisateur au besoin. Deux types principaux de traitement sont disponible : un traitement générique de type "CreateProcess" ou "ShellExecute" et un second type de type complexe avec une définition XML spécifiquement prise en charge et de type "pluggin" ANT en raison de la désérialization du XML effectuée dans le script ANT.
En cours de construction...

Schéma des entités : Builder, Project, Application
Schéma du workflow du processus :

Développement - Delphi / .NET : TLBDepends

 Visualisateur de dépendances de bibliothèques de type


TLBDepends est une extension du projet de lecture de bibliothèque de type réalisé avec Delphi en 2005. Ce projet implémenté en 2014 permet de voir les informations d'une bibliothèque de type et celles de toutes les bibliothèques de types utilisées par la TLB sélectionnée. Chaque TLB est affichée dans un onglet et l'application permet de naviguer facilement d'une TLB à une autre et d'un type vers sa définition dans une autre TLB.



La "toolbar" de l'application présentée ci-dessus avec les boutons principaux :
  • Select TypeLib file : sélection de la bibliothèque de type (TLB) courrante.
  • Parse TypeLibrary : analyse des informations binaires et génération du code source Delphi correspondant et des listes de dépendances.
  • Build XML mapping : création du XML contenant les informations surles dépendances.
  • Draw XML TreeMap : déssine le graphisme "TreeMap" correspondant avec les dépendances de la TLB séléctionnée.
  • Les boutons de navigation avec :
    • <. Prévious : retour à la position précédente.
    • <REF> : accès à la définition de l'entité sélectionnée dans la bibliothèque de type définissant cet entité.
    • Next .> : retour à la position qui était la position courrante avant une action "Prévious".
  • Search (Full Text) : recherche dans le code généré à partir du binaire.
  • Browse XML Mapping : recherche dans le code généré à partir du binaire.
  • Thumbnail Depends : génération et exportation de miniatures pour les différents niveaux des dépendances (graph de type TreeMap).


Screenshot : Onglets code source des différentes dépendances pour la TLB sélectionnée avec en bas la liste des dépendances pour chacune de ses bibliothèques dépendances.

L'application est organisée avec trois onglets/vues principaux (verticaux sur la gauche) : Reflection, Dependencies, Search.

Le premier onglet "Reflection" sélectionné permet de voir le code source généré avec les informations binaires de la TLB sélectionnée et le code source de toutes les TLB dépendances de la sélection. Cet onglet "Reflection" sélectionné ensuite chaque onglet est associé à une dépendance de la bibliothèque de type sélectionnée.

La bibliothèque de type sélectionnée est donc affichée dans le premier onglet.

Pour chaque onglet / bibliothèque de type, les dépendances de cette TLB sont affichées dans la liste en bas de l'onglet. Le click sur un élément de cette liste sélectionne automatiquement l'onglet de la TLB sélectionnée.

La séquence "Shift+Click" sur un élément du code source permet de "browser" et sélectionner automatiquement la TLB dans laquelle la dépendance est définie. L'inspection/navigation active automatiquement les boutons de navigation "Prévious" ou "Next" ce qui permet de naviguer simplement en inspectant les éléments.



Ce projet permet donc de visualiser les informations de bibliothèques de type sans ouvrir le(s) fichier(s) binaire(s) avec Delphi. L'ensemble des TLB nécessaires ou en dépendances pour la TLB sélectionnée sont visibles dans l'application; un graph réalisé avec le composant Microsoft .NET TreeMapControl permet de visualiser l'ensemble de la hiérarchie des dépendances de manière graphique (type "TreeMap").

Screenshot : Vue des options du graph réalisé avec le composant Microsoft .NET "TreeMapControl".
Les options du composant TreeMapControl sont disponibles sur l'interface de TLBDepends (à droite sur l'onglet principal "Dependencies") dans l'onglet "Drawing Options".
  • Zoom : facteur de zoom pour le graphisme à l'écran.

  • Node Levels with Text : niveau de noeuds pour lequel un label est affiché.

  • Font Family : famille/nom de la font des labels.

  • Color Range / Metric : minumum et maximum pour les couleurs/métric pour la coloration des élements.

  • TypeLib Options : options applicatives personnalisées globales

    • "TypeInfoCount" proportionnal size : taille des éléments proportionnelle au nombre d'éléments définis (lecture dans la TLB via l'API et "TypeInfoCount") dans l'élément/TLB. Permet de proportionnaliser la taille d'un élément avec le nombre d'élement qu'il définit.

    • system TLB included in drawing : les TLB systèmes (cf. liste de définition des TLB système) sont optionnellement affichées sur le graphisme afin éventuellement d'alléger le graphisme et de n'afficher que les élements personnalisés.



Screenshot : Vue graphique des différentes dépendances pour la TLB sélectionnée avec à droite le XML correspondant (et en bas le XML pour le noeud enfant sélectionné).
L'onglet "Dependencies" comporte à gauche le graphisme de type "TreeMap" affichant les dépendances de la bibliothèque de type sélectionnée et à droite les deux onglets suivants :
  • Drawing Style: options pour personnaliser les attributs du graphisme TreeMap.

  • XML / Zoom: en haut est disponible le XML utilisé pour créer le graphisme affiché et en bas une liste offrant la possibilité de zoomer en sélectionnant un noeud enfant.


Il est donc trés simple d'utiliser le XML généré par TLBDepends directement comme source de données dans un autre composant TreeMapControl qui implémentera éventuellement une ergonomie plus dédiée à la navigation que celle de TLBDepends.

En effet TLBDepends n'autorise pas la navigation "in-situ" dans le graphisme TreeMap (hors zoom avec la sélection d'un noeud enfant).


Cette application est donc idéalement pratique pour visualiser une bibliothèque de type complexe en terme de couplage ou de dépendances c'est à dire une bibliothèque de type qui utilise une ou plusieurs autres bibliothèques de type qui elles même utilisent une ou plusieurs autres bibliothèques de type.

Des fonctions de recherche full-text, un historique de navigation avec les boutons "suivant" et "précédent" sont disponibles afin de rendre l'outils plus intégré, simple et efficace dans son utilisation. Des fonctions systèmes sont également disponibles comme par exemple l'enregistrement d'une TLB et de l'ensemble de ses dépendances.

Screenshot : interface de recherche texte et menu "Tools"
La recherche texte permet de rechercher dans la bibliothèque de type sélectionnée ou dans toutes les TLB. L'interface est identique à celle de l'éditeur de Delphi.

L'option (case à cocher en bas) "Use ITypeLib 'FindName' / ITypeLib2 'GetLibStatistics'" désactive les options avancées de la recherche (car l'API n'implémente pas ces options).

Les résultats des recherches sont affichés dans l'onglet principal "Search". Une ligne dans le tableau des résultats correspond à une occurence de l'expression recherchée. Cette occurence se comporte comme un lien hypertexte et la sélection d'un résultat sélectionne donc automatiquement l'onglet dans lequel ce résultat a été trouvé.
  
Le menu "Tools" propose les fonctions utilitaires suivantes :
  • Parse TypeLibrary : première étape de lecture/interprétation des informations de type binaires.
  • Browse XML mapping : ouverture d'une interface HTML (réalisée avec XML+XSLT) exploitant l'exportation des données réalisée avec TLBDepends.
  • Thumbnails TypeLib Depends : exporte les miniatures de tous les niveaux du TreeMap (dans un but de documentation).
  • Export to XML TypeLib dependency : exporte les données XML nécessaires pour dessiner le TreeMap.
  • Register ALL TypeLib(s) order by depends : enregistrement système de toutes les bibliothèques de type pour la TLB sélectionnnée.


Un dernier aspect de ce développement est la fonction de génération de "proxy". Cette fonction inspirée par des recherches autour d'AOP (Aspect Oriented Programming) et COM (après la lecture de l'article sur la "délégation universelle avec COM") permet de générer automatiquement une classe proxy à partir d'un template et de la TLB sélectionnée.



Le projet "TLBDepends" est présenté plus en détails sur la page dédiée à "TypeLibReader" : Projets > TypeLibReader > onglet TLBDepends

Développement - Delphi : DSM (Dependency Structure Matrix) tools.

 DSM : Dependency Structure Matrix


DSM (Dependency Structure Matrix) est le nom du tableau/matrice à deux dimensions représentant les informations de couplage entre les unités, classes et bibliothèque d'une application. Les outils de modélisation/analyse comme "Model Maker" ou encore "LATTIX" possèdent une fonction pour extraire cette matrice des dépendances à partir du code source d'un projet/application réalisé avec C++, Java ou encore avec Delphi. L'atelier logiciel de LATTIX est dédié aux travaux connexes et fournit un outils puissant et très utile pour ce "fondamental" qui n'est généralement pas spécifiquement intégré aux outils de modèlisation classiques.

 Navigateur dans matrice de dépendances "logiques" via l'édition de composants, gestion de règles d'architecture


Avec ce projet mon objectif était d'implémenter un format XML "pivot" compatible avec "Model Maker" et "Lattix" avec son éditeur "wysiwyg" permettant de naviguer aisément dans les différentes vues aux niveaux composants (groupes) et unités pour les dépendances du projet analysé. Mon ultime objectif était d'offrir avec un moteur de script et un modèle de type "expando" (1) la possibilité de scripter des contrôles de dépendances afin de vérifier automatiquement (orienté "intégration continue") que les règles spécifiées/scriptées pour un projet sont respectées.

(1) par exemple avec un modèle de type "expando" il est possible de mettre à disposition une synthaxe de script utilisant le nom d'un composant/catégorie (un groupe d'unité(s) ou de classe(s) définit logiquement dans l'outils) comme nom de méthode avec par exemple le pseudo code suivant :
pour la classe "Rules" (implémentant le modèle "expando") le pseudo-code implémente le contrôle suivant :
- le composant/catégorie "Core" n'utilise jamais "Database" : Rules.Core.NoUse(Rules.Database);

Ce projet réalisé avec Delphi ne traite pas la partie extraction des informations de couplage. Cette partie nécessitant un moteur d'analyse synthaxique pour chaque langage n'est volontairement pas abordée dans ce projet. Le projet étant initialement imaginé principalement dans l'objectif d'étudier les algorithmes de résolution/simplification de couplage et de fournir un moteur de script permettant d'implémenter des "contrôles architecturaux" en associant les unités/classes à une catégorie dans un arbre et créant ainsi des composants hiérarchisés. Par exemple dans le cadre d'une architecture de type "DAL" (Database Abstract Layer) ou d'une "facade", un script peut ainsi garantir qu'une interface masque toujours son implémentation et qu'aucun racourçi n'a été fait d'utiliser et d'instancier la "CoClass" cad la classe implémentant l'interface alors que l'interface (essence même du DAL) doit-être utilisée.

Ce projet ne permet donc pas :
  • d'extraire les informations de couplage des sources d'un projet/application; quelques soit le langage il ne réalise aucune analyse de code source.
  • de produire ou modifier du code source en fonction des modifications effectuées sur les données du DSM)
  • .
Il permet :
  • d'importer les informations d'une matrice des dépendances et le stocker dans un format personnalisé.

  • de visualiser la matrice des dépendances d'une application (importée à partir d'un fichier ModelMaker ou LATTIX).

  • de grouper dans une hiérarchie de composants une ou plusieurs entités (classe ou unité) dans la même philosophie que l'outils de source control (SC API) "ClearCase" d'IBM et son mode "UCM" (Unified Change Management) pour offrir une vue/matrice des dépendances de plus haut niveau (cad dire groupées en fonction de critères personnalisés) et proposer un zoom du couplage toujours (dans une matrice à 2 dimensions) pour les différents niveaux des groupes de plus niveaux jusqu'aux entités de plus bas niveau.

  • de spécifier des règles de gestion pour ces différents groupes hiérarchisés. Ces règles permettent de contrôler le couplage automatiquement et sont du type :
    • A utilise toujours B pour accéder à C.
      ou
    • A n'utilise jamais B mais C via D.

 Projet Delphi DSM en "Stand-by"...


Par manque de temps globalement mais aussi en raison du travail conséquent (XML map+algo+GUI+tests+benchmarks) que ce projet sollicite, ce projet est provisoirement "en stand-by". Je voulais cependant partager ce sujet afin de tenter de vous intéresser à la théorie et/ou aux outils traitant le sujet "fondamental" mais passionnant du couplage dans l'implémentation.

L'objectif de ce projet était également de fournir un exemple "concrêt" de modèle de type "expando"; le POC est donc également reporté mais sera implémenté "unitairement" afin de fournir un exemple COM de cette technique produisant contextuellement un script élégant.

Ce projet m'a permis d'étudier l'outils LATTIX et de bien que je n'ai aucun autre candidat à opposer (comme je n'ai pas poussé mes tests aussi loin avec "ModelMaker") la solution de LATTIX m'a semblé trés puissante et séduisante pour cette partie "DSM".

L'atelier de Lattix n'est pas exclusif mais complémentaire aux outils de modélisation (UML ou autres). Il offre une vue complémentaire permettant de prendre en charge un modèle comportant un couplage totalement maitrisé avec tous les intérêts que cette maitrise peut apporter.

Ci-dessous quelques screenshot du projet dans son état actuel...

 Screenshot - Onglet "Unit" avec la vue d'une unité : utilise (uses) et utilisé par (used by)



 Screenshot - Onglet "Matix" avec la vue de la matrice "DSM" : les cercles rouges (private) et bleus (public) représentent une dépendance entre deux unités.




Projet (provisoirement) en "stand-by"...

Je vous remercie pour votre lecture. Je reste disponible pour répondre à vos questions et pour discuter ensemble de ce sujet autour de vos remarques et suggestions. - Pascal CHAPUIS - Octobre 2014 -

Développement - XML : CV avec XML + XSL/T.

 TODO : Maj CV...


Avant la ré-écriture de mon CV alors dans un format "classique" (MS Word/Excel, OpenOffice, ...), j'ai consulté le net pour connaitre les solutions disponibles et les éventuels standards. Je partage une synthèse de ces petites recherches et rapides travaux autour de la notion de "CV Standard".

Idéalement (IMHO) ce standard couvrirait les exigences suivantes :
  • un schéma et des méta-données de description sont disponibles.
  • le processus de saisie du CV est simple.
  • la mise en forme (présentation/layout) est simple.
  • la publication (export "technique" du document) vers les formats PDF, HTML, DOC, ... est simple et intégrée.
  • la publication (export/mapping) vers un autre schema ("Europass" ou autre) est intégrée (XLS/T).
  • la publication (export/mapping) vers les sites de recrutement/sociaux (Monster, Viadéo, LinkedIn...) est intégrée (XLS/T).

De nombreux sites proposent maintenant l'importation de CV mais il ne semble y avoir aucun standard "grand public" prédominant et cette importation peut-être "hasardeuse" au grès du format et des séparateurs utilisés dans le document source. Pourtant des schémas existent mais manifestement essentiellement anglophones; de plus ils comportent des entités sémantiques qui ne sont pas toujours simples à appréhender pour un utilisateur non initié ou simplement non anglophone. Ces schémas sont également parfois d'une complexité technique qui les rends difficiles à aborder pour un utilisateur non informaticien; ils n'offrent pas toujours une interface assez riche dans leur version "Wysiwyg" fast-express-init;).

Cette recherche est au final limitée à un seul "standard technique" avec l'utilisation de XML + XSL (ou XSL/T); les raisons du choix de la techno XML + XSL sont :
  • Pour être opérationnel cette technologie ne nécessite pas nécessairement l'installation d'applications volumineuses.
  • Pour un utilisateur non informaticien ce standard est assez simple.
  • Les données sont aisément "portables", supportent la globalisation (Unicode) et sont assez légères.
  • Il n'existe (IMHO) aucune technique plus adaptée dans l'objectif de créer un document dans les différents formats cibles (HTML, PDF, DOC).

 Curiculum Vitae et mini-base de données : solution XML + XSL/T


Le principe général de la solution XML+XSL standard :
  • Données (informations : date, durée et expériences, formation, langues, centres d'intérêts...) = XML
  • Feuille de tranformation vers un format de présentation standard (html, pdf, doc) mise en oeuvre par le moteur de transformation du parseur XML = XSL ou XSL/T

Une solution du type "XML Résumé" (version 1.5.1 de Sean Kelly) permet de séparer simplement les données d'un curiculum vitae (CV) de la partie présentation. Ce type d'approche est intéressante dans la mesure où la présentation des données est aujourd'hui primordiale, parce que la mise en oeuvre de la solution reste assez simple et ne nécessite pas l'installation d'outils additionnels, parce que l'utilisateur à pleinement la main sur le résultat et également parce que cette solution permet de compléter simplement la base de données XML par exemple des expériences pour ajouter une nouvelle entrée au document final et ceci de manière standard sans aucune modification de la présentation.

Quelques solutions avec la technique XML+XSL disponibles (en 2014) :
  • XML Résumé (version 1.5.1 de Sean Kelly) : solution complète offrant différents modèles de présentation et une exportation "native" (Java) au format HTML, PDF et .DOC prenant en charge différents formats de sortie (A4, letter) et intégrant la globalisation (adresse, date, ...).

  • => http://
  • EuroPass : normalisation européenne proposant un schéma XSD standard de définition de la structure et des données d'un CV.


  • HR Resume () : solution non dédiée à la publication d'un CV mais plus orientée "RH".

 Solution "XML Résumé" (Sean Kelly) mise en oeuvre pour mon CV sur ce site


Pour mon usage personnel, j'ai fait le choix de personnaliser la solution "XML Résumé" principalement dans l'objectif d'y ajouter des éléments comme "SSII" (pour dans mon cas particulier de freelance) ou la collection "technos" pour chaque "techno" en référence d'une expérience. Seule la feuille de transformation vers le format HTML "html_professional.xsl" est utilisée. Le document final au format PDF est réalisé via une impression vers le format PDF (dans un navigateur par exemple). La transformation vers le format PDF "XSL-FO" intégrée à la solution "XML Résumé" n'est donc pas mise en oeuvre pour générer le fichier au format PDF final pour mon CV. En effet l'ajustement disponible avec une impression vers le format PDF s'est avérée suffisante pour mon besoin personnel en conséquence j'ai testé la fonction Java mais au final utilisé l'impression PDF.

Lors de cette personnalisation ou prise en main, la feuille de style ".css" étant particulièrement complexe, je l'ai "excessivement allégées" afin d'y ajouter les nouveaux éléments sans me perdre dans les nombreux éléments existants. C'est une erreur de ma part au final car l'export vers un document Word n'a maintenant aucune "coloration graphique" commune avec la version html en raison de la mauvaise ou partielle interprétation des balises CSS non spécifiques à Word (et/ou supprimées lors de la purge;).

La page de ce site qui présente mon CV 2014 est le résultat de ce travail. A titre d'exemple les composants personnalisés (issus du projet "XML Résumé" de Sean Kelly) du CV de cette page sont disponibles avec :
  • les données dans le fichier XML "xml_CV2014.xml"
  • la feuille de transformation dans le fichier XSL (maj du fichier "html_professional.xsl" du framework "XML Résumé") "xsl_CV2014.xsl"
  • la feuille de styles dans le fichier CSS professional.css
  • L'ensemble (XML+XSL+CSS et dépendances) avec le fichier ZIP : zip_CV2014.zip.

 Comment mettre en oeuvre les fichiers XML, XSL, CSS ci-dessus et réaliser la transformation XSL+XML vers HTML ?


Plusieurs solutions sont techniquement disponibles pour réaliser cette transformation. Par exemple un script JavaScript, VBScript ou une application Delphi ou JAVA réalise en quelques lignes de code cette transformation. Le point le plus important dans ce script/code est la classe du parseur instanciée pour rendre le service de transformation XSL. A noter que la synthaxe XSL peut comporter des éléments de synthaxe plus ou moins compatibles avec le parseur utilisé et/ou produire parfois un résultat sensiblement différent en raison d'une interprétation sensiblement différente de la feuille XSL. Une autre exigence à respecter avec le framework "XML Résumé" est le chemin courant (path) lors de la réalisation de la transformation pour garantir une inclusion des dépendances XSL et CSS effective. En effet la nature composite des ressources (XSL, CSS ou autres) du framework "XML Résumé" est gérée dans le code de manière relative et donc l'arborescence source du projet "XML Résumé" est à respecter.

Ci-dessous quelques exemples de codes permettant de générer le document du CV dans un format HTML (avec XML+XSL) sont mis à disposition. Ce type de script/code implémentant le processus de transformation XML+XSL est largement documenté sur Internet et ces quelques exemples sont fournis uniquement à titre d'exemple pour ce sujet "XML Résumé".
  • Script JavaScript
  • Script VBScript
  • Script Java
  • Exemple Delphi
En cours de construction...

A noter que les données XML et la feuille de transformation XSL sont "versionnées"; ils possèdent un numéro de version. Ces deux numéros de version sont utiles pour dater simplement les données et également les mise à jour dans la feuille de transformation modèle de présentation. Ces informations de version sont présentées sur le document final en bas dans le but principalement d'indiquer la date de la dernière mise à jour du document. Dans le framework "XML Résumé" (Sean Kelly) cette partie est spécifiquement réalisée avec le template XSL "version.xsl" qui peut bien sur être personnalisé au besoin comme l'ensemble des composants du framework.

L'usage d'un script est simple et pratique pour générer en mode batch le document final. Dans le cadre de la mise à jour des données et donc du XML un éditeur XML permettant de réaliser une transformation XSL est également ergonomique et assez simple pour un utilisateur non informaticien. Par exemple l'usage le l'éditeur "CookTop" (de Victor Pavlov) est rapide, simple et "suffisant" pour cette tâche malgrè l'âge déjà ancien de cet outils. Les fonctions nécessaires pour éditer et réaliser une transformation sont intégrées à l'éditeur "CookTop" avec :
  • Le choix du moteur de tranformation (Options> XSLT Engine) utilisé par "CookTop" pour réaliser les transformations XSL.
  • Transformation XSL avec possibilité d'exporter le résultat vers un onglet "output" ou directement vers un fichier.
  • Interprétation d'expression XPATH en mode mise au point.
  • Gestion Unicode, coloration synthaxique,

Ce choix de "CookTop" est principalement lié à la simplicité d'installation, à l'érgonomie simple et à la taille raisonnable de cet outils. D'autres éditeurs plus récents et également plus ergonomiques et complets existent bien sur avec par exemple le plus célèbre, avancé et très complet (mais volumineux) "XMLSpy XML Editor" d'Altova.

 Validation du document final et extension avec importation universelle


De nombreux site proposent maintenant la mise à jour de son CV via une fonction d'importation d'un document dans les différents formats comme PDF ou .DOC. Lors de cette importation il n'est pas rare d'obtenir une déformation du document avec par exemple un décallage ou une section manquante. La solution XML + XSL présentée pour produire un CV est parfaitement adaptée à la problématique de l'importation. En effet cette solution produit un document formaté sans risque de décallage ou ommission dans le formatage comme il est potentiellement possible manuellement.

Après avoir validé la personnalisation de la mise en forme de son CV avec la solution XML + XSL, il est donc avantageux de pouvoir importer ce document sans crainte de déformation du document source. Afin de valider "l'universalité du format" utilisé pour présenter son CV, il est intéressant de tester cet import.

Pour l'importation la nécessité d'avoir un schéma standard (plus ou moins) "universel" est évidente. Ce schéma prendrait en charge la globalisation et de nombreuses contraintes "régionales". Un mini-schéma ou namespace "local" semble donc indiqué avec éventuellement une feuille de style XSL permettant de mapper ces données "locales" vers des données globalisées ou ciblées (par exemple formatées dans le format régional de l'entreprise ciblée). Le secteur des "RH" Ressources Humaines utilise des outils dans cet optique mais (IMHO) il existe peu ou pas de standard populaire pour l'utilisateur c'est à dire le candidat. La jeunesse relative de ces sites "pro" qui proposent la publication d'un CV explique probablement le dédale actuel pour l'utilisateur qui espère importer/exporter son CV d'un site à l'autre...

Un site web dédié à ce point et garantissant au final la construction d'un CV dans un format qui respecte le format d'importation des principaux standards serait probablement un site utile et populaire. Une concertation semble-être en cours ou même effectuée car depuis peu l'import d'un site vers un autre est enfin disponible ! Cet import garantit le partage d'informations formatées et donc un standard est partagé entre ces différents sites. Je n'ai pas pousser ses recherches plus en avant sur ce point pour vérifier par exemple si le standard d'échange entre ces sites est disponible (via un schéma ou autre) pour l'utilisateur final...

 Quelles autres solutions ?


La solution XML + XSL/T présentée est une solution technique qui reste assez complexe de par sa nature synthaxique pour un utilisateur non informaticien. Des outils de bureautique comme Word, Excel, OpenOffice, ... permettent de masquer la complexité de cette solution en proposant une interface "Wysiwyg" pour manipuler les éléments, attributs et données "sans s'occuper" de la technique sous-jaccente.

De-même ces outils proposent généralement des modèles ou "templates" permettant de saisir directement les informations dans un modèle pré-défini et personnalisable. Ces solutions sont généralement suffisantes pour un modèle de CV sans spécificités comme par exemple : employeur/SSII/client ou "technos/techno" pour les profils fortement orientés techniques. Hélas la pérénité de ces solutions n'est pas toujours assurée en raison de l'évolution permanente des systèmes et des applications; l'immutabilité du document final peut donc être pertubée par une migration d'une version d'un système à une autre version.

 Conclusion


La solution technique XML + XSL/T semble donc avantageuse sur différents points : maitrise du process, document multi-format (html, pdf, doc, ...), solution légère et orientée modèle ou schéma. Cependant quid d'un schéma standard ? Pour un sujet aussi populaire que le travail et la présentation d'un individu à son futur employeur, aucun standard internationnal, simple, répandu et reconnu ne semble disponible pour ce sujet en 2014...


Je vous remercie pour votre attention; je reste disponible pour répondre à vos questions et pour discuter ensemble de ce sujet autour de vos remarques et suggestions.
Ouf l'article est publié... avant qu'un "super-schéma standard" définissant un modèle de CV internationnal ne sorte !... ouf;-))) - Pascal CHAPUIS - Octobre 2014 -

Développement - GPU : les nouveaux langages

 Découverte et tests des langages dédiés à la programmation des GPU.


Le GPU est une solution élégante et relativement peu honéreuse pour les traitements "gourmants" en temps machine. Le hardware en 2014 embarque un GPU généralement en soutient au CPU et éventuellement un GPU supplémentaire dans la carte graphique. Par exemple mon dernier DELL XPS15 inclu cette configuration et c'est par curiosité que j'ai consulté les derniers outils disponibles pour mettre en oeuvre ces circuits dans l'objectif d'obtenir ainsi une puissance de traitement supérieure à celle du plus gros CPU multi-core du marché.

Cette solution technique n'est pas adaptée à tous les types de traitement en raison de la nature du traitement réalisé par le GPU. En effet seuls les algorithmes ayant une résolution optimum en utilisant massivement le parallèlisme sont adressés avec succés par le GPU. Quelques exemples de benchmark sont disponibles à ce sujet afin de démontrer le périmètre spécifique de traitement avec GPU.

Ci-dessous quelques solutions 2014 pour la programmation des GPU :

Nom Produit Description

NVIDIA CUDA Solution propriétaire de NVIDIA constructeur de cartes graphiques fournit avec un SDK/kit de développement et de nombreux exemples. Cette "solution hardware + software" complète est probablement la plus populaire actuellement. Elle comporte déjà de nombreuses implémentations mettant en oeuvre toute la puissance de la solution pour des sujets dédiés cependant car la solution massivement parallèle n'est en effet pas adaptée à certains algorithmes comportant trop de "branches".

TODO En cours de construction...

© Pascal Chapuis - ChapsAndChips 2014