Alexandre ARTAUD Classe 31 Antoine ARTAUD Classe 32 Yannick DELBEZ Classe 33 Jean-Jacques FONTANA Classe 33 23 Mars 2007 Rapport Intermédiaire de PSI (Projet des Sciences de l’Ingénieur) Sujet : Création d’une BDD Image Suiveur : M Djebali Sommaire I. Introduction II. Rappel des objectifs III. Résultats obtenus III.1 Délimitations du projet o III.1.1 Bilan de la première réunion o III.1.2 Bilan de la seconde réunion III.2 Répartition des tâches et caractéristiques techniques du projet III.3 Réalisation du projet o III.3.1 Réalisation de l’application Web III.3.1.1 La fonction insertion III.3.1.2 La fonction recherche III.3.1.3 La fonction affichage III.3.1.4 La fonction modification o III.3.2 Réalisation de l’application locale IV. Analyses critiques des membres du groupe Table des annexes I. Introduction Le projet scientifique et technique de la troisième année : le PSI, Projet des Sciences de l’Ingénieur. Celui-ci nous permet de mettre en pratique les notions étudiées en classe. Nous avons porté notre choix sur un thème récurent des technologies actuelles de l’information : les bases de données. Une base de données est un ensemble structuré et organisé permettant le stockage de grandes quantités d'informations afin d'en faciliter l'exploitation. II. Rappel des Objectifs Ce projet a pour but la conception d’une base de donnés, et plus spécifiquement une base de données d’images (BDI). La réalisation d’une interface spécifique permettra à l'utilisateur d’extraire facilement les informations voulues depuis la base de données. III. Résultats Obtenus III.1 Délimitations du projet III.1.1 Bilan de la première réunion Le 23 Janvier 2007 nous avons effectué une première réunion entres les membres du groupe afin d’évaluer la faisabilité du projet. Cette étude nous a permis d’éclaircir les contraintes technologiques et temporelles liées à la réalisation du projet. III.1.2 Bilan de la seconde réunion Le 30 Janvier 2007 nous nous sommes réunis une deuxième fois. Lors de cette seconde réunion nous avons exposé l’ensemble des possibilités, des langages informatiques qui s’offraient à nous. Les technologies et langages informatiques suivants ont été évoqués : GTK, langage C, SQL, Java, PHP, Bash. Nous avons essayé de comparer les différentes approches du projet : pourquoi utiliserait-on ce langage plutôt qu’un autre ? Quels sont ses avantages ? Ses inconvénients ? A la suite de cette seconde réunion, nous avons décidé de réaliser deux applications distinctes eu sein du projet : Une application Web et une application locale. - L’application Web permet de gérer une base de données à distance via une interface programmée en langage PHP. - L’application locale permet de gérer une base de données uniquement sur une seule machine via une interface programmée an langage JAVA. - Dans les deux cas les bases de données sont programmées en langage SQL (avec MySQL). Lors de cette réunion nous avons également segmenté le projet en plusieurs parties afin de pouvoir répartir plus facilement les tâches au sein du groupe. III.2 Répartition des tâches et caractéristiques techniques du projet Application Web Langages Informatiques utilisés Partie I Partie II Partie III PHP et SQL Application Locale JAVA et SQL Récupérer les informations des images -nom du fichier -nom du fichier -Format de l’image (GIF, JPEG, -Format de l’image (GIF, JPEG, PNG etc.) PNG etc.) -taille de l’image (En Octets) -taille de l’image (En Octets) -dimension de l’image (En Pixels) -dimension de l’image (En Pixels) -date de création -date de modification -date de modification -Conversion de l’image en BLOB* -date de dernière consultation -Conversion de l’image en BLOB* Communiquer les informations récupérées à la base de données -Etablir une connexion avec le -Etablir une connexion avec le SGBD** SGBD** -Récupérer les résultats des requêtes -Installation du driver de SGBD** -Insertion sur Netbeans 5.0*** -Modification -Récupérer les résultats des -Suppression requêtes sur une IHM (Interface -Recherche Homme Machine) -Insertion -Modification -Suppression -Recherche Gestion de la base de données -Effectuer les requêtes SQL -Effectuer les requêtes SQL -Interface pour sortir le résultat en -Interface en Java (Utilisation de fonction des critères. Swing****) pour sortir le résultat (Web/interface graphique, boutons) en fonction des critères. (interface graphique, agencement graphique, boutons) * : BLOB : format de fichier permettant le stockage de données binaires ** : SGBD : système de gestion de base de données *** : Netbeans : environnement de développement pour le langage JAVA **** : Swing : bibliothèque graphique pour le langage JAVA La répartition des tâches a été effectuée de la manière suivante : Alexandre était chargé des Parties I et II Yannick était chargé de la Partie III Antoine était chargé de la Partie II Jean-Jacques était chargé de la Partie I III.3 Réalisation du projet Dans un premier temps nous nous sommes concentrés sur la partie Web du projet. Ne connaissant pas du tout le JAVA en début d’année il nous a semblé plus judicieux de procéder ainsi. Le PHP ne nous était pas non plus familier, mais nous semblait plus accessible. Le SQL ayant été appris lors du premier semestre, nous avons approfondi nos connaissances. III.3.1 Réalisation de l’application Web Dans un premier temps nous avons réalisé une segmentation de l’ensemble des fonctions de l’application. (Insertion, Recherche, Modification, Suppression). III.3.1.1 La fonction insertion Nous avons tout d’abord réalisé l’insertion des images. Cette opération insère dans la base de données toutes les images d’un dossier prédéfinis. Ce dossier doit être nommé image pour être compatible avec notre code source PHP. Voir annexe 2 et 3 III.3.1.2 La fonction recherche Nous avons ensuite conçut la fonctionnalité de recherche. Celle-ci a été la partie la plus difficile à implémenter. En effet le nombre de critères de recherche d’une image ayant considérablement augmenté au fur et à mesure de l’avancement du projet, cela à augmenter le nombre de requêtes SQL à programmer. Voir annexe 4, 5 et 6 III.3.1.3 La fonction affichage La problématique de l’affichage des résultats s’est ensuite posée. Nous avons tout d’abord réussit à récupérer le résultat des requêtes sous formes de texte brut. Cependant nous avons pensé qu’il serait plus parlant de représenter les résultats des images recherchées par l’image elle-même. Nous nous sommes interrogés sur la manière de stocker l’image sur la base de données. Le BLOB (Binary Large Object) nous a permis de stocker l’image au format BLOB, c'est-à-dire de convertir l’image en données binaires brutes. La restitution de l’image dans son format d’origine (JPEG, GIF etc.) étant réalisée par le biais d’un code PHP. Afin de pouvoir stocker nos images au format BLOB dans la base de données nous avons dus insérer un nouveau champ BLOB dans celle-ci. Voir annexe 5 et 6 III.3.1.4 La fonction modification Nous nous sommes ensuite penchés sur la partie modification des fichiers image. Nous avons réalisé les modifications possibles suivantes : modification de la dimension du fichier et modification du nom du fichier et suppression d’un fichier. En ce qui concerne la modification des dimensions, les dimensions de l’image sont modifiées dans la base de données sans pour autant modifier l’image en elle-même car cela impliquerait une modification du format BLOB de l’image dans la base de données. A ce jour nous n’avons pas trouvé le moyen de modifier à la fois le BLOB du fichier et les dimensions de l’image dans la base de données. Voir annexe 7 La partie de suppression de fichier permet de supprimer une image à partir de son nom de fichier. Voir annexe 8 Voir annexe 20 pour la base de données. III.3.2 Réalisation de l’application locale Nous avons utilisé la librairie graphique Swing pour l’interface de l’IHM (Interface Homme Machine). Il a été très difficile à l’ensemble du groupe d’implémenter cette partie de l’application car nous commencions tout juste à apprendre le langage JAVA au travers du cours de GLPOO de troisième année (Génie Logiciel et Programmation Orientée Objet). Nous avons donc du approfondir nos connaissances en matière d’interfaces graphiques en utilisant la librairie Swing. Malheureusement, à l’époque nous ne connaissions pas encore la fonctionnalité Matisse de Netbeans qui permet de dessiner à la main des interfaces graphiques. Nous avons par ailleurs réussi à faire communiquer la base de données et notre application JAVA en installant le driver SGBD fournit par MySQL et en implémentant des classes de connexion. Par la suite nous avons réussi à programmer des fonctions d’insertions simples (une seule image est insérée dans la base de données) et multiples (plusieurs images son insérées en même temps). L’insertion dans la base de données ouvre une nouvelle fenêtre affichant l’ensemble des informations insérées dans une JDialog. Cependant nous n’avons pas réussi à récupérer les dates de créations et les dates de derniers accés de l’image sous JAVA. Nous pensons que cela est dû à un problème de portabilité du langage (compatibilité sur plusieurs systèmes d’exploitation). A la place, nous avons choisi d’insérer la date du jour pour éviter de récréer la table de la base de données. Les champs de recherches ont été plus faciles à implémenter. Les champs de modifications et suppressions se comportent comme dans l’application Web avec les mêmes problématiques sur la modification de l’image. Voir annexe 9 à 19 IV. Analyses critiques des membres du groupe Alexandre : J’ai au cours de ce projet mieux appréhendé l’organisation qu’un projet à l’année impliquait. Notamment lors des premières réunions où l’on a réfléchi sur les avantages et les faiblesses que pouvaient représenter les choix technologiques. Cette confrontation m’a donné un autre point de vue sur l’informatique. L’esprit d’équipe est l’un des moments fort de cette activité. Les personnes de l’équipe communiquaient régulièrement sur l’avancement du projet. Dès qu’une personne était en difficulté nous avons essayé de l’aider au maximum pour essayer de la « débloquer ». C’est ce que représente l’esprit d’équipe une entraide pour la réussite du projet. Je tire donc à ce jour un autre point de vue sur la notion d’esprit d’équipe. Le projet m’a aussi permis d’approfondir les cours de cette année, en cherchant à aller toujours plus loin. Yannick : Depuis mon arrivée à l’école ce projet est sans conteste le plus important que j’ai eu à traiter. Une des principales difficultés a été de synthétiser les connaissances globales du groupe afin de savoir ce qu’il était possible de faire. Pour ma part, durant ce projet, je considere que l’entraide continuelle au sein du groupe a été l’avancée la plus majeure en matiere de relations humaines. D’un point de vue technique, ce projet m’a permis d’approfondir mes connaissances sur les bases de données, mais aussi l’occasion de mettre en pratique un nouveau langage : le JAVA. D’une manière générale ce projet a amélioré ma capacité à aller chercher les informations par moi-même et a respecter les plannings que nous avions fixé au sein de l’équipe. Jean-Jacques : Pour ma part, ce projet m’a permis d’apprendre énormément de choses tant sur le plan techniques que sur le plan humain. En effet, concernant le plan technique, j’ai dû apprendre très rapidement différents langages de programmation que je ne connaissais pas tels que XHTML/CSS et PHP indispensable pour pouvoir déployer notre projet sur l’internet. Le groupe ayant ensuite décidé de passer d’une interface web à une interface Java, j’ai appris le langage Java ainsi que l’utilisation de l’IDE NetBeans. Contrairement au module de cours, nous devons rechercher et apprendre les connaissances par nous même, ce qui demande énormément de patience et de rigueur. Il m’a donc fallu organiser mon travail pour être le plus efficace possible. Sur le plan humain, j’ai pu aussi améliorer ma communication au sein d’un groupe que ce soit lors les différentes phases d’élaboration du projet où nous étions tous réuni que lors des phases de conception où il fallait communiquer pas courriel. Antoine : Ce Psi m’a permis d’appréhender, de comprendre des nouvelles technologies et à apprendre à répartir le travail au sein d’une équipe lors de la phase de conception du projet. Une phase de conception, nous a permis de choisir les technologies appropriées pour répondre aux cahiers des charges fixés par le sujet. Il a donc fallu choisir les technologies adéquates aux problèmes, et la faisabilité de celui-ci vis-à-vis de la technologie concernée. Nous nous sommes par la suite, auto formée aux différentes technologies, notamment le PHP le Java ce qui a constitué le plus gros du travail. Nous avons donc appris à être plus rigoureux et organiser notre travail ; ce qui nous a permis de migrer l’application en PHP (web) à une application système en Java de deux niveau (logiciel, BDI sur MySQL). Table des annexes Annexes des diagrammes UML Annexes de l’application Web Annexe 1…………… Annexe 2 Annexe 3 Annexe 4 Annexe 5 Annexe 6 Annexe 7 Annexe 8 Annexe 9 Annexes del’application Locale Annexe 10 Annexe 11 Annexe 12 Annexe 13 Annexe 14 Annexe 15 Annexe 16 Annexe 17 Annexe 18 Annexe 19 -Annexe MySQL Annexe 20 Annexe 1 : Annexe 2: Annexe 3 : Annexe 4 : Annexe 5 : Annexe 6 : Annexe 7 : Annexe 8 : Annexe 9 : Annexe 10 : Annexe 11 : Annexe 12: Annexe 13: Annexe 14: Annexe 15: Annexe 16: Annexe 17: Annexe 18: Annexe 19: Annexe 20: