Commits

Anonymous committed 299356e

removed backup files

Comments (0)

Files changed (10)

bibliographie.rst~

-Bibliographie
-=============
-
- 1. **Latent Dirichlet allocation** 
-      `http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation <http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation>`_
- 2. **What papers have shown that for machine learning, data set size is more important than the model being trained?** 
-      `http://www.quora.com/Machine-Learning/What-papers-have-shown-that-for-machine-learning-data-set-size-is-more-important-than-the-model-being-trained <http://www.quora.com/Machine-Learning/What-papers-have-shown-that-for-machine-learning-data-set-size-is-more-important-than-the-model-being-trained>`_
- 3. **Lessons learned developing a practical large scale machine learning system**
-      `http://googleresearch.blogspot.com/2010/04/lessons-learned-developing-practical.html <http://googleresearch.blogspot.com/2010/04/lessons-learned-developing-practical.html>_`
- 4. **De la classification d'opinions à la recommdantion : l'apport des textes communautiares**
-      `http://www.atala.org/IMG/pdf/1-Poirier-TAL51-3.pdf <http://www.atala.org/IMG/pdf/1-Poirier-TAL51-3.pdf>`_
- 5. **Clustering Short Texts using Wikipedia**
-      `http://www.hpl.hp.com/india/documents/papers/clusteringshorttexts.pdf <http://www.hpl.hp.com/india/documents/papers/clusteringshorttexts.pdf>`_
-    **Short Text Classification in Twitter to Improve Information Filtering**
-      `http://www.hpl.hp.com/india/documents/papers/clusteringshorttexts.pdf <http://www.hpl.hp.com/india/documents/papers/clusteringshorttexts.pdf>`_
- 6. **Global vs. Local Graph Ranking** 
-      `http://markorodriguez.com/2011/03/30/global-vs-local-graph-ranking/ <http://markorodriguez.com/2011/03/30/global-vs-local-graph-ranking/>`_
- 7. **Rational Research Model for Ranking Semantic Entities** 
-      `http://baggins.nottingham.edu.my/~wangwei/publications/rarerank.pdf <http://baggins.nottingham.edu.my/~wangwei/publications/rarerank.pdf>`_
- 

cockpit.rst~

-Cockpit
-=======
-
-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.
-
-Je suis intervenu sur cockpit dans le cadre de l'internationalisation de l'application.
-Il a fallut mettre en place le système de traduction et implémenter la traduction
-anglaise.
-
-Pour autant
-j'ai du me confronté à une construction du langage extra-ordinaire le monkeypatch. En 
-soit le monkeypatch n'ai pas dur à comprendre, c'est l'opération qu'il réalise
-qui est importante. Pour l'occasion, le module d'administration a été monkeypatché
-pour supporté l'ordonnancement des éléments du menu selon un critère défini par le 
-programmeur. Ceci avait l'effet indésirable d'évaluer la chaine de caractère avant
-son utilisation et donc avant que le contexte de langue soit défini et provoquait
-l'affichage des éléments du menu toujours dans la langue par défaut. La solution
-a été d'utilisé subtilement un proxy d'évaluation paresseuse sur l'objet en question.

conclusion.rst~

-Conclusion
-==========
-
-Le travail réalisé au cours des 5 derniers mois aux seins des équipes de Libération
-et Pilot Systems a été très enrichissant d'un point de vue humain et technique.
-
-Chez Libération ou Pilot Systems le developpeur doit être assez generaliste pour 
-pouvoir repondre aux multiples facettes que presentent les missions, dans le cadre
-d'une fonctionnalité ou d'un projet entier. Il s'agit d'un point de vue
-technique de conception, de maitrise des outils, y compris les langages de 
-programmation, humain à travers des réunions d'équipe courantes et du travail par
-paire ou encore ce qui concerne la definition des besoins avec leurs adéquantions
-à la plateforme.
-
-Une responsabilisation sur les différentes aspects que présente un projet permet
-d'augmenter l'implication et donc la qualité du travail et permet d'un point de vue
-individuel de developper ses qualités dans différents domaines de la réalisation 
-de projet informatique.
-
-Il s'agit d'une incarnation du metier de developpeur qui correspond à mes 
-aspirations professionnelles, c'est pourquoi malgré les difficultés rencontrées 
-je suis satisfait de cette experience professionnelle.

conf.py~

-# -*- coding: utf-8 -*-
-#
-# Rapport de stage chez PilotSystems documentation build configuration file, created by
-# sphinx-quickstart on Sun Aug 28 14:50:40 2011.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys, os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = []
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'Rapport de stage chez PilotSystems'
-copyright = u'2011, Amirouche Boubekki'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '1.0'
-# The full version, including alpha/beta/rc tags.
-release = '1.0'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-language = 'fr'
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'RapportdestagechezPilotSystemsdoc'
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
-  ('index', 'RapportdestagechezPilotSystems.tex', u'Rapport de stage chez PilotSystems',
-   u'Amirouche Boubekki', 'manual'),
-]
-latex_elements = {'papersize': 'a4paper', 'pointsize': '12pt'}
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
-    ('index', 'rapportdestagechezpilotsystems', u'Rapport de stage chez PilotSystems',
-     [u'Amirouche Boubekki'], 1)
-]

