Commits

Amirouche Boubekki committed b27fe22

added a bunch of report to copy from :)

Comments (0)

Files changed (56)

ressources/achaibou_lyna.pdf

Binary file added.

ressources/boobsandbottoms_com_4.mpg

Binary file added.

ressources/cepoi_eugen.pdf

Binary file added.

ressources/malakian_stephanie.pdf

Binary file added.

ressources/mouhoubi_zahir.pdf

Binary file added.

ressources/rapport-stage-martinez.pdf

Binary file added.

ressources/rapport-stage-martinez.txt

+Estelle Martinez
+Rapport de stage
+
+
+Je remercie l’équipe de Pilot Systems de m’avoir accueillie dans leur entreprise, en particulier :
+David Sapiro, gérant de Pilot Systems, pour m’avoir fait confiance en m’accueillant lors de mon stage,
+Yohann Gabory, mon maître de stage, pour m’avoir guidée dans mon travail et appris de nombreuses
+choses relatives à Django et au web,
+Léo Bernard, Gaël Le Mignot, Bruno Dupuis, Rodolphe Quiédeville, Joseph Rozencwajg, Yann Yanga
+et Amirouche Boubekki pour leur aide lors de certains projets et grâce à qui mon stage a été agréable
+et enrichissant.
+Je remercie également Michel Liquière, mon tuteur de stage au sein de l’IUT pour son encadrement,
+L’équipe enseignante du département SRC de l’IUT de Béziers pour les connaissances dispensées lors
+des deux années de mon DUT.
+
+3
+
+
+Résumé
+
+5
+
+Summary
+
+6
+
+L’entreprise
+
+7
+
+Outils de communication
+	
+	
+	
+	
+
+8
+10
+12
+12
+
+Le tracker
+Le wiki
+L’intranet
+L’IRC
+
+Technologies utilisées
+	
+	
+	
+
+13
+13
+14
+
+Python
+Django
+Plone
+
+Mes missons
+	
+	
+	
+	
+	
+
+15
+22
+28
+34
+36
+
+Cockpit
+Libéfood
+Cobra
+Projet Finistère
+Autres missions
+
+Bilan
+
+38
+
+Glossaire
+
+39
+
+Annexes
+
+42
+
+4
+
+
+Contexte
+	
+
+Ce stage de 10 semaines fait partie de ma formation en DUT Services et Réseaux de Communication.
+
+L’entreprise
+	
+Pilot Systems est une petite SSLL (Société de Services en Logiciels Libres) parisienne. Elle est
+composée d’environ 10 personnes. Son activité principale est le développement de sites web en Python
+(en particulier Django, Plone et Zope) et leur hébergement.
+
+Mission
+	
+Ma mission se situait principalement dans le développement de sites web en Django, mais aussi
+dans l’intégration graphique. J’ai pu travailler sur quatre projets en particulier :
+- Cockpit, une application d’e-mailing (envoi massif de newsletters en ligne, statistiques, gestion des désabonnements, ouvertures
+de mails, erreurs, etc.) développée par Pilot Systems et utilisant
+la technologie Django. CaaS (Cockpit as a Service) compte parmi ses clients l’AFDAS, la fondation
+Casques Rouges, l’INSIA ou encore France Premium et Libéfood.
+- Libéfood, un site web agrégateur de contenus de la société France
+Premium et du journal Libération, développé et hébergé par Pilot Systems. Ce site web liste des contenus de blogs, Twitter, Facebook, Youtube, Dailymotion, Vimeo et Flickr à propos de la gastronomie, de restaurants, etc. Il a été réalisé avec
+le framework Django.
+- Cobra, projet de refonte du site web de Pilot Systems. Il a pour but un renouveau graphique du site,
+une refonte des contenus et le lancement de nouvelles offres. Ce projet utilise la technologie Plone, un
+CMS (Content Management System, ou gestionnaire de contenu) en Python.
+- Projet Finistère, contribution à OpenStreetMap, qui consiste en la création d’une
+carte du monde sous licence libre. Mon travail a été de réaliser une interface web de
+création de graphes en javascript et ajax, à partir de données JSON.
+
+5
+
+
+Context
+	
+
+This ten-week internship is part of my two-year undergraduate course about multimedia.
+
+The company
+	
+Pilot Systems is a little company from Paris, using FOSS (free and open source software).
+There are about ten employees in this company. Its principal activity is web site development using
+Python technologies as Django, Plone and Zope. The company also provides hosting for this kind of
+websites.
+
+Mission
+	
+My mission was mainly to develop Django websites, but also to make graphical interfaces for
+these websites. I have been working on four projects :
+- Cockpit, an e-mailing web application (massive newsletters
+sending, statistics, unsubscribtions, error bounces, etc.) developed
+by Pilot Systems, Django powered. CaaS (Cockpit as a Service)
+has clients like l’AFDAS, la fondation Casques Rouges, l’INSIA or France Premium and Libéfood.
+- Libéfood, a news aggregator website owned by France Premium and
+Libération newspaper, developed and hosted by Pilot Systems. This
+website gives a list of blogs, Twitter, Facebook, Youtube, Dailymotion,
+Vimeo and Flickr contents about gastronomy, restaurants, etc. It is Django powered.
+- Cobra, a project about Pilot Systems’ website redesign and restructuring. The purpose is to make
+a new graphic design, a rewriting of the contents and new offers launching. This project uses Plone
+technology, a Python CMS (Content Management System).
+- Finistère project, contribution to OpenStreetMap, that consists in creation a free world map. My work
+was to make a web interface that allows the user to visualize graphs. These graphs
+are made using javascript and ajax with JSON files.
+
+6
+
+
+Pilot Systems : une SSLL
+	
+
+‘‘
+
+Pilot Systems est un SSLL, c’est à dire une Société de Services en Logiciels Libres.
+Une société de services en logiciels libres (SSLL ou SS2L) est une société de services
+en ingénierie informatique (SS2I) spécialisée dans la réalisation de projets informatiques basés sur des logiciels libres ou logiciels Open Source.
+À la différence des SSI classiques, ces entreprises proposent des prestations (conseil,
+assistance, formation, intégration, développement) développées exclusivement avec des
+composants logiciels libres.
+Wikipédia
+
+’’
+
+	
+Pilot Systems est une petite entreprise de services en informatique basée à Paris, dans le
+vingtième arrondissement. Elle propose de l’intégration, de la personnalisation et du support pour les
+logiciels libres. Elle dispose d’une infrastructure permettant l’hébergement de serveurs et de sites web.
+Pilot Systems dispense aussi des formations sur certaines technologies Open Source, en particulier
+Python, Django, Plone et Zope.
+Les buts de l’entreprise sont :
+- Le développement de sites web, en utilisant des technologies Open Source, le plus souvent en Python
+- L’hébergement des sites développés chez Pilot Systems ou non, utilisant des technologies Python
+- La proposition de solutions Open Source
+
+Pilot Systems est une entreprise composée de 10 personnes. La société est gérée par David Sapiro,
+qui s’occupe en particulier de la stratégie commerciale, de la communication, et des relations client.
+L’équipe est composée de développeurs, d’administrateurs système, mais aussi de gestionnaires de
+projet et d’assistants de direction.
+
+7
+
+
+Le tracker
+	
+Le tracker est l’outil maître chez Pilot Systems. C’est un outil de suivi de tâches, de reporting
+de temps et de gestion de planning, accessible avec un navigateur web.
+
+Reporting : nombre d’heure passées par projet du 4 avril au 27 mai
+	
+Il permet le suivi des projets de Pilot Systems et des demandes des clients. Il permet de tenir
+l’équipe informée des problèmes survenus sur un site web, un projet de développement, ou tout autre
+solution déployée par Pilot Systems. Le tracker permet de signaler des bugs, de demander des fonctionnalités supplémentaires ou de faire des remarques sur un projet. Chaque projet a son propre tracker.
+	
+L’utilisation du tracker est très simple :
+- Un problème sur un projet est détecté ou une demande de nouvelle fonctionnalité est effectuée
+Se rendre sur le tracker du projet, ouvrir un ticket (un formulaire pour demander le changement sur
+le projet)
+- Quand le ticket est ouvert, une notification par e-mail est envoyée à l’équipe de Pilot Systems.
+- Il est possible pour l’équipe de Pilot Systems de faire des remarques sur la demande en laissant un
+commentaire, appelé follow-up, sur le ticket. Le client ayant fait la demande ou d’autres personnes
+concernées peuvent aussi ajouter des follow-up ou demander à être notifié lorsqu’il y a des changements sur ce ticket.
+
+8
+
+
+- Lorsque le ticket est fermé, cela signifie que le problème a été corrigé ou que la nouvelle fonctionnalité a été mise en place. Une confirmation par le client est demandée avant de fermer un ticket.
+
+Titre du ticket
+Statut du ticket, ici le nom
+de la personne chargée
+d’effectuer le travail
+
+Explication du
+travail à effectuer
+
+Reporting
+
+Vue d’un ticket
+
+9
+
+Follow-ups
+
+
+Le wiki
+	
+Le wiki est un espace de travail accessible avec un navigateur qui permet l’édition collaborative
+de documents. L’intérêt est sa facilité d’emploi et la possibilité d’avoir une véritable réflexion de groupe
+sur un document. Il regroupe des informations techniques classées par thème. Comme sur le tracker,
+chaque projet a un wiki. Ainsi, toute personne travaillant sur ce projet dispose des informations techniques nécessaires.
+
+Vue de l’index d’un wiki
+	
+
+Il y a plusieurs niveaux d’accès sur les wikis :
+
+- Lecteur : possibilité de lire les documents présents sur l’espace de travail.
+- Commentateur : possibilité d’ajouter des commentaires aux documents présents dans l’espace de
+travail.
+- Éditeur : possibilité d’éditer directement les pages.
+- Administrateur : possibilité d’administrer le wiki, c’est à dire de créer de nouveaux documents, créer
+des sous-wiki, rajouter, changer ou supprimer les droits d’accès à ce wiki.
+
+10
+
+
+	
+
+On retrouve sur le wiki des informations comme :
+
+- La documentation sur le parc informatique
+- La liste des machines en service et les services disponibles dessus
+- Des ressources pour le développement
+- Des procédures d’administration
+- La documentation sur les projets, les spécifications techniques
+- Les propositions commerciales
+- Les comptes-rendus (rendez-vous, avancement du projet)
+- Des documents en rapport avec le projet (par exemple une charte graphique)
+
+Page wiki sur le lancement du projet Cobra
+
+11
+
+
+L’intranet
+	
+Chaque membre de l’équipe de Pilot Systems a accès à l’intranet. Il permet d’annoncer et de
+proposer des évènements, de le soumettre au chef de projet ou au chef de l’entreprise.
+	
+Chaque nouvel évènement est publié et accessible par tout le monde. À chaque changement de
+l’évènement, une notification par e-mail est envoyée à l’équipe.
+	
+
+Le plus souvent, l’intranet sert à annoncer :
+
+- Des absences
+- Des déplacements
+- Des réunions
+- La venue de quelqu’un
+dans les locaux
+
+Page pour annoncer une absence
+
+L’IRC
+	
+L’IRC, protocole de discussion instantannée en groupe, est l’outil de communication principal
+dans et hors des locaux de Pilot Systems. Il permet :
+- De communiquer avec ses collègues sans devoir se lever ou crier
+- De communiquer avec des collègues qui sont à l’extérieur des locaux
+- De communiquer facilement avec certains clients et collaborateurs
+	
+Ce moyen de communication est très utile, car certains employés de Pilot Systems sont en
+télétravail ou souvent en déplacement. La communication avec des clients se fait souvent par IRC, en
+particulier avec Libération et l’équipe du projet Libéfood.
+
+12
+
+
+Python
+	
+Python est, à l’origine, un langage de script de haut niveau et Open Source. Il a été créé par
+Guido van Rossum aux Pays-Bas. Il est multi-paradigme : il a été conçu pour être orienté objet, mais
+il peut être utilisé en programmation fonctionnelle ou
+impérative.
+	
+Python est un langage interprété. Le code ne
+sera pas compilé, mais sera interprété à l’exécution.
+L’interpréteur crée lors de l’exécution un pseudo binaire
+Python qui permet d’éviter de tout réinterpréter lors de la prochaine exécution.
+	
+Python dispose d’un ramasse-miette qui permet aux programmeurs de ne pas se soucier de la
+gestion de la mémoire.
+	
+C’est un langage très populaire dans beaucoup d’entreprises, puisqu’il se prête à de nombreux
+types de tâches et qu’il possède un grand nombre de bibliothèques. Il est notammant utilisé par des
+entreprises comme Google, Industrial Ligth & Magic, la NASA ou dans des logiciels comme Blender
+et Inkscape.
+
+Django
+	
+Django est un framework Open Source de développement web en Python, originellement
+développé en 2005 pour le journal local de Lawrence, ville située dans le Kansas. Ce framework a pour
+but un développement web rapide et simple. Il est basé sur le modèle MVC (model, view, controller).
+	
+
+Il inclut de nombreux outils comme :
+
+- Un langage de templates permettant de générer du code HTML
+- Une API d’accès aux données : pas besoin d’écrire des requêtes SQL, qui sont générées par l’ORM
+- Un contrôleur qui réécrit les URLs à partir d’expressions régulières
+- Une interface d’administration générée à partir des modèles
+- Un serveur web de développement
+
+13
+
+
+- Un système élaboré de traitement des formulaires
+- Un support complet de l’Unicode
+Parmi les sites utilisant Django, on peut citer :
+- Paperblog
+- Spotify
+- Disqus
+- Libération
+Page d’accueil de l’administration de Django
+
+Plone
+	
+Plone est un CMS (content management system) Open Source écrit en Python. Il a été créé
+en 1999 par Alexander Limi, Alan Runyan et Vidar Andersen, lequel ne s’occupe aujourd’hui plus du
+projet.
+	
+En tant que CMS, Plone permet à plusieurs utilisateurs de gérer différentes parties d’un site web
+(utilisateurs, documents, etc.) de façon simple. Ainsi, aucune connaissance technique n’est requise.
+	
+
+Plone est basé sur Zope, un framework de développement
+web en Python, et sur son extension CMF (content management framework). Il est très flexible : on peut s’en servir pour
+créer de nombreux types de sites web, comme des blogs, des
+sites de e-commerce ou encore des intranets. Il est doté, dès l’installation, d’un ensemble de fonctionnalités très complet et simple d’utilisation.
+Parmi les sites utilisant la technologie Plone, on peut citer :
+- La NASA
+- Nokia (QT software)
+- La CIA
+Page d’accueil par défaut d’un site Plone
+
+14
+
+
+Cockpit
+	
+Cockpit est un système d’e-mailing en ligne développé par Pilot Systems. Il permet d’envoyer
+des newsletters en masse directement depuis une plateforme web. Cockpit permet de gérer ses contacts :
+on peut retrouver un contact, classer ses contacts très facilement. Un système de tags permet d’organiser
+ses contacts en groupes afin de mieux cibler les personnes qui recevront une newsletter donnée.
+Cockpit utilise le framework de développement web Django. Toute l’application est basée sur l’interface
+d’administration disponible dans Django.
+	
+Cockpit s’adresse principalement
+à des entreprises, des collectivités, des associations, etc. Parmi les clients de Cockpit, on peut citer l’AFDAS, la fondation
+Casques Rouges, l’INSIA ou encore
+France Premium et Libéfood.
+	
+Je suis arrivée sur le projet progressivement, avec des tâches de plus en
+plus conséquentes. Au début, je devais
+simplement corriger des bugs.
+	
+La première tâche que j’ai eu à
+effectuer concernait la partie d’import
+
+Site commercial de Cockpit :
+http://cockpit-mailing.com
+
+CSV de la gestion des contacts. Lorsque l’on veut importer ses contacts directement dans Cockpit avec
+un fichier CSV l’état de l’import est régulièrement récupéré via un appel Ajax, et on crée, avec du
+,
+Javascript, une barre de progression en fonction de l’avancement de l’import. Le problème était que,
+sous certains navigateurs (Firefox 4, Chrome) la barre de progression ne s’affichait pas.
+	
+Il s’agissait en fait d’une méthode de JQuery qui était interprétée différemment sur les navigateurs de dernière génération que sur les précédentes versions.
+
+Barre de progression lors d’import de contacts
+
+15
+
+
+
+Code Javascript utilisé
+	
+Grâce à cette petit tâche d’intégration, j’ai pu prendre connaissance du projet dans sa partie
+la plus simple. J’ai pu aussi aborder les appels Ajax avec la librairie JQuery, en particulier la fonction
+$.getJSON(), qui m’a été très utile sur d’autres projets par la suite.
+	
+J’ai ensuite eu à effectuer une autre tâche simple, mais qui cette fois était à mi-chemin entre
+l’intégration et le code lui-même. J’ai pu prendre connaissance plus précisément de la structure de données utilisée dans le projet. Il s’agissait de modifier une page listant les liens visités lors de la lecture
+d’une newsletter pour y ajouter des statistiques : le nombre de visites, le nombre de visiteurs uniques
+par lien, le nombre de visiteurs uniques total.
+	
+En plus de prendre mieux connaissance de la structure et du code de Cockpit, ce travail m’a permis de toucher à une
+fonctionnalité du framework Django que je
+ne connaissais pas encore : les templatetags.
+Dans une application Django, il n’est pas
+possible d’utiliser directement du code dans
+les templates : on ne peut pas mélanger
+le code (Python) et l’affichage (HTML).
+Grâce aux templatetags, on peut appeler une
+fonction directement dans le template.
+Page des liens visités
+
+16
+
+
+Appel du templatetag dans le template
+
+Résultat à l’affichage
+Templatetag
+	
+On peut remarquer qu’il est ainsi facile d’utiliser des templatetags dans les templates. Le travail
+du programmeur et de l’intégrateur sont bien distincts, et donc facilité puisqu’aucun ne touche directement au travail de l’autre.
+	
+J’ai aussi été chargée, avec Amirouche, lui aussi stagiaire, d’effectuer l’internationalisation de
+Cockpit. Il s’agissait de traduire complètement l’application en anglais. Django possède nativement un
+module d’internationalisation, i18n. Il gère aussi les différents formats des dates et des nombres. On
+choisit les parties de l’applications à traduire, qui changeront en fonction des préférences de langues
+dans le navigateur de l’utilisateur.
+	
+Dans le code (Python), on utilisera la méthode gettext(‘ma_chaine’) ou ugettext(‘machaine’)
+pour l’unicode. Pour certains fichiers, il est indispensable d’utiliser la méthode ugettext_lazy(‘machaine’),
+dans les modèles de données par exemple, pour que la traduction se fasse uniquement si elle est nécessaire. Dans le template (HTML), on utilisera {% trans “ma_chaine” %} ou {% blocktrans %}, comme
+dans l’exemple plus haut. Le texte ainsi sélectionné pour la traduction est ajouté au fichier .po, fichier
+contenant les traductions. Ce fichier est généré au lancement d’une commande de Django, qu’il faudra
+ensuite compléter.
+
+Fichier de traductions
+
+17
+
+
+	
+Cette tâche est longue à réaliser et répétitive, puisqu’il faut ajouter les mêmes méthodes dans
+chaque fichier, vérifier qu’elles ne génèrent pas d’erreur (nous avons en particulier eu des problèmes
+d’encodage) et, évidemment, réaliser les traductions, se relire et se faire relire pour ne pas faire de faute
+de traduction. Cockpit est une application complexe, qui contient beaucoup de texte : le fichier de
+traduction compte plus de 2 000 lignes.
+	
+Ce travail m’a permis de découvrir plus en détails le code et la structure de Cockpit. Pour les
+prochaines tâches que j’ai eu à effectuer, je savais où trouver le code et comment il était organisé. Il
+m’était donc plus facile de réfléchir à une solution.
+	
+J’ai alors eu des tâches plus complexes à effectuer. J’ai eu à implémenter un système de footer
+que l’on pouvait ajouter à n’importe quelle newsletter. Ce travail avait déjà été commencé par Yohann,
+qui a donc pu m’expliquer la marche à suivre pour continuer.
+	
+Le modèle représente la
+strucute de données, la façon dont
+l’application sera représentée dans la
+base de données. Pour les footers, la
+structure est très simple. La table de
+la base de données contient uniqueModèle
+ment deux champs : name, le nom
+donné au footer et html_content, son code HMTL. Il a aussi fallu modifier le modèle de la classe
+Newsletter pour lui ajouter un champ footer qui pouvait contenir ou non un footer à ajouter à la fin
+de la newletter. J’ai ensuite modifié le code de l’envoi d’une newsletter, pour ajouter le footer à la fin
+de l’e-mail. La génération en HTML du
+message se fait avec la bibliothèque BeautifulSoup. C’est une bibliothèque qui fournit
+un analyseur syntaxique (parser en anglais)
+de HTML et XML écrite en Python. Il est
+capable d’analyser du HTML même s’il
+est mal formé : il essaie de le former correctement. C’est cette fonction de BeautifulSoup qui est utilisée : on fait analyser
+le HTML du footer par BeautifulSoup. S’il
+n’était pas bien formé, alors il est modifié
+par l’analyseur syntaxique pour être correct.
+Fonction appelée avant l’envoi du mail
+
+18
+
+
+	
+On peut donc maintenant ajouter
+un footer à nos newsletters dans Cockpit.
+On peut avoir directement un aperçu du
+code HTML entré pour créer le footer.
+	
+On peut également choisir un
+footer à ajouter à un message quand on
+crée une nouvelle newsletter.
+	
+Les footers sont ainsi rajoutés à la
+fin des newsletters lors de l’envoi.
+	
+Pour que le changement des
+modèles puisse être effectués facilement
+sur des instances de Cockpit existantes, il
+Page des footers
+a fallu que je modifie le programme permettant la migration de la base de données
+: Django gère la création des tables de la base de données, mais pas les chagements une fois que celle-ci
+est créée. J’ai donc vérifié que le champ “footer” existait dans la table newsletter. Si ce n’est pas le cas,
+une requête SQL est exécutée pour créer ce champ.
+	
+Enfin, j’ai eu à améliorer la gestion des retours en erreurs des newsletters sur Cockpit. Lorsqu’on
+recevait, en réponse à une newsletter envoyée, un e-mail d’erreur, une erreur était enregistrée dans la
+base de données pour cette newsletter. Seulement, les erreurs peuvent avoir plusieurs natures. Elles
+peuvent être un réponse automatique envoyée par un client mail ou une véritable erreur venant du
+serveur, si l’adresse n’existe pas par exemple. Il fallait pouvoir différencier ces types d’erreurs en erreurs
+temporaires et définitives.
+	
+Dans un premier temps, il a donc fallu que je modifie le modèle des retours en erreurs pour
+qu’ils puissent être classifiés.
+
+Modèle des retrours en erreur
+
+19
+
+
+	
+J’ai simplement rajouté le champ bounce_type, pouvant contenir soit la chaîne “soft”, pour les
+erreurs temporaires, soit la chaîne “hard”, pour les erreurs définitives.
+	
+Il a ensuite fallu que je trouve comment classifier les différentes erreurs. Pour cela, j’ai cherché des retours en erreur pour voir comment
+ils étaient formés. Souvent, un code d’erreur est
+présent dans les erreurs reçues. Par exemple, si
+l’adresse à laquelle on a envoyé une newsletter
+n’existe pas on aura dans le message d’erreur :
+“550 Unrouteable address”.
+	
+Après une recherche, j’ai appris que les
+erreurs en 4xx étaient temporaires : si l’on renvoie le mail, il y a des chances qu’il soit reçu. Par
+contre, si le code d’erreur est 5xx, le problème est
+permanent. Je me suis donc basée sur ce principe
+pour classifier les erreurs à leur réception : si le
+code d’erreur commence par 4, il est classé en
+“soft”, s’il commence par un 5, il est classé en
+“hard”.
+
+Page d’un retour en erreur
+
+	
+Pour trouver le code d’erreur dans le message, j’ai utilisé une expression régulière, qui trouve
+tous les nombres composés de trois chiffres et commençant par un 4 ou par un 5. En fonction du résultat, l’erreur est classée. Si on ne trouve pas de code d’erreur avec cette méthode, il est possible que le
+message ait été envoyé par le client mail, par exemple. On le classifie donc en “soft”. Si plusieurs codes
+sont trouvés et qu’il y en a au moins un qui commence par 5, on le classe l’erreur comme “hard”.
+
+Fonction de classification des erreurs
+
+20
+
+
+	
+J’ai ensuite réalisé un script permettant de classifier toutes les erreurs déjà reçues. Ce script a été
+réalisé comme une commande manage.py, le fichiers contenant les commandes de base de Django, par
+exemple les commandes startapp, permettant de créer une nouvelle application, ou syncdb, qui crée des
+tables dans la base de données si nécessaire.
+	
+La fonction ainsi réalisée est très simple : elle
+parcourt toutes les erreurs présentes dans la base de
+données et utilise la fonction créée précedemment pour
+analyser le type d’erreur. Le changement est ensuite enregistré dans la base de données. On peut donc appeler
+cette méthode en utilisant la commade :
+	
+
+Commande qui classifie les erreurs
+
+./manage.py classify_bouces
+
+	
+Pour finir ce travail sur la classification des retours en erreurs, j’ai dû modifier l’affichage des
+erreurs dans les statistiques pour afficher le nombre d’erreurs totales, mais aussi le nombre d’erreurs
+définitives et le nombres d’erreurs temporaires. Une fonction existait déjà pour calculer le nombre
+total d’erreurs et le passer au template. J’ai simplement modifié cette fonction pour différencier le type
+d’erreur.
+
+Fonction qui crée le champ “Erreurs” de la page de statistiques
+
+Affichage des statistiques
+
+21
+
+
+Libéfood
+	
+Libéfood est un projet de France
+Premium, une société de services e-commerce dédiée à la gastronomie. Ce site
+fait partie de Libération Network. C’est
+un site d’aggrégation de contenu. On lui
+fournit des sources de flux RSS, Twitter, Facebook, Youtube, Dailymotion,
+Vimeo, et Flickr dont les contenus sont
+récupérés au fur et à mesure de leur évolution. Libéfood est consacré à l’actualité
+gastronomique.
+	
+Le projet étant presque terminé
+lors de mon arrivée dans l’entreprises, je
+n’ai pas eu de tâches très importantes à
+accomplir sur ce projet, mais j’ai tout de
+même pu faire le tour de ses fonctionnalités les plus importantes.
+
+Page d’accueil de Libéfood
+
+	
+Tout comme mon arrivée sur le projet Cockpit, les tâches qui m’ont été confiées sur le projet
+Libéfood ont été de plus en plus conséquentes. Il s’agissait dans un premier temps de corriger des
+détails et des bugs graphiques. J’ai par exemple dû corriger un problème de polices (la bonne police
+n’était pas utilisée sur certains systèmes d’exploitation, provoquant un débordement du texte) et un bug
+de pagination (les numéros de pages affichés étaient infinis). J’ai par la suite été réellement affectée à
+des tâches où je devais agir sur le code, en particulier en ce qui concerne la récupération des données
+de Flux RSS et de contenus Twitter.
+	
+J’ai eu à faire une page de recherche de mots clés originaux. Dans la base de données, on stocke
+les mots-clés trouvés lors de la récupération des flux RSS. Lorsque l’on veut, sur Libéfood, rajouter à
+certains contenus des mots-clés, on peut vouloir chercher les mots-clés déjà utilisés par les contenus. Le
+principal problème était qu’il fallait réaliser une recherche qui ne prenait pas en compte les accents. Par
+exemple, la recherche “sucre” devait pouvoir trouver “sucré”, et inversement. L’ORM de Django, c’est
+à dire l’application qui permet de générer des requêtes SQL sur la base de données à partir de code en
+Python, ne gère pas cette fonctionnalité. Il a donc fallu utiliser une autre application pour remplir cette
+fonction. Le choix s’est porté sur SeSQL, qui était déjà utilisé pour la fonctionnalité de recherche sur
+le site.
+
+22
+
+
+	
+SeSQL (Search engine SQL) est un moteur de recherche SQL développé par Pilot Systems,
+initialement pour le site de Libération. Le principe est de pouvoir faire des recherches rapides sur un
+grand nombre de contenus en prenant en compte plusieurs critères de recherche. Afin de pouvoir
+utiliser SeSQL pour la recherche de mots-clé, j’ai dû modifier le fichier sesql_config.py :
+
+Configuration de SeSQL
+	
+Ainsi, on peut utiliser SeSQL pour lancer des recherches dans la base de données en utilisant
+les champs compris dans original_tags, c’est à dire les tags originaux des contenus Twitter, flux RSS,
+Dailymotion, Youtube, Flickr et Vimeo. Dans le controleur, nous devons réaliser un requête avec
+le Q object, déjà présent dans Django,
+qui permet d’effectuer des requêtes SQL
+plus complexes en rajoutant divers filtres.
+Les ‘ % ’ signifient qu’il peut y avoir des
+Recherche avec SeSQL
+mots avant et après l’expression recherchée.
+	 Dans la recherche, on a
+effectivement les résutats attendus : en cherchant “sucre”, on
+trouve “sucre glace” ou encore
+“Les sucrés”.
+
+Résultats d’une recherche
+
+23
+
+
+	
+J’ai ensuite eu à rédiger une page de documentation sur la récupération des flux RSS. Notre
+contact chez France Premium, Chloé Strauss, savait que nous effectuions des nettoyages sur les contenus, et voulait en connaître les détails : quelles informations étaient gardées ? Grâce à ce travail, j’ai pu
+analyser le code de récupération des flux RSS.
+	
+Toutes les informations, sauf
+le corps de l’article, sont directement
+récupérées depuis le flux RSS : le
+lien permanent vers l’article de blog,
+le titre de l’article, la liste des tags, la
+date de publication, les images.
+	
+La récupération du texte se
+fait différemment : parfois, le corps
+de l’article n’est pas présent dans son
+intégralité dans les flux RSS. On récupère donc le contenu de l’article
+directement sur la page de blog,
+grâce au lien permanent récupéré
+dans le flux RSS.
+	
+Pour ça, la structure des
+blogs les plus connus (Wordpress,
+Blogger/Blogspot, Over-blog ou encore Skyrock) ont été analysés pour
+pouvoir rapidement trouver la partie
+du code HTML qui contient le texte
+Page de wiki réalisée
+de l’article. Si le blog est ainsi reconnu, le texte de l’article, auquel on a a enlevé les images et les liens est récupéré en HTML. Sinon,
+toute la page est récupérée en HTML, sans image et sans lien.
+	
+Cette question s’était posée par rapport à la récupération des images. Il est possible de choisir
+l’image à lier à un article pour qu’elle apparaisse en page d’accueil. Au final, beaucoup d’images qui
+n’avaient aucun rapport avec l’article étaient récupérées. C’était en fait que, dans les flux RSS, certaines
+images comme des icônes, des avatars, etc. sont présentes et donc récupérées. Nous avons réfléchi à un
+nouveau filtrage pour que ces images ne soient pas récupérées. Par exemple, nous pourrions récupérer
+des images que si elles ont une taille minimale, ou nous pourrions effacer les images qui ont une certaine ancienneté.
+
+24
+
+
+	
+Sur Libéfood, on peut décider quels contenus on souhaite mettre en “focus” et en “sélection”.
+Nous avons rencontré certains problèmes lors de la mise en sélection ou en focus de certains artciles
+de blog. En effet, parfois, des données supplémentaires étaient
+présentes au début de l’article.
+
+Focus
+
+	
+Après quelques recherches, j’ai pu apprendre que ce
+genre de messages étaient parfois rajoutés automatiquement
+lorsque l’on copie/colle du texte directement depuis le logiciel
+Microsoft Word. J’ai donc analysé la structure du message rajouté afin de pouvoir l’enlever de certains contenu si le problème
+se représentait sur d’autres articles de blog.
+	
+J’ai alors rajouté un nouveau nettoyage aux textes de flux
+RSS, qui détecte des messages de ce type et les enlève du texte
+avant de le sauvegarder dans la base de données.
+
+Sélection
+
+Code utilisé pour nettoyer le contenu
+
+25
+
+
+	
+J’ai également eu à écrirer un script : j’ai ajouté une commande manage.py, programme qui
+permet de lancer les commandes de bases de Django, mais aussi d’en créer des spécifiques à un projet.
+Le but était de supprimer tous les tags qui n’étaient pas utilisés.
+	
+Dans la base de données, nous stockons des tags. Nous pouvons associer des tags à tout type
+de contenu : artcle de blog, contenu Twitter, Facebook, etc. Nous pouvons aussi définir des “univers”,
+qui regrouperont tous les contenus ayant certains mots-clés.
+	
+Les tags sont aussi utilisés dans
+des “règles”. Ces règles permettent
+d’effectuer des actions automatiquement
+lorsqu’une condition, précisée dans la
+règle concernée, est vérifiée.
+Les différents univers
+
+Définition d’une règle
+Choix des tags associés à un univers
+	
+Mon script devait prendre en compte tous ces cas. Ainsi, j’ai dû vérifier que les tags à effacer
+n’étaient utilisés ni dans contenus, ni dans les règles, ni dans les univers.
+	
+
+Comme le script est une commange manage.py, il s’utilise de la façon suivante :
+./manage.py remove_unused_tags
+
+26
+
+
+	
+Enfin, j’ai créé un script pour vérifier que les contenus étaient correctement récupérés sur Libéfood. Dans le fichier, on précise à partir de quelle intervalle de temps on veut être prévenu si aucun
+contenu d’un certain type (blog, Facebook, etc.) n’a été récupéré.
+
+Script qui vérifie que les contenus sont récupérés
+	
+Ce srcipt est utilisé par Nagios, une application permettant de surveiller l’état d’un système.
+Lorsqu’un problème est détecté sur un système, il indique une erreur sur la machine concernée. Ici, si
+les contenus ne sont pas récupérés, Nagios signale une erreur, avec comme message le type de contenus
+qui n’a pas été récupéré depuis longtemps et la date du dernier contenu de ce type récupéré.
+
+27
+
+
+Cobra
+	
+Cobra est le projet de refonte du site de Pilot Systems. Cette refonte se fait principalement au
+niveau graphique, mais elle se fait également au niveau du contenu. Ces changements pourraient être
+profitables pour lancer de nouvelles offres, comme des services de Cloud privé. Le site actuel de Pilot Systems utilise la technologie Plone, un CMS (Content
+Management System ou système de gestion de contenu)
+basé sur le framework de développement web Zope. Nous
+avons décidé de garder la technologie Plone, qui permet
+d’avoir un site fonctionnel sans avoir à toucher au code,
+qui se concentre sur les contenus, et qui intègre déjà les
+fonctionnalités de bases, comme un système de news et
+d’évènements. Plone a également des avantages au niveau
+du référencement : un module de configuration permet de
+positionner son site pour certains mots-clés. C’est également
+l’occasion de mettre à niveau la technologie utilisée : le site
+actuel fonctionne avec Plone 2.5, version qui date de 2006.
+Cette version sera remplacée par Plone 4, la version la plus
+récente du CMS.
+Site actuel de Pilot Systems
+	
+Nous sommes deux à nous occuper de ce projet :
+Amirouche, lui aussi stagiaire, et moi-même. Nous avons
+pour principales tâches le créer le thème Plone du nouveau site et de porter les contenus déjà existants
+sur du Plone 4.
+	
+Ne connaissant pas Plone, nous avons dû commencer par un phase d’apprentissage du theming
+avec Plone 4. Plusieurs solutions étaient possibles. Nous avons tout de suite opté pour des méthodes de
+theming pouvant être réutilisables, donc facilement portables d’une instance Plone 4 à une autre. Nous
+avons ainsi gardé deux méthodes et nous sommes réparti le travail.
+	
+Je me suis chargée de tester le theming Plone avec un produit Zope. Un produit est une application installable sur n’importe quelle instance de Zope ou Plone. Ainsi, en développant un thème
+produit, il serait facilement réutilisable sur une nouvelle instance. Les thèmes produits étaient déjà
+utilisés dans la version 3 de Plone.
+
+28
+
+
+	
+Pour créer un produit Plone, il faut se rendre dans le répertoire src/ se trouvant à la racine du
+projet. Ici, on lance la commande qui permet de créer un produit de type thème Plone 3, où mytheme
+est le nom que l’on veut donner à notre nouveau thème :
+paster create -t plone3_theme plonetheme.mytheme
+
+	
+Le produit est maintenant créé. Pour que Plone puisse reconnaître ce produit, et donc l’utiliser
+par la suite, il fait modifier le fichier buildout.cfg présent à la racine du site de la façon suivante :
+[buildout]
+...
+develop =
+src/plonetheme.mytheme
+[instance]
+eggs =
+...
+plonetheme.mytheme
+zcml =
+...
+plonetheme.mytheme
+
+	
+Le thème produit est maintenant reconnu par notre site en Plone 4 et il est possible de l’installer.
+Pour cela, il faut se rendre sur le site et rajouter /manage à la fin de l’adresse. On se retrouve alors dans
+la ZMI (Zope Management Interface), l’interface Zope permettant de gérer différents aspects du site,
+comme les produits installés, les types de contenus, etc. Dans la partie portal_quickinstaller, on peut
+donc choisir d’installer notre nouveau thème.
+	
+Si on se rend maintenant sur notre site après l’installation
+de notre thème, le design du site sera “vide” : aucune feuille de
+style, la structure de Plone par défaut.
+	
+Pour ajouter des éléments au site, que ce soit des fichiers
+CSS, des images, des fichiers Javascript ou encore des templates,
+il faut les indiquer dans des fichiers de configuration en XML. Par
+exemple, si on souhaite rajouter une feuille de style CSS, il faudra
+la placer dans le dossier skins/plonetheme_mytheme_styles/ et le
+référencer dans le fichier profiles/default/cssregistry.xml de la façon suivante :
+
+29
+
+Quickinstaller dans la ZMI
+
+
+	
+De la même façon, il faudra placer les images, les fichiers javascript et toute autre ressource dans
+un répertoire bien défini et le référencer dans un fichier de configuration du même type. Cette tâche
+est assez répétitive et fastidieuse, et elle semble bien compliquée quand on est habitué au theming de
+base, c’est à dire un fichier en HTML qui représente la structure de la page et l’import des différents
+fichiers avec de simples balises, à l’intérieur de ce même fichier HTML.
+	
+De la même façon, on ne pourra pas changer la structure du site comme on y est habitué, avec un simple fichier HTML. Dans un site Plone, la structure est définie avec des viewlets et
+des viewlets managers. On peut avoir un aperçu
+de la structure actuelle de notre site en rajoutant
+@@manage-viewlets à la fin de l’adresse. Pour
+modifier la structure du site comme on le souhaite, il peut ordonner les viewlets présents dans
+un viewlets manager, y ajouter des viewlets ou encore cacher des viewlets. Encore une fois, tout cela
+se fait dans des fichiers de configuration en XML.
+	
+Par exemple, pour ajouter un viewlet dans
+un viewlets manager, il faudra modifier le fichier
+browser/configure.zcml en y ajoutant :
+
+Aperçu des viewlets dans Plone
+
+	
+Parfois, pour que les changements soient pris en compte, il faudra redémarrer le serveur ou
+encore réinstaller le thème dans la ZMI via portal_quickinstaller.
+	
+Au final, toutes ces manipulations nous paraissent bien compliquée pour le travail à effectuer.
+J’ai également mis plus de temps à maîtriser les bases de cette technique que ne l’a fait Amirouche pour
+maîtriser la sienne. Il est également à noter que peu de documentation est fournie sur internet sur le
+theming par produit, même sur le site de Plone, qui contient un grand nombre de tutoriaux, documentations, etc. Une fois que nous avions fini les tests pour ces deux méthodes méthode de theming, nous
+avons dressé une comparaison afin de choisir laquelle nous allions utiliser au final. Nous avons pris en
+compte des arguments comme la facilité à mettre en place, l’état de la documentation, la perrenité de
+la solution, etc.
+
+30
+
+
+	
+Nous avons donc décidé d’utiliser la méthode testée par Amirouche : le theming avec l’outil
+Diazo, qui est considéré comme le futur du theming Plone. Diazo, anciennement connu sous le nom
+de XDV est un outil permettant de créer des thèmes pour
+,
+tout type de site web.
+	
+Diazo est totalement indépendant de Plone. Il se met
+en fait entre le site web de base et le navigateur : il crée un
+proxy qui récupère la page demandée, le “contenu”, et y applique des “règles” en fonction du “thème” qui a été défini.
+	
+La création d’un thème avec Diazo se fait rapidement, et est bien documentée sur le site du projet,
+http://diazo.org.
+	
+Le theming se fait comme on en a l’habitude : on
+construit notre page avec du HTML, on y ajoute notre feuille
+de style CSS, nos fichiers Javascript dans de simples balises,
+en indiquant le chemin vers ces fichiers. La seule différence
+se fait au niveau des règles. La page créée est divisée en deux
+Concept de Diazo
+parties : on a le contenu, qui est la page récupérée par le
+proxy, et le thème, qui est notre projet Diazo. La but est d’importer le contenu de la page initiale dans
+le thème. Pour cela, on modifie le fichier rules.xml.
+
+	
+Cette règle signifie que, le contenu de l’élément dont l’id est “content” dans le thème est remplacé par l’élément de la page d’origine dont la classe est “content”, et que l’élément de la page d’origine
+dont l’id est “indices-and-tables” n’apparaît pas dans notre page.
+	
+Le principe de Diazo est donc simple : on crée notre thème, indépendent, puis on remplace
+le contenu par celui du site auquel on veut appliquer notre thème. Dès qu’un élément peut être sélectionné à l’aide d’un sélecteur CSS ou XPath, il est utilisable dans notre thème.
+
+31
+
+
+	
+Nous avons ensuite commencé à travailler le design du futur site de Pilot Systems. Le but était
+de donner une image plus moderne de l’entreprise. Nous avons dans un premier temps cherché des
+sites dont le design nous semblait correspondre à ce critère. Ainsi, nous avons gardé 4 sites :
+
+Assistly
+
+Mailchimp
+
+Simple Bits
+
+37signals
+
+	
+Nous avons tout de suite remarqué que ces 4 sites avaient des points communs dans leur structure et leur design, en particulier :
+- Une grande bannière : quand on arrive sur le site, on voit uniquement les informations les plus
+importantes, les “accroches”. Dans le cas de Mailchimp, on retrouve la mascotte, le slogan, un petit
+texte de présentation, et les 4 rubriques en-dessous. Pour Simplebits, on retrouve les mêmes idées :
+en arrivant sur la page, on remarque le logo, le slogan et une courte présentation. Les 4 idées principales sont aussi présentes sous forme de slider. Pour 37signals, on retrouve aussi le logo, le slogan et
+la courte présentation, suivis de 4 images présentant les services qu’ils proposent. Pour Assistly, on a
+le logo, et les 3 idées principales sous forme de slider, avec des illustrations, un slogan et une courte
+phrase d’accroche.
+- On ne retrouve pas de texte, uniquement de courtes phrases d’accroche et des extraits d’articles.
+- Le contenu est souvent sur fond clair (blanc, gris, etc.) et organisé en colonnes.
+- On ne retrouve pas plus de 3 couleurs pour un thème. Mailchimp : bleu, blanc, gris ; Simple Bits :
+blanc, orange, gris ; 37signals : blanc, noir, rouge ; Assistly : violet, gris, blanc.
+- Il y a de grand pieds de page, avec, souvent, le plan du site et d’autres liens internes au site de type
+“contact”.
+
+32
+
+
+- On retrouve souvent des liens, sous forme de boutons, vers des réseaux sociaux de type Facebook,
+Twitter, ou vers le flux RSS des actualités. Ils sont souvent dans le pied de page (Mailchimp, Assistly)
+mais peuvent aussi l’être dans l’en-tête (Simple Bits).
+- Des textures sont souvent utilisées, en général en fond (Mailchimp, Simple Bits, Assistly).
+	
+À partir ce ces pistes, j’ai réalisés plusieurs essais de design, à l’aide d’Inkscape. Pour le réaliser,
+j’ai gardé le jaune présent dans le logo, associé à du gris foncé pour le menu et le pied de page, clair
+pour le fond. J’ai gardé l’idée de la grande en-tête avec le slogan et une courte phrase de présentation.
+On y retrouve également une illustration (elle est ici simplement
+un exemple). Plus bas, on a les
+idées principales, présentées par
+un illustration, un court texte et
+un lien vers une page plus détaillée sur le sujet. Il y a également le
+pied de page, contenant des liens
+internes au site et des boutons vers
+des réseaux sociaux ou la source
+de flux RSS, ainsi qu’un champ
+d’inscription à la newsletter.
+	
+
+Maquette de notre proposition de design
+
+33
+
+
+Projet finistère
+	
+Le projet finistère est une contribution au projet OpenStreetMap, lequel
+a pour but de fournir des données géographiques libres. Mon travail a été de
+réaliser une interface permettant de visualiser des graphiques par rapport à des
+données fournies par OpenStreetMap.
+	
+J’ai choisi Flot comme outil pour générer des graphiques. Flot est un
+plug-in en JQuery permettant de générer facilement des graphiques.
+	
+Les données étaient accessible au format JSON. J’ai donc utilisé des requêtes Ajax pour les
+récupérer puis générer les graphiques avec Flot. Le fonctionnement de l’application est la suivante :
+	
+Dans un premier temps, il faut réaliser un fichier de configuration, au format JSON, qui comporte au moins une série de données à représenter sour la forme d’un graphique, qu’il faut ranger dans
+une catégorie.
+
+Exemple de configuration en JSON
+	
+Le champ “url” contient l’adresse où est présent le fichier en JSON
+des données du graphique.
+	
+Dans le programme en javascript principal, on a indiqué l’adresse
+où se trouvait le fichier de configuration. Au chargement de la page, une
+requête Ajax est utilisée pour récupérer les données du fichier de configuration et ainsi créer un menu qui nous permettra de choisir les graphes à
+générer. Le menu, pour pouvoir différecier les catégories, est présenté sous
+forme d’accordéon, à partir de la bibliothèque JQueryUI.
+Format des graphes en JSON
+
+34
+
+
+
+Interface de visualisation des graphes
+	
+On peut choisir les graphiques à générer en cochant les cases qui y correspondent. Une nouvelle requête Ajax est alors exécutée pour récupérer les données à visualiser. Le graphique est ainsi créé.
+À l’affichage de la page, le premier graphe dans la configuration est affiché par défaut. Il est possible
+de visualiser plusieurs graphes en même temps et d’en supprimer.
+	
+
+La démonstration de cette application est disponible à l’adresse :
+http://osm.pilotsystems.net/~estelle/js_charts3/charts.html
+
+35
+
+
+Autres missions
+	
+
+J’ai eu à réaliser des interventions sur d’autres projets que ceux déjà cités.
+
+	
+J’ai par exemple eu à intégrer une newsletter pour la société Financière Cambon : à partir d’un
+visuel, j’ai dû réaliser le code HTML et la mise en page en CSS. La particularité de l’intégration de
+newsletter est que les clients mails ne supportent pas les standarts HTML. Il n’est par exemple pas
+possible d’intégrer une feuille de style CSS dans une newsletter : certains clients, comme Gmail, ne
+prennent pas en compte ce fichier. Il faut donc écrire le style directement dans les balises, à l’aide de
+l’attribut style. Cette méthode d’intégration est laborieuse, puisqu’il faut sans cesse répéter les mêmes
+styles au lieu d’affecter un même style à plusieurs éléments en utilisant des classes par exemple. Cette
+technique va également contre les bonnes pratiques du développement web, dont le principe est de
+séparer les différentes parties.
+	
+Par la suite, j’ai eu à effectuer quelques tâches sur le site actuel de Pilot Systems. J’ai d’abord
+eu à réaliser quelques ajustements au niveau du style : sur certains navigateurs, des icônes n’étaient pas
+visibles en entier, certaines images étaient sur fond noir au lieu de transparent. Ensuite, j’ai eu à modifier la page de PODP (Power On Demand Platform). C’est en fait un tableau dans lequel on saisit une
+quantité pour chaque service et qui
+calcule les prix au fur et à mesure.
+Le problème était que, dès que l’on
+sortait d’un champ du formulaire,
+la page était rechargée pour pouvoir afficher les prix calculé. J’ai eu
+à remplacer le rechargement entier
+de la page par un rechargement des
+données du tableau uniquement, en
+passant par un appel Ajax. Un nouveau champ a également été rajouté
+à la page pour indiquer un lien perCalcul du prix du service de PODP
+manent vers le tableau rempli.
+	
+J’ai également eu quelques tâches à effectuer sur le site de Libération. Les sites du quotidien,
+étant à l’origne codés en PHP, vont tous être portés à Django. Certains sont, comme Je participe et
+Next utilisent déjà cette technologie. L’accent est donc mis sur la réalisation des nouvelles versions,
+en Django. Cependant, il faut continuer à maintenir le site actuel. Ainsi, j’ai eu de petits travaux de
+maintenance à effectuer. J’ai par exemple eu à changer, dans l’interface d’administration, un champ de
+formulaire pour qu’il soit remplacé par un éditeur WYSIWYG (What You See Is What You Get) :
+TinyMCE.
+
+36
+
+
+	
+J’ai aussi eu à vérifier le bon fonctionnement des vidéos en HTML5 : iOS (iPhone/iPad) ne
+gérant pas le flash, afficher les vidéos en HTML5 si le flash n’est pas géré est la seule solution. Le
+premier problème venait de l’éditeur WYSIWYG TinyMCE : il effectue un nettoyage dans le HTML
+avant de sauvegarder le texte dans la base de données. S’il ne connaît pas certaines balises, elles sont
+donc directement enlevées. Seule la dernière version de TinyMCE reconnaissait les nouvelles balises
+apparues avec HTML5. Une fois cette version installée sur le site, il était possible de mettre des vidéos
+en HTML5 sur le site.
+	
+Enfin, j’ai eu à apporter quelques ajustements à l’intranet de
+CMP-Banque, une banque en ligne. J’ai dû effectuer un changement de logo : l’ancienne version comportait le texte “Pour vous
+depuis 1777”, alors que sur la nouvelle, le texte était devenu “Pour
+vous depuis 1637”. Il a particulièrement fallu faire attention à garder
+un maximum de qualité pour l’image : le logo était presque illisible
+si on le redimmendionnait directement. Je l’ai donc d’abord ouvert
+avec un logiciel libre de traitement d’images vectorielles, Inkscape. Nouvelle version du logo de CMP
+Je l’ai ensuite converti au format SVG pour qu’il soit complètement
+compatible avec Inkscape. Je l’ai redimmensionné en exportant, depuis ce même logiciel, l’image au
+format PNG. J’ai finalement effectué les ajustements nécessaires dans GIMP, logiciel libre de traitement
+d’images bitmap.
+
+37
+
+
+	
+Durant ces 10 semaines, j’ai pu approfondir mes connaissances et apprendre chaque jour. Elles
+m’ont permis de participer à la vie d’une entreprise inovante et engagée dans le domaine du logiciel
+libre.
+	
+Cette entreprise m’a permis d’acquérir des compétences supplémentaires dans les domaines que
+m’intéressent : les logiciels libres, le web, la programmation, en particulier relative au langage Python et
+au web, et même le design et l’intégration graphique. J’ai pu toucher lors de mon stage à des domaines
+moins techniques comme la rédaction de documentations et la traduction d’un site web.
+	
+Le fait d’avoir été immergée dans cette entreprise, avec des personnes aux profils variés, dans
+une ambiance détendue et propice à l’échange, m’a permis non seulement d’apprendre énormément,
+mais également de m’impliquer au plus haut point. Grâce aux employés passionnés de Pilot, qui effectuent une veille quotidienne pour suivre au plus près les évolutions des technologies Open Source,
+j’ai pu compter sur un soutien et une aide très précieux pour apprendre à maîtriser ces technologies à
+mon tour.
+	
+Au-delà de l’ambiance et de la bonne humeur des employés de Pilot Systems, l’environnement
+technique m’a aussi beaucoup apporté. L’organisation du travail et de la gestion de projet chez Pilot
+Systems suit des procédures assez particulières : la plupart des échanges se fait via internet, notamment
+avec le système de Tracker, le wiki, l’IRC, etc. Mais après avoir pris l’habitude d’utiliser ces techniques
+de travail, il m’est difficile d’imaginer travailler sans utiliser le tracker pour pouvoir suivre précisément
+l’évolution d’un projet, connaître les tâches à effectuer sur un certain projet. Ces outils m’ont permis de
+gagner en rigueur, de part leur côté exigeant. Et une fois que ces outils sont maîtrisés, la productivité
+augmente significativement.
+
+38
+
+
+Agrégateur de contenus
+Application qui collecte et regroupe des contenus
+depuis plusieurs source d’actualité.
+
+Flot
+Libraire javascript, utilisant JQuery, permettant de
+créer des graphiques.
+
+Ajax (asynchronous javascript and XML)
+Technique permettant de dynamiser une page web
+: des requêtes sont effectuée sur le serveur sans
+avoir besoin de recharger la page du site internet.
+
+Framework
+Application servant de base à un projet, qui contient des outils pour faciliter le développement du
+projet.
+
+Base de données
+GIMP (GNU Image Manipulation Program)
+Structure informatique permettant de stocker et Logiciel libre de traitement d’images bitmap.
+d’organiser des informations.
+HTML (HyperText Markup Language)
+CMS (content management system)
+Langage basé sur XML permettant de définir la
+Application ayant pour but de créer un site web structure d’une page web.
+dynamique en ayant un minimum de connaissances techniques. En général, les CMS permettent de i18n (internationalization)
+gérer des utilisateurs, des système de news, de Mise en place de la gestion de plusieurs langues
+blog, etc.
+sur une même application.
+Controller ou contrôleur
+Dans une application basée sur le modèle MVC,
+le contrôleur est le programme qui sert à effectuer
+les actions nécessaires (par exemple effectuer des
+requêtes sur la base de données) à passer à la vue.
+CSS ou feuille de style
+Langage de définition permettant d’effectuer les
+mises en page d’un site.
+Django
+Framework de développement web en Python.
+
+Inkscape
+Logiciel libre de traitement d’images vectorielles.
+Instance
+L’instance d’un site web est une version installée.
+Par exemple, la plupart du temps, les sites web
+possèdent deux instances : une instance de développement, destinée aux tests et une instance de
+production, la version publique du site.
+Intégration ou intégration graphique
+Réalisation de la forme d’une page web : définition de la structure, en général avec du HTML et
+du style, avec du CSS.
+
+Diazo (anciennement XDV)
+Technique permettant de réaliser des thèmes pour
+des sites en internet sans le modifier directement. Javascript
+Il notamment utilisé pour le theming Plone, mais Langage de programmation interprété par le naviaussi pour d’autres CMS comme Wordpress.
+gateur web.
+
+39
+
+
+JQuery
+complexes sur une base de données.
+Bibliothèque Javascript qui comprend de nombreuses fonctions utilisables.
+Requête (base de données)
+Récupération ou ajout d’informations dans une
+JQuery UI (User Interface)
+base de données.
+Bibliothèque contenant des éléments d’interface
+directement utilisables dans des pages HTML.
+SeSQL (Search engine SQL)
+Application permettant de faire des recherches
+Logiciel Libre
+avancées dans des bases de données.
+Logiciels pouvant être copiés, modifiés, distribués
+librement et légalement.
+SMTP
+Protocole utilisé pour l’envoi et la réception d’eModel ou modèle
+mail.
+Dans une application basée sur le modèle MVC,
+le modèle est la représentation de la structure de la SQL
+base de données.
+Langage généralement utilisé pour effectuer des
+requêtes dans des bases de données.
+MVC (Model, View, Controller)
+Structure d’une application qui sépare le pro- Template
+gramme en trois parties : les modèles, les vues et Structure de base d’une page web, souvent en
+les contrôleurs.
+HTML.
+PHP (PHP : Hypertext Preprocessor)
+Templatetag
+Langage de script. C’est le langage le plus utilisé Élément Django permettant d’appeler une foncactuellement pour le développement de sites web. tion directement depuis un template.
+Plone
+Theming
+CMS en Python, basé sur le framework de dével- Réalisation d’un thème pour une plate-forme donoppement Zope.
+née (par exemple un CMS).
+Produit Zope
+TinyMCE
+Application installable sur n’importe quelle in- Éditeur WYSIWYG en javascript pouvant remstance Zope.
+placer des champs de formulaires HTML classiques.
+Python
+Langage de programmation interprété, très utilisé Tracker
+dans les entreprises dans de nombreux domaines. Application web permettant de lister des tâches à effectuer, de les affecter à une personnes,
+Q object
+d’effectuer un suivi des tâches effectuer et de reObjet Django permettant d’effectuer des requêtes porter son temps.
+
+40
+
+
+View ou vue
+Traitement des données passées par le contrôleur
+dans l’interface avec laquelle l’utilisateur interagit.
+Wiki
+Site web permettant la création et la modification
+d’articles par n’importe quel contributeur.
+WYSIWYG (What You See Is What You Get)
+Éditeur permettant de générer et de visualiser le
+formattage d’un texte avant de l’utiliser.
+XML (Extensible Markup Language)
+Langage informatique de balisage. Il est à la base
+du HTML.
+XPath
+Langage permettant de localiser des portions d’un
+document XML.
+ZMI (Zope Management Interface)
+Interface d’administration et de gestion du site
+fourni avec le framework web Zope.
+Zope
+Framework de développement web en python.
+
+41
+
+
+Sommaire des annexes
+
+Cockpit
+
+43
+
+Libéfood
+
+48
+
+Cobra
+
+53
+
+Projet Finistère
+
+61
+
+42
+
+
+Cockpit
+
+Annexe 1 : code javacript de la création d’une barre de chargement à l’import de contacts CSV
+.
+
+Appel du templatetag dans le template
+
+Résultat à l’affichage
+Templatetag
+
+Annexe 2 : templatetag permettant d’afficher le nombre de visiteurs uniques total dans les statistiques
+de visite des liens relatifs à une newsletter, et méthode d’appel du templatetag dans le template.
+
+43
+
+
+
+Annexe 3 : code de la classe Footer, permettant d’ajouter un footer à la fin de n’importe quelle newsletter.
+
+Annexe 4 : code appelé juste avant l’envoi d’une newsletter, permettant de joindre le footer et de nettoyer le code HTML de la newsletter.
+
+44
+
+
+
+Annexe 5 : page d’aperçu des pieds de page.
+
+Annexe 5 : page de modification d’un pied de page
+
+Annexe 6 : champ de choix d’un pied de page présent dans le formulaire de modification d’une newsletter.
+
+45
+
+
+
+Annexe 7 : modèle de données des retours en erreur modifié pour avoir un champ “bounce_type”.
+
+Annexe 8 : page d’administration d’un retour en erreur avec le champ “bounce_type”.
+
+46
+
+
+
+Annexe 9 : commande permettant de classifier tous les retours en erreur automatiquement.
+
+Annexe 10 : fonction permettant de calculer et d’afficher les statistiques des newsletters.
+
+Annexe 11 : page de statistiques des newsletters.
+
+47
+
+
+Libéfood
+
+Annexe 1 : configuration de SeSQL.
+
+Annexe 2 : requête effectuée à l’aider de SeSQL.
+
+Annexe 3 : recherche des mots-clés d’origine, utilisant SeSQL, dans l’administration de Django
+
+48
+
+
+
+Annexe 4 : page de wiki réalisée pour expliquer les éléments récupérés dans un flux RSS.
+
+49
+
+
+
+Annexe 5 : éléments publiés en page d’accueil de Libéfood présentant des problèmes : des données ont
+été ajoutées au début du texte.
+
+Annexe 6 : code utilisé pour effacer les messages rajoutés en début de texte.
+
+50
+
+
+
+Annexe 7 : code utilisé par la commande manage.py permettant d’effacer les mots-clés qui ne sont pas
+utilisés.
+
+51
+
+
+
+Annexe 8 : code utilisé par la commande manage.py qui vérifier que les contenus sont bien récupérés.
+
+52
+
+
+Cobra
+
+53
+
+
+
+54
+
+
+
+55
+
+
+
+Annexe 1 : article de wiki réalisé pour exepliquer le fonctionnement d’un thème produit sous Plone.
+
+56
+
+
+
+Annexe 2 : sites dont nous nous sommes inspirés pour réaliser des propositions de design.
+
+57
+
+
+
+Annexe 3 : première maquette proposée pour le nouveau design du site de Pilot Systems.
+
+58
+
+
+
+Annexe 4 : seconde maquette proposée pour le nouveau design du site de Pilot Systems.
+
+59
+
+
+
+Annexe 4 : dernière maquette proposée pour le nouveau design du site de Pilot Systems.
+
+60
+
+
+Projet finistère
+
+Annexe 1 : interface permettant de visualiser des graphes.
+
+61
+
+

