<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikibr.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fruneau</id>
	<title>WikiBR - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wikibr.binets.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fruneau"/>
	<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/Sp%C3%A9cial:Contributions/Fruneau"/>
	<updated>2026-05-11T20:48:26Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5529</id>
		<title>Passation 2k7-2k8</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5529"/>
		<updated>2009-11-25T16:58:47Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Repas de passation 2k7-2k8, qui aura lieu mercredi 25 novembre à 20h30 au Pastapapa : 6 rue Daunou&lt;br /&gt;
&lt;br /&gt;
* 2008&lt;br /&gt;
** [[Utilisateur:Feandil|Fëandil]] : 42&lt;br /&gt;
** [[Utilisateur:Riton|Riton]] : présent (arf, la veille de la pâle Finky)&lt;br /&gt;
** [[Utilisateur:Paulo|Paulo]] : présent (stoi Finky)&lt;br /&gt;
** [[Utilisateur:Karlos|Karlos]] : président :D&lt;br /&gt;
** [[Utilisateur:Qt|Qt]] : présent&lt;br /&gt;
** [[Utilisateur:Wilyo|Wilyo]] : présent&lt;br /&gt;
** [[Utilisateur:Pj|Pj]] : présent&lt;br /&gt;
** [[Utilisateur:Brice|Brice]] : présent&lt;br /&gt;
** [[Utilisateur:whiteknight|Jean]] : présent&lt;br /&gt;
** Lad : absent&lt;br /&gt;
** Anna : présente&lt;br /&gt;
* 2007&lt;br /&gt;
** [[Utilisateur:j-philippe|j-philippe]] : présent&lt;br /&gt;
** [[Utilisateur:fulanor|fulanor]] : présent&lt;br /&gt;
** [[Utilisateur:rogertroutman|rogertroutman]] : présent&lt;br /&gt;
** [[Utilisateur:Nathaniel|Nathaniel]] : présent&lt;br /&gt;
** [[Utilisateur:Sigma|Sigma]] : présent&lt;br /&gt;
** [[Utilisateur:Simon|Simon]] : présent, comme sa soeur&lt;br /&gt;
** [[Utilisateur:Totor|Totor]] : présent&lt;br /&gt;
** [[Utilisateur:Kithyane|Kithyane]] : présente&lt;br /&gt;
** [[Utilisateur:Mikado|Mikado]] : présent&lt;br /&gt;
** [[Utilisateur:Boris|Boris]] : présent&lt;br /&gt;
&lt;br /&gt;
* 2006&lt;br /&gt;
** [[Utilisateur:Xelnor|Xelnor]] : sys.stdout.write(&amp;quot;Présent\n&amp;quot;)&lt;br /&gt;
** [[Utilisateur:insane0|insane0]] : bite  (ça veut dire présent dans le langage des couilles)&lt;br /&gt;
** [[Utilisateur:Xav|xavier]] : stoi la bite&lt;br /&gt;
** [[Utilisateur:Claire|Claire]] : présenTE&lt;br /&gt;
** [[Utilisateur:Patrick|Patrick]] : absent... vous croyez qu'un jour le BR ne fera pas ses réunions/passation les soirs de chorale ? ;)&lt;br /&gt;
** [[Utilisateur:Zuzuf|Zuzuf]] : std::cout &amp;lt;&amp;lt; Morse::parse(&amp;quot;-.---.---.-...-.---.-...-...-.-.-...-...---.-...---&amp;quot;).toString() &amp;lt;&amp;lt; std::endl; return true;&lt;br /&gt;
** [[Utilisateur:eracil|eracil]] : présent&lt;br /&gt;
&lt;br /&gt;
* 2005&lt;br /&gt;
** [[Utilisateur:renard|milou]] : BITE. peux pas, ou alors seulement l'after et encore c'est pas sûr &amp;lt;- peux pas, je suis à Marseille&lt;br /&gt;
** [[Utilisateur:Drynn|Drynn]] : toujours présent sur les brs&lt;br /&gt;
** [[Utilisateur:Gartrog|Gartrog]] : présent&lt;br /&gt;
** [[Utilisateur:Elscouta|Elscouta]] : présent (même sur irc!)&lt;br /&gt;
** [[Utilisateur:Jp|Jp]] : présent, mais rappelez moi à la semaine quand même :p&lt;br /&gt;
** [[Utilisateur:Henri|Henri]] : présent virtuellement cause #loin&lt;br /&gt;
** [[Utilisateur:Schientos|Schientos]] : présent en esprit cause #province&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2004&lt;br /&gt;
** jacou : présent&lt;br /&gt;
** [[Utilisateur:Gui|GUI]] : pong&lt;br /&gt;
** [[Utilisateur:bernardofpc|bernardofpc]] présent&lt;br /&gt;
** pilki : présent&lt;br /&gt;
** [[Utilisateur:Laure|Laure]] : ''peut-être'', ça dépend de Bébé&lt;br /&gt;
** [[Utilisateur:Wilhem|Wilhem]] : présent, et accompagné par [[User:Xikh|Xikh]] (2005)&lt;br /&gt;
** [[Utilisateur:Sean|Sean]] présent&lt;br /&gt;
&lt;br /&gt;
* 2003&lt;br /&gt;
** [[Utilisateur:mYk|mYk]] présent&lt;br /&gt;
** [[Utilisateur:NC|NC]] présent&lt;br /&gt;
&lt;br /&gt;
* 2002&lt;br /&gt;
&lt;br /&gt;
* o&amp;lt; 2002 ?&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5510</id>
		<title>Passation 2k7-2k8</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5510"/>
		<updated>2009-11-12T13:57:55Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Repas de passation 2k7-2k8, qui aura lieu mercredi 25 novembre au soir !&lt;br /&gt;
Si vous avez des suggestions de lieu, c'est ici ! &amp;lt;br/&amp;gt;&lt;br /&gt;
* [[Utilisateur:fulanor|fulanor]] : 77 rue Mouffetard, resto argentin pour manger de la VIANDE (c'est la force)&lt;br /&gt;
* [[Utilisateur:insane0|insane0]] : Pour pas que fufu soit le seul à proposer, j'offre deux options.  À côté de la station Cluny - La Sorbonne, il y a un MacDo et un vendeur de panini.  Voilà.&lt;br /&gt;
* [[Utilisateur:Kithyane|Kithyane]] : insane0, tu sers à rien&lt;br /&gt;
* [[Utilisateur:Nathaniel|Nathaniel]] : Y a un restaurant italien plutôt bon du côté de Opéra, il me semble que c'est le pastapapa, 6 rue Daunou&lt;br /&gt;
&lt;br /&gt;
* 2008&lt;br /&gt;
** [[Utilisateur:Riton|Riton]] : présent (arf, la veille de la pâle Finky)&lt;br /&gt;
** [[Utilisateur:Paulo|Paulo]] : présent (stoi Finky)&lt;br /&gt;
** [[Utilisateur:Karlos|Karlos]] : président :D&lt;br /&gt;
** [[Utilisateur:Qt|Qt]] : présent&lt;br /&gt;
** [[Utilisateur:Wilyo|Wilyo]] : présent&lt;br /&gt;
** [[Utilisateur:Pj|Pj]] : présent&lt;br /&gt;
** [[Utilisateur:Brice|Brice]] : présent&lt;br /&gt;
* 2007&lt;br /&gt;
** [[Utilisateur:j-philippe|j-philippe]] : présent&lt;br /&gt;
** [[Utilisateur:fulanor|fulanor]] : présent&lt;br /&gt;
** [[Utilisateur:rogertroutman|rogertroutman]] : présent&lt;br /&gt;
** [[Utilisateur:Nathaniel|Nathaniel]] : présent&lt;br /&gt;
** [[Utilisateur:Sigma|Sigma]] : présent&lt;br /&gt;
** [[Utilisateur:Simon|Simon]] : présent, comme ta soeur&lt;br /&gt;
** [[Utilisateur:Kithyane|Kithyane]] : présente&lt;br /&gt;
&lt;br /&gt;
* 2006&lt;br /&gt;
** [[Utilisateur:Xelnor|Xelnor]] : sys.stdout.write(&amp;quot;Présent\n&amp;quot;)&lt;br /&gt;
** [[Utilisateur:insane0|insane0]] : bite  (ça veut dire présent dans le langage des couilles)&lt;br /&gt;
** [[Utilisateur:Xav|xavier]] : stoi la bite&lt;br /&gt;
** [[Utilisateur:Claire|Claire]] : présenTE&lt;br /&gt;
** [[Utilisateur:Patrick|Patrick]] : absent... vous croyez qu'un jour le BR ne fera pas ses réunions/passation les soirs de chorale ? ;)&lt;br /&gt;
** [[Utilisateur:Zuzuf|Zuzuf]] : std::cout &amp;lt;&amp;lt; Morse::parse(&amp;quot;-.---.---.-...-.---.-...-...-.-.-...-...---.-...---&amp;quot;).toString() &amp;lt;&amp;lt; std::endl; return true;&lt;br /&gt;
** [[Utilisateur:eracil|eracil]] : présent&lt;br /&gt;
&lt;br /&gt;
* 2005&lt;br /&gt;
** [[Utilisateur:renard|milou]] : BITE. peux pas, ou alors seulement l'after et encore c'est pas sûr &amp;lt;- peux pas, je suis à Marseille&lt;br /&gt;
** [[Utilisateur:Drynn|Drynn]] : toujours présent sur les brs&lt;br /&gt;
** [[Utilisateur:Gartrog|Gartrog]] : présent&lt;br /&gt;
** [[Utilisateur:Elscouta|Elscouta]] : présent (même sur irc!)&lt;br /&gt;
** [[Utilisateur:Jp|Jp]] : présent, mais rappelez moi à la semaine quand même :p&lt;br /&gt;
&lt;br /&gt;
* 2004&lt;br /&gt;
** jacou : présent&lt;br /&gt;
** [[Utilisateur:Gui|GUI]] : pong&lt;br /&gt;
** [[Utilisateur:bernardofpc|bernardofpc]] présent&lt;br /&gt;
** pilki : présent&lt;br /&gt;
&lt;br /&gt;
* 2003&lt;br /&gt;
** [[Utilisateur:mYk|mYk]] présent&lt;br /&gt;
** [[Utilisateur:NC|NC]] présent&lt;br /&gt;
** [[Utilisateur:Fruneau|Fruneau]] je ne saurai que le jour même.&lt;br /&gt;
&lt;br /&gt;
* 2002&lt;br /&gt;
&lt;br /&gt;
* o&amp;lt; 2002 ?&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5435</id>
		<title>Passation 2k7-2k8</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k7-2k8&amp;diff=5435"/>
		<updated>2009-10-05T11:37:11Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Marquez ici vos '''in'''disponibilités pour le repas de passation 2k7-2k8, qui aura globalement lieu fin novembre...&lt;br /&gt;
&lt;br /&gt;
* 2007&lt;br /&gt;
** [[Utilisateur:j-philippe|j-philippe]] : vendredi 27/11&lt;br /&gt;
&lt;br /&gt;
* 2008&lt;br /&gt;
** [[Utilisateur:Qt|Qt]] : Ø&lt;br /&gt;
** [[Utilisateur:Feandil|Fëandil]] : Ø&lt;br /&gt;
** [[Utilisateur:Brice|Brice]] : Ø&lt;br /&gt;
&lt;br /&gt;
* 2003&lt;br /&gt;
** [[Utilisateur:NC|NC]] : 24/11&lt;br /&gt;
** [[Utilisateur:Fruneau|Fruneau]] : .* (a priori je ne pourrais pas venir, on verra le moment venu si c'est vraiment le cas)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4377</id>
		<title>Discussion:Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4377"/>
		<updated>2008-11-10T19:25:19Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Et donc, on discute ici pour choisir le restaurant !&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Fruneau|Fruneau]]&amp;gt; Pas le bistrot romain, c'était très décevant y'a 2 ans. Il Fiorentino est un peu petit, et ne sera pas adapté pour plus d'une vingtaine de personne. Pas d'autres avis :)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Sheik|Shk]]&amp;gt; Moyennement pong grec, antillais, ... +1 à Fruneau pour Bistro Romain, c'était d'ailleurs pareil il y a 3 ans à l'hippopotamus de mémoire&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Jp|JP]]&amp;gt; +1 contre le bistrot romain (pas de place pour tous ensemble...). Sinon je prefère pas de poisson, mais je peux toujours m'arranger... Je connais pas les cuisines greques et antillaise, mais pourquoi pas (tant que l'antillaise soit pas que du poisson :P).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Gartrog|Gtg]]&amp;gt; [HS] Pan NC ! [/HS] Je suis contre le resto romain également. Je crois que la crêperie de Cluny serait trop petite (à vérifier). On peut rajouter à la liste le Pot de (Fer||Terre) (?), passation Faërix de l'an dernier, qui peut être assez adapté pour le nombre que l'on sera.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Fruneau|Fruneau]]&amp;gt; D'après mes collègues VIAmen, le Flam's de Montparnasse est meilleur et plus accueillant que celui de Châtelet (serveur plus sympathique, service vraiment &amp;quot;à volonté&amp;quot;, salle plus conviviale...)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4372</id>
		<title>Discussion:Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4372"/>
		<updated>2008-11-06T09:37:20Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Et donc, on discute ici pour choisir le restaurant !&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;[[User:Fruneau|Fruneau]]&amp;gt; Pas le bistrot romain, c'était très décevant y'a 2 ans. Il Fiorentino est un peu petit, et ne sera pas adapté pour plus d'une vingtaine de personne. Pas d'autres avis :)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4371</id>
		<title>Discussion:Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4371"/>
		<updated>2008-11-06T09:36:50Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Et donc, on discute ici pour choisir le restaurant !&lt;br /&gt;