djaz.rst~

-Djaz
-====
-
-Djaz est le projet de modernisation du système d'information qui propulse l'activité 
-web du journal Libération. L'hébergement, le consulting et du développement étant proposé
-par Pilot Systems, je suis intervenu en tant que développeur.
-
-Ce système d'information dois répondre à ces besoins:
-
- 1. Permettre de diffuser des articles et autres media sur le web
- 2. Offrir les outils pour la gestion de la partie rédaction
- 3. Proposer des services communautaires
- 4. Offrir les outils pour la gestion de la partie communautaire
- 5. La gestion des abonnements
-
-Les points 1 et 3 forment le site web, les 2 et 4 forment le «BackOffice Libération».
-Le site de Libération est un site qui reçoit 20 Millions de visites par mois. 
-L'objectif du projet est d'apporter des améliorations fonctionnelles tout en améliorant 
-la pile d'application en adoptant Django.
-
-Dans la suite je présente à la technologie employé, 
-puis je décrit l'organisation du projet et je dresse un portrait technique de l'ancienne
-et de la nouvelle architecture du système d'information, pour finir je decris 
-l'ensemble de mes interventions sur le projet.
-
-Technologies
-------------
-
-Python
-^^^^^^
-
-Python est un langage dynamique de haut niveau multi-paradigme créé en Europe. 
-Sous une licence similaire à la BSD, c'est un des langages open-source en vogue. 
-Apprécié pour le développement de code glue entre différents module, écrit en C 
-ou en C++, il excelle aussi dans le développement rapide d'application web grâce
-à des types de haut niveau, une bibliothèque standard riche et de nombreuses bibliothèques
-rendus disponibles par la communauté.
-
-Plus lent qu'un langage compilé, sa lenteur n'est pas un facteur limitant dans
-le monde Web. Il existe des solutions pour accélérer une application «gourmande» en 
-temps processeur tel que le passage du code critique en C, C++ ou Cython. `PyPy <http://pypy.org/>`_ 
-est une solution de plus en plus envisagée pour accélérer l'exécution des scripts sans
-avoir à écrire du nouveau code.
-
-Il existe un certains nombre de site propulsé par Python notamment `Youtube <http://www.youtube.com/>`_,
-`Quora <http://www.quora.com/>`_ et `Disqus <http://disqus.com/>`_.
-
-Django
-^^^^^^
-
-Django est le framework qui a la plus forte progression en terme de popularité et
-de développement dans le monde open-source ces derniers années. Il emprunte des bonnes 
-pratiques du monde de Ruby-on-Rails pour fournir une plateforme complète de 
-développement de site web. Sous License BSD, il est utilisé par un certains nombre
-de site et startup notamment feu `Pownce <http://pownce.com/>`_ et sur le réseau de 
-site du journal `Lawrence <http://www.lawrence.com/>`_.
-
-Il s'agit d'un framework qui implémente le patron de conception Modele-Vue-Controlleur
-appelé dans le monde Django Modele-Vue-Template.
-
-  .. figure:: _static/django_page_rendering.png
-    
-    Représentation de la vie d'une requête dans un projet Django.
-
-La figure 5.1 décrit la vie d'une requête sur un pile applicative Django:
-
- 1. La requête envoyée par le client est reçu par un serveur compatible avec la norme
-    `WSGI <http://www.python.org/dev/peps/pep-0333/>`_.
- 2. Le serveur WSGI se charge de présenter l'information de la requête selon le
-    standard et appeler l'application web.
- 3. La première étape lorsque l'application web est appelée est la curation des
-    parametre de la requête reçue. Les middleware interviennent directement sur les 
-    arguments passée par le conteneur WSGI. Après cette opération la main est passé
-    au module de dispatch des requêtes.
- 4. L'«URL Dispatch» se charge d'appeller la vue qui doit répondre à la requête
-    en fonction de l'url demandé. Les vues sont associées aux urls à l'aide d'expression
-    régulières.
- 5. La vue doit construire la réponse. Des raccourcis dans le framework
-    existent pour les réponses les plus communes (html, json, erreur 404 etc.).
- 6. La vue utilise une couche d'abstraction vers la base de données qui lui permet
-    de realiser la pluspart des opérations en code python.
-    Un moteur de template existe qui permet de séparer la construction de la réponse
-    et le rendu de l'attribut body de la réponse.
- 7. La reponse est retournée au conteneur wsgi après être passée de nouveau par 
-    la couche middleware.
- 8. Le couche middleware va pouvoir intervenir sur toutes les requêtes.
- 9. Le Server WSGI se charge de renvoyer la réponse au client.
-
-
-Organisation
-------------
-
-L'organisation du projet djaz a évolué au fur et à mesure. Ce travail 
-d'amélioration est explicité dans chaque sous partie.
-
-Méthodologie agile
-^^^^^^^^^^^^^^^^^^
-
-Le projet fonctionne dans un cadre fixé avec un certains nombre de jalons, mais
-les contributions pour chaque jalons ne sont pas définitives.
-L'objectif étant de livrer ce qui fonctionne aux différents jalons et de continuer
-le travail parallèlement à la gestion du code en production pour produire les
-fonctionnalités manquantes.
-
-Plusieurs choses peuvent survenir qui va bloquer l'avancée du projet Djaz:
-
- - Évènement politique, social ou économique qui nécessitent le développement ou 
-   la re-configuration de module. C'est l'un de points qu'essaye de tacler la
-   plateforme djaz, en rendant possible la création de nouveau contenant web rapidement.
-   
- - Bugue sur la  plateforme, il faut intervenir immédiatement. La réponse peut être
-   gradué comme par exemple retirer la fonction pour ensuite proposer la fonction
-   débogué.
-   
- - Une demande ponctuelle des journalistes. En fonction de la charge de travail
-   et des priorités les demandes sont integrées immédiatement ou à la prochaine 
-   bascule.
-
-De fait, en dehors des bascules, les mises en production sont faites regulièrement
-avec au minimum une mise en production par semaine.
-
-Equipe
-^^^^^^
-
-L'équipe est composé de 10 personnes.
-
-  .. figure:: _static/organisation_djaz.png
-    
-    Équipe du projet Djaz
-
-Lots
-^^^^
-
-Le découpage est représenté dans le tableau suivant :
-
-+------------------------+------------+----------+----------+-----------------+
-| Fonction               | Lot 1      | Lot 2    | Lot 3    | date de bascule |
-|                        |            |          |          |                 |
-+========================+============+==========+==========+=================+
-| Permettre de diffuse   |     X      |          |          | 14 Août 2011    |
-| des articles et autre  |            |          |          |                 |
-| media sur le web       |            |          |          |                 |
-+------------------------+------------+----------+----------+-----------------+
-| Offrir les outils pour |            |    X     |          |                 |
-| la gestion de la partie|            |          |          |                 |
-| rédaction              |            |          |          |                 |
-+------------------------+------------+----------+----------+-----------------+
-| Proposer des services  |     X      |          |          | 14 Août 2011    |
-| communautaires         |            |          |          |                 |
-+------------------------+------------+----------+----------+-----------------+
-| Offrir les outils pour |     X      |          |          | 14 Août 2011    |
-| la gestion de la partie|            |          |          |                 |
-| communautaire          |            |          |          |                 |
-+------------------------+------------+----------+----------+-----------------+
-| La gestion des         |            |          |    X     |                 |
-| abonnements            |            |          |          |                 |
-| la gestion de la partie|            |          |          |                 |
-| communautaire          |            |          |          |                 |
-+------------------------+------------+----------+----------+-----------------+
-
-Forge(s)
-^^^^^^^^
-
-Initialement le gestion des sources et du projet étaient organisé à l'aide du wiki
-et du tracker de Pilot Systems. Il était difficile de référencer le code depuis 
-le tracker ou le wiki. D'autre part le suivit des sources se faisait à l'aide
-de la commande hg log ou d'un outils graphique.
-
-Le passage au logiciel `Trac <http://trac.edgewall.org/>`_ nous a permis une 
-meilleur gestion du projet en intégrant différents workflow à l'intérieur d'un
-même outils.
-
-Gestion des sources
-^^^^^^^^^^^^^^^^^^^
-
-La gestion des sources du projet se fait à l'aide du logiciel mercurial. Les 
-sous-modules dont le code est indépendant du projet sont géré à l'aide de git et
-de la forge proposé par github.
-
-Utilisation de mercurial
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Durant toute la période pré-bascule nous travaillions avec une 
-branche après la bascule nous avons mis en place une seconde branche destinée
-à recevoir ce qui doit aller en production. Le workflow de travail
-dans cette nouvelle configuration est le suivant:
-
- - Acceptation d'un ticket dans la forge trac.
- - Travail sur le ticket, avec possibilité d'alerter l'équipe avec un status
-   «Décision Needed» pour valider la conception.
- - Demande de revue de code sur la forge trac
- - Revue de code en pair ou par un développeur plus expérimenté.
- - Après review et validation le ticket est placé en status «Ready For Production»
- - Les commits faisant référence au ticket sont appliqués à la branche default 
-   depuis mercurial.
- - Le code sera en production lors de la prochaine mise en production
-
-Utilisation de github
-~~~~~~~~~~~~~~~~~~~~~
-
-Les modules indépendants de la plateforme sont développer à l'aide de git et github.
-
-Le workflow est similaire au workflow de travail avec mercurial/trac excepté que
-l'on travaille par «pull-request», demande de fusion. Lorsque du nouveau code
-est présent dans la branche «master» d'un projet git il est mis en production
-automatiquement lors de la mise en production suivante.
-
-La Bascule
-----------
-
-La bascule est la période du passage de l'ancienne version à la nouvelle version
-de la plateforme. Une première bascule a permis de passer le Lot 1 sur la nouvelle
-plateforme, d'autre bascule viendront compléter.
-
-Ancienne architecture
-^^^^^^^^^^^^^^^^^^^^^
-
-La solution initiale était basé sur la technologie PHP Zend. La pile applicative est 
-décrite dans la figure 5.3. 
-
-  .. figure:: _static/zendstack.png
-    
-    Pile applicative du système d'information sous Zend
-
-L'infrastructure qui herbergeait cette solution est decrite dans la figure 5.4.
-
-  .. figure:: _static/infrastructure.png
-    
-    Ancienne infrastructure
-
-Architecture cible
-^^^^^^^^^^^^^^^^^^
-
-La nouvelle solution utilise une pile applicative à base de Python aidé du framework
-Django. Elle est décrite dans la figure 5.5.
-
-  .. figure:: _static/djangostack.png
-    
-    Pile applicative du système d'information sous Django
-
-L'infrastructure qui héberge cette solution est celle décrite dans la figure 5.6.
-
-  .. figure:: _static/infrastructure_new.png
-    
-    Nouvelle infrastructure
-
-  .. figure:: _static/organisation_sources.png
-    
-    Organisation des sources
-
-
-Missions
---------
-
-En tant que développeur dans le cadre d'une méthodologie agile j'avais une relative 
-liberté de conception mais mes choix devaient être validé par le reste de
-l'équipe.
-
-Dashboard de suivit des abonnées payant
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Le dashboard de suivit des abonnées payant est une demande du service marketing,
-qui a pour objectif de permettre l'analyse de l'impact des campagnes. 
-
-L'ancienne plateforme se contentait d'envoyer un mail avec les totaux d'abonnées 
-par type d'abonnements. Une personne se chargeait après réception du mail de 
-remplir un tableau pour permettre une lecture plus facile de l'information et 
-la génération de graphique.
-
-Ma première proposition était de modifier l'administration proposé par Django 
-pour afficher des widgets graphique permettant de visualiser la progression. Ceci
-impliquait d'entamer le lot 3 c'est pourquoi nous nous sommes contenter d'une
-commande django qui génère un fichier au format csv.
-
-Il m'a fallu concevoir la commande, cela impliquait
-pas d'autre partie du code hormis le code de transition du lot 3. C'était pour 
-moi l'occasion de me familiariser avec le code du projet djaz ainsi que le code
-PHP. Il m'a aussi fallut m'adapter au workflow de travail.
-
-
-Améliorer le worlflow d'assurance qualité
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-J'ai réalisé un point sur les éléments en place pour s'assurer
-le bon fonctionnement de la plateforme ainsi que sa pérennité en proposant des outils 
-qui capturent un maximum de régression.
-
-Lancement des tests projets et sous-modules
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-La première étape était de pouvoir lancer tous les tests de la plateforme djaz
-à l'aide d'une seule commande. La difficulté résidait dans la possibilité offerte
-par django de lancer les tests de la plateforme uniquement pour un seul «projet django».
-D'autre part certains sous-modules ont leur propre méthode de lancement de test.
-
-J'ai réaliser un script qui permet de lancer tous les tests en série avec la contrainte
-que les rapports ne soient pas analysables automatiquement.
-
-Accélérer les lancements des tests
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Le lancement des tests prennent 20 minutes sur la machine de préproduction, il m'a
-fallut évaluer la possibilité de lancer les tests plus rapidement. 
-
-Deux solutions existent:
-
- - Placer la base de donnée en RAM avec comme contrainte de ne pas pouvoir éteindre 
-   la machine car il faudrais 1 heure pour recharger la base.
- - Limiter le nombre d'écriture sur disque avec la contrainte
-   que la base de donnée puisse être corrompu en cas de panne de la machine. Le temps de 
-   chargement de la base est de deux heures.
-
-Ces deux solutions sont trop contraignantes pour la machine de préproduction. Nous
-ne pouvons pas courir le risque de perdre la base de donnée quand il faut au moins
-une heure pour la recharger. C'est une configuration utilisable en développement,
-car nous utilisons des bases plus légères.
-
-Eviter les regressions fonctionnelles
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Les tests unitaires sont efficaces contre certains bugs mais pas tous. Le test
-des fonctions activés par javascript ne sont pas possible pour cela il faut employer
-d'autre outils tel que `Selenium <http://seleniumhq.org/>`_. Selenium permet le test
-d'une application à l'intérieur d'un navigateur, ses tests couvrent un plus large
-spectre fonctionnelle et sont plus réaliste.
-
-Jusqu'à maintenant, les fonctions qui bénéficieraient de cette amélioration n'ont
-pas été considérés assez nombreuses pour justifier le développement.
-
-Test de réponse positive
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Une autre façon de tester une application est de voir si celle-ci répond le bon
-code Http quand on requête ses urls. Pour cela un outils mis à notre disposition
-est  `django-kong <http://django-kong.readthedocs.org/en/latest/>`_. C'est une solution
-intermédiaire entre Selenium et les test de Django.
-
-Pour les mêmes raisons que précédemment cette solution n'a pas été mise en place.
-
-Sécuriser la génération d'image
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Le Libération possède un `reader <http://journal.liberation.fr/publication/liberation/715/#!/0_0>`_ 
-réalisé en HTML5 qui permet la lecture du journal en ligne. Les images
-du reader ne sont pas pré-générées pour des raisons de performance. Donc deux utilisateurs
-peuvent enclencher la génération d'une image au même moment et provoquer des erreurs
-d'écriture.
-
-C'était ma première expérience du développement de module qui travail en parallèle
-pour le web en utilisant le framework Django. La solution était d'utiliser des
-locks-fichiers avec un temps de vie pour assurer la reprise sur panne.
-
-
-Colonne de droite
-^^^^^^^^^^^^^^^^^
-
-La colonne de droite est la colonne où se trouve des offres promotionnelles.
-
-Cette application contient un unique modèle qui se charge de stocker la configuration
-de la colonne et ses bloques. En effet une colonne est representé par une table 
-qui contient dans chaqu'une de ses les lignes les informations qui nous permettent 
-d'afficher un bloque.
-
-La description UML de ce module est représenté dans la figure 5.8.
-
-  .. figure:: _static/libepartnersad.png
-    
-    *Diagramme de classe du module gérant la colonne de droite*
-
-Carrier Pigeon
-^^^^^^^^^^^^^^
-
-Carrier Pigeon est une application exportant des données après la création
-ou la mise à jour d'un modèle Django. Ce travail a nécessité des connaissances
-de Django et de Python.
-
-La description UML de ce module est representé dans la figure 5.9.
-
-  .. figure:: _static/uml_carrierpigeon.png
-    
-    *Diagramme de classe du module carrier_pigeon*
-
-Carrier Pigeon est une application indépendante dont l'intégration à un projet
-se fait à l'aide de classe Python de configuration.
-
-Gestion de favoris
-^^^^^^^^^^^^^^^^^^
-
-Lors de cette mission j'ai du reproduire la fonction bibliothèque
-de monLibe. Il s'agit d'un point de vue technique concevoir le modèle, les vues
-ainsi que les templates tags. Ce module est indépendant du reste du code de libération,
-il est utilisé dans des projets hors djaz. 
-
-La description UML de ce module est représenté dans la figure 5.10.
-
-  .. figure:: _static/uml_favoris.png
-    
-    *Diagramme partiel de classe du module carrier pigeon*
-
-L'implémentation dans djaz se fait en surchargeant les templates dans le projet
-django.
-
-
-Dossiers à la demande
-^^^^^^^^^^^^^^^^^^^^^
-
-Mirroir fonctionnelle des dossiers abonnées de l'espace monLibé, c'est une application
-propre au projet djaz.
-
-  .. figure:: _static/uml_fod.png
-    
-    *Diagramme partiel de classe du module libefolderondemand*
-
-Il a fallut aussi concevoir une interface graphique pour le suivit du processus de 
-creation des dossiers.
-
-Bilan
-^^^^^
-
-La conception, le developpement et la maintenance sont aisé par le framework Django,
-et le Python. Par contre les bonnes patrons de conception ne sont pas forcé. Même si
-Django et Python donne des pistes pour écrire du bon code, cela ne remplace pas 
-la reflexion.
-Dans un contexte agile nous procedions par itération de conception de l'application,
-avec parfois des besoins qui remontait lors de l'utilisation. Cela demande un travail
-rigoreux de documentation de son code pour permettre de revenir dessus facilement à
-tout moment.
-La réalisation de la documentation comme le code c'est fait de manière 
-itérative.
-Cette méthode de travail c'est trouvé renforcé avec l'adjonction de tests.
-Malgré le fait que je connaissait le Python et le Django, j'ai eu des difficulté pratique
-concernant le travail en groupe et la gestion des sources. Hormis
-ce petit bémol, mon expérience a été positive et a renforcé mes convictions quant 
-à l'interêt du developpement web en Python.