ressources/sow_babacar.pdf

Binary file added.

ressources/vincent/ING1/Rapport-final.odt

Binary file added.

ressources/vincent/ING1/Rapport-final.pdf

Binary file added.

ressources/vincent/ING1/abstract.odt

Binary file added.

ressources/vincent/ING1/abstract.pdf

Binary file added.

ressources/vincent/ING1/page-garde.odt

Binary file added.

ressources/vincent/ING1/page-garde.pdf

Binary file added.

ressources/vincent/ING1/resume.odt

Binary file added.

ressources/vincent/ING1/resume.pdf

Binary file added.

ressources/vincent/ING1/slideshow.pdf

Binary file added.

ressources/vincent/SRT2/Rapport-final.odt

Binary file added.

ressources/vincent/SRT2/abstract.odt

Binary file added.

ressources/vincent/SRT2/images/EADS-cluster.dia

Binary file added.

ressources/vincent/SRT2/images/migration-dediee.dia

Binary file added.

ressources/vincent/SRT2/images/organigramme.dia

Binary file added.

ressources/vincent/SRT2/images/transmogrifier.dia

Binary file added.

ressources/vincent/SRT2/page-garde.odt

Binary file added.

ressources/vincent/SRT2/resume.odt

Binary file added.

ressources/vincent/SRT2/soutenance/article.tex

