<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zoran.Chanet</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zoran.Chanet"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Zoran.Chanet"/>
	<updated>2026-07-28T04:15:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=45427</id>
		<title>User:Zoran.Chanet</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=45427"/>
		<updated>2019-03-20T10:12:29Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Contact =&lt;br /&gt;
Profil LinkedIn : [https://www.linkedin.com/in/zoran-chanet Zoran CHANET]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitHub : [https://github.com/ProfesseurSid ProfesseurSid]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitLab : [https://gitlab.com/CHANET_Zoran CHANET_Zoran]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil gricad.gitlab : [https://gricad-gitlab.univ-grenoble-alpes.fr/chanetz chanetz]&amp;lt;br&amp;gt;&lt;br /&gt;
E-mail : [mailto:zoran.chanet@etu.univ-grenoble-alpes.fr zoran.chanet@etu.univ-grenoble-alpes.fr] (expire en 2020)&lt;br /&gt;
&lt;br /&gt;
= Projets =&lt;br /&gt;
== 2017-2018 ==&lt;br /&gt;
[[RICM4 2017 2018 - Nucleo]] &lt;br /&gt;
&lt;br /&gt;
== 2018-2019 ==&lt;br /&gt;
[[VT2018 Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ECOM-1F0 1819 BTB]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[PROJET-INFO5 1819 EDCampus]]&lt;br /&gt;
&lt;br /&gt;
= Articles =&lt;br /&gt;
Diverses pages de technologies du projet [[ECOM-1F0 1819 BTB#Technologies | ECOM]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[VT2018 Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[VT2018 Thorntail Demo]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[SonarQube Scanner]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[GitLab Runners]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[GitLab CI/CD]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Apache mod_rewrite]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Let&#039;s Encrypt]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45426</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45426"/>
		<updated>2019-03-20T10:08:59Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Platforme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Plateforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Documents =&lt;br /&gt;
&lt;br /&gt;
*[[Media:Rapport-Projet-EDCampus-2019.pdf|Rapport Final]].&lt;br /&gt;
*[[Media:EDCampus-Final-CHANET-CHARLOT.pdf|Presentation Finale]].&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
=== 18/03/19 ===&lt;br /&gt;
* Ouverture de certains liens dans un autre onglet pour plus de simplicité&lt;br /&gt;
* Gestion des liens externes dans l&#039;overview des fichiers des projets&lt;br /&gt;
* Retrait des livrables actuels de la liste des fichiers des projets pour éviter les doublons&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45348</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45348"/>
		<updated>2019-03-18T18:59:36Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Semaine 7 - Vitrine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
=== 18/03/19 ===&lt;br /&gt;
* Ouverture de certains liens dans un autre onglet pour plus de simplicité&lt;br /&gt;
* Gestion des liens externes dans l&#039;overview des fichiers des projets&lt;br /&gt;
* Retrait des livrables actuels de la liste des fichiers des projets pour éviter les doublons&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45315</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45315"/>
		<updated>2019-03-18T12:30:39Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* 15/03/19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45314</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45314"/>
		<updated>2019-03-18T11:41:30Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Semaine 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45253</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45253"/>
		<updated>2019-03-11T13:18:30Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Le projet en quelques mots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45252</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45252"/>
		<updated>2019-03-11T12:28:21Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* 11/03/19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45250</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45250"/>
		<updated>2019-03-11T12:21:31Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. &lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45248</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45248"/>
		<updated>2019-03-11T12:17:12Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45247</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45247"/>
		<updated>2019-03-11T12:16:35Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet.&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine.&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45245</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45245"/>
		<updated>2019-03-11T12:12:43Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Servan et Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45244</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45244"/>
		<updated>2019-03-11T12:09:07Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45243</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45243"/>
		<updated>2019-03-11T12:07:18Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Correction de la configuration d&#039;Apache à l&#039;intérieur du conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45141</id>
		<title>Projets 2018-2019</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45141"/>
		<updated>2019-03-05T08:13:59Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2017-2018]] | [[Projets]] | [[Projets 2019-2020]]&amp;gt;&amp;gt;&lt;br /&gt;
=INFO=&lt;br /&gt;
==INFO3==&lt;br /&gt;
&lt;br /&gt;
==INFO4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: &#039;&#039;&#039;21/01/19 à 14h30&#039;&#039;&#039;&lt;br /&gt;
* Soutenance à mi-parcours: A définir&lt;br /&gt;
* Soutenance: A définir&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par info4_2018_2019. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Chaque projet doit avoir &#039;&#039;&#039;aux moins 2 dépôts git&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Un pour les documents&#039;&#039;&#039; demandés rapport, présentation de pré-soutenante, de soutenance, flyer. &#039;&#039;&#039;Il sera appelé documents.&#039;&#039;&#039;&lt;br /&gt;
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. &lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;La note obtenue&#039;&#039;&#039; tiendra compte du &#039;&#039;&#039;nombre et de la qualité des commits&#039;&#039;&#039; observé dans &#039;&#039;&#039;vos dépots git et la branche master&#039;&#039;&#039; (or depot documents). La qualité comprend l&#039;intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n&#039;est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).&lt;br /&gt;
&lt;br /&gt;
* Il est fortement conseillé de suivre un &#039;&#039;&#039;développement incrémental&#039;&#039;&#039; qui permette d&#039;avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d&#039;une succession de &#039;&#039;&#039;démonstrateurs présentables séparément&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Vous devez faire aussi des &#039;&#039;&#039;schémas d&#039;architectures générales et/ou spéficiques, des diagrammes de séquence&#039;&#039;&#039;, et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.&lt;br /&gt;
&lt;br /&gt;
===Propositions de projets===&lt;br /&gt;
&lt;br /&gt;
* [[LoRaGAN]] : LoRa in the Space, Didier Donsez avec le [https://www.csug.fr/ CSUG] (S)&lt;br /&gt;
* [[LoRaRescueBalloon]], Didier Donsez avec le [https://www.csug.fr/ CSUG] et des élèves IESE 3 et 4. (S)&lt;br /&gt;
* Agriculture connectée à [[ASAC/AP|Polytech]] et à [[ASAC/SJC|St Cassien]] en partenariat avec les projets collectifs IESE/MAT&lt;br /&gt;
*# [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]] - Projet embarqué sur STM32 ou RPi3 + LoRa (S)&lt;br /&gt;
*# [[ASAC/AP/AP-2019-2|Serre Polytech - Kiosk]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
*# [[ASAC/SJC/SJC-2019|Serre St Cassien]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
* [[Projet FICHA - tri sélectif connecté]], Sylvain Toru.&lt;br /&gt;
* [[Dataviz de la qualité de l&#039;air]], Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT] (M)&lt;br /&gt;
* [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]], Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier] (M)&lt;br /&gt;
* [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Serious game multi-joueurs pour tables tactiles en réseau]] : Anne-Laure Finkel, Tim Lepage, Didier Donsez. (S&amp;amp;M)&lt;br /&gt;
* [[Interface de visualisation mobile du projet e-Tree]]: Anne Delaballe, Didier Donsez. (M)&lt;br /&gt;
* [[OpenHAB UPnP DCS 2018]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]], Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
* [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]], Olivier Richard (S)&lt;br /&gt;
* [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]], Olivier Richard (S)&lt;br /&gt;
* [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]], Olivier Richard (S)&lt;br /&gt;
* [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]], Olivier Richard (S)&lt;br /&gt;
* [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]], Olivier Richard (S&amp;amp;M)&lt;br /&gt;
* [[generate_NIX_expression | Génération d&#039;expression NIX]] (S)&lt;br /&gt;
 &lt;br /&gt;
Non prioritaire&lt;br /&gt;
* [[Précarité numérique]], Didier Donsez, avec [https://disrupt-campus.univ-grenoble-alpes.fr/ Disrupt Campus]&lt;br /&gt;
* [[Covoiturage Solidaire]], Didier Donsez&lt;br /&gt;
* [[CannonBall de voitures autonomes 2018]]&lt;br /&gt;
* Intégration de [[Walabot]] à [[RobAIR]]&lt;br /&gt;
&lt;br /&gt;
==== Affectation  ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO4 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN]]&lt;br /&gt;
 | VINCENT	Mathieu, SAUTON	Tanguy, ANCRENAZ	Ariane&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/1/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[LoRaRescueBalloon]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/2/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/3/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ASAC/AP/AP-2019-2|Serre Polytech]]&lt;br /&gt;
 | RAKOTOARIMALALA 	Andriamahatratra, BARDOU	Eva, GAUFFIER	Léni&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/4/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ASAC/SJC/SJC-2019|Serre St Cassien]]&lt;br /&gt;
 | DECAMPS	Marceau, LANDI	Estelle, BONASPETTI	GIULIA&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/5/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Projet FICHA - tri sélectif connecté]]&lt;br /&gt;
 | SCHANEN	Loïc, VINCENT	Maxence, VANDAL	Jade&lt;br /&gt;
 | Sylvain Toru&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/6/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Dataviz de la qualité de l&#039;air]]&lt;br /&gt;
 | ZARCOS 	Paul, ZHENG	Jian, REYMOND	Estelle&lt;br /&gt;
 | Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/7/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]]&lt;br /&gt;
 | SERRE	Ancelin, BOUVIER	Baptiste, WYKLAND	Damien&lt;br /&gt;
 | Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/8/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]]&lt;br /&gt;
 | THOMAS	Antoine, RIVOIRE	Antoine, DENIS	Guillaume&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/9/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | DUMENIL	Antoine, BETEND	Baptiste, JAN 	Léo&lt;br /&gt;
 | Anne-Laure Finkel, Tim Lepage, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/10/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Interface de visualisation mobile du projet e-Tree]]&lt;br /&gt;
 | SOLVERY	Tom, SALA	Ergi, DUMAX-VORZET	Mathieu&lt;br /&gt;
 | Anne Delaballe, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/11/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[OpenHAB UPnP DCS 2018]]&lt;br /&gt;
 | VARENNE	Rémi, TRESTOUR	Grégory, SOUCHON	Loïc&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/12/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]]&lt;br /&gt;
 | LORDEY	Maxime, LATTARD	Alexis, GILBERT-COLLET	Bertrand&lt;br /&gt;
 | Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/13/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]]&lt;br /&gt;
 | REYGROBELLET 	Lucas, BRES 	Maxence, PELISSON	Antoine&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/14/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/15/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]]&lt;br /&gt;
 | DALAINE	Nathan, FONTFREYDE	Joachim, GAUTIER-PIGNONBLANC	Yann&lt;br /&gt;
 | Olivier Richard, Adrien Faure&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/16/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17&lt;br /&gt;
 | [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/17/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 18&lt;br /&gt;
 | [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]]&lt;br /&gt;
 | BADAT	Léya, CUAU	Victor, MASSON	Jérémy&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/18/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 19&lt;br /&gt;
 | [[generate_NIX_expression | Génération d&#039;expression NIX]]&lt;br /&gt;
 | CHABRE	Manon, DE ARAUJO 	Bastien, COSCIA	Daniel&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/19/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 20&lt;br /&gt;
 | [[Gestion des Polypoints]]&lt;br /&gt;
 | CASTANO	Nicolas, SIBUE	Quentin, LAPLANTE	Juliette&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/20/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 21&lt;br /&gt;
 | [[Smart Recruting]]&lt;br /&gt;
 | GUILLOT	Romain, ARNOUX	Thibaut, CHASSEGUET	Corentin&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/21/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 22&lt;br /&gt;
 | [[Aide aux handicaps]]&lt;br /&gt;
 | JALMIN	Hoël, ALACALI	Kadir uraz, MASTOURA	Iheb&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/22/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==INFO5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : [[user:Donsez | Didier Donsez]]&lt;br /&gt;
&lt;br /&gt;
Calendrier: Fin Janvier à Fin Mars 2019.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : Salle 249 de 11H30 a 12H30, Mercredi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Démarrage : A définir: Salle 251 de 8H30 a 11H00, Lundi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : 5 Mars, 9H00-11H30 (15 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  A définir : à cheval 27 et 28 Mars.&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 | [[PROJET-INFO5 1819 EDCampus | Fiche de suivi ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | Loris GENTILLON, Jordan JEAN, Enzo MOLION, Léo VALETTE&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[PROJET-1FO5_1819_CampusIoT|Fiche]] - [[PROJET-1FO5_1819_CampusIoT_journal|Journal]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-INFO5_Kiné_Connecté | Fiche]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-1FO5_1819_SkiLocator|Fiche]] - [[PROJET-1FO5_1819_SkiLocator/SRS|SRS]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | [[ PROJET-INFO5_Contributions_JHipster | Fiche ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Réserve&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* [[Sécurisation des données IoT avec des blockchains de consortium]] (Didier Donsez) --&amp;gt; commun avec CampusIoT et UGAChain&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2019/TP|PM2M]]==&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
# [http://www.opti-solar.com/french/ap_applications.fr.html |Interface contrôleur de charge batterie/PV]&lt;br /&gt;
# [[Sonotone à apprentissage profond]]&lt;br /&gt;
# [[StartAIR2]] (Nicolas Palix)&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;br /&gt;
# [[Parking Intelligent]]&lt;br /&gt;
# Frontend Web multi-utilisateur pour un jeu sérieux d&#039;entreprise : Didier Donsez, Stéphanie Diligent, Emmanuelle Tréhoust.&lt;br /&gt;
# Construction d&#039;un roadbook d&#039;ultratrail (mais aussi trek, randonnée, cyclisme, ...) à partir de traces GPX et des réseaux sociaux (Strava, Trace de Trail, ...): Didier Donsez&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf&amp;diff=45140</id>
		<title>File:EDCampus Mi Parcours CHARLOT CHANET.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf&amp;diff=45140"/>
		<updated>2019-03-05T08:13:27Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Présentation de mi-parcours du projet EDCampus en INFO 5 par MM. [[User:Servan.Charlot | CHARLOT Servan]] et [[User:Zoran.Chanet | CHANET Zoran]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf&amp;diff=45139</id>
		<title>File:EDCampus Mi Parcours CHARLOT CHANET.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf&amp;diff=45139"/>
		<updated>2019-03-05T08:12:17Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: Présentation de mi-parcours du projet EDCampus en INFO 5 par MM. CHARLOT Servan et CHANET Zoran&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Présentation de mi-parcours du projet EDCampus en INFO 5 par MM. CHARLOT Servan et CHANET Zoran&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45133</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45133"/>
		<updated>2019-03-04T09:00:07Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45132</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45132"/>
		<updated>2019-03-04T08:48:31Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45131</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45131"/>
		<updated>2019-03-04T08:39:07Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45130</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45130"/>
		<updated>2019-03-04T08:23:16Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Let%27s_Encrypt&amp;diff=45129</id>
		<title>Let&#039;s Encrypt</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Let%27s_Encrypt&amp;diff=45129"/>
		<updated>2019-03-04T08:22:42Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: Created page with &amp;quot;= Auteur =  CHANET Zoran  = Introduction = Cette page s&amp;#039;intéresse à la compréhension de Let&amp;#039;s Encrypt, puis présente un tutoriel simple d&amp;#039;utilisatio...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page s&#039;intéresse à la compréhension de Let&#039;s Encrypt, puis présente un tutoriel simple d&#039;utilisation de Let&#039;s Encrypt via le logiciel Certbot (dans le cas d&#039;un serveur Apache installé sur un système d&#039;exploitation Ubuntu. Pour d&#039;autres utilisations, visitez [https://certbot.eff.org/ le site du logiciel].&lt;br /&gt;
&lt;br /&gt;
= Let&#039;s Encrypt =&lt;br /&gt;
Let’s encrypt est une autorité mondiale de certification délivrant des certificats gratuits pour crypter les échanges HTTP, et donc passer de l’HTTP à l’HTTPS. Ces certificats doivent être placés à la racine de l’hôte, la mise en place de let’s encrypt peut donc nécessiter des droits SSH vers l’hôte. Afin de prouver que le demandeur de certificats possède bien le site, le protocole ACME est utilisé. Let’s encrypt encourage l’utilisation de Certbot pour une gestion simplifiée des certificats.&lt;br /&gt;
Les certificats délivrés par Let’s encrypt ont une validité de 90 jours. Il est donc nécessaire de les renouveler. Certbot propose un système de renouvellement automatique.&lt;br /&gt;
&lt;br /&gt;
= Certbot =&lt;br /&gt;
Ce tutoriel couvre l&#039;installation et l&#039;utilisation de Certbot dans le cas d&#039;un serveur Apache installé sur un système d&#039;exploitation Ubuntu. Les manipulations suivantes sont à faire sur le serveur. Il est donc nécessaire de pouvoir accéder au serveur et le modifier, par exemple par un accès SSH.&lt;br /&gt;
== Installation ==&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install software-properties-common&lt;br /&gt;
 sudo add-apt-repository universe&lt;br /&gt;
 sudo add-apt-repository ppa:certbot/certbot&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install certbot python-certbot-apache&lt;br /&gt;
&lt;br /&gt;
== Création du certificat ==&lt;br /&gt;
La commande suivante permet de générer le certificat et de configurer automatiquement une vhost Apache https utilisant ce certificat.&lt;br /&gt;
 sudo certbot --apache&lt;br /&gt;
Pour se contenter de générer le certificat (ce qui nécessite donc une configuration d&#039;Apache manuelle), le commande suivante peut être utilisée.&lt;br /&gt;
 sudo certbot --apache certonly&lt;br /&gt;
&lt;br /&gt;
== Test du renouvellement automatique ==&lt;br /&gt;
 sudo certbot renew --dry-run&lt;br /&gt;
&lt;br /&gt;
== Renouveler les certificats ==&lt;br /&gt;
Il faut créer une tâche de fond qui lance certbot renew.&amp;lt;br&amp;gt;&lt;br /&gt;
Exemple (tous les jours à midi et minuit) : &lt;br /&gt;
 0 0,12 * * * python -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;amp;&amp;amp; certbot renew&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Astuces =&lt;br /&gt;
* Apache ne supporte pas d&#039;appels à Listen qui se superposent (e.g. deux fois Listen 80)&lt;br /&gt;
* Il est nécessaire d&#039;activer le mod_ssl d’Apache&lt;br /&gt;
* Les connexions https se feront sur le port 443 (il faut donc une vhost qui reçoive sur ce port, et qui copie celle qui reçoit sur 80 tout en renseignant le certificat)&lt;br /&gt;
* Avoir plusieurs vhost avec le même nom de serveur peut créer des soucis (e.g. 500)&lt;br /&gt;
* [https://www.ssllabs.com/ssltest/analyze.html www.ssllabs.com/ssltest/analyze.html] permet de tester le certificat et l’accès au site&lt;br /&gt;
* Le succès de la création du certificat provoquera le message suivant (domain.name étant le nom de domaine pour lequel le certificat a été produit)&lt;br /&gt;
 domain.name&lt;br /&gt;
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
 Congratulations! You have successfully enabled https://domain.name&lt;br /&gt;
 &lt;br /&gt;
 You should test your configuration at:&lt;br /&gt;
 https://www.ssllabs.com/ssltest/analyze.html?d=domain.name&lt;br /&gt;
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;br /&gt;
 &lt;br /&gt;
 IMPORTANT NOTES:&lt;br /&gt;
  - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
    /etc/letsencrypt/live/domain.name/fullchain.pem&lt;br /&gt;
    Your key file has been saved at:&lt;br /&gt;
    /etc/letsencrypt/live/domain.name/privkey.pem&lt;br /&gt;
    Your cert will expire on xxxx-xx-xx. To obtain a new or tweaked&lt;br /&gt;
    version of this certificate in the future, simply run certbot again&lt;br /&gt;
    with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
    your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
  - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
 &lt;br /&gt;
    Donating to ISRG / Let&#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
    Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
Site de Let&#039;s Encrypt : [https://letsencrypt.org/ letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
Site de Certbot : [https://certbot.eff.org/ certbot.eff.org/]&lt;br /&gt;
&lt;br /&gt;
= Liens utiles =&lt;br /&gt;
Image pour l&#039;utilisation d&#039;Apache et Certbot avec [[Docker]] : [https://github.com/BirgerK/docker-apache-letsencrypt github.com/BirgerK/docker-apache-letsencrypt]&lt;br /&gt;
Informations sur la configuration d&#039;Apache pour tenir compte des certificats : [https://www.ssl247.fr/support/installer/apache www.ssl247.fr/support/installer/apache]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Thorntail&amp;diff=44909</id>
		<title>Thorntail</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Thorntail&amp;diff=44909"/>
		<updated>2019-02-11T08:53:45Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Mentions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://thorntail.io/&lt;br /&gt;
&lt;br /&gt;
Thorntail offers an innovative approach to packaging and running JavaEE applications by packaging them with just enough of the server runtime to &amp;quot;java -jar&amp;quot; your application. However, it&#039;s all much, much cooler than that ...&lt;br /&gt;
&lt;br /&gt;
https://github.com/thorntail&lt;br /&gt;
&lt;br /&gt;
= Mentions =&lt;br /&gt;
Une synthèse de cette technologie a été proposée pour le cours de [[VT2018|Veille Technologique et Stratégique]] : [[VT2018_Thorntail|Synthèse de la technologie Thorntail]] par [[User:Zoran.Chanet | Zoran CHANET]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Ordre_passages_soutenances_RICM4_2017_2018&amp;diff=44908</id>
		<title>Ordre passages soutenances RICM4 2017 2018</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Ordre_passages_soutenances_RICM4_2017_2018&amp;diff=44908"/>
		<updated>2019-02-11T08:52:56Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Ordre de passages avec horaires et dates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lieu ==&lt;br /&gt;
A Polytech&#039; la salle &#039;&#039;&#039;257&#039;&#039;&#039; le lundi 9 avril;&lt;br /&gt;
&lt;br /&gt;
== Ordre de passages avec horaires et dates ==&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2017-2018&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Horaire et date&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches]] (Angular 5)&lt;br /&gt;
 | BELGUENDOUZ Sekina, LARNICOL Titouan&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Dashboard| Fiche]] - [[RICM4_2017_2018_-_Dashboard/SRS|SRS]] - [[RICM4_2017_2018_-_Dashboard/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;09:00-09:22&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ESP32 et language D]]&lt;br /&gt;
 | MANGER Raphael, HOUBRON Adrian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_ESP32_D| Fiche]] - [[RICM4_2017_2018_-_ESP32_D/_SRS|SRS]] - [[RICM4_2017_2018_-_ESP32_D/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/4 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;09:25-09:47&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | LEPAGE Tim, SERGEANT Dimitri &lt;br /&gt;
 | Didier Donsez, Anne-Laure Finkel, Stéphanie Diligent&lt;br /&gt;
 | [[RICM4_2017_2018_-SeriousGame Polystar | Fiche]] - [[RICM4_2017_2018_- SeriousGame Polystar /_SRS|SRS]] - [[RICM4_2017_2018_- SeriousGame Polystar /UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/5 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;09:50-10:12&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.1&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | TERRIER Bastien, GROS-DAILLON Hugo &lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeam_7.1| Fiche]] - [[RICM4_2017_2018_-_UltraTeam_7.1/_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeam_7.1/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.1 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;10:15-10:37&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.2&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | MOLION Enzo, VALETTE Léo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeamMV| Fiche]] - [[RICM4_2017_2018_-_UltraTeamMV_:_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeamMV_:_UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;10:40-11:02&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | Projet [[Réseau Social LoRa]] avec des pods [[ESP32-LoRa]]&lt;br /&gt;
 | VEGREVILLE Thibaud, GENTILLON Loris, ZHENG Jian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Réseau_Social_LoRa| Fiche]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/_SRS|SRS]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/8 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;11:05-11:27&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Ruche connectée LoRa]] &lt;br /&gt;
 | BESNIER Benjamin, LÉVESQUE Théo, WEILL William&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Ruche_Connectee_| Fiche]] - [[RICM4_2017_2018_-_Ruche_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Ruche_Connectee/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/10 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;11:30-11:52&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Serres connectées]]&lt;br /&gt;
 | BESNARD Guillaume, DEPRIESTER Timothée&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Serre_Connectee| Fiche]] - [[RICM4_2017_2018_-_Serre_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Serre_Connecte/UML | UML]] - [[RICM4_2017_2018_-_Serre_Connecte/Schedule | Schedule]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/11 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;11:55-12:17&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[I-Greenhouse]] : [[Serre connectée aquaponie]] &lt;br /&gt;
 | SURIER GAROFALO Aurélien, FERREIRA Joffrey, OZENDA Thomas&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_IGreenHouse| Fiche]] - [[RICM4_2017_2018_-_IGreenHouse_/_SRS|SRS]] - [[IGreenHouse/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/12 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14:10-14:32&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.1&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | DEVOS Xavier, LAFRASSE Cédric&lt;br /&gt;
 | J. Maisonnasse, Germain Lemasson, Bastien Scher&lt;br /&gt;
 | [[RICM4_2017_2018_-_RobAIR17-1| Fiche]] - [[RICM4_2017_2018_-_RobAIRDL/_SRS|SRS]] - [[RICM4_2017_2018_-_RobAIRDL/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.1 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14:35-14:57&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Challenge OpenCity]]&lt;br /&gt;
 | BOUCHERIMA Amina, FOMBARON Quentin&lt;br /&gt;
 | Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_OpenCity| Fiche]] - [[RICM4_2017_2018_-_OpenCity/_SRS|SRS]] - [[RICM4_2017_2018_-_OpenCity/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/6 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15:00-15:22&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | Connected Shop (avec [[Eclipse SmartHome]])&lt;br /&gt;
 | CUZIN Florian, ECHEVET Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/15 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15:25-15:47&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Deploiment Nucleo | Déploiement sécurisé et sans fil pour carte Nucleo]]&lt;br /&gt;
 | [[User:Zoran.Chanet | CHANET Zoran]], [[User:Servan.Charlot | CHARLOT Servan]]&lt;br /&gt;
 | Olivier Richard, Sylain Toru&lt;br /&gt;
 | [[RICM4_2017_2018_-_Nucleo | Fiche]] - [[RICM4_2017_2018_-_Nucleo/_SRS|SRS]] - [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/16 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15:50-16:12&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Chatbot pour borne d&#039;accueil handicap]]&lt;br /&gt;
 | AUCLAIR-CORDAT Julien, BAMBA Samuel&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco et Jérôme Maisonnasse &lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/14 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16:15-16:37&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | Projet &amp;quot;Plateforme de mise en relation pour les entrepreneurs sociaux&amp;quot;&lt;br /&gt;
 | AUBERT Vincent, COURTIAL Julien&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_Entrepreneur_AUBERT_COURTIAL/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/13 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16:40-17:02&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.2&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | JEAN Jordan, EZ-ZINE Najwa&lt;br /&gt;
 | J. Maisonnasse, Germain Lemasson, Bastien Scher&lt;br /&gt;
 | [[RICM4_2017_2018_-_robair2| Fiche]] - [[RICM4_2017_2018_-_robair2/_SRS|SRS]] - [[RICM4_2017_2018_-_robair2/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;17:05-17:27&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Ordre_passages_mi_parcours_RICM4_2017_2018&amp;diff=44907</id>
		<title>Ordre passages mi parcours RICM4 2017 2018</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Ordre_passages_mi_parcours_RICM4_2017_2018&amp;diff=44907"/>
		<updated>2019-02-11T08:51:39Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Ordre de passages avec horaires et dates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lieux ==&lt;br /&gt;
A Polytech&#039; la salle &#039;&#039;&#039;257&#039;&#039;&#039; le lundi et la salle &#039;&#039;&#039;11&#039;&#039;&#039; le mardi;&lt;br /&gt;
&lt;br /&gt;
== Ordre de passages avec horaires et dates ==&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2017-2018&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Horaire et date&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches]] (Angular 5)&lt;br /&gt;
 | BELGUENDOUZ Sekina, LARNICOL Titouan&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Dashboard| Fiche]] - [[RICM4_2017_2018_-_Dashboard/_SRS|SRS]] - [[RICM4_2017_2018_-_Dashboard/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h30-14h40 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ESP32 et language D]]&lt;br /&gt;
 | MANGER Raphael, HOUBRON Adrian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_ESP32_D| Fiche]] - [[RICM4_2017_2018_-_ESP32_D/_SRS|SRS]] - [[RICM4_2017_2018_-_ESP32_D/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/4 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h42-14h52 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | LEPAGE Tim, SERGEANT Dimitri &lt;br /&gt;
 | Didier Donsez, Anne-Laure Finkel, Stéphanie Diligent&lt;br /&gt;
 | [[RICM4_2017_2018_-SeriousGame Polystar | Fiche]] - [[RICM4_2017_2018_- SeriousGame Polystar /_SRS|SRS]] - [[RICM4_2017_2018_- SeriousGame Polystar /UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/5 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h54-15h04 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Challenge OpenCity]]&lt;br /&gt;
 | BOUCHERIMA Amina, FOMBARON Quentin&lt;br /&gt;
 | Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_OpenCity| Fiche]] - [[RICM4_2017_2018_-_OpenCity/_SRS|SRS]] - [[RICM4_2017_2018_-_OpenCity/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/6 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15h06-15h16 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.1&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | TERRIER Bastien, GROS-DAILLON Hugo &lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeam_7.1| Fiche]] - [[RICM4_2017_2018_-_UltraTeam_7.1/_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeam_7.1/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.1 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15h18-15h28 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.2&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | MOLION Enzo, VALETTE Léo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeamMV| Fiche]] - [[RICM4_2017_2018_-_UltraTeamMV_:_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeamMV_:_UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15h30-15h40 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | Projet [[Réseau Social LoRa]] avec des pods [[ESP32-LoRa]]&lt;br /&gt;
 | VEGREVILLE Thibaud, GENTILLON Loris, ZHENG Jian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Réseau_Social_LoRa| Fiche]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/_SRS|SRS]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/8 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15h42-15h52 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Ruche connectée LoRa]] &lt;br /&gt;
 | BESNIER Benjamin, LÉVESQUE Théo, WEILL William&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Ruche_Connectee_| Fiche]] - [[RICM4_2017_2018_-_Ruche_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Ruche_Connectee/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/10 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;15h54-16h04 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Serres connectées]]&lt;br /&gt;
 | BESNARD Guillaume, DEPRIESTER Timothée&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Serre_Connectee| Fiche]] - [[RICM4_2017_2018_-_Serre_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Serre_Connecte/UML | UML]] - [[RICM4_2017_2018_-_Serre_Connecte/Schedule | Schedule]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/11 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16h06-16h16 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[I-Greenhouse]] : [[Serre connectée aquaponie]] &lt;br /&gt;
 | SURIER GAROFALO Aurélien, FERREIRA Joffrey, OZENDA Thomas&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_IGreenHouse| Fiche]] - [[RICM4_2017_2018_-_IGreenHouse_/_SRS|SRS]] - [[IGreenHouse/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/12 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16h18-16h28 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | Projet &amp;quot;Plateforme de mise en relation pour les entrepreneurs sociaux&amp;quot;&lt;br /&gt;
 | AUBERT Vincent, COURTIAL Julien&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_Entrepreneur_AUBERT_COURTIAL/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/13 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16h30-16h40 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Chatbot pour borne d&#039;accueil handicap]]&lt;br /&gt;
 | AUCLAIR-CORDAT Julien, BAMBA Samuel&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco et Jérôme Maisonnasse &lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/14 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;16h42-16h52 Lundi 12/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | Connected Shop (avec [[Eclipse SmartHome]])&lt;br /&gt;
 | CUZIN Florian, ECHEVET Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/15 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h00-14h10 Mardi 13/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Deploiment Nucleo | Déploiement sécurisé et sans fil pour carte Nucleo]]&lt;br /&gt;
 | [[User:Zoran.Chanet | CHANET Zoran]], [[User:Servan.Charlot | CHARLOT Servan]]&lt;br /&gt;
 | Olivier Richard, Sylain Toru&lt;br /&gt;
 | [[RICM4_2017_2018_-_Nucleo | Fiche]] - [[RICM4_2017_2018_-_Nucleo/_SRS|SRS]] - [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/16 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h12-14h22 Mardi 13/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.1&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | DEVOS Xavier, LAFRASSE Cédric&lt;br /&gt;
 | J. Maisonnasse, Germain Lemasson, Bastien Scher&lt;br /&gt;
 | [[RICM4_2017_2018_-_RobAIR17-1| Fiche]] - [[RICM4_2017_2018_-_RobAIRDL/_SRS|SRS]] - [[RICM4_2017_2018_-_RobAIRDL/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.1 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h24-14h34 Mardi 13/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.2&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | JEAN Jordan, EZ-ZINE Najwa&lt;br /&gt;
 | J. Maisonnasse, Germain Lemasson, Bastien Scher&lt;br /&gt;
 | [[RICM4_2017_2018_-_robair2| Fiche]] - [[RICM4_2017_2018_-_robair2/_SRS|SRS]] - [[RICM4_2017_2018_-_robair2/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.2 gitlab]&lt;br /&gt;
 | &#039;&#039;&#039;14h36-14h46 Mardi 13/03&#039;&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=44906</id>
		<title>Projets 2018-2019</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=44906"/>
		<updated>2019-02-11T08:50:43Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2017-2018]] | [[Projets]] | [[Projets 2019-2020]]&amp;gt;&amp;gt;&lt;br /&gt;
=INFO=&lt;br /&gt;
==INFO3==&lt;br /&gt;
&lt;br /&gt;
==INFO4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: &#039;&#039;&#039;21/01/19 à 14h30&#039;&#039;&#039;&lt;br /&gt;
* Soutenance à mi-parcours: A définir&lt;br /&gt;
* Soutenance: A définir&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par info4_2018_2019. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Chaque projet doit avoir &#039;&#039;&#039;aux moins 2 dépôts git&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Un pour les documents&#039;&#039;&#039; demandés rapport, présentation de pré-soutenante, de soutenance, flyer. &#039;&#039;&#039;Il sera appelé documents.&#039;&#039;&#039;&lt;br /&gt;
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. &lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;La note obtenue&#039;&#039;&#039; tiendra compte du &#039;&#039;&#039;nombre et de la qualité des commits&#039;&#039;&#039; observé dans &#039;&#039;&#039;vos dépots git et la branche master&#039;&#039;&#039; (or depot documents). La qualité comprend l&#039;intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n&#039;est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).&lt;br /&gt;
&lt;br /&gt;
* Il est fortement conseillé de suivre un &#039;&#039;&#039;développement incrémental&#039;&#039;&#039; qui permette d&#039;avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d&#039;une succession de &#039;&#039;&#039;démonstrateurs présentables séparément&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Vous devez faire aussi des &#039;&#039;&#039;schémas d&#039;architectures générales et/ou spéficiques, des diagrammes de séquence&#039;&#039;&#039;, et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.&lt;br /&gt;
&lt;br /&gt;
===Propositions de projets===&lt;br /&gt;
&lt;br /&gt;
* [[LoRaGAN]] : LoRa in the Space, Didier Donsez avec le [https://www.csug.fr/ CSUG] (S)&lt;br /&gt;
* [[LoRaRescueBalloon]], Didier Donsez avec le [https://www.csug.fr/ CSUG] et des élèves IESE 3 et 4. (S)&lt;br /&gt;
* Agriculture connectée à [[ASAC/AP|Polytech]] et à [[ASAC/SJC|St Cassien]] en partenariat avec les projets collectifs IESE/MAT&lt;br /&gt;
*# [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]] - Projet embarqué sur STM32 ou RPi3 + LoRa (S)&lt;br /&gt;
*# [[ASAC/AP/AP-2019-2|Serre Polytech - Kiosk]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
*# [[ASAC/SJC/SJC-2019|Serre St Cassien]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
* [[Projet FICHA - tri sélectif connecté]], Sylvain Toru.&lt;br /&gt;
* [[Dataviz de la qualité de l&#039;air]], Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT] (M)&lt;br /&gt;
* [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]], Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier] (M)&lt;br /&gt;
* [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Serious game multi-joueurs pour tables tactiles en réseau]] : Anne-Laure Finkel, Tim Lepage, Didier Donsez. (S&amp;amp;M)&lt;br /&gt;
* [[Interface de visualisation mobile du projet e-Tree]]: Anne Delaballe, Didier Donsez. (M)&lt;br /&gt;
* [[OpenHAB UPnP DCS 2018]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]], Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
* [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]], Olivier Richard (S)&lt;br /&gt;
* [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]], Olivier Richard (S)&lt;br /&gt;
* [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]], Olivier Richard (S)&lt;br /&gt;
* [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]], Olivier Richard (S)&lt;br /&gt;
* [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]], Olivier Richard (S&amp;amp;M)&lt;br /&gt;
* [[generate_NIX_expression | Génération d&#039;expression NIX]] (S)&lt;br /&gt;
 &lt;br /&gt;
Non prioritaire&lt;br /&gt;
* [[Précarité numérique]], Didier Donsez, avec [https://disrupt-campus.univ-grenoble-alpes.fr/ Disrupt Campus]&lt;br /&gt;
* [[Covoiturage Solidaire]], Didier Donsez&lt;br /&gt;
* [[CannonBall de voitures autonomes 2018]]&lt;br /&gt;
* Intégration de [[Walabot]] à [[RobAIR]]&lt;br /&gt;
&lt;br /&gt;
==== Affectation  ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO4 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN]]&lt;br /&gt;
 | VINCENT	Mathieu, SAUTON	Tanguy, ANCRENAZ	Ariane&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/1/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[LoRaRescueBalloon]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/2/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/3/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ASAC/AP/AP-2019-2|Serre Polytech]]&lt;br /&gt;
 | RAKOTOARIMALALA 	Andriamahatratra, BARDOU	Eva, GAUFFIER	Léni&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/4/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ASAC/SJC/SJC-2019|Serre St Cassien]]&lt;br /&gt;
 | DECAMPS	Marceau, LANDI	Estelle, BONASPETTI	GIULIA&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/5/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Projet FICHA - tri sélectif connecté]]&lt;br /&gt;
 | SCHANEN	Loïc, VINCENT	Maxence, VANDAL	Jade&lt;br /&gt;
 | Sylvain Toru&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/6/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Dataviz de la qualité de l&#039;air]]&lt;br /&gt;
 | ZARCOS 	Paul, ZHENG	Jian, REYMOND	Estelle&lt;br /&gt;
 | Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/7/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]]&lt;br /&gt;
 | SERRE	Ancelin, BOUVIER	Baptiste, WYKLAND	Damien&lt;br /&gt;
 | Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/8/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]]&lt;br /&gt;
 | THOMAS	Antoine, RIVOIRE	Antoine, DENIS	Guillaume&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/9/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | DUMENIL	Antoine, BETEND	Baptiste, JAN 	Léo&lt;br /&gt;
 | Anne-Laure Finkel, Tim Lepage, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/10/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Interface de visualisation mobile du projet e-Tree]]&lt;br /&gt;
 | SOLVERY	Tom, SALA	Ergi, DUMAX-VORZET	Mathieu&lt;br /&gt;
 | Anne Delaballe, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/11/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[OpenHAB UPnP DCS 2018]]&lt;br /&gt;
 | VARENNE	Rémi, TRESTOUR	Grégory, SOUCHON	Loïc&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/12/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]]&lt;br /&gt;
 | LORDEY	Maxime, LATTARD	Alexis, GILBERT-COLLET	Bertrand&lt;br /&gt;
 | Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/13/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]]&lt;br /&gt;
 | REYGROBELLET 	Lucas, BRES 	Maxence, PELISSON	Antoine&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/14/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/15/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]]&lt;br /&gt;
 | DALAINE	Nathan, FONTFREYDE	Joachim, GAUTIER-PIGNONBLANC	Yann&lt;br /&gt;
 | Olivier Richard, Adrien Faure&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/16/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17&lt;br /&gt;
 | [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/17/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 18&lt;br /&gt;
 | [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]]&lt;br /&gt;
 | BADAT	Léya, CUAU	Victor, MASSON	Jérémy&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/18/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 19&lt;br /&gt;
 | [[generate_NIX_expression | Génération d&#039;expression NIX]]&lt;br /&gt;
 | CHABRE	Manon, DE ARAUJO 	Bastien, COSCIA	Daniel&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/19/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 20&lt;br /&gt;
 | [[Gestion des Polypoints]]&lt;br /&gt;
 | CASTANO	Nicolas, SIBUE	Quentin, LAPLANTE	Juliette&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/20/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 21&lt;br /&gt;
 | [[Smart Recruting]]&lt;br /&gt;
 | GUILLOT	Romain, ARNOUX	Thibaut, CHASSEGUET	Corentin&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/21/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 22&lt;br /&gt;
 | [[Aide aux handicaps]]&lt;br /&gt;
 | JALMIN	Hoël, ALACALI	Kadir uraz, MASTOURA	Iheb&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/22/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==INFO5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : [[user:Donsez | Didier Donsez]]&lt;br /&gt;
&lt;br /&gt;
Calendrier: Fin Janvier à Mi Mars 2019.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : Salle 249 de 11H30 a 12H30, Mercredi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Démarrage : A définir: Salle 251 de 8H30 a 11H00, Lundi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : A définir, 8H00-11H00 (30 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  A définir&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Planning soutenances mi-parcours ====&lt;br /&gt;
&lt;br /&gt;
==== Planning soutenances finales ====&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 | [[PROJET-INFO5 1819 EDCampus | Fiche de suivi ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | Loris GENTILLON, Jordan JEAN, Enzo MOLION, Léo VALETTE&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[PROJET-1FO5_1819_CampusIoT|Fiche]] - [[PROJET-1FO5_1819_CampusIoT/SRS|SRS]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-INFO5_Kiné_Connecté | Fiche]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-1FO5_1819_SkiLocator|Fiche]] - [[PROJET-1FO5_1819_SkiLocator/SRS|SRS]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | [[ PROJET-INFO5_Contributions_JHipster | Fiche ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Réserve&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* [[Sécurisation des données IoT avec des blockchains de consortium]] (Didier Donsez) --&amp;gt; commun avec CampusIoT et UGAChain&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2019/TP|PM2M]]==&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
# [http://www.opti-solar.com/french/ap_applications.fr.html |Interface contrôleur de charge batterie/PV]&lt;br /&gt;
# [[Sonotone à apprentissage profond]]&lt;br /&gt;
# [[StartAIR2]] (Nicolas Palix)&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;br /&gt;
# [[Parking Intelligent]]&lt;br /&gt;
# Frontend Web multi-utilisateur pour un jeu sérieux d&#039;entreprise : Didier Donsez, Stéphanie Diligent, Emmanuelle Tréhoust.&lt;br /&gt;
# Construction d&#039;un roadbook d&#039;ultratrail (mais aussi trek, randonnée, cyclisme, ...) à partir de traces GPX et des réseaux sociaux (Strava, Trace de Trail, ...): Didier Donsez&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=RICM4_2017_2018_-_Nucleo/_SRS&amp;diff=44905</id>
		<title>RICM4 2017 2018 - Nucleo/ SRS</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=RICM4_2017_2018_-_Nucleo/_SRS&amp;diff=44905"/>
		<updated>2019-02-11T08:49:55Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The document provides a template of the Software Requirements Specification (SRS). It is inspired of the IEEE/ANSI 830-1998 Standard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Document History&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Version&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Authors&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Description&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validator&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Validation Date&lt;br /&gt;
 |-&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot; |&lt;br /&gt;
 | 0.1.0&lt;br /&gt;
 | 2018&lt;br /&gt;
 | [[User:Zoran.Chanet | CHANET Zoran]] - [[User:Servan.Charlot | CHARLOT Servan]]&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
 | TBC&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=1.   Introduction=&lt;br /&gt;
==1.1   Purpose of the requirements document==&lt;br /&gt;
This Software Requirements Specification document explains the ins and outs of the Nucleo project, along with the requirements and specifications.&lt;br /&gt;
&lt;br /&gt;
==1.2   Scope of the product==&lt;br /&gt;
This product is dedicated to whoever uses a Nucleo card and needs or want to remotely reprogram it.&lt;br /&gt;
&lt;br /&gt;
As it is redistributable, this product may be used for personal or industrial use.&lt;br /&gt;
&lt;br /&gt;
==1.3   Definitions, acronyms and abbreviations==&lt;br /&gt;
Nucleo : for this project, a STM32F446 Nucleo-64 card will be used&lt;br /&gt;
&lt;br /&gt;
Arduino/Olimexino : for this project, an olimexino-328 will be used&lt;br /&gt;
&lt;br /&gt;
Wifi : for this project, an esp8266ex (or an ESP1-12 WEMOS) chipset will be used&lt;br /&gt;
&lt;br /&gt;
SRS :  Software Requirements Specification&lt;br /&gt;
&lt;br /&gt;
==1.4   References==&lt;br /&gt;
* [[Projets_2017-2018 | Projects list]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo | Fiche]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
* [[Deploiment_Nucleo | Documentation]]&lt;br /&gt;
&lt;br /&gt;
==1.5   Overview of the remainder of the document==&lt;br /&gt;
The remainder of this SRS clarifies the requirements of the Nucleo project.&lt;br /&gt;
&lt;br /&gt;
=2.   General description=&lt;br /&gt;
==2.1   Product perspective==&lt;br /&gt;
Redistributable software allowing to dynamically remotely reprogram a Nucleo card through Wifi with the use of an ESP card.&lt;br /&gt;
&lt;br /&gt;
==2.2   Product functions==&lt;br /&gt;
Remotely reprogram a Nucleo card through Wifi with the use of an ESP card&lt;br /&gt;
&lt;br /&gt;
==2.3   User characteristics==&lt;br /&gt;
Both personal and industrial use.&lt;br /&gt;
The product may be useful for an user who would like to reprogram its Nucleo card from a near remote location (because it may be inaccessible for some reasons).&lt;br /&gt;
&lt;br /&gt;
==2.4   General constraints==&lt;br /&gt;
- Security (not anyone should reprogram the card)&lt;br /&gt;
&lt;br /&gt;
- Reliability (what happens if the connexion stops while sending the new software ?)&lt;br /&gt;
&lt;br /&gt;
==2.5   Assumptions and dependencies==&lt;br /&gt;
It is needed to have an ESP8266EX plugged on a ST32F446 Nucleo (for the flashing purposes), and the computer who will send the binary through wifi.&lt;br /&gt;
&lt;br /&gt;
=3.Specific requirements, covering functional, non-functional and interface requirements=&lt;br /&gt;
* document external interfaces,&lt;br /&gt;
* describe system functionality and performance&lt;br /&gt;
* specify logical database requirements,&lt;br /&gt;
* design constraints,&lt;br /&gt;
* emergent system properties and quality characteristics.&lt;br /&gt;
&lt;br /&gt;
==3.1 Requirement | Reprogramming==&lt;br /&gt;
&#039;&#039;&#039;Function&#039;&#039;&#039;: Reprogramming the Nucleo via Wifi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;: Sending a compiled program to the Nucleo&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Inputs&#039;&#039;&#039;: Binary file (compiled program)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Source&#039;&#039;&#039;: User&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Outputs&#039;&#039;&#039;: None&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Destination&#039;&#039;&#039;: The ESP then the Nucleo card&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action&#039;&#039;&#039;: Reprograms the Nucleo card&lt;br /&gt;
&lt;br /&gt;
Natural language sentences (with MUST, MAY, SHALL)&lt;br /&gt;
* The file sent MUST be a compiled program&lt;br /&gt;
* The Nucleo card SHALL reprogram itself with the file (implying it has the proper software installed)&lt;br /&gt;
* In case of malfunction, reset or shutdown during the transfer of the file, the Nucleo card MUST ignore the operation&lt;br /&gt;
&lt;br /&gt;
Graphical Notations : [[RICM4_2017_2018_-_Nucleo/UML | UML diagram and Sequences diagram]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non functional requirements&#039;&#039;&#039;: None.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pre-condition&#039;&#039;&#039;: The ESP must display its wifi network and the user must be connected to it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Post-condition&#039;&#039;&#039;: None.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Side-effects&#039;&#039;&#039;: None.&lt;br /&gt;
&lt;br /&gt;
=4. Product evolution=&lt;br /&gt;
An interesting evolution for the project could be the development of a simplified user interface to connect to the ESP and send the binary to it.&lt;br /&gt;
&lt;br /&gt;
=5. Appendices=&lt;br /&gt;
&#039;&#039;&#039;SRS related documents used to establish this page:&#039;&#039;&#039;&lt;br /&gt;
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx&lt;br /&gt;
* http://en.wikipedia.org/wiki/Software_requirements_specification&lt;br /&gt;
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[Projets_2017-2018 | Projects list]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo | Fiche]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
* [[Deploiment_Nucleo | Documentation]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2018&amp;diff=44904</id>
		<title>VT2018</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2018&amp;diff=44904"/>
		<updated>2019-02-11T08:48:55Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[VT2017|&amp;lt;&amp;lt; Etudes 2017]] [[VT|Sommaire]] [[VT2019|Etudes 2019 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l&#039;éthique de l&#039;ingénieur. Le directeur d&#039;école peut demander à votre traduction devant la commission disciplinaire de l&#039;université. La sanction peut aller jusqu’à une interdiction d&#039;inscription dans les établissements de l&#039;enseignement supérieur français pendant plusieurs années : Le jeu, en vaut-il la chandelle ?&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
=Affectation des sujets=&lt;br /&gt;
[[File:AffectationSujetsVT2018.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Planning=&lt;br /&gt;
* Vendredi 7/9: présentation et choix des sujets&lt;br /&gt;
[[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]&lt;br /&gt;
* Lundi 12/11: (GPB,DD en visio)&lt;br /&gt;
** 1: Julien COURTIAL - Apollo 2.0, [[VT2018_Apollo|Fiche de synthèse]], [[Media:Apollo_Auto_Platform.pdf|Transparents]], [https://github.com/ApolloAuto/apollo/tree/master/docs/demo_guide Démo]&lt;br /&gt;
** 2: Sekina BELGUENDOUZ - Service Mesh, [[VT2018_Service_Mesh|Fiche de synthèse]], [[Media:VT2018_Service_Mesh_presentation.pdf|Transparents]], [[VT2018_Service_Mesh_Demo|Démo avec Istrio]] (Reporté)&lt;br /&gt;
** 3: [[User:Servan.Charlot | Servan CHARLOT]] - [[OpenWhisk]] : [[VT2018_OpenWhisk|Fiche de synthèse]], [[Media:VT2018_OpenWhisk_presentation.pdf|Transparents]], [[VT2018_OpenWhisk_Demo|Démo]]&lt;br /&gt;
** 4: Théo ECHEVET - Fabric8, [[VT2018_fabric8|Fiche de synthèse]], [[Media:Fabric8_Pres_Theo_Echevet.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 5: Bastien TERRIER - [[Performance_Monitoring|Performance Monitoring]], [[VT2018_Performance_Monitoring|Fiche de synthèse]], [[Media:VT2018_Performance_Monitoring_presentation.pdf|Transparents]], [[VT2018_Performance_Monitoring_Demo|Démo]]&lt;br /&gt;
* Lundi 19/11: (GPB,DD en visio)&lt;br /&gt;
** 6: Samuel BAMBA - DevSecOps, [[VT2018_DevSecOps|Fiche de synthèse]], [[Media:VT2018_DevSecOps.pdf|Transparents]], [https://github.com/CoolerVoid/codewarrior Démo]&lt;br /&gt;
** 7: [[User:Zoran.Chanet | Zoran CHANET]] - [[Wildfly_Swarm|&amp;lt;strike&amp;gt;Wildfly Swarm&amp;lt;/strike&amp;gt;]] [[Thorntail|Thorntail]], [[VT2018_Thorntail|Fiche de synthèse]], [[Media:VT2018_Thorntail_presentation.pdf|Transparents]], [[VT2018_Thorntail_Demo|Démo]] (reporté)&lt;br /&gt;
** 8: Thibaud VEGREVILLE, Techniques et technologies de &amp;quot;Lag Compensation&amp;quot; dans les jeux en ligne, [[VT2018_Lag_Compensation|Fiche de synthèse]], [[Media:Lag_Compensation_in_Games.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 9: Hugo GROS-DAILLON - [[ActionHero.js]], [[VT2018_ActionHero|Fiche de synthèse]], [[Media:VT2018ActionHero.pdf|Transparents]], [https://github.com/HugoSecteur4/DemoVT2018ActionHero/tree/master/ActionHero Démo]&lt;br /&gt;
** 10: Vincent AUBERT - Apache MXNet : Demo avec Intel Movidius, [[VT2018_Apache_Mxnet|Fiche de synthèse]], [[Media:VT2018_Mxnet_presentation.pdf|Transparents]], [[VT2018_Mxnet_Demo|Démo]]&lt;br /&gt;
* Lundi 10/12: (GPB+DD)&lt;br /&gt;
** 11: Joffrey FERREIRA - Keycloak, [[VT2018_Keycloak|Fiche de synthèse]], [[Media:VT2018_Keycloak_presentation.pdf|Transparents]], [[VT2018_Keycloak_Demo|Démo]]&lt;br /&gt;
** 12: Loris GENTILLON - Gceasy, [[VT2018_GCeasy-synthese|Fiche de synthèse]], [[Media:GCeasy_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]] &lt;br /&gt;
** 13: Thomas OZENDA - Zipkin et Daper, [[VT2018_Zipkin|Fiche de synthèse]], [[Media:VT2018_Zipkin_presentation.pdf|Transparents]], [[VT2018_Zipkin_Demo|Démo]]&lt;br /&gt;
** 14: Aurélien SURIER - CloudFoundry, [[VT2018_CloudFoundry|Fiche de synthèse]], [[Media:VT2018_CloudFoundry_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]] (reporté) &lt;br /&gt;
** 15: Enzo MOLION - Web3j, [[VT2018_Web3j|Fiche de synthèse]], [[Media:Presentation_Web3j.pdf|Transparents]], [https://air.imag.fr/index.php/VT2018_Web3j#D.C3.A9monstration Démo]&lt;br /&gt;
* Lundi 17/12: (GPB)&lt;br /&gt;
** 16: Quentin FOMBRAON - Web Assembly, [[VT2018_WebAssembly|Fiche de synthèse]], [[Media:VT2018_WebAssembly_presentation.pdf|Transparents]], [[VT2018_WebAssembly#D.C3.A9monstration|Démo]]&lt;br /&gt;
** 17: Timothée DEPRIESTER - Kafka Stream, [[VT2018_Kafka|Fiche de synthèse]], [[Media:VT2018_kafka_presentation.pdf|Transparents]], [[VT2018_kafka_Demo|Démo]]&lt;br /&gt;
** 18: Benjamin BESNIER - Apache Beam, [[VT2018_ApacheBeam|Fiche de synthèse]], [[Media:VT2018_ApacheBeam_presentation.pdf|Transparents]], [[VT2018_ApacheBeam#Demonstration|Démo]]&lt;br /&gt;
** 19: Théo LEVESQUE - OpenShift, [[VT2018_OpenShift|Fiche de synthèse]], [[Media:VT2018_OpenShift.pdf|Transparents]], [[VT2018_OpenShift#D.C3.A9monstration|Démo]]&lt;br /&gt;
** 20: William WEILL - CMS, [[VT2018_CrafterCMS|Fiche de synthèse]], [[Media:VT2018_CrafterCMS.pdf|Transparents]], [[VT2018_CrafterCMS#D.C3.A9monstration|Démo]]&lt;br /&gt;
* Lundi 07/01/2019: (GPB+DD)&lt;br /&gt;
** 21: Tim LEPAGE - Moby, [[VT2018_Moby|Fiche de synthèse]], [[Media:VT2018_Moby_presentation.pdf|Transparents]], [[VT2018_Moby_Demo|Démo]]&lt;br /&gt;
** 22: Cédric LAFRASSE - SIG, [[VT2018_SIG|Fiche de synthèse]], [[Media:VT2018_SIG_presentation.pdf|Transparents]], [[VT2018_SIG#Demonstration|Démo]]&lt;br /&gt;
** 23: Léo VALETTE - Architectures de processeurs pour le Deep Learning (NPU): Démo de l&#039;Intel Movidius, , [[VT2018_NPU|Fiche de synthèse]], [[Media:VT2018_NPU_presentation.pdf|Transparents]], [[VT2018_NPU_Demo|Démo]]&lt;br /&gt;
** 24: Florian CUZIN - Hazelcast IMDG, [[VT2018_Hazelcast_IMDG|Fiche de synthèse]], [[Media:Hazelcast_IMDG_Presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 25: Raphael MANGER - Apache Solr, [[VT2018_Apache_Solr|Fiche de synthèse]], [[Media:Apache_Solr.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
* Lundi 14/01/2019: (GPD+DD)&lt;br /&gt;
** 26: Amina BOUCHERIMA - Content delivery networks, [[VT2018_CDN|Fiche de synthèse]], [[Media:VT2018_CDN_presentation.pdf|Transparents]], [[VT2018_CDN_Demo|Démo]]&lt;br /&gt;
** 27: Najwa EZ-ZINE - FIDO, [[VT2018_FIDO|Fiche de synthèse]], [[Media:VT2018FIDOUPLOAD.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 28: Sekina BELGUENDOUZ - Service Mesh, [[VT2018_Service_Mesh|Fiche de synthèse]], [[Media:VT2018_Service_Mesh_presentation.pdf|Transparents]], [https://medium.freecodecamp.org/jhipster-microservices-with-istio-service-mesh-on-kubernetes-a7d0158ba9a3 Démo avec Istio]&lt;br /&gt;
** 29: [[User:Zoran.Chanet | Zoran CHANET]] - [[Wildfly_Swarm|&amp;lt;strike&amp;gt;Wildfly Swarm&amp;lt;/strike&amp;gt;]] [[Thorntail|Thorntail]], [[VT2018_Thorntail|Fiche de synthèse]], [[Media:VT2018_Thorntail_presentation.pdf|Transparents]], [[VT2018_Thorntail_Demo|Démo]]&lt;br /&gt;
** 30: Aurélien SURIER - CloudFoundry, [[VT2018_CloudFoundry|Fiche de synthèse]], [[Media:VT2018_CloudFoundry_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2018&amp;diff=44903</id>
		<title>VT2018</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2018&amp;diff=44903"/>
		<updated>2019-02-11T08:48:15Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Planning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[VT2017|&amp;lt;&amp;lt; Etudes 2017]] [[VT|Sommaire]] [[VT2019|Etudes 2019 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: [[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif de cette UE est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un sondage (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
Remarque: Le [https://fr.wikipedia.org/wiki/Plagiat plagiat] est incompatible avec l&#039;éthique de l&#039;ingénieur. Le directeur d&#039;école peut demander à votre traduction devant la commission disciplinaire de l&#039;université. La sanction peut aller jusqu’à une interdiction d&#039;inscription dans les établissements de l&#039;enseignement supérieur français pendant plusieurs années : Le jeu, en vaut-il la chandelle ?&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
=Affectation des sujets=&lt;br /&gt;
[[File:AffectationSujetsVT2018.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Planning=&lt;br /&gt;
* Vendredi 7/9: présentation et choix des sujets&lt;br /&gt;
[[User:Gpbonneau|Georges-Pierre Bonneau]], [[User:Donsez|Didier Donsez]]&lt;br /&gt;
* Lundi 12/11: (GPB,DD en visio)&lt;br /&gt;
** 1: Julien COURTIAL - Apollo 2.0, [[VT2018_Apollo|Fiche de synthèse]], [[Media:Apollo_Auto_Platform.pdf|Transparents]], [https://github.com/ApolloAuto/apollo/tree/master/docs/demo_guide Démo]&lt;br /&gt;
** 2: Sekina BELGUENDOUZ - Service Mesh, [[VT2018_Service_Mesh|Fiche de synthèse]], [[Media:VT2018_Service_Mesh_presentation.pdf|Transparents]], [[VT2018_Service_Mesh_Demo|Démo avec Istrio]] (Reporté)&lt;br /&gt;
** 3: [[User:Servan.Charlot | Servan CHARLOT]] - [[OpenWhisk]] : [[VT2018_OpenWhisk|Fiche de synthèse]], [[Media:VT2018_OpenWhisk_presentation.pdf|Transparents]], [[VT2018_OpenWhisk_Demo|Démo]]&lt;br /&gt;
** 4: Théo ECHEVET - Fabric8, [[VT2018_fabric8|Fiche de synthèse]], [[Media:Fabric8_Pres_Theo_Echevet.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 5: Bastien TERRIER - [[Performance_Monitoring|Performance Monitoring]], [[VT2018_Performance_Monitoring|Fiche de synthèse]], [[Media:VT2018_Performance_Monitoring_presentation.pdf|Transparents]], [[VT2018_Performance_Monitoring_Demo|Démo]]&lt;br /&gt;
* Lundi 19/11: (GPB,DD en visio)&lt;br /&gt;
** 6: Samuel BAMBA - DevSecOps, [[VT2018_DevSecOps|Fiche de synthèse]], [[Media:VT2018_DevSecOps.pdf|Transparents]], [https://github.com/CoolerVoid/codewarrior Démo]&lt;br /&gt;
** 7: [[User:Zoran.Chanet | Zoran CHANET]] - [[Wildfly_Swarm|&amp;lt;strike&amp;gt;Wildfly Swarm&amp;lt;/strike&amp;gt;]] [[Thorntail|Thorntail]], [[VT2018_Thorntail|Fiche de synthèse]], [[Media:VT2018_Thorntail_presentation.pdf|Transparents]], [[VT2018_Thorntail_Demo|Démo]] (reporté)&lt;br /&gt;
** 8: Thibaud VEGREVILLE, Techniques et technologies de &amp;quot;Lag Compensation&amp;quot; dans les jeux en ligne, [[VT2018_Lag_Compensation|Fiche de synthèse]], [[Media:Lag_Compensation_in_Games.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 9: Hugo GROS-DAILLON - [[ActionHero.js]], [[VT2018_ActionHero|Fiche de synthèse]], [[Media:VT2018ActionHero.pdf|Transparents]], [https://github.com/HugoSecteur4/DemoVT2018ActionHero/tree/master/ActionHero Démo]&lt;br /&gt;
** 10: Vincent AUBERT - Apache MXNet : Demo avec Intel Movidius, [[VT2018_Apache_Mxnet|Fiche de synthèse]], [[Media:VT2018_Mxnet_presentation.pdf|Transparents]], [[VT2018_Mxnet_Demo|Démo]]&lt;br /&gt;
* Lundi 10/12: (GPB+DD)&lt;br /&gt;
** 11: Joffrey FERREIRA - Keycloak, [[VT2018_Keycloak|Fiche de synthèse]], [[Media:VT2018_Keycloak_presentation.pdf|Transparents]], [[VT2018_Keycloak_Demo|Démo]]&lt;br /&gt;
** 12: Loris GENTILLON - Gceasy, [[VT2018_GCeasy-synthese|Fiche de synthèse]], [[Media:GCeasy_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]] &lt;br /&gt;
** 13: Thomas OZENDA - Zipkin et Daper, [[VT2018_Zipkin|Fiche de synthèse]], [[Media:VT2018_Zipkin_presentation.pdf|Transparents]], [[VT2018_Zipkin_Demo|Démo]]&lt;br /&gt;
** 14: Aurélien SURIER - CloudFoundry, [[VT2018_CloudFoundry|Fiche de synthèse]], [[Media:VT2018_CloudFoundry_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]] (reporté) &lt;br /&gt;
** 15: Enzo MOLION - Web3j, [[VT2018_Web3j|Fiche de synthèse]], [[Media:Presentation_Web3j.pdf|Transparents]], [https://air.imag.fr/index.php/VT2018_Web3j#D.C3.A9monstration Démo]&lt;br /&gt;
* Lundi 17/12: (GPB)&lt;br /&gt;
** 16: Quentin FOMBRAON - Web Assembly, [[VT2018_WebAssembly|Fiche de synthèse]], [[Media:VT2018_WebAssembly_presentation.pdf|Transparents]], [[VT2018_WebAssembly#D.C3.A9monstration|Démo]]&lt;br /&gt;
** 17: Timothée DEPRIESTER - Kafka Stream, [[VT2018_Kafka|Fiche de synthèse]], [[Media:VT2018_kafka_presentation.pdf|Transparents]], [[VT2018_kafka_Demo|Démo]]&lt;br /&gt;
** 18: Benjamin BESNIER - Apache Beam, [[VT2018_ApacheBeam|Fiche de synthèse]], [[Media:VT2018_ApacheBeam_presentation.pdf|Transparents]], [[VT2018_ApacheBeam#Demonstration|Démo]]&lt;br /&gt;
** 19: Théo LEVESQUE - OpenShift, [[VT2018_OpenShift|Fiche de synthèse]], [[Media:VT2018_OpenShift.pdf|Transparents]], [[VT2018_OpenShift#D.C3.A9monstration|Démo]]&lt;br /&gt;
** 20: William WEILL - CMS, [[VT2018_CrafterCMS|Fiche de synthèse]], [[Media:VT2018_CrafterCMS.pdf|Transparents]], [[VT2018_CrafterCMS#D.C3.A9monstration|Démo]]&lt;br /&gt;
* Lundi 07/01/2019: (GPB+DD)&lt;br /&gt;
** 21: Tim LEPAGE - Moby, [[VT2018_Moby|Fiche de synthèse]], [[Media:VT2018_Moby_presentation.pdf|Transparents]], [[VT2018_Moby_Demo|Démo]]&lt;br /&gt;
** 22: Cédric LAFRASSE - SIG, [[VT2018_SIG|Fiche de synthèse]], [[Media:VT2018_SIG_presentation.pdf|Transparents]], [[VT2018_SIG#Demonstration|Démo]]&lt;br /&gt;
** 23: Léo VALETTE - Architectures de processeurs pour le Deep Learning (NPU): Démo de l&#039;Intel Movidius, , [[VT2018_NPU|Fiche de synthèse]], [[Media:VT2018_NPU_presentation.pdf|Transparents]], [[VT2018_NPU_Demo|Démo]]&lt;br /&gt;
** 24: Florian CUZIN - Hazelcast IMDG, [[VT2018_Hazelcast_IMDG|Fiche de synthèse]], [[Media:Hazelcast_IMDG_Presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 25: Raphael MANGER - Apache Solr, [[VT2018_Apache_Solr|Fiche de synthèse]], [[Media:Apache_Solr.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
* Lundi 14/01/2019: (GPD+DD)&lt;br /&gt;
** 26: Amina BOUCHERIMA - Content delivery networks, [[VT2018_CDN|Fiche de synthèse]], [[Media:VT2018_CDN_presentation.pdf|Transparents]], [[VT2018_CDN_Demo|Démo]]&lt;br /&gt;
** 27: Najwa EZ-ZINE - FIDO, [[VT2018_FIDO|Fiche de synthèse]], [[Media:VT2018FIDOUPLOAD.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;br /&gt;
** 28: Sekina BELGUENDOUZ - Service Mesh, [[VT2018_Service_Mesh|Fiche de synthèse]], [[Media:VT2018_Service_Mesh_presentation.pdf|Transparents]], [https://medium.freecodecamp.org/jhipster-microservices-with-istio-service-mesh-on-kubernetes-a7d0158ba9a3 Démo avec Istio]&lt;br /&gt;
** 29: Zoran CHANET - [[Wildfly_Swarm|&amp;lt;strike&amp;gt;Wildfly Swarm&amp;lt;/strike&amp;gt;]] [[Thorntail|Thorntail]], [[VT2018_Thorntail|Fiche de synthèse]], [[Media:VT2018_Thorntail_presentation.pdf|Transparents]], [[VT2018_Thorntail_Demo|Démo]]&lt;br /&gt;
** 30: Aurélien SURIER - CloudFoundry, [[VT2018_CloudFoundry|Fiche de synthèse]], [[Media:VT2018_CloudFoundry_presentation.pdf|Transparents]], [[VT2018_XXX_Demo|Démo]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2017-2018&amp;diff=44902</id>
		<title>Projets 2017-2018</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2017-2018&amp;diff=44902"/>
		<updated>2019-02-11T08:47:10Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2016-2017]] | [[Projets]] | [[Projets 2018-2019]]&amp;gt;&amp;gt;&lt;br /&gt;
=RICM=&lt;br /&gt;
==RICM3==&lt;br /&gt;
&lt;br /&gt;
==RICM4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: 15/01/2018 en 257 à 15h45&lt;br /&gt;
* Soutenances: &#039;&#039;&#039;Lundi 9 avril&#039;&#039;&#039;: [[Ordre_passages_soutenances_RICM4_2017_2018 | Ordre de passages]]&lt;br /&gt;
* Soutenances à mi-parcours: Lundi 12 et mardi 13 mars: [[ordre_passages_mi_parcours_RICM4_2017_2018 | Ordre de passages]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par ricm4_2017_2018. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Propositions de projets:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[QCM C2I]] , Pierre Gillois, Didier Donsez&lt;br /&gt;
# [[Dashboard pour gestionnaire de tâches]] (Angular 5): Olivier Richard&lt;br /&gt;
# [[Moteur de workflows distribué]] (WDL/Cromwell): Olivier Richard &lt;br /&gt;
# [[ESP32 et language D]]: Olivier Richard&lt;br /&gt;
# [[Serious game multi-joueurs pour tables tactiles en réseau]] : Didier Donsez, Anne-Laure Finkel, Stéphanie Diligent.&lt;br /&gt;
# [[Challenge OpenCity]] : Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
# Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS :  Reprise partielle du projet eCOM de gestion des courses sportives et du projet [[UltraTeam]] 2017 pour la partie backend et frontend du projet : Didier Donsez&lt;br /&gt;
# Projet [[Réseau Social LoRa]] avec des pods [[ESP32-LoRa]] :  Olivier Richard.&lt;br /&gt;
# Contribution et evaluation au/du projet [https://github.com/IntelLabs/hpat HPAT] (A compiler-based big data framework in Python): Olivier Richard.&lt;br /&gt;
# [[Ruche connectée LoRa]] : Nicolas Palix&lt;br /&gt;
# [[Serres connectées]] : Nicolas Palix&lt;br /&gt;
# [[I-Greenhouse]] : [[Serre connectée aquaponie]] : Nicolas Palix&lt;br /&gt;
# Projet &amp;quot;Plateforme de mise en relation pour les entrepreneurs sociaux&amp;quot; : Didier Donsez&lt;br /&gt;
# [[Chatbot pour borne d&#039;accueil handicap]] : Didier Donsez, Marie-Paule Balicco et Jérôme Maisonnasse (service accueil handicap COMUE UGA)&lt;br /&gt;
# Connected Shop (avec [[Eclipse SmartHome]]) : Didier Donsez.&lt;br /&gt;
# [[Deploiment Nucleo | Déploiement sécurisé et sans fil pour carte Nucleo]]: Olivier Richard et Sylain Toru&lt;br /&gt;
# [[RobAIR]] : Cobot Majordome : Jérôme Maisonnasse, Germain Lemasson, Bastien Scher (FabMSTIC).&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2017-2018&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[QCM C2I]]&lt;br /&gt;
 | NON ATTRIBUÉ&lt;br /&gt;
 | Pierre Gillois, Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | &lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Dashboard pour gestionnaire de tâches]] (Angular 5)&lt;br /&gt;
 | BELGUENDOUZ Sekina, LARNICOL Titouan&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Dashboard| Fiche]] - [[RICM4_2017_2018_-_Dashboard/SRS|SRS]] - [[RICM4_2017_2018_-_Dashboard/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/2 gitlab]&lt;br /&gt;
 | [[Media:RICM4_2017_2018_-_Dashboard-Rapport.pdf|Rapport final]] - [[Media:RICM4_2017_2018_-_Dashboard-Presentation_Finale-FR.pdf|Presentation finale FR]] - [[Media:RICM4_2017_2018_-_Dashboard-Presentation_Finale-EN.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Dashboard_en.pdf|Presentation de mi-parcours EN]] - [[Media:Dashboard_fr.pdf|Presentation de mi-parcours FR]] - [[Media:Dashboard_fr.pptx|Presentation de mi-parcours en pptx]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[Moteur de workflows distribué]] (WDL/Cromwell)&lt;br /&gt;
 | NON ATTRIBUÉ&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | &lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ESP32 et language D]]&lt;br /&gt;
 | MANGER Raphael, HOUBRON Adrian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_ESP32_D| Fiche]] - [[RICM4_2017_2018_-_ESP32_D/_SRS|SRS]] - [[RICM4_2017_2018_-_ESP32_D/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/4 gitlab]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | LEPAGE Tim, SERGEANT Dimitri &lt;br /&gt;
 | Didier Donsez, Anne-Laure Finkel, Stéphanie Diligent&lt;br /&gt;
 | [[RICM4_2017_2018_-SeriousGame Polystar | Fiche]] - [[RICM4_2017_2018_- SeriousGame Polystar /_SRS|SRS]] - [[RICM4_2017_2018_- SeriousGame Polystar /UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/5 gitlab]&lt;br /&gt;
 | [[Media:Polystar_Final_Report_Lepage_Sergeant.pdf|Rapport final]] - [[Media:Final_presentation_Polystar.pdf|Presentation finale FR]] - [[Media:affiche_Polystar.pdf|Affiche]] - [[Media:PolyStar.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Challenge OpenCity]]&lt;br /&gt;
 | BOUCHERIMA Amina, FOMBARON Quentin&lt;br /&gt;
 | Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_OpenCity| Fiche]] - [[RICM4_2017_2018_-_OpenCity/_SRS|SRS]] - [[RICM4_2017_2018_-_OpenCity/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/6 gitlab]&lt;br /&gt;
 | [[Media:Projet-RICM4 OpenCity Rapport.pdf|Rapport final]] - [http://www.quentinfombaron.fr/final_presentation_FR/ Presentation finale FR] - [http://www.quentinfombaron.fr/final_presentation_EN/ Final Presentation EN] - [[Media:-Projet-RICM4-OpenCity Flyer.jpg|Flyer]] - [http://www.quentinfombaron.fr/mi_presentation_FR/ Presentation de mi-parcours]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.1&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | TERRIER Bastien, GROS-DAILLON Hugo &lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeam_7.1| Fiche]] - [[RICM4_2017_2018_-_UltraTeam_7.1/_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeam_7.1/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.1 gitlab]&lt;br /&gt;
 | [[Media:Final_Report_UltraTeam7.1.pdf|Rapport final]] - [[Media:UltraTeam7.1_Final_PowerPoint_.pdf‎|Presentation finale FR]] - [[Media:UltraTeam7.1_Final_PowerPoint_.pdf‎|Final Presentation EN]] - [[Media:UltraTeam_7.1_Flyer.jpg|Flyer]] - [[Media:UltraTeam 7.1 Mid Presentation.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7.2&lt;br /&gt;
 | Projet [[UltraTeam]] avec des trackers [[ESP32-LoRa]] + GPS&lt;br /&gt;
 | MOLION Enzo, VALETTE Léo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_UltraTeamMV| Fiche]] - [[RICM4_2017_2018_-_UltraTeamMV_:_SRS|SRS]] - [[RICM4_2017_2018_-_UltraTeamMV_:_UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/7.2 gitlab] - [https://github.com/ultratrail/UltraTeamMV GitHub]&lt;br /&gt;
 | [https://air.imag.fr/images/a/a3/UltrateamMVReport.pdf Rapport final] - [https://air.imag.fr/images/0/0e/UltraTeamMVFinalPresentationEN.pdf Final Presentation EN] - [https://air.imag.fr/images/b/b7/UltraTeamMVMidtermPresentationEN.pdf Presentation de mi-parcours]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | Projet [[Réseau Social LoRa]] avec des pods [[ESP32-LoRa]]&lt;br /&gt;
 | VEGREVILLE Thibaud, GENTILLON Loris, ZHENG Jian&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_Réseau_Social_LoRa| Fiche]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/_SRS|SRS]] - [[RICM4_2017_2018_-_Réseau_Social_LoRa/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/8 gitlab]&lt;br /&gt;
 | [https://air.imag.fr/images/7/7b/Final_report_social_network_lora.pdf Rapport final] - [https://air.imag.fr/images/f/f5/Final-presentation_social_network_lora.pptx Final Presentation EN]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | Contribution et evaluation au/du projet [https://github.com/IntelLabs/hpat HPAT]&lt;br /&gt;
 | NON ATTRIBUÉ&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[RICM4_2017_2018_-_| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | &lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Ruche connectée LoRa]] &lt;br /&gt;
 | BESNIER Benjamin, LÉVESQUE Théo, WEILL William&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Ruche_Connectee_| Fiche]] - [[RICM4_2017_2018_-_Ruche_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Ruche_Connectee/UML | UML]] - [[Media:RICM4_2017_2018_-_Ruche_Connectee_-_Schedule.png|Schedule]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/10 gitlab]&lt;br /&gt;
 | [[Media:RICM4_2017_2018_-_Rapport_final.pdf|Rapport final]] - [[Media:Connected Hive final presentation.pdf|Final Presentation EN]] - [[Media:RICM4_2017_2018_-_Ruche_Connectee_Mi_parcours_presentation.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Serres connectées]]&lt;br /&gt;
 | BESNARD Guillaume, DEPRIESTER Timothée&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_Serre_Connectee| Fiche]] - [[RICM4_2017_2018_-_Serre_Connectee_/_SRS|SRS]] - [[RICM4_2017_2018_-_Serre_Connecte/UML | UML]] - [[RICM4_2017_2018_-_Serre_Connecte/Schedule | Schedule]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/11 gitlab]&lt;br /&gt;
 | [[Media:RICM4_2017_2018_-_Serre_Connecte_Rapport_Final.pdf|Rapport final]] - [[Media:RICM4_2017_2018_-_Serre_Connecte_Presentation_Final_EN.pdf|Final Presentation EN]] - [[Media:RICM4_2017_2018_-_Serre_Connecte_Mi_parcours_presentation.pdf|Presentation de mi-parcours]] - [[Media:RICM4_2017_2018_-_Serre_Connecte_Poster.pdf|Poster]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[I-Greenhouse]] : [[Serre connectée aquaponie]] &lt;br /&gt;
 | SURIER GAROFALO Aurélien, FERREIRA Joffrey, OZENDA Thomas&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[RICM4_2017_2018_-_IGreenHouse| Fiche]] - [[RICM4_2017_2018_-_IGreenHouse_/_SRS|SRS]] - [[IGreenHouse/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/12 gitlab]&lt;br /&gt;
 | [[Media:Rapport_Projet_I-Greenhouse_2017-2018.pdf‎|Rapport final]] - [[Media:Presentation 2017-2018 I-greenhouse.pdf|Presentation finale FR]] - [[Media:Presentation 2017-2018 I-greenhouse.pdf|Final Presentation EN]] - [[Media:Poster_i-greenhouse_2017-2018.pdf|Flyer]] - [[Media:Presentation_mi-parcours_i-greenhouse_2017-2018.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | Projet &amp;quot;Plateforme de mise en relation pour les entrepreneurs sociaux&amp;quot;&lt;br /&gt;
 | AUBERT Vincent, COURTIAL Julien&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-_Entrepreneur| Fiche]] - [[RICM4_2017_2018_-_Entrepreneur_AUBERT_COURTIAL/_SRS|SRS]] - [[RICM4_2017_2018_-_Entrepreneur_AUBERT_COURTIAL/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/13 gitlab]&lt;br /&gt;
 | [[Media:Rapport_Entrepreneur.pdf|Rapport final]] - [[Media:Soutenance_Entrepreneur_FR.pdf|Presentation finale FR]] - [[Media:Soutenance_Entrepreneur.pdf|Final Presentation EN]] - [[Media:Présoutenance_Projet.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[Chatbot pour borne d&#039;accueil handicap]]&lt;br /&gt;
 | AUCLAIR-CORDAT Julien, BAMBA Samuel&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco et Jérôme Maisonnasse (service accueil handicap COMUE UGA) &lt;br /&gt;
 | [[RICM4_2017_2018_-_ChatBot| Fiche]] - [[RICM4_2017_2018_-_/_SRS|SRS]] - [[RICM4_2017_2018_-_/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/14 gitlab]&lt;br /&gt;
 | [[Media:Final_Report___Chatbot_SAH.pdf|Rapport final]] - [[Media:ChatBot.pdf|Presentation finale FR]] - [[Media:ChatBot.pdf|Final Presentation EN]] - [[Media:ChatBot.pdf|Flyer]] - [[Media:Chatbot_mi-parcours.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | Connected Shop (avec [[Eclipse SmartHome]])&lt;br /&gt;
 | CUZIN Florian, ECHEVET Théo&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[RICM4_2017_2018_-Connected_shop| Fiche]] - [[RICM4_2017_2018_-_Connected_shop_SRS|SRS]] - [[RICM4_2017_2018_-_Connected_Shops/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/15 gitlab]&lt;br /&gt;
 | [[Media:Rapport_Virtual_fitting_room.pdf|Rapport final]] - [[Media:Presentation_finale_virtual_fitting_room.pdf|Presentation finale FR]] - [[Media:Presentation_mi_soutenance_fr_Connected_Shops.pdf|Presentation de mi-parcours]] - [https://www.youtube.com/watch?v=qVNoHjpnASw&amp;amp;feature=youtu.be Vidéo]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Deploiment Nucleo | Déploiement sécurisé et sans fil pour carte Nucleo]]&lt;br /&gt;
 | [[User:Zoran.Chanet | CHANET Zoran]], [[User:Servan.Charlot | CHARLOT Servan]]&lt;br /&gt;
 | Olivier Richard, Sylain Toru&lt;br /&gt;
 | [[RICM4_2017_2018_-_Nucleo | Fiche]] - [[RICM4_2017_2018_-_Nucleo/_SRS|SRS]] - [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/16 gitlab]&lt;br /&gt;
 | [[Media:Final_Report_Nucleo_CHANET_CHARLOT.pdf|Rapport final]] - [[Media:Presentation_Finale_Nucleo.pdf|Presentation finale FR]] - [[Media:Nucleo Final Presentation.pdf‎|Presentation finale]]  - [[Media:Projet_Nucleo_diapo_mi_parcours.pdf‎|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.1&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | DEVOS Xavier, LAFRASSE Cédric&lt;br /&gt;
 | Jérôme Maisonnasse, Germain Lemasson, Bastien Scher (FabMSTIC)&lt;br /&gt;
 | [[RICM4_2017_2018_-_RobAIR17-1| Fiche]] - [[RICM4_2017_2018_-_RobAIRDL/_SRS|SRS]] - [[RICM4_2017_2018_-_RobAIRDL/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.1 gitlab]&lt;br /&gt;
 | [[Media:RobAIRrapport.pdf|Rapport final]] - [[Media:Final_robair_fr.pdf|Presentation finale FR]] - [[Media:Final_robair.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:RobAIR_Robotics_guide.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17.2&lt;br /&gt;
 | [[RobAIR]] : Robot Majordome&lt;br /&gt;
 | JEAN Jordan, EZ-ZINE Najwa&lt;br /&gt;
 | Jérôme Maisonnasse, Germain Lemasson, Bastien Scher (FabMSTIC)&lt;br /&gt;
 | [[RICM4_2017_2018_-_robair2| Fiche]] - [[RICM4_2017_2018_-_robair2/_SRS|SRS]] - [[RICM4_2017_2018_-_robair2/UML | UML]]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projet-RICM4/17-18/17.2 gitlab]&lt;br /&gt;
 | [[Media:Report_robair_tweet.pdf|Rapport final]] - [[Media:RobAIR.pdf|Presentation finale FR]] - [[Media:RobAIR.pdf|Final Presentation EN]] - [[Media:poster_robair.pdf|Flyer]] - [[Media:RobAIR-Mi-soutenance.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==RICM5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Didier Donsez&lt;br /&gt;
&lt;br /&gt;
Calendrier: 29 Janvier à 15 Mars 2018.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
* Mercredi 31/01 de 8h à 12h: Stéphanie Diligent&lt;br /&gt;
* Mercredi 7 février de 8h à 12h : Stéphanie Diligent&lt;br /&gt;
* Mardi 15 février de 8h à 12 : Emmanuelle Tréhoust&lt;br /&gt;
* Lundi 26 février de 8h à 12h : Olivier Gilles&lt;br /&gt;
* Mardi 13 mars de 8h à 12h : Stéphanie Diligent et Emmanuelle Tréhoust&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : 8 Janvier 2018 Matin à 9H00-10H00 (RdV Salle P257 et Salle AIR P259). Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Hackathon Vinci (8,9,10/02) : http://hacktogether.vinci-energies.com/&lt;br /&gt;
&lt;br /&gt;
Démarrage : Lundi 29 Janvier 2018&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : Mercredi 14 Février 2018, 8H00-11H00 (30 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Rendu rapport de management : Mardi 13 Mars 2018 - Matin&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  Jeudi 15 Mars 2018&lt;br /&gt;
&lt;br /&gt;
Vendredi 16 Mars : 10000 ans de RICM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Planning soutenances mi-parcours ====&lt;br /&gt;
Mercredi 14 Février 2018, salle P144, 8H00-11H00 (25 minutes TTC par équipe).&lt;br /&gt;
&lt;br /&gt;
* 8H00-8H30 [[Real Time Subtitles 2017-2018| Real Time Subtitles]]&lt;br /&gt;
* 8H30-9H00 [[Deep Learning 2017-2018 | Deep Learning]]&lt;br /&gt;
* 9H00-9H30 [[EasyFlight_2017-2018|EasyFlight]]&lt;br /&gt;
* 9H30-10H00 [[ Réalité virtuelle et Augmentée pour la maintenance d&#039;usines]]&lt;br /&gt;
* 10H00-10H30 [[R&#039;Montagne]]&lt;br /&gt;
* 10H30-11H00 [[SmartMove]]&lt;br /&gt;
* 11H00-11H30 [[RICM5 2017 2018 - UGAChain|UGAChain]]&lt;br /&gt;
&lt;br /&gt;
==== Planning soutenances finales ====&lt;br /&gt;
Jeudi 15 Mars 2018&lt;br /&gt;
Matin (Salle P251)&lt;br /&gt;
* 8H00-9H00 [[R&#039;Montagne]] (50 minutes TTC)&lt;br /&gt;
* 9H00-10H00 [[SmartMove]] (50 minutes TTC)&lt;br /&gt;
* 10H00-11H00  (50 minutes TTC) [[ Réalité virtuelle et Augmentée pour la maintenance d&#039;usines]]&lt;br /&gt;
* 11H00-12H00  (50 minutes TTC) [[RICM5 2017 2018 - UGAChain|UGAChain]] : Blockchain for Education&lt;br /&gt;
Pause déjeuner&lt;br /&gt;
Matin (Salle P249)&lt;br /&gt;
* 13H00-14H00 [[Real Time Subtitles 2017-2018| Real Time Subtitles]] (50 minutes TTC)&lt;br /&gt;
* 14H00-15H00 [[SmartRecruiting]] (50 minutes TTC)&lt;br /&gt;
* 15H00-16H00 [[EasyFlight_2017-2018|EasyFlight]] (50 minutes TTC)&lt;br /&gt;
&lt;br /&gt;
====Instructions pour la soutenance====&lt;br /&gt;
* Chaque soutenance comporte 20 minutes de présentation, 10 minutes de question et 20 minutes de démonstration. Un transparent doit être consacré au travail confié et réalisé par les étudiants en DUT (AVOSTI) pour R&#039;Montagne.&lt;br /&gt;
* La présentation est constituée des chapitres suivants:&lt;br /&gt;
** Rappel du sujet/besoin et cahier des charges&lt;br /&gt;
** Technologies employées&lt;br /&gt;
** Architecture techniques&lt;br /&gt;
** Réalisations techniques&lt;br /&gt;
** Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres, ...)&lt;br /&gt;
** Outils (collaboration, CD/CI par exemple ...)&lt;br /&gt;
** Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d&#039;après vos journaux)...)&lt;br /&gt;
** Conclusion (Retour d&#039;expérience)&lt;br /&gt;
** Transparent introduisant la démonstration&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration. Il y aura des personnalités invitées. Prévoyez un démonstration filmée pour palier à l&#039;effet &amp;quot;démo&amp;quot;.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* Les étudiants de DUT vous accompagnent lors de votre soutenance et présenteront leur travail. Coordonnez vous avec eux et faites les répéter.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2017-2018&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[Real Time Subtitles 2017-2018| Sous-titre d&#039;un cours en temps réel]]&lt;br /&gt;
 | &#039;&#039;&#039;Estelle ALLARD&#039;&#039;&#039; / Aymeric BROCHIER / Louis COCHINHO / Oriane DALLE / Alexandre FERRERA / Alice RIVOAL&lt;br /&gt;
 | Didier Donsez, Laurent Besacier, François Portet, Marie-Paule Balicco, Jérome Maisonnasse&lt;br /&gt;
 | [[Real Time Subtitles 2017-2018| Fiche]] - [[Real_Time_Subtitles_2017-2018/SRS|SRS]]&lt;br /&gt;
 | [https://gitlab.com/LouisCochinho/RealTimeSubtitles GitLab]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_Real_time_subtitles_rapport.pdf|Rapport final]] - [[Media:RICM5_2017_2018_Real_time_subtitles_slides.pdf|Presentation finale]] -  [[Media:RICM5_2017_2018_Real_time_subtitles_mi.pdf|Presentation de mi-parcours]] - [[Media:RICM5_2017_2018_Real_time_subtitles_flyer.pdf|Flyer]] - [[Media:RICM5_2017_2018_Real_time_subtitles_poster.pdf|Poster]] - [[Media:Demo_RealTimeSubtitles.rar|Video]]&lt;br /&gt;
 &lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Réalité Augmentée pour le Smart Campus 2018|Réalité Augmentée pour le Smart Campus]]&lt;br /&gt;
 | Lucas LESAGE / &#039;&#039;&#039;Denis LACHARTRE&#039;&#039;&#039; / Douria ZENNOUCHE / Gilles BONHOURE / Maxime DEREYMEZ&lt;br /&gt;
 | Didier Donsez, Georges-Pierre Bonneau&lt;br /&gt;
 | [[Campus_Augmente_2017-2018|Fiche]] - [[Media:SRS_ProjetAR_2018.pdf|SRS]] &lt;br /&gt;
 | [https://github.com/ProjetS10-CyberHoloMachin Organisation Git]&lt;br /&gt;
 | [[Media:Guide_developpeur_ProjetAR_2018.pdf|Guide developpeur]] - [[Media:Presentation_finale_ProjetAR_2018.pdf|Presentation finale ]] -[[Media : Cyberposter_ProjetAR_2018.pdf | Poster]] - [[Media:Rapport_final_MPI_ProjetAR_2018.pdf‎ | Rapport final MPI ]] - [[Media:Guide_utilisateur_ProjetAR_2018.pdf|Guide utilisateur]]- [[Media:Presentation_Mi_parcours_ProjetAR_2018.pdf|Presentation de mi-parcours]]  -  [http://youtulle.com/XXXX Vidéo 1]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | SmartRecruiting : [[SmartRecruiting|Deep Learning]] avec [[TensorFlow]] sur les référentiels de compétence&lt;br /&gt;
 | Héloise FERNANDES DE ALMEIDA / &#039;&#039;&#039;Romane GALLIER&#039;&#039;&#039; / Alicia AUBERTIN / Antoine GAMBRO / Qianqian FU &lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[SmartRecruiting| Fiche]] - [[SmartRecruiting/SRS|SRS]]&lt;br /&gt;
 | [https://github.com/Projet-DeepLearning-RICM5-2018 Organisation Git]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_DeepLearning_rapport.pdf|Rapport final]] - [[Media:RICM5_2017_2018_DeepLearning_presentation.pdf|Presentation finale]] - [[Media:RICM5_2017_2018_DeepLearning_mi-parcours.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[RICM5 2017 2018 - UGAChain|UGAChain]] : Blockchain for Education&lt;br /&gt;
 | Charles MARCHAND / &#039;&#039;&#039;Antoine BOISADAM&#039;&#039;&#039; / Ahmed NASSIK / Simon CHAMBONNET / Lucas GUERRY / Aymeric VIAL-GRELIER&lt;br /&gt;
 | Didier Donsez &amp;amp; co&lt;br /&gt;
 | style=&amp;quot;white-space: nowrap;&amp;quot;|[[RICM5 2017 2018 - UGAChain| Fiche]] - [[RICM5 2017 2018 - UGAChain /_SRS|SRS]]&lt;br /&gt;
 | [https://github.com/RICM5-BlockChain Github]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_-_UGAChain_-_Rapport_MPI.pdf|Rapport final]] - [[Media:RICM5_2017_2018_UGAChain_-_Soutenance_fianale.pdf|Présentation finale]] - [[Media:RICM5_2017_2018_UGAChain_-_Soutenance_mi-parcours.pdf|Présentation de mi-parcours]] - [[Media:RICM5_2017_2018_UGAChain-Flyer.pdf|Flyer]] - [[Media:RICM5_2017_2018_XXXX_poster.pdf|Poster]] - [http://youtulle.com/XXXX Vidéo 1]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[R&#039;Montagne]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo AMODRU-FAVIN&#039;&#039;&#039; / Antoine DELISE / Gwenaël MOREAU&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[R&#039;Montagne| Fiche]] - [[RICM5_2017_2018_-_RMontagne_/_SRS|SRS]]&lt;br /&gt;
 | [https://github.com/delisea/R-Montagne Github]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_RMontagne_MPI.pdf|Rapport final]] - [[Media:RICM5_2017_2018_RMontagne.pdf|Presentation finale ]] - [[Media:RICM5_2017_2018_RMontagne_MiParcours.pdf|Presentation de mi-parcours]]  - [[Media:RICM5_2017_2018_RMontagne_Flyer.pdf|Flyer/Poster]] - [http://youtulle.com/XXXX Vidéo 1]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[SmartMove]]&lt;br /&gt;
 | &#039;&#039;&#039;Anthony GEOURJON&#039;&#039;&#039; / Timothée LEMAIRE / Clément ROUQUIER / Vincent TURRIN&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[RICM5_2017-2018 - SmartMove| Fiche]] - [[RICM5_2017-2018-SmartMove-SRS|SRS]]&lt;br /&gt;
 | [https://github.com/orgs/SmartMove-PolytechGrenoble/dashboard Github]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_XYZ.pdf|Rapport final]] - [[Media:RICM5_2017_2018_SmartMove.pdf|Presentation finale]] - [[Media:RICM5_2017_2018_XYZ.pdf|Presentation de mi-parcours]]  - [[Media:RICM5_2017_2018_XXXX_flyer.pdf|Flyer]] - [[Media:RICM5_2017_2018_XXXX_poster.pdf|Poster]] - [http://youtulle.com/XXXX Vidéo 1]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[EasyFlight 2017-2018|EasyFlight]]&lt;br /&gt;
 | &#039;&#039;&#039;Boris ODIEVRE&#039;&#039;&#039; / Remi SAVARY / Lambert ROCHER / Hervé BECHER&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[EasyFlight_2017-2018/Fiche_de_suivi| Fiche]] - [[RICM5_2017-2018-EasyFlight-SRS|SRS]]&lt;br /&gt;
 | [https://github.com/lambertrocher/EasyFlight Github]&lt;br /&gt;
 | [[Media:RICM5_2017_2018_XYZ.pdf|Rapport final]] - [[Media:RICM5_2017_2018_XYZ.pdf|Presentation finale]] - [[Media:RICM5_2017_2018_XYZ.pdf|Presentation de mi-parcours]]  - [[Media:RICM5_2017_2018_XXXX_flyer.pdf|Flyer]] - [[Media:RICM5_2017_2018_XXXX_poster.pdf|Poster]] - [http://youtulle.com/XXXX Vidéo 1]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sujets non choisis ====&lt;br /&gt;
* [[Contributions open-source au projet JHipster]] (Didier Donsez)&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2018/TP|PM2M]]==&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=ECOM-1FO&amp;diff=44901</id>
		<title>ECOM-1FO</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=ECOM-1FO&amp;diff=44901"/>
		<updated>2019-02-11T08:45:42Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Groupes eCOM-1F0 2018-2019 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le projet eCOM consiste à concevoir et développer une application d’échange en ligne (commerce électronique, échanges de services…). [[ECOM|suite ...]]&lt;br /&gt;
&lt;br /&gt;
=Organisation=&lt;br /&gt;
==Aide à la lecture du document==&lt;br /&gt;
===Acronymes===&lt;br /&gt;
&#039;&#039;&#039;Les enseignants :&#039;&#039;&#039;&lt;br /&gt;
* DD : Didier Donsez (didier.donsez@imag.fr)&lt;br /&gt;
* SC : Sybille Caffiau (sybille.caffiau@imag.fr)&lt;br /&gt;
* VZ : Vincent Zurczak (vzurczak@linagora.com)&lt;br /&gt;
&#039;&#039;&#039;Les réalisations :&#039;&#039;&#039; &lt;br /&gt;
* DCS : Dossier de Conception Système &lt;br /&gt;
* SAS : Schéma d&#039;Architecture Système&lt;br /&gt;
&#039;&#039;&#039;Autres :&#039;&#039;&#039;&lt;br /&gt;
* ADE : Emploi du temps en ligne&lt;br /&gt;
&lt;br /&gt;
==Groupes et sujets==&lt;br /&gt;
===Groupes eCOM-1F0 2018-2019===&lt;br /&gt;
Les groupes sont imposés par les enseignants et seront donnés lors de la première séance. Ils ne seront définitifs que le mardi 18/09 à 8h.&lt;br /&gt;
&lt;br /&gt;
* [[ECOM-1FO_1819_Restaurant]] : &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Théo Lévesque, Loris Gentillon, Benjamin Besnier, Thomas Ozenda&lt;br /&gt;
* [[ECOM-1FO_1819_Spectacle]] : &#039;&#039;&#039;Thibaud Vegreville (CP)&#039;&#039;&#039;, Joffrey Ferreira, Bastien Terrier, Cédric Lafrasse&lt;br /&gt;
* [[ECOM-1FO_1819_Camping]] : &#039;&#039;&#039;Timothée Depriester (CP)&#039;&#039;&#039;, Sekina Belguendouz, [[User:Servan.Charlot | Servan Charlot]], Samuel Bamba, Florian Cuzin&lt;br /&gt;
* [[ECOM-1FO_1819_Transport]] : &#039;&#039;&#039;Julien Courtial (CP)&#039;&#039;&#039;, Aurélien Surier, Raphaël Manger, Théo Echevet&lt;br /&gt;
* [[ECOM-1FO_1819_Sport]] : &#039;&#039;&#039;Hugo Gros-Daillon (CP)&#039;&#039;&#039;, Quentin Fombaron, Tim Lepage, Vincent Aubert&lt;br /&gt;
* [[ECOM-1F0_1819_BTB|ECOM-1FO_1819_BruleTaBuche]] : &#039;&#039;&#039;Léo Valette (CP)&#039;&#039;&#039;, Amina Boucherima, [[User:Zoran.Chanet | Zoran Chanet]], Najwa Ez-zine, Enzo Molion&lt;br /&gt;
&lt;br /&gt;
===Groupes eCOM-RICM Années précédentes===&lt;br /&gt;
* [[Groupes eCOM-RICM 2017-2018]]&lt;br /&gt;
* [[Groupes eCOM-RICM 2015-2016]]&lt;br /&gt;
* [[Groupes eCOM-RICM 2014-2015]]&lt;br /&gt;
&lt;br /&gt;
==Planning des séances==&lt;br /&gt;
La partie IHM et la partie Système sont menées en parallèle pendant toute la durée du projet. Pendant toutes les séances vous travaillerez en groupe, il est donc obligatoire pour tous les étudiants d&#039;être présents à toutes les séances. Celles-ci sont composées :&lt;br /&gt;
* du cours (CM)&lt;br /&gt;
* du travail encadré (TD) : séance pendant lequel l&#039;enseignant vous accompagnera pour la réalisation d&#039;une étape de votre projet&lt;br /&gt;
* du travail en autonomie : séance réservée au travail d&#039;ECOM pendant laquelle vous travaillez entre étudiants&lt;br /&gt;
* de permanences : séances pendant lesquelles vous pouvez demander l&#039;aide d&#039;un enseignant pour vous aidez à avancer. Ces séances sont également l&#039;occasion pour vos enseignants de faire le point avec vous sur votre avancé, vous devez donc IMPERATIVEMENT signaler votre lieu de travail si vous n&#039;êtes pas dans les salles prévues par ADE (par email à SC et VZ).&lt;br /&gt;
&lt;br /&gt;
An cas d’incohérence de planning avec ADE ; suivre ADE. &lt;br /&gt;
* 18/09 8h00-12h15 : Introduction 1h00(DD+SC) ([[Media:presentationEcomSeance1-2018.pdf|transparents]]), CM [[Media:RestfulServices.pdf|REST]], [[MicroServices]], [[Spring]], [[JHipster]] (DD) (P005)&lt;br /&gt;
* 18/09 15h45-18h30 : (DD) Installation [[JHipster]] et [[Docker]]. Génération de l&#039;application MVP de eCOM, lancement du profile dev, lancement du profil prod (avec Docker), analyse de qualité du code (généré) avec le container SonarQube et déploiement sur Heroku de 2 applications (stage, production) (F214, F215).&lt;br /&gt;
&lt;br /&gt;
* 25/09 8h00-12h15 : Des scénarios aux spécifications IHM (SC) (P257)&lt;br /&gt;
* 25/09 15h45-18h30 :  Séance en autonomie (F114, F214)&lt;br /&gt;
&lt;br /&gt;
* 02/10 8h00-12h15 : Test utilisateur (SC) puis Séance en autonomie (P039)&lt;br /&gt;
* 02/10 15h45-18h30 : Séance en autonomie (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 09/10 8h00-12h15 : Audit 1 (P013) et Séance en autonomie (P105, P133)&lt;br /&gt;
* 09/10 15h45-18h30 :  Tests de robustesse (charges) (VZ)  (F114, F214)&lt;br /&gt;
&lt;br /&gt;
* 16/10 8h00-12h15 : Séance en autonomie (P257)&lt;br /&gt;
* 16/10 15h45-18h30 :  Séance encadrée (SC) (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 23/10 8h00-12h15 : Séance encadrée (VZ) (P257)&lt;br /&gt;
* 23/10 15h45-18h30 :  Séance en autonomie (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 06/11 8h00-12h15 : Audit 2 (F114) et Séance en autonomie (F202)&lt;br /&gt;
* 06/11 15h45-18h30 :  Séance en autonomie (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 12/11  8h00-12h15 : Séance en autonomie (P257)&lt;br /&gt;
&lt;br /&gt;
* 20/11 8h00-12h15 : Séance en autonomie + Séance encadrée (SC) (P257)&lt;br /&gt;
* 20/11 15h45-18h30 :  Séance encadrée (VZ) (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 27/11 15h45-18h30 :  Séance encadrée (VZ) (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 04/12 8h00-12h15 : Séance encadrée (VZ) (P257)&lt;br /&gt;
* 04/12 15h45-18h30 :  Séance en autonomie (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 11/12 8h00-12h15 : Séance encadrée (VZ) (P257)&lt;br /&gt;
* 11/12 15h45-18h30 :  Séance en autonomie (F214, F215)&lt;br /&gt;
&lt;br /&gt;
* 18/12 8h00-12h15 : Soutenances (F114) et rendus finaux&lt;br /&gt;
* 18/12 15h45-18h30 :  Soutenances (F114) et rendus finaux&lt;br /&gt;
&lt;br /&gt;
==Modalités d’évaluation==&lt;br /&gt;
La note d’ECOM est obtenue par l’addition de notes obtenues tout au long de la réalisation du projet, elle peut être différente pour chaque membre du groupe en fonction du travail fourni et constaté par les enseignants. Attention : elle repose sur la &#039;&#039;&#039;qualité&#039;&#039;&#039; du travail fourni autant que sur la quantité.&lt;br /&gt;
*présentation soutenance conception (3 pts) : note affectée sur la présentation (qualité des slides, discours...), les réponses aux questions &lt;br /&gt;
*présentation soutenance finale (3 pts) :  note affectée sur la présentation (qualité des slides, discours...), les réponses aux questions &lt;br /&gt;
*conception (5 pts) : note obtenue à partir des livrables de conception, de la prise en compte des remarques faites par les enseignants pendant la soutenance de conception, du travail fourni (et observé) et du contenu de la soutenance de conception&lt;br /&gt;
*développement (5 pts) : note obtenue à partir de la qualité et quantité du code réalisé, la démo de la soutenance finale. En particulier, seront observés, la qualité de l&#039;architecture de l&#039;application, la qualité et robustesse du code et la mise en place des principaux concepts de la technologie [[Spring Boot]] / [[JHipster]].&lt;br /&gt;
*suivi de projet (4 pts) : cette note est obtenue par rapport aux livrables (qualité, livraison dans les délais...), la mise en place et bonne utilisation des outils collaboratifs, l&#039;intégration continue, [[Continuous Delivery|Livraison en continue]] sur plusieurs VM dans un cloud public (AWS, GAE, Heroku, Azure, Bluemix, Digital Ocean ...), le contenu de la soutenance finale&lt;br /&gt;
&lt;br /&gt;
==Soutenances==&lt;br /&gt;
&lt;br /&gt;
Trois soutenances sont prévues (2 audits et 1 soutenance finale) : &lt;br /&gt;
* audit 1 (exigences, besoins client) : le 09 octobre 2017&lt;br /&gt;
* audit 2 (conception) : le 06 novembre 2017&lt;br /&gt;
* soutenance de fin de projet le 18 Décembre 2017&lt;br /&gt;
Dans les trois cas, les soutenances doivent présenter les parties GL, Système et IHM.&lt;br /&gt;
Attention : les concepts que vous avez vus en cours d&#039;architecture doivent être mis en application pour l&#039;architecture de votre projet. Une attention particulière sur ce point doit être portée lors de vos présentations à l&#039;audit 2 et à la soutenance. Le travail que vous présenterez fournira de support à l&#039;évaluation du module de GL.&lt;br /&gt;
&lt;br /&gt;
===Audit 1 ===&lt;br /&gt;
*Salle : P013&lt;br /&gt;
*Durée totale : 30 min par groupe (max 20 minutes de présentation et ensuite les questions des enseignants représentant les clients)&lt;br /&gt;
*Utilisez des transparents pour présenter votre projet.&lt;br /&gt;
&lt;br /&gt;
* ordre de passage : &lt;br /&gt;
&lt;br /&gt;
- 8h35 : Restaurant &lt;br /&gt;
&lt;br /&gt;
- 9h10 : Spectacle&lt;br /&gt;
&lt;br /&gt;
- 9h45 : Camping&lt;br /&gt;
&lt;br /&gt;
- 10h20 : Transport&lt;br /&gt;
&lt;br /&gt;
- 10h55 : Sport &lt;br /&gt;
&lt;br /&gt;
- 11h30 : Brule ta bûche&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039; Contenu :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Pour la partie GL et gestion de projet&lt;br /&gt;
* Organisation de l&#039;équipe (roles, ...)&lt;br /&gt;
* Méthodologie de travail&lt;br /&gt;
* Planning (envisagé)&lt;br /&gt;
* Choix technologiques et état de prise en main&lt;br /&gt;
&lt;br /&gt;
Besoins pour clients, avec en particulier (mais non exhaustive) :&lt;br /&gt;
* Résultats de l’analyse de l’existant&lt;br /&gt;
* Utilisateurs cibles, contexte d’utilisation et objectifs utilisateurs (ie objectifs de l’IHM)&lt;br /&gt;
* Modèle de tâches et IHMA pour les premières tâches&lt;br /&gt;
&lt;br /&gt;
===Audit 2 ===&lt;br /&gt;
*Salle : F114&lt;br /&gt;
*Durée totale : 25 min&lt;br /&gt;
*Utilisez des transparents pour présenter votre projet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous devez présenter les étapes de conception réalisées et les résultats (choix techniques…). De plus, nous vous rappelons que pour le dimanche minuit, vous devez avoir rendu accessibles les livrables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Contenu attendu dans votre présentation( à avoir au minimum dans vos slides) :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Pour la partie GL et gestion de projet : &lt;br /&gt;
* Organisation de l&#039;équipe (roles, ...)&lt;br /&gt;
* Méthodologie de travail&lt;br /&gt;
* Planning (modifications par rapport à ce que vous aviez prévu jusqu&#039;à maintenant et le planning futur)&lt;br /&gt;
* Architecture complète&lt;br /&gt;
* Procédure de tests&lt;br /&gt;
* Procédure d&#039;intégration du code &lt;br /&gt;
&lt;br /&gt;
Pour la partie Système&lt;br /&gt;
* Architecture systeme du service&lt;br /&gt;
* Nombre de Entity, Ressources REST (diagramme de classe, type, ...)&lt;br /&gt;
* Extensions réalisées et envisagées &lt;br /&gt;
* Etat d&#039;avancement dans les développements&lt;br /&gt;
&lt;br /&gt;
Pour la partie IHM&lt;br /&gt;
* Maquettes et squelette du site (pour la plateforme cible)&lt;br /&gt;
* Charte graphique&lt;br /&gt;
&lt;br /&gt;
Une démonstration (rapide) de votre application telle qu&#039;elle est (v0 ou v1 en fonction des groupes)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Ordre de passage :&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
- 8h : Transport &lt;br /&gt;
&lt;br /&gt;
- 8h30 : Spectacle&lt;br /&gt;
&lt;br /&gt;
- 9h : Restaurant&lt;br /&gt;
&lt;br /&gt;
- 9h30 : Camping&lt;br /&gt;
&lt;br /&gt;
- 10h : Sport &lt;br /&gt;
&lt;br /&gt;
- 10h30 : Brule ta bûche&lt;br /&gt;
&lt;br /&gt;
Respectez l&#039;ordre établi.&lt;br /&gt;
Faites attention au temps. Vous disposez de 25 minutes par soutenance pour : votre présentation et les questions. &lt;br /&gt;
Vous devrez gérer le temps. Les remarques (d’amélioration) qui seront faites pendant cette soutenance par les enseignants devront être prises en compte pour la version finale (pris en compte dans la note finale).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ATTENTION : Si vous voulez modifier l&#039;un des plannings, vous devez :&lt;br /&gt;
* trouver un autre groupe avec qui échanger&lt;br /&gt;
* vous assurer que tous les membres de ce groupe acceptent l&#039;échange&lt;br /&gt;
* envoyer un mail à SC et DD pour informer du changement (avec le chef de projet de l&#039;autre groupe en copie)&lt;br /&gt;
Les modifications ne sont acceptées que jusqu&#039;au dimanche précédent la soutenance.&lt;br /&gt;
&lt;br /&gt;
===Soutenance de fin de projet ===&lt;br /&gt;
&lt;br /&gt;
* Salle : F114&lt;br /&gt;
* Durée totale : 30 min (max 15 minutes de présentation, min 5 minutes de démo) &lt;br /&gt;
* Utilisez des transparents pour présenter votre projet ( [[Media:Présentation RICM-2018.odp]]). Lors de votre passage vous devez présenter une démo PRÉPARÉE.&lt;br /&gt;
&lt;br /&gt;
* ordre de passage : &lt;br /&gt;
&lt;br /&gt;
- 8h : Sport &lt;br /&gt;
&lt;br /&gt;
- 8h35 : Restaurant &lt;br /&gt;
&lt;br /&gt;
- 9h10 : Spectacle&lt;br /&gt;
&lt;br /&gt;
- 9h45 : Camping&lt;br /&gt;
&lt;br /&gt;
- 10h20 : Transport&lt;br /&gt;
&lt;br /&gt;
- 11h : Brule ta bûche&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arrivez avec l&#039;application démarrée (on ne perd pas de temps) et 1 ou 2 scénarios (de test)&lt;br /&gt;
* Préparez vous 30 minutes avant votre soutenance pour démarrer les instances Windows Azure (ou autre plateforme de Cloud de votre choix) avec le service développé.&lt;br /&gt;
* Les démonstrations peuvent être faites sur vos machines personnelles cependant le service eCOM doit IMPERATIVEMENT s&#039;exécuter sur une ou plusieurs instances de machines virtuelles sur le Cloud de votre choix&lt;br /&gt;
* Vous devez avoir tous les documents demandés (accessibles en ligne et/ou imprimés)&lt;br /&gt;
* Vous devez fournir au début de votre passage les fiches d&#039;auto-évaluation complétées (version papier)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Contenu attendu dans votre présentation :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
Votre présentation doit suivre le template suivante : [[Media:Présentation RICM-2018.odp]]&lt;br /&gt;
Vous devez suivre l&#039;ordre dans lequel les items sont proposés mais vous pouvez ajouter des slides en cas de besoin pour illustrer (ex : pour expliquer votre processus).&lt;br /&gt;
Si vous avec des remarques/questions n&#039;attendez pas pour les poser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Respectez l&#039;ordre établi.&lt;br /&gt;
Faites attention au temps. Vous disposez de 30 minutes par soutenance pour : votre présentation et les questions. Au bout de 15 minutes de présentation vous serez interrompus pour être interrogés.&lt;br /&gt;
Les questions peuvent être posées nominativement (c&#039;est à dire que la personne qui doit répondre est désignée par l&#039;enseignant).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ATTENTION : Si vous voulez modifier l&#039;un des plannings, vous devez :&lt;br /&gt;
* trouver un autre groupe avec qui échanger&lt;br /&gt;
* vous assurer que tous les membres de ce groupe acceptent l&#039;échange&lt;br /&gt;
* envoyer un mail à SC, DD et VZ pour demande d&#039;accord du changement (avec le chef de projet de l&#039;autre groupe en copie)&lt;br /&gt;
Les modifications ne sont acceptées que jusqu&#039;au dimanche précédent la soutenance.&lt;br /&gt;
&lt;br /&gt;
==Livrables==&lt;br /&gt;
Tout votre projet doit être suivi grâce à gitLab.&lt;br /&gt;
&lt;br /&gt;
A tout moment, les enseignants doivent donc pouvoir &lt;br /&gt;
* avoir la dernière version du code (dernière version du logiciel en production et ce qui est en cours de développement dans des branches dédiées)&lt;br /&gt;
* voir les tâches prévues/en cours/réalisées&lt;br /&gt;
* savoir le travail de chaque membre (effectué et assigné)&lt;br /&gt;
* consulter les documents de conception (à jour) &lt;br /&gt;
* consulter les CR des daily meeting et autres réunions et les rétrospectives et vos présentations aux différents audits&lt;br /&gt;
* avoir connaissance des procédures de qualité que vous mettez en place au sein de votre projet&lt;br /&gt;
* consulter les résultats des différents tests pour chaque release&lt;br /&gt;
&lt;br /&gt;
Attention : nous insistons particulièrement sur le fait que toutes ces données doivent être maintenues en temps réel et accessibles sur le gitlab de votre projet.&lt;br /&gt;
&lt;br /&gt;
Attention : nous consulterons également les messages de commit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rendus===&lt;br /&gt;
Vous trouverez ci-dessous une liste (non exhaustive) de certains livrables pouvant être produits au sein de votre projet&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L1. Composition des groupes et sujet&#039;&#039;&#039;&#039;&#039;. (obligatoire)&lt;br /&gt;
Le sujet doit être validé par vos enseignants dès le premier jour du projet. Envoyez une description dans un corps de mail à DD et SC. Cette description doit contenir :&lt;br /&gt;
* les membres du projet&lt;br /&gt;
* le nom du chef de projet&lt;br /&gt;
* le nom du scrum master&lt;br /&gt;
* les rôles envisagés par chaque membre&lt;br /&gt;
* le titre du sujet&lt;br /&gt;
un paragraphe descriptif du sujet dans lequel est particulièrement explicité l&#039;adéquation du sujet et les requis (quelques lignes)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L2. Dossier de conception Système&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
Le Dossier de Conception Système (DCS) a pour but de permettre à toute personne de connaitre les principaux composants Spring de votre application ECOM. Cette connaissance doit pouvoir être acquise rapidement, sans avoir à entrer dans les détails de l&#039;implémentation. Le DCS doit donc être de taille relativement limitée (5 à 10 pages, 20 pages au grand maximum).&lt;br /&gt;
Le DCS est centré sur un schéma d&#039;architecture système (SAS). Pour chaque composant et lien du SAS, le DCS doit fournir : &lt;br /&gt;
* Une description fonctionnelle : La description fonctionnelle d&#039;un composant fait apparaître les attributs qui le composent, ainsi que les méthodes qu&#039;il fournit. Attributs et méthodes seront associés à une courte description. Les besoins liées à la persistence ou aux aspects transactionnels peuvent également être explicités. &lt;br /&gt;
* Une description d&#039;implantation Spring : La description d&#039;implantation décrit l&#039;implantation du composant ou du lien dans l&#039;environnement Spring. Un composant peut être implanté par un client généré à partir de l&#039;interface de/des micro-services, par un micro-service REST (Controller), par un Service, par un Entity ou par un client Feign vers un micro-service externe au systeme (par exemple, service de paiement Swipe.com, ...).&lt;br /&gt;
&lt;br /&gt;
Le dossier de conception système doit être disponibles depuis votre page wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L3. Analyse des besoins&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
Questionnaire et son analyse pour définir les besoins utilisateurs que doit satisfaire votre application.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L4.Maquette&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L5.SRS&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L6.Diagramme UML&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L7.Modèle de tâches&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L8.Scrum (tableau de tâches de Gitlab)&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
*(Ils peuvent si vous le souhaiter être directement édités sur le wiki) &lt;br /&gt;
* Le rapport de charge (benchmark) doit être (MUST) disponible sur le wiki.&lt;br /&gt;
* Le rapport sur les métriques logicielles doit être (MUST) disponible sur le wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L9.Journal&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
Détaillez l&#039;affectation des taches effectuées ainsi le temps estimé et le temps effectif pour chaque tache et son état (Réalisée, Reportée, Abandonnée, ...)&lt;br /&gt;
Le journal doit être nominatif. Chaque membre de projet doit gérer son propre journal. Il fera l&#039;objet d&#039;une évaluation personnelle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L10.Dépôt Git&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
Votre code source doit être accessible en ligne avec un lien depuis votre fiche de suivi sur le wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L11.Application en ligne&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L12. Evaluations de l&#039;IHM réalisée&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
cf cours IHM  [[Media:Cours2015-2016RICM.pdf]]&lt;br /&gt;
&lt;br /&gt;
Evaluation utilisateur : [[media:System-Usability-ScaleLogicielComplet.pdf]] &lt;br /&gt;
et/ou &lt;br /&gt;
experte : [[media:EvalEfficacite.pdf]], [[Media:Annexe1-HeuristiqueNielsen.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L13. Evaluation de la qualité du projet&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* Nombre de lignes de code (outil CLOC à minima)&lt;br /&gt;
* Métriques de qualité du code ([http://www.sonarqube.org/ SonarQute], ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L14. Evaluation économique du projet&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* Utilisez les temps effectifs des taches renseignées dans le journal.&lt;br /&gt;
* Utilisez le coût du travail d&#039;un ingénieur débutant.&lt;br /&gt;
* Comparez votre coût à l&#039;évaluation [[COCOMO]] de votre projet (utiliser les valeurs de L9).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L15. Evaluation de la cybersécurité du projet (option)&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L16. Evaluation des performances du projet (option)&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* Résultat d&#039;une injection de charge simpliste avec [[Gatling]]&lt;br /&gt;
* Résultat d&#039;une injection de charge suivant un scénario complet avec [[Gatling]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L17. Gestion des risques (option)&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L18. Slides de présentation conception&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L19. Diapos de votre présentation de conception&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L20. Diapos de votre présentation finale&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L21. Auto evaluation&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
Système : [[Media:FicheEval20182019-ECOM]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;L22. Diapos de votre présentation client&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Réalisations attendues=&lt;br /&gt;
==Conduite et suivi de projet==&lt;br /&gt;
Le projet eCOM est très court en durée. Vous utiliserez la méthodologie [[Scrum]] pour la conduite du projet dans chaque groupe. Vous pouvez vous inspirer de la méthode [[Lean Startup]] pour livrer rapidement votre application. Vous devez choisir un Scrum Master (unique ou tournant) : justifiez votre choix et la durée du sprint (justifiez votre choix).&lt;br /&gt;
Vous devez prévoir :&lt;br /&gt;
* product backlog&lt;br /&gt;
* sprint backlog&lt;br /&gt;
* sprint planning&lt;br /&gt;
* démos&lt;br /&gt;
* rétrospectives&lt;br /&gt;
&lt;br /&gt;
Pensez à utiliser un outil adapté cela doit être une documentation Agile !!!!&lt;br /&gt;
&lt;br /&gt;
(May) mettre en place des &amp;quot;poker planning&amp;quot;&lt;br /&gt;
[[File:20121002 141359.jpg|center|400px|PokerPlanningECOM2013]]&lt;br /&gt;
&lt;br /&gt;
Ces 2 premiers critères sont fixes !!!&lt;br /&gt;
&lt;br /&gt;
Selon les principes de la méthodologie Agile, vous devez composer votre travail en fonctionnalités. Chacune fera l’objet d’une conception (système et IHM) et d’un développement. Conception ET développement constituent l’ensemble des réalisations attendues.&lt;br /&gt;
&lt;br /&gt;
Vous devez utiliser GitLab comme support à votre projet (versioning, gestion des tâches...).&lt;br /&gt;
&lt;br /&gt;
Nous vous demandons également d&#039;utiliser les issues pour la communication avec les enseignants. En particulier, toute absence ou télétravail doit être signalé par ce média.&lt;br /&gt;
&lt;br /&gt;
==Réalisations système==&lt;br /&gt;
===Conception système===&lt;br /&gt;
La conception système est composée de deux réalisations principales :&lt;br /&gt;
le modèle de donnée : il est vivement conseillé de définir le modèle de données aussi tôt que possible et d&amp;quot;en discuter avec les enseignants.&lt;br /&gt;
le schéma d&#039;architecture système (SAS) : ce schéma doit faire apparaître les composants qui vont constituer l&#039;application, ainsi que les liens entre les beans. Un lien depuis un composant A vers un (ou plusieurs) composant(s) B signifie qu&#039;une interaction peut avoir lieu depuis A vers B. Un lien peut être monovalué ou multivalué, monodirectionnel ou multidirectionnel.&lt;br /&gt;
&lt;br /&gt;
===Développement système===&lt;br /&gt;
Pour chaque fonctionnalités conçues, le développement système sera réalisé en deux étapes. &lt;br /&gt;
====Les étapes====&lt;br /&gt;
Etape 0 :&lt;br /&gt;
Créer un groupe GitLab. Y ajouter les membres du projet eCOM. Créer plusieurs projets pour les différents parties. Activer les notifications. Ajouter les webhooks utiles.&lt;br /&gt;
&lt;br /&gt;
Etape 1 :&lt;br /&gt;
La première consiste à définir le cœur de l&#039;application, c&#039;est-à-dire le modèle de données (UML ou similaire [https://www.jhipster.tech/jdl/ JDL]) et la logique métier, puis à réaliser un premier prototype qui démontre une bonne maîtrise des Entity (annotations JAX-RS, annotations [[Swagger]]).&lt;br /&gt;
&lt;br /&gt;
L&#039;application RESTful est seulement accessible par l&#039;intermédiaire de clients type cUrl (généré avec le générateur [https://swagger.io/tools/swagger-codegen/ swagger-codegen]), [[Swagger]] UI, injecteur de charge [[Gatling]], ....) et le frontend AngularX que vous aurez généré avec [[JHipster]].&lt;br /&gt;
&lt;br /&gt;
Il n&#039;est pas demandé, de réaliser une interface web pour interagir avec l&#039;application. L&#039;application doit cependant offrir deux modes d’utilisation (administrateur et utilisateurs finaux) et exécuter certaines requêtes avec des garanties transactionnelles.&lt;br /&gt;
&lt;br /&gt;
TRES IMPORTANT : Votre machine virtuelle doit être sécurisée (Security Group et/or [[UFW]]/IPtables pour les ports exposés). Evitez de vous faire rançonner comme un binôme de la promo 2016-2017 (voir ci-dessous, la rançon d&#039;une BD [[MongoDB]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ db.PLEASE_READ_ME.find()&lt;br /&gt;
{ &lt;br /&gt;
    &amp;quot;_id&amp;quot; : ObjectId(&amp;quot;58a7287db7dc324adb249fdf&amp;quot;),&lt;br /&gt;
    &amp;quot;info&amp;quot; : &amp;quot;Don&#039;t panic. Your DB is in safety and backed up (check logs). &lt;br /&gt;
              To restore send 0.1 BTC and email with your server ip or domain name. Each 48 hours we erase all the data.&amp;quot;,&lt;br /&gt;
    &amp;quot;amount&amp;quot; : &amp;quot;0.1 BTC&amp;quot;,&lt;br /&gt;
    &amp;quot;data_we_have&amp;quot; : { &lt;br /&gt;
        &amp;quot;local&amp;quot; : [ &amp;quot;startup_log&amp;quot; ],&lt;br /&gt;
        &amp;quot;first_database&amp;quot; : [ &amp;quot;users&amp;quot;, &amp;quot;preferences&amp;quot; ],&lt;br /&gt;
        &amp;quot;MyAppXXX&amp;quot; : [ &amp;quot;emails&amp;quot; ] &lt;br /&gt;
    }, &lt;br /&gt;
    &amp;quot;Bitcoin Address&amp;quot; : &amp;quot;1NSz9TRBGKHKFdjdjH2Gme3LwDi5&amp;quot;, &lt;br /&gt;
    &amp;quot;email&amp;quot; : &amp;quot;xxxxx@xxxx.org&amp;quot; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Etape 2 : &lt;br /&gt;
La seconde étape consiste à compléter le premier prototype (étape 1) avec les objectifs suivants : &lt;br /&gt;
* Développement d&#039;une interface Web basée sur le modèle MVC (SPA ou non) ;&lt;br /&gt;
* Modification de la configuration de déploiement pour la haute disponibilité (HA) :&lt;br /&gt;
# Mise en place d&#039;un container base de données externe (MySQL, ...) pour la production (non répliquée)&lt;br /&gt;
# Mise en place de 2 containers base de données (MySQL) en cluster ([http://assets.en.oreilly.com/1/event/2/MySQL%20Replication%20Tutorial%20Presentation%202.pdf réplication])&lt;br /&gt;
# Mise en place de 2 containers &#039;&#039;frontends&#039;&#039; load balancer [[HAProxy]] ou [[Nginx]] en mode SSL terminaison ([[HAProxy#Configuration_en_SSL_Terminaison|instructions]])&lt;br /&gt;
# Génération et rafraichissement des certificats SSL avec [[Let&#039;s Encrypt]]&lt;br /&gt;
* Amélioration des fonctionnalités. En particulier, considérez les points suivants :&lt;br /&gt;
** Renseignement de la [[Privacy policy guidelines|notice relative à la protection de la vie privée]].&lt;br /&gt;
** Gestion de la concurrence et de la reprise sur panne avec des transactions ACID&lt;br /&gt;
** Gestion de l&#039;internationalisation (i18n) des applications web et mobiles. &#039;&#039;Remarque : vous pouvez utiliser les principes et outils appris dans l&#039;UE Communication Langagière.&#039;&#039;&lt;br /&gt;
** Gestion des contenus multimedia (photos, videos, docs ...) avec un FileStorageService ([https://www.callicoder.com/spring-boot-file-upload-download-rest-api-example/ lien]) &lt;br /&gt;
** Gestion adaptative des contenus multimedia (photos) avec un ThumbnailService (montrez l&#039;amélioration des performances avec Gatling)&lt;br /&gt;
** Gestion du cache client pour les photos et les thumbnails avec Cache-Control et ETag (montrez l&#039;amélioration des performances avec Gatling)&lt;br /&gt;
** Utilisation de mode Lazy pour les chargements (fetch) des collections et des médias (CLOB,BLOB).&lt;br /&gt;
** Génération d&#039;une application mobile [[Ionic]] avec [https://github.com/oktadeveloper/generator-jhipster-ionic generator-jhipster-ionic] (inclure les plugins [[Apache Cordova]] utiles à votre projet).&lt;br /&gt;
** Utilisation d&#039;un cache ([https://www.jhipster.tech/using-cache/ préconisé par JHipster])&lt;br /&gt;
* Ajout éventuel de fonctionnalités non prioritaires. De façon facultative, vous pourrez ajouter au prototype précédent quelques unes des fonctionnalités suivantes :&lt;br /&gt;
** Stockage externalisé des contenus multimedia par des [[Content Delivery Network]]s ([[Amazon S3]], Azure, Akamaï ...) &lt;br /&gt;
** Génération de documents PDF à partir des valeurs de champs d&#039;une entité ou du collection d&#039;entités (exemple d&#039;applications : facture, dossard coureur, export RGPD, ...) [https://www.stackextend.com/java/generate-pdf-document-using-jasperreports-and-spring-boot/ lien]&lt;br /&gt;
** Import et export massifs de collections d&#039;entités en format CSV, JSON.&lt;br /&gt;
** Suivi du &#039;&#039;click stream&#039;&#039; avec des Filters/Aspects en vue d&#039;une analyse &#039;&#039;[[Big Data]]&#039;&#039; avec [[Spark]] (&#039;&#039;Click Analytics&#039;&#039;, [https://github.com/pmerienne/iterative-cf Recommender System]).&lt;br /&gt;
** Gestion rudimentaire d&#039;une interface vocale avec un serveur vocal [[EA2012-Serveux Vocaux|VoiceXML]].&lt;br /&gt;
** Utilisation de [[OAuth2]] ou [[OpenID]] pour le login et l&#039;accès aux API REST avec [[Keycloak]] ou [[OKTA]].&lt;br /&gt;
** Utilisation du service de paiement Stripe.com en mode développeur&lt;br /&gt;
** Chat avec un opérateur du helpdesk (texte et/ou audio avec [[WebRTC]])&lt;br /&gt;
** Chatbot du helpdesk (comme [https://github.com/ovh-ux/ovh-chatbot ovh-chatbot])&lt;br /&gt;
** Gestion d&#039;un [[CaaS]] Docker privé avec [[Minikube]], [[Kubernetes]], [[Rancher]] ou [[Docker Swarm]]&lt;br /&gt;
** Traduction automatique et à la volée des champs des produits (nom, description, commentaires et avis) en fonction de la langue de l&#039;usager, au moyen d&#039;un service tiers.&lt;br /&gt;
** Script périodique (crontab) de dump et de backup distant de la base MySQL.&lt;br /&gt;
** Gestion asynchrone et transactionnelle de l&#039;envoi des courriels via le MailService, Thymeleaf et des taches @Scheduled&lt;br /&gt;
** Gestion asynchrone et transactionnelle de l&#039;envoi de SMS (si le destinataire a un compte gratuit pour l&#039;auto-réception de SMS)&lt;br /&gt;
&lt;br /&gt;
Remarque: certaines fonctionnalités sont assez indépendantes du noyau du projet : elles peuvent être mis en place dès le départ de l&#039;étape 1.&lt;br /&gt;
&lt;br /&gt;
====Le déploiement en continu====&lt;br /&gt;
Dès le démarrage, votre projet devra être géré selon les principes du &#039;&#039;[[DevOps]]&#039;&#039; : chaque version devra être déployé sur votre infrastructure de production en minimum de temps et sans interuption de services. Vous devez mettre en place des procédures de mise à jour des artifacts de l&#039;application en mode rolling update et fast rollback ([http://martinfowler.com/bliki/BlueGreenDeployment.html lien]).&lt;br /&gt;
&lt;br /&gt;
Remarques pour la mise en ligne :&lt;br /&gt;
NE COMMITEZ JAMAIS vos credentials Cloud (AWS, Azure, Google ...) DANS UN DEPOT PUBLIC !!!!!&lt;br /&gt;
&lt;br /&gt;
Votre compte serait utilisé pour créer plusieurs centaines de VMs et vous serez lourdement facturés ([http://readwrite.com/2014/04/15/amazon-web-services-hack-bitcoin-miners-github bitcoins], DDoD, ...) !&lt;br /&gt;
&lt;br /&gt;
Vous devez obligatoirement mettre en place les points suivants dès le démarrage du projet :&lt;br /&gt;
* Déploiement et retrait de l&#039;application sur/de la plateforme cloud publique ou privée (UFR, Amazon, Azure, Google, [https://www.jhipster.tech/heroku/ Heroku])&lt;br /&gt;
* Performances (résultat du injection de charge avec [[Apache JMeter]] ou [[Gatling]]) : Astuce: utiliser les images [[Docker]].&lt;br /&gt;
* Reprise sur panne simple et alerte des &#039;&#039;ops&#039;&#039; avec [[Monit]] (ie relance simple du serveur en cas de &amp;quot;plantage&amp;quot;).&lt;br /&gt;
* Script &amp;quot;basique&amp;quot; pour le rolling update des composants répliqués (application, base de données, serveurs de mail, load balancer). Remarque: [[Kubernetes]] gère les rolling updates ([https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/ lien]).&lt;br /&gt;
* Script &amp;quot;basique&amp;quot; pour le Fast forward (en cas de panne des composants dernièrement mis à jour).&lt;br /&gt;
&lt;br /&gt;
Vous devez optionnellement mettre en place les points suivants:&lt;br /&gt;
* Déploiement avec [[Docker]] (dockerfile et docker-compose) pour l&#039;application eCom. JHipster génère le dockerfile de l&#039;application et quelques descripteurs docker-compose.&lt;br /&gt;
* Préparation d&#039;images [[Docker]]&lt;br /&gt;
* Supervision des VMs du système déployé avec un de ces systèmes : [[Nagios]], [[Shinken]], [[Icinga]], [[Filter]]s, [[Tomcat Valve]]s, [[Glimpse]], [[Ganglia]], [[Elasticsearch]] + [[ElastAlert]], [[Hawkular]], [[Telegraf]] + [[InfluxDB]] + [[Grafana]], [[Prometheus]] ...* Injection de pannes avec [[Netflix Simian Army]]&lt;br /&gt;
* Déploiement de l&#039;application eCOM distribuée sur plusieurs VM [[Ubuntu Core]] avec [[Vagrant]] et VirtualBox, Azure, Amazon EC2, [[Google&#039;s Compute Engine]] ...&lt;br /&gt;
* Validation des services REST avec [[Swagger]]&lt;br /&gt;
&lt;br /&gt;
==Réalisations IHM==&lt;br /&gt;
===Conception===&lt;br /&gt;
La conception de la partie IHM du projet sera principalement composée : &lt;br /&gt;
* Des mécanismes pour intégrer les besoins des utilisateurs&lt;br /&gt;
* Des modèles (tâches, IHMA)&lt;br /&gt;
* De la charte graphique&lt;br /&gt;
* De l&#039;explication des choix de conception faits&lt;br /&gt;
&lt;br /&gt;
===Développement===&lt;br /&gt;
Vous êtes libres des technologies à utiliser pour le développement de la partie IHM de l&#039;application. Cependant, vous devez être capable de justifier vos choix. La partie IHM doit être distincte du noyau fonctionnel. Les codes de la partie présentation et du contenu de l&#039;IHM doivent également être séparés. Veuillez aux noms que vous attribuerez. Les &amp;quot;zones&amp;quot; définies dans vos IHMA doivent être facilement identifiables dans le code que vous réalisez (ex : ID des DIV).&lt;br /&gt;
&lt;br /&gt;
L&#039;IHM des utilisateurs différents peut être gérée différemment. Par exemple, l&#039;IHM de l&#039;administrateur de l&#039;application peut être une Interface en ligne de commande (pour l&#039;initialisation du catalogue du service, l&#039;ajout de nouveaux produits). Vous pouvez utiliser l&#039;interface EJB facade directement ou bien une interface [[RESTful]] en utilisant directement [[Curl]]).&lt;br /&gt;
&lt;br /&gt;
===Evaluation des IHMs===&lt;br /&gt;
Une IHM doit être évaluée par au moins deux types d&#039;évaluation (en plus de l&#039;évaluation fonctionnelle) :&lt;br /&gt;
* évaluation experte pour vérifier que les principes fondamentaux d&#039;utilisabilité sont respectés&lt;br /&gt;
* tests utilisateur pour étudier comment vos utilisateurs utilise dans leurs contextes d&#039;utilisation votre interface&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
==Transparents de cours==&lt;br /&gt;
&lt;br /&gt;
* Cours JEE/EJB(NDP) [[Media:EJB-ECOM2010.pdf]]&lt;br /&gt;
* Cours JEE tiers presentation (SCB) : [https://dl.dropboxusercontent.com/u/9706615/JEE_tiers_presentation.pdf url]&lt;br /&gt;
* Cours GWT (SCB) : [https://dl.dropboxusercontent.com/u/9706615/cours_GWT.pdf url]&lt;br /&gt;
* Cours maven (DD) : [http://membres-liglab.imag.fr/donsez/cours/maven.pdf url]&lt;br /&gt;
* Cours versionning (DD) : [http://membres-liglab.imag.fr/donsez/cours/version.pdf url]&lt;br /&gt;
* Cours subversion (DD) : [http://membres-liglab.imag.fr/donsez/cours/subversion.pdf url]&lt;br /&gt;
* Cours forge (DD) : [http://membres-liglab.imag.fr/donsez/cours/forge.pdf url]&lt;br /&gt;
* Cours http (DD) : [http://membres-liglab.imag.fr/donsez/cours/http.pdf url]&lt;br /&gt;
* Cours servlet (DD) : [http://membres-liglab.imag.fr/donsez/cours/servletjsp.pdf url]&lt;br /&gt;
* Cours IHM (SC) : [[Media:ECOMCours2018-2019.pdf]]&lt;br /&gt;
* Annexe Cours IHM (SC) : [[Media:Annexe1-HeuristiqueNielsen.pdf]], [[Media:Annexe2-KMADe.pdf]], [[Media:Annexe3-Placement.pdf]], [[Media:Annnexe4-Accesssibilité.pdf]]&lt;br /&gt;
&lt;br /&gt;
==Doc utiles==&lt;br /&gt;
* [http://lig-membres.imag.fr/donsez/cours/eaumlrel.pdf Transformation UML vers Relationnel]&lt;br /&gt;
* [http://www.theserverside.com/news/thread.tss?thread_id=55191 JPA implementation patterns ]&lt;br /&gt;
* Présentation sur le Cloud Computing : http://erods.liglab.fr/icar2013/programme.html&lt;br /&gt;
&lt;br /&gt;
===Quelques livres et technologies===&lt;br /&gt;
&lt;br /&gt;
REMARQUE: les livres sur ces technologies se périment très vite.&lt;br /&gt;
&lt;br /&gt;
====[[Spring]]====&lt;br /&gt;
* Bons tutoriels sur https://www.baeldung.com/rest-with-spring-series/&lt;br /&gt;
* Les manuels de références de Spring https://spring.io/projects/spring-boot#overview&lt;br /&gt;
* Craig Walls, Spring in Action, Fifth Edition, https://www.manning.com/books/spring-in-action-fifth-edition&lt;br /&gt;
&lt;br /&gt;
====[[JHipster]]====&lt;br /&gt;
* Matt Raible, The JHipster Mini-Book 4.5 (GRATUIT) https://www.infoq.com/minibooks/jhipster-4x-mini-book&lt;br /&gt;
* Deepu K Sasidharan, Sendil Kumar N, Full Stack Development with JHipster, (10 $ en promotion) March 2018, https://www.packtpub.com/application-development/full-stack-development-jhipster &lt;br /&gt;
&lt;br /&gt;
====JavaEE====&lt;br /&gt;
*  [http://shop.oreilly.com/product/0636920030614.do Arun Gupta, Java EE 7 Essentials, Enterprise Developer Handbook, O&#039;Reilly Media, August 2013] ([https://github.com/javaee-samples/javaee7-samples + 200 exemples de projets Maven])&lt;br /&gt;
* Building, Packaging, and Distributing Java EE Applications in 2017 https://dzone.com/articles/building-packaging-and-distributing-java-ee-apps-in-2017-part-2&lt;br /&gt;
&lt;br /&gt;
====REST====&lt;br /&gt;
* The RESTful CookBook, How to do stuff RESTful, http://restcookbook.com&lt;br /&gt;
* [http://shop.oreilly.com/product/0636920028925.do Bill Burke, RESTful Java with JAX-RS 2.0, 2nd Edition, Designing and Developing Distributed Web Services, Publisher: O&#039;Reilly Media, Final Release Date: November 2013] ([https://github.com/oreillymedia/restful_java_jax-rs_2_0 source code of examples])&lt;br /&gt;
&lt;br /&gt;
===Web===&lt;br /&gt;
====[[Responsive Web Design]]====&lt;br /&gt;
* Matthew Carver, The Responsive Web, Manning, October 2014, ISBN: 9781617291241 http://www.manning.com/carver/ ([http://www.manning.com/carver/TRWSourceCode.zip source code])&lt;br /&gt;
&lt;br /&gt;
====[[Bootstrap]]====&lt;br /&gt;
* Jake Spurlock, Bootstrap, Responsive Web Development, Pub: O&#039;Reilly Media, http://shop.oreilly.com/product/0636920027867.do ([https://github.com/whyisjake/Bootstrap source code])&lt;br /&gt;
&lt;br /&gt;
====[[Ember]]====&lt;br /&gt;
&lt;br /&gt;
====Tests unitaires====&lt;br /&gt;
* [[Selenium]]&lt;br /&gt;
&lt;br /&gt;
====Intégration en Continue====&lt;br /&gt;
* [[Jenkins]]&lt;br /&gt;
&lt;br /&gt;
====Continuous Delivery====&lt;br /&gt;
* https://continuousdelivery.com/&lt;br /&gt;
&lt;br /&gt;
====Misc====&lt;br /&gt;
* Eric Ries, The [[Lean Startup]], http://theleanstartup.com/&lt;br /&gt;
&lt;br /&gt;
====Questionnaires pour les sites web====&lt;br /&gt;
* [[Media:Questionnaire copy.pdf]]&lt;br /&gt;
&lt;br /&gt;
====Evaluations des interfaces====&lt;br /&gt;
*[[Media:Evaluation Heuristiques Nielsen.pdf]]&lt;br /&gt;
* [http://blocnotes.iergo.fr/concevoir/les-outils/sus-pour-system-usability-scale/]&lt;br /&gt;
*[[Media:System-Usability-ScaleLogicielComplet.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Organisation===&lt;br /&gt;
* [[Trello]]&lt;br /&gt;
* [[Slack]]&lt;br /&gt;
* [[Waffle.io]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=ECOM-1F0_1819_BTB&amp;diff=44900</id>
		<title>ECOM-1F0 1819 BTB</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=ECOM-1F0_1819_BTB&amp;diff=44900"/>
		<updated>2019-02-11T08:42:57Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* L&amp;#039;équipe et leurs rôles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ECOM-1FO|&amp;lt;&amp;lt;&amp;lt;&amp;lt; Retour vers la page ECOM 2018-2019]]&lt;br /&gt;
&lt;br /&gt;
= Description du projet =&lt;br /&gt;
Le chauffage individuel au bois non performant est une des causes majeures de pics de pollution de la région de Grenoble en période hivernale. Celui-ci est du à des émissions de particules dues à une mauvaise combustion venant d&#039;appareils anciens, d&#039;un défaut d&#039;entretien ou de bois trop humide. Afin de lutter contre ce phénomène, [https://www.fibois-aura.org/ FIBOIS AURA], [https://www.lametro.fr/ Grenoble Alpes Métropole] et le [http://parc-du-vercors.fr/fr_FR/index.php PNR du Vercors] ont décidé de mettre en place une plateforme afin d&#039;encourager de manière innovante les consommateurs à se tourner vers des professionnels en capacité de leur fournir un produit de qualité, sec. L&#039;objectif est donc de regrouper la demande de bois en bûche des particuliers et de l&#039;orienter vers des professionnels en capacité de livrer du combustible de qualité.&lt;br /&gt;
&lt;br /&gt;
C&#039;est dans cette démarche qu&#039;ont été contactés 5 étudiants de [https://www.polytech-grenoble.fr/menu-principal/formations/informatique-ex-ricm-/ 1F05 à Polytech Grenoble] afin de mettre en place cette plateforme dans le cadre de leur enseignement portant sur le [https://air.imag.fr/index.php/ECOM-1FO e-commerce].&lt;br /&gt;
&lt;br /&gt;
Ce projet consiste dans le développement d&#039;un prototype d&#039;application ayant pour fonction la prise de commande en ligne par des consommateurs, le groupage des commandes par secteurs géographiques, le choix de fournisseurs professionnels, l&#039;optimisation logistique pour la livraison et enfin des propositions de services associés.&lt;br /&gt;
&lt;br /&gt;
* [https://air.imag.fr/index.php/ECOM-1F0_1819_BTB_Scenarios_d&#039;usage Scénarios d&#039;usages] livrés par le client en début de projet.&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| NOM Prénom&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Mail&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Rôle&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[ECOM 1F0 2018-19 BTB Amina BOUCHERIMA | BOUCHERIMA Amina]]&lt;br /&gt;
 | amina.boucherima@etu.univ-grenoble-alpes.fr&lt;br /&gt;
 | Développeur - Front end&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | zoran.chanet@etu.univ-grenoble-alpes.fr&lt;br /&gt;
 | Développeur - Back End&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ECOM 1F0 2018-19 BTB Najwa EZ-ZINE | EZ-ZINE Najwa]]&lt;br /&gt;
 | najwa.ez-zine@etu.univ-grenoble-alpes.fr&lt;br /&gt;
 | Développeur - Back End&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ECOM 1F0 2018-19 BTB Enzo MOLION | MOLION Enzo]]&lt;br /&gt;
 | enzo.molion@etu.univ-grenoble-alpes.fr&lt;br /&gt;
 | Scrum Master - Front End&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ECOM 1F0 2018-19 BTB Léo VALETTE | VALETTE Léo]]&lt;br /&gt;
 | leo.valette@etu.univ-grenoble-alpes.fr&lt;br /&gt;
 | Chef de projet - Intégration Continue - Back End&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
= Gestion d&#039;équipe et de projet =&lt;br /&gt;
Ayant un délai court et une équipe peu nombreuse, nous avons adopté la méthode Scrum pour la gestion du projet. &lt;br /&gt;
&lt;br /&gt;
En tant que chef de projet, Léo VALETTE a joué le rôle de &#039;&#039;Product Owner&#039;&#039;, et Enzo MOLION a été désigné &#039;&#039;Scrum Master&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de cette méthode ont été mis en place des Sprints de 3 semaines et des &amp;quot;&#039;&#039;daily meetings&#039;&#039;&amp;quot; hebdomadaires. Il a été décidé d&#039;utiliser le site web de gestion de tableau kanban [https://trello.com Trello]. &lt;br /&gt;
&lt;br /&gt;
L&#039;équipe a ensuite été divisée en deux pôles : &#039;&#039;frontend&#039;&#039; et &#039;&#039;backend&#039;&#039;. Ce découpage a été fait de manière à séparer les binômes historiques. De plus, Léo VALETTE a été attribué au &#039;&#039;backend&#039;&#039; mais réalise également l&#039;interface avec le &#039;&#039;frontend&#039;&#039; et a ensuite été pour cette raison désigné responsable de l&#039;intégration continue.&lt;br /&gt;
&lt;br /&gt;
=Technologies=&lt;br /&gt;
* Backend&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB JHipster | JHipster]]&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB Maven | Maven]]&lt;br /&gt;
* Frontend&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB Angular | Angular ]]&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB Angular Material | Angular Material ]]&lt;br /&gt;
* DevOps&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB GitLab CI/CD | GitLab CI/CD ]]&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB JHipster Registry | JHipster Registry ]]&lt;br /&gt;
* Gestion de projet&lt;br /&gt;
** [[ECOM 1F0 2018-19 BTB Pomodoro | Pomodoro ]] (abandonné avant mise en place)&lt;br /&gt;
&lt;br /&gt;
== Outils ==&lt;br /&gt;
&lt;br /&gt;
* [https://GitLab.com &#039;&#039;Gitlab&#039;&#039;] : pour le dépôt, pour la documentation, l&#039;intégration en continu. Notre dépôt [https://gitlab.com/BruleTaBuche/eCOM ici]&lt;br /&gt;
* [https://trello.com &#039;&#039;Trello&#039;&#039;] : pour la gestion des sprints et des user stories. Notre Trello [https://trello.com/bruletabuche ici]&lt;br /&gt;
* [https://www.google.fr/intl/fr/docs/about/ &#039;&#039;Suite Google Drive&#039;&#039;] : pour la répartition et la gestion des tâches hors code (rédaction de documents etc)&lt;br /&gt;
&lt;br /&gt;
= Livrables =&lt;br /&gt;
== Journal ==&lt;br /&gt;
&lt;br /&gt;
* [[ECOM-1FO_1819_BTB_L9_LOG| Journal de l&#039;équipe]] &lt;br /&gt;
* [[ECOM 1F0 2018-19 BTB Amina BOUCHERIMA | Journal Amina BOUCHERIMA]]&lt;br /&gt;
* [[ECOM 1F0 2018-19 BTB Zoran CHANET | Journal Zoran CHANET]]&lt;br /&gt;
* [[ECOM 1F0 2018-19 BTB Najwa EZ-ZINE | Journal Najwa EZ-ZINE]]&lt;br /&gt;
* [[ECOM 1F0 2018-19 BTB Enzo MOLION | Journal Enzo MOLION]]&lt;br /&gt;
* [[ECOM 1F0 2018-19 BTB Léo VALETTE | Journal Léo VALETTE]]&lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
* [[Media:BTB_Audit1.pdf | Slides Audit 1 (PDF)]]&lt;br /&gt;
* [[Media:BTB_Audit2.pdf | Slides Audit 2 (PDF)]]&lt;br /&gt;
&lt;br /&gt;
== Dossier de conception système ==&lt;br /&gt;
[[Media:ECOM_BTB_DCS.pdf |Dossier de conception système]]&lt;br /&gt;
&lt;br /&gt;
== Analyse des scénarios clients ==&lt;br /&gt;
* [https://air.imag.fr/index.php/ECOM-1F0_1819_BTB_Scenarios_d&#039;usage Scénarios d&#039;usages] livrés par le client en début de projet.&lt;br /&gt;
* [[Media:BTB_Liste_des_fonctionnalités.pdf | Liste des fonctionnalités ]] interprétée des scénarios.&lt;br /&gt;
* [[Media:BTB_User_stories.pdf | &#039;&#039;User stories&#039;&#039; ]]&lt;br /&gt;
&lt;br /&gt;
== Maquettes ==&lt;br /&gt;
=== Scénario 1 ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:BTB_MaquetteAngular1.png| Maquette 1&lt;br /&gt;
File:BTB_MaquetteAngular2.png| Maquette 2&lt;br /&gt;
File:BTB_MaquetteAngular3.png| Maquette 3&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRS ==&lt;br /&gt;
[[ECOM-1FO_1819_BTB_L5_SRS | SRS]]&lt;br /&gt;
&lt;br /&gt;
== Diagramme UML ==&lt;br /&gt;
===Architecture===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:BTB_Context_Diagram.png| Diagramme de contexte&lt;br /&gt;
File:BTB_Vue_Logique_Haut_Niveau.png| Vue logique de haut niveau&lt;br /&gt;
File:BTB_Vue_Logique_Détaillée_App.png| Vue logique de détaillée App&lt;br /&gt;
File:BTB_Vue_Logique_Détaillée_Serveur.png| Vue logique détaillée Serveur&lt;br /&gt;
File:BTB_Vue_Dynamique_1.png| Vue dynamique 1&lt;br /&gt;
File:BTB_Vue_Dynamique_2.png| Vue dynamique 2&lt;br /&gt;
File:BTB_Vue_Dynamique_3.png| Vue dynamique 3&lt;br /&gt;
File:BTB_Vue_Physique.png| Vue physique&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===Schéma relationnel===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;---File:BTB_Schema_Relationnel.png| Schéma relationnel--!&amp;gt;&amp;lt;--- ANCIEN SCHEMA RELATIONNEL --!&amp;gt;&lt;br /&gt;
File:Schema_Base_Donnee.png| Schéma relationnel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèles des tâches ==&lt;br /&gt;
===Modèles des tâches===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:BTB_Modele_de_Taches.png |&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
===IHM abstraite===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:BTB_Abstract_IHM.png|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dépôt Git ==&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/BruleTaBuche/eCOM Dépôt GitLab]&lt;br /&gt;
&lt;br /&gt;
== Application en ligne ==&lt;br /&gt;
&lt;br /&gt;
[https://ecom-btb.herokuapp.com/ website]&lt;br /&gt;
&lt;br /&gt;
[https://www.monprojet.fr/api/ API OpenAPI]&lt;br /&gt;
&lt;br /&gt;
=== Les heuristiques de NIELSEN ===&lt;br /&gt;
Voici les commentaires que nous pouvons faire pour analyser l&#039;IHM de notre site selon les 10 heuristiques de Nielsen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Visibilité de l&#039;état du système&lt;br /&gt;
&lt;br /&gt;
     Le système devrait toujours tenir les utilisateurs informés de ce qui se passe, grâce à une rétroaction appropriée dans un délai raisonnable.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Pas de rétroaction durant le temps d&#039;attente suite à un appel à l&#039;API&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Correspondance entre le système et le monde réel&lt;br /&gt;
&lt;br /&gt;
     Le système devrait parler la langue de l&#039;utilisateur, avec des mots, des phrases et des concepts familiers à l&#039;utilisateur, plutôt que des termes orientés système. Suivez les conventions du monde réel, en faisant apparaître les informations dans un ordre naturel et logique.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Oui, nous avons respecté le langage métier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Contrôle et liberté de l&#039;utilisateur&lt;br /&gt;
&lt;br /&gt;
     Les utilisateurs choisissent souvent les fonctions du système par erreur et ont besoin d&#039;une &amp;quot;sortie de secours&amp;quot; clairement marquée pour quitter l&#039;état non désiré sans avoir à passer par un dialogue prolongé. Support annuler et refaire.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Nous n&#039;avons pas implémenter de bouton retour (mais c&#039;est assez rapide à ajouter)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Cohérence et normes&lt;br /&gt;
&lt;br /&gt;
     Les utilisateurs ne devraient pas avoir à se demander si des mots, des situations ou des actions différents signifient la même chose. Suivre les conventions de la plate-forme.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; L&#039;interface est suffisamment simple pour ne présenter aucune ambigüité &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Prévention des erreurs&lt;br /&gt;
&lt;br /&gt;
     Encore mieux qu&#039;un bon message d&#039;erreur est une conception soignée qui empêche qu&#039;un problème ne se produise en premier lieu. Éliminez les conditions sujettes aux erreurs ou vérifiez-les et présentez aux utilisateurs une option de confirmation avant qu&#039;ils ne s&#039;engagent dans l&#039;action.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt;  Hors manipulation manuelle d&#039;url, qui ne pose qu&#039;un problème de page vide, la conception est faite de manière à éviter toute erreur possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Reconnaissance plutôt que rappel&lt;br /&gt;
&lt;br /&gt;
     Minimisez la charge mémoire de l&#039;utilisateur en rendant visibles les objets, les actions et les options. L&#039;utilisateur ne devrait pas avoir à se souvenir des informations d&#039;une partie du dialogue à l&#039;autre. Les instructions d&#039;utilisation du système doivent être visibles ou facilement récupérables chaque fois que cela est approprié.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Le dialogue n&#039;étant composé que de deux fenêtre, le problème ne se pose pas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flexibilité et efficacité d&#039;utilisation&lt;br /&gt;
&lt;br /&gt;
     Les accélérateurs - invisibles pour l&#039;utilisateur novice - peuvent souvent accélérer l&#039;interaction pour l&#039;utilisateur expert, de sorte que le système peut répondre à la fois aux besoins des utilisateurs inexpérimentés et expérimentés. Permettre aux utilisateurs de personnaliser les actions fréquentes.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Par construction notre solution ne fournit pas de mode expert : ce scénario est destiné à un utilisateur novice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Design esthétique et minimaliste&lt;br /&gt;
&lt;br /&gt;
     Les dialogues ne doivent pas contenir d&#039;informations non pertinentes ou rarement nécessaires. Chaque unité d&#039;information supplémentaire dans un dialogue entre en concurrence avec les unités d&#039;information pertinentes et diminue leur visibilité relative.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Actuellement est systématiquement affiché la liste des services d&#039;un producteur, systématiquement vide puisque cette fonctionnalité n&#039;a pas été implémentée&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Aider les utilisateurs à reconnaître, diagnostiquer et récupérer les erreurs.&lt;br /&gt;
&lt;br /&gt;
     Les messages d&#039;erreur doivent être rédigés dans un langage simple (pas de codes), indiquer précisément le problème et proposer une solution constructive.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Il n&#039;existe pas de oage d&#039;erreur, en cas d&#039;accès incorrect, une page sans contenu est affichée.&lt;br /&gt;
&lt;br /&gt;
* Aide et documentation&lt;br /&gt;
&lt;br /&gt;
     Même s&#039;il est préférable que le système puisse être utilisé sans documentation, il peut être nécessaire de fournir de l&#039;aide et de la documentation. Ces informations doivent être faciles à rechercher, axées sur la tâche de l&#039;utilisateur, énumérer les mesures concrètes à prendre et ne pas être trop volumineuses.&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; Aucune documentation n&#039;est fournie.&lt;br /&gt;
&lt;br /&gt;
== Evaluation qualité du projet ==&lt;br /&gt;
[https://sonarcloud.io/dashboard?id=org.fibois38.lbb%3Abtb Rapports SonarQube]&lt;br /&gt;
&lt;br /&gt;
== Evaluation économique du projet ==&lt;br /&gt;
===Nombre d&#039;heures travaillées===&lt;br /&gt;
[[Media:ECOM_BTB_Heures_travaillees.pdf|Nombre d&#039;heures travaillées]]&lt;br /&gt;
&lt;br /&gt;
=== COCOMO ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Evaluation économique du projet ===&lt;br /&gt;
Afin de procéder à l&#039;analyse économique de notre projet, nous avons calculé son nombre de lignes de code (dans src, webpack et dans nos fichiers de configuration) qui est de 35721.&lt;br /&gt;
&lt;br /&gt;
Via cette [https://stackoverflow.com/jobs/salary calculatrice], nous avons estimé les salaires des membres de l&#039;équipe. En considérant que nous sommes ingénieurs fullstack, cela revient à 2950$ par mois et par personne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ECOM_BTB_COCOMO.PNG|800px|center|thumb|Cocomo Brûle ta Bûche !]]&lt;br /&gt;
&lt;br /&gt;
== Evaluation de la cybersécurité du projet (option) ==&lt;br /&gt;
* [[Media:ECOM-1FO_1819_BTB_RGPD_Report.pdf]] (1 page de type checklist)&lt;br /&gt;
&lt;br /&gt;
== Evaluation des performances (option) ==&lt;br /&gt;
* [[Media:ECOM-1FO_1819_BTB_YYYYYY.pdf]] (résultat des injections de charge JMeter, Gatling, ...)&lt;br /&gt;
&lt;br /&gt;
== Gestion des risques (option) ==&lt;br /&gt;
* [[Media:ECOM-1FO_1819_BTB_YYYYYY.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Slides de présentation conception ==&lt;br /&gt;
* [[Media:BTB_Audit2.pdf | Slides Audit 2 (PDF)]]&lt;br /&gt;
&lt;br /&gt;
== Slides de présentation finale ==&lt;br /&gt;
*[[Media:ECOM_BTB_soutenance.pdf|soutenance finale]]&lt;br /&gt;
&lt;br /&gt;
== Auto-évaluation ==&lt;br /&gt;
* [[Media:ECOM_BTB_Auto-evaluation.pdf|Auto-évaluation]]&lt;br /&gt;
&lt;br /&gt;
== Slides de présentation client ==&lt;br /&gt;
* [[Media:BTB_Audit1.pdf | Slides Audit 1 (PDF)]]&lt;br /&gt;
&lt;br /&gt;
== Glossaire ==&lt;br /&gt;
&#039;&#039;&#039;Essence&#039;&#039;&#039; :  Type d&#039;un bois (exemple : If, Hêtre, Chêne...)&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=RICM4_2017_2018_-_Nucleo&amp;diff=44899</id>
		<title>RICM4 2017 2018 - Nucleo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=RICM4_2017_2018_-_Nucleo&amp;diff=44899"/>
		<updated>2019-02-11T08:41:36Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Project presentation =&lt;br /&gt;
The goal of this project is to be able to re-program the NUCLEO STM32F446RE from a remote place, using wifi.&lt;br /&gt;
&lt;br /&gt;
An user must be able to send a binary program to the Wifi Chipset ESP8266EX plugged on the NUCLEO STM32F446RE. That last one receives the binary, flashes it, and execute its new program.&lt;br /&gt;
&lt;br /&gt;
Then and if we have time, we can look forward on the security issues of this system and try to fix them.&lt;br /&gt;
= Equipment  =&lt;br /&gt;
*OLIMEXINO-328&lt;br /&gt;
*NUCLEO STM32F446RE&lt;br /&gt;
*Wifi Chipset ESP8266EX&lt;br /&gt;
*Two computers with the sofware Arduino and Mbed.&lt;br /&gt;
= Team =&lt;br /&gt;
Members : &lt;br /&gt;
*[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
*[[User:Servan.Charlot | CHARLOT Servan]]&lt;br /&gt;
&lt;br /&gt;
Supervisor : &lt;br /&gt;
*[https://team.inria.fr/datamove/files/2017/04/auguste.jpeg Olivier RICHARD]&lt;br /&gt;
&lt;br /&gt;
= Progress =&lt;br /&gt;
&lt;br /&gt;
== Week 1 (15/01/18) == &lt;br /&gt;
This subject was assigned to us.&lt;br /&gt;
&lt;br /&gt;
Received the cards. (But one of them was broken)&lt;br /&gt;
&lt;br /&gt;
Discovering the cards and the documentation.&lt;br /&gt;
== Week 2 (22/01/18) ==&lt;br /&gt;
Testing codes samples on the cards to get familiar with the language.&lt;br /&gt;
== Week 3 (29/01/18) ==&lt;br /&gt;
Experimenting the input/outputs capacities of the cards, by redirecting power on some chosen pin to trigger a LED, or sending data on the serial port.&lt;br /&gt;
== Week 4 (05/02/18) ==&lt;br /&gt;
Linking the two cards together to simulate a serial connection between them. &lt;br /&gt;
&lt;br /&gt;
Then, sending data to one card (via the serial port of a computer) and see if we are able to receive it on the other one (by printing it on the serial port, connected to another computer).&lt;br /&gt;
== Week 5 (12/02/18) ==&lt;br /&gt;
Creating [[RICM4 2017 2018 - Nucleo/UML | UML diagrams]] and this page.&lt;br /&gt;
&lt;br /&gt;
Studying the ESP8266EX documentation and finding a way to to connect it to the Nucleo.&lt;br /&gt;
== Week 6 (26,27/02/18) ==&lt;br /&gt;
Configuration of the ESP8266.&lt;br /&gt;
&lt;br /&gt;
Hardwiring : (according to [https://github.com/jeelabs/esp-link/blob/master/FLASHING.md jeelabs ESP-link documentation], esp-01 device)&lt;br /&gt;
*URXD: connect to TX of microcontroller&lt;br /&gt;
*UTXD: connect to RX of microcontroller&lt;br /&gt;
*GPIO0: connect to RESET of microcontroller&lt;br /&gt;
*GPIO2: optionally connect green LED to 3.3V (indicates wifi status)&lt;br /&gt;
*GND: connect to GND of microcontroller&lt;br /&gt;
*VCC+CH-PD: connect to 3v3 output of microcontroller&lt;br /&gt;
Trying to flash [https://github.com/jeelabs/esp-link/releases/tag/V3.0.14 esp-link-v3.0.14] onto the esp8266ex (512KB flash size, 40m frequency), using [https://github.com/espressif/esptool esptool.py] (if strangely installed, esptool.py is to be found in ~/.local/lib/python2.7/site-packages), following those steps :&lt;br /&gt;
*flash boot_v1.X.bin from the official SDK or from the release tgz to 0x00000&lt;br /&gt;
*flash user1.bin to 0x01000&lt;br /&gt;
*flash esp_init_data_default.bin from the official SDK or from the tgz to 0x7C000&lt;br /&gt;
*flash blank.bin from the official SDK or from the tgz to 0x7E000&lt;br /&gt;
 esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -fs 512KB -ff 40m \&lt;br /&gt;
   0x00000 boot_v1.6.bin 0x1000 user1.bin \&lt;br /&gt;
   0x7C000 esp_init_data_default.bin 0x7E000 blank.bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Error &amp;quot;A fatal error occurred: Failed to connect to Espressif device: Timed out waiting for packet header&amp;quot; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt;→ changing the baud rate doesn&#039;t seem to solve the issue&lt;br /&gt;
&lt;br /&gt;
New attempt based on [http://www.circuitsgallery.com/2016/01/getting-started-with-esp8266-esp-01.html these] connections :&lt;br /&gt;
*URXD: connect to TX of microcontroller&lt;br /&gt;
*UTXD: connect to RX of microcontroller&lt;br /&gt;
*GPIO0: connect to GND of microcontroller&lt;br /&gt;
*GND: connect to GND of microcontroller&lt;br /&gt;
*VCC+CH-PD: connect to 3v3 output of microcontroller&lt;br /&gt;
Exact same error.&lt;br /&gt;
&lt;br /&gt;
According to [https://github.com/jeelabs/esp-link/blob/master/FLASHING.md jeelabs ESP-link documentation] again, on both hardwiring models an attempt of putting GPIO2 to high in order to flash the ESP8266 was unsuccessfully made.&lt;br /&gt;
&lt;br /&gt;
-Ideas for next weeks-&lt;br /&gt;
*Adapt the avrflash to flash the stm32 card&lt;br /&gt;
*Ask the issue 205 man if he did it already&lt;br /&gt;
*Stm32 bootloader serial port forwarding ?&lt;br /&gt;
*See [https://bitbucket.org/hetii/stm32flash this] from [https://github.com/jeelabs/esp-link/issues/250 issue 250]&lt;br /&gt;
 Hello :)&lt;br /&gt;
 I wrote a patch for stm32flash that allow use it with esp-link.&lt;br /&gt;
 Currently its in dirty stage so no automatic baudrate/mode setting, but will try to add it in few days.&lt;br /&gt;
 So here are my steps to flash stm32f030:&lt;br /&gt;
     Clone and build my version of stm32flash from: https://bitbucket.org/hetii/stm32flash&lt;br /&gt;
     Pull boot0 high.&lt;br /&gt;
     Reset stm32 by low pulse on NRST.&lt;br /&gt;
     Run stm32 to flash your software.&lt;br /&gt;
     Change back boot0 to low and reset uC.&lt;br /&gt;
*Improve arduino software to directly upload the binary file to the card&lt;br /&gt;
&lt;br /&gt;
== Week 7 (5,6/03/18) ==&lt;br /&gt;
Trying to :&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Flash ESP-link on the ESP8266&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Flash STM32F446 via serial converter to USB&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Version 3.0.14 successfully flashed to new card (WeMos - ESP8266-12 ; connecting via microUSB). Access to [192.168.4.1] granted. Successfully added a web page to the ESP home.&lt;br /&gt;
&lt;br /&gt;
2. Trying to use [https://sourceforge.net/p/stm32flash/code/ci/master/tree/ stm32flash] to flash the Nucleo card. Hardwiring according to [http://stm32f4-discovery.net/2014/09/program-stm32f4-with-uart/ this].&lt;br /&gt;
&lt;br /&gt;
    BOOT0 pin set to HIGH (connected to 3v3 out). &lt;br /&gt;
    PB2 pin set to LOW (connected to GND). &lt;br /&gt;
    STM32F4 supports many UART combination. &lt;br /&gt;
        →TX: PA9; RX: PA10 (according to [http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf USART1 bootloader])&lt;br /&gt;
        TX: PB10; RX: PB11 (according to [http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf USART3 bootloader])&lt;br /&gt;
        TX: PC10; RX: PC11 (according to [http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf USART3 bootloader])&lt;br /&gt;
Bootloader mode seems confirmed as application does not load.&lt;br /&gt;
&lt;br /&gt;
Also, using the serial to USB converter :&lt;br /&gt;
    RX of the converter to TX of the microcontroller &lt;br /&gt;
    TX of the converter to RX of the microcontroller &lt;br /&gt;
    GND to GND of the microcontroller &lt;br /&gt;
    3v3 out to 3v3 in of the microcontroller&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Error &amp;quot;Failed to init device.&amp;quot; &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt;&lt;br /&gt;
→ changing the baud rate doesn&#039;t solve the problem ; removing ST-Link neither&lt;br /&gt;
&lt;br /&gt;
== Week 8 (12,13/03/18) ==&lt;br /&gt;
Preparing the [[Media:Projet_Nucleo_diapo_mi_parcours.pdf‎|oral]], and presenting it.&lt;br /&gt;
&lt;br /&gt;
Not to stay stuck on flashing the STM32 Nucleo card, trying to flash the Olimexino-328 card via Serial (then ESP-link).&lt;br /&gt;
&lt;br /&gt;
Hardwiring using USB to Serial adapter :&lt;br /&gt;
*GND pin of the adapter to GND pin of the microcontroller&lt;br /&gt;
*3v3 out pin of the adapter to 3v3 in pin of the microcontroller&lt;br /&gt;
*RX pin of the adapter to RX pin of the microcontroller&lt;br /&gt;
*TX pin of the adapter to TX pin of the microcontroller&lt;br /&gt;
*RST pin of the adapter to RST pin of the microcontroller&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Success on first attempt&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the same using avrdude instead of arduino&#039;s software :&lt;br /&gt;
 avrdude -b 57600 -p m328p -c arduino -P /dev/ttyUSB0 -U flash:w:Blink/Blink.cpp.hex &lt;br /&gt;
&lt;br /&gt;
Now trying to flash the same Olimexino-328 card via ESP-link.&lt;br /&gt;
&lt;br /&gt;
Hardwiring using WeMos :&lt;br /&gt;
*&lt;br /&gt;
  ./avrflash -v 192.168.4.1:23 Blink/Blink.ino &lt;br /&gt;
 Resetting AVR with http://192.168.4.1:23/pgm/sync&lt;br /&gt;
 *   Trying 192.168.4.1...&lt;br /&gt;
 * Connected to 192.168.4.1 (192.168.4.1) port 23 (#0)&lt;br /&gt;
 &amp;gt; POST /pgm/sync HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: 192.168.4.1:23&lt;br /&gt;
 &amp;gt; User-Agent: curl/7.47.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; &lt;br /&gt;
 * Operation timed out after 10001 milliseconds with 0 bytes received&lt;br /&gt;
 * Closing connection 0&lt;br /&gt;
 Error resetting AVR&lt;br /&gt;
&lt;br /&gt;
== Week 9 (19/03/18) ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Successful&amp;lt;/span&amp;gt; flash of the Olimexino-328 card via ESP-link. The problem came from a wiring mistake, because it is not the same wiring with the ESP-01 and the ESP-12.&lt;br /&gt;
&lt;br /&gt;
Wiring using ESP-12 :&lt;br /&gt;
*GND pin of the adapter to GND pin of the microcontroller&lt;br /&gt;
*3v3 out pin of the adapter to 3v3 in pin of the microcontroller&lt;br /&gt;
*URXD: connect to TX of microcontroller&lt;br /&gt;
*UTXD: connect to RX of microcontroller&lt;br /&gt;
*GPIO12: connect to RESET of microcontroller&lt;br /&gt;
*GPIO13: connect to ISP of LPC/ARM microcontroller (not used with Arduino/AVR)&lt;br /&gt;
&lt;br /&gt;
The flashing doesn&#039;t work with avrflash so we did it with avrdude, using the following command :&lt;br /&gt;
 avrdude -b 57600 -p m328p -c arduino -P net:192.168.4.1:23 -U flash:w:Blink.cpp.hex&lt;br /&gt;
&lt;br /&gt;
Output :&lt;br /&gt;
 ioctl(&amp;quot;TIOCMGET&amp;quot;): Inappropriate ioctl for device&lt;br /&gt;
 ioctl(&amp;quot;TIOCMGET&amp;quot;): Inappropriate ioctl for device&lt;br /&gt;
 &lt;br /&gt;
 avrdude: AVR device initialized and ready to accept instructions &lt;br /&gt;
 &lt;br /&gt;
 Reading | ################################################## | 100% 0.01s&lt;br /&gt;
 &lt;br /&gt;
 avrdude: Device signature = 0x1e950f (probably m328p)&lt;br /&gt;
 avrdude: NOTE: &amp;quot;flash&amp;quot; memory has been specified, an erase cycle will be performed &lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
 avrdude: erasing chip&lt;br /&gt;
 avrdude: reading input file &amp;quot;blinkLent.cpp.hex&amp;quot;&lt;br /&gt;
 avrdude: input file blinkLent.cpp.hex auto detected as Intel Hex&lt;br /&gt;
 avrdude: writing flash (1054 bytes):&lt;br /&gt;
 &lt;br /&gt;
 Writing | ################################################## | 100% 0.38s&lt;br /&gt;
 &lt;br /&gt;
 avrdude: 1054 bytes of flash written&lt;br /&gt;
 avrdude: verifying flash memory against blinkLent.cpp.hex:&lt;br /&gt;
 avrdude: load data flash data from input file blinkLent.cpp.hex:&lt;br /&gt;
 avrdude: input file blinkLent.cpp.hex auto detected as Intel Hex&lt;br /&gt;
 avrdude: input file blinkLent.cpp.hex contains 1054 bytes&lt;br /&gt;
 avrdude: reading on-chip flash data:&lt;br /&gt;
 &lt;br /&gt;
 Reading | ################################################## | 100% 0.58s&lt;br /&gt;
 &lt;br /&gt;
 avrdude: verifying ...&lt;br /&gt;
 avrdude: 1054 bytes of flash verified&lt;br /&gt;
 &lt;br /&gt;
 avrdude: safemode: Fuses OK (E:00, H:00, L:00)&lt;br /&gt;
 ioctl(&amp;quot;TIOCMGET&amp;quot;): Inappropriate ioctl for device&lt;br /&gt;
 &lt;br /&gt;
 avrdude done.  Thank you.&lt;br /&gt;
If ever the ESP8266 ain&#039;t working anymore, try&lt;br /&gt;
 esptool.py erase_flash&lt;br /&gt;
then flash it again (see week 6)&lt;br /&gt;
&lt;br /&gt;
== Week 10 (26/03/18) ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt;This week the action to flash the Olimexino with ESP is not working anymore. Even when we try to erase its memory with &#039;&#039;esptool.py erase_flash&#039;&#039; and flashing it again with an untouched version of esp-link.&lt;br /&gt;
The wifi network is still working and we are able to connect to it, but the command using avrdude is not working anymore (and avrflash keeps on not working).&lt;br /&gt;
Whe have the following error message :&lt;br /&gt;
 avrdude: stk500_recv(): programmer is not responding&lt;br /&gt;
So we decided to let this part of the project on the side temporarly to focus on the STM32.&lt;br /&gt;
Our goal here is first to flash the STM32 with the serial port, and then trying to understand how stm32flash works to implant it into esp-link or avrdude.&lt;br /&gt;
Bu stm32flash doesn&#039;t work either, displaying the following error : &lt;br /&gt;
 ./stm32flash -w ../Nucleo/try_Code_STM32/STM32_Blink_lent.bin /dev/ttyUSB0 &lt;br /&gt;
&lt;br /&gt;
 stm32flash 0.5&lt;br /&gt;
 &lt;br /&gt;
 http://stm32flash.sourceforge.net/&lt;br /&gt;
 &lt;br /&gt;
 Using Parser : Raw BINARY&lt;br /&gt;
 Interface serial_posix: 57600 8E1&lt;br /&gt;
 &lt;br /&gt;
 Failed to init device.&lt;br /&gt;
&lt;br /&gt;
== Week 11 (06/04/18) ==&lt;br /&gt;
This week we tried flashing the Olimexino card with an older version of the esp-link ([https://github.com/jeelabs/esp-link/releases/tag/v2.2.3 2.2.3]) flashed on the WeMos :&lt;br /&gt;
 esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -fs 32m -ff 80m \&lt;br /&gt;
    0x00000 boot_v1.5.bin 0x1000 user1.bin 0x3FE000 blank.bin&lt;br /&gt;
Yet, we are confronted to the same error over and over again, regardless of the pin configuration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
We tried &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt; and succeeded &amp;lt;/span&amp;gt; to flash the STM32, this time using the Olimexino as USB to TTL instead of the offical USB to TTL convertor (which doesn&#039;t seem to work with the STM32, only with the Arduino).&lt;br /&gt;
&lt;br /&gt;
Here is the output showed when it works.&lt;br /&gt;
 stm32flash 0.5&lt;br /&gt;
 &lt;br /&gt;
 http://stm32flash.sourceforge.net/&lt;br /&gt;
 &lt;br /&gt;
 Using Parser : Raw BINARY&lt;br /&gt;
 Interface serial_posix: 57600 8E1&lt;br /&gt;
 Version      : 0x31&lt;br /&gt;
 Option 1     : 0x00&lt;br /&gt;
 Option 2     : 0x00&lt;br /&gt;
 Device ID    : 0x0421 (STM32F446xx)&lt;br /&gt;
 - RAM        : Up to 128KiB  (12288b reserved by bootloader)&lt;br /&gt;
 - Flash      : Up to 512KiB (size first sector: 1x16384)&lt;br /&gt;
 - Option RAM : 16b&lt;br /&gt;
 - System RAM : 30KiB&lt;br /&gt;
 Write to memory&lt;br /&gt;
 Erasing memory&lt;br /&gt;
 Wrote address 0x08006fe0 (100.00%) Done. &lt;br /&gt;
&lt;br /&gt;
Here are the steps to do so :&lt;br /&gt;
&lt;br /&gt;
* Connect RST of Olimexino to GND of Olimexino.&lt;br /&gt;
* Connect 3.3v of Olimexino to 3.3v of STM32.&lt;br /&gt;
* Connect GND of Olimexino to GND of STM32.&lt;br /&gt;
* Connect RX (D0) of Olimexino to RX (PA10/D2) of STM32.&lt;br /&gt;
* Connect TX (D1) of Olimexino to TX (PA9/D8) of STM32.&lt;br /&gt;
* Make sure that on the STM32 you have the two jumpers on the ST-LINK.&lt;br /&gt;
* Make sure that on the STM32 you have a jumper between E5V and PWR (because when you try to flash it via USB this jumper must be between PWR and U5V for the STM32 to execute its program).&lt;br /&gt;
 &lt;br /&gt;
At this point if you power the Olimexino with the USB connection to your computer, the STM32 will behave normally (executing its program).&lt;br /&gt;
&lt;br /&gt;
Now you want to enter STM32&#039;s bootloader mode :&lt;br /&gt;
* Connect the BOOT0 of the STM32 to the VCC of the STM32 (set BOOT0 to high).&lt;br /&gt;
* Press the reset button of the STM32 and wait a little bit&lt;br /&gt;
* Then you can flash your STM32 with a binary file using stm32flash (http://stm32flash.sourceforge.net/) by using the following command :&lt;br /&gt;
 sudo ./stm32flash -w ../Nucleo/try_Code_STM32/STM32_Blink.bin /dev/ttyUSB0&lt;br /&gt;
* Set BOOT0 to low (disconnect BOOT0 of the STM32 from VCC).&lt;br /&gt;
* Press the reset button one more time. The STM32 now behave normally and executes the flashed program.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
* [[Projets_2017-2018 | Projects list]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo/_SRS | SRS]]&lt;br /&gt;
* [[RICM4_2017_2018_-_Nucleo/UML | UML]]&lt;br /&gt;
* [[Deploiment_Nucleo | Documentation]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2018_Thorntail_Demo&amp;diff=44898</id>
		<title>VT2018 Thorntail Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2018_Thorntail_Demo&amp;diff=44898"/>
		<updated>2019-02-11T08:40:47Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Auteur : [[User:Zoran.Chanet | CHANET Zoran]]&amp;lt;br&amp;gt;&lt;br /&gt;
E-mail : [mailto:zoran.chanet@laposte.net zoran.chanet@laposte.net]&amp;lt;br&amp;gt;&lt;br /&gt;
Technologie : [[Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
Contexte : Démonstration effectuée à l&#039;occasion de la [[Media:VT2018_XXX_presentation.pdf|présentation]] pendant le cours de [[VT2018|Veille Technologique et Stratégique]] du 19/11/2018&lt;br /&gt;
&lt;br /&gt;
= Prérequis =&lt;br /&gt;
Les prérequis de la démonstration sont les mêmes que pour utiliser [[Thorntail]] :&lt;br /&gt;
* [[Maven]] 3.2.5 ou supérieur&lt;br /&gt;
* [[JavaEE|Java]] JDK8 ou supérieur&lt;br /&gt;
&lt;br /&gt;
= Base =&lt;br /&gt;
[[File:Thorntail_Generator_Screenshot_VT2018.png|500px|thumbnail|right|Capture d&#039;écran du générateur [[Thorntail]]]]&lt;br /&gt;
Pour des questions de simplicité, nous allons utiliser le [https://thorntail.io/generator/ générateur Thorntail]. Nous créons un projet ayant comme nom de groupe vt2018.Thorntail.example et nom d&#039;artifact demo. Nous retrouverons ces attributs plus tard, dans le pom.xml du projet généré. Nous choisissons comme fraction (dépendance) [[JAX-RS]], qui va nous permettre de former l&#039;API nécessaire à notre démonstration. Pour le but de cette démonstration, il n&#039;est pas besoin de choisir plus de fractions. Dans un projet réel, il est possible d&#039;en cumuler autant que nécessaire.&lt;br /&gt;
&lt;br /&gt;
= Validation de la génération =&lt;br /&gt;
Voici les section à observer dans le pom.xml.&amp;lt;br&amp;gt;&lt;br /&gt;
Les ID demandés ont bien été pris en compte :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;XML&amp;quot; line start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;groupId&amp;gt;vt2018.Thorntail.example&amp;lt;/groupId&amp;gt;&lt;br /&gt;
&amp;lt;artifactId&amp;gt;demo&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;Thorntail Example&amp;lt;/name&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La référence au BOM a été créée :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;XML&amp;quot; line start=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dependencyManagement&amp;gt;&lt;br /&gt;
  &amp;lt;dependencies&amp;gt;&lt;br /&gt;
    &amp;lt;dependency&amp;gt;&lt;br /&gt;
      &amp;lt;groupId&amp;gt;io.thorntail&amp;lt;/groupId&amp;gt;&lt;br /&gt;
      &amp;lt;artifactId&amp;gt;bom-all&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;${version.thorntail}&amp;lt;/version&amp;gt;&lt;br /&gt;
      &amp;lt;scope&amp;gt;import&amp;lt;/scope&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;pom&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/dependencyManagement&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le plugin &#039;&#039;io.thorntail&#039;&#039; pour [[Maven]] est bien importé :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;XML&amp;quot; line start=&amp;quot;34&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plugin&amp;gt;&lt;br /&gt;
  &amp;lt;groupId&amp;gt;io.thorntail&amp;lt;/groupId&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;thorntail-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;${version.thorntail}&amp;lt;/version&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;executions&amp;gt;&lt;br /&gt;
    &amp;lt;execution&amp;gt;&lt;br /&gt;
      &amp;lt;goals&amp;gt;&lt;br /&gt;
        &amp;lt;goal&amp;gt;package&amp;lt;/goal&amp;gt;&lt;br /&gt;
      &amp;lt;/goals&amp;gt;&lt;br /&gt;
    &amp;lt;/execution&amp;gt;&lt;br /&gt;
  &amp;lt;/executions&amp;gt;&lt;br /&gt;
&amp;lt;/plugin&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La fraction [[JAX-RS]] est bien utilisée :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;XML&amp;quot; line start=&amp;quot;52&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
  &amp;lt;groupId&amp;gt;io.thorntail&amp;lt;/groupId&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;jaxrs&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Création de l&#039;API =&lt;br /&gt;
Maintenant que notre projet [[Thorntail]] a bien été créé, à notre tour de produire l&#039;API que nous souhaitons. Pour cela, nous allons déclarer un premier fichier, &#039;&#039;RestApplication.java&#039;&#039;, dans les sources de l&#039;application (à l&#039;emplacement src/main/java/demo).&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;src/main/java/demo/RestApplication.java&#039;&#039; :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
package demo;&lt;br /&gt;
&lt;br /&gt;
import javax.ws.rs.core.Application;&lt;br /&gt;
import javax.ws.rs.ApplicationPath;&lt;br /&gt;
&lt;br /&gt;
@ApplicationPath(&amp;quot;/thorntail-demo&amp;quot;)&lt;br /&gt;
public class RestApplication extends Application {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ce fichier déclare simplement une API à l&#039;adresse &#039;&#039;/thorntail-demo&#039;&#039; (ligne 8) du server sur lequel elle sera déployé. Donnons maintenant un comportement à notre API. Pour cela, créons le fichier &#039;&#039;demoGET2.java&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;src/main/java/demo/demoGET2.java&#039;&#039; :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
package demo;&lt;br /&gt;
&lt;br /&gt;
import javax.ws.rs.Path;&lt;br /&gt;
import javax.ws.rs.GET;&lt;br /&gt;
import javax.ws.rs.Produces;&lt;br /&gt;
import javax.ws.rs.core.Response;&lt;br /&gt;
&lt;br /&gt;
@Path(&amp;quot;/Cool_VT_Demo&amp;quot;)&lt;br /&gt;
public class demoGet2{&lt;br /&gt;
	&lt;br /&gt;
	@GET&lt;br /&gt;
	@Produces(&amp;quot;text/html&amp;quot;)&lt;br /&gt;
	public Response doGet() {&lt;br /&gt;
		return Response.ok(&amp;quot;&amp;lt;h2&amp;gt;What a cool demo.&amp;lt;/h2&amp;gt;&amp;quot;).build();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ce fichier produit une réponse html à une requête GET (lignes 11 et 12) lancée à l&#039;adresse &#039;&#039;/Cool_VT_Demo&#039;&#039; (ligne 8) &amp;lt;strong&amp;gt;de l&#039;application&amp;lt;/strong&amp;gt;, soit à l&#039;adresse &#039;&#039;/thorntail-demo/Cool_VT_Demo&#039;&#039; du serveur sur lequel l&#039;API sera déployée. Enfin, pour rajouter un peu d&#039;interactivité et prouver l&#039;usage de l&#039;html, créons le fichier &#039;&#039;demoGET.java&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;src/main/java/demoGET.java&#039;&#039; :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot; line start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
package demo;&lt;br /&gt;
&lt;br /&gt;
import javax.ws.rs.Path;&lt;br /&gt;
import javax.ws.rs.GET;&lt;br /&gt;
import javax.ws.rs.Produces;&lt;br /&gt;
import javax.ws.rs.core.Response;&lt;br /&gt;
&lt;br /&gt;
@Path(&amp;quot;/index&amp;quot;)&lt;br /&gt;
public class demoGet{&lt;br /&gt;
	&lt;br /&gt;
	@GET&lt;br /&gt;
	@Produces(&amp;quot;text/html&amp;quot;)&lt;br /&gt;
	public Response doGet() {&lt;br /&gt;
		return Response.ok(&amp;quot;&amp;lt;h2&amp;gt;&amp;lt;a href=\&amp;quot;Cool_VT_Demo\&amp;quot;&amp;gt;Clic to see a cool demo&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;quot;).build();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Ce fichier produit une réponse html à une requête GET (lignes 11 et 12) lancée à l&#039;adresse &#039;&#039;/index&#039;&#039; (ligne 8) &amp;lt;strong&amp;gt;de l&#039;application&amp;lt;/strong&amp;gt;, soit à l&#039;adresse &#039;&#039;/thorntail-demo/index&#039;&#039; du serveur sur lequel l&#039;API sera déployée. La réponse sera un lien cliquable renvoyant sur l&#039;adresse &#039;&#039;/Cool_VT_Demo&#039;&#039; de l&#039;application, soit &#039;&#039;demoGET2&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Démonstration =&lt;br /&gt;
[[File:VT2018_Thorntail_Demo1.png|500px|thumbnail|right|fig.1 : Capture d&#039;écran de l&#039;API de démonstration (1)]]&lt;br /&gt;
[[File:VT2018_Thorntail_Demo2.png|470px|thumbnail|right|fig.2 : Capture d&#039;écran de l&#039;API de démonstration (2)]]&lt;br /&gt;
Enfin, voyons à quoi ressemble notre API. Pour cela, nous allons provoquer la création par [[Thorntail]] de l&#039;UberJAR exécutable et son exécution sur l&#039;adresse locale par une seule commande :&lt;br /&gt;
 mvn thorntail:run&lt;br /&gt;
Si aucune erreur n&#039;est produite, notre API est maintenant disponible à l&#039;adresse [http://http://localhost:8080/thorntail-demo/index localhost:8080/thorntail-demo/index] (fig.1), et nous permet bien d&#039;accéder à [http://http://localhost:8080/thorntail-demo/index localhost:8080/thorntail-demo/Cool_VT_Demo] (fig.2) en cliquant sur le lien.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus, nous pouvons constater l&#039;apparition dans le dossier &#039;&#039;target&#039;&#039; de &#039;&#039;demo.war&#039;&#039;, contenant les composants de l&#039;application, et de l&#039;UberJAR &#039;&#039;demo-thorntail.jar&#039;&#039; (que nous pouvons également exécuter par la commande classique, &#039;&#039;java -jar demo-thorntail.jar&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=44897</id>
		<title>User:Zoran.Chanet</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=44897"/>
		<updated>2019-02-11T08:36:52Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Contact =&lt;br /&gt;
Profil LinkedIn : [https://www.linkedin.com/in/zoran-chanet Zoran CHANET]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitHub : [https://github.com/ProfesseurSid ProfesseurSid]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitLab : [https://gitlab.com/CHANET_Zoran CHANET_Zoran]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil gricad.gitlab : [https://gricad-gitlab.univ-grenoble-alpes.fr/chanetz chanetz]&amp;lt;br&amp;gt;&lt;br /&gt;
E-mail : [mailto:zoran.chanet@etu.univ-grenoble-alpes.fr zoran.chanet@etu.univ-grenoble-alpes.fr] (expire en 2020)&lt;br /&gt;
&lt;br /&gt;
= Projets =&lt;br /&gt;
== 2017-2018 ==&lt;br /&gt;
[[RICM4 2017 2018 - Nucleo]] &lt;br /&gt;
&lt;br /&gt;
== 2018-2019 ==&lt;br /&gt;
[[VT2018 Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ECOM-1F0 1819 BTB]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[PROJET-INFO5 1819 EDCampus]]&lt;br /&gt;
&lt;br /&gt;
= Articles =&lt;br /&gt;
Diverses pages de technologies du projet [[ECOM-1F0 1819 BTB#Technologies | ECOM]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[VT2018 Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[VT2018 Thorntail Demo]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[SonarQube Scanner]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[GitLab Runners]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[GitLab CI/CD]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Apache mod_rewrite]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44896</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44896"/>
		<updated>2019-02-11T08:25:06Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Apache_mod_rewrite&amp;diff=44895</id>
		<title>Apache mod rewrite</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Apache_mod_rewrite&amp;diff=44895"/>
		<updated>2019-02-11T08:23:10Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: Created page with &amp;quot;= Auteur =  CHANET Zoran  = mod_rewrite = Le module Apache de rewriting d’url se nomme mod_rewrite. Il permet d’indiquer simplement des règles de r...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= mod_rewrite =&lt;br /&gt;
Le module Apache de rewriting d’url se nomme mod_rewrite. Il permet d’indiquer simplement des règles de réécriture, selon l’url demandé par l’utilisateur. Cela se fera dans le fichier [[Apache mod_rewrite#Fichier .htaccess | .htaccess]].&amp;lt;br&amp;gt;&lt;br /&gt;
Pour l’activer, il faut ajouter ces quelques lignes dans le fichier &amp;lt;code&amp;gt;/etc/apache2/apache2.conf&amp;lt;/code&amp;gt; (si elles n’y sont pas déjà) :&lt;br /&gt;
 &amp;lt;ifModule mod_rewrite.c&amp;gt;&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 &amp;lt;/ifModule&amp;gt;&lt;br /&gt;
Il faut alors redémarrer le serveur Apache :&lt;br /&gt;
 sudo /etc/init.d/apache2 restart&lt;br /&gt;
&lt;br /&gt;
= Diagnostic =&lt;br /&gt;
* Si le module rewrite est présent, un fichier &amp;lt;code&amp;gt;mod_rewrite.so&amp;lt;/code&amp;gt; doit exister. Cela se vérifie par la commande suivante :&lt;br /&gt;
 ls -l /usr/lib/apache2/modules/&lt;br /&gt;
* Cette commande permet de recréer les liens entre Apache et le mod_rewrite :&lt;br /&gt;
 sudo a2enmod rewrite&lt;br /&gt;
&lt;br /&gt;
= Fichier .htaccess =&lt;br /&gt;
* Le mode rewriting est d’abord activé avec &amp;lt;code&amp;gt;RewriteEngine on&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;^&#039;&#039; correspond au début d’une expression rationnelle, &#039;&#039;$&#039;&#039; à la fin de celle-ci. Les symboles utilisés sont décrits sur cette page : [https://httpd.apache.org/docs/2.2/fr/rewrite/intro.html#regex].&lt;br /&gt;
* Les drapeaux de réécriture sont décrits ici : [https://httpd.apache.org/docs/2.2/fr/rewrite/flags.html].&lt;br /&gt;
* Les différentes directives utilisables sont recensées dans la documentation : [https://httpd.apache.org/docs/2.2/fr/mod/mod_rewrite.html#Solutions].&lt;br /&gt;
* &amp;lt;code&amp;gt;%{&amp;lt;NOM_DE_VARIABLE}&amp;lt;/code&amp;gt; permet d&#039;accéder aux variables de serveur.&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
Nous allons explorer l&#039;exemple d&#039;une règle de redirection à l&#039;aide des directives RewriteCond et RewriteRule, utilisées comme suit : &lt;br /&gt;
 RewriteCond &amp;lt;chaîne de test&amp;gt; &amp;lt;expression de comparaison&amp;gt;&lt;br /&gt;
 RewriteRule &amp;lt;modèle&amp;gt; &amp;lt;substitution&amp;gt; [&amp;lt;Drapeaux&amp;gt;]&lt;br /&gt;
&#039;&#039;.htaccess :&#039;&#039;&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{REQUEST_URI} ^/$&lt;br /&gt;
 RewriteRule (.*) /app [R=301,L]&lt;br /&gt;
* On active d’abord le moteur de redirection.&lt;br /&gt;
* Ensuite, on définit une condition d’accès à la règle, &amp;lt;code&amp;gt;%{REQUEST_URI}&amp;lt;/code&amp;gt; indiquant la variable serveur correspondant à l&#039;uri auquel on essaie d&#039;accéder, l’uri spécifié étant &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; (par l&#039;expression rationelle &amp;lt;code&amp;gt;^/$&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Enfin, la règle de réécriture s’applique à tout l’uri (&amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;), et le remplace par &amp;lt;code&amp;gt;/app&amp;lt;/code&amp;gt;. Une redirection est alors performée en indiquant un code de retour 301 (&amp;lt;code&amp;gt;R=301&amp;lt;/code&amp;gt;). Cette règle est indiquée comme la dernière à appliquer par le flag &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Si ce fichier &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; est utilisé pour un serveur hébergé à l&#039;adresse &amp;lt;code&amp;gt;monsite.fr&amp;lt;/code&amp;gt;, tout accès à &amp;lt;code&amp;gt;monsite.fr/&amp;lt;/code&amp;gt; sera redirigé vers &amp;lt;code&amp;gt;monsite.fr/app&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[1] https://httpd.apache.org/docs/2.2/fr/rewrite/intro.html#regex&amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://httpd.apache.org/docs/2.2/fr/rewrite/flags.html&amp;lt;br&amp;gt;&lt;br /&gt;
[3] https://httpd.apache.org/docs/2.2/fr/mod/mod_rewrite.html#Solutions&amp;lt;br&amp;gt;&lt;br /&gt;
[4] https://httpd.apache.org/docs/2.2/fr/rewrite/intro.html&amp;lt;br&amp;gt;&lt;br /&gt;
[5] https://itx-technologies.com/fr/blog/28-installer-et-activer-le-module-mod_rewrite-sur-apache-et-ubuntu&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=GitLab_CI/CD&amp;diff=44884</id>
		<title>GitLab CI/CD</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=GitLab_CI/CD&amp;diff=44884"/>
		<updated>2019-02-08T12:58:02Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Astuces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Prérequis =&lt;br /&gt;
* Version Gitlab &amp;gt;= 8.0 ou utiliser GitLab.com&lt;br /&gt;
* &amp;lt;code&amp;gt;Settings -&amp;gt; General -&amp;gt; Permissions -&amp;gt; Pipelines&amp;lt;/code&amp;gt; (&#039;&#039;Only team members&#039;&#039; ou &#039;&#039;Everyone with access&#039;&#039;)&lt;br /&gt;
* Au moins un runner configuré pour le projet (ou shared runner) (voir &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt;) (&#039;&#039;Enable shared runners on this project&#039;&#039; pour avoir accès aux shared runners)&lt;br /&gt;
&lt;br /&gt;
= Activation =&lt;br /&gt;
Définir un fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; valide à la racine du projet&lt;br /&gt;
&lt;br /&gt;
= Runners =&lt;br /&gt;
* Sont des VM isolées&lt;br /&gt;
* Peuvent être &#039;&#039;shared&#039;&#039; entre les projets&lt;br /&gt;
* Idéalement sur une autre machine que le projet GitLab&lt;br /&gt;
* Configurés par le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; pour définir des étapes (build, test, deploy…)&lt;br /&gt;
* &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt; (pour voir lesquels sont assignés au projet)&lt;br /&gt;
&lt;br /&gt;
= Astuces =&lt;br /&gt;
* &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; est dépendant de la version (donc branche)&lt;br /&gt;
* Format du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; :&lt;br /&gt;
 stages:&lt;br /&gt;
   - &amp;lt;étape&amp;gt;&lt;br /&gt;
   - &amp;lt;étape&amp;gt;&lt;br /&gt;
   - ...&lt;br /&gt;
 &lt;br /&gt;
 before_script:&lt;br /&gt;
   - &amp;lt;commande&amp;gt;&lt;br /&gt;
   - &amp;lt;commande&amp;gt;&lt;br /&gt;
   - … &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;job1-name&amp;gt;:&lt;br /&gt;
   stage: &amp;lt;étape&amp;gt;&lt;br /&gt;
   script:&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - …&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;job2-name&amp;gt;:&lt;br /&gt;
   stage: &amp;lt;étape&amp;gt;&lt;br /&gt;
   script:&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - …&lt;br /&gt;
 &lt;br /&gt;
 …&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Les espaces doivent rester des espaces (pas des tabulations)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; est un mot-clé obligatoire pour chaque job&lt;br /&gt;
* &amp;lt;code&amp;gt;before_script&amp;lt;/code&amp;gt; est optionnel et exécuté avant chaque &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt;&lt;br /&gt;
* Les balises &amp;lt;code&amp;gt;stages&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;stage&amp;lt;/code&amp;gt; sont optionnelles mais structurent le pipeline&lt;br /&gt;
* &amp;lt;code&amp;gt;CI/CD -&amp;gt; Pipelines -&amp;gt; CI LINT&amp;lt;/code&amp;gt; (bouton) permet de tester la validité du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;stuck&#039;&#039; signifie qu’aucun runner n’est configuré pour prendre en charge le job&lt;br /&gt;
* Si des runners sont actifs et affiliés au projet (voir &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt;) mais que le pipeline indique &#039;&#039;stuck&#039;&#039;, il peut être nécessaire d&#039;autoriser les runners à accepter les jobs sans tags&lt;br /&gt;
* Examples de &amp;lt;code&amp;gt;.gitlab_ci.yml&amp;lt;/code&amp;gt; : [https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/examples/README.md https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/examples/README.md]&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement =&lt;br /&gt;
* Activation du pipeline à chaque push sur une branche disposant du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Au lancement, chaque job est réalisé par un runner dans son propre environnement&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/quick_start/README Getting started with GitLab CI/CD]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/enable_or_disable_ci.md How to enable or disable GitLab CI/CD]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44882</id>
		<title>SonarQube Scanner</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44882"/>
		<updated>2019-02-08T12:30:34Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin qu&#039;il analyse un projet au sein d&#039;un pipeline d&#039;intégration continue [[GitLab CI/CD]] et envoie les données récoltées à [https://sonarcloud.io/ SonarCloud]. Il est également possible d&#039;installer un server SonarQube et de configurer le scanner pour qu&#039;il envoie les informations sur ce server (&amp;lt;code&amp;gt;sonar.host.url&amp;lt;/code&amp;gt;). Pour l&#039;installation d&#039;un tel serveur, voir [[SonarQube]].&lt;br /&gt;
&lt;br /&gt;
= Scanner =&lt;br /&gt;
Le scanner est celui qui nous permettra de parcourir les fichiers et de relever les erreurs. Il doit être installé sur la machine qui l’utilise. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], il doit donc être installé sur le runner qui exécute le job correspondant. Afin d’éviter de devoir contrôler précisément quels runners sont utilisés pour le job, et de devoir synchroniser les installations sur tous les runners du projet, il est possible de télécharger et installer le scanner au début du script dans le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; qui définit le pipeline.&lt;br /&gt;
&lt;br /&gt;
= Serveur =&lt;br /&gt;
Le scanner se contente d’analyser le code. Pour obtenir le bel affichage auquel nous a habitué [https://www.sonarqube.org/ SonarQube], le résultat de cette analyse doit être envoyé à un serveur. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], puisque le scan tourne sur le runner, il faut que le serveur soit actif et exposé (si le serveur sonar était installé sur le runner et lancé en local avant le scan, il serait détruit à l’arrêt du runner). Il est possible d&#039;utiliser [https://sonarcloud.io/ SonarCloud], un serveur sonar public et gratuit pour les projets opensource. Il faut alors configurer le projet scanné pour que l’analyse soit envoyée à SonarCloud, en renseignant le bon projet, la bonne compagnie et le bon token d’authentification (il faut que l’utilisateur ait le droit de lancer une analyse).&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
Afin que le runner nouvellement installé bénéficie simplement de la configuration décidée en amont, cette configuration est faite pour le projet, dans le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; dans le dossier racine du projet. Ce fichier spécifie la configuration utilisée par le scanner pour l’analyse du projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme expliqué dans la page dédiée à [[GitLab CI/CD]], le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; définit le comportement du pipeline. Ici, il nous est donc utile à télécharger, installer et utiliser le scanner.&amp;lt;br&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; définit les variables de configuration utilisées par le scanner. Il est également possible de configurer le scanner en ligne de commande, en ajoutant les options sous la forme &amp;lt;code&amp;gt;-D &amp;lt;property-name&amp;gt;=&amp;lt;property-value&amp;gt;&amp;lt;/code&amp;gt; lors de l&#039;appel au scanner.&lt;br /&gt;
&lt;br /&gt;
== .gitlab-ci.yml ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Ce fichier est un &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt;, l’identation (avec des espaces et non des tabulations) est &#039;&#039;&#039;importante&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Le script sonar-analysis télécharge d&#039;abord une archive de scanner (ici, la version &#039;3.3.0.1492&#039;), puis l&#039;extrait (au cas où le scanner ne puisse utiliser unzip, un fichier python est défini pour extraire l&#039;archive). Après avoir donné au runner les droits d&#039;exécution du scanner, l&#039;analyse est lancée.&lt;br /&gt;
 stages:&lt;br /&gt;
   - test&lt;br /&gt;
 &lt;br /&gt;
 sonar-analysis:&lt;br /&gt;
   stage: test&lt;br /&gt;
   script:&lt;br /&gt;
     - wget &amp;quot;https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip&amp;quot;&lt;br /&gt;
     - echo &amp;quot;import zipfile&amp;quot; &amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;with zipfile.ZipFile(&#039;sonar-scanner-cli-3.3.0.1492-linux.zip&#039;, \&amp;quot;r\&amp;quot;) as z:&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;  z.extractall(\&amp;quot;.\&amp;quot;)&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - python unzip.py&lt;br /&gt;
     - rm unzip.py&lt;br /&gt;
     - rm sonar-scanner-cli-3.3.0.1492-linux.zip&lt;br /&gt;
     - chmod -R +x sonar-scanner-3.3.0.1492-linux/&lt;br /&gt;
     - sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner&lt;br /&gt;
&lt;br /&gt;
== sonar-project.properties ==&lt;br /&gt;
 # sonarqube server&lt;br /&gt;
 sonar.host.url=https://sonarcloud.io&lt;br /&gt;
 &lt;br /&gt;
 # Required metadata&lt;br /&gt;
 # must be unique in a given SonarQube instance&lt;br /&gt;
 sonar.projectKey=&amp;lt;project-key&amp;gt;&lt;br /&gt;
 sonar.organization=&amp;lt;organization&amp;gt;&lt;br /&gt;
 sonar.login=&amp;lt;authentication-token&amp;gt;&lt;br /&gt;
 sonar.projectVersion=1.0&lt;br /&gt;
 &lt;br /&gt;
 # Optional metadata&lt;br /&gt;
 # Default: master&lt;br /&gt;
 # sonar.branch.name=&amp;lt;branch-name&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Comma-separated paths to directories with sources (required)&lt;br /&gt;
 # Path is relative to the sonar-project.properties file. Replace &amp;quot;\&amp;quot; by &amp;quot;/&amp;quot; on Windows.&lt;br /&gt;
 # This property is optional if sonar.modules is set.&lt;br /&gt;
 sonar.sources=.&lt;br /&gt;
 sonar.exclusions=sonar-scanner-3.3.0.1492-linux/**,&amp;lt;paths-to-exclude-from-scan&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Language&lt;br /&gt;
 #sonar.language=javascript&lt;br /&gt;
 sonar.c.file.suffixes=-&lt;br /&gt;
 sonar.cpp.file.suffixes=-&lt;br /&gt;
 sonar.objc.file.suffixes=-&lt;br /&gt;
 &lt;br /&gt;
 # Encoding of the source code. Default is default system encoding&lt;br /&gt;
 sonar.sourceEncoding=UTF-8&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ https://docs.sonarqube.org/latest/setup/get-started-2-minutes/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/analysis/analysis-parameters/ https://docs.sonarqube.org/latest/analysis/analysis-parameters/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44873</id>
		<title>SonarQube Scanner</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44873"/>
		<updated>2019-02-08T10:36:27Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* sonar-project.properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin qu&#039;il analyse un projet au sein d&#039;un pipeline d&#039;intégration continue [[GitLab CI/CD]] et envoie les données récoltées à [https://sonarcloud.io/ SonarCloud]. Il est également possible d&#039;installer un server SonarQube et de configurer le scanner pour qu&#039;il envoie les informations sur ce server (&amp;lt;code&amp;gt;sonar.host.url&amp;lt;/code&amp;gt;). Pour l&#039;installation d&#039;un tel serveur, voir [[SonarQube]].&lt;br /&gt;
&lt;br /&gt;
= Scanner =&lt;br /&gt;
Le scanner est celui qui nous permettra de parcourir les fichiers et de relever les erreurs. Il doit être installé sur la machine qui l’utilise. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], il doit donc être installé sur le runner qui exécute le job correspondant. Afin d’éviter de devoir contrôler précisément quels runners sont utilisés pour le job, et de devoir synchroniser les installations sur tous les runners du projet, il est possible de télécharger et installer le scanner au début du script dans le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; qui définit le pipeline.&lt;br /&gt;
&lt;br /&gt;
= Serveur =&lt;br /&gt;
Le scanner se contente d’analyser le code. Pour obtenir le bel affichage auquel nous a habitué [https://www.sonarqube.org/ SonarQube], le résultat de cette analyse doit être envoyé à un serveur. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], puisque le scan tourne sur le runner, il faut que le serveur soit actif et exposé (si le serveur sonar était installé sur le runner et lancé en local avant le scan, il serait détruit à l’arrêt du runner). Il est possible d&#039;utiliser [https://sonarcloud.io/ SonarCloud], un serveur sonar public et gratuit pour les projets opensource. Il faut alors configurer le projet scanné pour que l’analyse soit envoyée à SonarCloud, en renseignant le bon projet, la bonne compagnie et le bon token d’authentification (il faut que l’utilisateur ait le droit de lancer une analyse).&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
Afin que le runner nouvellement installé bénéficie simplement de la configuration décidée en amont, cette configuration est faite pour le projet, dans le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; dans le dossier racine du projet. Ce fichier spécifie la configuration utilisée par le scanner pour l’analyse du projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme expliqué dans la page dédiée à [[GitLab CI/CD]], le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; définit le comportement du pipeline. Ici, il nous est donc utile à télécharger, installer et utiliser le scanner.&amp;lt;br&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; définit les variables de configuration utilisées par le scanner.&lt;br /&gt;
&lt;br /&gt;
== .gitlab-ci.yml ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Ce fichier est un &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt;, l’identation (avec des espaces et non des tabulations) est &#039;&#039;&#039;importante&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Le script sonar-analysis télécharge d&#039;abord une archive de scanner (ici, la version &#039;3.3.0.1492&#039;), puis l&#039;extrait (au cas où le scanner ne puisse utiliser unzip, un fichier python est défini pour extraire l&#039;archive). Après avoir donné au runner les droits d&#039;exécution du scanner, l&#039;analyse est lancée.&lt;br /&gt;
 stages:&lt;br /&gt;
   - test&lt;br /&gt;
 &lt;br /&gt;
 sonar-analysis:&lt;br /&gt;
   stage: test&lt;br /&gt;
   script:&lt;br /&gt;
     - wget &amp;quot;https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip&amp;quot;&lt;br /&gt;
     - echo &amp;quot;import zipfile&amp;quot; &amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;with zipfile.ZipFile(&#039;sonar-scanner-cli-3.3.0.1492-linux.zip&#039;, \&amp;quot;r\&amp;quot;) as z:&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;  z.extractall(\&amp;quot;.\&amp;quot;)&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - python unzip.py&lt;br /&gt;
     - rm unzip.py&lt;br /&gt;
     - rm sonar-scanner-cli-3.3.0.1492-linux.zip&lt;br /&gt;
     - chmod -R +x sonar-scanner-3.3.0.1492-linux/&lt;br /&gt;
     - sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner&lt;br /&gt;
&lt;br /&gt;
== sonar-project.properties ==&lt;br /&gt;
 # sonarqube server&lt;br /&gt;
 sonar.host.url=https://sonarcloud.io&lt;br /&gt;
 &lt;br /&gt;
 # Required metadata&lt;br /&gt;
 # must be unique in a given SonarQube instance&lt;br /&gt;
 sonar.projectKey=&amp;lt;project-key&amp;gt;&lt;br /&gt;
 sonar.organization=&amp;lt;organization&amp;gt;&lt;br /&gt;
 sonar.login=&amp;lt;authentication-token&amp;gt;&lt;br /&gt;
 sonar.projectVersion=1.0&lt;br /&gt;
 &lt;br /&gt;
 # Optional metadata&lt;br /&gt;
 # Default: master&lt;br /&gt;
 # sonar.branch.name=&amp;lt;branch-name&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Comma-separated paths to directories with sources (required)&lt;br /&gt;
 # Path is relative to the sonar-project.properties file. Replace &amp;quot;\&amp;quot; by &amp;quot;/&amp;quot; on Windows.&lt;br /&gt;
 # This property is optional if sonar.modules is set.&lt;br /&gt;
 sonar.sources=.&lt;br /&gt;
 sonar.exclusions=sonar-scanner-3.3.0.1492-linux/**,&amp;lt;paths-to-exclude-from-scan&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Language&lt;br /&gt;
 #sonar.language=javascript&lt;br /&gt;
 sonar.c.file.suffixes=-&lt;br /&gt;
 sonar.cpp.file.suffixes=-&lt;br /&gt;
 sonar.objc.file.suffixes=-&lt;br /&gt;
 &lt;br /&gt;
 # Encoding of the source code. Default is default system encoding&lt;br /&gt;
 sonar.sourceEncoding=UTF-8&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ https://docs.sonarqube.org/latest/setup/get-started-2-minutes/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/analysis/analysis-parameters/ https://docs.sonarqube.org/latest/analysis/analysis-parameters/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44872</id>
		<title>SonarQube Scanner</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44872"/>
		<updated>2019-02-08T10:36:10Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* sonar-project.properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin qu&#039;il analyse un projet au sein d&#039;un pipeline d&#039;intégration continue [[GitLab CI/CD]] et envoie les données récoltées à [https://sonarcloud.io/ SonarCloud]. Il est également possible d&#039;installer un server SonarQube et de configurer le scanner pour qu&#039;il envoie les informations sur ce server (&amp;lt;code&amp;gt;sonar.host.url&amp;lt;/code&amp;gt;). Pour l&#039;installation d&#039;un tel serveur, voir [[SonarQube]].&lt;br /&gt;
&lt;br /&gt;
= Scanner =&lt;br /&gt;
Le scanner est celui qui nous permettra de parcourir les fichiers et de relever les erreurs. Il doit être installé sur la machine qui l’utilise. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], il doit donc être installé sur le runner qui exécute le job correspondant. Afin d’éviter de devoir contrôler précisément quels runners sont utilisés pour le job, et de devoir synchroniser les installations sur tous les runners du projet, il est possible de télécharger et installer le scanner au début du script dans le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; qui définit le pipeline.&lt;br /&gt;
&lt;br /&gt;
= Serveur =&lt;br /&gt;
Le scanner se contente d’analyser le code. Pour obtenir le bel affichage auquel nous a habitué [https://www.sonarqube.org/ SonarQube], le résultat de cette analyse doit être envoyé à un serveur. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], puisque le scan tourne sur le runner, il faut que le serveur soit actif et exposé (si le serveur sonar était installé sur le runner et lancé en local avant le scan, il serait détruit à l’arrêt du runner). Il est possible d&#039;utiliser [https://sonarcloud.io/ SonarCloud], un serveur sonar public et gratuit pour les projets opensource. Il faut alors configurer le projet scanné pour que l’analyse soit envoyée à SonarCloud, en renseignant le bon projet, la bonne compagnie et le bon token d’authentification (il faut que l’utilisateur ait le droit de lancer une analyse).&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
Afin que le runner nouvellement installé bénéficie simplement de la configuration décidée en amont, cette configuration est faite pour le projet, dans le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; dans le dossier racine du projet. Ce fichier spécifie la configuration utilisée par le scanner pour l’analyse du projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme expliqué dans la page dédiée à [[GitLab CI/CD]], le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; définit le comportement du pipeline. Ici, il nous est donc utile à télécharger, installer et utiliser le scanner.&amp;lt;br&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; définit les variables de configuration utilisées par le scanner.&lt;br /&gt;
&lt;br /&gt;
== .gitlab-ci.yml ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Ce fichier est un &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt;, l’identation (avec des espaces et non des tabulations) est &#039;&#039;&#039;importante&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Le script sonar-analysis télécharge d&#039;abord une archive de scanner (ici, la version &#039;3.3.0.1492&#039;), puis l&#039;extrait (au cas où le scanner ne puisse utiliser unzip, un fichier python est défini pour extraire l&#039;archive). Après avoir donné au runner les droits d&#039;exécution du scanner, l&#039;analyse est lancée.&lt;br /&gt;
 stages:&lt;br /&gt;
   - test&lt;br /&gt;
 &lt;br /&gt;
 sonar-analysis:&lt;br /&gt;
   stage: test&lt;br /&gt;
   script:&lt;br /&gt;
     - wget &amp;quot;https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip&amp;quot;&lt;br /&gt;
     - echo &amp;quot;import zipfile&amp;quot; &amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;with zipfile.ZipFile(&#039;sonar-scanner-cli-3.3.0.1492-linux.zip&#039;, \&amp;quot;r\&amp;quot;) as z:&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;  z.extractall(\&amp;quot;.\&amp;quot;)&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - python unzip.py&lt;br /&gt;
     - rm unzip.py&lt;br /&gt;
     - rm sonar-scanner-cli-3.3.0.1492-linux.zip&lt;br /&gt;
     - chmod -R +x sonar-scanner-3.3.0.1492-linux/&lt;br /&gt;
     - sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner&lt;br /&gt;
&lt;br /&gt;
== sonar-project.properties ==&lt;br /&gt;
 # sonarqube server&lt;br /&gt;
 sonar.host.url=https://sonarcloud.io&lt;br /&gt;
 &lt;br /&gt;
 # Required metadata&lt;br /&gt;
 # must be unique in a given SonarQube instance&lt;br /&gt;
 sonar.projectKey=&amp;lt;project-key&amp;gt;&lt;br /&gt;
 sonar.organization=&amp;lt;organization&amp;gt;&lt;br /&gt;
 sonar.login=&amp;lt;authentication-token&amp;gt;&lt;br /&gt;
 sonar.projectVersion=1.0&lt;br /&gt;
&lt;br /&gt;
 # Optional metadata&lt;br /&gt;
 # Default: master&lt;br /&gt;
 # sonar.branch.name=&amp;lt;branch-name&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Comma-separated paths to directories with sources (required)&lt;br /&gt;
 # Path is relative to the sonar-project.properties file. Replace &amp;quot;\&amp;quot; by &amp;quot;/&amp;quot; on Windows.&lt;br /&gt;
 # This property is optional if sonar.modules is set.&lt;br /&gt;
 sonar.sources=.&lt;br /&gt;
 sonar.exclusions=sonar-scanner-3.3.0.1492-linux/**,&amp;lt;paths-to-exclude-from-scan&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Language&lt;br /&gt;
 #sonar.language=javascript&lt;br /&gt;
 sonar.c.file.suffixes=-&lt;br /&gt;
 sonar.cpp.file.suffixes=-&lt;br /&gt;
 sonar.objc.file.suffixes=-&lt;br /&gt;
 &lt;br /&gt;
 # Encoding of the source code. Default is default system encoding&lt;br /&gt;
 sonar.sourceEncoding=UTF-8&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ https://docs.sonarqube.org/latest/setup/get-started-2-minutes/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/analysis/analysis-parameters/ https://docs.sonarqube.org/latest/analysis/analysis-parameters/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44852</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44852"/>
		<updated>2019-02-07T10:26:19Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44851</id>
		<title>SonarQube Scanner</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SonarQube_Scanner&amp;diff=44851"/>
		<updated>2019-02-07T10:26:08Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: Created page with &amp;quot;= Auteur =  CHANET Zoran  = Introduction = Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin qu&#039;il analyse un projet au sein d&#039;un pipeline d&#039;intégration continue [[GitLab CI/CD]] et envoie les données récoltées à [https://sonarcloud.io/ SonarCloud]. Il est également possible d&#039;installer un server SonarQube et de configurer le scanner pour qu&#039;il envoie les informations sur ce server (&amp;lt;code&amp;gt;sonar.host.url&amp;lt;/code&amp;gt;). Pour l&#039;installation d&#039;un tel serveur, voir [[SonarQube]].&lt;br /&gt;
&lt;br /&gt;
= Scanner =&lt;br /&gt;
Le scanner est celui qui nous permettra de parcourir les fichiers et de relever les erreurs. Il doit être installé sur la machine qui l’utilise. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], il doit donc être installé sur le runner qui exécute le job correspondant. Afin d’éviter de devoir contrôler précisément quels runners sont utilisés pour le job, et de devoir synchroniser les installations sur tous les runners du projet, il est possible de télécharger et installer le scanner au début du script dans le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; qui définit le pipeline.&lt;br /&gt;
&lt;br /&gt;
= Serveur =&lt;br /&gt;
Le scanner se contente d’analyser le code. Pour obtenir le bel affichage auquel nous a habitué [https://www.sonarqube.org/ SonarQube], le résultat de cette analyse doit être envoyé à un serveur. Dans le cas de l&#039;intégration continue [[GitLab CI/CD]], puisque le scan tourne sur le runner, il faut que le serveur soit actif et exposé (si le serveur sonar était installé sur le runner et lancé en local avant le scan, il serait détruit à l’arrêt du runner). Il est possible d&#039;utiliser [https://sonarcloud.io/ SonarCloud], un serveur sonar public et gratuit pour les projets opensource. Il faut alors configurer le projet scanné pour que l’analyse soit envoyée à SonarCloud, en renseignant le bon projet, la bonne compagnie et le bon token d’authentification (il faut que l’utilisateur ait le droit de lancer une analyse).&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
Afin que le runner nouvellement installé bénéficie simplement de la configuration décidée en amont, cette configuration est faite pour le projet, dans le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; dans le dossier racine du projet. Ce fichier spécifie la configuration utilisée par le scanner pour l’analyse du projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme expliqué dans la page dédiée à [[GitLab CI/CD]], le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; définit le comportement du pipeline. Ici, il nous est donc utile à télécharger, installer et utiliser le scanner.&amp;lt;br&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;sonar-project.properties&amp;lt;/code&amp;gt; définit les variables de configuration utilisées par le scanner.&lt;br /&gt;
&lt;br /&gt;
== .gitlab-ci.yml ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Ce fichier est un &amp;lt;code&amp;gt;.yml&amp;lt;/code&amp;gt;, l’identation (avec des espaces et non des tabulations) est &#039;&#039;&#039;importante&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Le script sonar-analysis télécharge d&#039;abord une archive de scanner (ici, la version &#039;3.3.0.1492&#039;), puis l&#039;extrait (au cas où le scanner ne puisse utiliser unzip, un fichier python est défini pour extraire l&#039;archive). Après avoir donné au runner les droits d&#039;exécution du scanner, l&#039;analyse est lancée.&lt;br /&gt;
 stages:&lt;br /&gt;
   - test&lt;br /&gt;
 &lt;br /&gt;
 sonar-analysis:&lt;br /&gt;
   stage: test&lt;br /&gt;
   script:&lt;br /&gt;
     - wget &amp;quot;https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip&amp;quot;&lt;br /&gt;
     - echo &amp;quot;import zipfile&amp;quot; &amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;with zipfile.ZipFile(&#039;sonar-scanner-cli-3.3.0.1492-linux.zip&#039;, \&amp;quot;r\&amp;quot;) as z:&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - echo &amp;quot;  z.extractall(\&amp;quot;.\&amp;quot;)&amp;quot; &amp;gt;&amp;gt; unzip.py&lt;br /&gt;
     - python unzip.py&lt;br /&gt;
     - rm unzip.py&lt;br /&gt;
     - rm sonar-scanner-cli-3.3.0.1492-linux.zip&lt;br /&gt;
     - chmod -R +x sonar-scanner-3.3.0.1492-linux/&lt;br /&gt;
     - sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner&lt;br /&gt;
&lt;br /&gt;
== sonar-project.properties ==&lt;br /&gt;
 # sonarqube server&lt;br /&gt;
 sonar.host.url=https://sonarcloud.io&lt;br /&gt;
 &lt;br /&gt;
 # Required metadata&lt;br /&gt;
 # must be unique in a given SonarQube instance&lt;br /&gt;
 sonar.projectKey=&amp;lt;project-key&amp;gt;&lt;br /&gt;
 sonar.organization=&amp;lt;organization&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sonar.login=&amp;lt;authentication-token&amp;gt;&lt;br /&gt;
 sonar.projectVersion=1.0&lt;br /&gt;
 &lt;br /&gt;
 # Comma-separated paths to directories with sources (required)&lt;br /&gt;
 # Path is relative to the sonar-project.properties file. Replace &amp;quot;\&amp;quot; by &amp;quot;/&amp;quot; on Windows.&lt;br /&gt;
 # This property is optional if sonar.modules is set.&lt;br /&gt;
 sonar.sources=.&lt;br /&gt;
 sonar.exclusions=sonar-scanner-3.3.0.1492-linux/**,&amp;lt;paths-to-exclude-from-scan&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 # Language&lt;br /&gt;
 #sonar.language=javascript&lt;br /&gt;
 sonar.c.file.suffixes=-&lt;br /&gt;
 sonar.cpp.file.suffixes=-&lt;br /&gt;
 sonar.objc.file.suffixes=-&lt;br /&gt;
 &lt;br /&gt;
 # Encoding of the source code. Default is default system encoding&lt;br /&gt;
 sonar.sourceEncoding=UTF-8&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ https://docs.sonarqube.org/latest/setup/get-started-2-minutes/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/analysis/analysis-parameters/ https://docs.sonarqube.org/latest/analysis/analysis-parameters/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=GitLab_Runners&amp;diff=44850</id>
		<title>GitLab Runners</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=GitLab_Runners&amp;diff=44850"/>
		<updated>2019-02-07T09:49:21Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page de tutoriel explique comment installer simplement sur linux un runner utilisable pour un projet hébergé sur un serveur GitLab. Ces runners sont utilisés dans le cadre de [[GitLab CI/CD | l&#039;intégration continue sur GitLab]]. Bien entendu, il existe de nombreuses configurations différentes et même plusieurs types de runners. Ici, nous viserons l&#039;installation la plus simple, c&#039;est à dire un runner spécifique éxécuté par shell, donc avec les caractéristiques de la machine sur laquelle le runner est installé. Pour d&#039;autres configurations, n&#039;hésitez pas à parcourir [[GitLab Runners#Sources | les sources]].&amp;lt;br&amp;gt;&lt;br /&gt;
La documentation du runner officiel de GitLab se trouve ici : [https://docs.gitlab.com/runner/ https://docs.gitlab.com/runner/].&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
 # Linux x86-64&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OU&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 # Linux x86&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OU&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 # Linux arm&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo chmod +x /usr/local/bin/gitlab-runner&lt;br /&gt;
 sudo useradd --comment &#039;GitLab Runner&#039; --create-home gitlab-runner --shell /bin/bash&lt;br /&gt;
 sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner&lt;br /&gt;
 sudo gitlab-runner start&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
 sudo gitlab-runner register&lt;br /&gt;
L&#039;URL et le token à spécifier pour configurer le runner se trouvent dans les options du projet GitLab sous &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt;, dans la section &#039;&#039;Set up a specific Runner manually&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Astuces =&lt;br /&gt;
* Afficher les runners existants : sudo gitlab-runner list&lt;br /&gt;
* Afficher l’état des runners : sudo gitlab-runner verify&lt;br /&gt;
* Supprimer les runners retirés de GitLab : sudo gitlab-runner verify --delete&lt;br /&gt;
* Retirer un runner :&lt;br /&gt;
** par url &amp;amp; token : gitlab-runner unregister --url &amp;lt;url&amp;gt; --token &amp;lt;token&amp;gt;&lt;br /&gt;
** par nom (le premier du nom sera retiré) : gitlab-runner unregister --name &amp;lt;name&amp;gt;&lt;br /&gt;
** tous : gitlab-runner unregister --all-runners&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/runners/README.md Configurer un runner]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/quick_start/README#configuring-a-runner Configurer les runners du projet]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/ Documentation du runner GitLab]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/install/ Installation du runner GitLab]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/install/linux-manually.html Installation du runner sous Linux]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/executors/ Explication des executeurs]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=GitLab_CI/CD&amp;diff=44849</id>
		<title>GitLab CI/CD</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=GitLab_CI/CD&amp;diff=44849"/>
		<updated>2019-02-07T09:48:05Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Prérequis =&lt;br /&gt;
* Version Gitlab &amp;gt;= 8.0 ou utiliser GitLab.com&lt;br /&gt;
* &amp;lt;code&amp;gt;Settings -&amp;gt; General -&amp;gt; Permissions -&amp;gt; Pipelines&amp;lt;/code&amp;gt; (&#039;&#039;Only team members&#039;&#039; ou &#039;&#039;Everyone with access&#039;&#039;)&lt;br /&gt;
* Au moins un runner configuré pour le projet (ou shared runner) (voir &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt;) (&#039;&#039;Enable shared runners on this project&#039;&#039; pour avoir accès aux shared runners)&lt;br /&gt;
&lt;br /&gt;
= Activation =&lt;br /&gt;
Définir un fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; valide à la racine du projet&lt;br /&gt;
&lt;br /&gt;
= Runners =&lt;br /&gt;
* Sont des VM isolées&lt;br /&gt;
* Peuvent être &#039;&#039;shared&#039;&#039; entre les projets&lt;br /&gt;
* Idéalement sur une autre machine que le projet GitLab&lt;br /&gt;
* Configurés par le fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; pour définir des étapes (build, test, deploy…)&lt;br /&gt;
* &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt; (pour voir lesquels sont assignés au projet)&lt;br /&gt;
&lt;br /&gt;
= Astuces =&lt;br /&gt;
* &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; est dépendant de la version (donc branche)&lt;br /&gt;
* Format du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt; :&lt;br /&gt;
 stages:&lt;br /&gt;
   - &amp;lt;étape&amp;gt;&lt;br /&gt;
   - &amp;lt;étape&amp;gt;&lt;br /&gt;
   - ...&lt;br /&gt;
 &lt;br /&gt;
 before_script:&lt;br /&gt;
   - &amp;lt;commande&amp;gt;&lt;br /&gt;
   - &amp;lt;commande&amp;gt;&lt;br /&gt;
   - … &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;job1-name&amp;gt;:&lt;br /&gt;
   stage: &amp;lt;étape&amp;gt;&lt;br /&gt;
   script:&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - …&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;job2-name&amp;gt;:&lt;br /&gt;
   stage: &amp;lt;étape&amp;gt;&lt;br /&gt;
   script:&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - &amp;lt;commande&amp;gt;&lt;br /&gt;
     - …&lt;br /&gt;
 &lt;br /&gt;
 …&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; Les espaces doivent rester des espaces (pas des tabulations)&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;/!\&amp;lt;/span&amp;gt; &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt; est un mot-clé obligatoire pour chaque job&lt;br /&gt;
* &amp;lt;code&amp;gt;before_script&amp;lt;/code&amp;gt; est optionnel et exécuté avant chaque &amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt;&lt;br /&gt;
* Les balises &amp;lt;code&amp;gt;stages&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;stage&amp;lt;/code&amp;gt; sont optionnelles mais structurent le pipeline&lt;br /&gt;
* &amp;lt;code&amp;gt;CI/CD -&amp;gt; Pipelines -&amp;gt; CI LINT&amp;lt;/code&amp;gt; (bouton) permet de tester la validité du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;stuck&#039;&#039; signifie qu’aucun runner n’est configuré pour prendre en charge le job&lt;br /&gt;
* Examples de &amp;lt;code&amp;gt;.gitlab_ci.yml&amp;lt;/code&amp;gt; : [https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/examples/README.md https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/examples/README.md]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement =&lt;br /&gt;
* Activation du pipeline à chaque push sur une branche disposant du fichier &amp;lt;code&amp;gt;.gitlab-ci.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Au lancement, chaque job est réalisé par un runner dans son propre environnement&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/quick_start/README Getting started with GitLab CI/CD]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/enable_or_disable_ci.md How to enable or disable GitLab CI/CD]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44848</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44848"/>
		<updated>2019-02-07T09:36:34Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=GitLab_Runners&amp;diff=44847</id>
		<title>GitLab Runners</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=GitLab_Runners&amp;diff=44847"/>
		<updated>2019-02-07T09:36:23Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: Created page with &amp;quot;= Auteur =  CHANET Zoran  = Introduction = Cette page de tutoriel explique comment installer simplement sur linux un runner utilisable pour un projet h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Auteur =&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Cette page de tutoriel explique comment installer simplement sur linux un runner utilisable pour un projet hébergé sur un serveur GitLab. Ces runners sont utilisés dans le cadre de [[GitLab CI/CD | l&#039;intégration continue sur GitLab]]. Bien entendu, il existe de nombreuses configurations différentes et même plusieurs types de runners. Ici, nous viserons l&#039;installation la plus simple, c&#039;est à dire un runner spécifique éxécuté par shell, donc avec les caractéristiques de la machine sur laquelle le runner est installé. Pour d&#039;autres configurations, n&#039;hésitez pas à parcourir les sources.&amp;lt;br&amp;gt;&lt;br /&gt;
La documentation du runner officiel de GitLab se trouve ici : [https://docs.gitlab.com/runner/ https://docs.gitlab.com/runner/].&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
 # Linux x86-64&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OU&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 # Linux x86&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OU&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 # Linux arm&lt;br /&gt;
 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUIS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo chmod +x /usr/local/bin/gitlab-runner&lt;br /&gt;
 sudo useradd --comment &#039;GitLab Runner&#039; --create-home gitlab-runner --shell /bin/bash&lt;br /&gt;
 sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner&lt;br /&gt;
 sudo gitlab-runner start&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
 sudo gitlab-runner register&lt;br /&gt;
L&#039;URL et le token à spécifier pour configurer le runner se trouvent dans les options du projet GitLab sous &amp;lt;code&amp;gt;Settings -&amp;gt; CI/CD -&amp;gt; Runners&amp;lt;/code&amp;gt;, dans la section &#039;&#039;Set up a specific Runner manually&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Astuces =&lt;br /&gt;
* Afficher les runners existants : sudo gitlab-runner list&lt;br /&gt;
* Afficher l’état des runners : sudo gitlab-runner verify&lt;br /&gt;
* Supprimer les runners retirés de GitLab : sudo gitlab-runner verify --delete&lt;br /&gt;
* Retirer un runner :&lt;br /&gt;
** par url &amp;amp; token : gitlab-runner unregister --url &amp;lt;url&amp;gt; --token &amp;lt;token&amp;gt;&lt;br /&gt;
** par nom (le premier du nom sera retiré) : gitlab-runner unregister --name &amp;lt;name&amp;gt;&lt;br /&gt;
** tous : gitlab-runner unregister --all-runners&lt;br /&gt;
&lt;br /&gt;
= Sources =&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/runners/README.md Configurer un runner]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://gricad-gitlab.univ-grenoble-alpes.fr/help/ci/quick_start/README#configuring-a-runner Configurer les runners du projet]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/ Documentation du runner GitLab]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/install/ Installation du runner GitLab]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/install/linux-manually.html Installation du runner sous Linux]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://docs.gitlab.com/runner/executors/ Explication des executeurs]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44846</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44846"/>
		<updated>2019-02-07T09:11:31Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44845</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44845"/>
		<updated>2019-02-07T09:05:19Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* L&amp;#039;équipe et leurs rôles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=44844</id>
		<title>User:Zoran.Chanet</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=User:Zoran.Chanet&amp;diff=44844"/>
		<updated>2019-02-07T09:05:07Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* 2018-2019 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Contact =&lt;br /&gt;
Profil LinkedIn : [https://www.linkedin.com/in/zoran-chanet Zoran CHANET]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitHub : [https://github.com/ProfesseurSid ProfesseurSid]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil GitLab : [https://gitlab.com/CHANET_Zoran CHANET_Zoran]&amp;lt;br&amp;gt;&lt;br /&gt;
Profil gricad.gitlab : [https://gricad-gitlab.univ-grenoble-alpes.fr/chanetz chanetz]&amp;lt;br&amp;gt;&lt;br /&gt;
E-mail : [mailto:zoran.chanet@etu.univ-grenoble-alpes.fr zoran.chanet@etu.univ-grenoble-alpes.fr] (expire en 2020)&lt;br /&gt;
&lt;br /&gt;
= Projets =&lt;br /&gt;
== 2017-2018 ==&lt;br /&gt;
[[RICM4 2017 2018 - Nucleo]] &lt;br /&gt;
&lt;br /&gt;
== 2018-2019 ==&lt;br /&gt;
[[VT2018 Thorntail]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ECOM-1F0 1819 BTB]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[PROJET-INFO5 1819 EDCampus]]&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=ECOM_1F0_2018-19_BTB_Zoran_CHANET&amp;diff=44843</id>
		<title>ECOM 1F0 2018-19 BTB Zoran CHANET</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=ECOM_1F0_2018-19_BTB_Zoran_CHANET&amp;diff=44843"/>
		<updated>2019-02-07T09:04:02Z</updated>

		<summary type="html">&lt;p&gt;Zoran.Chanet: /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation ==&lt;br /&gt;
[[User:Zoran.Chanet | CHANET Zoran]], Back-end, lead developer&lt;br /&gt;
&lt;br /&gt;
Projet : [https://air.imag.fr/index.php/ECOM_1F0_2018-19_BTB Brûle ta bûche !]&lt;br /&gt;
&lt;br /&gt;
== Journal de bord ==&lt;br /&gt;
= Semaine du 25 - Sprint 1 =&lt;br /&gt;
* Assignation des rôles&lt;br /&gt;
* Choix des technologies utilisées pour le projet (Slack, Trello, Google Drive, GitLab, draw.io)&lt;br /&gt;
* Apprentissage des méthodes de modèle des tâches, IHM abstraite, IHM concrète&lt;br /&gt;
* Création du Trello&lt;br /&gt;
* Création et configuration du serveur Slack&lt;br /&gt;
** Création du lien Trello-Slack (bot Trello dans le serveur Slack)&lt;br /&gt;
** Création du lien GitLab-Slack (notifications GitLab dans le serveur Slack)&lt;br /&gt;
* Participation à la définition de l&#039;arbre des tâches&lt;br /&gt;
* Participation à la définition de l&#039;IHM abstraite&lt;br /&gt;
&lt;br /&gt;
= Semaine du 2 =&lt;br /&gt;
* Recherches concernant le fonctionnement et l&#039;utilisation de JHipster, principalement son lien avec la génération, la modification et l&#039;utilisation des bases de données&lt;br /&gt;
* Ajout d&#039;un résumé des recherche sur la page air globale, création à cet effet de l&#039;espace &amp;quot;Technologies&amp;quot;&lt;br /&gt;
* Recherches concernant le filtrage des champ des entités par JPA&lt;br /&gt;
* Participation à la réalisation du diaporama pour la soutenance du 09 Octobre&lt;br /&gt;
&lt;br /&gt;
= Semaine du 9 =&lt;br /&gt;
* Soutenance professeurs + clients&lt;br /&gt;
* Production et ajout à la fiche JHipster d&#039;un tutoriel d&#039;installation basique par npm&lt;br /&gt;
* Production et ajout à la page AIR d&#039;un tutoriel d&#039;installation Maven&lt;br /&gt;
* Installation des technologies&lt;br /&gt;
* Harmonisation des versions installées au sein de l&#039;équipe&lt;br /&gt;
&lt;br /&gt;
= Semaine du 16 =&lt;br /&gt;
* Génération de l&#039;application monolithique avec JHipster app&lt;br /&gt;
** Choix des technologies utilisées pour la génération&lt;br /&gt;
** Test local de l&#039;application serveur&lt;br /&gt;
** Test local de l&#039;application client&lt;br /&gt;
* Pull request de l&#039;application sur le [https://gitlab.com/BruleTaBuche/eCOM/ repository GitLab]&lt;br /&gt;
* Réflexion autour des entités nécessaires à la base de données&lt;br /&gt;
&lt;br /&gt;
= Semaine du 23  =&lt;br /&gt;
* Nouvelle génération du projet JHipster&lt;br /&gt;
** Retour à la version par défaut (générée par Jipster) du .gitignore&lt;br /&gt;
** Annulation du choix de JHipster Registry (d&#039;autres groupes ont rapporté des erreurs liées lors du déploiement)&lt;br /&gt;
* Conception de la base de données&lt;br /&gt;
&lt;br /&gt;
= Semaine du 30 - Interruptions pédagogiques =&lt;br /&gt;
* Recherches sur le déploiement&lt;br /&gt;
&lt;br /&gt;
= Semaine du 6 =&lt;br /&gt;
* Tentative de déploiement de la base&lt;br /&gt;
** Installation de Docker CE&lt;br /&gt;
** Installation de Docker Compose&lt;br /&gt;
** Production du tutoriel d&#039;installation&lt;br /&gt;
** Tentative (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;échouée&amp;lt;/span&amp;gt;) de création de l&#039;image docker&lt;br /&gt;
&lt;br /&gt;
= Semaine du 12 =&lt;br /&gt;
* Poursuite de la tentative de déploiement&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Réussite&amp;lt;/span&amp;gt; du déploiement de l&#039;image Docker&lt;br /&gt;
** Utilisation du stage release dans le fichier [https://gitlab.com/BruleTaBuche/eCOM/blob/devCI/.gitlab-ci.yml &#039;&#039;.gitlab-ci.yml&#039;&#039;]&lt;br /&gt;
** Depuis la branche [https://gitlab.com/BruleTaBuche/eCOM/tree/devCI devCI] (base de données non intégrée)&lt;br /&gt;
** Hébergement dans le [https://gitlab.com/BruleTaBuche/eCOM/container_registry registry GitLab]&lt;br /&gt;
* Production d&#039;un tutoriel d&#039;installation des programmes requis (Docker CE, Docker compose) et de déploiement&lt;br /&gt;
&lt;br /&gt;
= Semaine du 20 - Sprint 2 =&lt;br /&gt;
* Tentative de déploiement d&#039;une image depuis la branche [https://gitlab.com/BruleTaBuche/eCOM/tree/integration_JDL Integration_JDL] (base de données intégrée)&lt;br /&gt;
** &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;De nombreux échecs&amp;lt;/span&amp;gt;&lt;br /&gt;
** De nombreux patchs &amp;quot;à la main&amp;quot; (prise en compte des changelogs liquibase dans le [https://gitlab.com/BruleTaBuche/eCOM/blob/integration_JDL/src/main/resources/config/liquibase/master.xml &#039;&#039;master.xml&#039;&#039;], ajout des entités dans [https://gitlab.com/BruleTaBuche/eCOM/blob/integration_JDL/src/main/java/org/fibois38/lbb/config/CacheConfiguration.java &#039;&#039;CacheConfiguration.java&#039;&#039;]...)&lt;br /&gt;
&lt;br /&gt;
= Semaine du 27 =&lt;br /&gt;
* Poursuite de la tentative de déploiement&lt;br /&gt;
* Mise à jour du modèle de données&lt;br /&gt;
** Village devient Commune&lt;br /&gt;
** De nombreuses suppressions &amp;quot;à la main&amp;quot; pour faire disparaître l&#039;entité indésirable&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Réussite &amp;lt;strong&amp;gt;partielle&amp;lt;/strong&amp;gt;&amp;lt;/span&amp;gt; du déploiement&lt;br /&gt;
** Certaines entités apparaîssent&lt;br /&gt;
** Certaines entités n&#039;apparaîssent pas&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Réussite &amp;lt;strong&amp;gt;totale&amp;lt;/strong&amp;gt;&amp;lt;/span&amp;gt; du déploiement&lt;br /&gt;
** Toutes les entités apparaîssent&lt;br /&gt;
** Le lien front-end - back-end est enfin completé&lt;br /&gt;
* Merge des branches nécessaires&lt;br /&gt;
&lt;br /&gt;
= Semaine du 4 =&lt;br /&gt;
* Conjointement avec Najwa, définition de l&#039;API selon les demandes du front-end&lt;br /&gt;
** Réalisation des requêtes nécessaires pour le scénario 1&lt;br /&gt;
** Test desdites requêtes&lt;br /&gt;
* Merge du front-end et du backend en vue du déploiement&lt;br /&gt;
&lt;br /&gt;
= Semaine du 11 =&lt;br /&gt;
* Conjointement avec Enzo, mise en place des appels à l&#039;API par le front-end&lt;br /&gt;
** Remplacement des appels à la BD mockée par de vrai appels&lt;br /&gt;
** Création si nécessaire des arguments pour requêtes GET&lt;br /&gt;
* Dans le même but, ajustement du backend&lt;br /&gt;
** Correction du mapping entité vers DTO pour correspondre aux attentes du front-end&lt;br /&gt;
* Participation à la préparation de l&#039;audit final&lt;br /&gt;
* Remplissage de la base de données en ligne&lt;br /&gt;
* (Re-)Correction du déploiement&lt;/div&gt;</summary>
		<author><name>Zoran.Chanet</name></author>
	</entry>
</feed>