YooGoo

 
 
Bienvenue sur YooGoo
 
 

 
 
News

Description du Projet
Avancement du Projet
L'équipe
Photos du Projet et du reste
 
 

 
 
Téléchargement

Le Client
Le Serveur
Les Sources Serveur
Les Sources Client
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale
 
 

 
 
Contacts

Franck Tetzlaff CV Tessari Marco CV Bouhelier Stéphane CV Pouiller Jérôme CV
 
 

 
 

\includegraphics{YooGoo-Line.eps}
Cahier des charges

BOUHELIER Stéphane alias Folkensama (Spé C1)
POUILLER Jérôme alias Hargos (Spé C1)
TESSARI Marco alias Zapata (Spé C1)
TETZLAFF Franck alias Danao (Spé C1)

EPITA - Novembre 2001


Contents

Introduction

Présentation du groupe

Nous sommes une équipe de quatre SpéC1. Danao (Franck Tetzlaff) et Hargos (Jérôme Pouiller) ont travaillé ensemble sur le projet EpiTarget (www.EpiTarget.fr.st) en Sup. Zapata (Marco Tessari) a travaillé dans l'équipe d'Hallucinétik pour le projet Zone 42 (hallucinetik.free.fr). Folken (Stéphane Bouhelier) est un redoublant de Spé.

Origine et nature du projet

De nos jours, le chat occupe une grande partie de l'Internet, on y trouve une grande communauté de chatteurs. Malheureusement les logiciels actuellement disponibles ne nous satisfont pas pleinement. C'est pourquoi nous avons décidé de créer notre propre serveur chat avec un protocole qui lui est propre ainsi qu'une nouvelle communauté : The YooGoo Community. En effet notre projet qui sera intitulé YooGoo (en hommage à Timothée Gustave qui disait il faut lutter contre la différence et non l'indifférence !!!) Plus sérieusement, YooGoo, ne signifie rien de spécial, c'est un mot sorti tout droit de l'esprit épitéen de ses concepteurs. Nous nous sommes un peu inspiré de Google et de Yahoo! Ce nom a le mérite d'être facile à retenir. De plus YooGoo.com était un des rares noms de domaine disponibles.
YooGoo est un projet de chat sécurisé complet. Il intègrera un client et un serveur. Nous devrons aussi pour les besoins du projet recréer un protocole.
Outre l'aspect pédagogique du projet, nous avons envie de faire un projet fini, professionnel et complètement débogue (ce qui n'était pas le cas des projets de Sup). Il sera basé sur une architecture client-serveur et offrira des fonctionnalités originales telles que la sécurisation des communications, mais il devra toucher un public le plus large possible et donc être à la fois accessible et puissant. Avec la réalisation du protocole propre à YooGoo liée à un site de type communautaire nous voulons donner au projet de bonnes bases pour que celui-ci ne meure pas à la fin de l'année. Et qui pourra (qui sais ?) détrôner un des géants IRC, ICQ ou Caramail.

Objet de l'étude

A travers le projet Yoogoo nous tenons à accomplir un projet fini de part en part, le plus professionnel possible. C'est-à-dire qu'il sera professionnel dans sa conception (travail théorique puis pratique) mais également dans son aboutissement (version très stable, et déboguée). L'intérêt collectif de ce projet est donc de tirer profit des erreurs commises en Sup, à savoir précipitation dans les soutenances, et une fâcheuse tendance à vouloir se précipiter dans le code. De plus, le groupe devrait être plus solide que ceux de l'année dernière car nous connaissons désormais les personnes avec qui nous travaillons. A titre personnel, l'intérêt de Yoogoo est de pouvoir plus se pencher sur les algorithmes et de découvrir de nouveaux domaines de l'informatique comme les bases de données, le réseau, le cryptage (choses qui pourront nous servir plus tard dans notre carrière).
Le but de Yoogoo est donc de rivaliser avec les grands que sont ICQ, Caramail, ou IRC. Nous avons donc étudié les solutions existantes sur le marché en matière de discussion sur internet. Yoogoo tirera profit des avantages et essaiera de corriger les défauts.

L'IRC, le doyen des protocoles de chat