+\documentclass[11pt,a4paper]{article}
+\usepackage{beamerarticle}
+
+\mode<article>
+{
+  \usepackage{fullpage}
+  \usepackage{pgf}
+  \usepackage{hyperref}
+  \setjobnamebeamerversion{slideshow}
+}
+
+\input{src/presentation}
+
+\end{document}
+
+
+

ressources/vincent/SRT2/soutenance/beamercolorthemepilot.sty

+\mode<presentation>
+
+\definecolor{pilotbrown}{RGB}{110,62,16}
+\definecolor{pilotyellow}{RGB}{202,176,26}
+\definecolor{pilotdarkyellow}{RGB}{186,159,15}
+\definecolor{RougeBrique}{cmyk}{0.22,1,1,0}
+
+\setbeamercolor*{normal text}{fg=white,bg=pilotbrown}
+\setbeamercolor*{block body}{bg=pilotyellow,fg=black}
+\setbeamercolor*{block title}{bg=pilotdarkyellow,fg=black}
+\setbeamercolor*{structure}{fg=white}
+
+
+\setbeamercolor*{palette primary}{fg=white,bg=pilotbrown}
+
+\setbeamercolor*{titlelike}{fg=black,bg=pilotyellow}
+
+\mode
+<all>

ressources/vincent/SRT3/docs/note_sur_le_memoire_professionnel_2009-2010.pdf

