|  |
 |
|
 |
| |
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
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é.
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.
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.
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 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é.
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
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.
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.
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.
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.
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.
- Profil utilisateur:
- Informations basiques (nom, pseudo, age, sexe, ville)
- Contact List
- Statut
- Avatar
- Champs à droit (Photo, tel…)
- Profil canal :
- Informations classiques (nom, propriétaire, catégorie…)
- Statut (public, privé, caché…)
- Mot de passe
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.
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,...).
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é !!!).
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).
| Dates |
|
|
|
|
| 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 |
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)
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.
|
|
 |
|
 |
|  |
|