IRC a l'avantage d'être open source, ce qu'il lui permet d'etre encore très populaire. N'importe qui peut ainsi créer son propre client et ajouter les fonctions dont il a besoin. La plupart des clients IRC permettent de faire des scripts, ce qui a encore augmenté la durée de vie de celui-ci. Ils permettent de faire une utilisation avancée de l'IRC. L'IRC possède aussi la particularité de pouvoir connecter les serveurs en réseaux. Néanmoins, son protocole n'a pas tenu compte des évolutions technologiques. Il n'y a ainsi pas de profil utilisateur ni de fonction pour rechercher des utilisateurs. Il est impossible de recevoir des messages off-line et il n'y a pas de gestions des états (away, off-line, ...). Ajoutons aussi que l'IRC n'est absolument pas sécurisé.

ICQ, s'est imposé au cours des dernières années

ICQ est arrivé sur le marché assez récemment. Le principe est de pouvoir joindre ses amis connectés à n'importe quel moment. Microsoft, Aol, Yahoo, et beaucoup d'autres ont repris le principe pour créer leur propre programme. Ces programmes possèdent : une liste d'amis, des profils utilisateur, la possibilité de recevoir des messages off-line et un moteur de recherche sur les profils. Mais ICQ devait être lucratif. Ainsi, le client possède des bandeaux publicitaires et le protocole est propriétaire. Le serveur ICQ est unique. Le client ICQ est imposé à l'utilisateur. Celui-ci est d'ailleurs très encombrant et "mange" trop de ressources système. Il est aussi peu intuitif et possède trop de fonctions inutiles. Il oblige aussi l'utilisateur à s'inscrire sur le serveur ICQ (avec un N° que l'on oublie tout le temps). Là encore, le protocole d'ICQ n'est pas sécurisé.

Caramail, le petit nouveau à l'ascension fulgurante

Dernièrement, Caramail a développé un chat avec un client Java. Il est devenu très vite populaire grâce à son interface intuitive et sa portabilité. L'utilisateur aime aussi les petits smileys graphiques et toutes les petites fonctions qui le rendent user-friendly. Il possède aussi une fonction de recherche d'utilisateurs néanmoins beaucoup moins évoluée que celle d'ICQ. Mais, là encore, le protocole est propriétaire et empêche de programmer son propre client. Il manque de fonctions avancées et ne satisfait pas les utilisateurs aguerris. On ne peut par exemple pas changer de pseudo. Les utilisateurs se plaignent aussi de la lenteur du chargement du client Java. Comme ICQ, l'utilisateur est obligé de créé un compte.

Nous remarquons qu'aucun de ces chats ne correspond parfaitement aux attentes de l'utilisateur. Or Yoogoo à pour but faire un mixe de toutes les solutions proposées. Par conséquent, les fonctionnalités principales seront:
  • l'utilisation intuitive
  • sécurisation des discussions
  • administration avancée
  • serveur robuste
  • base de donnée des utilisateurs

Fonctionnalités de Yoogoo

Notre projet se compose donc de clients reliés à un serveur. La principale tâche à accomplir est la réalisation du serveur. Pour ce faire, il faudra, tout d'abord développer la couche de base qui repose sur l'implémentation de winsock et de la sécurité (cryptographie). Puis viendra la création du protocole et de toutes les fonctions qui le composent. La gestion multi-utilisateurs sera implémentée assez rapidement. En parallèle, il faudra développer la base de données qui repose sur les types abstraits. L'interface client sera améliorée avec le temps (version minimale pour les tests serveurs jusqu'à la version finale).
Par ailleurs, le site web se doit d'être mis à jour quotidiennement ou presque et doit être à la hauteur d'un projet orienté réseau.

Le chat

Nous avons reprit l'idée d'IRC. Lorsqu'un utilisateur se connecte sur le serveur, il aura la possibilité de s'enregistrer et d'ajouter un mot de passe à son compte. Son compte sera ainsi sauvegardé dans la base de données du serveur. Il retrouvera ses préférences (son profile, sa liste d'amis, etc..) lorsqu'il se reconnectera. Cet enregistrement ne sera pas obligatoire. L'utilisateur aura toujours la possibilité de se connecter en invité.
L'utilisateur pourra rejoindre un canal. Sur un canal, toutes les personnes connectées reçoivent les messages de tous les autres utilisateurs. Si l'utilisateur rejoint un canal inexistant, celui-ci est automatiquement créé. Tout comme les comptes utilisateurs, les canaux pourront être enregistrés. Les utilisateurs pourront parler entre eux en " privé ". Ils pourront choisir entre une connection directe (peer-to-peer) ou en passant par le serveur. L'utilisateur aura accès à de nombreuses commandes d'information sur les autres utilisateurs. Il aura aussi la possibilité de faire une recherche sur la base de données. Toutes ces fonctions seront décrites par le protocole.
Le protocole sera suffisamment intuitif pour qu'un utilisateur puisse se connecter à YooGoo sans interface graphique (ce qui sera notre cas au début du projet). La rédaction du protocole devra être assez détaillée pour qu'un programmeur puisse recoder un serveur ou un client YooGoo. Le client et le serveur devront avoir un parseur pour l'analyse des messages reçus. Il traitera le message pour appeler la fonction associée.

