QRezix

De WikiBR
Révision datée du 18 septembre 2005 à 16:09 par Fruneau (discussion | contributions) (Petit laius supplémentaire sur les modules)

qRezix est le principale client xNet encore maintenu. Il doit sa survie à sa qualité d'être le seul client développé qui soit multiplateforme tout en restant graphiquement potable. Il doit ces deux qualités à la bibliothèque Qt.

Historique

BR2000

Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui était un fan de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travailler à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivi de près par la version 1.1 le 6 avril qui suivait. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).

Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom, car en fait ce n'était qu'un implémentation en Qt de cet ancien client). Cette architecture simple est une fenêtre avec une liste de client chaque entrée indiquant le nom, la promo, les serveurs... Les favoris sont affichés en premier selon le choix de l'utilisateur.

BR2001

Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on a aucune trace de ce que JiBee a bien pu faire sur le projet. Ce qui est certain, c'est qu'après la vesion 1.2, il a travaillé sur l'internationnalisation du projet. Le but d'origine n'était pas de rentre qRezix internationnal, mais simplement de résoudre les problèmes d'encodage des caractères accentués. Le code source a donc totalement été traduit en anglais et une traduction français a été créée.

Qrezix-1.2.gif

JiBee a également porté qRezix de Qt2 à Qt3 ce qui a entraîné un blocage des release : Qt3 n'était en effet pas utilisable pour compiler qRezix légalement sous Windows...

JiBee a travaillé relativement seul sur le projet avec le support de Ey.

BR2002

Le projet était géré par Steak. La version 1.3 a été release le 1 mai 2004. Cette version n'était absolument par révolutionnaire mais apportait quelques améliorations dans la structure du code et des amélioration du comportement du programme.

Steak a ensuite travaillé sur la version 1.3.666 et en particulier sur l'authentification avec le serveur. Mais il a vite arrêter de travailler sur qRezix en raison du temps qu'il consacrait à l'étude du japonnais entre autre, et à différents problèmes occulaires. Cependant, le BR2002 a réalisé une prépassation très avancée ce qui fait que dès le mois de juin, la relève était en place...

BR2002/BR2003 : le temps d'une prépassation

Le BR2003 a commencé sont travail sur qRezix dès le mois de juin 2004. Et c'est moi qui m'en occupait déjà :).

