Untitled - Université de Montpellier
Transcription
Untitled - Université de Montpellier
Remerciements Au terme de ce travail, j’aimerais adresser mes remerciements à toute personne ayant contribué, de près ou de loin, à sa réalisation. Je témoigne toute ma gratitude à la société BSD CONCEPT SARL, qui m’a fait partager un environnement de travail convivial et une ambiance collaborative très agréable. Je remercie plus particulièrement M. Nicolas TREHEL, mon chef de projet. J’ai beaucoup appris grâce à lui et à son aide considérable au cours de ces quelques mois. Que le corps professoral et administratif de l’université Montpellier II et surtout M. Eric Bourreau, mon encadrant, trouvent ici ma reconnaissance, pour tout le travail effectué durant mes années d’études. Enfin, une pensée spéciale pour ma famille, mes proches et aussi à toutes les personnes qui m’ont aidé de façon directe ou indirecte durant mon cursus. Elimane NDIAYE Page 2 sur 45 Table des matières Remerciements ....................................................................................................................................... 2 CHAPITRE 1 : ............................................................................................................................................ 6 Introduction............................................................................................................................................. 7 1. Présentation de l’entreprise ............................................................................................................ 7 1.1 Les origines de BSD Concept ................................................................................................. 7 1.2 L’origine du nom Heredis ...................................................................................................... 8 1.3 Historique .............................................................................................................................. 8 1.4 Marché .................................................................................................................................. 8 1.4.1 Positionnement sur le marché français .............................................................................. 9 1.4.2 Positionnement à l’international........................................................................................ 9 1.5 Les clients .............................................................................................................................. 9 1.6 Les associations ................................................................................................................... 11 1.7 Les différents produits......................................................................................................... 11 1.7.1 Le logiciel Heredis ............................................................................................................. 11 1.7.2 Les applications mobiles................................................................................................... 11 2. Présentation du projet : ................................................................................................................ 11 2.1 Description du projet :......................................................................................................... 11 2.2 Objectifs du projet: .............................................................................................................. 12 2.3 Parties prenantes: ............................................................................................................... 12 2.4 Planification du travail: ........................................................................................................ 12 3. Méthodologie de projet ................................................................................................................ 13 3.1 Méthode agile..................................................................................................................... 13 3.2 SCRUM ................................................................................................................................. 14 3.3 Heredis................................................................................................................................. 16 4. Gestion de projet ........................................................................................................................... 17 4.1 Jira Agile............................................................................................................................... 17 4.2 Tortoise SVN ........................................................................................................................ 18 CHAPITRE 2 : .......................................................................................................................................... 19 Etude préliminaire et recherche de solutions techniques .................................................................... 20 1. Openstreetmap ............................................................................................................................. 20 2. Coder une carte ............................................................................................................................ 21 3. Les tuiles ........................................................................................................................................ 21 4. Une bibliothèque JavaScript .......................................................................................................... 22 Elimane NDIAYE Page 3 sur 45 4.1 Leaflet .................................................................................................................................. 22 4.2 OpenLayers ......................................................................................................................... 22 5. Pourquoi le choix de leaflet et non openlayers? ........................................................................... 22 6. Cahier des charges......................................................................................................................... 23 7. Aspect général de la fonctionnalité .............................................................................................. 24 8. L’entête de l’application ................................................................................................................ 25 9. Zone affichage carte ...................................................................................................................... 25 10. Maquette de l’application ........................................................................................................... 26 Chapitre 3 .............................................................................................................................................. 27 Outils de développement, technologies utilisés et réalisation ............................................................. 28 1. Outil de développement................................................................................................................ 28 2. Technologies utilisées.................................................................................................................... 28 2.1 JSON..................................................................................................................................... 28 2.2 Leaflet : ................................................................................................................................ 28 2.3 Markercluster ...................................................................................................................... 28 2.4 LeafletSlider ......................................................................................................................... 29 2.5 Html 5 .................................................................................................................................. 29 2.6 CSS ....................................................................................................................................... 29 3. Réalisation ..................................................................................................................................... 29 3.1 Fonction recherche.............................................................................................................. 29 3.2 Liste des individus................................................................................................................ 29 3.3 Liste des lieux : .................................................................................................................... 30 3.4 Marker cluster (regroupement de markers) ....................................................................... 30 3.5 Click sur un markersCluster ................................................................................................. 31 3.6 Répartition géographique ................................................................................................... 31 3.7 Modes de représentation .................................................................................................... 31 3.8 Limitation des évènements ................................................................................................. 32 3.9 Barre de progression ........................................................................................................... 32 3.10 Affichage de la répartition géographique à l’écran ........................................................... 32 CHAPITRE 4 : .......................................................................................................................................... 34 Expérimentations .................................................................................................................................. 35 1. Essaies réalisés ............................................................................................................................. 35 2. Résultats obtenus .......................................................................................................................... 35 Conclusion ............................................................................................................................................. 37 Elimane NDIAYE Page 4 sur 45 1. Difficultés rencontrées : ................................................................................................................ 37 2. Apports personnels ....................................................................................................................... 37 3. Apports pour l'entreprise .............................................................................................................. 37 Annexes - Rapport technique ................................................................................................................ 38 1. Affichage carte............................................................................................................................... 39 1.1 Coquille HTML5 .................................................................................................................. 39 1.2 Import de Leaflet ................................................................................................................ 39 1.3 Import du markercluster .................................................................................................... 39 1.4 Création de notre fichier JavaScript .................................................................................. 40 1.5 Initialisation et import de fond de carte............................................................................ 40 1.6 Fonction création d’un objet MarkerCluster ..................................................................... 41 1.7 Affichage carte ................................................................................................................... 41 2. Résultat obtenu ............................................................................................................................ 42 Glossaire ................................................................................................................................................ 44 Résumé .................................................................................................................................................. 45 Elimane NDIAYE Page 5 sur 45 CHAPITRE 1 : Contexte général et objectifs du stage « Dans ce chapitre sont présentés la structure d’accueil (BSD CONCEPT) ainsi que leurs activités. Suivra une vue générale du projet en définissant ses objectifs et la méthodologie suivie pour assurer son bon déroulement. » Elimane NDIAYE Page 6 sur 45 Introduction Ce rapport présente le travail effectué dans le cadre du stage de fin d’études pour l’obtention du diplôme de Master en informatique spécialité « architecture et ingénierie du logiciel et du web » délivré par l’Université Montpellier II. J’ai effectué ce stage dans l’entreprise BSD Concept SARL basée à Montpellier. Cette entreprise conçoit et réalise principalement un logiciel de généalogie qui est leader sur le marché français : Heredis. Le sujet qui m’a été proposé s’intitule « répartition géographique», qui pour objectif de développer une fonctionnalité multiplateforme (PC, Mac, IOS, Android) à l’aide d’un serveur OpenStreetMap permettant montrer sur une carte, la répartition des événements généalogiques (naissances, mariages, décès, ect…) avec la répartition de ces données dans le temps et de nombreuses options. Le présent mémoire est constitué de quatre chapitres détaillant les étapes du déroulement du projet : Le premier chapitre présente le contexte général et des différents objectifs du stage. Le second chapitre comprend l’étude préliminaire et la recherche de solutions techniques utilisées pour la réalisation du projet. Le troisième chapitre présente les outils de développement et les technologies adoptés afin de mettre en œuvre le projet. Ainsi nous avons mis l’accent sur les étapes suivies pour sa mise en œuvre. Le dernier chapitre est consacré à la réalisation des essais et les résultats obtenus. 1. Présentation de l’entreprise 1.1 Les origines de BSD Concept L’aventure a commencé en 1994, lorsque Bernard DAVID, informaticien et passionné de généalogie, a créé le logiciel « Heredis » pour un membre de sa famille qui voulait, pour sa généalogie, un logiciel simple et intuitif qu’il ne trouvait pas. Suite à l’utilisation du logiciel par le membre de la famille, d’autres personnes s’y sont intéressées et ont demandé à Bernard et Sylvette DAVID de le commercialiser. Ils ont donc créé une SARL comportant leur initiales, « Bernard et Sylvette DAVID », c’est ainsi que « BSD Concept » a vu le jour. BSD Concept possède un code NAF et est reconnu comme étant un éditeur de logiciels applicatifs. Elimane NDIAYE Page 7 sur 45 1.2 L’origine du nom Heredis Il vient du mot latin heres, heredis (au génitif) qui a donné son nom au logiciel. En voici la définition : *hērēs (haerēs), ēdis, **héritier, héritière, légataire. **rejeton (d’un arbre). 1.3 Historique Débutant son activité en 1994, la société BSD Concept, S.A.R.L. au capital de 15 000€, connait au fur et à mesure des années un chiffre d’affaire croissant qui a atteint le million cette année et dont 20% représente les ventes de versions Macintosh. En 2009, le nombre de salarié a dépassé la barre de la dizaine pour se maintenir actuellement à 11 salariés dont l’un d’entre eux en télétravail. Avec un concurrent direct sur le marché et des idées toujours innovantes, l’entreprise continue de s’agrandir et développe de nouvelles versions pour Windows et Macintosh, ainsi qu’un site internet dédié à la généalogie qui a évolué au fur et à mesure des années et des versions du logiciel. Le premier janvier 2014, Heredis fêtait ses 20 ans d’existence. 1.4 Marché Depuis quelques années, on observe deux grandes tendances sur le marché. D’une part, les téléchargements des logiciels dit « embarqués » depuis le site internet de Heredis qui permet aux clients de travailler directement depuis leur ordinateur. Et d’autre part, les logiciels « online » où les clients se connectent sur un site internet pour travailler en ligne sur des fichiers et récupérer des données. Le modèle économique est, quant à lui différent. D’un côté, le logiciel et ses différentes mises à jour sont achetés ce qui est la source principale de revenu et de l’autre, le client paye un abonnement annuel, plus léger mais plus régulier. En général, le client débutant commence par les logiciels en ligne, plus simple d’utilisation et moins couteux. Ensuite, à cause du nombre d’options qui sont beaucoup plus réduites que dans le logiciel, il décide d’acheter le logiciel. L’utilisateur est ensuite libre de publier ses recherches sur des sites de partage. A noter que les deux manières de travailler tendent à converger avec le développement des applications sur mobile. Elimane NDIAYE Page 8 sur 45 1.4.1 Positionnement sur le marché français En France, deux acteurs se partagent le marché du logiciel de généalogie, BSD Concept avec son logiciel Heredis et son concurrent CDIP avec son logiciel Généatique. BSD est leader sur le marché français et sa position semble s’accroître, pour plusieurs raisons : CDIP se développe sur d’autres logiciels qui n’ont pas de lien avec la généalogie (Scrapbooking) et investi dans ce secteur. Il n’a pas d’évolution technologique majeure : aucun téléchargement du logiciel n’est proposé, aucune présence à l’international et aucun développement sur mobile. 1.4.2 Positionnement à l’international A l’international, deux zones sont principalement visées : l’Europe et les États-Unis qui ont un très gros marché et qui permettraient à Heredis d’accroître son expansion. Le logiciel Heredis est très peu connu à l’étranger et est plus cher que les concurrents. C’est pourquoi, l’entreprise a choisi de diminuer fortement son prix pour devenir compétitif. Cette baisse de prix à l’étranger a également engendré une baisse de son prix en France afin d’être cohérent avec ses produits. Pour son développement à l’international, BSD Concept mise sur sa version Macintosh, à travers la plate-forme de téléchargement Apple Store qui est une vitrine internationale très importante. Les contraintes techniques imposées par l’Apple Store ont été importantes mais désormais le produit est référencé et les ventes commencent à décoller. Avec son entrée dans l’Apple Store, Heredis est présent au niveau mondial, hormis l’Italie qui possède déjà un logiciel ayant le même nom. A noter que les concurrents principaux à l’international tels que FamilyTreeMaker et Ancestry ne sont pas présents sur Apple Store, ce qui laisse davantage de chance à Heredis pour s’implanter et acquérir de nouveaux utilisateurs. Pour son internationalisation, le choix s’est d’abord porté sur Macintosh car les acteurs Windows étant présents depuis longtemps avec une bonne notoriété. Il a été jugé judicieux d’acquérir de nouveaux acteurs Macintosh. 1.5 Les clients La généalogie est un marché de niche, avec des utilisateurs passionnés qui sont tous des particuliers. Chaque année, environ 20 000 licences sont vendues en France dont un noyau principal composé d’environ 10 000 clients. Ces derniers Elimane NDIAYE Page 9 sur 45 achètent régulièrement les nouvelles versions ce qui est un point fort pour l’entreprise car cela permet d’assurer un chiffre d’affaires régulier. Aujourd’hui, BSD Concept compte plus de 300 000 utilisateurs créant ainsi une communauté très importante. Elimane NDIAYE Page 10 sur 45 1.6 Les associations Plus de 500 associations de généalogie sont affiliées avec BSD Concept/Heredis. Elles disposent des versions Windows et/ou Macintosh ainsi que des guides de formation afin de former leurs adhérents au logiciel. La découverte du logiciel par les associations peut ainsi inciter de nouvelles personnes à acheter le logiciel afin qu’ils puissent l’utiliser chez eux. 1.7 Les différents produits 1.7.1 Le logiciel Heredis Jusqu’à la version 12 de Heredis, BSD Concept vendait son logiciel en commerce avec un manuel utilisateur et un DVD. Tout a été dématérialisé à partir de Heredis 12 et BSD Concept vend uniquement son produit en téléchargement pour les deux plates-formes. Il existe deux versions du logiciel, standard ou professionnel et les mises à jour des anciennes versions sont également disponibles en téléchargement. 1.7.2 Les applications mobiles Les applications mobiles sont gratuites et disponibles sur les plates-formes de téléchargement d’applications mobiles. Pour le moment, BSD Concept distribue une application pour iOS et d’ici la fin de l’année, elle distribuera une application pour Android. Basée à Montpellier, au Millénaire, l’équipe Heredis compte une dizaine de développeurs. Leurs spécificités : passionnés par le monde informatique, ils se sont tous convertis à la généalogie dès leur entrée chez Heredis et travaillent tous les jours en étroite collaboration avec les utilisateurs et une équipe de bêta-testeurs.1 2. Présentation du projet : 2.1 Description du projet : Une fonctionnalité similaire de la répartition géographique existe déjà dans Heredis. Cependant, il s'est rapidement avéré que non seulement cette fonctionnalité ne 1 (Heredis, Societe, l'équipe Heredis, 2014) Elimane NDIAYE Page 11 sur 45 Phase 1 : Etude préliminaire et recherche de solutions techniques Il s’agit de la phase de lancement du projet. Je l’ai entamé par une familiarisation de l’ergonomie du logiciel Heredis et une étude des besoins réels et librairies qui existent dans le domaine de la cartographie et qui sont susceptibles d’intervenir à la généalogie. Par la suite, Confronter les solutions trouvées au cahier de cahier fonctionnel afin de détecter les éventuels écarts qualitatifs et quantitatifs. Chaque solution est analysée en terme de rentabilité et d’avantages/ inconvénients pour le projet. Phase 2 : Réalisation et mise en œuvre Cela consiste à mettre en œuvre l’application. Cette phase est amorcée par la préparation des outils de développement. S’en suit la partie codage de l’application puis la partie test et validation. Phase 3 : expérimentations : C’est la phase finale du projet. Elle consiste à intégrer la fonctionnalité dans HEREDIS pour réaliser des démonstrations afin de tester l’application et de recueillir d’autres suggestions. 3. Méthodologie de projet 3.1 Méthode agile Selon Claude Aubry, auteur de Scrum, le guide pratique de la méthode agile la plus populaire : « Les méthodes agiles représentent un mouvement novateur qui vise à apporter plus de valeur aux clients et aux utilisateurs, ainsi qu’une plus grande satisfaction dans leur travail aux membres de l’équipe. Le but affiché d’une méthode agile est de maximiser la valeur ajoutée : le développement s’effectuant par itérations successives, il est possible, à la fin de chaque itération, de changer les priorités en faisant en sorte que les éléments apportant le plus de valeurs soient réalisés en premier. » Dans son ouvrage, Claude Aubry détaille les principes et pratiques des méthodes agiles et la manière dont elles fonctionnent. Il décrit également comment utiliser la méthode SCRUM. Elimane NDIAYE Page 13 sur 45 3.2 SCRUM Extrait de l’ouvrage de Claude Aubry : « Le nom vient du rugby. On prononce « screum » pas « scrume », ni « scroum ». Scrum signifie mêlée au rugby. Scrum utilise les valeurs et l’esprit du rugby et les adapte aux projets de développement. Comme le pack d’un ballon porté au rugby, l’équipe chargée du développement travaille de façon collective, soudée vers un objectif précis. Comme un demi de mêlée, le Scrum Master aiguillonne les membres de l’équipe, les repositionne dans la bonne direction et donne le tempo pour assurer la réussite du projet. » Cette méthode s'appuie sur le découpage d'un projet en boîtes de temps, nommés « sprints ». Les sprints peuvent durer entre deux semaines et un mois (avec une préférence pour deux semaines). Avant de démarrer un nouveau sprint, l'équipe réalise une rétrospective : elle analyse ce qui s'est passé durant ce sprint, afin de s'améliorer pour le prochain.2 Au sein de BSD Concept, les sprints sont planifiés toutes les 3 semaines. Figure 1 - Vue globale de la méthode SCRUM Scrum utilise une approche itérative et incrémentale pour le développement d’un produit. Incrémental Incrémental est utilisé pour mettre en évidence l’accroissement du produit obtenu à la fin de chaque sprint. Un processus incrémental permet de construire un produit morceau par morceau, chaque nouvelle partie venant s’ajouter à l’existant. Pour l’écriture de ce mémoire, j’ai utilisé une approche incrémentale : j’ai fait un plan initial et j’ai rédigé chapitre par chapitre 2 (Wikipedia, Scrum (méthode), 2014) Elimane NDIAYE Page 14 sur 45 Itératif Itérer est l’action de répéter. Dans le développement de logiciel, le terme itération est utilisé pour désigner une période de temps dans laquelle sont effectuées des activités, qui seront répétées dans les prochaines itérations. Le terme est souvent associé à processus. Un processus itératif permet de revenir sur ce qui a été fait, dans le but de l’améliorer ou de le compléter. Cela part de l’idée qu’il est difficile, voire impossible de bien faire la première fois. Le feedback collecté sur le résultat d’une itération permet de faire des améliorations dans la suivante. On cesse d’itérer quand la qualité obtenue est jugée satisfaisante. Pour l’écriture de ce mémoire, j’ai utilisé une approche itérative : j’ai diffusé le premier jet à certaines personnes et grâce à leur feedback, j’ai produit une nouvelle version. Itératif et incrémental Scrum combine les deux approches avec la notion de sprint : A l’issue du sprint, il y a un incrément de produit qui est réalisé, Le feedback sollicité sur cet incrément permet de le perfectionner dans un prochain sprint. En résumé, un sprint est une itération qui produit un nouvel incrément (incrémental) et peut aussi enrichir un incrément d’un sprint précédent (itératif).3 BSD Concept utilise donc une méthode incrémentale itérative pour réaliser ses projets. 3 (Aubry, 2010) Elimane NDIAYE Page 15 sur 45 3.3 Heredis L’objectif durant une période de projet est qu’une fois celle-ci terminée, le projet soit « vendable » même si des fonctionnalités ont pu être annulées par faute de temps ou par manque de personnes pour les réaliser. Avant de débuter une nouvelle version du logiciel, l’équipe Heredis se regroupe pour définir le produit et énoncer les nouvelles fonctionnalités à développer. Lorsqu’une version est définie, les fonctionnalités de la version suivante le sont aussi. Il ne faut pas attendre qu’une version soit terminée pour réfléchir à la suivante. Les développements des versions sont faits en parallèles. 0 Vendu Heredis X Définition du produit d1 f1(x) d2 … … f2(x) Heredis X+1 Définition du produit Note : d1 : définition de la fonction 1. f1(x) : développement de la fonction 1. Développement de Heredis X+1 Figure 2 - Fonctionnement de SCRUM pour le développement des versions d'Heredis L’intégration du projet est faite en continu. Des build4 sont réalisés quotidiennement pour avoir constamment une version fonctionnelle. Il est très important d’avoir toujours une version « vendable » et fonctionnelle. Intégration en continue début d1 fin f1(x) d2 f2(x) d3 f3(x) Figure 3 - Intégration normale 4 Un « build » est une version exécutable d’une partie du système ou du système entier. Elimane NDIAYE Page 16 sur 45 Il se peut que certaines tâches prennent plus de temps que d’autres car des problèmes sont décelés et/ou des corrections de bugs sont nécessaires . Intégration en continue début d1 fin r1 f1(x) d2 f2(x) d3 f3(x) Note : r1 : retard sur la fonction 1. Figure 4 - Intégration avec retard Lorsque qu’une fonction est réalisée, il se peut que d’autres idées soient ajoutées à cette dernière. Elle est alors améliorée en boucle jusqu’à ce qu’elle soit terminée. Une fonctionnalité est considérée comme terminée soit parce que la totalité de la fonction a été réalisée soit parce qu’il manque du temps pour la terminer. 4. Gestion de projet Lorsque de nouveaux développeurs sont arrivés dans la société pour créer les nouvelles versions de Heredis, il a été nécessaire de mettre en place des outils de gestion de projet afin d’avoir un suivi des évolutions du logiciel au fur et à mesure de son développement. 4.1 Jira Agile Figure 5 - Logo Jira Agile Jira est un système de suivi de bugs, un système de gestion des incidents, et un système de gestion de projets.5 JIRA Agile révèle toute la puissance de la méthode agile. Création et estimation de "user stories" (récits utilisateurs), élaboration de tableaux de tâches (sprint backlog), 5 (Wikipedia, Jira, 2013) Elimane NDIAYE Page 17 sur 45 identification de l’engagement et de la vélocité de l’équipe, visualisation de l'activité, rapports sur l'avancement …6 4.2 Tortoise SVN C’est un gestionnaire de version, client de SVN (i.e. Subversion). Subversion fonctionne donc sur le mode client-serveur, avec : Un serveur informatique centralisé et unique où se situent : les fichiers constituant la référence (le "dépôt" ou "repository" en anglais), un logiciel serveur Subversion tournant en "tâche de fond". Des postes clients sur lesquels se trouvent : les fichiers recopiés depuis le serveur, éventuellement modifiés localement depuis, et un logiciel client, ici Tortoise SVN, permettant la synchronisation, manuelle et/ou automatisée, entre chaque client et le serveur de référence .7 Une charte de codage est employée par l’ensemble de l’équipe de développeur : Chaque fichier comporte un en-tête définissant son nom, une brève description, son numéro de version, la dernière date de modification, l'auteur et une indication sur le projet auquel il appartient (cf. Erreur ! Source du renvoi introuvable.) 6 (Atlassian, 2013) 7 (Wikipedia, Apache Subversion, 2013) Elimane NDIAYE Page 18 sur 45 CHAPITRE 2 : Etude préliminaire et recherche de solutions techniques « Dans ce chapitre sont présentés l’étude préliminaire et la recherche de solutions techniques utilisées pour la réalisation du projet. » Elimane NDIAYE Page 19 sur 45 Etude preliminaire et recherche de solutions techniques Etant totalement étranger dans le domaine de la généalogie et des SIG il me fallait d’une part comprendre le fonctionnement du logiciel Heredis et d’autre part comprendre les librairies permettant de réaliser des cartes openstreetmap, afin que la fonctionnalité, une fois réalisée, puisse répondre aux attentes de l'entreprise. J’ai eu tout d’abord accès à la dernière version du logiciel (heredis 2014 version pro sous Windows) pour me familiariser avec l’ergonomie du logiciel. Ainsi, mon projet devrait s’intégrer naturellement au logiciel pour qu’il ait logique de fonctionnalité dans celuici. J’ai par la suite, recherché la répartition géographique dans les différents logiciels de généalogies présents sur le marché afin d me faire une idée. Ceci m’a demandé d’être critique face à la même fonctionnalité des concurrents pour pouvoir répondre du mieux possible aux désirs des utilisateurs et à la facilité de l’utilisation de ma fonctionnalité. Et d’autre part étudier et comprendre les librairies permettant de réaliser des cartes openstreetmap, afin que la fonctionnalité, une fois réalisée, puisse répondre aux attentes de l'entreprise. 1. Openstreetmap Les cartes libres publiées au sein du projet OpenStreetMaps sont de plus en plus populaires et plusieurs sociétés font usage de ces dernières après avoir abandonné les interfaces de programmation de Google Maps. En effet, OpenStreetMap est gratuit et se présente sous la forme d'une énorme base de données répertoriant les Elimane NDIAYE Page 20 sur 45 cartes géographiques tombées dans le domaine public. Il s'agit par exemple des données provenant du satellite Landsat 7, des cartes du littoral fournies par le gouvernement américain, celles du cadastre français publiées par la direction générale des Finances publiques ou encore de l'imagerie distribuée par Microsoft. « OpenStreetMap (OSM) est un projet fondé en 2004 destiné à réaliser une carte du monde, sous licence « libre ». Cela signifie, que tout le monde est libre d'utiliser, d'améliorer, de distribuer ou d'effectuer des travaux dérivés à partir des cartes, donnant ainsi une liberté bien plus grande que les solutions telles que Google Maps. » 2. Coder une carte Coder une carte requiert deux choses : Des tuiles et une bibliothèque javascript. Les tuiles forment la base de la carte, et des couches (layers) sont ajoutées par-dessus pour afficher des points, des reliefs, zones, popups, etc. par-dessus les couches utilisées. 3. Les tuiles Ce sont les blocs qui constitueront la carte. Ces blocs sont chargés en fonction de la zone de la carte affichée. Typiquement, ce sont les tuiles Mapnik qui est un logiciel libre de rendu de carte sont utilisées par OSM. Elles ressemblent à cela : Elimane NDIAYE Page 21 sur 45 4. Une bibliothèque JavaScript C’est un ensemble de fonctions JavaScript prédéfinies pour exploiter les tuiles et les couches qui se superposeront dessus. 4.1 Leaflet Leaflet est API Cartographique OpenSource développée en JavaScript par Vladimir Agafonkin et de nombreux contributeurs permettant de créer des cartes interactives pour présenter vos données géographiques et qui mise son succès sur sa simplicité et sa facilité d'utilisation. Sa taille faible (34kB) lui permet d’être particulièrement adaptée aux usages mobiles. 4.2 OpenLayers OpenLayers est une API Cartographique OpenSource développée en JavaScript par une communauté de développeurs permettant de créer des cartes interactives pour présenter vos données géographiques. 5. Pourquoi le choix de leaflet et non openlayers? Le tableau ci-dessous montre un comparatif entre leaflet et opensLayers: Leaflet Leaflet OpenLayers OpenLayers Développé par des géomaticiens le code est moins bien structuré et moins facile à prendre en main. Développé par des informaticiens Avantage : Code facile à prendre en main pour un développeur Avantage : Elimane NDIAYE o Gestion de la géographie (Système de projection, etc.) Page 22 sur 45 Inconvénients : o Simple o Puissant o Développement plus compliqué o Système de plug-in o Documentation pauvre Inconvénient : o Certaines limitations sur la gestion de la géographie Compatibilité OpenLayers 3 (Limitation WebGL) : o o Compatibilité : o o Desktop : Chrome Firefox Safari 5+ IE 7+ o Desktop : Chrome 8+ Firefox 4+ Safari 5.1 + IE 11 Mobile : Chrome Android 3.1 Code : environ 40 lignes Mobile : Safari iOS 3+ Android browser 2.2+ Chrome (iOS, Android) 4+ IE 10/11 Windows 8 Rendu intelligent des polylignes et polygones Accélération matérielle iOS Code pensé pour l’évolution Code : environ 30 lignes Suite à cette comparaison, on peut dresser un premier bilan. Le code Leaflet est plus simple à prendre en main et permet la réaliser des cartes plus rapidement qu'OpenLayers. Il nous faut une trentaine de ligne de code avec Leaflet pour réaliser une carte qu'avec OpenLayers il faut une quarantaine de ligne de code il n'y a pas de pop-up sur les points. Il est tout à fait possible de rajouter les pop-up sur les points en OpenLayers mais le code est alors uniquement du JavaScript sans lien avec l'API et donc ne présente que peu d'intérêt. 6. Cahier des charges La première étape nécessaire avant de se lancer dans un tel projet a été d'établir un cahier des charges afin de réunir l'ensemble des fonctionnalités que devait proposer la nouvelle version de la répartition géographique. Elimane NDIAYE Page 23 sur 45 Bien que la plupart des fonctionnalités fussent présentes dans les versions antérieures du logiciel, le but est également d'apporter des nouveautés afin de faciliter l'utilisation de cette fonctionnalité par les utilisateurs du logiciel. Dans cette partie, nous allons résumer le cahier des charges en présentant une utilisation classique de la répartition géographique, et les fonctionnalités qu'elle doit présenter. Afficher la répartition géographique des individus d'une généalogie sur des cartes OpenStreetMap. les filtres disponibles : limitation des individus : Tous les individus / Individus marqués uniquement / Personnage central. limitation des événements : Tous les événements / Evénements majeurs uniquement. Une option permettant de cartographier les événements par période ou par génération. Un bouton permettant de lancer un diaporama. Prévoir un bandeau latéral à droite dans lequel on affichera la liste des lieux avec le nombre d'événements par lieu. Prévoir un bouton pour voir la fréquence d'événements pour un lieu sur PC. Sur PC, compléter la vérification des lieux pour ajouter les lieux non "géo localisés". 7. Aspect général de la fonctionnalité Apres avoir réalisé différents modèles, j’ai eu une réunion avec mon chef de stage afin de choisir quel modèle allait être développé en fonction des utilisateurs actuels du logiciel Heredis. Le modèle aura la forme suivante : Un menu à gauche : verticalement fixe à l’affichage à l’écran, composé de trois sois menu dépliables : Répartition géographique : Tous les individus Les ascendants Les descendants Les individus marqués Modes de représentation : Par densité Par période Par génération Limitation des évènements : Tous les évènements. Evènements majeurs Menu droite : Cette partie est verticalement fixe à l’affichage à l’écran et contient deux boutons suivants : Boutons individu Elimane NDIAYE Bouton lieux Page 24 sur 45 Bouton recherche: Un combo box : Tous les lieux Les lieux plus représentés Lieux non Les lieux visibles. Bouton recherche Liste des lieux 8. L’entête de l’application Cette zone est cachée par défaut. Elle est visible que lorsque clic sur le bouton radio « descendant, menu droite ». Elle dispose d’un slider qui permet de lancer le diaporama et de cartographier les événements par période ou par génération. 9. Zone affichage carte Cette zone représente une balise « div » de taille définie avec un «id="map"». C’est dans cette balise que notre carte s’affichera. Elimane NDIAYE Page 25 sur 45 10. Maquette de l’application Clic bouton lieux Clic bouton individus Clic bouton lieux Par période Clic sur un lieu Elimane NDIAYE Page 26 sur 45 Chapitre 3 Réalisation « Le présent chapitre présente les outils de développement et les technologies adoptés afin de mettre en œuvre le projet. Ainsi nous avons mis l’accent sur les étapes suivies pour sa mise en œuvre. » Elimane NDIAYE Page 27 sur 45 Outils de developpement, technologies utilises et realisation Maintenant que nous avons pris connaissance du fonctionnement du logiciel Heredis, de l'énoncé et les besoins fonctionnels et techniques du projet, nous allons présenter les outils qui nous ont permis de développer la fonctionnalité et les étapes de développement des éléments les plus importants. 1. Outil de développement NetBeans est un environnement de développement intégré (EDI), placé en open source par Sun en juin 2000sous licence CDDL et GPLv2 (Common Development and Distribution License). En plus de Java, NetBeans permet également de supporter différents autre langages comme C, C++, JavaScript, XML, PHP et HTML. Il comprend toutes les caractéristiques d'un IDE moderne (éditeur en couleur, projets multi-langage, refactoring, éditeur graphique d'interfaces et de pages Web). 2. Technologies utilisées 2.1 JSON Le logiciel HEREDIS génère un fichier json qui me permet de représenter les données sur les cartes, afficher la liste des individus, la liste des lieux. 2.2 Leaflet : Suite à la comparaison entre leaflet et openlayers, nous avons décidé de coder notre fonctionnalité avec l’API leaflet de par sa simplicité de son code pensé à l’évolution. 2.3 Markercluster C’est une extension de leaflet qui nous permet de réaliser des points d’intérêts de belles animations sur les marqueurs. Elimane NDIAYE Page 28 sur 45 2.4 LeafletSlider C’est une extension de leaflet pour affichage d’une barre latérale. La barre est cachée par défaut. Quand l’utilisateur clic sur un lieu ou un individu, la barre s’ouvre et affiche l’ensemble des évènements associés à ce lieu ou à ce lieu ou individu. 2.5 Html 5 Le langage HTML (Hypertext Markup Language) est le format de données conçu pour représenter les pages web. C’est un langage descriptif qui permet de structurer et de mettre en forme le contenu des pages, d’inclure des ressources multimédias dont des images, des formulaires de saisie, et des éléments programmables. Il permet de créer des documents interopérables avec des équipements très variés de manière conforme aux exigences de l’accessibilité du web. 2.6 CSS w3.org « Les feuilles de style en cascade (CSS) permettent d’ajouter facilement du style (polices, couleurs, espacement, etc.) à des documents Web. » L’utilisation de ce langage permet : La séparation entre la structure de la page et sa présentation La portabilité du contenu (écran PC, mobile ou imprimante) La réduction de la taille et la complexité du code HTML 3. Réalisation Après avoir réalisé différentes maquettes, j’ai eu une réunion avec mon chef de stage et l’ensemble de l’équipe afin de choir quel modèle allait développer en fonction des attentes des utilisateurs actuels de heredis. C’est donc à ce moment que j’ai la réalisation de la fonctionnalité. 3.1 Fonction recherche La fonction recherche va chercher tous les d’individus (ou tous les lieux) dont le nom contient la valeur saisie par l’utilisateur (exemple : si l’on saisit “Ab” la liste des individus (ou des lieux) est automatiquement mise à jour et affiche que les individus (ou que les lieux) ayant un nom contenant “Ab”). La liste est toujours trier par ordre alphabétique. 3.2 Liste des individus Le bouton individus, dans le menu droit, permet de voir la liste des individus et le nombre d’évènements récences pour chaque individu. La liste qui est affichée dépend du choix de l’utilisateur par rapport à la limitation des évènements. Si l’utilisateur coche l’option « tous les évènements » alors la liste de tous les individus Elimane NDIAYE Page 29 sur 45 du fichier est affichée, si l’option « évènements majeurs » est choisie dans ce cas la liste des individus ayant au moins un évènement majeur est affichée. 3.3 Liste des lieux : Le bouton lieux affiche la liste des lieux et le nombre d’évènements recensés dans chaque lieu en fonction de la limitation des évènements. D’autres options s’y ajoutent : Tous les lieux : permet de lister tous les lieux par ordre alphabétique Lieux plus représentés : Trie la liste en fonction des nombres évènement recensé dans chaque lieu. Lieux non placés certains lieux ne sur la carte : Il arrive que soient pas localisés. Par conséquent, les coordonnées (latitude, longitude) seront nulles et ne seront pas placés sur la carte. Cette option permet de voir tous les lieux qui ne sont pas placés sur la carte. Les lieux visibles : En zoomant sur la carte, certains marqueurs vont disparaitre sur la zone d’affichage à l’écran. Cette option permet à l’utilisateur de voir tous les qui sont visibles sur la carte. 3.4 Marker cluster (regroupement de markers) Notre application peut afficher un jeu de données conséquent en fonction du nombre d’individus et d’évènements dans le fichier généalogique. Pour plus de lisibilité, j’ai utilisé le plugin markerCluster qui me permet de regrouper les markers en clusters. Chaque cluster est associé à une couleur en fonction de son nombre de marqueurs : - Couleur verte : cluster inférieur à 10 marqueurs. - Couleur jaune : cluster inférieur à 100 marqueurs - Couleur orange : Au-delà de 100 markers Elimane NDIAYE Page 30 sur 45 3.5 Click sur un markersCluster Les marqueurs sont regroupés sous forme de cluster (un cercle coloré à l’intérieur duquel est affiché le nombre de marqueurs contenant le cercle). Un clic sur un marker permet à l’utilisateur de voir la liste de tous les évènements associés à chaque lieu et à chaque individu. La fonction est rendue possible grâce la méthode getAllChildMarkers() qui me permet de récupérer toutes les latitudes et longitudes présentes sur le cluster. Ce qui me permettra de récupérer les lieux et les individus qui ont eu un évènement à ces lieux. 3.6 Répartition géographique Cette partie les options de paramétrage suivantes sont proposées à l’utilisateur : Tous les individus : Permet d’afficher tous les individus du fichier généalogique de l’utilisateur. Les ascendants : Représentation individuelle centrée sur un individu et ses ancêtres. Les descendants : Représentation individuelle centrée sur un individu et ses descendants. Les individus marqués : Les informations concernant les individus nés il y a moins d’un siècle sont interdites à la diffusion sans accord préalable de l’individu lui-même. Il a fallu donc intégrer dans le logiciel un moyen de pouvoir enlever certaines personnes lorsque l’utilisateur veut créer un arbre ou exporter sa généalogie, c’est la confidentialité. Grace à une recherche multicritère incluse dans Heredis, il est facile d’appliquer une confidentialité sur certains individus, qui pourront lors de construction d’arbres ou d’exports ne pas apparaitre. Au contraire, lorsqu’une généalogie commence à être relativement importante, l’utilisateur ne veut pas forcément voir apparaitre tous les individus de son fichier par exemple. Ainsi, toujours grâce à la recherche multicritères, l’utilisateur peut aisément marquer une partie de sa généalogie et choisir de n’afficher que les individus marqués dans un arbre. 3.7 Modes de représentation Densité : Cette option permet d’afficher tous les évènements sous forme de custer. Par période : Affiche les évènements d’une période donnée (année début, année fin) et de lancer un diaporama Par génération : Affiche les évènements d’une génération donnée et de lancer un diaporama Elimane NDIAYE Page 31 sur 45 3.8 Limitation des évènements Possibilité d’afficher tous les évènements. Possibilité de limiter aux seuls événements majeurs (Mariage, Naissance, Baptême, Décès). 3.9 Barre de progression Le chargement de la fonctionnalité peut nécessiter un certain temps d’attente qui dépend du nombre d’individus à afficher. Afin de faire patienter les utilisateurs lors du chargement, j’ai réalisé une barre de progression qui indique l’avancement du chargement. Cette barre de progression est aussi utilisée lors du chargement de certains paramètres qui nécessitent un rechargement de la page et donc de relancer tous les calculs. 3.10 Affichage de la répartition géographique à l’écran Le but de mon stage était d’afficher sur l’écran la fonctionnalité que je réalise. L’interface devait donc prendre une place importante dans mon travail. Si je tiens Elimane NDIAYE Page 32 sur 45 compte du fait qu’une grande partie des utilisateurs du logiciel Heredis ne sont pas des utilisateurs assidus de matériel informatique, il faut d’autant plus faire attention à la facilité d’utilisation et à l’ergonomie d’application à réaliser. Lors du choix des positionnements des menus, boutons, case à cocher, a été essentiel dans le déroulement de mon stage. A cette fin, j’ai eu plusieurs réunions avec mon chef de projet et toute l’équipe de développement. Une option positionnée en haut à droite sur la carte permettra aux utilisateurs d’afficher un fond de carte en noir et blanc, un fond de carte en gris ou le fond de carte par défaut de openstreetmap. Elimane NDIAYE Page 33 sur 45 CHAPITRE 4 : Expérimentations « Ce chapitre présente les essais réalisés afin de tester l’application. Il présente également les résultats obtenus. » Elimane NDIAYE Page 34 sur 45 Experimentations 1. Essaies réalisés L’application elle est intégrée à la version 2015 d’Heredis afin de pouvoir réaliser des essais expérimentaux. L’objectif de ces essais est d’évaluer la fiabilité, l’exactitude des données affichées par l’application et le temps d’exécution. Ces essais permettent aussi de connaitre les limites de l’utilisation de notre application et les facteurs influençant l’exactitude des données affichées. Plusieurs fichiers plus ou moins volumineux sont testés, afin d’estimer leur temps d’exécution et les données affichées. 2. Résultats obtenus Le seul problème rencontré était le temps d’exécution de la fonctionnalité. Le plus gros fichier qui a été testé contenait 125000 individus. Son temps d’exécution dépasse la minute, ce qui est relativement long. J’ai donc tenté de réduire le temps de calcul et de trouver dans mon code les fonctions qui nécessitaient le plus de temps et essayer de réduire le temps d’exécution. Planning Les différentes taches du projet ont été planifiées sur le diagramme de Gantt suivant : Elimane NDIAYE Page 35 sur 45 Elimane NDIAYE Page 36 sur 45 Conclusion A l'heure de l'écriture de ce rapport, les fonctionnalités principales de l’application ont été grandement effectuées à savoir la limitation des évènements, réparation par densité, répartition géographique (affichage tous les individus, les ascendants, descendants, les individus marqués), la fonction de recherche automatique, affichage de la liste des individus, liste des lieux avec le nombre d’évènements qui est associé à chaque individu ou lieu, les lieux plus représentés et les lieux visibles sur la carte. 1. Difficultés rencontrées : Maintenant que le projet est achevé, nous pouvons objectivement revenir sur les points noirs et les difficultés que nous avons rencontrés et qui nous ont ralentis durant toute la durée de notre travail collectif. Commençons tout d'abord avec le premier problème. La principale difficulté auquel il a fallu faire face lors de ce stage a été la méconnaissance de l'univers complexe de la généalogie dans lequel ce projet prenait place. Jusqu'à présent, dans tous les projets effectués dans le cadre scolaire, les énoncés étaient souvent très clairs et permettaient d'établir des schémas de conception sans documentation supplémentaire. Pour ce stage, il a été nécessaire de me familiariser avec toute la terminologie de la généalogie afin de pouvoir réaliser projet. 2. Apports personnels Ce stage en entreprise m'a énormément apporté, autant du point de vue personnel que professionnel. Tout d'abord, ce stage m'a plongé dans diverses situations, qui sont autant de bonnes expériences pour le futur : le développement d'un projet en équipe et surtout le fait d'avoir mené un important projet de sa conception à ses tests, encore en cours. Bien qu'ayant déjà été confronté à de telles situations pendant la période scolaire, le vivre dans un cadre professionnel est quelque chose de totalement différent. 3. Apports pour l'entreprise Lorsque la nouvelle fonctionnalité de la répartition géographique sera terminée, les utilisateurs de la version de HEREDIS 2015 vont pouvoir bénéficier de beaucoup plus de fonctionnalités, de confort et de lisibilité de ce que leur proposait l'ancienne version. Elimane NDIAYE Page 37 sur 45 Annexes - Rapport technique - Elimane NDIAYE Page 38 sur 45 1. Affichage carte 1.1 Coquille HTML5 La balise « body » qui représente le corps de la page contient une balise « div » de taille définie avec un «id="map"». C’est dans cette balise que notre carte s’affichera. <html> <head> <title>Leaflet la simple</title> <meta http-equiv="Content-Type"content="text/html; charset=latin1"> </head> <body> <div id="map""></div> </body> </html> 1.2 Import de Leaflet Pour pouvoir utiliser Leaflet, il faut importer cette bibliothèque dans notre fichier HTML. Ceci peut se faire de deux manières : Soit en téléchargeant le fichier JavaScript de Leaflet disponible ici leafletjs.com/download.html). L’importation se fait ensuite simplement en rajoutant entre les balises <head> de la page HTML : <script src="js/leaflet.js"></script> Soit en accédant directement en ligne à la bibliothèque <script src="http://cdn.leafletjs.com/leaflet-0.7/leaflet.js"></script> Il convient aussi d’ajouter le fichier de style CSS propre à Leaflet via la ligne : <link rel= "stylesheet" href="css/leaflet.css"></script> 1.3 Import du markercluster <script src="js/leaflet.markercluster.js" type="text/javascript"></script> <script src="js/leaflet.markercluster-src.js" type="text/javascript"></script> Il convient aussi d’ajouter le fichier de style CSS propre au plugin markercluster Elimane NDIAYE Page 39 sur 45 <link href="css/MarkerCluster.Default.css" rel="stylesheet" type="text/css" /> 1.4 Création de notre fichier JavaScript Apres avoir créer la structure de notre page htlm, nous allons maintenant mettre en place le script JavaScript qui nous permettra de configurer notre carte. Pour plus de lisibilité, le code est écrit dans un fichier appelé carte.js séparé du code HTML et dans ce cas-là le header doit aller pointer vers ce fichier comme ceci : <script src="js /carte.js"></script> 1.5 Initialisation et import de fond de carte Les fonds de carte que nous avons sont issus de openstreetmap, mapbox et stamen. map = new L.Map('map'); var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; var osmAttrib = 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors'; var osm = new L.TileLayer(osmUrl, { attribution: osmAttrib }); var noiretblanc = new L.StamenTileLayer("toner"); var mbAttr = 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' + 'Imagery © <a href="http://mapbox.com">Mapbox</a>', mbUrl = 'https://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png'; var grayscale = L.tileLayer(mbUrl, { id: 'examples.map-20v6611k', attribution: mbAttr }); baseMaps = { "Grayscale": grayscale, "OSM": osm, Elimane NDIAYE Page 40 sur 45 "Fond noir et blanc": noiretblanc }; map.addLayer(grayscale); map.addControl(new L.Control.Layers(baseMaps, {}, { position: 'topleft' })); sidebar = L.control.sidebar('sidebar', { closeButton: true, position: 'right' }); map.addControl(sidebar); afficheAllMarkers(values); 1.6 Fonction création d’un objet MarkerCluster function createMarkers() { markers = new L.MarkerClusterGroup(); } 1.7 Affichage carte function afficheAllMarkers(tab) { var i=0; var title; var tableauDate=[]; createMarkers(); for (key in tab["Individus"]) // parcourir chaque pour recuperer la latitute et la longitude { var ev = tab["Individus"][key]["Individu"][1]; //ici on recupere le deuxieme objet de chaque individu qui correspond l'objet Evenement for (key2 in ev["Evenements"]) // parcourir les lieux de chaque evenement pour recuperer la latitute et la longitude Elimane NDIAYE Page 41 sur 45 { var lat = (ev["Evenements"][key2]["lieu"]["Latitude"]); var long = (ev["Evenements"][key2]["lieu"]["Longitude"]); if((lat!=="0.0")&&(long !=="0.0")) { title = "<div class=\"bulles\"><h1>" + tab["Individus"][key]["Individu"][0]["Nom"] + " " + tab["Individus"][key]["Individu"][0]["Prenom"] + "</h1></div><div class=\"bulles\"><div class=\"pin\"><img src=\"images/markers/marker-event-famiss.png\" alt=\"\" /></div><h2>" + ev["Evenements"][key2]["lieu"]["pays"] + "<span> - " + ev["Evenements"][key2]["lieu"]["ville"] + "</span></h2><p style=\"margin-bottom:10px;\"></p></div>"; var marker = new L.Marker(new L.LatLng(lat, long), { icon: myIcon }); markers.addLayer(marker); tableauDate[i]=ev["Evenements"][key2]["Annee"]; i=i+1; } } } tabDate=tableauDate.sort(); map.addLayer(markers); map.fitBounds(markers.getBounds()); } 2. Résultat obtenu Elimane NDIAYE Page 42 sur 45 Elimane NDIAYE Page 43 sur 45 Glossaire SIG : Système d’information géographique. JSON : Acronyme données textuelles. de "JavaScript Object Notation " est un format de AJAX : Acronyme de " Asynchronous JavaScript and XML", technologie permettant d'appeler de manière dynamique un script PHP sur un serveur. IDE : Acronyme de " Itegrated Development Environment ". API : Acronyme de "Application Programming Interface", ensemble de classes, fonctions ou méthodes permettant d'interagir avec un logiciel. CSS : Acronyme de "Cascading Stylesheet", langage du web permettant d'attribuer un design à un bloc ou en ensemble de blocs. Framework : Ensemble d'outils représentant une base stable sur laquelle construire un logiciel. HTML : Acronyme de "Hypertext Markup Language", langage de structuration de sites web. IDE : Acronyme de "Integrated Development Environment", environnement de travail rassemblant de nombreux outils visant à aider le programmeur. Javascript : Langage de programmation web s'exécutant coté client permettant de modifier une page web sans rechargement de la page. jQuery : Langage de programmation web, surcouche de Javascript. Elimane NDIAYE Page 44 sur 45 Resume Ce rapport présente le travail effectué dans le cadre du stage de fin d’études pour l’obtention du diplôme de Master en génie informatique spécialité « architecture et ingénierie du logiciel et du web » délivré par l’Université Montpellier II. Ce projet intitulé «répartition géographique», a pour objectif de développer une fonctionnalité multiplateforme (PC, Mac, IOS, Android) à l’aide d’un serveur OpenStreetMap permettant montrer sur une carte, la répartition des événements généalogiques (naissances, mariages, décès, ect…) avec la répartition de ces données dans le temps avec de nombreuses options. Ce stage m'a permis de découvrir l'univers de la généalogie, son lexique et ses mécanismes, et m'a donné l'opportunité de gérer entièrement un projet dans un contexte professionnel pour la première fois. Ce fut une expérience réellement enrichissante que de surmonter les obstacles qui se dressaient sur le projet, et une belle entrée dans la vie active. Elimane NDIAYE Page 45 sur 45