Le serveur multi-threads

Pour développer le serveur YooGoo nous devrons être capables de gérer un grand nombre d'utilisateurs en même temps. Nous avons alors deux choix possibles. Premièrement le séquentiel: le programme doit être structuré de telle manière qu'il passe d'un utilisateur à un autre sans ralentir l'exécution du programme et en exécutant bien toutes les requêtes envoyées par le client. Deuxièmement les threads, ce sont des chemins d'exécution autonomes au sein d'un processus (ici le programme YooGoo) et qui partagent leur espace d'adressage, leur codage et leurs données globales. Chacun dispose de son propre jeu de registres, de sa propre pile, de ses propres mécanismes d'entrée, y compris d'une file d'attente de messages privés.
Il semble évident que les threads apportent une meilleure solution à notre problème. Tout d'abord, ils sont parties intégrantes de l'OS (Windows ou Unix), il ne sera donc pas trop difficile de les intégrer dans notre code. De plus en mode séquentiel, certaines fonctions assez lourdes peuvent ralentir l'exécution, chose qui ne peut pas se produire, ou qui ne se ressent quasiment pas avec les threads. Dans notre programme chaque utilisateur sera lié à un thread qui s'occupera de traiter toutes les requêtes envoyées par le client, ce qui est beaucoup plus intuitif et compréhensible qu'avec le séquentiel.
Pour la couche réseau nous avons choisit d'utiliser le protocole TCP/IP pour l'échange des données, celui ci est désormais le plus utilisé et le plus portable. Pour être en accord avec le choix des threads nous utiliserons comme stratégie de gestion des entrées/sorties réseau, un serveur multi-thread couplé avec des sockets bloquants. Chaque nouvelle connection va lancer un nouveau thread qui va gérer l'échange de données entre l'utilisateur connecté et le serveur. Cette méthode nous permet de n'avoir (virtuellement) qu'à gérer un utilisateur à la fois.
L'échange d'information entre les divers threads se fera en passant par la base de données qui sera globale. Ce choix nous permet d'avoir un code réseau portable à la fois sous Unix et sous Windows. Outre les méthodes itératives classiques (socket asynchrone couplé avec la fonction select() ), les " overlapped I/O " semblaient prometteurs. Malheureusement cette technique disponible que uniquement Windows (Winsock 2) a été écartée pour son manque de portabilité. Le serveur sera donc principalement développé pour Windows avec les Windows Sockets, mais d'une tel façon que le port sous Unix (Sockets Unix) soit le plus simple possible.

La sécurité

L'une des fonctions originale de Yoogoo sera d'être sécurisé. Car dans la plupart des logiciels sur le marché actuel, les données transitent en clair et donc il est facile d'espionner les communications des autres. Bien sûr, ces logiciels ne garantissent pas la confidentialité des conversations, mais leur grande popularité on fait que souvent les utilisateurs ne pensent pas à ce manque de confidentialité et s'échangent des données qui peuvent être sensibles (comme des mots de passe, des numéros de téléphone ...). Par exemple, lorsque vous installez ICQ, ce message s'affiche:
IMPORTANT NOTICE
Please note that the ICQ service is not for use by children under 13 years of age. If it comes to ICQ's attention through reliable means that a registered user is a child under 13 years of age, ICQ will cancel that user's account.
Also please note that the ICQ service and software, as with most Internet applications, is vulnerable to various security issues and hence should be considered unsecured. By using the ICQ service and software and the Internet in general, you may be subject to various risks, including among others:
  • Exposure to objectionable material and/or parties, including without limitation, contaminated files.
  • Unauthorized invasion of your privacy during, or as a result of, your use or another's use of the system.
  • Spoofing, eavesdropping, sniffing, spamming, breaking passwords, harassment, fraud, forgery, "imposturing", electronic trespassing, tampering, hacking, nuking, system contamination including without limitation use of viruses, worms and Trojan horses causing unauthorized, damaging or harmful access and/or retrieval of information and data on your computer and other forms of activity that may even be considered unlawful.
  • Unauthorized exposure of information and material you listed or sent, on or through the ICQ system to other users, the general public or any other specific entities for which the information and material was not intended by you. If you do not wish to be subjected to these risks, you are advised not to use the ICQ service and software. Furthermore, please do not use the ICQ service and software for "Mission Critical" or "Content Sensitive" applications and purposes. For the purpose of this section "Mission Critical" applications and purposes shall mean applications and use that may result in damage; "Content Sensitive" shall mean any information or data you do not wish to be freely accessible and generally available to Internet users.