Binary file added.

ressources/vincent/SRT3/images/RAID_1.png

Added
New image

ressources/vincent/SRT3/images/RAID_1.svg

+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="325" height="500" id="svg3710" sodipodi:version="0.32" inkscape:version="0.44.1" version="1.0" sodipodi:docbase="/home/cburnett/wikipedia/images/electronics" sodipodi:docname="RAID 1.svg">
+  <defs id="defs3712"/>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.70710678" inkscape:cx="255.86074" inkscape:cy="249.02557" inkscape:document-units="px" inkscape:current-layer="layer1" width="325px" height="500px" showgrid="true" inkscape:grid-points="true" inkscape:window-width="945" inkscape:window-height="660" inkscape:window-x="0" inkscape:window-y="31"/>
+  <metadata id="metadata3715">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-32, -176.069)">
+    <path style="fill: rgb(218, 218, 218); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" d="M 56,446 L 55,584.75 C 55,611.75 170,611.75 170,584.75 L 171,446" id="path3875" sodipodi:nodetypes="cccc"/>
+    <g id="g3751" transform="translate(26, 341.75)">
+      <path sodipodi:nodetypes="cc" id="path3753" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3755" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3757" sodipodi:role="line">A4</tspan></text>
+    </g>
+    <g id="g3759" transform="translate(26, 301.214)">
+      <path sodipodi:nodetypes="cc" id="path3761" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3763" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3765" sodipodi:role="line">A3</tspan></text>
+    </g>
+    <g id="g3743" transform="translate(26, 261.75)">
+      <path sodipodi:nodetypes="cc" id="path3745" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3747" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3749" sodipodi:role="line">A2</tspan></text>
+    </g>
+    <g id="g3738" transform="translate(26, 221.214)">
+      <path sodipodi:nodetypes="cc" id="path3722" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3724" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3726" sodipodi:role="line">A1</tspan></text>
+    </g>
+    <path sodipodi:type="arc" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: nonzero; stroke: black; stroke-width: 2.39792; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 10; stroke-opacity: 1;" id="path3718" sodipodi:cx="87.5" sodipodi:cy="73.75" sodipodi:rx="57.5" sodipodi:ry="28.75" d="M 145 73.75 A 57.5 28.75 0 1 1  30,73.75 A 57.5 28.75 0 1 1  145 73.75 z" transform="matrix(1, 0, 0, 0.695652, 26, 234.91)"/>
+    <path style="fill: rgb(218, 218, 218); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" d="M 222,446 L 221,584.75 C 221,611.75 336,611.75 336,584.75 L 337,446" id="path3892" sodipodi:nodetypes="cccc"/>
+    <g id="g3767" transform="translate(192, 341.75)">
+      <path sodipodi:nodetypes="cc" id="path3769" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3771" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3773" sodipodi:role="line">A4</tspan></text>
+    </g>
+    <g id="g3775" transform="translate(192, 301.214)">
+      <path sodipodi:nodetypes="cc" id="path3777" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3779" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3781" sodipodi:role="line">A3</tspan></text>
+    </g>
+    <g id="g3783" transform="translate(192, 261.75)">
+      <path sodipodi:nodetypes="cc" id="path3785" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3787" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3789" sodipodi:role="line">A2</tspan></text>
+    </g>
+    <g id="g3791" transform="translate(192, 221.214)">
+      <path sodipodi:nodetypes="cc" id="path3793" d="M 30,65 L 30,65 L 30,105 C 30,132 145,132 145,105 L 145,65" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;"/>
+      <text sodipodi:linespacing="100%" id="text3795" y="114.464" x="88.6895" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 100%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" xml:space="preserve"><tspan y="114.464" x="88.6895" id="tspan3797" sodipodi:role="line">A1</tspan></text>
+    </g>
+    <path sodipodi:type="arc" style="fill: rgb(244, 210, 121); fill-opacity: 1; fill-rule: nonzero; stroke: black; stroke-width: 2.39792; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 10; stroke-opacity: 1;" id="path3799" sodipodi:cx="87.5" sodipodi:cy="73.75" sodipodi:rx="57.5" sodipodi:ry="28.75" d="M 145 73.75 A 57.5 28.75 0 1 1  30,73.75 A 57.5 28.75 0 1 1  145 73.75 z" transform="matrix(1, 0, 0, 0.695652, 192, 234.91)"/>
+    <path style="fill: none; fill-opacity: 0.75; fill-rule: evenodd; stroke: black; stroke-width: 2; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" d="M 112,286 L 112,246 L 282,246 L 282,286" id="path3894"/>
+    <text xml:space="preserve" style="font-size: 48px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 125%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" x="196.25" y="227.694" id="text3896" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3898" x="196.25" y="227.694">RAID 1</tspan></text>
+    <text xml:space="preserve" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 125%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" x="112.562" y="648.856" id="text3156" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3158" x="112.562" y="648.856">Disk 0</tspan></text>
+    <text xml:space="preserve" style="font-size: 28px; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; text-align: center; line-height: 125%; text-anchor: middle; fill: black; fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: Bitstream Vera Sans;" x="278.562" y="648.856" id="text3160" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan3162" x="278.562" y="648.856">Disk 1</tspan></text>
+  </g>
+</svg>

