<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/2.0.5" --><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Vianney Lecroart - AceMTP Playground</title>
	<link>http://blog.ploki.info</link>
	<description>Méthodologies, Développement, Réflexions, ...</description>
	<pubDate>Mon, 25 Feb 2008 09:54:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>
	<language>en</language>
			<geo:lat>47.15984</geo:lat><geo:long>2.988281</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/acemtp" type="application/rss+xml" /><item>
		<title>Les égouts et les couleuvres</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/240788714/</link>
		<comments>http://blog.ploki.info/?p=86#comments</comments>
		<pubDate>Mon, 25 Feb 2008 09:54:49 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Extreme Programming</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=86</guid>
		<description><![CDATA[L&#8217;autre jour, je suis tombé sur le ticket d&#8217;un programmeur qui montrait un bout de son code, le voici :

bool SIM_FoodMemory::IsBoringChoice(std::string foodname)
{
	//return true if we ate the same food more than once in the last 14 days
	int recentmatches = 0;
	iter it;
	for(it = Items.begin(); it != Items.end(); ++it)
	{
		SIM_FoodMemoryItem* pitem = *it;
		if(pitem->FoodName == foodname)
		{
			int diff = SIM_GetSim()->GetTurnCount() [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;autre jour, je suis tombé sur le ticket d&#8217;un programmeur qui montrait un bout de son code, le voici :</p>
<pre>
bool SIM_FoodMemory::IsBoringChoice(std::string foodname)
{
	//return true if we ate the same food more than once in the last 14 days
	int recentmatches = 0;
	iter it;
	for(it = Items.begin(); it != Items.end(); ++it)
	{
		SIM_FoodMemoryItem* pitem = *it;
		if(pitem->FoodName == foodname)
		{
			int diff = SIM_GetSim()->GetTurnCount() - pitem->TurnConsumed;
			if(diff < 14)
			{
				recentmatches++;
			}
		}
	}

	if(recentmatches > 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}
</pre>
<p>Autant vous le dire tout de suite, ce bout de code ne me plait pas du tout. Si l&#8217;on fait une remarque sur ce genre de code, beaucoup de coders sortent leur carte anti-troll ; « les goûts et les couleurs, ça ne se discute pas » ainsi que l&#8217;autre carte souvent utilisée ; « pas grave, ce n’est pas &#8216;time critic&#8217; ».</p>
<p>Mais est-ce que ces 2 cartes devraient tout autoriser ? Alors sous ces 2 prétextes, on peut faire tout et n&#8217;importe quoi ? Je suis désolé, mais je ne suis pas d&#8217;accord.</p>
<p>Prenons le cas de la classe string qui est passé en paramètre, on est loin du débat « est-ce que ++i est mieux que i++ » ! Même si la fonction n&#8217;est pas &#8216;time critic&#8217;, passer une classe string comme cela entraine non seulement un overhead de code mais surtout, des allocations/désallocations mémoire! Il faut allouer la classe sur la pile, appeler le ctor, allouer la mémoire pour la chaine de caractère, la copier, et, à la fin, la désalouer. En plus de prendre du temps CPU, ça fragmente la mémoire, ce qui peut avoir des effets réellement génants.</p>
<p>Maintenant le fait de ne pas utiliser de const ? Mettre un header SIM_ au lieu d&#8217;utiliser un namespace ? Ce code montre très clairement que c&#8217;est un ancien programmeur C et qu&#8217;il ne maitrise pas des concepts basiques du C++ et continue à utiliser ses anciennes habitudes du C.</p>
<p>Tout le monde fait des erreurs, tout le monde a tendance à faire comme il a toujours fait, c&#8217;est humain. Ce qui me dérange plus, c&#8217;est la réaction, plutôt que d&#8217;accepter qu&#8217;il y ait un problème et le corriger, le programmeur se réfugie derrière le &#8220;c&#8217;est pas grave, les gouts et les couleurs&#8230; c&#8217;est pas time critic&#8230;&#8221;. Comment évoluer, s&#8217;améliorer dans ces conditions ?</p>
<p>Pour finir, voilà comment, moi, j&#8217;aurais surement écrit ce bout de code (ce n&#8217;est pas du tout pour montrer la solution parfaite, mais juste pour jouer le jeu) :</p>
<pre>
using namespace std;
namespace SIM {
bool FoodMemory::isBoringChoice(const string &#038;foodname) const
{
	int recentmatches = 0;
	for(iter it = Items.begin(); it != Items.end(); it++)
	{
		FoodMemoryItem *item = *it;
		if(item->FoodName == foodname)
		{
			int diff = sim()->turnCount() - item->TurnConsumed;
			if(diff < 14) recentmatches++;
		}
	}

	return (recentmatches > 1);
}
</pre>
<p>J&#8217;ai clairement un style plus compact, j&#8217;ai fait exprès de ne pas changer l&#8217;algo sinon j&#8217;aurais fait directement un return dans le if pour casser la boucle &#8216;for&#8217; le plus tôt possible.</p>
<p>Et comme je suis curieux, vous l&#8217;auriez écrit comment vous ?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=ud9AEgE"><img src="http://feeds.feedburner.com/~f/acemtp?i=ud9AEgE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=Um6cK8e"><img src="http://feeds.feedburner.com/~f/acemtp?i=Um6cK8e" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=86</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=86</feedburner:origLink></item>
		<item>
		<title>Distribuer un logiciel sous GNU/Linux</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/234899896/</link>
		<comments>http://blog.ploki.info/?p=85#comments</comments>
		<pubDate>Thu, 14 Feb 2008 11:14:52 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Développement</category>

		<category>Mtp Target</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=85</guid>
		<description><![CDATA[Cela fait plus de 10 ans que je développe sous GNU/Linux en C++. Je faisais souvent des applications pour les serveurs qui étaient gérés par moi ou mon équipe. Faire des programmes portables Windows-GNU/Linux est donc quelque chose que je maitrise bien.
Par contre avec la sortie de Mtp Target sous GNU/Linux, je me suis lancé [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait plus de 10 ans que je développe sous GNU/Linux en C++. Je faisais souvent des applications pour les serveurs qui étaient gérés par moi ou mon équipe. Faire des programmes portables Windows-GNU/Linux est donc quelque chose que je maitrise bien.</p>
<p>Par contre avec la sortie de <a href="http://www.mtp-target.org">Mtp Target</a> sous GNU/Linux, je me suis lancé dans quelque chose de nouveau ; la distribution d&#8217;un logiciel sous GNU/Linux.</p>
<p>Sous Windows, j&#8217;ai l&#8217;habitude, un coup de <a href="http://nsis.sourceforge.net">NSIS</a> pour faire l&#8217;installer et le tour est joué. Bon, ce n’est pas aussi simple, il faut gérer les problèmes sous VISTA, les problèmes de directX et beaucoup d&#8217;autres petits soucis, mais je gère.</p>
<p>La question était donc : comment faire pour que Mtp Target soit jouable par tous les Linuxiens.</p>
<p>La première piste était de faire comme sous Windows ; un installer. Il en existe un certain nombre qui marche plutôt pas mal. Le plus simple est <a href="http://megastep.org/makeself">makeself</a>, c&#8217;est celui qui est utilisé par Id Software et nVidia. C&#8217;est en ligne de commande, on exécute, ça déarchive et exécute un script si nécessaire.</p>
<p>Sauf que voilà, le gros problème est que lorsque l&#8217;on télécharge un programme sous GNU/Linux, les droits d&#8217;origine ne sont pas gardés, donc on se retrouve avec un programme sans le bit d&#8217;exécution et quand on double clique dessus, ça l&#8217;ouvre dans un éditeur de texte ! Il faut que l&#8217;utilisateur s&#8217;y connaisse pour ajouter le bit d&#8217;exécution et ensuite l&#8217;exécuter. La raison invoquée est que c&#8217;est une question de sécurité. Un utilisateur pourrait télécharger un programme sans le faire exprès et l&#8217;exécuter.</p>
<p>La solution choisie par Mozilla est de créer une archive &#8220;.tar.bz2&#8243;. L&#8217;avantage est qu&#8217;il suffit de double cliquer sur l&#8217;archive pour que ça l&#8217;ouvre grâce au logiciel associé. Ensuite, l&#8217;utilisateur drag&#038;drop le répertorie contenu dans l&#8217;archive où il le souhaite et il peut exécuter ce qui va bien. Je ne trouve pas que ça soit l&#8217;extase, mais au moins ça marche sans bidouiller, car les droits sont gardés dans l&#8217;archive.</p>
<p>Autre problème, impossible d&#8217;associer une icône à l&#8217;exécutable. Encore une fois, la raison invoquée est la sécurité (oui, sinon on pourrait mettre une icône d&#8217;un autre logiciel pour se faire passer pour celui çi). Mais bonne nouvelle, il est possible de créer une sorte de raccourci à la Windows, c&#8217;est un fichier texte qui contient le path vers l&#8217;exe, une icône, etc. Super ! Sauf qu&#8217;en fait non, c&#8217;est naze, on ne peut pas mettre de chemin relatif vers l&#8217;exe!!! Ca serait trop simple, on peut pas faire : path=bin/myexe, il faut un chemin absolu, sauf que bien sûr, comme l&#8217;utilisateur peut extraire le jeu n&#8217;importe où, il est impossible de créer ce fichier, donc retour à la case départ, pas d&#8217;icône.</p>
<p>Problème suivant ; mon jeu utilise une lib dynamique, FMod. Sous Windows, c&#8217;est simple, l&#8217;exe va automatiquement chercher les lib dynamiques dans un ordre précis, d&#8217;abord dans le répertoire courant, puis dans des répertoires spécifiques. Sous GNU/Linux? Il cherche dans les chemins définis dans la variable d&#8217;environnement LD_LIBRARY_PATH. Il est donc impossible de lancer le jeu directement, car il ne trouve pas la lib dynamique. Il faut donc écrire un script Shell qui va ajouter le chemin courant dans LD_LIBRARY_PATH puis exécuter le jeu. Sauf que c&#8217;est un script, et donc quand on double clique dessus, ça pop une message box demandant à l&#8217;utilisateur s&#8217;il veut l&#8217;exécuter, l&#8217;éditer, etc. Malgré le bit d&#8217;exécution !</p>
<p>Dernier souci ; la portabilité. Si je veux que le jeu marche sur un maximum de distribution GNU/Linux, il faut que je limite les dépendances avec les librairies externes. Chaque dépendance risque de poser un problème, car chaque distribution a sa propre version de chaque librairie. Il faut donc *tout* compiler en librairies statiques.</p>
<p>Dans les versions récentes de gcc, le compilateur ajoute un système de stack check pour limiter les bugs, sauf que, pas de bol, il faut la GLIBC 2.4 pour que cela fonctionne, sauf que ce n&#8217;est pas très répandu encore. Donc tous les utilisateurs qui tournent sur des distribs avec la GLIBC inférieure à 2.4 ne pourront lancer le jeu. Après une grosse prise de tête, j&#8217;ai enfin trouvé le moyen de retirer ce système et donc retirer les symboles dépendants de la GLIBC 2.4. Ouf&#8230;</p>
<p>Après tous ces problèmes, j&#8217;ai finalement réussi à faire un package unique qui fonctionne sur quasiment toutes les distribs GNU/Linux!</p>
<p>J&#8217;ai toujours le problème du script qui ne veut pas se lancer automatiquement quand on double clique dessus. Toujours pas d&#8217;icône associée au script. Pas de version 64bits (mais ça marche bien avec l&#8217;émulation automatique). Pas d&#8217;ajout du jeu dans le menu&#8230; La solution ultime serait peut-être un tar.bz2 qui contient un installer mais ça ne règlera pas tous les problèmes.</p>
<p>Quand je discute avec des fans de GNU/Linux, leur réponse est toujours la même, c&#8217;est naze ce que tu fais, la bonne façon de faire est de créer un package. Sauf que le système de package est différent sur chaque distrib! Ça veut dire que si je veux que mon jeu soit disponible partout, je dois créer une bonne 10ène de version du jeu ! C&#8217;est vrai que c&#8217;est mieux intégré, mais ça demande un boulot monstre. Prenons par exemple le simple cas de la distrib Debian, si je veux que tous les utilisateurs Debian puissent jouer à Mtp Target, il faudrait que je fasse un package debian, sauf qu&#8217;il y a plusieurs versions de Debian, etch, lenny, sarge, woody&#8230; Donc, il faudrait en théorie faire autant de package que de version de Debian, donc au moins 3 pour Debian. Je vous laisse imaginer le boulot (nombre de distrib * nombre de versions par distrib)!</p>
<p>Peut-être qu&#8217;un jour il y aura assez de monde dans la communauté de Mtp Target pour faire ce boulot, mais ce n&#8217;est pas quelque chose que je peux faire tout seul. Mon système n&#8217;est pas parfait, mais il permet au moins à tout le monde sous GNU/Linux de jouer à Mtp Target sans dépendre d&#8217;une distrib ou d&#8217;une version de distrib. Je n&#8217;ai à ce jour aucun linuxien qui est venu me voir en disant que ça ne marche pas chez lui.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=o9jj4GE"><img src="http://feeds.feedburner.com/~f/acemtp?i=o9jj4GE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=WtrX4Oe"><img src="http://feeds.feedburner.com/~f/acemtp?i=WtrX4Oe" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=85</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=85</feedburner:origLink></item>
		<item>
		<title>Jeux vidéo libres</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/224713742/</link>
		<comments>http://blog.ploki.info/?p=83#comments</comments>
		<pubDate>Mon, 28 Jan 2008 18:15:55 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Extreme Programming</category>

		<category>Développement</category>

		<category>Mtp Target</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=83</guid>
		<description><![CDATA[Demain je vais à Linux Expo, ça fait des années que j’y vais car c’est toujours l’occasion de revoir des gens que je vois rarement.
Je profite de cette occasion pour faire un ticket sur les jeux vidéo libres. Voici les différentes catégories :
Les jeux développés sur le temps libre
Ça représente surement 95% des jeux libres. [...]]]></description>
			<content:encoded><![CDATA[<p>Demain je vais à Linux Expo, ça fait des années que j’y vais car c’est toujours l’occasion de revoir des gens que je vois rarement.</p>
<p>Je profite de cette occasion pour faire un ticket sur les jeux vidéo libres. Voici les différentes catégories :</p>
<p><strong>Les jeux développés sur le temps libre</strong></p>
<p>Ça représente surement 95% des jeux libres. Ils sont très souvent développés par des étudiants qui ont beaucoup de temps libres (forcement, ce sont des geeks) et qui veulent faire un jeu parce que c’est fun (oui, ce sont des geeks, ils n’ont pas la même notion du fun que les gens normaux).</p>
<p>Ça part toujours d’une très bonne intention, les développeurs se démènent pour faire un programme clean, se focalise sur le dernier design pattern, le dernier moteur 3D libre et rédigent des game designs. Ils sont super contents, motivés, en une semaine ils arrivent à ouvrir une fenêtre 3D et à afficher un triangle rouge au milieu.</p>
<p>Au bout d’un an, à force de boulot acharné, ils n’ont rien à montrer si ce n’est une fenêtre 3D qui s’ouvrent avec un triangle au milieu (mais qui tourne !) et un doc de 500 pages décrivant un jeu tellement complexe que même la NASA ne comprendrait pas les spécifications. Quelques fois, ils arrivent à amener quelques potes de classe sur le projet et arrivent à faire quelque chose de jouable. Mais ces projets tombent très souvent à l’eau, non pas qu’ils soient mauvais mais par manque de temps. L’étudiant découvre les boites de nuits et les filles (non, c’est pour rire, c’est un geek !). Je veux dire l’étudiant trouve un travail et n’a plus le courage le soir et le weekend de passer encore du temps sur ce satané bug introuvable (et oui, le dernier design pattern n’a finalement pas suffit à éviter les bugs).</p>
<p><strong>Les jeux tellement vieux qu’il faut ressortir l’Atari pour les compiler</strong></p>
<p>Bon ok, j’exagère, mais c’est un peu ça quand même. Les seuls jeux produits par l’industrie du jeu vidéo et qui sont libres aujourd’hui sont ceux qui sont tellement vieux que de toute façon ils ne peuvent plus espérer les vendre (même pas dans les boites de Frosties). C’est le cas par exemple de Quake. 5 ou 6 ans après la sortie, quand la technologie est complètement dépassée et que le code source n’a plus aucun intérêt compétitif, le studio le passe en licence libre pour se faire un coup de pub. C’est clairement mieux que rien. L’avantage est que ce sont des jeux beaucoup plus connus et donc qui attirent beaucoup de geeks qui veulent voir comment ça a été codé (QUOI ? ça a été codé sans design pattern? Comment ont-ils pu en vendre des millions ?). C’est très instructif et toute une ribambelle de geek bidouillent le code pour le fun en faisant une version pour iPhone, une pour le C64 et une autre avec des design patterns parce que c’est quand même mieux comme ça.</p>
<p>3ème catégorie de jeux libre&#8230; Euh… bah en fait, il n&#8217;y en a pas.</p>
<p>Dans de très rares cas, les jeux développés sur le temps libre attirent d’autres geeks et deviennent connus (TuxRacer par exemple). Dans d’autres rares cas, un groupe de geeks se réunit autour d’un ancien jeu close source et fait un super mod (Warsow par exemple) mais dans la grande majorité des cas, ce n’est pas fameux et on se retrouve avec 90% des jeux complètement injouables, pas fun et sans intérêt… tant d’énergie perdue…</p>
<p>On peut s’étonner de voir de superbes applications libres comme GNU/Linux, Open Office, Firefox et si peu de bons jeux (et encore moins de jeux originaux). C’est d’autant plus étrange que faire un jeu est souvent un rêve de geek. </p>
<p>Je pense qu’une des raisons à cela est que les geeks ont tous une idée différente de jeu révolutionnaire et donc que chacun veut développer son jeu dans son coin et n’arrive à rien car il est tout seul. Une autre raison est que les geeks misent beaucoup trop de temps sur la technologie et les docs. Combien de fois j’ai discuté avec des geeks qui veulent faire &#8220;un MMORPG où on sera libre de faire toute ce qu’on veut dans un monde 3D avec de la physique qui tue tellement c’est réaliste, qu’à coté, Second Life c’est du pipi de chat.&#8221; (c) Je n’ai rencontré que si peu de geeks pragmatiques. Je pense que ceux qui arrivent à faire de bons jeux libres aujourd’hui sont justement ceux là, les pragmatiques. Des personnes qui savent à quel point c’est complexe de réaliser un jeu et donc qui se donnent un objectif simpliste, sur un gameplay extrêmement simple et efficace. Et une fois cette version lancée, fonctionnelle et amusante alors d’autres geeks tomberont peut être dessus, trouveront l’idée sympa et rejoindront le projet pour l’améliorer. Alors une version améliorée sortira et ainsi de suite jusqu&#8217;à arriver à un jeu vraiment bien.</p>
<p>Je trouve dommage qu&#8217;il y ait si peu de bons jeux dans le logiciel libre alors que tous les ingrédients sont présents. Je trouve encore plus dommage qu&#8217;aucun studio ne s&#8217;intéresse au logiciel libre alors que tout le monde sait qu&#8217;un bon jeu est avant tout un game play original et fun et non un moteur 3D nouvelle génération. Ce n&#8217;est pas le code source du jeu qui fait vendre, c&#8217;est le fun du jeu. Si l&#8217;industrie du jeux vidéo partageait son code, elle pourrait baisser ses coûts de développement et surtout aurait plus de temps pour se concentrer sur le fun et l&#8217;originalité de leur jeu ce qui serait positif pour tout le monde et surtout, les joueurs.</p>
<p>Ce dont je suis convaincu, c’est qu’il est aujourd’hui possible de développer des jeux vidéo libres (et même gratuits) et d’en vivre et je suis là pour tenter de vous le prouver à tous avec <a href="http://www.mtp-target.org">Mtp Target</a>
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=1xVuooE"><img src="http://feeds.feedburner.com/~f/acemtp?i=1xVuooE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=RAgyERe"><img src="http://feeds.feedburner.com/~f/acemtp?i=RAgyERe" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=83</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=83</feedburner:origLink></item>
		<item>
		<title>Discipline et simplicité</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/150138728/</link>
		<comments>http://blog.ploki.info/?p=80#comments</comments>
		<pubDate>Thu, 30 Aug 2007 15:43:08 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Extreme Programming</category>

		<category>Développement</category>

		<category>Management</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=80</guid>
		<description><![CDATA[Un jour en lisant mes blogs favoris, je tombe sur cet article que je vous invite à lire. Il parle de l&#8217;importance de la discipline lorsque l&#8217;on programme. Sans cela, tout part vite n&#8217;importe comment jusqu&#8217;au jour où ça devient ingérable et où les gens commencent à passer plus de temps à chercher et comprendre [...]]]></description>
			<content:encoded><![CDATA[<p>Un jour en lisant mes blogs favoris, je tombe sur <a href="http://www.codinghorror.com/blog/archives/000931.html">cet article</a> que je vous invite à lire. Il parle de l&#8217;importance de la discipline lorsque l&#8217;on programme. Sans cela, tout part vite n&#8217;importe comment jusqu&#8217;au jour où ça devient ingérable et où les gens commencent à passer plus de temps à chercher et comprendre qu&#8217;à développer.</p>
<p>Il prend l&#8217;exemple des outils de source control et je ne peux qu&#8217;être d&#8217;accord avec lui&#8230; J&#8217;ai eu l&#8217;occasion de voir un bon nombre de projets utilisant des sources control et à chaque fois c&#8217;était un désastre ! Aucune discipline n&#8217;est apportée sur l&#8217;arborescence des répertoires alors que c&#8217;est la base du projet, ses fondations. Le problème principal est que personne ne s&#8217;intéresse à ce sujet, chacun met ses fichiers où il veut et s’il ne sait pas où, il va surement créer un répertoire quelque part portant son nom. Il y a ceux qui vont créer un répertoire par classe, d&#8217;autres qui vont tout mettre en vrac dans un même répertoire, après tout, on s&#8217;en fiche du moment que ça compile et que ça se lance !</p>
<p>Quelque chose qui m&#8217;horripile encore plus, c&#8217;est la nomenclature des noms de fichiers. Vous êtes vous déjà posé la question sur comment vous nommez vos fichiers ? En français ? En anglais ? En minuscule ? En majuscule ? Peu importe ? Pas tant que ça&#8230;</p>
<p>Par exemple, accepter les espaces dans les noms de fichiers peut devenir une réelle galère pour les programmeurs et peut entrainer un bon nombre de bugs.</p>
<p>Accepter les majuscules ne pose pas de problèmes sous Windows, car il ne fait pas la différence, mais si pour une raison quelconque vous devez faire fonctionner un outil sous Linux, alors vous allez le regretter. J&#8217;ai pu voir des projets où les règles de nommage des fichiers étaient différentes en fonction du programmeur. Il y avait des MyClass.h yourClass.h voir même des his_Class.h. Mais lors de l&#8217;inclusion dans le code avec la directive #include, les majuscules ne correspondaient pas. Ça marche très bien sous Windows mais aucune chance que ça passe sous Linux et vous êtes alors bon pour repasser sur tous les #include du code source. L&#8217;autre gros problème est pour les nouveaux programmeurs : comment peut-il s&#8217;y retrouver ? Un coup il y a un _, un autre coup non, en gros il faut apprendre par cœur le nom de chaque fichier !</p>
<p>Vous pouvez dire que c&#8217;est ce qui arrive fatalement quand on a une grosse équipe ou alors quand on engage des gens incompétents mais en fait non. Regardons ce projet développé par 2 programmeurs talentueux et expérimentés qui viennent de créer un studio ensemble dans le but de réaliser le projet de leurs rêves. Le projet a commencé il y a moins d&#8217;un an, et ils ne sont que 2. Ils s&#8217;amusent à afficher <a href="http://powerof2games.com/node/21">leurs commits</a> alors profitons-en pour essayer de trouver les règles de nommage des fichiers et répertoires qu&#8217;ils ont mis en place :</p>
<p><img id="image81" src="http://blog.ploki.info/wp-content/uploads/rev2048.png" alt="rev2048.png" /></p>
<ul>
<li>Règle 1: Nommage des répertoires et des code sources : une majuscule pour la première lettre de chaque mot et le reste en minuscule.</li>
<li>Règle 2: Nommage des assets graphiques : tout en minuscule avec les mots séparés par des _.</li>
<li>Règle 3: Nommage des répertoires des assets graphiques: c&#8217;est la que ça se complique&#8230; Il semblerait que ça soit la règle 1 pour les 2 premiers répertoires, puis la règle 2 pour les répertoires suivants.</li>
</ul>
<p>Regardons maintenant <a href="http://powerof2games.com/node/13">un autre commit</a> qu&#8217;ils ont fait sur le même projet quelques mois auparavant : </p>
<p><img id="image81" src="http://blog.ploki.info/wp-content/uploads/rev2048.png" alt="rev2048.png" /></p>
<p>AIE. Il semblerait que ma règle 2 ne soit pas correcte, en fait il faut la modifier comme ça :</p>
<ul>
<li>Règle 2: Nommage des assets graphiques : tout en minuscule avec les mots séparés par des _ ou des - en fonction du sens du vent (où tout autre paramètre aléatoire).</li>
</ul>
<p>Imaginez, ils ne sont que 2 ! des ingénieurs avec l&#8217;esprit cartésien ! et au bout de quelques mois on ne peut déjà plus décrire le nommage des fichiers/répertoires avec des règles simples. Qu&#8217;est ce que ça va devenir dans 1 an, ou quand il y aura des nouveaux dans l&#8217;équipe ?</p>
<p>Pourtant, il existe une règle simple qu&#8217;en général les programmeurs aiment bien : <a href="http://en.wikipedia.org/wiki/KISS_principle">KISS (Keep It Simple, Stupid)</a>. Mais pour je ne sais quelle raison, ils ne l&#8217;appliquent que pour la programmation.</p>
<p>À mes débuts à Nevrax, pour le développement d&#8217;un MMORPG Windows/Linux, j&#8217;avais proposé une règle très simple suivant justement le principe KISS en partant du principe que plus les règles seront simples, plus il y a de chance que les gens la connaitront et la suivront.</p>
<ul>
<li>Règle 1: Nommage de tous les fichiers et tous les répertoires : uniquement des caractères alphanumériques en minuscule, les mots étant séparés par des _. Pour les geeks, on peut résumer ça en [a-z0-9_]+</li>
<li>Règle 2: pas de règle 2&#8230;</li>
</ul>
<p>On peut difficilement faire plus simple, ça évitait tous les problèmes des espaces, des majuscules et des caractères bizarres. Bien que cette règle soit simple et rabâchée depuis le début du projet, un certain nombre de programmeurs n&#8217;arrivaient pas (ou ne voulaient pas) la suivre et mettaient des noms de fichiers qui ne suivaient pas cette règle. Mais le pire a été avec les graphistes, designers, sound designers&#8230; Ils ne voulaient pas se plier à cette règle et voulaient continuer à faire comme ils faisaient avant (c&#8217;est à dire sans règles, au gré des humeurs). Pour éviter des conflits trop violents, il a été décidé de n&#8217;appliquer la règle que pour le code source et ce fut une belle erreur. Pendant des années on a du ajouter des bouts de code (rustines) dans les tools, sous Linux uniquement pour gérer des cas particuliers dans les noms fichiers et répertoires parcequ&#8217;ils ne voulaient pas se plier à cette règle simple. Il est même arrivé de devoir mettre des rustines dans des outils qui fonctionnaient parfaitement bien depuis 4 ans parce qu&#8217;une personne avait trouvé un nouveau moyen fun de nommer les répertoires qui cassait le peu de logique qui restait dans l&#8217;arborescence des datas.</p>
<p>Autant je comprends que les gens soient réticents à suivre des règles complexes ou qui n&#8217;ont pas de sens. Mais je ne comprends toujours pas pourquoi autant de personnes ont protesté si fortement contre une règle simple qui aurait mis de la discipline dans le source control et aurait rendu la vie tellement plus simple à tous.
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=rw5q80E"><img src="http://feeds.feedburner.com/~f/acemtp?i=rw5q80E" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=L1bwFve"><img src="http://feeds.feedburner.com/~f/acemtp?i=L1bwFve" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=80</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=80</feedburner:origLink></item>
		<item>
		<title>Et si tout était dans le recrutement ?</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/130446826/</link>
		<comments>http://blog.ploki.info/?p=79#comments</comments>
		<pubDate>Wed, 04 Jul 2007 13:37:45 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Recrutement</category>

		<category>Management</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=79</guid>
		<description><![CDATA[Honnêtement, je ne pense pas que plus de 5 % des entreprises savent recruter des programmeurs. Depuis que je suis dans la vie active (une demi-douzaine d&#8217;années), je n&#8217;ai dû en croiser qu&#8217;une qui savait vraiment bien le faire, qu&#8217;une ou deux où il y avait de l&#8217;idée et tout le reste, c&#8217;était du grand [...]]]></description>
			<content:encoded><![CDATA[<p>Honnêtement, je ne pense pas que plus de 5 % des entreprises savent recruter des programmeurs. Depuis que je suis dans la vie active (une demi-douzaine d&#8217;années), je n&#8217;ai dû en croiser qu&#8217;une qui savait vraiment bien le faire, qu&#8217;une ou deux où il y avait de l&#8217;idée et tout le reste, c&#8217;était du grand n&#8217;importe quoi.</p>
<p>Tout d&#8217;abord, il faut définir ce qu&#8217;est un &#8220;bon programmeur&#8221;. Selon moi, avoir un diplôme reconnu n&#8217;est pas un critère, connaître par coeur les puissances de 2 jusqu&#8217;à 2 puissance 32 non plus. Je définirais un bon programmeur comme quelqu&#8217;un d&#8217;extrêmement curieux, qui maîtrise ce qu&#8217;il fait, qui a une très bonne capacité d&#8217;écoute et de résolution de problèmes techniques. Il doit aussi être capable de se remettre en question, aimer travailler en équipe et être capable de finir ce qu&#8217;il commence.</p>
<p>Dans les 95 % des entreprises, on est confronté à l&#8217;un de ces scénarios :</p>
<p>- Si l&#8217;entreprise a de la chance, quelques bons ingénieurs vont être recrutés par erreur et se retrouveront au milieu d&#8217;une grande majorité d&#8217;ingénieurs qu&#8217;ils trouveront incompétents. Ces bons ingénieurs ont toutes les chances de vite quitter la société, car un bon ingénieur a besoin de trouver dans son environnement de travail des gens au moins aussi bons que lui. La société ne se retrouvera donc rapidement plus qu&#8217;avec des ingénieurs de niveau moyen ou mauvais et cela reviendra au cas suivant.</p>
<p>- Si l&#8217;entreprise n&#8217;a pas de chance, elle ne recrutera que des ingénieurs moyens ou incompétents. Pour que cela fonctionne quand même un minimum, la solution choisie est souvent de les encadrer de très près par des managers. Le problème est que ces managers n’ont aucune raison d&#8217;être mieux recrutés que les ingénieurs et donc sont du même niveau de compétence. Il faut alors mettre en place une énorme hiérarchie où tout le monde surveille tout le monde et où personne n&#8217;ose plus rien faire de peur de se faire taper sur les doigts par son chef&#8230; Dans ces entreprises, les managers mettent alors en place des méthodologies très lourdes et complexes avec beaucoup de paperasse, de planning, etc., pour essayer de se protéger en cas de problème et pouvoir rejeter la faute sur quelqu&#8217;un d&#8217;autre. On pourrait croire que ce genre de scénario n&#8217;arrive que dans les grosses sociétés, mais j&#8217;ai pu rencontrer des PME avec ce schéma (par exemple 6 ingénieurs pour 4 managers). Autant dire tout de suite, dans ces entreprises, les ingénieurs n&#8217;ont aucune reconnaissance. Ils sont vus comme le bas de l&#8217;échelle, les ouvriers, les moins bien payés, ceux qui sont à l&#8217;origine de tous les problèmes (retards, bugs, mauvaise qualité, &#8230;). Ils sont souvent considérés comme des gens qu&#8217;on peut remplacer comme on remplacerait une roue sur une voiture. Bref, il est évident que l&#8217;effet le plus indésirable de cette organisation est que l&#8217;ingénieur se trouve à détester sa position et va tout faire pour, soit partir, soit monter dans la hiérarchie pour gagner plus d&#8217;argent et arrêter de se sentir un moins que rien. Évidemment, on va vite se retrouver avec une énorme compétition entre ingénieurs, car le nombre de place de chef est inférieur au nombre de place d&#8217;ingénieur (enfin normalement). Ca crée alors des conflits d&#8217;intérêts, des histoires politiques entre équipes et les ingénieurs passent plus de temps à essayer de bien se faire voir par leurs chefs plutôt qu&#8217;à faire du bon code. Autre problème, c&#8217;est l&#8217;organisation idéale pour rencontrer le <a href="http://blog.ploki.info/?p=57">principe de Peter</a>.</p>
<p>Dans ce genre d&#8217;entreprises, passer aux méthodes agiles où n&#8217;importe quelle autre méthode ne servira à rien, car c&#8217;est un problème de fond, un problème culturel où seule une prise de conscience de la part du boss peut prétendre à une amélioration. Mais même dans ce cas, il serait très long et très compliqué de faire des changements de fond, car cela nécessiterait forcément des licenciements, de remettre des managers en programmeurs et souvent les esprits sont trop habitués à la culture de leur entreprise et considèreraient ça comme un affront. Bref, je ne pense pas que ça soit réellement possible de changer une culture d&#8217;entreprise, car les personnes sont recrutées en général parce qu&#8217;ils partagent justement cette culture.</p>
<p>Maintenant, prenons le cas des 5 % restants (et encore, je crois que je suis gentil, je dirais plutôt 1 %), ce sont des sociétés où le recrutement est une partie primordiale et ils feront tout ce qui est nécessaire (ne pas céder à la pression, mettre les budgets et le temps nécessaire) pour ne pas laisser entrer dans leur société des individus qui ne correspondent pas. L&#8217;idée de base est la suivante : &#8220;On ne recrute que des gens vraiment intelligents, ou on ne recrute pas.&#8221; Dans ce genre de société, le recrutement est permanent et maximal. Permanent, car ces ingénieurs vraiment intelligents sont difficiles à trouver et souvent déjà en poste, si on ne recrute que 2 mois dans l&#8217;année, la probabilité de tomber dessus est très faible. Maximal, car pour être vu par les meilleurs, il faut se faire voir. C&#8217;est exactement la même chose que pour vendre un produit à un client sauf que dans ce cas, le produit c&#8217;est la société et le client est l&#8217;ingénieur talentueux. Et comme ils savent qu&#8217;ils sont bons, ils sont difficiles et veulent aller dans des sociétés où ils se sentiront vraiment bien. Comment réussir toucher ce genre de personnes mériterait un sujet à part entière (JoelOnSoftware en à déjà <a href="http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html">parlé</a>). Cela n&#8217;est pas gratuit, ça coûte même cher à une entreprise aussi bien en temps (car il faut des gens pour faire passer les entretiens) qu&#8217;en argent. Mais c&#8217;est un investissement qui sera extrêmement rentable sur le long terme.</p>
<p>Une fois que vous avez réussi à attirer les meilleurs, il faut savoir faire le tri et c&#8217;est là qu&#8217;intervient l&#8217;entretien. Comment faire passer un bon entretien ? Encore une fois, ça mériterait un article complet (vous pouvez <a href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html">lire ça</a>).</p>
<p>Supposons que la structure est en place pour ne recruter que des bons ingénieurs, qu&#8217;est ce que ça change ? Tout d&#8217;abord, vous pouvez avoir une confiance beaucoup plus importante dans ces personnes. Vous n&#8217;avez pas à fliquer leurs horaires de travail (ils en feront même surement beaucoup plus que la normale sans même le demander), à vérifier s’ils bossent vraiment ou s’ils se tournent les pouces, etc. Bref, vous pouvez alléger au maximum la hiérarchie. Du côté des ingénieurs, ils sont beaucoup plus contents, car ils sentent qu&#8217;on leur fait confiance, ils sont beaucoup plus libres et le résultat est qu&#8217;ils bosseront beaucoup mieux et qu&#8217;ils ne voudront pas aller voir ailleurs. En plus, ces ingénieurs se retrouvent avec d&#8217;autres bons ingénieurs, ils se comprennent, s&#8217;entraident, se respectent plus facilement. Ils ne vont pas se prendre la tête pour savoir s’il faut mettre des espaces ou des tabulations, s&#8217;il faut faire des tests unitaires ou pas, car ils sont assez intelligents et ont assez d&#8217;expérience pour savoir ce qu&#8217;il en retourne et où se situent les vrais problèmes.</p>
<p>Donc dans ces sociétés, la hiérarchie est réduite à son minimum, il y a des ingénieurs qui programment, des lead ingénieurs qui sont aussi très techniques, mais qui peuvent facilement gérer 10 à 20 personnes, car les méthodes de travail peuvent elles aussi être très simplifiées. Pour que cela fonctionne, il faut évidement savoir mettre l&#8217;argent où il faut, par exemple ne pas lésiner sur les locaux, les ordinateurs, les tables, chaises, etc. Plus l&#8217;environnement sera agréable, plus il y a de chances que l&#8217;ambiance y soit bonne et donc que les gens y travaillent bien.</p>
<p>Ça peut paraître simple de mettre en place ce genre d&#8217;équipes, mais ce n&#8217;est clairement pas le cas. Tout d&#8217;abord, les lois de la concurrence, la pression des investisseurs, le manque d&#8217;ingénieurs sur le marché du travail font que les boss ont souvent tendance à vouloir recruter au plus vite, quitte à ne pas suivre la règle de base en pensant qu&#8217;après tout, ce n&#8217;est pas si grave que ça, on verra plus tard. Au début, ça marche bien, car la boite est petite, mais au fur et à mesure que des personnes peu compétentes arrivent, les problèmes arrivent par la même occasion et l&#8217;entreprise tombe dans les 95 %. L&#8217;autre problème est que les fondateurs/boss ont beaucoup de mal à mettre de l&#8217;argent sur quelque chose qui n&#8217;est pas rentable à très court terme (<a href="http://blog.ploki.info/?p=21">le problème du bûcheron</a>). Ils prendront les chaises premier prix qui font mal au dos sans penser que derrière cela augmentera le turn-over (qui veut passer 8 heures ou plus sur une chaise inconfortable?) qui au final coûtera beaucoup plus cher que d&#8217;avoir mis des fauteuils corrects dès le début (l&#8217;exemple de la chaise vous parait peut-être exagéré pourtant c&#8217;est du vécu et des histoires comme celle-là, j&#8217;en ai vu tellement d&#8217;autres&#8230;).</p>
<p>Le meilleur exemple d&#8217;entreprise qui utilise la 2ème méthode est Google. Bizarrement, ils sont devenus la boite la plus recherchée par les ingénieurs et c&#8217;est aussi une société qui fait beaucoup d&#8217;argent. Je suis convaincu que leur réussite tient d&#8217;abord à leurs méthodes de recrutement et leur culture d&#8217;entreprise. Je suis aussi convaincu que même s&#8217;ils n&#8217;avaient pas eu l&#8217;idée de faire un moteur de recherche ou un business sur Internet, ils auraient obtenu un résultat similaire dans une autre industrie.</p>
<p>Vous allez me dire que c&#8217;est facile pour eux, ils ont énormément argent, mais ils ont commencé à moins de 10 personnes et ont tout bâti eux même. C&#8217;est avant tout leur façon de construire la société (et donc l&#8217;équipe) qui leur a permis d&#8217;arriver là où ils sont aujourd&#8217;hui.</p>
<p>Un autre exemple d&#8217;une entreprise qui suit ces principes est <a href="http://www.fogcreek.com/">FogCreek</a>. C&#8217;est une petite société qui ne fait que grossir, doucement, mais sûrement. Ils ont un peu la même philosophie que Google, mais avec seulement une 20aine de personnes. Cette boite a toujours été rentable. Ils suivent la règle d&#8217;or qui dit que si on recrute les bonnes personnes, quel que soit le projet qui sera choisi, il sera rentable. Et ils le prouve par exemple avec leur bugtracker. Il existe des 10aines de bugtracker différents, dont beaucoup de gratuits, mais bien que le leur soit payant il se vend bien et suffit pour faire vivre la société.</p>
<p>Tout ça pour dire que le processus de recrutement commence dès les premiers jours de la vie d&#8217;une entreprise et que de mauvaises méthodes de recrutement risquent d&#8217;entrainer par la suite de gros problèmes qui ne pourront pas être rattrapés. Malheureusement, c&#8217;est aussi la période où il y a tellement de choses à faire que le recrutement des programmeurs peut être mis au second plan où alors les conséquences du choix de mauvais programmeurs sont clairement sous-estimées.</p>
<p>Je rêve un jour de pouvoir rencontrer des créateurs d&#8217;entreprises français assez ouverts pour pouvoir comprendre l&#8217;intérêt et le potentiel énorme de ces nouvelles façons de construire et gérer une société informatique. Si vous pensez en être un, n&#8217;hésitez pas à <a href="mailto:acemtp@gmail.com">me contacter</a>, je serais ravi d&#8217;en discuter plus longuement !
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=bKhW7SE"><img src="http://feeds.feedburner.com/~f/acemtp?i=bKhW7SE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=JqXE1ze"><img src="http://feeds.feedburner.com/~f/acemtp?i=JqXE1ze" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=79</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=79</feedburner:origLink></item>
		<item>
		<title>Environnement de travail</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/125857857/</link>
		<comments>http://blog.ploki.info/?p=78#comments</comments>
		<pubDate>Mon, 18 Jun 2007 18:03:00 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Mtp Target</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=78</guid>
		<description><![CDATA[Voici une photo qui montre le matos que j&#8217;utilise tous les jours pour faire mon projet de jeu Mtp Target.

Tout d&#8217;abord un portable Dell Inspiron 9400. C&#8217;est vraiment pratique pour pouvoir bosser n&#8217;importe où. C&#8217;est un portable avec 2go de RAM, une carte graphique qui boost bien, le seul problème est le disque dur un [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une photo qui montre le matos que j&#8217;utilise tous les jours pour faire mon projet de jeu <a href="http://www.mtp-target.org">Mtp Target</a>.</p>
<p><a href="http://blog.ploki.info/wp-content/uploads/poste_de_travail.jpg"><img id="image77" width="600" src="http://blog.ploki.info/wp-content/uploads/poste_de_travail.jpg" alt="poste_de_travail.jpg" /></a></p>
<p>Tout d&#8217;abord un portable <a href="http://www1.euro.dell.com/content/products/productdetails.aspx/inspn_9400?c=fr&#038;l=fr&#038;s=dhs&#038;cs=frdhs1">Dell Inspiron 9400</a>. C&#8217;est vraiment pratique pour pouvoir bosser n&#8217;importe où. C&#8217;est un portable avec 2go de RAM, une carte graphique qui boost bien, le seul problème est le disque dur un peu lent lors des compilations.</p>
<p>L&#8217;écran du portable me sert d&#8217;écran secondaire où je mets le chat de Mtp Target, ce qui me permet de suivre les discussions sur les serveurs. C&#8217;est un peu du gâchis d&#8217;utiliser un écran 17 pouces 1920&#215;1200 pour seulement ça, mais quand je suis en déplacement, je suis bien content d&#8217;avoir un grand écran.</p>
<p>Mon écran principal, un <a href="http://www.samsung.com/fr/products/monitor/tftlcd/tftlcddigital/ls20mewsfvedc.asp">Samsung 206BW</a> est vraiment bien, rien à redire si ce n&#8217;est le manque de pied réglable.</p>
<p>Le clavier est vraiment super sympa, c&#8217;est un <a href="http://www.logitech.com/index.cfm/keyboards/keyboard/devices/180&#038;cl=fr,fr">G15 de Logitech</a>. Grâce à un <a href="http://www.ploki.info/index.php?pagename=Projects.G15Web">utilitaire que j&#8217;ai programmé</a>, l&#8217;écran à cristaux liquides du clavier affiche les stats du jeu, à savoir, le nombre de joueurs inscrits, le nombre de joueurs connectés au jeu, le nom du dernier joueur inscrit, le nombre de sujets dans le forum, etc. Un autre truc bien pratique, c&#8217;est les 18 touches de fonctions de G1 à G18. Elles sont presque toutes mappées. Par exemple, si je veux un ssh sur mon serveur web, c&#8217;est G7, une touche et ça s&#8217;ouvre.</p>
<p>Dans le coin en bas à droite de la photo, on trouve un petit disque dur externe pour les backups, un téléphone, un PDA et un GPS. Sur le clavier du portable, c&#8217;est un casque Koss. Et pour finir, un tapis souris <a href="http://www.ryzom.fr">Ryzom</a>, et un pense bête des commandes de <a href="http://fr.wikipedia.org/wiki/Subversion_(logiciel)">svn</a> sous le clavier.</p>
<p>Tout est posé sur un bureau Ikéa, le même que celui que j&#8217;avais à Nevrax, sauf que celui-là est réglable en hauteur avec un moteur. Ne me demandez pas l&#8217;intérêt, il était en promo et moins cher que le bureau normal <img src='http://blog.ploki.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=HbAr0DE"><img src="http://feeds.feedburner.com/~f/acemtp?i=HbAr0DE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=howzUse"><img src="http://feeds.feedburner.com/~f/acemtp?i=howzUse" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=78</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=78</feedburner:origLink></item>
		<item>
		<title>Tous unis pour l’Unicode</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/125139042/</link>
		<comments>http://blog.ploki.info/?p=76#comments</comments>
		<pubDate>Fri, 15 Jun 2007 17:21:36 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Développement</category>

		<category>Mtp Target</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=76</guid>
		<description><![CDATA[Depuis un bon moment, je fais mon possible pour que le jeu Mtp Target supporte complètement l&#8217;unicode. Ça n&#8217;a jamais vraiment servi à grand-chose, car tout le jeu est en anglais. Un charset iso-latin aurait largement suffit pour que les gens puissent parler en anglais et en français. Mais je voulais bien faire les choses [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis un bon moment, je fais mon possible pour que le jeu <a href="http://www.mtp-target.org">Mtp Target</a> supporte complètement l&#8217;<a href="http://fr.wikipedia.org/wiki/Unicode">unicode</a>. Ça n&#8217;a jamais vraiment servi à grand-chose, car tout le jeu est en anglais. Un charset <a href="http://fr.wikipedia.org/wiki/ISO_latin_1">iso-latin</a> aurait largement suffit pour que les gens puissent parler en anglais et en français. Mais je voulais bien faire les choses et j&#8217;espérais qu&#8217;un jour des pays aux caractères plus exotiques viendraient jouer.</p>
<p>Un jour, un grand nombre de jeunes joueurs suédois ont débarqué dans le jeu grâce à un <a href="http://www.hamsterpaj.net/">site suédois</a> très fréquenté. Ça m&#8217;a permis de voir quelques <a href="http://fr.wikipedia.org/wiki/Su%C3%A9dois">nouveaux caractères</a> avec des accents bizarres sur certaines lettres, mais rien de bien original.</p>
<p><img id="image74" src="http://blog.ploki.info/wp-content/uploads/sv.jpg" alt="suédois" /></p>
<p>Par contre, cette semaine, un administrateur travaillant dans un <a href="http://www.st.uz/">FAI</a> m&#8217;a proposé de s&#8217;occuper d&#8217;un serveur de jeu dans le but d&#8217;avoir des ping plus bas pour les joueurs de son pays. Ce pays est l&#8217;<a href="http://fr.wikipedia.org/wiki/Ouzb%C3%A9kistan">Ouzbékistan</a>. Je ne savais même pas où se trouvait exactement ce pays et je me suis demandé comment ils ont pu entendre parler de <a href="http://www.mtp-target.org">Mtp Target</a>.</p>
<p><img id="image75" src="http://blog.ploki.info/wp-content/uploads/uz.jpg" alt="ouzbékistan" /></p>
<p>Historiquement, ils utilisent le charset <a href="http://fr.wikipedia.org/wiki/Cyrillique">cyrillique</a>, mais le pays fait beaucoup pour passer au latin. Ils écrivent donc habituellement avec les 2 alphabets.</p>
<p>Tout ça pour voir que ça marche super bien l&#8217;unicode <img src='http://blog.ploki.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  J&#8217;attends avec hâte des gens voulant héberger des serveurs en Corée, en Chine ou au Japon.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=WSUdquE"><img src="http://feeds.feedburner.com/~f/acemtp?i=WSUdquE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=qKCuLUe"><img src="http://feeds.feedburner.com/~f/acemtp?i=qKCuLUe" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=76</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=76</feedburner:origLink></item>
		<item>
		<title>BUG BUG BUG BUG</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/124267422/</link>
		<comments>http://blog.ploki.info/?p=73#comments</comments>
		<pubDate>Tue, 12 Jun 2007 17:39:04 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Développement</category>

		<category>Mtp Target</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=73</guid>
		<description><![CDATA[Après plusieurs mauvaises expériences en tant que salarié, j&#8217;ai pris la décision de travailler seul et à temps plein sur mes propres projets. Pour le moment, c&#8217;est Mtp Target et je vais donc utiliser ce blog pour partager mon aventure avec vous.
Il y a des jours, j&#8217;aimerais vraiment me reconvertir et arrêter l&#8217;informatique&#8230;

Faire des bugs, [...]]]></description>
			<content:encoded><![CDATA[<p>Après plusieurs mauvaises expériences en tant que salarié, j&#8217;ai pris la décision de travailler seul et à temps plein sur mes propres projets. Pour le moment, c&#8217;est <a href="http://www.mtp-target.org">Mtp Target</a> et je vais donc utiliser ce blog pour partager mon aventure avec vous.</p>
<p>Il y a des jours, j&#8217;aimerais vraiment me reconvertir et arrêter l&#8217;informatique&#8230;</p>
<p><a href="http://www.history.navy.mil/photos/images/h96000/h96566k.jpg"><img src="http://www.history.navy.mil/photos/images/h96000/h96566k.jpg" width="400" alt="premier bug" /></a></p>
<p>Faire des bugs, c&#8217;est normal, tout le monde en fait, mais il y a des fois où les bugs sont vraiment vraiment insupportables et j&#8217;en ai un en ce moment qui me nargue et que je n&#8217;arrive pas à trouver et voici pourquoi :</p>
<p>- C&#8217;est un bug qui se trouve sur la partie serveur de Mtp Target</p>
<p>- Il se produit qu&#8217;une fois environ par 24 heures (mais des fois, il ne se produit pas pendant plusieurs jours)</p>
<p>- Il se déclenche aléatoirement et sans aucune raison apparente</p>
<p>- Il fait freezer l&#8217;OS (GNU/Linux) sur lequel tourne le serveur de jeu (quand je dis freezer, c&#8217;est vraiment freezer, même un reboot soft ne marche pas, il faut éteindre/rallumer le serveur)</p>
<p>- Rien n&#8217;apparait dans les logs</p>
<p>- Il se produit uniquement quand des joueurs réels jouent (je peux laisser tourner le serveur avec 16 bots 24/7, le bug n&#8217;apparait pas).</p>
<p>- Il se produit sur les 2 serveurs dédibox dont j&#8217;ai accès, mais pas sur d&#8217;autres serveurs GNU/Linux hébergés ailleurs.</p>
<p>Pas simple hein&#8230; J&#8217;ai des pistes pour le trouver, mais vu qu&#8217;il faut attendre quelques jours à chaque fois, ça avance très lentement et c&#8217;est vraiment frustrant. Espérons qu&#8217;une de ces pistes m&#8217;aidera à éradiquer ce bug une bonne fois pour tout. Je vous tiendrai au courant !</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=gVzHEWE"><img src="http://feeds.feedburner.com/~f/acemtp?i=gVzHEWE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=wcA7Y4e"><img src="http://feeds.feedburner.com/~f/acemtp?i=wcA7Y4e" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=73</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=73</feedburner:origLink></item>
		<item>
		<title>Désactiver le user breakpoint sur le F12</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/122961529/</link>
		<comments>http://blog.ploki.info/?p=72#comments</comments>
		<pubDate>Thu, 07 Jun 2007 16:11:24 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Développement</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=72</guid>
		<description><![CDATA[Si vous développez avec Visual Studio C++, vous avez peut-être remarqué une fonctionnalité bien pratique, mais qui peut devenir très énervant quand on n&#8217;en veut pas ; c&#8217;est le comportement par défaut de la touche F12 sous le débogueur.
En effet, quand une application est lancée sous le débogueur et que vous appuyez sur la touche [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous développez avec Visual Studio C++, vous avez peut-être remarqué une fonctionnalité bien pratique, mais qui peut devenir très énervant quand on n&#8217;en veut pas ; c&#8217;est le comportement par défaut de la touche F12 sous le débogueur.</p>
<p>En effet, quand une application est lancée sous le débogueur et que vous appuyez sur la touche F12, ça déclenche automatiquement un point d&#8217;arrêt utilisateur (__asm int3). C&#8217;est pratique si on veut arrêter rapidement un programme mais quand on veut utiliser cette touche pour déclencher un comportement précis dans l&#8217;application, ça devient vite pénible de se retrouver avec le programme bloqué.</p>
<p>Alors oui, une méthode simple, me direz-vous, est de ne pas utiliser la touche F12, mais quand toutes les touches de fonctions sont déjà prises et bien on a pas le choix. De plus, cette touche est bien pratique, car c&#8217;est la dernière sur le pavé des touches de fonctions et donc elle est facile d&#8217;accès.</p>
<p>J&#8217;ai fait le tour sur le net et je me suis aperçu que ça n&#8217;avait rien à voir avec Visual Studio, mais que c&#8217;était un comportement intrinsèque à Windows !</p>
<p>La bonne nouvelle c&#8217;est qu&#8217;il est possible de changer la touche qui déclenchera le point d&#8217;arrêt utilisateur. Pas mal de sites web expliquent comment faire en mettant un lien sur une page de Microsoft qui n&#8217;est plus disponible, alors après des recherches plus approfondies, j&#8217;ai enfin trouvé :</p>
<p>Dans la base de registre, il y a le répertoire <code>HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug</code> qui contient 2 variables bien pratiques :</p>
<p><strong>Auto</strong>: Par défaut à 1, si on met cette clé à 0, alors le déboguer ne prendra pas la main si un programme plante. (<a href="http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/11499.mspx?mfr=true">plus d&#8217;info&#8230;</a>)</p>
<p><strong>UserDebuggerHotKey</strong>: Par défaut à 0, cette clé indique quelle touche déclenche le fameux point d&#8217;arrêt. 0&#215;0 correspond à la touche F12, et 0&#215;13 à la touche PAUSE qui, je trouve, est plus adaptée pour mettre le programme en pause. Pour la liste complète des touches disponibles et plus d&#8217;info, <a href="http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/11501.mspx?mfr=true">c&#8217;est là&#8230;</a></p>
<p>Ah, une dernière chose, comme vous pouvez peut-être vous en doutez, pour que la nouvelle touche soit prise en compte, il faut relancer&#8230; Windows&#8230; Bon reboot.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=I0xVLEE"><img src="http://feeds.feedburner.com/~f/acemtp?i=I0xVLEE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=nz9L3Qe"><img src="http://feeds.feedburner.com/~f/acemtp?i=nz9L3Qe" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=72</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=72</feedburner:origLink></item>
		<item>
		<title>Google Developer Day 07 Paris France</title>
		<link>http://feeds.feedburner.com/~r/acemtp/~3/121327618/</link>
		<comments>http://blog.ploki.info/?p=69#comments</comments>
		<pubDate>Fri, 01 Jun 2007 09:17:44 +0000</pubDate>
		<dc:creator>acemtp</dc:creator>
		
		<category>Web2.0</category>

		<guid isPermaLink="false">http://blog.ploki.info/?p=69</guid>
		<description><![CDATA[Un matin, alors que je lis mes flux RSS habituels, je tombe sur THE news &#8220;Google organise un Developer Day&#8221; et en plus c&#8217;est à Paris. Je fonce sur le site pour m&#8217;inscrire, je vois que l&#8217;annonce a été publiée dans la nuit, et là&#8230; c&#8217;est le drame, c&#8217;est complet, je m&#8217;inscris quand même à [...]]]></description>
			<content:encoded><![CDATA[<p>Un matin, alors que je lis mes flux RSS habituels, je tombe sur THE news &#8220;Google organise un <a href="http://code.google.com/events/developerday/">Developer Day</a>&#8221; et en plus c&#8217;est à <a href="http://googledeveloperday2007-fr.blogspot.com/">Paris</a>. Je fonce sur le site pour m&#8217;inscrire, je vois que l&#8217;annonce a été publiée dans la nuit, et là&#8230; c&#8217;est le drame, c&#8217;est complet, je m&#8217;inscris quand même à tout hasard sur la liste d&#8217;attente et retourne déçu à mes occupations. Mais une semaine avant l&#8217;event, coup de théâtre, je reçois un mail comme quoi il reste de la place, ni une ni deux, je réponds sur le champ et 30 minutes après, je reçois la confirmation !</p>
<p><a href="http://blog.ploki.info/?p=68">Je suis un fan</a> de Google (voir j&#8217;ai tendance à idolâtrer un peu trop cette boite) et je voulais absolument être à cette conférence, surtout par curiosité. Google n&#8217;a jamais rien fait comme les autres donc je m&#8217;attendais à des surprises, des goodies et à être étonné.</p>
<p>Le jour J, j&#8217;arrive 15mn avant l&#8217;ouverture, on entre dans la cour d&#8217;entrée avec les quelques autres participants déjà présents et le premier contact avec Google arrive aussi tôt ; &#8221; On n&#8217;est pas prêt, s&#8217;il vous plait, retournez <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070695983667766610">dehors dans la rue</a>, ne restez pas dans la cour &#8220;. Un peu en retard, Google nous fait finalement prendre notre badge et entrer. On se retrouve avec un stylo, un bloc note et un super pin&#8217;s clignotant Google. Sur le coup, je suis un peu déçu niveau goodies, je m&#8217;attendais à quelque chose de plus original, mais bon, je ne suis pas venu pour ça. La salle est vraiment sympa, décorée à la Google, avec de belles lumières, des <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070677339214733586">chaises de toutes les couleurs</a>, des coins &#8221; lounge &#8221; avec des gros fauteuils, un coin jeu avec babyfoot et bornes d&#8217;arcade, bien sur un coin bar avec plein de boissons et des plateaux remplis de bonne <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070804607685667938">nourriture grasse</a> (brownies, cookies, gâteaux) mais aussi de fraises (super bonnes). Comme j&#8217;ai une heure à attendre avant le lancement de la conférence, j&#8217;ai le temps de faire le tour et de tester un peu tout.</p>
<p>Google Developper Day a lieu la même journée un peu partout dans le monde, certains pays comme l&#8217;Australie ou les pays asiatiques sont donc déjà en plein milieu de la conférence. Les photos sur le site montrent qu&#8217;il y a parfois beaucoup de monde. A Paris, il n&#8217;y a &#8221; que &#8221; 200 personnes et c&#8217;était vraiment très bien comme ça. Ça permet de garder une certaine ambiance familiale très agréable. Ce qui était original, c&#8217;est de pouvoir regarder au fur et à mesure du déroulement de la conférence les photos dans les autres pays. A Paris aussi, on se fait <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070726834417861058">prendre</a> <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070726761403416962">en</a> <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070743949862537682">photo</a> et 5mn plus tard, on la retrouve sur Internet.</p>
<p>Ce qui m&#8217;a vraiment frappé c&#8217;est la gentillesse et la disponibilité de tous les membres de Google. Peut-être est-ce dû au fait qu&#8217;il y a peu de monde, mais il est facile de discuter avec les Googlers.</p>
<p>Maintenant, parlons un peu des sessions. Les orateurs sont vraiment intéressants, on sent qu&#8217;ils sont vraiment motivés par ce qu&#8217;ils font et sont contents de partager leurs connaissances. Bien que je connaissais le thème des sessions avant la conférence, je suis resté un peu sur ma faim. J&#8217;aurais aimé une session sur les ingénieurs de Google, les techniques de travail, leurs pratiques, leurs méthodes de management. Bref un retour sur comment ils travaillent plutôt qu&#8217;uniquement des sessions techniques sur les API de Google et comment coder en utilisant les produits Google.</p>
<p>J&#8217;attendais aussi avec beaucoup d&#8217;impatience le keynote fait en temps réel avec Mountain View et là&#8230; rien. Ils ont bien parlé de <a href="http://code.google.com/apis/gears/">Google Gears</a> qui a un potentiel énorme, mais j&#8217;étais déjà au courant de ce produit depuis 24 heures&#8230; (Peut-être une fuite ?). Autre déception d&#8217;un autre genre ; les points d&#8217;accès Wifi à Internet. Bien que le signal soit bon, on se fait déconnecter régulièrement, c&#8217;est très frustrant. Le manque de prises de courant est aussi très gênant.</p>
<p>Entre les sessions, il y a du temps pour les discussions et le networking. Pour ce faire, j&#8217;ai, comme à mon habitude, enfilé mes t-shirts publicitaires favoris <img src='http://blog.ploki.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  La première partie, j&#8217;étais en polo Nevrax et en deuxième avec un t-shirt <a href="http://www.xpday.fr">XP Day</a>. Le résultat est toujours sympa, car ça donne aux gens la possibilité de m&#8217;aborder avec un sujet &#8220;ah tiens tu as travaillé à Nevrax ?&#8221;, &#8220;Ah tiens tu étais à la conférence&#8230;&#8221; et ne connaissant personne au début de la conférence, j&#8217;ai pu rencontrer des gens fort sympathiques.</p>
<p>La journée s&#8217;est donc très bien passée et c&#8217;était une conférence vraiment à la hauteur de mes espérances. Il ne manquait plus que le petit truc, la touche Google, qui les différencie si bien des autres. Et ça s&#8217;est produit à la fin quand ils nous ont invités à repartir avec un petit sac contenant le t-shirt Google, mais aussi un <a href="http://www.picooz.fr/index.php?Modeles">hélico d&#8217;appartement</a> ! Il y a une semaine je regardais justement ce genre de gadget pour mon anniversaire et Google à dû lire dans mes pensées, encore mieux que le père Noël, même pas besoin de lui écrire une liste <img src='http://blog.ploki.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Je ne l&#8217;ai pas encore essayé, mais je crois que Google a visé juste niveau &#8220;jouet pour les geeks&#8221;. J&#8217;attends de voir qui osera mettre en vente son hélico estampillé Google sur eBay et voir à combien pourra monter les enchères <img src='http://blog.ploki.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://blog.ploki.info/wp-content/uploads/picooz.jpg" alt="picooz" /></p>
<p><img src="http://blog.ploki.info/wp-content/uploads/googledies.jpg" alt="googledies" /></p>
<p>Bravo à <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070803289130706802">Sabine</a> et à <a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayParisFrance/photo#5070804487426583522">toute l&#8217;équipe</a> pour cette organisation et Vivement l&#8217;année prochaine !
</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/acemtp?a=fT9lonE"><img src="http://feeds.feedburner.com/~f/acemtp?i=fT9lonE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/acemtp?a=20xme2e"><img src="http://feeds.feedburner.com/~f/acemtp?i=20xme2e" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.ploki.info/?feed=rss2&amp;p=69</wfw:commentRss>
		<feedburner:origLink>http://blog.ploki.info/?p=69</feedburner:origLink></item>
	<feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=acemtp</feedburner:awareness></channel>
</rss>