Please note that in each and every Internet application, the IP address of the sender is an integral part of the TCP/IP standard protocol of the Internet, and can be extracted by any party to the communication session using certain software and/or hardware. Also note that the IP privacy feature, designed to allow an ICQ user to reduce the exposure of his/her IP address on ICQ, is provided to you as a convenience only and does not guarantee a complete non-exposure of your IP address.
For the ICQ software's terms of service please review the ICQ License Agreement, the Privacy Policy, the Acceptable Use Policy, Usage Notices, Tools Notices and any other terms of service document available on or through http://www.icq.com/legal/. Always check for the latest terms of service available on or through http://www.icq.com/legal/.
European Union ICQ users understand and consent to the processing of personal information in the United States.
C'est donc par soucis de confidentialité que toutes les données entrantes et sortantes (que ce soit sur client, que sur le serveur) seront sécurisées. Ceci sera complètement transparent pour l'utilisateur.
Le premier niveau de sécurité, et le plus important car son rôle est de protéger la confidentialité des informations, se situe au niveau du transport. Deux solutions s'offrent à nous. Soit on utilise un tunnel sécurisé du type SSL, soit on crypte les données de façon logiciel, en les faisant circuler, cryptées sur le réseau. Nous avons opté pour la deuxième solution car celle-ci nous semblait plus naturelle, et plus intéressante à réaliser. De plus, elle nous offre une plus grande liberté d'action, et nous permettra si besoin est, de changer l'algorithme de cryptage si celui-ci devient peu fiable. Cette opération sera facilement réalisable car le transport de données sera toujours le même, seule la façon dont sont cryptées les données changera.
Pour ce qui est de l'algorithme de cryptage, les techniques actuelles nous proposent deux méthodes valables différentes: le cryptage symétrique ou asymétrique. Les autres méthodes telles que les algorithmes secrets, ne nous conviennent pas, car nos sources seront disponibles et donc il serait très aisé de décrypté un message. Les méthodes par cryptage secret ne sont valables que lorsque l'on ne connaît pas l'algorithme de cryptage qui a permis d'obtenir le message chiffré. De plus, un cryptage secret est difficilement réutilisable, car le cryptage est toujours effectué de la même manière. C'est pour cela que l'on a introduit des " clés " qui permettent, à partir d'un même algorithme, d'obtenir plusieurs messages différents. La différentiation entre cryptage symétrique et asymétrique vient de l'utilisation différente des clés. Lors du cryptage symétrique une seule clé est nécessaire, que se soit pour chiffrer le message que pour le déchiffrer. Ceci implique que l'envoyeur et le receveur du message soient tous les deux en possession de cette clé qui doit rester secrète. Une des difficultés est donc d'échanger cette clé avec le destinataire du message. Mais un des avantages de cette méthode est que le chiffrement et le déchiffrement est beaucoup plus rapide que pour les cryptages asymétriques. Le cryptage asymétrique permet d'éviter l'échange de clé, en introduisant une notion de clé publique et de clé privée. La clé publique est une clé que tout le monde connaît, et qui est utilisée pour le chiffrement. Seule la clé privée correspondant à la clé publique peut déchiffrer le message. L'avantage de cette technique est de ne pas avoir à s'échanger la clé, mais le chiffrement est plus long, celui qui chiffre ne peut pas déchiffrer, et il est impossible de savoir si la personne qui a envoyé le message est bien celle que l'on pense.
A la lumière de tous ces facteurs, notre choix s'est porté sur un cryptage symétrique. Parmi ceux ci, l'algorithme DES (Data Encryption Standard) est le plus connu. Actuellement, il est considéré comme suffisamment sûr, mais l'augmentation de la puissance des ordinateurs tend à réduire de plus en plus cette sécurité au fil des années. Néanmoins pour fiabiliser cet algorithme il est possible de faire un Triple-DES, en appliquant trois fois d'affilé l'algorithme. Cette propriété vient du fait que la sécurité du DES repose sur le même principe qu'un écran de fumé ou, en jargon cryptographique, sur les principes de confusion et de diffusion. Le but de la confusion est de cacher toute relation existant entre le texte clair, le texte chiffré et la clé. Le but de la diffusion est de répartir les effets conjugués du texte clair et de la clé sur la plus grande longueur possible de texte chiffré. Ces deux principes rendent l'analyse cryptographique très difficile. La difficulté à surmonter est l'échange de la clé entre le client et le serveur. Nous utiliserons alors une méthode de cryptage asymétrique, pour l'échange de clé. Le serveur générera régulièrement une clé publique et une clé privée. Lors d'une connexion la clé privée sera envoyée en clair au client qui n'aura plus qu'a crypter la clé DES et l'envoyer au serveur. L'algorithme retenu sera un RSA. Il est basé sur des principes arithmétiques, méthode beaucoup moins obscure que les permutations effectuées par le DES. La difficulté de factoriser des grands nombres rend cet algorithme très sûr. Le cryptage des données sera effectué avant chaque envoi de message et l'échange de la clé de cryptage sera effectué à la connexion, ce qui fait que l'utilisateur ne se rendra compte de rien du tout et que cette sécurité sera totalement transparente à ses yeux.