La première chose a été de recompiler une version pour Windows, ce qui n'avait plus été fait depuis près d'un an. Ceci permettait donc d'envisager de futures release du programme pas uniquement sous Linux. Le travail s'est finalement concentré pendant les vacances d'été avec une amélioration importante de l'interface et de la structure interne (début de séparation de la gestion des connexions de l'affichage), la création d'une structure (pas terrible) de chargement de plug-ins, l'ajout d'icône pour rendre l'interface plus conviviale... La version a été tagguée tour à tour 1.3.666 puis 1.5.

Une autre innovation importante à été le passage du chat qui reposait un protocole en UDP vers un protocole TCP. Le but déclaré du BR2002 étant de rendre les communication fiables et sécurisées (on veut savoir si l'autre ne reçoit pas nos messages).

Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau serveur xNet , on conduit à la version 1.6 de qRezix qui est sorti le 14 octobre 2004 à la fois pour Windows, Linux et Mac OS X.

Qrezix-1.6.png

Face à qRezix 1.6.0 est apparu Rezix.NET qui se voulait innovant. Conséquence de ceci, on a travaillé à 2 avec Steak pour implémenter dans qRezix toutes les fonctionnalité des Rezix.NET. Ce qui a rapidement conduit à la sortie de qRezix 1.6.1 le 22 novembre 2004. C'était la dernière version sur laquelle ait travailler Steak.

BR2003

La suite a été plus calme. La préparation de qRezix 1.6.2 s'est faite tranquillement, l'objectif principal était de supprimer un maximum de bugs de cette future version. Les innovations n'ont pas été nombreuses, mais on pourra noter la completion du nick dans le chat avec tab et la recherche intelligente via clavier. Cette version a vu le retour de Ey parmi les développeurs. Elle a aussi été la seule version à bénéficier d'une sortie ayant été précédée de 2 release-candidates qui ont aidées à corriger plusieurs bugs supplémentaires. La version a finalement été sortie le 22 mars 2005.

Le problème de cette version est qu'elle a introduit un bug... enfin plutôt révélé un bug. Jusqu'à présent qRezix plantait en l'absence de réseau ce qui a été corrigé avec la 1.6.2. Mais ce que je n'avais pas remarqué à l'époque c'était qu'en l'absence de réseau qRezix raffraichissait la fenêtre toutes les secondes et en même temps changeait le thême d'icône. Conséquence directe de ce défaut, qRezix prenait 100% du processeur en l'absence de réseau, ce que j'ai eu la chance de constater lors de ma soutenance de modex... Il fallait donc sortir un version avant l'arrivée des 2004 pour éviter que ce bug ne pose trop de problème aux 2004 qui allaient passer leur soutenance de stage. C'est pour ça qu'est sortie la verson 1.6.3 le 1 mai 2005. Cette version innovait au passage une nouvelle organisation plus agréable des propriétés et peut-être globalement considérée comme stable.

Ceci n'a pas empêcher de continuer de développer cette branche avec la préparation de qRezix 1.6.4 qui devrait sortir dans les prochains jours. A part 2-3 bugs corrigés, cette version n'innove pas vraiment si ce n'est pas son intrégration améliorée à Mac OS et sa cache des propriétés.

Mais après un an de travail sur qRezix, j'étais enfin prêt pour le grand ménage. Même si pendant toute l'année je me suis efforcer d'améliorer la structure du code de qRezix pour le rendre plus modulaire et surtout plus maintenable, je n'avais jamais vraiment révolutionner le projet. Avec la sortie de Qt4 en juin, j'ai commencé à porter le code, et je n'ai pas pu m'empêcher de quasiment tout réécrire. Conséquence : le programme sera désormais modulaire, l'interface est repensée, le programme est plus léger en mémoire... Pour l'instant il a le numéro de code 1.7.0, mais il est fortement probable que cette version deviendra qRezix II vu l'importance des modifications du programme.

Qrezix-1.7.png

Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issue de mon année et des brouettes d'expérience au BR ainsi que les informations contenues dans le ChangeLog.

Branche 1.6

Structure du programme

La structure interne du programme peut-être résumée au schéma suivant :

Qrezix-1.6 structure.png

Ce schéma n'est pas exhaustif, mais met en évidence les différentes imbrications des éléments. Toutes les cadres qui se chevauchent (et le cas échéant se contiennet) représente des classes qui sont imbriquées l'une à l'autre. Ansi la classe QRezix qui gère la totalité du programme est totalement dépendante de la quasitotalité des autres classes, la classe RzxConnectionLister dont le but est de lister les personnes est complètement dépendante de RzxRezal et vice-versa (il y a même des redondances de stockage)... idem, pour le chat qui est géré partiellement par RzxConnectionLister et partiellement par RzxRezal.

La classe RzxComputer a une importance réduite et la quasitotalité de ses données sont redondantes avec RzxItem. De plus certaines informations de RzxComputer sont stockées directement par RzxConfig, qui est elle-même à moitié implémentée par RzxProperty.

En résumé, la structure (déjà modularisée comparée à la version 1.2 dans laquelle RzxConnectionLister n'existait pas et était partie intégrante de RzxRezal) n'est pas facilement maintenable.

Interface de plug-ins

Branche 1.7

Objectif

Structure du programme

Le schéma suivant représente de manière simplifié la structure interne de qRezix 1.7.x :

Fichier:Qrezix-1.7 structure.png

Bien que le nombre d'élément soit impressionnant, cette structure est beaucoup plus propre que celle de qRezix 1.6. Le schéma montre en effet en particulier que les éléments sont proprement séparé, les seuls dépendances entre les modules qu'il peut y avoir sont gérées par la bibliothèque principale.

Le RzxComputer a acquis un rôle beaucoup plus important, il gère désormais la totalité des informations concernant une machine et inclus les actions qu'il est envisageable d'effectuer (propriétés, chat, http, ftp...). Le chat est géré par les modules qui se déclarent comme supportant cette fonctionnalité, de même pour les propriétés.

La fenêtre de préférences (RzxProperty) génère dynamiquement la page de propriétés en fonction de ce que les modules installés désirent. Et tout est mis en oeuvre (au travers de classe abstraites regroupant tous les outils nécessaires) pour que chaque module puisse créer simplement ses propres classes de configuration.

Les modules peuvent être construit soit en built-in soit en plug-in. Aucun n'est nécessaire au fonctionnement du programme (enfin si on retire tous les protos réseau, programme perd beaucoup de son intérêt).