~~ODT~~
====== IUT GO ! ======
L'objectif de ce projet est de concevoir collaborativement les briques d'un réseau social basé sur la géolocalisation.
Les PokeStud (qui n'aiment pas être enfermés) veulent pouvoir se déplacer à leur guise mais pouvoir retrouver leurs amis à volonté.
===== Principes =====
Chaque groupe travaille en équipes de 3 à 4 étudiants dirigées par un chef de projet transverse aux équipes.
Le chef de projet a pour rôle d'identifier les points communs entre les équipes, d'aider les équipes à trouver des solutions et de préparer le travail d'intégration.
Le projet se décompose en 2 grandes phases : 1) Création des briques de bases en sous-groupes; 2) Intégration par le développement de fonctionnalités par sous-équipes au choix des étudiants.
Des codes vous seront donnés, vous devez les utiliser pour vous aider à vous intégrer au mieux :
* les codes relatifs à [[https://www.openstreetmap.org/about|OpenStreetMap]] : ce module vous permettra de visualiser les éléments intéressants sur une carte. Les codes à utiliser (ils ont été enrichis pour vous faciliter les tâches) sont [[https://bitbucket.org/cyrilcecchinel/openstreetmap_iut|ici]] (Pour charger sous IntelliJ un projet qui se trouve sous GIT, voir [[https://mbf-iut.i3s.unice.fr/doku.php?id=intellij#recuperer_un_projet_git|ici]] avec l'adresse git : https://bitbucket.org/cyrilcecchinel/openstreetmap_iut. Puis exécutez le main qui se trouve dans la classe Demo sous java.
/* http://wiki.openstreetmap.org/wiki/Main_Page
*/
* le module "[[http://sparks-vm26.i3s.unice.fr/repository/iut-public/|Member]]" (correspondant au cas d'étude "Qui est-ce?" ci-dessous) qui vous donne des briques de base pour vous aider à développer vos propres modules intégrant du JSON, des tests unitaires, MAVEN. Le code source et les tests associés à ce module sont disponibles [[https://bitbucket.org/cyrilcecchinel/member_service_iut|ici]] ...
Vos codes doivent :
- être réalisés en utilisant un dépôt GIT (Vous serez individuellement évalués sur vos commit);
- correspondre à des modules Maven;
- respecter les règles de séparation de préoccupations et la qualité de vos codes est un critère d'évaluation.
Chaque module est fourni avec :
- des tests unitaires;
- une classe de test dédiée et qui prend une forme différente en fonction des modules.
Les fonctionnalités attendues présentent à la fois de la **valeur** par rapport à notre application cible et une **complexité** de développement. Pour vous aider, des indices vous sont données à titre indicatif, ils peuvent être modifiés lors de l'avancement du projet.
Ils sont liés à la notation selon le schéma suivant.
**Valeurs :**
* ++ signifie très forte valeur : ne pas l'avoir fait **perdre 4pts**
* + signifie utile : ne pas l'avoir fait **perdre 2 pts**
* = signifie tant pis si on ne l'a pas
**Complexité :**
* $$ fonctionnalité difficile : **+ 4 pts**
* $ fonctionnalité normale : **+ 2 pts**
* - fonctionnalité facile : **+ 1 pt**
Au travers des "Histoires utilisateurs (User Stories/US)", vous devrez préciser les fonctionnalités en gérant les cas particuliers (e.g. personne non enregistrée, erreurs de coordonnées). De même les problèmes de propriétés non fonctionnelles comme le nombre d'enregistrements, les temps d'affichage doivent être exprimés sous forme de contraintes et limites. Evidemment une fonctionnalité mal construite ne vous permet d'avoir tous les points et peut vous en faire perdre.
Les étudiants peuvent demander à ajouter des fonctionnalités/histoires. Dans ce cas, il faut une validation par le "Product Owner" i.e. l'enseignant.
/*http://wiki.openstreetmap.org/wiki/JMapViewer
*/
===== Première partie : Briques de base =====
==== Qui est-ce ? ====
Objectif : identifier de manière unique les membres du réseau.
- Enregistrer un membre :Nom de la personne, prénom, (identifiant)
- Récupérer un membre à partir de son identifiant
- Enregistrer les membres dans un fichier
- Lire un fichier contenant des membres
Ce module vous est donné: http://sparks-vm26.i3s.unice.fr/repository/iut-public/
==== 1 ) Marauder's trace ====
Objectif : tracer les déplacements des PokeStud.
- (++, $) Enregistrer la position de X : Jour, Heure, positionGPS;
- (+, $) Où était X à telle Date ? On renvoie la position au plus prés de la date;
- (++, $) Quelle est la dernière position de X ? GPS + Date
- (=, $) Donne-moi le suite des positions de X entre Date1 et Date2?
- (=,$$) Où est X habituellement le lundi, avec quel pourcentage de probabilité ?
- (+,$$) Qui sont les membres en position Y à la distance près de Z ?
- (+,$) Mémoriser les positions enregistrées depuis Date1
- (+,-) Récupérer les positions enregistrées dans un fichier donné
(++,-) Voir : Console de saisie
Bilan :
* vous pouvez perdre 3*4pts + 4*2points = 20 points;
* vous avez un potentiel de 2*1 + 5*2 + 2*4 = 20 points;
==== 2) Face Notebook ====
Objectif : Prendre en compte l'individualité de chacun
- (++, - ) Enregistrer la formation suivie par X : (Info1, Infocom2, ....)
- (+, - ) Quelle est la formation suivie par X ?
- (=, - ) Qui est inscrit avec telle formation ?
- (+, - ) Enregistrer l'humeur de X : happy, sad, ...
- (=, - ) Quelle est l'humeur de X ?
- (+, - ) Enregistrer le surnom de X
- (=, - ) Quel est le surnom de X ?
- (++, - ) Enregistrer l'adresse (coordonnées GPS) de X.
- (+, - ) Quelle est l'adresse de X ?
- (++, $$ ) Qui habitent à une distance inférieure à Y km de X ?
- (=, $$ ) Qui habite le plus près de X ?
- (=, $ ) A quelle distance X habite de Y ?
(++,-) Voir : Console de saisie
Bilan :
* vous pouvez perdre 3*4pts + 4*2points = 20 points;
* vous avez un potentiel de 10*1 + 1*2 + 2*4 = 20 points;
==== 3) Linked In my world ====
Objectif : Enregistrer et retrouver des liens entre des personnes : ami, collègue, famille, ....
- (++, - ) Enregistrer un lien entre X et Y en précisant son type
- (++, $ ) Quels sont les liens directs entre X et Y ?
- (+, - ) Existe-il un lien de type Z entre X et Y ?
- (+, $ ) Existe-il une relation entre X et Z (il suffit qu'il existe des relations entre X et W et entre W et Z) ?
- (-, $$ ) Quelle est la relation entre X et Z (e.g. parenté avec W et ami entre W et Z)
- (-, $ ) Existe-il une relation de parenté entre X et Z (e.g. parenté avec W et parenté entre W et Z)
- (+, $$ ) Quel est le chemin le plus court entre X et Z ? (e.g. parenté avec W et parenté entre W et Z)
- (- , $$) Permettre d'ajouter un type de relation par exemple //conflit//
(++,-) Voir : Console de saisie
Bilan :
* vous pouvez perdre 3*4pts + 4*2points = 20 points;
* vous avez un potentiel de 3*1 + 3*2 + 3*4 = 21 points;
==== 4) Tchatche'Car ====
Objectif : Faciliter le co-voiturage.
- (++, $ ) Enregistrer un voyage : conducteur X, Depart (GPS), Arrivee (GPS), NombreDePassagers possibles, Jour et heure de départ
- (+, $ ) Obtenir des informations sur un voyage : conducteur X, Depart (GPS), Arrivee (GPS), NombreDePassagers possibles, Date de départ, nombre de passagers enregistrés
- (=, $ ) Quels voyages sont prévus à Date donnée à X heures près?
- (++, - ) Quels voyages sont prévus au départ de D ?
- (+, - ) Quels voyages sont prévus avec une arrivée en A ?
- (+, $ ) Enregistrer un passager sur un voyage donné.
- (+, $ ) Quels sont les passagers sur un voyage donné ?
- (=, - ) Quels sont les voyages faits par X ?
- (=, - ) Quels sont les voyages faits par X en tant que conducteur ?
- (=, $ ) Quels sont les voyages faits par X en tant que passager ?
- (=, $) Enregistrer les voyages dans un fichier.
- (=, -) Charger les voyages non encore réalisés qui se trouvent dans un fichier.
(++,-) voir : Console
Bilan :
* vous pouvez perdre 3*4pts + 4*2points = 20 points;
* vous avez un potentiel de 6*1 + 7*2 = 20 points;
==== 5) Place Advisor ====
Objectif : Favoriser l'organisation de voyages
- (++, -) Enregistrer un point d'intérêt : nom, description, coordonnées GPS
- (++, -/$) Incrémenter ou décrémenter un coefficient d'intérêt associé à un point d'intérêt (j'aime, je n'aime pas)
- (=, -) Obtenir le coefficient d'intérêt associé à un point d'intérêt
- (+, -) Associer un coût de nuité à un point d'intérêt
- (+, $) Calculer le coût d'un "itinéraire"((itinéraire = une liste de points d'intérêts pour l'instant)) (somme des coûts des points d'intérêts qui composent l'itinéraire)
- (=, $) Calculer des itinéraires en fonction d'un budget((On prendra en compte le cout des trajets et des distances lors de l'intégration))
- (=, $$) En maximisant l'intérêt
- (=, $$) En forçant la présence d'un point d'intérêt donné
- (=, $) En évitant la présence d'un point d'intérêt donné
- (++, -) Mémoriser les points d'intérêts dans un fichier
- (=, -) Charger les points d'intérêts qui se trouvent dans un fichier
(++,-) voir : Console
Bilan :
* vous pouvez perdre 4*4pts + 2*2points = 20 points;
* vous avez un potentiel d'au moins 7*1 + 3*2 + 2*4 = 21 points;
/* ===== 5- Capteurs =====
- Enregistrer un capteur : type, coordonnee, nom : compteur de PokeyMon, eeeee, agent00
- Modifier la position d'un capteur
- Enregistrer une image associée à un type de capteur :
- récupérer les types de capteurs enregistrés
- récupérer la liste des capteurs d'un type donné
- Enregistrer une valeur à un capteur : 2 pokemon vus (sous la forme d'une string);
- Demander la dernière valeur enregistrée pour un capteur
- (-,$$) : créer un capteur qui transmet sa valeur au système à interval régulier.
- (-,$$) : mémoriser l'histoire des valeurs prises par un capteur (2 à 12h 0 à 13h, 1 à 18h)
*/
==== 6) Alice's MAP ====
Objectif : Visualiser sur une carte des points donnés. Ce sous-projet est central. Sa réussite va impliquer toute la suite du projet. Contrairement aux autres sous-projets, il repose sur l'utilisation du module fourni.
Voici les fonctionnalités que vous devez ajouter :
* (++,-) Positionner un point (Marker) à partir de coordonnées GPS et d'un libellé
* (=, $) Saisir le point dynamiquement
* (++, -) Visualiser un chemin (ligne) entre deux markers donnés
* (=, $) Saisir les points dynamiquement
* (++, $/$$) Visualiser une description associée à un marker
* (=, $) Modifier une description associée à un marker
* (+, $/$$) Visualiser une description associée à un chemin
* (=, -) Modifier une description associée à un chemin
* (+, $) Prévoir une zone d'affichage d'informations
* (=, ?) Interroger un Marker pour obtenir des informations
(++, $/$$) voir : une démonstration basée sur des boutons éventuellement prédéfinis.
Bilan :
* vous pouvez perdre 4*4pts + 2*2points = 20 points;
* vous avez un potentiel d'au moins 2*1 + 7*2 = 16 points; ((difficile à déterminer. L'évaluation de la complexité des fonctionnalités additionnelles sera réalisée en direct).
/*
http://www.w3schools.com/googleapi/
Voir utilisation de googleMap associé aux autres services avant de se lancer...
https://www.lama.univ-savoie.fr/~hyvernat/Enseignement/1112/info224/tp4.html
var marker=new google.maps.Marker({
position:myCenter,
//animation:google.maps.Animation.BOUNCE,
title: 'Hello World!'
});
var image = 'images/beachflag.png';
var marker=new google.maps.Marker({
position:myCenter,
//animation:google.maps.Animation.BOUNCE,
title: 'Hello World!',
icon: image
});
https://developers.google.com/maps/documentation/javascript/examples/icon-complex
https://spring.io/guides/gs/rest-service/
*/
/* ===== 7- Sécurité dirigée par les rôles =====
Voir RBAC
7- Spy me or not!
8- Qui suis-je ne laisser voir que ce que l'on veut à qui l'on veut...
PAs sur que je sache le saparer du reste... Il y en a peut etre plusieurs dedans... et cela suppose des choix de devs...
Dessiner l'interface globale
*/
===== Partie Suivante : Intégration : =====
Voici quelques exemples, mais il appartient à chaque groupe de choisir ses "histoires".
- Visualiser une offre de covoiturage sur une carte
- Vérifier que la personne qui offre un covoiturage est bien au point de départ /arrivée
- Vérifier que le passager est bien au point de départ/arrivée
- Visualiser les personnes autour de moi à une distance donnée
- Rechercher qq qui a telles caractéristiques autour de moi : formation, humeur, ...
- Rechercher qq avec qui je suis ami/parent/... autour de moi
- Alimenter les reseau avec les covoitureurs en ajoutant un lien "co-voyageur"
- A la demande : en passant un co-voiturage
- Automatiquement à chaque déclaration d'un co-voiturage
- Visualiser la position de tous ses amis etc
- A chaque saisie de l'humeur on enregistre la position
- Visualiser la maison des membres
- Visualiser les points d'intérêts sur la carte
/* Notation de l'intégration :
la note du groupe = moyenne des notes des individus (y compris els 0)
la note d'un individu : sa note + 0,5*note du groupe / 1,5
*/
==== TIPS : ====
- Les coordonnées doivent être exprimées en coordonnées GPS, aller voir au moins l'interface ICoordinate qui vous est donnée dans le module OpenStreetView.
- Le calcul de la distance entre deux données GPS : http://www.movable-type.co.uk/scripts/latlong.html