La Base de Données

Dans chaque programme qui gère une grande liste d'utilisateurs, la base de données joue un rôle primordial. C'est pourquoi nous avons longtemps réfléchi sur la méthode à employer pour gérer cette base. Notre but est d'en avoir une rapide et occupant peu de place en mémoire principale (moins de 2 Mo). Deux possibilités s'offraient à nous. La première était d'utiliser MySQL ou un serveur SQL. Il faut savoir que la licence de SQL est gratuite sous Unix mais pas sous Windows. L'utilisation de SQL nous permettrait de gérer les profils utilisateurs ainsi que ceux des canaux en toute sécurité et avec une vitesse optimale (SQL est l'une des bases de données les plus performantes). De plus, l'apprentissage du langage SQL est relativement simple et pourra nous être utile pour le développement du site Web, pour notre culture, et nous pourrions être invités à l'utiliser plus tard dans notre vie. Le deuxième possibilité était de coder nous même notre base de données avec tous les algorithmes de recherche que nous avons vus en Sup et en Spé. Cette solution permettrait d'adapter notre base aux besoins de YooGoo.
Nous avons opté pour la deuxième solution pour plusieurs raisons. Etant donné le peu de requêtes de notre projet, utiliser SQL serait un peu éccessif. Cela reviendrait à écrasé une mouche à l'aide d'un marteau-pilon. De plus, coder par soit même un algorithme de recherche est beaucoup plus passionnant que d'en reprendre un déjà tout fait. Cela permettra par ailleurs d'appliquer notre cours dans un cas pratique, chose qui arrive trop peu souvent, malheureusement. Notre base de données serait donc adaptée à nos exigences. Par ailleurs, nous voulions que dans YooGoo toutes les grandes parties soient recréées par nous et dépendent donc le moins possible de programmes extérieurs. L'utilisation de SQL nous aurait contraint à installer un autre serveur (SQL) à côté du notre.
Nous avons longtemps cogité sur la méthode à employer pour notre base de données. Nous avions le choix entre les arbres, les tableaux statiques, les méthodes de hachages. Nous avons finalement opté pour les arbres. Les tableaux statiques sont incompatibles avec nos besoins. Il nous est impossible de savoir le nombre de personnes qui feront partie de notre base de données. Les méthodes de hachage auraient pu nous convenir : elles sont très rapides pour la recherche, mais elles ne sont pas compatibles avec des recherches par tranches car les données ne sont pas ordonnées selon leur valeur mais selon la valeur de la fonction de hachage. Par ailleurs, le calcul de la fonction de hachage n'est pas simple dans notre cas (pour les mêmes raisons que pour les tableaux statiques la gestion des collisions n'est pas évidente). Les arbres binaires constituent donc une bonne alternative entre simplicité et rapidité. Le principal défaut des arbres binaires est le déséquilibre qui peut engendrer un arbre dégénéré. Nous utiliserons donc l'AVL et toutes les fonctions qui l'accompagnent (calcul du déséquilibre, rotations …) pour contrer ce problème.
En ce qui concerne la recherche multi-critères nous utiliserons un arbre par critère. C'est-à-dire que chaque noeud aura autant de pointeurs fils que de critères de recherche possible.
  1. Profil utilisateur:
    • Informations basiques (nom, pseudo, age, sexe, ville)
    • Contact List
    • Statut
    • Avatar
    • Champs à droit (Photo, tel…)
  2. Profil canal :
    • Informations classiques (nom, propriétaire, catégorie…)
    • Statut (public, privé, caché…)
    • Mot de passe