introduction.rst~

-Introduction
-============
-
-Ce rapport rend compte du stage effectué de mai 2011 à septembre 2011 
-au sein de l'entreprise PilotSystems dans le cadre de la dernière année de Master 
-d'Informatique Avancée et Applications spécialité Intégration de Système Logiciel.
-
-J'ai intégré l'équipe de Pilot Systems en tant que développeur web junior. Ma mission
-principale était de participer à la réalisation de la nouvelle plateforme qui propulse 
-notamment le site `Liberation.fr <http://www.liberation.fr>`_. 
-
-Ce rapport commence par la présentation de l'entrerprise, puis poursuit sur l'explication
-et l'analyse de chaque projet sur lesquels je suis intervenu.

pilotsystems.rst~

-Pilot Systems
-=============
-
-Présentation
-------------
-
-Pilot Systems est une entreprise de services en informatique basée à Paris.
-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 objectifs 
-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.
-
-.. figure:: _static/organisation.png
-    :alt: Organigramme de Pilot Systems
-    
-    *Organigramme de Pilot Systems*
-
-Pilot Systems est une entreprise composée de douze 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 d'un gestionnaires de projet qui joue aussi
-le rôle d'assistant de direction.
-
-Développeur Agile
------------------
-
-Le développeur chez Pilot Systems doit pouvoir intervenir dans de nombreux contextes:
-
-- **Conception & Développement:** le développeur a la charge principale de concevoir
-  et développer à partir de la demande client une application et son infrastructure.
-  Il peut faire intervenir d'autre membre de l'équipe et demander conseil au sein
-  de l'équipe en fonction des spécialités de chacun.
-
-- **Veille Technologique:** une partie du travail est de mobiliser son
-  attention sur le développement des techniques, technologies et outils. Cette 
-  veille se concrétisent notamment à travers la participation des développeurs aux
-  forums concernant les technologies employées.
-
-- **Recherche & Développement**: trouver de nouvelle solution à des problèmes 
-  déjà résolus tel que la gestion de contenu ou bien l'innovation en intégrant 
-  de nouvelle techno est une partie prenante du travail du développeur.
-
-- **Communication**: sur ses projets le développeur est le référent technique donc
-  c'est à lui qu'incombe la formation de l'utilisateur. Il aussi un rôle de
-  conseiller technique mais aussi fonctionnelle. Il est très efficace dans ce 
-  domaine car il est le concepteur de l'architecture et peut précieusement expliquer
-  au client les tenants et aboutissant de chaque demande. Il participe à la 
-  formalisation du besoin.
-
-Couplées à une méthodologie de développement agile, ses différentes qualités qui 
-forme un développeur chez Pilot Systems permet au client l'assurance de la 
-réalisation de son besoin avec un maintient du triptyque qualité/coût/délai.
-
-Outils
-------
-
-Le tracker
-----------
-
-Le tracker est l’outil maître chez Pilot Systems. C’est un outil de suivi de 
-tâches, de report de temps et de gestion de planning, accessible avec un navigateur
-web.
-
-.. figure:: _static/full_report.png
-    :alt: Rapport du temps passé durant le stage
-    
-    *Rapport du temps passé sur les différents tracker pendant la durée du stage*
-
-.. figure:: _static/tracker_liberation.png
-    :alt: Vue tracker principale pour le projet libération
-    
-    *Vue tracker principale pour le projet libération*
-
-Il permet le suivi des projets de Pilot Systems et des demandes des clients. Il 
-tiens l’équipe informée des problèmes rencontrés ainsi que des demandes du client.
-Chaque projet a son propre tracker.
-
-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 permet aussi la capitalisation
-des connaissances à ce titre 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.
-
-.. figure:: _static/wiki_cobra.png
-    :alt: Page wiki pour l'organisation du projet Cobra
-    
-    *Page wiki pour l'organisation du projet Cobra*
-
-On retrouve sur le wiki les informations suivantes :
-
-- la documentation du 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).
-
-NAGIOS
-------
-
-NAGIOS est un outil de suivi de l'infrastructure d'hébergement et d'application. Il 
-fonctionne à l'aide de script écrit en Python ou BASH, qui sonde différent comportement
-sur l'ensemble du parc. C'est un outil essentiel au bon fonctionnement
-de l'activité de hosting mais aussi un moyen de détecter des anomalies dans les 
-applications.
-
-.. figure:: _static/nagios.png
-    :alt: Vue NAGIOS de suivi des machines virtuelles
-    
-    *Vue NAGIOS de suivi des machines virtuelles*
-    
-IRC
----
-
-IRC est un outil de discussion sur internet qui s'assimile aux outils de
-messagerie sur le web. Cet outil asynchrone, non intrusif,
-permet d'expliquer par écrit des solutions à des problèmes, tout en venant 
-compléter le téléphone pour du support.
-
-Le tableau
-----------
-
-Le tableau permet de communiquer avec l'équipe ou un client sur un projet de
-façon dynamique. C'est un outil synchrone, intrusif et pérenne.