ressources/vincent/SRT3/images/Zenoss Core - Enterprise IT Monitoring(1).jpg

Added
New image

ressources/vincent/SRT3/images/adt-inet.png

Added
New image

ressources/vincent/SRT3/images/architecture_full.jpg

Added
New image

ressources/vincent/SRT3/images/cacti.png

Added
New image

ressources/vincent/SRT3/images/jeu-du-taquin.png

Added
New image

ressources/vincent/SRT3/images/ploss-ra.png

Added
New image

ressources/vincent/SRT3/images/vastpark.jpg

Added
New image

ressources/vincent/SRT3/memoire-final.odt

Binary file added.

ressources/vincent/SRT3/soutenance/Makefile

+
+all: slideshow.pdf
+
+slideshow.pdf: slideshow.tex common.tex $(wildcard src/*.tex)
+	pdflatex slideshow.tex && pdflatex slideshow.tex
+
+article.pdf: article.tex common.tex $(wildcard src/*.tex)
+	pdflatex article.tex && pdflatex article.tex
+
+clean:
+	rm -f *.log *.pdf *.aux *.out *.toc *.snm *.nav *.dvi *\~ src/*\~
+
+
+
+
+

ressources/vincent/SRT3/soutenance/README

+Initialisation d'un nouveau support
+-----------------------------------
+
+Dans l'ordre
+
+   mkdir titreformation
+   svn add -N titreformation
+   cd titreformation
+   ln -s ../template/Makefile
+   ln -s ../template/*.tex
+   cp -r ../template/src .
+   svn add *
+   svn ci -m "Arborescence creee"
+
+Puis editer src/metadata.tex pour indiquer le titre et l'auteur eventuel.
+
+Mode d'emploi
+-------------
+
+ Il y a un Makefile :
+
+    make slideshow -> pour les presentation videoprojetees
+
+    make article -> support de cours complet
+
+$Id: README 5 2005-07-21 14:04:37Z raphael $
+

ressources/vincent/SRT3/soutenance/article.tex

+
+\documentclass[11pt,a4paper]{article}
+\usepackage{beamerarticle}
+
+\mode<article>
+{
+  \usepackage{fullpage}
+  \usepackage{pgf}
+  \usepackage{hyperref}
+  \setjobnamebeamerversion{slideshow}
+}
+
+\input{src/presentation}
+
+\end{document}
+
+
+

ressources/vincent/SRT3/soutenance/beamercolorthemepilot.sty

+\mode<presentation>
+
+\definecolor{pilotbrown}{RGB}{110,62,16}
+\definecolor{pilotyellow}{RGB}{202,176,26}
+\definecolor{pilotdarkyellow}{RGB}{186,159,15}
+\definecolor{RougeBrique}{cmyk}{0.22,1,1,0}
+
+\setbeamercolor*{normal text}{fg=white,bg=pilotbrown}
+\setbeamercolor*{block body}{bg=pilotyellow,fg=black}
+\setbeamercolor*{block title}{bg=pilotdarkyellow,fg=black}
+\setbeamercolor*{structure}{fg=white}
+
+
+\setbeamercolor*{palette primary}{fg=white,bg=pilotbrown}
+
+\setbeamercolor*{titlelike}{fg=black,bg=pilotyellow}
+
+\mode
+<all>

ressources/vincent/SRT3/soutenance/beamerthemePilot.sty

+\mode<presentation>
+
+\useinnertheme[shadow=true]{rounded}
+\useoutertheme{shadow}
+\usecolortheme{pilot}
+
+\setbeamerfont{block title}{size={}}
+
+\mode
+<all>

ressources/vincent/SRT3/soutenance/common.tex

+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage[french]{babel}
+
+\usepackage{palatino}
+
+\usepackage{graphicx}
+
+\usepackage{multicol}
+
+\usepackage[normalem]{ulem}
+
+\newcommand{\newsection}[1]{\section{#1}
+
+%\begin{frame}
+%  \frametitle{#1}
+%   \begin{center}
+%     {\Huge #1}
+%   \end{center}
+%\end{frame}
+}
+
+\input{src/metadata}
+
+\begin{document}
+
+\frame<presentation>{\titlepage}
+
+\begin{frame}
+\frametitle {Introduction}
+\begin {block}{}
+\begin{center}
+Quel m�tier apr�s un cycle en alternance � l'INSIA ? 
+\end{center}
+\end {block}
+\end{frame}
+
+\frame<presentation>{
+  \frametitle{Table des mati�res}
+
+  \begin{multicols}{2}
+   \tableofcontents
+  \end{multicols}
+
+}

ressources/vincent/SRT3/soutenance/header.png

Added
New image

ressources/vincent/SRT3/soutenance/slideshow.pdf

Binary file added.

ressources/vincent/SRT3/soutenance/slideshow.tex

+\documentclass{beamer}
+
+\mode<presentation>
+{
+  \usetheme{Pilot}
+  \setbeamertemplate{headline}
+  {\includegraphics[width=0.2\paperwidth]{header}}
+}
+
+\input{src/presentation}
+
+\end{document}

ressources/vincent/SRT3/soutenance/slideshow.vrb

+\frametitle {Merci de votre attention}
+
+\begin{center}
+\huge Des questions ?
+\end{center}
+

ressources/vincent/SRT3/soutenance/src/alternance.tex

+
+\newsection{L'alternance}
+
+\subsection{Caract�ristiques}
+
+\begin{frame}[fragile]
+\frametitle{L'alternance}
+\begin{block}{Caract�ristiques}
+  \begin{itemize}
+    \item Compromis entre scolarit� et monde professionnel
+    \item Mise en application des cours th�oriques
+  \end{itemize}
+\end{block}
+
+\end{frame}
+
+\subsection{Avantages}
+
+\begin{frame}[fragile]
+\frametitle{Avantages de l'alternance}
+
+\begin{block}{Pour l'�tudiant}
+  \begin{itemize}
+    \item Plus grande connaissance du monde du travail
+    \item Acquisition d'exp�rience 
+    \item Autonomie financi�re
+  \end{itemize}
+\end{block}
+
+\begin{block}{Pour l'entreprise}
+\begin{itemize}
+\item Exon�ration de charges patronales
+\item Formation d'un employ� sur le long terme      
+\item Meilleure pr�paration pour l'embauche d'un futur collaborateur
+\end{itemize}
+\end{block}
+
+\end{frame}