L'administration

Pour l'administration, nous nous sommes beaucoup inspirés d'Unix, référence en la matière. Le serveur devra pouvoir être administré à distance. Comme les connections sont sécurisés, il n'y a aucun problème. Cela rend l'administration très puissante (à la manière du Shell Unix). L'administrateur s'identifiera sur le serveur. Il aura ensuite accès aux commandes d'administration. Parmi ces privilèges, l'administrateur pourra commander n'importe quel autre utilisateur. Il pourra ainsi régler tous les problèmes de comportements sur YooGoo. Il aura aussi accès à des commandes telles que "kill" (pour déconnecter un utilisateur du serveur). Nous devons aussi prévoir des commandes pour ajouter/supprimer des comptes dans la base de données ou pour fermer des canaux. L'administrateur pourra aussi régler certains paramètres du serveur, tels que la durée du time-out, ou les informations devant être loguée, etc... L'administrateur pourra aussi obtenir des statistiques du serveur.
Contrairement aux autres chats du marché, YooGoo possèdera une grande richesse pour l'administration de ses canaux. Il y a trois niveaux de hiérarchie sur un canal : ChanRoot, Op et User. Les ChanRoot ont tous les droits. Il sera conseillé de n'avoir qu'un unique ChanRoot. L'administration des canaux se fera par les Op[erateurs]. Lorsqu'un canal est créé, son fondateur devient automatiquement ChanRoot. Il peut nommer d'autres utilisateurs ChanRoot et Op. Le serveur enregistrera le nom des Op et des ChanRoot. Les ChanRoot pourront restreindre les droits des Op. Ainsi, le fondateur du canal pourra faire de son canal un endroit super sécurisé où il est le seul maître à bord (ou laisser place à la démocratie (qui a dit Anarchie?)). Par défaut, les Op pourront kicker (déconnecter) un utilisateur du canal, bannir, changer le sujet du canal, nommer d'autres Op, etc. Si on essaye de nommer Op un utilisateur non enregistré, l'Op sera averti. Nous insistons sur le fait que l'utilisateur normal n'aura pas à se préoccuper de ces commandes complexes. Même si celui-ci crée un canal, il pourra utiliser la configuration par défaut qui satisfera la plupart des utilisateurs.

Interface: Intuitive

Le serveur n'aura pas d'interface graphique car l'administration du serveur se fera par l'intermédiaire du client, le rendant ainsi encore plus facilement portable.
L'ergonomie de l'interface est trés importante á nos yeux. Aussi nous nous efforcerons de faire une interface la plus intuitive possible. Malgres la simplicité de l'interface, l'utilisateur aura toujours acces à la puissance de la ligne de commande. Comme nous le disions précédemment, tout le client YooGoo pourra être géré à la ligne de commande. La création de l'interface sera alors relativement facile. Il suffira de connecter les événements aux bonnes procédures.
L'expérience nous montre que l'utilisateur se perd facilement dans les différentes fenêtres ouvertes sous windows. Nous voulons tout d'abord une interface monobloc. L'avantage des interfaces multi-blocs était d'être sur plusieurs conversations en même temps. Pour palier ce problème, nous allons beaucoup utiliser les onglets (comme sur Caramail). On pourra ainsi passer d'une conversation à l'autre avec les onglets. Lorsque l'on recevra un message dans une fenêtre cachée, l'onglet se mettra à clignoter.
Il est souvent utile d'avoir des infos sur les canaux où l'on est connecté, les personnes avec qui on parle, sur le serveur, etc. Pour cette raison, nous allons diviser la fenêtre de YooGoo en deux. D'un côté les discussions en cours, et de l'autre, les diverses informations utiles. Cette fenêtre d'info pourra être fermée ou réduite par l'utilisateur. Pour avoir une conversation privée avec un utilisateur, on fera un double click dessus, pour joindre un canal idem, etc. Bref, nous rendrons YooGoo le plus intuitif possible.
Le client permettra une gestion simple de son profile. Il permettra aussi d'enregistrer ses conversations. Diverses options seront possibles. Ainsi, ces enregistrements pourront être horodatés. Il y aura différents modes de classement des logs (par date, par canal,...).