resume.rst~

-Résumé
-======
-
-Contexte
---------
-
-Ce stage de cinq mois fait partie de ma formation en Master d'Informatique.
-
-L'entreprise
-------------
-
-Pilot Systems est une Société de Services en Logiciels Libres (SSLL). Elle est 
-composé de douze personnes. Son activité principale est le développement et l'hébergement
-d'application Web à l'aide des technologies Django & ZOPE.
-
-Mission
--------
-
-Ma mission principale était la conception et le développement d'application
-Web pour le framework Django dans le cadre d'une mission au journal Libération. J'ai
-contribué aux projets suivants:
-
-Djaz
-^^^^
-
-.. image:: _static/djaz.png
-   :align: right
-   :height: 100px
-
-Djaz est le projet de modernisation du système d'information qui propulse l'activité 
-Web de Libération. L'hébergement, le consulting et le développement étant proposés 
-par Pilot Systems, je suis intervenu en tant que développeur.
-
-Rook
-^^^^
-
-.. image:: _static/rook.png
-   :align: right
-   :height: 100px
-
-Rook est une application web qui complète l'expérience utilisateur de twitter.
-Il s'agit d'une application développé par Pilot Systems sur laquelle je suis 
-intervenu en tant que consultant fonctionnel et technique.
-
-Cockpit
-^^^^^^^
-
-.. image:: _static/cockpit.png
-   :align: right
-   :height: 100px
-
-Cockpit est une application d'e-mailing développée par Pilot Systems. J'ai 
-contribué à ce projet en tant que développeur.
-
-Cobra
-^^^^^
-
-Cobra est le projet de refonte du site web de Pilot Systems. Je suis intervenu 
-sur ce projet en tant que consultant technique.