&lt;br /&gt;
* Pas le bistrot romain, c'était très décevant y'a 2 ans. Il Fiorentino est un peu petit, et ne sera pas adapté pour plus d'une vingtaine de personne. Pas d'autres avis :)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4292</id>
		<title>Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4292"/>
		<updated>2008-11-06T07:03:56Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : /* BR03 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le repas de passation BR2k6-BR2k7 aura lieu le mardi 25 novembre.&lt;br /&gt;
&lt;br /&gt;
Comme l'an dernier, il suffit de ponguer dans la case adéquate ; on peut ajouter des idées de restaurant en fin de page, mais le choix se fera sur la page de [[Discuter:Passation|Discussion]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Qui sera là ?=&lt;br /&gt;
==BR93==&lt;br /&gt;
==BR97==&lt;br /&gt;
==BR98==&lt;br /&gt;
==BR99==&lt;br /&gt;
==BR00==&lt;br /&gt;
==BR01==&lt;br /&gt;
==BR02==&lt;br /&gt;
==BR03==&lt;br /&gt;
&lt;br /&gt;
[[User:Fruneau|Fruneau]]&lt;br /&gt;
&lt;br /&gt;
==BR04==&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Alakazam|Alakazam]]&lt;br /&gt;
&lt;br /&gt;
==BR05==&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:renard|renard]]&lt;br /&gt;
&lt;br /&gt;
==BR06==&lt;br /&gt;
==BR07==&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Nathaniel|Nathaniel]]&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Shuba|Shuba]]&lt;br /&gt;
&lt;br /&gt;
== Amis du BR ==&lt;br /&gt;
=Choix du restaurant=&lt;br /&gt;
&lt;br /&gt;
* Hippopotamus&lt;br /&gt;
* Bistrot romain&lt;br /&gt;
* Un [http://www.restoaparis.com/avis-restaurant-paris/75005-7723-39 Moment Gourmand], cuisine antillaise, &lt;br /&gt;
* La [http://www.casa-valentino.com/carte.htm Casa Valentino,Italien] &amp;quot;loungeux&amp;quot;, ambiance feutrée, &lt;br /&gt;
* Le [http://www.fra.cityvox.fr/restaurants_paris/le-gourmand_93274/Avis-Lieu Gourmand], grec, récent, un menu 22 euros jusqu'à 36 euros&lt;br /&gt;
* [http://www.linternaute.com/restaurant/restaurant/17421/le-vin-qui-danse.html Le vin qui danse], restaurant bar à vins, 15-30 euros&lt;br /&gt;
* [http://www.lesrestos.com/fiche~local~PARIS~No~1273506093~Memory~%7C%7C%7C%7C%7C%7C%7CNom%7CASC%7C0%7C%7C%7C%7C%7C4052%7C750.htm Il Fiorentino], Italien que les vieux du CA connaissent bien, prix très corrects&lt;br /&gt;
* Les Bugnes / Sud Ouest / rue du Pot de Fer&lt;br /&gt;
* La Brouette, 41 r Descartes (derrière H IV), fondue ou pierrade, Pas raffiné mais convivial&lt;br /&gt;
* la bogeda tapas / cuisine espagnole&lt;br /&gt;
* la [http://www.linternaute.com/restaurant/restaurant/245/la-grange-saint-michel.html grange], Savoyard, 15-30 euros&lt;br /&gt;
* la creperie de cluny, (déjà fait y'a longtemps)&lt;br /&gt;
* &amp;quot;Chez Papa&amp;quot;, près de Denfert donc facile d'accès, cuisine du sud ouest, en qualité et surtout en quantité ! Petits mangeurs, s'abstenir (ou pas). Prix abordables, de 20 euros à no-limit.&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4359</id>
		<title>Discussion:Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4359"/>
		<updated>2007-11-15T20:36:20Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Faut que quelqu'un commence quand meme :P&lt;br /&gt;
&lt;br /&gt;
JP: Moi je suis bien chaud pour un italien, et &amp;quot;La Casa Valentino&amp;quot; avait un air plus intéressant à mon avis, donc voilà mon vote :P&lt;br /&gt;
&lt;br /&gt;
Gartrog: Par les temps qui courent le savoyard me tente pas mal. Sinon le vin qui danse a pas l'air mal non plus.&lt;br /&gt;
&lt;br /&gt;
Fruneau : La Brouette c'est pas mal, on mange bien... Il Fiorentino est sans doute trop petit à mon avis. Les autres je ne les connais pas&lt;br /&gt;
&lt;br /&gt;
En plus ce qui est bien à la brouette c'est qu'on peut envisager d'avoir une grand table et non pas plein de petites tables, ce qui permet souvent de discuter avec plus de monde. Les deux dernières passations c'était uniquement des petites tables et j'ai trouvé ça moins bien qu'il y a 3 ans où on avait 2 grandes tables pour toute le monde. (just my 2 cents)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4358</id>
		<title>Discussion:Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Discussion:Passation_2k6-2k7&amp;diff=4358"/>
		<updated>2007-11-15T20:30:15Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Faut que quelqu'un commence quand meme :P&lt;br /&gt;
&lt;br /&gt;
JP: Moi je suis bien chaud pour un italien, et &amp;quot;La Casa Valentino&amp;quot; avait un air plus intéressant à mon avis, donc voilà mon vote :P&lt;br /&gt;
&lt;br /&gt;
Gartrog: Par les temps qui courent le savoyard me tente pas mal. Sinon le vin qui danse a pas l'air mal non plus.&lt;br /&gt;
&lt;br /&gt;
Fruneau : La Brouette c'est pas mal, on mange bien... Il Fiorentino est sans doute trop petit à mon avis. Les autres je ne les connais pas&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4236</id>
		<title>Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4236"/>
		<updated>2007-11-14T23:33:55Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : /* Choix du restaurant */ Juste pour rendre la page un peu plus lisible&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le repas de passation BR2k5-BR2k6 aura lieu le mercredi 28 novembre. Lieu: Paris, resto: à déterminer (voir plus bas)&lt;br /&gt;