Le Site Web

La principale rubrique de site Web sera les news. Nous informerons les utilisateurs de l'état d'avancement du projet et des événements importants qui ont des conséquences sur le projet (les partiels, l'élection du BDE, les grosses fêtes qui pourraient perturber le projet, etc..). L'utilisateur pourra downloader les différentes versions du client, du serveur et les sources. Le site Web permettra aussi de consulter la documentation de YooGoo on-line ou bien en la téléchargeant. Nous ajouterons aussi au site des informations sur les concepteurs (nous), dont nos CV en prévision du stage de fin d'année. Nous mettrons aussi des liens vers les sites qui nous ont aidés.
Nous voulions que le site Web soit facile à entretenir. La mise à jour devait se faire semi automatiquement. Nous avons pensé à utiliser le PHP avec SQL. Nous avons trouvé un outil qui s'appelle PHPNuke. Celui-ci offre un squelette de site PHP ainsi qu'une interface graphique. Ceci réduit le travail graphique du site (qui n'est pas notre principal objectif). Pour la gestion de la base SQL, la plupart des hébergeurs gérant le PHP possèdent PhpMyAdmin qui permet de gérer facilement une base de données SQL. Néanmoins, le travail à faire reste conséquent car nous n'avons aucune notion de PHP, ni de SQL.
Pour le moment, nous nous faisons héberger par Free.fr. Néanmoins, vu la lenteur de Free.fr, nous pensons peut-être héberger le site chez une personne de l'équipe. L'inconvénient est que nous ne pouvons pas garantir que nos machines fonctionnent 24h/24 (une panne de Proxy, un formatage est si vite arrivé !!!).

Conclusion

Technologie et méthodologie

Pour mener à bien notre projet nous allons avoir besoin d'un point de vue matériel, d'un petit parc informatique (réseau local assez développé : 3 machines minimum + un serveur) pour les tests initiaux. Par la suite, une connection Internet chacun suffira. Des connections à débit différent nous permettront de connaître les performances de Yoogoo. Dans tous les cas il nous faudra un serveur tournant sous Unix ou Windows assez performant pour supporter tous les utilisateurs connectés ainsi qu'une connection Internet assez puissante. De plus, nous aurons besoin d'un serveur web pour pouvoir héberger notre site PHP car les hébergeurs sont ou trop chers ou trop lents.
D'un point de vue intellectuel, nous aurons besoin d'une équipe motivée et solidaire (pas de travaux dans son coin). Notre méthode est professionnelle : chaque semaine nous aurons une réunion de projet pour savoir où nous en sommes et pour définir les tâches de la semaine à venir. Nous allons par ailleurs avoir besoin de beaucoup de documentation. Celles disponibles sur le net étant parfois peu instructives, un investissement en librairie est donc inéluctable.
En matière de logiciels, nous avons besoin d'un environnement de programmation puissant et intuitif. C++ Builder de Borland est de loin plus convivial que son homologue de chez Microsoft, mais beaucoup plus bogué. Nous utiliserons donc Visual C++ comme environnement de programmation. Pour le site Web, le Bloc-Note est la solution la plus simple et la moins onéreuse. Pour le fonctionnement du site PHP nous utiliserons EasyPHP et son installation automatique de Apache/PHP/SQL sous Windows. Nous utiliserons aussi Apache sous UNIX pour certains autres tests. Pour les quelques graphismes du site et du client, nous ferons confiance à la célébrité de PhotoShop. Parmi les programmes qui nous seront utiles pour coder, on peut aussi citer ICQ (on a beau faire un chat, il faut qu'on puisse se parler quand YooGoo sera encore en Beta, bien que ICQ soit toujours en version Beta !!!) et WinAmp (si, si, c'est un outil de travail).

Planning

Dates
Zapata
(Marco Tessari)
Danao
(Franck Tetzlaff)
Folken
(Stéph Bouhelier)
Hargos
(Jérôme Pouiller)
Soutenance I * Apprentissage du C et de Visual C++.
* Recherche de documentation et implémentation des algorithmes de cryptage (DES,RSA).
* Création des fonctions de connection client/serveur avec winsock.
* Apprentissage du C et de Visual C++.
* Structure de la base de donnée des utilisateurs et des canaux.
* Ecriture d'un protocole de communication entre le client et le serveur.
* Apprentissage du C et de Visual C++.
* Implémentation des librairies des types abstraits (principalement des AVL)
* Apprentissage du C et de Visual C++
* Mise en place du site web. Programmation des pages PHP et SQL. Création des graphismes
* Ecriture d'un protocole de communication entre le client et le serveur
Soutenance II * Création d'un serveur de connections sécurisées.
* Parseur pour l'interprétation des commandes
* Gestion des Threads et des connections sur le serveur * Implémentation de la base de données (sauvegarde, crétion, mise à jour) * Entretient du site web.
* Implémentation des commandes du protocole (gestion des utilisateurs)
Soutenance III * Implémentation des commandes d'administration du serveur.
* Serveur opérationnel, logs et stats.
* Implémentation des commandes du protocole (peer-to-peer, discussion privée, infos, stats) * Recherche sur la base de donnée.
* Implémentation des commandes du protocole (base de donnée)
* Entretient du site web.
* Implementation du protocole sur le serveur (gestion des canaux)
Soutenance Finale * Création d'une interface pour le client. * Gestion des logs dans le client.
* Création d'une interface pour le client
* Création d'une interface pour le client * Entretient du site web.
* Création d'une interface pour le client

Coûts du Projet

Dépenses pour le Projet YooGoo:


4 Licences pour Microsoft Visual C++ vachement chères. Heureusement, ils sont en pleine période de promo, alors, on les a 15Frs 60 Frs
Redirection de YooGoo.com pendant un an 100 Frs
4 PC super cher
4 Efreiens exploités pour coder à notre place dans une cave 0.48 Frs/h * 8000 heures
Un médecin de Festina pour que les Efreiens pètent la forme 10000 Frs
Total environ 30000 Frs



Recettes de YooGoo:
  • Publicité intégrée au client YooGoo et sur le site Web: 0 Fr (projet sans pub pour l'instant)
  • Droits d'exploitations sur YooGoo: 0 Fr (Licence GNU)

Pour terminer ...

Yoogoo se veut donc être un projet fini, capable de rivaliser avec les grands que sont ICQ, IRC, et Caramail. Pour ce faire, il faudra s'appuyer sur les qualités de ces derniers et corriger leurs défauts. Une fois YooGoo terminé, nous sommes conscients qu'une grande partie du travail est encore à fournir : nous devons populariser YooGoo. La publicité est le moyen le plus efficace. Aujourd’hui sur le net il est assez simple de se faire connaître à travers les bannières publicitaires notamment. Par ailleurs, le bouche à oreille est la publicité la plus viable. Voila donc tout l'intérêt de créer un projet convivial, simple d'utilisation, professionnel, qui permettra aux surfeurs de se le recommander. Enfin, la publication peut également nous aider à nous faire connaître. De plus, pour que YooGoo puisse toucher le grand public, il lui faudra une bande passante capable de supporter un grand nombre d'utilisateurs, c’est pourquoi nous avons pensé à héberger notre serveur chez un provider. Par ailleurs, le site Web sera sans doute remanié et nous implémenterons peut-être un client java si populaire avec Caramail.
Voilà tous nos objectifs, ce qui confirme que YooGoo ne sera pas seulement un projet de Spé, il sera le projet d'un groupe qui voit en lui son premier grand projet et s'efforcera de le faire vivre.
 
 

 
 
Documentation

FAQ
Conception du Protocole
SDK en Ligne
Télécharger SDK
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale

Comment marche...
Les Canaux
Le Profile
L'administration
La Base de Données
La Cryptographie
Winsock
Le Multithreading
 
 

 
 
Liens

Epita
EpiTarget
Hallucinetik - Zone 42
poupouill.fr.st Minosis (Spé C2)
La Spé C1
La Sup C1
 
 


 
 
made in Epita Powered by ApachePHP Scripting Language

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2000 by YooGoo Team
Des remarques, des question, des choses pas claires? Hargos@ifrance.com