rex.rst~

-Retours d'expériences
-=====================
-
-Intégration dans le milieu du travail
--------------------------------------
-
-Le stage m'a permis d'apprendre un métier passionnant qu'est le celui du développeur
-Web, ainsi que la rigueur qui va avec les projets en mode agile.
-
-La facette la plus enrichissante est la communication interne au projet et 
-extra-projet qui nourrit les compétences de chacun.
-
-La communication avec les collaborateurs
-----------------------------------------
-
-Les contacts humains sont une différence significative entre un projet école et 
-une expérience professionnel. La communication avec les partenaires de projet
-interviens à toutes les étapes d'un projet.
-
-Tout le long du développement d'un module pour la plateforme djaz, l'équipe me 
-conseillait sur mes choix d'implémentation au fur et à mesure que j'avançait
-dans mon implémentation. C'est un idéal de communication qu'y est possible dans
-les petites équipes de développement.
-
-Organisation et planification des phases
-----------------------------------------
-
-L'organisation souple des lots a permis de livrer à temps le projet. C'est une méthodologie
-de travail qui permet de faire des nouvelles versions souvent mais avec un coup
-relatif en terme de maintenance. Mon sentiment est que cela est une méthode réaliste
-de travail en ce quelle permet de capter l'attention des visiteurs tout en nourrissant
-en parallèle les fonctions du site.
-
-Ce stage m'a permis d'apprendre à jongler entre les outils, ainsi qu'avec les codes
-sources. Un bug peut survenir sur une application alors que je développe une autre,
-c'est un changement de contexte qu'il faut s'habituer à avoir. Ceci est mitigé
-par des règles établit au niveau du passage du code en stable, pour éviter ce genre 
-de situation.
-
-Bilan
------
-
-Lors de mon stage je me suis efforcé d'écouter, d'apprendre tout en fournissant
-tout mon savoir et mes compétences pour mener à bien les projets qui m'était confié.
-
-La méthodologie agile et le travail par pair m'a aidé à comprendre rapidement
-les besoins du métier.
-
-Cela a été une opportunité pour moi de travailler sur un projet de cette ampleur,
-avec autant de responsabilités.