&lt;br /&gt;
=Qui sera là ?=&lt;br /&gt;
==BR 93==&lt;br /&gt;
==BR97==&lt;br /&gt;
==BR98==&lt;br /&gt;
==BR99==&lt;br /&gt;
==BR00==&lt;br /&gt;
==BR01==&lt;br /&gt;
==BR02==&lt;br /&gt;
==BR03==&lt;br /&gt;
&lt;br /&gt;
* [[User:Fruneau|Fruneau]]&lt;br /&gt;
* [[User:NC|NC]] (a priori aussi) (PAN pan pan !)&lt;br /&gt;
&lt;br /&gt;
==BR04==&lt;br /&gt;
* [[User:Alakazam|Alakazam]]&lt;br /&gt;
* [[User:Sheik|Sheik]] (a priori) (\_o&amp;lt; o&amp;lt; o&amp;lt; !)&lt;br /&gt;
* [[User:VinZ2|vinZ2]]&lt;br /&gt;
* [[User:Gui|GUI]]&lt;br /&gt;
* [[User:Sean|Sean]] (A confirmer..)&lt;br /&gt;
&lt;br /&gt;
==BR05==&lt;br /&gt;
[[User:Gartrog|Gartrog]]&lt;br /&gt;
&lt;br /&gt;
==BR06==&lt;br /&gt;
&lt;br /&gt;
=Choix du restaurant=&lt;br /&gt;
&lt;br /&gt;
* Hippopotamus&lt;br /&gt;
* Bistrot romain&lt;br /&gt;
* Un [http://www.restoaparis.com/avis-restaurant-paris/75005-7723-39 Moment Gourmand], cuisine antillaise, &lt;br /&gt;
* La [http://www.casa-valentino.com/carte.htm Casa Valentino,Italien] &amp;quot;loungeux&amp;quot;, ambiance feutrée, &lt;br /&gt;
* Le [http://www.fra.cityvox.fr/restaurants_paris/le-gourmand_93274/Avis-Lieu Gourmand], grec, récent, un menu 22 euros jusqu'à 36 euros&lt;br /&gt;
* [http://www.linternaute.com/restaurant/restaurant/17421/le-vin-qui-danse.html Le vin qui danse], restaurant bar à vins, 15-30 euros&lt;br /&gt;
* [http://www.lesrestos.com/fiche~local~PARIS~No~1273506093~Memory~%7C%7C%7C%7C%7C%7C%7CNom%7CASC%7C0%7C%7C%7C%7C%7C4052%7C750.htm Il Fiorentino], Italien que les vieux du CA connaissent bien, prix très corrects&lt;br /&gt;
* Les Bugnes / Sud Ouest / rue du Pot de Fer&lt;br /&gt;
* La Brouette, 41 r Descartes (derrière H IV), fondue ou pierrade, Pas raffiné mais convivial&lt;br /&gt;
* la bogeda tapas / cuisine espagnole&lt;br /&gt;
* la [http://www.linternaute.com/restaurant/restaurant/245/la-grange-saint-michel.html grange], Savoyard, 15-30 euros&lt;br /&gt;
* la creperie de cluny, (déjà fait y'a longtemps)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4229</id>
		<title>Passation 2k6-2k7</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Passation_2k6-2k7&amp;diff=4229"/>
		<updated>2007-11-14T22:57:52Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : /* BR03 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le repas de passation BR2k5-BR2k6 aura lieu le mercredi 28 novembre. Lieu: Paris, resto: à déterminer (voir plus bas)&lt;br /&gt;
&lt;br /&gt;
=Qui sera là ?=&lt;br /&gt;
==BR 93==&lt;br /&gt;
==BR97==&lt;br /&gt;
==BR98==&lt;br /&gt;
==BR99==&lt;br /&gt;
==BR00==&lt;br /&gt;
==BR01==&lt;br /&gt;
==BR02==&lt;br /&gt;
==BR03==&lt;br /&gt;
&lt;br /&gt;
[[User:Fruneau|Fruneau]]&lt;br /&gt;
&lt;br /&gt;
==BR04==&lt;br /&gt;
* [[User:Alakazam|Alakazam]]&lt;br /&gt;
* [[User:VinZ2|vinZ2 (Vincent Zanotti)]]&lt;br /&gt;
&lt;br /&gt;
==BR05==&lt;br /&gt;
==BR06==&lt;br /&gt;
&lt;br /&gt;
=Choix du restaurant=&lt;br /&gt;
&lt;br /&gt;
Hippopotamus&lt;br /&gt;
&lt;br /&gt;
Bistrot romain&lt;br /&gt;
&lt;br /&gt;
Un Moment Gourmand, cuisine antillaise, http://www.restoaparis.com/avis-restaurant-paris/75005-7723-39&lt;br /&gt;
&lt;br /&gt;
La Casa Valentino,Italien &amp;quot;loungeux&amp;quot;, ambiance feutrée, http://www.casa-valentino.com/carte.htm&lt;br /&gt;
&lt;br /&gt;
Le Gourmand, grec, récent, http://www.fra.cityvox.fr/restaurants_paris/le-gourmand_93274/Avis-Lieu, un menu 22 euros jusqu'à 36 euros&lt;br /&gt;
&lt;br /&gt;
Le vin qui danse, restaurant bar à vins, http://www.linternaute.com/restaurant/restaurant/17421/le-vin-qui-danse.html, 15-30 euros&lt;br /&gt;
&lt;br /&gt;
Il Fiorentino, Italien que les vieux du CA connaissent bien, http://www.lesrestos.com/fiche~local~PARIS~No~1273506093~Memory~%7C%7C%7C%7C%7C%7C%7CNom%7CASC%7C0%7C%7C%7C%7C%7C4052%7C750.htm, prix très corrects&lt;br /&gt;
&lt;br /&gt;
Les Bugnes / Sud Ouest / rue du Pot de Fer&lt;br /&gt;
&lt;br /&gt;
La Brouette, 41 r Descartes (derrière H IV), fondue ou pierrade, Pas raffiné mais convivial&lt;br /&gt;
&lt;br /&gt;
la bogeda tapas / cuisine espagnole&lt;br /&gt;
&lt;br /&gt;
la grange, Savoyard, http://www.linternaute.com/restaurant/restaurant/245/la-grange-saint-michel.html, 15-30 euros&lt;br /&gt;
&lt;br /&gt;
la creperie de cluny, (déjà fait y'a longtemps)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=503</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=503"/>
		<updated>2007-09-20T12:47:03Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : qRezix 2.1.0 est sorti depuis quelques temps maintenant...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante a été le passage du chat qui reposait sur un protocole en UDP vers un protocole TCP. Le but déclaré du BR2002 étant de rendre les communications fiables et sécurisées (on veut savoir si l'autre ne reçoit pas nos messages).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Le développement du port de qRezix en Qt4 a commencé en mai-juin 2005, en parallèle de la finalisation de la branche 1.6 avec la préparation de qRezix 1.6.4. Le port en Qt4, tout d'abord appelé 1.7, a rapidement évolué. Les vacances d'été ont été l'occasion de préparer une restructuration du programme. La suite de développement a principalement consisté à créer ou améliorer les différents modules. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
La première version de maintenance de qRezix 2 est sortie avant l'arrivée des 2005 sur le plateau et mettait en particuliers à jour les correspondance IP &amp;lt;-&amp;gt; Casert.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v2.1.0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2007&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Transfert de fichiers&lt;br /&gt;
* Module &amp;quot;Bob&amp;quot;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribués. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyClass::myFunction() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Utilisateur:Fruneau&amp;diff=366</id>
		<title>Utilisateur:Fruneau</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Utilisateur:Fruneau&amp;diff=366"/>
		<updated>2007-02-24T11:50:26Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Add my own website&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;membre du [[BR2003]]&lt;br /&gt;
&lt;br /&gt;
Nom réel : [https://www.polytechnique.org/profile/florent.bruneau.2003 Florent Bruneau]&lt;br /&gt;
&lt;br /&gt;
* [[Poste:Root|root]]&lt;br /&gt;
* développeur acharné de [[qRezix]]&lt;br /&gt;
* [[Poste:News|newsmestre]] (rtfibrp11)&lt;br /&gt;
* multiboot (Windows, Gnu/Linux Gentoo, MacOSX ;)&lt;br /&gt;
&lt;br /&gt;
Site perso : [http://fruneau.rznc.net Ma page vide] et [http://fruneau.rznc.net/mind/ mon blog] (pas très plein non plus)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=501</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=501"/>
		<updated>2007-02-19T09:13:32Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Improve qRezix 2 history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante a été le passage du chat qui reposait sur un protocole en UDP vers un protocole TCP. Le but déclaré du BR2002 étant de rendre les communications fiables et sécurisées (on veut savoir si l'autre ne reçoit pas nos messages).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Le développement du port de qRezix en Qt4 a commencé en mai-juin 2005, en parallèle de la finalisation de la branche 1.6 avec la préparation de qRezix 1.6.4. Le port en Qt4, tout d'abord appelé 1.7, a rapidement évolué. Les vacances d'été ont été l'occasion de préparer une restructuration du programme. La suite de développement a principalement consisté à créer ou améliorer les différents modules. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
La première version de maintenance de qRezix 2 est sortie avant l'arrivée des 2005 sur le plateau et mettait en particuliers à jour les correspondance IP &amp;lt;-&amp;gt; Casert.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;''v2.0.2''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;''à venir...''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Transfert de fichiers&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribués. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=500</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=500"/>
		<updated>2007-02-19T08:52:14Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Update 2.0.2 Changelog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante a été le passage du chat qui reposait sur un protocole en UDP vers un protocole TCP. Le but déclaré du BR2002 étant de rendre les communications fiables et sécurisées (on veut savoir si l'autre ne reçoit pas nos messages).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;''v2.0.2''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;''à venir...''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Transfert de fichiers&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribués. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Qt&amp;diff=1610</id>
		<title>Qt</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Qt&amp;diff=1610"/>
		<updated>2006-12-11T22:52:13Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : y'a une gestion du systray en Qt 4.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation sommaire ==&lt;br /&gt;
&lt;br /&gt;
[http://www.trolltech.com/qt Qt] est une bibliothèque en C++ multiplateforme.&lt;br /&gt;
&lt;br /&gt;
Qt est distribué, depuis la version 4, sous license GPL sur toutes les plateformes (la nouveauté de cette version étant la version OpenSource pour Windows). Ce qui en fait un outil bien adapté au travail du BR. Néanmoins, le BR avait auparavant des accords qui nous fournissent la version commerciale pour Windows.&lt;br /&gt;
&lt;br /&gt;
=== Intérêts ===&lt;br /&gt;
* l'abstraction du système d'exploitation est très poussée, sans pour autant empêcher de travailler de manière spécifique au système d'exploitation. Qt va même jusqu'à inclure des fonctions OS-specific pour faciliter le travail du programmeur.&lt;br /&gt;
* l'API est très intuitive (surtout celle de Qt4).&lt;br /&gt;
* Qt implémente des outils de haut-niveau qui rende la programmation très facile (le système de signal-slot par exemple est bien plus intuitif que le principe de callbacks) et qui limite le risque de bugs, tout en restant en C++ ce qui offre la flexibilité du C et la possibilité de garder du code de bas-niveau.&lt;br /&gt;
* Qt permet de développer facilement un programme traduit en plusieurs langues.&lt;br /&gt;
* Qt offre un système de skinnage de l'interface très puissant.&lt;br /&gt;
* la documentation est très complète et très bien conçue.&lt;br /&gt;
* Qt est réputé pour sa bibliothèque de templates puissante et non-buggée&lt;br /&gt;
&lt;br /&gt;
=== Défauts ===&lt;br /&gt;
* La compilation du programme est très lourde en raison d'un grand nombre de définition inline&lt;br /&gt;
* L'exécution du programme peut-être plus lente que celle d'un programme en GTK (par exemple) en raison de la forte abstraction de la boucle principale par le système de signals-slots.&lt;br /&gt;
&lt;br /&gt;
== Educationnal Licensing ==&lt;br /&gt;
&lt;br /&gt;
Le BR dispose d'un accord avec Trolltech qui permet d'obtenir gratuitement 100 licenses Qt Windows. Cet accord est valide jusqu'en 2029 et a été négocié en octobre/novembre 2004 alors que Qt pour Windows n'existait qu'en version commerciale.&lt;br /&gt;
&lt;br /&gt;
=== Fonctionnement ===&lt;br /&gt;
&lt;br /&gt;
Le principe de l'Educationnal Licensing est simple : Trolltech met à notre disposition sur un site de téléchargement les packages pour Windows :&lt;br /&gt;
[http://dist.trolltech.com/ericgrus/]. Ce téléchargement est protégé par mot de passe, et l'accès sera pour éviter les problèmes restreint à une nombre limité de personnes. Dans tous les cas, pour toute information il suffit de contacter [[User:GUI|GUI]], ou éventuellement [[User:Fruneau|Fruneau]].&lt;br /&gt;
&lt;br /&gt;
On dispose à côté de ceci d'un numéro de license attribué à l'Ecole Polytechnique. Il est important de noter que dans ce cadre particulier, le BR a négocié directement avec Trolltech des licenses qui dans les termes du système de license sont destinées à l'établissement d'enseignement.&lt;br /&gt;
&lt;br /&gt;
=== De l'intérêt de conserver les licenses commerciales ===&lt;br /&gt;
&lt;br /&gt;
Maintenant que Qt est en version libre sur tous les OS, on peut se demander pourquoi le BR conserve ses contacts chez Trolltech. La raison est simple : la version commerciale apporte des outils d'intégration aux IDE qui sont non-négligeables pour pouvoir recruter des programmeurs qui ne sont pas habitués aux outils du monde du Logiciel Libre. Dans la version que nous avons actuellement, il y a les outils d'intégration à Visual Studio, qui fait partie des programmes disponibles gratuitement pour les élèves sur le plateau par le biais du [[MSDNAA]].&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Utilisateur:Fruneau&amp;diff=365</id>
		<title>Utilisateur:Fruneau</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Utilisateur:Fruneau&amp;diff=365"/>
		<updated>2006-11-08T22:11:58Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Fix X.org URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;membre du [[BR2003]]&lt;br /&gt;
&lt;br /&gt;
Nom réel : [https://www.polytechnique.org/profile/florent.bruneau.2003 Florent Bruneau]&lt;br /&gt;
&lt;br /&gt;
* [[Poste:Root|root]]&lt;br /&gt;
* développeur acharné de [[qRezix]]&lt;br /&gt;
* [[Poste:News|newsmestre]] (rtfibrp11)&lt;br /&gt;
* multiboot (Windows, Gnu/Linux Gentoo, MacOSX ;)&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=497</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=497"/>
		<updated>2006-07-08T10:13:09Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : /* Windows */ le RZX_ALL_BUILTIN n'est plus nécessaire sous windows (activé par défaut)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;''v2.0.2''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;''à venir...''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=496</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=496"/>
		<updated>2006-07-08T10:07:26Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;''v2.0.2''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;''à venir...''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake &amp;quot;DEFINES+=RZX_ALL_BUILTIN&amp;quot; qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=495</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=495"/>
		<updated>2006-07-08T10:06:10Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Ajout d'un historique des version avec des changelogs réduits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
Voici un description des différentes versions de qRezix. Pour des informations exhaustive, il faut se reporter au ChangeLog du projet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th&amp;gt;'''Version'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Date'''&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;'''Changements'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;30 janvier 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v0.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;20 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v0.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;25 février 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;4 mars 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 avril 2002&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2003&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;'''v1.6.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;14 octobre 2004)&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage du chat en TCP&lt;br /&gt;
* Ajout de l'authentification des connexions (protocole xNet 3.9)&lt;br /&gt;
* Amélioration de l'ergonomie&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 novembre 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Ajout d'une 'ignore-list'&lt;br /&gt;
* Ajout des notifications d'arrivée/départ des favoris&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;22 mars 2004&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Tab-completion des pseudos dans le chat&lt;br /&gt;
* Ajout d'informations (IP, Client, Localisation)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;v1.6.3&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1er mai 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Fix principalement un 100% en cas d'absence de réseau&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v1.6.4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 septembre 2005&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Passage au protocole xNet 4.0&lt;br /&gt;
* Ajout du support de BSD&lt;br /&gt;
* Sauvegarde des propriétés checkées&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;'''v2.0.0'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;6 février 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Réécriture modulaire utilisant Qt4&lt;br /&gt;
* Carte permettant de situer visuellement les personnes&lt;br /&gt;
* Ajout de la notion de &amp;quot;Groupes&amp;quot;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;v2.0.1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;23 avril 2006&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;''v2.0.2''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;''à venir...''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
* Meilleure intégration à MacOS X (Support de Growl, ajout de menus...)&lt;br /&gt;
* Notification des discussions&lt;br /&gt;
* Recherches avancées ne se limitant plus aux pseudo&lt;br /&gt;
* Bugfixes&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake &amp;quot;DEFINES+=RZX_ALL_BUILTIN&amp;quot; qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=BR2003&amp;diff=398</id>
		<title>BR2003</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=BR2003&amp;diff=398"/>
		<updated>2006-06-24T22:43:50Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Corrige les majuscules dans les pseudo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu BR}}&lt;br /&gt;
Le fabuleux BR2003 créateur de ce wiki ;)&lt;br /&gt;
&lt;br /&gt;
== Équipe ==&lt;br /&gt;
&lt;br /&gt;
{| border=0 width=50% align=center&lt;br /&gt;
| [[Utilisateur:Dei|dei]]     || Prez, admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Fruneau|Fruneau]] || devel, root, news&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Pico|Pico]]    || root, web, devel, X-share&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:NC|NC]]      || root, news, IRCop, devel&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:El-sio|el-sio]]  || root, TV&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Ecco|Ecco]]    || root, TOL&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Esope|Esope]]   || web@frankiz, TV&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Bery|Bery]] || web@frankiz, Com&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Alban|Alban]] || web@frankiz, Trez&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Maupertuis|Maupertuis]] || admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Dr00gun|Dr00gun]] || admin@windows, FAQ&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Copernic|Copernic]] || admin@windows, X-share, FAQ&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:GZeuS|GZeuS]] || devel, X-share, FAQ&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:MYk|mYk]] || devel, X-share, FAQ, InfoBR&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:SchoppenHaueR|SchoppenHaueR]] || FAQ&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:OlivPi|OlivPi]] || FAQ&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:Thierry|Thierry]] || QDJ Master&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Projets==&lt;br /&gt;
&lt;br /&gt;
* Réalisation et mise en place du nouveau site [[FrankizII|Frankiz]] initié par le [[BR2002]]&lt;br /&gt;
* Réseau [[WiFi]]&lt;br /&gt;
* Mise en forme du projet [[Admin:DHCP|DHCP]] (page privée)&lt;br /&gt;
* Amélioration de [[qRezix]]&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=News&amp;diff=1032</id>
		<title>News</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=News&amp;diff=1032"/>
		<updated>2006-06-23T12:14:29Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Ajout des newsgroups d'admin &amp;amp;&amp;amp; précision de l'année de la mise en place des restriction de br.kes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu services}}&lt;br /&gt;
Le BR fournit aux élèves environ 250 newsgroups. Dans la plupart des autres école les mailings lists ont été privilégiées mais ici une grande partie de la vie promo se déroule sur des forums. On en trouve de toutes les formes (pour les sections, les binets, les nouveaux bâtiments, l'enseignement, les communautés...).&lt;br /&gt;
&lt;br /&gt;
== Utilité des Newsgroups ==&lt;br /&gt;
&lt;br /&gt;
Les différents newsgroups sont regroupés par catégories qui permet une plus grande lisibilité. Chaque catégorie de newsgroup a son rôle propre.&lt;br /&gt;
* '''br.binet.*''' : les newsgroups des binets, pour la com interne et externe des binets&lt;br /&gt;
* '''br.communaute.*''' : pour regrouper les ''gens'' autour de leurs passions, hors des cadres des binets.&lt;br /&gt;
* '''br.section.*''', '''br.promo.*''', '''br.bat.*''' : pour refléter l'organisation de l'école, et permettre la communication facilement entre les différents groupes constitués par le découpage géographique et administratifs des élèves&lt;br /&gt;
* '''br.informatique.*''' : pour le dépannage informatique... Il faut bien insister que le BR n'est pas réparateur informatique, et que donc br.binet.br n'est pas adapté pour le dépannage ne dépendant pas du BR.&lt;br /&gt;
* '''br.media.*''' : pour le partage de medias (personnellement j'ai pas, c'est un peu de l'incitation au piratage)&lt;br /&gt;
* '''br.pa.*''' : pour les petites annonces, 'ping machin', 'vend truc'...&lt;br /&gt;
* '''br.enseignement.*''' : pour tout ce qui a rapport à l'enseignement, y compris les 'ping projet machin'&lt;br /&gt;
* '''br.eleves''' : pour tout ce qu'on ne peut pas ranger autre part.&lt;br /&gt;
* '''br.*''' : tous les autres newsgroups &lt;br /&gt;
* '''public.*''' : newsgroups fournit par la DSI dont le BR assure un miroir. Ces newsgroups sont accessible à tout le personnel de l'Ecole&lt;br /&gt;
* '''private.*''', '''control.cancel''' : newsgroups privés du BR.&lt;br /&gt;
* '''local.*''', '''control.*''', '''junk''' : newsgroups d'administration&lt;br /&gt;
&lt;br /&gt;
== Crossposts ==&lt;br /&gt;
&lt;br /&gt;
Les crossposts sont le seul moyen acceptable de poster un même message sur différents newsgroups. Leur intérêt est de simplifier l'envoi et la lecture des posts :&lt;br /&gt;
* Il n'y a besoin que de poster un seul message pour qu'il apparaisse sur plusieurs newsgroups&lt;br /&gt;
* Il n'y a besoin de le lire que sur un seul newsgroup&lt;br /&gt;
* Toutes les réponses aboutissent au même endroit&lt;br /&gt;
* Les newsmestres sont contents&lt;br /&gt;
* Les lecteurs sont contens&lt;br /&gt;
* Le posteur est content&lt;br /&gt;
&lt;br /&gt;
Il faut tout de même faire attention... il y a une facheuse tendance sur les newsgroups à faire un crosspost sur 50 newsgroups pour 1 message de merde (genre ping clope)...&lt;br /&gt;
&lt;br /&gt;
Faire un crosspost nécessite juste de :&lt;br /&gt;
* définir plusieurs newsgroups de destination&lt;br /&gt;
* définir un newsgroups de réponse (Follow-up, Transmettre)&lt;br /&gt;
&lt;br /&gt;
== Les fups ==&lt;br /&gt;
&lt;br /&gt;
Les fups, c'est l'art et la manière de forcer quelqu'un à répondre sur le mauvais newsgroups... ça fait bien rire selui qui a fuppé, et ça agace celui qui s'est fait fupper. Il faut en particulier se méfier des vagues de fup (pâles, arrivée des TOS...) qui on tendance à pourir des newsgroups qui hébergent des discussion sérieuses.&lt;br /&gt;
&lt;br /&gt;
Les fups sont bien sûr désactivables via les scripts du serveur.&lt;br /&gt;
&lt;br /&gt;
== br.kes ==&lt;br /&gt;
&lt;br /&gt;
Suite à l'AG Kès de juin 2005 et aux trolls qui on pourrit br.kes à l'issue, la Kès a demandé à ce que br.kes ait un régime spécial :&lt;br /&gt;
* tout le monde peut initier une discussion&lt;br /&gt;
* les fups vers br.kes sont interdits&lt;br /&gt;
* les kessiers peuvent faire ce qu'ils veulent.&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=BR2002&amp;diff=1050</id>
		<title>BR2002</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=BR2002&amp;diff=1050"/>
		<updated>2006-06-14T10:50:56Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Ajout d'une photo sur la page du BR2002&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu BR}}&lt;br /&gt;
&lt;br /&gt;
{| border=0 width=50% align=center&lt;br /&gt;
| [[User:Kikx|Kikx]] || prez&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Falco|Falco]] || root News IRCop&lt;br /&gt;
|-&lt;br /&gt;
| Schmurtz || root XShareMac&lt;br /&gt;
|-&lt;br /&gt;
| [[User:PaXaL|PaXaL]] || root web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| Matrix || admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| Moi || admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| Bolzano || web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| Alyx || Trez&lt;br /&gt;
|-&lt;br /&gt;
| ArthurB || IRCop&lt;br /&gt;
|-&lt;br /&gt;
| LazyStuff || QDJ Master&lt;br /&gt;
|-&lt;br /&gt;
| Arrakis || root&lt;br /&gt;
|-&lt;br /&gt;
| mlk || web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| PsyCow || Faqmestre&lt;br /&gt;
|-&lt;br /&gt;
| Steak || Devel News&lt;br /&gt;
|-&lt;br /&gt;
| Neo || XShare&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:WakeUpNeo|WakeUpNeo]] || web@poly&lt;br /&gt;
|-&lt;br /&gt;
| R2 || TOL XShare&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:BR2002_DSI.jpg|thumb|right|Pot BR2002-DSI]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Réalisations ===&lt;br /&gt;
* Mise en place du partenariat de [[MSDNAA]]&lt;br /&gt;
* Renouvellement des serveurs [[Admin:Frankiz|Frankiz]], [[Admin:Heol|Heol]] et achat de [[Admin:Lunedenn|Lunedenn]]&lt;br /&gt;
* Lancement du projet [[WiFi]]&lt;br /&gt;
* Lancement du projet [[FrankizII]] de restructuration de [http://frankiz]&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_contacts&amp;diff=3436</id>
		<title>Modèle:Block contacts</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_contacts&amp;diff=3436"/>
		<updated>2006-06-12T20:47:56Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width: 100%; margin-top: 0.5em; margin-bottom: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:Mail.png|16px]] Contacts et liens&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em; background-color: #FFF; text-align: left;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Le Binet Réseau]]&lt;br /&gt;
* [[Partenaires|Nos partenaires commerciaux]]&lt;br /&gt;
&lt;br /&gt;
'''Autres liens'''&lt;br /&gt;
* [http://www.federez.org Federez, l'association des associations réseaux des Ecoles]&lt;br /&gt;
* [http://www.polytechnique.fr L'Ecole Polytechnique]&lt;br /&gt;
* [http://www.frankiz.net Frankiz, la page des élèves]&lt;br /&gt;
* [http://www.polytechnique.org Polytechnique.org]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=BugTracker&amp;diff=3519</id>
		<title>BugTracker</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=BugTracker&amp;diff=3519"/>
		<updated>2006-06-12T13:43:46Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : How-To report a bug&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
&lt;br /&gt;
Le BR dispose d'un bugtracker pour faciliter la gestion de ses projets. Ce bugtracker est ouvert à tous : tout le monde peut y ajouter une taâche à réaliser. Ce tracker peut-être aussi bien utilisé pour ajouter des rapports de bugs que des demandes de nouvelles fonctionnalités.&lt;br /&gt;
&lt;br /&gt;
== Comment rapporter un bug ? ==&lt;br /&gt;
&lt;br /&gt;
=== Collecter les informations ===&lt;br /&gt;
Tout d'abord avant de rapporter un bug, collecte un maximum d'informations sur l'erreur. Les principales informations sont :&lt;br /&gt;
* date et heure du problème (en particulier si il s'agit d'un bug d'une page web)&lt;br /&gt;
* procédure que tu as effectuée pour obtenir l'erreur et si possible permettant de la reproduire&lt;br /&gt;
* la version du programme (ou du navigateur Internet si c'est un bug d'une page web)&lt;br /&gt;
* toutes les informations permettant de décrire l'erreur : message, numéro, backtrace...&lt;br /&gt;
&lt;br /&gt;
Une fois que tu as toutes ces informations, il ne te reste plus qu'à les transmettre au BR.&lt;br /&gt;
&lt;br /&gt;
=== Utiliser le tracker ===&lt;br /&gt;
Le tracker du BR se trouve à l'adresse [http://bugs.frankiz http://bugs.frankiz]. Il n'est pas accessible à l'extérieur de l'Ecole. Quand tu veux soummettre un nouveau bug, tu as deux solutions :&lt;br /&gt;
* soit [http://bugs.frankiz/newuser tu t'enregistres en tant que nouvel utilisateur] et tu pourras ainsi recevoir des informations de suivi des tâches que tu as soumises&lt;br /&gt;
* soit tu le fais anonymement&lt;br /&gt;
&lt;br /&gt;
Choisi le projet sur lequel tu veux ajouter une informations dans la liste déroulante (par défaut c'est Frankiz) et clique sur le lien ''Ajouter une nouvelle tâche'' (ou ''Ouvrir une nouvelle tâche anonymement'' si tu ne t'es pas créé de compte). Si le projet n'est pas dans la liste il faudra [[#Contacter_les_développeurs|contacter directement les développeurs]]&lt;br /&gt;
&lt;br /&gt;
Rempli le formulaire avec un '''titre explicite''', et dans les détails mets toutes les informations que tu as pu récolter sur le bug.&lt;br /&gt;
&lt;br /&gt;
=== Contacter les développeurs ===&lt;br /&gt;
Si le projet n'est pas dans le tracker ou si la [http://bugs.frankiz page du tracker] est innaccessible, il est également possible de contacter directement les développeurs :&lt;br /&gt;
* soit en postant sur [news://frankiz/br.binet.br.devel br.binet.br.devel]&lt;br /&gt;
* soit en envoyant un mail à l'adresse du projet :&lt;br /&gt;
 qRezix : qrezix #AT# frankiz.polytechnique.fr&lt;br /&gt;
 Frankiz : devel-web #AT# frankiz.polytechnique.fr&lt;br /&gt;
 TV : tv #AT# frankiz.polytechnique.fr&lt;br /&gt;
 WiFi : wifi #AT# frankiz.polytechnique.fr&lt;br /&gt;
 xNetServer, mxNet ou CocaxNet : xnet #AT# frankiz.polytechnique.fr&lt;br /&gt;
 autre : br #AT# frankiz.polytechnique.fr&lt;br /&gt;
&lt;br /&gt;
== Le tracker utilisé ==&lt;br /&gt;
&lt;br /&gt;
Le tracker utilisé par le BR est [http://flyspray.rocks.cc/ Flyspray]. Il a été choisi pour sa légèreté et sa clareté. Son interface est en effet bien conçu, facile à utilisée même pour un utilisateur peu habitué aux outils informatiques. Il gère correctement plusieurs projets en permettant de personnaliser un grand nombre de paramètres pour chaque projet tout en laissant la possibilité de définir des paramètres globaux. Son interface visuelle et intuitive permettent aux développeurs de trouver facilement les tâches et de faire le point sur l'état du projet.&lt;br /&gt;
&lt;br /&gt;
Le premier choix du [[BR2003]] c'était porté sur bugzilla. Mais cet outil c'est révélé lourd, peu convivial et parfois à la limite de l'illisible. Le tracker s'en était retrouvé abandonné rapidement.&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=494</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=494"/>
		<updated>2006-06-12T12:26:08Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Mise à jour de l'organigramme de la structure de qRezix 2.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake &amp;quot;DEFINES+=RZX_ALL_BUILTIN&amp;quot; qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=493</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=493"/>
		<updated>2006-06-12T12:03:57Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : centre les screenshots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png|center]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake &amp;quot;DEFINES+=RZX_ALL_BUILTIN&amp;quot; qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.7_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=492</id>
		<title>QRezix</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=QRezix&amp;diff=492"/>
		<updated>2006-06-12T12:03:06Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : /* BR2003 */ Resize de l'image de qRezix 2.0.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu projets}}&lt;br /&gt;
qRezix est le principal 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]].&lt;br /&gt;
&lt;br /&gt;
== Historique ==&lt;br /&gt;
&lt;br /&gt;
=== BR2000 ===&lt;br /&gt;
&lt;br /&gt;
Le projet en lui-même est né avec un groupe de BRmen X2000 menés par Doudou qui étaient fans de Qt (qui à l'époque n'était pas terrible-terrible...). Ils ont travaillé à 3 ou 4 pour sortir la version 1.0 le 4 mars 2002, suivie de près par la version 1.1 le 6 avril. L'équipe de développement comportait entre autres Doudou, MadCoder et Trasfract (Sylvain Joyeux, Pierre Habouzit et Benoït Casoetto).&lt;br /&gt;
&lt;br /&gt;
Le projet s'est principalement inspiré des clients qui existaient déjà à l'époque (Rezix en particulier, duquel qRezix a tiré son nom). 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.&lt;br /&gt;
&lt;br /&gt;
=== BR2001 ===&lt;br /&gt;
&lt;br /&gt;
Le BR2001 n'a pas énormément travaillé sur qRezix. Il y a eu la version 1.2, mais on n'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 porté qRezix en Qt3 et a travaillé sur l'internationalisation du projet. Le but d'origine n'était pas de rendre qRezix international, 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çaise a été créée.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.2.gif]]&lt;br /&gt;
&lt;br /&gt;
A priori, il n'y a pas eu de release en Qt3... mais d'après [[User:Ey|Ey]] qui packageait le projet pour Windows, il y en aurait eu... Mais en tout cas à l'arrivée des 2003 c'était toujours la version 1.2 (en Qt2) qui était disponible... Le BR n'avait de plus pas de license pour Qt3 sous Windows.&lt;br /&gt;
&lt;br /&gt;
=== BR2002 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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, 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...&lt;br /&gt;
&lt;br /&gt;
=== BR2002/BR2003 : le temps d'une prépassation ===&lt;br /&gt;
&lt;br /&gt;
Le [[BR2003]] a donc commencé sont travail sur qRezix dès le mois de juin 2004.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Une autre innovation importante à été le passage du chat qui reposait sur 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).&lt;br /&gt;
&lt;br /&gt;
Toutes ces modifications associées au travail de Steak sur l'authentification et le travail de JiBee pour recoder un nouveau [[xNetServer|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.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6.png]]&lt;br /&gt;
&lt;br /&gt;
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. Rezix.NET (qui était codé en .NET par un membre dissidant du BR2002) n'a finalement pas fait long feu.&lt;br /&gt;
&lt;br /&gt;
=== BR2003 ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. La version 1.6.4 sortie le 23 septembre apporte peu d'innovation si ce n'est la cache des propriétés, les icônes en 32bits et une meilleure intégration à Mac OS.&lt;br /&gt;
&lt;br /&gt;
Suite à la sortie de Qt4, le port de qRezix vers cette nouvelle mouture de la bibliothèque de Trolltech a été l'occasion de grand remaniement du code. Ceci a abouti à la versin 2.0 de qRezix dont le principal atout est d'être modulaire. La version 2.0.0 est sortie le 6 février 2006, et a rapidement supplanté la version 1.6.x.&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-2.0.png|800px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour écrire cette partie, j'ai utilisé mes connaissances personnelles issues ainsi que les informations contenues dans le ChangeLog. Et j'espère bien que d'autres y jetteront un coup d'oeil pour compléter/corriger les parties inexactes.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
Cette partie a pour but de présenter brièvement l'état du projet à travers l'organisation du développement.&lt;br /&gt;
&lt;br /&gt;
=== Outils nécessaires ===&lt;br /&gt;
&lt;br /&gt;
* Le développement de qRezix se fait comme tous les projets du BR via un système de partage de projet : [[Subversion|SVN]]. Il est donc nécessaire d'installer un client [[Subversion|SVN]] pour travailler. Sous Linux et Mac OS, il y a des packages de SVN qui sont distribuer. Sous Windows, il est fortement conseillé d'utiliser [http://tortoisesvn.tigris.org TortoiseSVN]. Pour plus d'information sur SubVersion, merci de vous référer à la [[Subversion|page correspondante]].&lt;br /&gt;
&lt;br /&gt;
* Il faut également installer [[Qt]], la version dépend de la branche de travail. Pour qRezix 1.6, il faut utiliser Qt3 (3.3.3 ou ultérieure) alors que pour qRezix 1.7, Qt4 (4.0.1 ou ultérieure). Pour obtenir Qt3 pour Windows, merci de demander à [[User:Fruneau|Fruneau]]. Pour Qt4, il faut faire attention sur certaine distribution de bien installer tous les modules nécessaires (au moins Core, GUI et Network) et les outils qui vont avec (designer, linguist, assistant).&lt;br /&gt;
&lt;br /&gt;
* Pour générer la documentation il peut être intéressant d'installer également [http://www.doxygen.org Doxygen]. La plupart du temps l'utilisation de Doxygen est très simple : il suffit de l'appliquer au fichier Doxyfile qui se trouve à la racine du projet.&lt;br /&gt;
 doxygen Doxyfile&lt;br /&gt;
&lt;br /&gt;
=== Structure de la SVN ===&lt;br /&gt;
&lt;br /&gt;
Pour ce qui est de l'utilisation de SVN, je vous laisse vous référer à la [[Subversion#Utilisation_de_svn|page correspondante]]. Cette partie à plutôt pour but d'expliquer comment utiliser la SVN pour travailler sur qRezix.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il est important de noter que qRezix utilise une structure tout ce qu'il y a de plus classique (avec trunk, branches et tags). Le trunk étant la branche principale du projet.&lt;br /&gt;
&lt;br /&gt;
==== Travailler sur la branche principale ====&lt;br /&gt;
&lt;br /&gt;
La branche principale du projet correspond à la version qui évolue actuellement. A l'heure actuelle c'est la 1.6.x. Cette branche change régulièrement et on peut y trouver les dernières innovations réalisée sur cette branche. Lorsqu'on s'approche d'une release de qRezix, il faut freezer la branche principale. Pour ceci, on sépare le développement de la version qui va sortir de celui de la branche principale.&lt;br /&gt;
&lt;br /&gt;
Par exemple pour release qRezix 1.6.4, j'ai freezé la branche environ 1 semaine et demi avant la sortie via :&lt;br /&gt;
 svn copy trunk branches/qrezix--release--1.6.4&lt;br /&gt;
&lt;br /&gt;
Une fois les branches séparées, la branche de release ne doit plus subir que des corrections de bugs. En cas de besoin, on pourra sortir des pre-release (rc). Une fois qu'une version est considérée stable, on la tag, c'est à dire qu'on fait une photographie instantannée du projet :&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-rc1 # pour une préversion&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4 # pour la version définitive&lt;br /&gt;
&lt;br /&gt;
On peut même envisager alors des révisions sur la version actuelle qui serait des bugfixes de la branche de release intervenu après la sortie. Dans ce cas, on aurait&lt;br /&gt;
 svn copy branches/qrezix--release--1.6.4 tags/qrezix--1.6.4-r1 # pour une révision de la version&lt;br /&gt;
&lt;br /&gt;
Ceci peut paraître contraignant, mais c'est la base d'un projet mené correctement. Ca permet d'avoir un historique des branches et des versions, de pouvoir envisager de sortir des révisions de toutes les branches de release en cas de découverte d'une faille importante du programme et ça évite surtout d'avoir une version qui s'éternise... lorsqu'on décide de freezer une version, ceux qui veulent continuer à innover travaillent sur le trunk pendant que d'autres stabilise la version de release.&lt;br /&gt;
&lt;br /&gt;
==== Branches de devel ====&lt;br /&gt;
&lt;br /&gt;
A côté de la branche principale, il peut y avoir des branches de devel. Alors que la différence entre 2 releases issues d'une même branche sont le plus souvent mineures voire de la simple maintenance, la différence entre le trunk et la branches de devel est quelque chose de beaucoup plus important. La branche de devel apporte des innonvations importantes et devrait conduire à une nouvelle version majeure du programme.&lt;br /&gt;
&lt;br /&gt;
La branche de devel Qt4 vient d'être passée en branche principale.&lt;br /&gt;
&lt;br /&gt;
==== Numérotation des versions ====&lt;br /&gt;
&lt;br /&gt;
Comme pour tout programme, qRezix a des versions numérotées de la forme X.Y.Z-T&lt;br /&gt;
* X est la version majeure, il ne change que lors de modification très importantes de la structure du programme.&lt;br /&gt;
* Y est la version mineure, il change lorsque le programme a subit des évolution plus importante qu'une simple maintenance.&lt;br /&gt;
* Z est la version de maintenance, il change lorsque le programme subit des bugfixes et l'implémentation de fonctionnalités mineures.&lt;br /&gt;
* T est le tag&lt;br /&gt;
&lt;br /&gt;
L'utilisation du tag est particulières :&lt;br /&gt;
* ''svn'' pour une version de développement avant les releases ou pre-release.&lt;br /&gt;
* ''alpha'' pour une pré-version non encore formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-alpha1 ou 1.7.0-alpha2 mais pas 1.6.5-alpha1)&lt;br /&gt;
* ''beta'' pour une pré-version formalisée d'une nouvelle version majeure ou mineure du programme (2.0.0-beta1 ou 1.7.0-beta2 mais pas 1.6.5-beta1)&lt;br /&gt;
* ''rc'' pour une version candidate à la release. Elle sert uniquement à la recherche de derniers bugs (1.6.2-rc1)&lt;br /&gt;
* ''r'' pour une révision d'une version déjà sortie. Elle sert uniquement à corriger de graves anomalies de la version (1.6.4-r1)&lt;br /&gt;
&lt;br /&gt;
De manière générale, la numérotation doit être effectuée comme suit :&lt;br /&gt;
# A la release de la version X.Y.Z, la branche principale passe ne X.Y.(Z+1)-svn&lt;br /&gt;
# Si le besoin s'en fait sentir, des versions alpha, puis bêta et enfin rc peuvent être sorties. Mais attention, une version alpha doit être suivie d'au moins une version bêta puis d'une rc.&lt;br /&gt;
# Lorsque la version est considérée stable, elle est détaguée, et la release est effectuée. On revient dès lors au point 1&lt;br /&gt;
&lt;br /&gt;
=== Traductions ===&lt;br /&gt;
&lt;br /&gt;
Les traductions (gentil fardeau offert par JiBee), sont générée relativement simplement par Qt. Pour ceci, il faut procéder dans l'ordre :&lt;br /&gt;
* Dans le code, mettre les chaîne à traduire soit dans des tr(&amp;quot;mon texte&amp;quot;) ou QT_TR_NOOP(&amp;quot;mon texte&amp;quot;). Le deuxième cas étant pour les textes qui se trouvent dans les définitions statiques.&lt;br /&gt;
* Générer le fichier d'index à l'aide de lupdate sur le projet :&lt;br /&gt;
 # Pour qRezix 1.6&lt;br /&gt;
 lupdate qrezix.pro&lt;br /&gt;
 # Pour qRezix 2.0&lt;br /&gt;
 lupdate */*.pro&lt;br /&gt;
* Editer les fichiers .ts avec Qt Linguist, et enregistrer les modifications. Les fichiers .ts sont dans le répertoires ''translations''.&lt;br /&gt;
* Compiler les fichiers .ts à l'aide de lrelease ou de Qt Linguist.&lt;br /&gt;
 cd translations&lt;br /&gt;
 lrelease *.ts&lt;br /&gt;
* Commiter le tout...&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
La documentation de qRezix est composée de cette page, de la doc de l'API qu'il est possible de générer grâce à Doxygen, ainsi que de tout ce que vous pourrez trouver sur [http://fruneau cette page]. Dans tous les cas, la meilleure doc restera toujours une personne qui connait bien le projet :)...&lt;br /&gt;
&lt;br /&gt;
Dans l'état actuel des choses, la meilleure doc de qRezix, c'est [[User:Fruneau|moi]].&lt;br /&gt;
&lt;br /&gt;
=== Compiler qRezix ===&lt;br /&gt;
&lt;br /&gt;
La compilation de qRezix n'est pas forcément une opération triviale, et dépend fortement de l'OS sur lequel on travail. La plupart des informations nécessaires sont contenues dans le fichier INSTALL. Voici quelques suppléments qui pourront toutefois être utiles :&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Sous Windows, à l'heure actuelle, on compile avec Visual C++ 7.1 ou supérieur (qRezix ne compile pas avec VC++ 6). A l'heure actuelle, VC++ ne permet pas de compiler les modules en tant que tels car il est incapable de charger les membres de classes dans les DLL. On est donc forcés de tout compiler en un bloc en passant l'option &amp;quot;RZX_ALL_BUILTIN&amp;quot; à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout d'abord il faut ouvrir une nouvelle console Visual Studio (pour avoir les variables d'environnement correctement définies). Dans cette console :&lt;br /&gt;
 qmake &amp;quot;DEFINES+=RZX_ALL_BUILTIN&amp;quot; qrezix.pro&lt;br /&gt;
 nmake&lt;br /&gt;
&lt;br /&gt;
Si vous compilez une version SVN de qRezix, vous pouvez exécuter SubWCRev.exe pour convertir les occurences de $WCREV$ en numéro de révision.&lt;br /&gt;
&lt;br /&gt;
Le packaging se fait à l'aidre de [http://nsis.sourceforge.net/Main_Page NSIS] en compilant le script qui est dans le répertoire package/windows&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Sous Linux, il suffit de procéder strictement comme indiqué dans le fichier INSTALL&lt;br /&gt;
 qmake qrezix.pro # cet appel est nécessaire dès que la structure du programme est modifiée...&lt;br /&gt;
 make&lt;br /&gt;
 qmake qrezix.pro # ce deuxième appel n'est nécessaire qu'à la première compilation où lors de l'apparition de nouveaux fichiers à installer&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour le numéro de révision il peut être utile de forcer la recompilation de certaines parties du core :&lt;br /&gt;
 touch core/core.pro&lt;br /&gt;
 touch core/rzxapplication.cpp&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Le packaging dépend énormément de la distribution... mais consiste dans la plupart des cas à réaliser une installation dans un chroot, l'archiver et lui ajouter les informations de packages (dépendants de la distribution... rpm, deb...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&lt;br /&gt;
Pour packager il faut partir d'un export de la SVN et non pas d'un checkout... Sinon les répertoires .svn resteront présents et peuvent fortement allourdir le paquet ou induire qRezix en erreur dans certains cas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MacOS X ====&lt;br /&gt;
&lt;br /&gt;
Sous MacOS X, un script est prévu pour réaliser la compilation. Il gère un certain nombre de problèmes liés à MacOS X, et il est fortement déconseillé de ne pas l'utiliser. Donc, pour compiler et créer un bundle utilisable il suffit de lancer la commande :&lt;br /&gt;
 ./build-mac&lt;br /&gt;
&lt;br /&gt;
Pour compiler sous MacOS X il est nécessaire d'avoir installer la SDK de Growl. Et une fois compilé, de mettre Growl-withInstaller.framework dans le bundle qRezix.app/Content/Frameworks, sans quoi qRezix refusera de se lancer.&lt;br /&gt;
&lt;br /&gt;
Ce script peut prendre un certain nombre de paramètres :&lt;br /&gt;
* -v : mode verbeux (affiche la sortie de make, qmake...)&lt;br /&gt;
* -q : ne lance pas les qmake (si cette option est ajoutée, le numéro de révision ne sera pas mis à jour dans la fenêtre de préférence)&lt;br /&gt;
* -jx : option -j de make (attention, la compilation universal binaries utilise déjà les 2 processeurs des biprocs)&lt;br /&gt;
* ... : toutes les autres options sont ajoutées aux CXXFLAGS&lt;br /&gt;
&lt;br /&gt;
Pour packager qRezix pour MacOS, il suffit d'exécuter un autre script qui récupère le bundle de build-mac, le nettoie, y ajoute Qt et règle les dépendances des bibliothèques.&lt;br /&gt;
 cd package/macosx&lt;br /&gt;
 ./package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Pour ceux qui voudraient profiter de Xcode, qmake peut générer des projet Xcode à partir du fichier .pro en exécutant :&lt;br /&gt;
 qmake -spec macx-pbuilder machin.pro&lt;br /&gt;
Mais ceci mérite des test approfondis et une attention accrue pour éviter de délaisser le fichier .pro nécessaire pour les autres plateformes une fois le projet généré.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Coding Rules ===&lt;br /&gt;
&lt;br /&gt;
Il est important de respecter un certain nombre de règles lorsqu'on travail sur un projet collectif. De fait, tout développeur de qRezix est prié de se tenir aux recommandations qui suivent :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;border: 1px solid #6f8f9f; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Nomenclature'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des classes sont préfixés par Rzx&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxApplication&lt;br /&gt;
{&lt;br /&gt;
   bool valid;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
      bool isValid() const;&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions commencent par une minuscule&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;L'utilisation d'underscore est à éviter. On préférera utiliser des nom dont les séparations sont des majuscules&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;La langue à utiliser de préférence est '''l'anglais'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les noms des fonctions/methodes doivent être cohérents avec les APIs Qt et qRezix, on évitera par exemple les getMyVar() en privilégiant myVar().&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Accolades'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les accolades ouvrantes comme fermantes sont placées après un retour à la ligne&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
if(a == b || c != d)&lt;br /&gt;
{&lt;br /&gt;
    a = b + 1;&lt;br /&gt;
    do(truc);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RzxMyFunction::do() const&lt;br /&gt;
{&lt;br /&gt;
    &amp;lt;bloc&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
};&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les opérateurs sont entourés d'espaces&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les parenthèse sont collées à l'opération associée (nom de fonction, contrôle de flux...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Indentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les indentation sont réalisées à l'aide de ''tabulation''&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class RzxMyClass&lt;br /&gt;
{&lt;br /&gt;
   &amp;lt;firstbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   public:&lt;br /&gt;
       &amp;lt;secondbloc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   protected:&lt;br /&gt;
       &amp;lt;thirdbloc&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
switch(value)&lt;br /&gt;
{&lt;br /&gt;
   case 1:&lt;br /&gt;
      &amp;lt;bloc1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 2:&lt;br /&gt;
      &amp;lt;bloc2&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
   case 3:&lt;br /&gt;
      &amp;lt;bloc3&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if CASE1&lt;br /&gt;
#   define MACHIN&lt;br /&gt;
#endif&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les mots clés comme public: ou case: sont indentés et entraînent une indentation supplémentaire jusqu'au prochain mot clé&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Ne pas oublier d'indenter également le préprocesseur&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les fichiers doivent finir par une ligne vide&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;'''Commentaires et documentation'''&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;Les objets doivent être documentées à l'aide des syntaxe de Doxygen&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;td rowspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
///Ceci est une description rapide&lt;br /&gt;
/** Ceci est une description avancée de la fonction&lt;br /&gt;
 */&lt;br /&gt;
void myFunction()&lt;br /&gt;
{&lt;br /&gt;
   if(machin) // Le cas machin peut poser problème, on le traite donc à part&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // TODO: implémenter le reste de la fonction&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #FAF5FF&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;A l'exception de la documentation des fonctions, on préférera les commentaires de la forme // Mon commentaire en français&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
 &amp;lt;td&amp;gt;// TODO: peut également être utilisé pour spécifier des implémentations à réaliser&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branche 1.6 ==&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
La structure interne du programme peut-être résumée au schéma suivant :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.6_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface de plug-ins ===&lt;br /&gt;
&lt;br /&gt;
qRezix 1.6 est la première version à bénéficier d'une structure d'accueil de plug-in. Cette structure est rudimentaire et souffre du fait que qRezix n'est pas modulaire. En effet la classe RzxPlugIn est compilée à la fois dans le plug-in et dans qRezix, ce qui crée des problèmes dès que les deux versions diffèrent.&lt;br /&gt;
&lt;br /&gt;
Pour éviter les problèmes, la version de la strucutre de plug-in est numéroté de façon très stricte, et le filtrage est fait au chargement du plug-in.&lt;br /&gt;
&lt;br /&gt;
Ce défaut entraîne un grand nombre de complication. Les plug-ins n'ont absolument aucun accès direct aux données stockées par qRezix. Toutes les informations transitent donc par des fonction standardisées du plug-in, mais cette méthode de travail limite le nombre d'information pouvant être échangé. Il n'en reste pas moins que cette structure est tout à fait suffisante pour réaliser des plug-ins comme l'Xplo ou SmiliX (qui sont disponible sur la [[Subversion|SVN]] dans le reposoire qrezix-plugins).&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir faire un plug-in pour qRezix, il faut récupérer la dernière version de rzxplugin.h et rzxplugin.cpp dans la branche de release de qRezix correspondante à la version pour laquelle vous voulez faire le plugin. Il suffit alors de créer un projet dérivant de RzxPlugIn. La documentation de RzxPlugIn peut-être générée automatique à l'aide de [http://www.doxygen.org Doxygen] et peut-être trouvée [http://fruneau.eleves.polytechnique.fr/qrezix-1.6/classRzxPlugIn.html ici], de même pour la [http://fruneau.eleves.polytechnique.fr/xplo/ documentation du plug-in Xplo] qui permet d'avoir un bon exemple de plug-in complet.&lt;br /&gt;
&lt;br /&gt;
Cette structure a totalement disparue avec qRezix 2.0 pour être remplacer par des modules plus souple et mieux conçus.&lt;br /&gt;
&lt;br /&gt;
== Branche 2.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Objectif ===&lt;br /&gt;
&lt;br /&gt;
Cette version de qRezix repose sur un double objectif :&lt;br /&gt;
* porter le code en Qt4.&lt;br /&gt;
* modulariser le programme.&lt;br /&gt;
&lt;br /&gt;
==== Qt4 ====&lt;br /&gt;
Le premier point ne présente pas une difficulté énorme, mais a conduit à pas mal de réorganisation du code. En particulier, qRezix 2.0 bénéficie de la puissance du nouveau système Model/View de Qt4, ce qui a nécessiter de redévelopper la quasitotalité de l'interface principale.&lt;br /&gt;
&lt;br /&gt;
La toute dernière version [[Subversion|SVN]] de qRezix utilise [[Qt]] version 4.1.0 minimum. qRezix 2.0 utilise des fonctions introduites dans Qt 4.1, et ne compilera pas avec Qt 4.0.&lt;br /&gt;
&lt;br /&gt;
==== Modularité ====&lt;br /&gt;
&lt;br /&gt;
La modularisation du programme est un point essentiel. Elle apporte un certain nombre d'évolution nécessaire à la survie de qRezix :&lt;br /&gt;
* restructuration du programme qui permet une meilleure maintenance&lt;br /&gt;
* possibilité de limiter qRezix à certaines fonctionnalités (utile pour l'utilisation chez des personnes qui n'ont pas besoin d'avoir le logiciel complet si par exemple ils n'utilisent jamais le chat).&lt;br /&gt;
* possibilité de travailler avec un plus grand nombre de personne sur le projet. Chacun pouvant en effet travailler sur un module&lt;br /&gt;
* possibilité de gérer plusieurs protocoles pour se connecter à plusieurs serveurs&lt;br /&gt;
&lt;br /&gt;
=== Structure du programme ===&lt;br /&gt;
&lt;br /&gt;
Le schéma suivant représente de manière simplifié la structure interne de qRezix 2.0.x :&lt;br /&gt;
&lt;br /&gt;
[[Image:qrezix-1.7_structure.png]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Accueil&amp;diff=190</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Accueil&amp;diff=190"/>
		<updated>2006-06-12T07:35:51Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Lien vers la page d'accueil privée fait moins 'parachuté'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
{{Menu public}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;logobr&amp;quot; style=&amp;quot;float: left; max-width: 70%; background-position: center; background-repeat: no-repeat;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Le Binet réseau, le binet du mythe ... ===&lt;br /&gt;
&lt;br /&gt;
Le Binet Réseau est une association d'étudiants en deuxième année à l'[http://www.polytechnique.fr Ecole Polytechnique] qui s'occupent de la gestion du réseau élève. Souvent aidés par leurs anciens, ils s'efforcent de maintenir et d'améliorer la qualité des services offerts aux élèves.&lt;br /&gt;
&lt;br /&gt;
''Gestion des serveurs élèves, développement d'outils pour le réseau et mise en place de services ([[news|newsgroup]], [[Miroir FTP|miroirs ftp]], [[domaine Windows]], licenses [[MSDNAA]]) en sont la principale activité.''&lt;br /&gt;
&lt;br /&gt;
Les membres du Binet Réseau ne sont pas pour autant tous des férus d'informatique et se partagent les taches en fonction de leurs capacités et de leurs envies : relations avec nos partenaires, communication avec les élèves constituent aussi des postes essentiels.&lt;br /&gt;
&lt;br /&gt;
'''Ainsi, le Binet Reseau offre une chance unique d'approfondir ses connaissances en informatique, au service des autres et en se faisant plaisir !'''&lt;br /&gt;
&lt;br /&gt;
=== Des services ===&lt;br /&gt;
Le binet réseau, c'est avant tout la maintenance d'un service pour tous les élèves de l'école : un accés au réseau interne et externe le plus fiable et le plus performant possible. Comme le réseau physique est essentiellement propriété de la DSI sur notre campus, notre binet gère surtout ses propres serveurs et ses services, ainsi que les relations entre les élèves et la DSI.&lt;br /&gt;
&lt;br /&gt;
Dans les services, on trouve en particulier l'administration du domaine Windows qui permet aux élèves client de se connecter plus facilement sur le réseau et au BR de protéger le réseau des virus via la mise à jour de Windows et la diffusion d'un antivirus.&lt;br /&gt;
&lt;br /&gt;
Le binet réseau maintient aussi de nombreux serveurs qui assurent les différentes fonctions de controle et de service du réseau. En particulier, nous hébergeons des [[Miroir FTP|miroirs]] (linux, etc.) qui en raison des restrictions de la DSI ne sont malheureusent pas accessibles de l'extérieur de l'Ecole.&lt;br /&gt;
&lt;br /&gt;
=== Des projets ===&lt;br /&gt;
La deuxième activité du binet est la programmation d'outils logiciels. En particulier, le binet a développé un outil de gestion de [[DNS]] (serveur et client [[xNet]]) incluant des services de chat et de voisinage réseau, ainsi qu'un [http://www.frankiz.net portail web pour les élèves] permettant une diffusion facile des annonces et activités de la promotion, l'accés à un annuaire et à de nombreux autres services.&lt;br /&gt;
&lt;br /&gt;
Enfin, dans une perspective d'équipement à long terme, le binet compte, dans la mesure de son budget, faire l'ensemble des investissements matériels nécessaire à l'amélioration des performances de son réseau, notamment par [[WiFi|intégration des technologies sans fil]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom:1em; padding:0.3em; border:solid 1px #808080; background: #FFFFDD;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Home.png|16px]] [[WikiBR:Accueil|Accéder à la page d'accueil privée]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footer public}}&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=BR2002&amp;diff=1049</id>
		<title>BR2002</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=BR2002&amp;diff=1049"/>
		<updated>2006-06-12T07:23:57Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Les réalisations du BR2002&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu BR}}&lt;br /&gt;
&lt;br /&gt;
{| border=0 width=50% align=center&lt;br /&gt;
| [[User:Kikx|Kikx]] || prez&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Falco|Falco]] || root News IRCop&lt;br /&gt;
|-&lt;br /&gt;
| Schmurtz || root XShareMac&lt;br /&gt;
|-&lt;br /&gt;
| [[User:PaXaL|PaXaL]] || root web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| Matrix || admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| Moi || admin@windows&lt;br /&gt;
|-&lt;br /&gt;
| Bolzano || web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| Alyx || Trez&lt;br /&gt;
|-&lt;br /&gt;
| ArthurB || IRCop&lt;br /&gt;
|-&lt;br /&gt;
| LazyStuff || QDJ Master&lt;br /&gt;
|-&lt;br /&gt;
| Arrakis || root&lt;br /&gt;
|-&lt;br /&gt;
| mlk || web@frankiz&lt;br /&gt;
|-&lt;br /&gt;
| PsyCow || Faqmestre&lt;br /&gt;
|-&lt;br /&gt;
| Steak || Devel News&lt;br /&gt;
|-&lt;br /&gt;
| Neo || XShare&lt;br /&gt;
|-&lt;br /&gt;
| [[Utilisateur:WakeUpNeo|WakeUpNeo]] || web@poly&lt;br /&gt;
|-&lt;br /&gt;
| R2 || TOL XShare&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Réalisations ===&lt;br /&gt;
* Mise en place du partenariat de [[MSDNAA]]&lt;br /&gt;
* Renouvellement des serveurs [[Admin:Frankiz|Frankiz]], [[Admin:Heol|Heol]] et achat de [[Admin:Lunedenn|Lunedenn]]&lt;br /&gt;
* Lancement du projet [[WiFi]]&lt;br /&gt;
* Lancement du projet [[FrankizII]] de restructuration de [http://frankiz]&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_adminprojets&amp;diff=3503</id>
		<title>Modèle:Block adminprojets</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_adminprojets&amp;diff=3503"/>
		<updated>2006-06-11T15:55:18Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:Project.png|16px]] Gestion des projets&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em; background-color: #fff;&amp;quot;&amp;gt;&lt;br /&gt;
* [[BR:Evolutions Frankiz|Evolutions Frankiz]]&lt;br /&gt;
* [[Admin:DHCP|DHCP]]&lt;br /&gt;
* [[Admin:TV|TV]]&lt;br /&gt;
* [[WiFi]]&lt;br /&gt;
** [[Réseau:Architecture du réseau WiFi|Architecture du réseau WiFi]] (privé)&lt;br /&gt;
** [[Admin:Serveur Radius|Serveur Radius]] (privé)&lt;br /&gt;
** [[Configuration des clients pour le WiFi]]&lt;br /&gt;
* [[BR:Journées Federez 2006|Journées Federez en 2006]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_secretariat&amp;diff=3509</id>
		<title>Modèle:Block secretariat</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_secretariat&amp;diff=3509"/>
		<updated>2006-06-11T15:54:35Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:Desktop.png|16px]] Secrétariat&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em; background-color: #fff;&amp;quot;&amp;gt;&lt;br /&gt;
* [[BR:InfoBR|InfoBR]]&lt;br /&gt;
* [[BR:Telephony Over IP|Telephony Over IP]]&lt;br /&gt;
* [[BR:Contacts|Contacts]]&lt;br /&gt;
* [[BR:La DSI|La DSI]]&lt;br /&gt;
* [[BR:Charte interne du BR (projet)|Charte interne du BR]]&lt;br /&gt;
* [[BR:Statut du BR|Statut du BR]]&lt;br /&gt;
* [[BR:Documents externes|Documents externes]]&lt;br /&gt;
* [[BR:Ethique Root|Ethique root/newsmestre]]&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Allpages|namespace=104}} Réunions]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=WikiBR:Aide&amp;diff=295</id>
		<title>WikiBR:Aide</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=WikiBR:Aide&amp;diff=295"/>
		<updated>2006-06-11T15:48:30Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Correction du formatage des blocs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ce wiki est censé contenir le matériel nécessaire pour pouvoir retrouver un savoir-faire, une idée,...&lt;br /&gt;
Son utilisation est relativement simple.&lt;br /&gt;
&lt;br /&gt;
== Aide Officielle de Media Wiki ==&lt;br /&gt;
&lt;br /&gt;
Vous pouvez la trouver ici : [http://meta.wikimedia.org/wiki/Aide:Contenu], n'hésitez pas à vous y référer si vous avez des questions sur le fonctionnement 'technique' du wiki.&lt;br /&gt;
&lt;br /&gt;
== Obtenir un compte ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
La première étape, est d'obtenir un compte sur le wiki, puisque même les pages publiques ne sont editables que par des personnes ayant un compte. Pour des raisons évidentes de sécurité des informations, cette opération nécessite une intervention humaine. Contacte les [mailto:root@frankiz administrateurs du wiki] en précisant ton '''adresse mail''', ton '''nom''', et le '''login''' souhaité (qui commencera obligatoirement par une majuscule, c'est le moteur wiki utilisé qui l'impose).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il te suffira désormais de t'identifier à chaque fois que tu viendras consulter ou écrire sur le wiki.&lt;br /&gt;
&lt;br /&gt;
== Editer une page ==&lt;br /&gt;
Pour éditer une page, il suffit de s'identifier et de se rendre sur cette page. Il y a un lien ''éditer'' (placé différemment selon la skin). Tu cliques dessus et le texte de la page apparaît alors dans une boîte d'édition... à toi de faire ce que tu veux avec.&lt;br /&gt;
&lt;br /&gt;
Toutes les modifications sont enregistrées. Donc ne t'inquiètes pas tu peux faire des modifications même si tu n'es pas sûr qu'elles conviendront à tout le monde.&lt;br /&gt;
&lt;br /&gt;
== Créer une nouvelle page ==&lt;br /&gt;
Une page du wiki aura un nom de la forme Nom_de_page (avec une majuscule au début du nom de la page). Pour la créer, il y a 2 manières.&lt;br /&gt;
* tu crées un liens vers ''Nom_de_page'' (&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[[Nom de page]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;), et tu suis le liens... tu n'a plus qu'à éditer ;&lt;br /&gt;
* tu vas sur la page &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;http://gwennoz/wiki/index.php?title=Nom_de_page&amp;amp;action=edit&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Attention aux pattes cassées... il est très facile de faire une page non référencée, donc pensez toujours à mettre un lien dans la section qui va bien vers votre page !!!&lt;br /&gt;
&lt;br /&gt;
Pour les conventions de nommage des pages et en particulier pour les placer dans le bon namespace, il faut se référer à [[WikiBR:Wiki]]&lt;br /&gt;
&lt;br /&gt;
== Syntaxe Wiki ==&lt;br /&gt;
MediaWiki utilise la [http://fr.wikipedia.org/wiki/Aide:Syntaxe_Wikipédia Syntaxe Wikipédia].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Aide-mémoire rapide'''&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
|&lt;br /&gt;
'''gras'''&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;'''gras'''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
''italique''&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;''italique''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[Accueil]]&amp;lt;br /&amp;gt;[[Accueil|lien vers l'accueil]]&amp;lt;br /&amp;gt;http://www.mediawiki.org&amp;lt;br /&amp;gt;[http://www.mediawiki.org]&amp;lt;br /&amp;gt;[http://www.mediawiki.org lien externe]&amp;lt;br /&amp;gt;[mailto:root@frankiz mail]&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Accueil]]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;[[Accueil|lien vers l'accueil]]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;http://www.mediawiki.org&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;[http://www.mediawiki.org]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;[http://www.mediawiki.org lien externe]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;[mailto:root@frankiz mail]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Titres&amp;lt;br /&amp;gt;En général, on n'utilise que les&amp;lt;br/&amp;gt;titres de niveau 2 ou supérieur.&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;= Titre 1 =&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;== Titre 2 ==&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;=== Titre 3 ===&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;==== Titre 4 ====&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Insérer une image&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image:Exemple.jpg]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Utiliser le lien [[Special:Upload|Copier sur le serveur]] pour enregistrer l'image.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
 code&lt;br /&gt;
|&lt;br /&gt;
laisser un espace en début de ligne&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Saut de&amp;lt;br/&amp;gt;ligne !&lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Saut de&amp;lt;br/&amp;gt;ligne !&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pour faire des cadres bleus comme ci-dessus'''&lt;br /&gt;
&lt;br /&gt;
C'est une convention adoptée pour le WikiBR, qui permet de mettre en évidence des informations essentielles. La syntaxe est la suivante :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Le texte dans le cadre ici, la syntaxe Wiki s'applique normalement.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Et pour un cadre rouge ? Voici le code, à utiliser avec parcimonie :&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;border: 1px solid #9f6f8f; padding: .2em .5em .2em .5em; background-color: #FBEAF5&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 Placer ici le texte d'avertissement !&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Pour faire un block comme le menu de la page d'accueil'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;margin: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:MonIcone|16px]] Mon titre&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em; background-color: #FFF;&amp;quot;&amp;gt;&lt;br /&gt;
contenu du block...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour avoir un block accessible de manière globale, il suffit de le stocker à la page&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{block monblock}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Pour mettre en objet en menu'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;float: right; width: auto; max-width: 25%;&amp;quot;&amp;gt;&lt;br /&gt;
mon contenu&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le contenu est constitué de bloc, le menu aura la forme :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;float: right; width: auto; max-width: 25%; margin-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
{{block monblock}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir être utilisé comme un composant de plusieurs pages, un menu doit être stocké dans une page : &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{menu monmenu}}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_secretariat&amp;diff=3508</id>
		<title>Modèle:Block secretariat</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_secretariat&amp;diff=3508"/>
		<updated>2006-06-11T15:45:59Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Block pour les trucs administratifs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:Desktop.png|16px]] Secrétariat&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em;&amp;quot;&amp;gt;&lt;br /&gt;
* [[BR:InfoBR|InfoBR]]&lt;br /&gt;
* [[BR:Telephony Over IP|Telephony Over IP]]&lt;br /&gt;
* [[BR:Contacts|Contacts]]&lt;br /&gt;
* [[BR:La DSI|La DSI]]&lt;br /&gt;
* [[BR:Charte interne du BR (projet)|Charte interne du BR]]&lt;br /&gt;
* [[BR:Statut du BR|Statut du BR]]&lt;br /&gt;
* [[BR:Documents externes|Documents externes]]&lt;br /&gt;
* [[BR:Ethique Root|Ethique root/newsmestre]]&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Allpages|namespace=104}} Réunions]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_adminprojets&amp;diff=3502</id>
		<title>Modèle:Block adminprojets</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=Mod%C3%A8le:Block_adminprojets&amp;diff=3502"/>
		<updated>2006-06-11T15:42:24Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Block sur la gestion des projets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin: 0.5em; border: 1px solid #6f8f9f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .3em .5em .2em .5em; border-bottom: 1px solid #6f8f9f; background-color: #EAF5FB;&amp;quot;&amp;gt;&amp;lt;big&amp;gt;[[Image:Project.png|16px]] Gestion des projets&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: .2em .5em .5em .5em;&amp;quot;&amp;gt;&lt;br /&gt;
* [[BR:Evolutions Frankiz|Evolutions Frankiz]]&lt;br /&gt;
* [[Admin:DHCP|DHCP]]&lt;br /&gt;
* [[Admin:TV|TV]]&lt;br /&gt;
* [[WiFi]]&lt;br /&gt;
** [[Réseau:Architecture du réseau WiFi|Architecture du réseau WiFi]] (privé)&lt;br /&gt;
** [[Admin:Serveur Radius|Serveur Radius]] (privé)&lt;br /&gt;
** [[Configuration des clients pour le WiFi]]&lt;br /&gt;
* [[BR:Journées Federez 2006|Journées Federez en 2006]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=MSDNAA&amp;diff=778</id>
		<title>MSDNAA</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=MSDNAA&amp;diff=778"/>
		<updated>2006-06-11T13:54:48Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu services}}&lt;br /&gt;
&lt;br /&gt;
== Les MSDNAA == &lt;br /&gt;
&lt;br /&gt;
MSDNAA signifie &amp;quot;MSDN Academic Alliance&amp;quot;. Le MSDN étant le centre de ressources pour développeur de Microsoft.&lt;br /&gt;
&lt;br /&gt;
Le MSDNAA est une offre de Microsoft destinée aux etablissement d'enseignement supérieur. Il s'agit de la mise à disposition pour toutes les personnes qui suivent des cours dans l'établissement de licenses gratuites, valables à vie, pour un certain nombre de logiciel Microsoft. Ces logiciels sont tous les logiciels microsofts à l'exception d'Office et des jeux. Ce sont donc principalement Windows, les logiciels de développement (Visual Studio, Access), les logiciels professionnels (Project), Virtual PC... Ceci est valable pour les logiciels disponible sous Windows mais également sous MacOS X.&lt;br /&gt;
&lt;br /&gt;
== Obtenir ses licenses ==&lt;br /&gt;
&lt;br /&gt;
Pour obtenir ses numéros de licenses, il y a deux solutions :&lt;br /&gt;
* faire une demande par l'interface de [http://www.frankiz.net/profil/licences.php Frankiz].&lt;br /&gt;
* si le logiciel n'est pas disponible sur Frankiz, envoyer un mail aux [[Poste:admin@windows|admin@windows]] en indiquant le logiciel recherché.&lt;br /&gt;
 windows #AT# frankiz.polytechnique.fr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Ma politique actuelle ([[User:L'Aspirant|L'aspi]]) est de :&lt;br /&gt;
* distribuer des cles aux binets pour faciliter leur integration au domaine&lt;br /&gt;
* distibuer des 2emes (ou neme) cles aux eleves pour des ordis **presents sur le plateau**&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
	<entry>
		<id>https://wikibr.binets.fr/index.php?title=MSDNAA&amp;diff=777</id>
		<title>MSDNAA</title>
		<link rel="alternate" type="text/html" href="https://wikibr.binets.fr/index.php?title=MSDNAA&amp;diff=777"/>
		<updated>2006-06-11T13:54:19Z</updated>

		<summary type="html">&lt;p&gt;Fruneau : Description du MSDNAA et de 'Comment obtenir ses licences'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{menu services}}&lt;br /&gt;
&lt;br /&gt;
== Les MSDNAA == &lt;br /&gt;
&lt;br /&gt;
MSDNAA signifie &amp;quot;MSDN Academic Alliance&amp;quot;. Le MSDN étant le centre de ressources pour développeur de Microsoft.&lt;br /&gt;
&lt;br /&gt;
Le MSDNAA est une offre de Microsoft destinée aux etablissement d'enseignement supérieur. Il s'agit de la mise à disposition pour toutes les personnes qui suivent des cours dans l'établissement de licenses gratuites, valables à vie, pour un certain nombre de logiciel Microsoft. Ces logiciels sont tous les logiciels microsofts à l'exception d'Office et des jeux. Ce sont donc principalement Windows, les logiciels de développement (Visual Studio, Access), les logiciels professionnels (Project), Virtual PC... Ceci est valable pour les logiciels disponible sous Windows mais également sous MacOS X.&lt;br /&gt;
&lt;br /&gt;
== Obtenir ses licenses ==&lt;br /&gt;
&lt;br /&gt;
Pour obtenir ses numéros de licenses, il y a deux solutions :&lt;br /&gt;
* faire une demande par l'interface de [http://www.frankiz.net/profil/licences.php Frankiz].&lt;br /&gt;
* si le logiciel n'est pas disponible sur Frankiz, envoyer un mail aux [[Poste:admin@windows]] en indiquant le logiciel recherché.&lt;br /&gt;
 windows #AT# frankiz.polytechnique.fr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #6f8f9f; padding: .2em .5em .2em .5em; background-color: #EAF5FB&amp;quot;&amp;gt;&lt;br /&gt;
Ma politique actuelle ([[User:L'Aspirant|L'aspi]]) est de :&lt;br /&gt;
* distribuer des cles aux binets pour faciliter leur integration au domaine&lt;br /&gt;
* distibuer des 2emes (ou neme) cles aux eleves pour des ordis **presents sur le plateau**&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fruneau</name></author>
	</entry>
</feed>