rook.rst~

-Rook
-====
-
-Rook est une application web qui complète l'expérience utilisateurs de twitter.
-Notamment à l'aide de mini-application qui rendent accessible des fonctions de 
-twitter autrement difficile d'accès. Il s'agit d'une application développée par 
-Pilot Systems sur laquelle je suis intervenu en tant que consultant fonctionnel 
-et technique. Je devais penser à de nouvelles fonctionnalités et proposer des moyens
-de les implémenter.
-
-La proposition est de reproduire le mur personnalisé de facebook et de regrouper les
-tweets par thème comme le fait Google News. 
-
-La première étape a été de dresser un état de l'art dans le domaine de la recommandation
-de contenu. Je me suis rendu compte que le domaine de recherche à l'origine de ce 
-type d'algorithme provenait le plus souvent de l'intelligence artificielle et plus 
-particulièrement du domaine des machines apprenantes ou algorithme d'aide à la décision. 
-J'ai continué mes lectures dans ce domaine. Les machines apprenantes 
-utilisent différents types d'algorithmes parfois basés sur des statistiques 
-parfois sur des mathématiques discrètes. Il y a une partie des algorithmes qui 
-utilisent de l'information sémantique tiré d'un traitement automatique de la 
-langue. La catégorisation est aussi un problème qui peut-être résolue à l'aide 
-d'une machine apprenante.
-
-A partir de ces connaissances j'ai développé un programme cible qui doit permettre
-d'implémenter la recommandation de contenu en minimisant l'effet de démarrage à
-froid dans le cadre d'une implémentation dans Rook. 
-
-Ce chapitre est partagé en trois parties, dans un premier temps je décris la base
-de connaissance et son support, ensuite les différentes méthodes qui permettront 
-de faire de la recommandation sur cette base de donnée, pour finir par un bilan 
-sur le travail fait.
-
-
-Base de connaissances
----------------------
-
-Connaissances
-^^^^^^^^^^^^^
-
-Les messages sur twitter ne font que 140 caractères, difficile dans ce cas de réaliser 
-une analyse sémantique ou même statistique à l'aide d'un algorithme tel que LDA [1].
-
-
-Un système apprenant a besoin d'informations, certains algorithmes fonctionnent
-mieux avec un grand nombre de donnée [2] et les algorithmes pour résoudre des
-problèmes avec de très nombreuses données existent [3].
-
-Nous désirons donc maximiser la quantité d'informations que nous capturons de l'environnement
-social twitter de l'utilisateur ainsi que de son interaction avec l'application.
-
-En entrée du système, nous avons l'environnement social, les tweets (ainsi que les hashtag) et 
-toutes les interactions avec les tweet:
-
-  - personnes suivies
-  - personnes suivantes
-  - tweet dont hashtags
-  - retweet(s) et les personne(s) qui retweete(nt)
-  - réponse(s) et les personne(s) qui reponde(nt)
-  - lu ou non
-  - heure du tweet
-  - mise en favoris
-
-Ceci ne résout pas le problème de l'analyse sémantique des tweets. En effet, avoir
-un grand nombre de données est une chose, et pouvoir les corréler en est une autre. 
-Pour nous aider dans ce travail nous allons augmenter notre base
-de connaissances issue du Web certaines ressources facilement exploitable tel que 
-Wikipedia à travers `dbpedia <http://dbpedia.org/About>`_ ou autres ressources 
-catégoriser par exemple `dmoz <http://www.dmoz.org/>`_ ou `Yahoo <http://www.yahoo.fr>`_.
-L'idée est de permettre d'enrichir le tweet avec des documents que l'on sait similaires
-à l'aide d'une recherche full-text [5].
-
-Bases
-^^^^^
-
-J'ai établi la matrice de comparaison des bases MySQL, PostgreSQL, Neo4j, OrientDB
-et MongoDB.
-
-+------------------------+---------------------------+----------+----------+-----------------+
-|                        | MySQL, PostgreSQL         | Neo4j    | OrientDB |     MongoDB     |
-|                        |                           |          |          |                 |
-+========================+===========================+==========+==========+=================+
-| Tuning et maintenance  |   oui                     |          |          |                 |
-| documenté              |                           |          |          |                 |
-|                        |                           |          |          |                 |
-+------------------------+---------------------------+----------+----------+-----------------+
-| Schema-less            |                           |    oui   |   oui    |       oui       |
-|                        |                           |          |          |                 |
-|                        |                           |          |          |                 |
-+------------------------+---------------------------+----------+----------+-----------------+
-| Nouvelles connexions   |                           |    oui   |   oui    |                 |
-| facile à créer         |                           |          |          |                 |
-+------------------------+---------------------------+----------+----------+-----------------+
-| ACID                   |   oui                     |    oui   |   oui    | au niveau       |
-|                        |                           |          |          | document        |
-+------------------------+---------------------------+----------+----------+-----------------+
-| CAP (une instance)     |   CA                      |    CA    |   CA     |    CA           |
-|                        |                           |          |          |                 |
-+------------------------+---------------------------+----------+----------+-----------------+
-| License                |   GPL                     |   AGPLv3 |  Apache  |   AGPLv3        |
-|                        |                           |          |          |                 |
-+------------------------+---------------------------+----------+----------+-----------------+
-
-Les données que nous allons devoir recueillir sont de natures différentes, elles 
-nécessiteront un grand nombre de tables et de connexions, d'autre part en tant que
-projet de recherche il est agréable de savoir que l'ajout d'attribut et de nouvelle
-connexion est facile. Les base neo4j et orientdb sont à privilegier.
-
-Système intelligent
--------------------
-
-Notre besoin est de regrouper par catégorie les articles et de donner une note aux
-tweet entrant d'un utilisateur. C'est deux problèmes distincts mais qui peuvent se 
-recouper dans le cadre de la mise en place d'un système apprenant. 
-
-Categorisation
-^^^^^^^^^^^^^^
-
-Il existe différentes méthodes pour faire de la catégorisation.
-
-On peut utiliser des informations sémantiques présentant des sites par regroupement
-thématique. Par exemple un blog qui a un lien depuis bitbucket a de
-forte chance d'être un blog technique. De plus, un compte twitter qui est lié depuis un blog, lui même
-lié depuis bitbucket a de forte chance d'avoir un contenu technique. De
-cette façon nous pouvons construire un système qui permet de déterminer une
-ou des catégories pour chaque site en implémentant un algorithme logique ou en 
-utilisant une machine apprenante supervisée.
-
-Une machine apprenante supervisée est un algorithme apprenant qui prend en entrée
-un document et des catégories. Elle associe les documents aux catégories et 
-permet de générer des descripteurs pour des documents nouveaux. 
-
-Une méthode non-supervisée peut être utilisée de deux façons; d'une part sur les tweets
-étendus à l'aide de [5] ou alors en prenant comme document l'ensemble des poids sur
-les arêtes qui lient un noeud au reste du graphe.
-
-Le défaut des deux méthodes précédentes et qu'il est difficile de comprendre 
-pourquoi un résultat a été donné.
-
-Couplés à la méthode décrite dans [5] en utilisant [6] il est possible d'implémenter 
-un algorithme de type PageRank [7] qui génère des catégories comme réponse. Cette algorithme
-à le bénéfice de pouvoir être expliquer.
-
-Mur personnalisé
-^^^^^^^^^^^^^^^^
-
-L'implémentation du mur personnalisé peut se faire à l'aide des mêmes méthodes que celle
-décrites précédemment. 
-
-Le point qui a retenu mon attention est celui de l'implémentation
-de la machine apprenante qui résoudra ce problème. Un très grand nombre de données
-peuvent être soumis à l'algorithme rendant son calcul non praticable, c'est la 
-malédiction dimensionnelle. L'optimisation envisagé est la génération d'un graphe 
-de catégories pour l'ensemble des documents présent dans la base à l'aide du résultat
-de la catégorisation. Un document pour cette machine apprenante est le vecteur des
-contributions de chaque catégories à un tweet. On peut réduire la dimension de l'espace
-de projection en fonction des ressources.
-
-Bilan
------
-
-Ce travail de recherche et développement a été très enrichissant pour moi. J'ai 
-mis-à-jour différentes méthodes et idées d'implémentations pour Rook. La recherche
-est un travail où il faut de la rigueur et ce projet supplémentaire m'a permis
-d'affiner mes techniques de travail. Par exemple, il est important d'avoir un bon
-support pour communiquer sur le projet rapidement. Le wiki et IRC ont beaucoup permis
-de communiquer sur ce projet. Un autre outils important est Google Notebook qui m'a
-permis d'organiser les informations et les idées de manière efficace.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.