<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Architecture logicielle et sociale</title>
	<atom:link href="http://christianrondeau.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://christianrondeau.wordpress.com</link>
	<description>Réflexions sur le développement logiciel dans un contexte humain</description>
	<lastBuildDate>Sat, 23 Dec 2006 00:10:54 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='christianrondeau.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/b5454757ff52cf41b1d3c2ccd6673909?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Architecture logicielle et sociale</title>
		<link>http://christianrondeau.wordpress.com</link>
	</image>
			<item>
		<title>Acquisition de christianrondeau.net!</title>
		<link>http://christianrondeau.wordpress.com/2006/12/13/acquisition-de-christianrondeaunet/</link>
		<comments>http://christianrondeau.wordpress.com/2006/12/13/acquisition-de-christianrondeaunet/#comments</comments>
		<pubDate>Thu, 14 Dec 2006 02:40:30 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>
		<category><![CDATA[Affiliations]]></category>
		<category><![CDATA[Architecture Logicielle]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Livres]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/12/13/acquisition-de-christianrondeaunet/</guid>
		<description><![CDATA[Après de bons et loyaux services avec wordpress.com, je lève mon chapeau et déménage, un peu comme d&#8217;un appartement à une maison! La nouvelle addresse de mon blogue, la seule à être tenue à jour, sera la suivante: http://blog.christianrondeau.net. Cette acquisition me permettra de rendre disponible des exemples de code, des outils gratuits et toute [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=20&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Après de bons et loyaux services avec wordpress.com, je lève mon chapeau et déménage, un peu comme d&#8217;un appartement à une maison! La nouvelle addresse de mon blogue, la seule à être tenue à jour, sera la suivante: <a href="http://blog.christianrondeau.net" title="Architecture logicielle et sociale">http://blog.christianrondeau.net</a>. Cette acquisition me permettra de rendre disponible des exemples de code, des outils gratuits et toute un éventail d&#8217;opportunités! S&#8217;il vous plaît, mettez à jour vos favoris, et continuez à me rendre visite dans mon nouveau &#8220;chez moi&#8221;!</p>
<p><a href="http://blog.christianrondeau.net" title="Architecture logicielle et sociale">Cliquez ici pour être redirigé vers christianrondeau.net</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=20&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/12/13/acquisition-de-christianrondeaunet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Facilitez-vous la vie, fabriquez vos outils!</title>
		<link>http://christianrondeau.wordpress.com/2006/10/25/facilitez-vous-la-vie-fabriquez-vos-outils/</link>
		<comments>http://christianrondeau.wordpress.com/2006/10/25/facilitez-vous-la-vie-fabriquez-vos-outils/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 16:30:36 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>
		<category><![CDATA[Architecture Logicielle]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/10/25/facilitez-vous-la-vie-fabriquez-vos-outils/</guid>
		<description><![CDATA[Combien de fois par jour répétez-vous les mêmes actions? Copier des fichiers, vous authentifier chaque fois que vous compilez, effacer des fichiers temporaires, copier-coller des valeurs&#8230; probablement plus souvent que vous ne le croyez. Plus souvent on recommence une même activité, plus elle devient naturelle, automatique, et moins on se rend compte du temps qu&#8217;on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=18&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Combien de fois par jour répétez-vous les mêmes actions? Copier des fichiers, vous authentifier chaque fois que vous compilez, effacer des fichiers temporaires, copier-coller des valeurs&#8230; probablement plus souvent que vous ne le croyez. Plus souvent on recommence une même activité, plus elle devient naturelle, automatique, et moins on se rend compte du temps qu&#8217;on passe à la faire. Résultat, votre temps &#8220;productif&#8221; est réduit, au profit d&#8217;actions démotivantes et répétitives. De plus, votre concentration est constamment compromise. Il existe pourtant un grand nombre d&#8217;outils prévus pour accélérer votre travail, prêts à être utilisés. Surtout, vous êtes en mesure de créer vos propres outils, plus adaptés que tout ce que vous pourriez trouver ailleurs. C&#8217;est une tâche plaisante et motivante qui optimisera votre temps, minimisera les perturbations et réduira les risques d&#8217;erreurs.</p>
<p><a href="http://http://blog.christianrondeau.net/index.php/facilitez-vous-la-vie-fabriquez-vos-outils/" title="Facilitez-vous la vie, fabriquez vos outils! sur christianrondeau.net">Lisez la suite de cet article sur notre nouveau site, christianrondeau.net</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=18&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/10/25/facilitez-vous-la-vie-fabriquez-vos-outils/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Sur la négociation: Getting to Yes</title>
		<link>http://christianrondeau.wordpress.com/2006/10/18/sur-la-negociation-getting-to-yes/</link>
		<comments>http://christianrondeau.wordpress.com/2006/10/18/sur-la-negociation-getting-to-yes/#comments</comments>
		<pubDate>Wed, 18 Oct 2006 19:03:37 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[Livres]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/10/18/sur-la-negociation-getting-to-yes/</guid>
		<description><![CDATA[Suite à une épuisante journée de travail, vous entrez chez vous, éreinté. Le simple grincement de la porte vous donne l&#8217;impression que quelques neurones de plus viennent de lâcher prise, et errent désormais librement dans la masse informe qui compose votre restant de cerveau. C&#8217;est en vous affalant sur votre délicieux divan qu&#8217;un autre groupe [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=15&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Suite à une épuisante journée de travail, vous entrez chez vous, éreinté. Le simple grincement de la porte vous donne l&#8217;impression que quelques neurones de plus viennent de lâcher prise, et errent désormais librement dans la masse informe qui compose votre restant de cerveau. C&#8217;est en vous affalant sur votre délicieux divan qu&#8217;un autre groupe d&#8217;employés de votre cortex décide de déserter suite à la cinglante sonnerie de votre téléphone:<br />
- Hey! C&#8217;est Untel! (quels parents grossiers appellent leur enfant comme ça?) Je voulais juste t&#8217;inviter à souper demain, je vais faire de la lasagne! Oh, et en passant, bon show!<br />
Le souvenir vous frappe comme une requête SQL passée en texte pur dans l&#8217;URL; vous avez un spectacle ce soir! Et l&#8217;artiste en représentation est justement le préféré d&#8217;Untel. Vous êtes mort de fatigue, et décidez donc de ne plus y aller, et de vendre vos billets.<br />
- Bah, dites-vous en soupirant, je suis complètement à terre. Veux-tu les billets?</p>
<p><a href="http://blog.christianrondeau.net/index.php/sur-la-negociation-getting-to-yes/" title="Sur la négociation: Getting to Yes sur christianrondeau.net">Lisez la suite de cet article sur notre nouveau domaine, christianrondeau.net</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=15&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/10/18/sur-la-negociation-getting-to-yes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Recommendations de lecture</title>
		<link>http://christianrondeau.wordpress.com/2006/10/02/recommendations-de-lecture/</link>
		<comments>http://christianrondeau.wordpress.com/2006/10/02/recommendations-de-lecture/#comments</comments>
		<pubDate>Mon, 02 Oct 2006 18:48:15 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>
		<category><![CDATA[Architecture Logicielle]]></category>
		<category><![CDATA[Livres]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/10/02/recommendations-de-lecture/</guid>
		<description><![CDATA[Dernièrement je me suis rendu compte que je lisais d&#8217;excellents livres, mais que je ne partageais pas mes découvertes. Empressé de briser cette image d&#8217;égoïsme qui me hante, me voici qui en partage quelques uns avec vous!
Lisez cet article sur christianrondeau.net
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=14&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Dernièrement je me suis rendu compte que je lisais d&#8217;excellents livres, mais que je ne partageais pas mes découvertes. Empressé de briser cette image d&#8217;égoïsme qui me hante, me voici qui en partage quelques uns avec vous!</p>
<p><a href="http://blog.christianrondeau.net/index.php/recommendations-de-lecture/" title="Recommendations de lecture sur christianrondeau.net">Lisez cet article sur christianrondeau.net</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=14&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/10/02/recommendations-de-lecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Pourquoi on se satisfait de la première réponse venue?</title>
		<link>http://christianrondeau.wordpress.com/2006/09/21/pourquoi-on-se-satisfait-de-la-premiere-reponse-venue/</link>
		<comments>http://christianrondeau.wordpress.com/2006/09/21/pourquoi-on-se-satisfait-de-la-premiere-reponse-venue/#comments</comments>
		<pubDate>Thu, 21 Sep 2006 18:42:59 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[Architecture Logicielle]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/09/21/pourquoi-on-se-satisfait-de-la-premiere-reponse-venue/</guid>
		<description><![CDATA[Il y a de cela quelques mois, je naviguais sur un petit site Flash qui se vantait de pouvoir deviner mes pensées. Assoiffé de mystères à élucider, me voilà qui pense à un nombre, suis les instructions et surprise! Le symbole associé au nombre auquel j&#8217;ai pensé est affiché, auréolé d&#8217;étoiles.
Lisez cet article sur christianrondeau.net
Première [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=13&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Il y a de cela quelques mois, je naviguais sur un petit site Flash qui se vantait de pouvoir deviner mes pensées. Assoiffé de mystères à élucider, me voilà qui pense à un nombre, suis les instructions et surprise! Le symbole associé au nombre auquel j&#8217;ai pensé est affiché, auréolé d&#8217;étoiles.</p>
<p><a href="http://blog.christianrondeau.net/index.php/pourquoi-on-se-satisfait-de-la-premiere-reponse-venue/" title="Pourquoi on se satisfait de la première réponse venue? sur christianrondeau.net">Lisez cet article sur christianrondeau.net</a></p>
<p><span id="more-13"></span>Première pensée: Ils devinent avec les mouvements des comportements de ma souris.<br />
Mais je continue à réfléchir, et après quelques microsecondes je ris de moi-même. Je recommence donc l&#8217;exercice, sans bouger la souris, et comme je m&#8217;y attendais ça fonctionne quand même.</p>
<p>Le truc est simple; il fallait choisir un chiffre entre zéro et cent. Une table à droite montrait des symboles à côté de chaque nombre. Il fallait additionner les deux chiffres du nombre, et soustraire ce résultat au nombre choisi. Par exemple, si on prend 75: 7+5=12, 75-12=63. Mais reprenons le calcul avec un autre chiffre, 72: 7+2=9, 72-9=63. Ah ha! On se rend compte que peu importe le chiffre qu&#8217;on choisit, ce sont toujours les mêmes quelques résultats qui reviennent. Il s&#8217;agit simplement de mettre le tout en forme, en mettant des symboles différents à chaque fois, tant que les mêmes nombres (63, 72, 81…) donnés aient le même symbole.</p>
<p>Après avoir envoyé ce petit truc à quelques amis, j&#8217;ai été étonné du retour. Première réponse que je reçois par messagerie instantanée: &#8220;Facile, ça détecte le mouvement de la souris.&#8221;</p>
<p>Ces gens savaient pertinemment que ce n&#8217;était pas le cas. Et s&#8217;ils doutaient, valider leurs doutes ne leur aurait pris qu&#8217;une seconde. Mais ce n&#8217;est pas ce qu&#8217;ils ont fait. Alors me voilà qui réfléchis. Pourquoi ce comportement? Il ne s&#8217;agit pas que de paresse. Il s&#8217;agit de comment nous traitons les acquis.</p>
<p>J&#8217;ai mes théories. Chaque jour des centaines de faits viennent à notre attention. Nous ne doutons pas de la justesse de notre perception de ceux-ci à chaque fois, c&#8217;est un comportement qui me semble tout à fait normal… lorsque nous n’avons pas à prendre une décision basée sur ces acquis. Si on fait le parallèle avec la programmation, combien de fois on appelle une méthode qu&#8217;on ne connaît pas en ne se basant que sur sa signature? Qu&#8217;on corrige un bogue avant même d&#8217;essayer de le reproduire? Un classique qui me hante personnellement est lorsqu&#8217;on m&#8217;explique quelque chose et qu&#8217;une conception logicielle se dessine dans ma tête. Lorsque des informations viennent la contredire, plutôt que de simplement l&#8217;ajouter à ma compréhension du problème, j&#8217;ajuste instinctivement ma première idée en conservant ses fondements. Éventuellement celle-ci n&#8217;est plus du tout adaptée au problème, mais je suis quand même convaincu qu&#8217;elle l&#8217;est.</p>
<p>Mais que faire? Peut-on se débarrasser de ce problème?</p>
<p>Je ne crois pas, non. Mais tout espoir n&#8217;est pas perdu! On peut certainement alléger les effets de ce réflexe naturel. Je ne suis pas psychologue, mais j&#8217;ai développé quelques trucs que vous pourrez mettre en pratique lorsque vous êtes dans une situation où une solution piétinne la problématique encore immature.</p>
<p><strong>Première étape, définir les moments où les préconceptions causent problème. </strong>Ils ont un point en commun; ils commencent par une écoute ou une lecture d’un problème, font fait germer des idées dans votre esprit pendant un échange qui dure aux moins quelques minutes et se terminent par une responsabilité partielle ou complète de votre part pour revenir avec une solution.</p>
<p><strong>Deuxième étape, identifier les préconceptions elles-mêmes. </strong>Si on y porte attention, c’est assez facile. Dès que vous avez une conception de la solution en tête avant que la problématique soit complète, vous prenez quelque chose pour acquis.</p>
<p><strong>Troisième étape, se débarrasser du fardeau de l&#8217;idée.</strong> J&#8217;ai personnellement une mauvaise tendance à croire qu&#8217;une bonne idée ne doit pas se perdre, mais pensez-y; si la description du problème a donné naissance à un concept, pourquoi prenons nous tout le mérite? Après tout, sans problèmes il n&#8217;y aurait pas de vos solutions géniales! Bref, ayez confiance en vos aptitudes et ne vous accrochez pas aux bonnes idées. Il est bon de les noter, mais oubliez les détails. Liez les toujours au problème qui vous a inspiré. Si vous n&#8217;arrivez toujours pas à vous débarrasser de l&#8217;idée, qu&#8217;elle pousse malgré vous, demandez à vos interlocuteurs de faire une pause. Prenez quelques secondes pour y penser, établissez ensuite les raisons pour lesquelles vous avez eu cette idée. Finalement, validez avec les autres personnes si votre raisonnement est bon. Ne divulguez pas l’idée elle-même, car la discussion aurait de fortes chances de tomber sur l&#8217;implémentation, et le but est justement d&#8217;éviter cette chute. Par exemple, prenez cette situation:</p>
<p><em>Jules, l&#8217;analyste principal du projet, présente à l&#8217;équipe de développement les spécifications du système.</em></p>
<p><em>- L&#8217;utilisateur pourra donc entrer un numéro, énonce Jules, qui correspondra au code du système ABC. Il est important que l&#8217;étiquette liée au code soit affichée lorsqu&#8217;il valide le code. Il pourra ensuite continuer à remplir le formulaire.</em></p>
<p><em>Marc, un des développeurs de l&#8217;équipe, perd immédiatement son attention. Il se rappelle d&#8217;un article qu&#8217;il a lu au sujet des plug-ins. Mais voilà une occasion en or d&#8217;implanter ses connaissances! Son raisonnement va comme suit : De cette manière, si on doit changer le système ABC, ou même ajouter d&#8217;autres codes, ça sera facile comme tout! Mais Marc ne se laisse pas avoir, et réfléchis aux raisons qu&#8217;il l&#8217;ont amené à cette conclusion. Premièrement, un système externe est en jeu. Celui-ci peut changer. Ensuite, il s&#8217;agit d&#8217;une question ordinaire dans un formulaire qui pourrait très bien contenir d&#8217;autres cas où les données requises sont reliées à une logique externe au formulaire lui-même. Il pose donc ces questions:</em></p>
<p><em>- J&#8217;aimerais avoir des précisions. Il s&#8217;agit d&#8217;une question ordinaire? Est-ce que le système ABC est sous le contrôle de notre client? Finalement, est-ce qu&#8217;on prévoit d&#8217;autres cas où on devra communiquer avec un autre système?</em></p>
<p>Les réponses de Jules pourraient être variées. Peut-être que le système ABC est en réalité la base de données que vous devrez utiliser. Peut-être qu&#8217;après avoir appris qu&#8217;il s&#8217;agit d&#8217;un webservice déjà implémenté chez le client, vous ferez simplement une question configurée pour appeler un webservice. Peut-être vous rendrez-vous compte que votre idée s’applique toujours, mais dans tous les cas vous aurez les informations nécessaires pour passer à autre chose.</p>
<p><strong>Quatrième étape, prendre du recul. </strong>Revenez de temps à autres sur toutes les informations que vous avez et imaginez-vous repartir de zéro. Révisez vos informations dans le désordre. Contredisez-vous, et obligez-vous à accepter qu’une solution ne sera valide que lorsque vous aurez toute l&#8217;information en main.</p>
<p>Mais vous n’aurez jamais toute l’information en main. Bienvenue dans le paradoxe de la conception logicielle!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=13&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/09/21/pourquoi-on-se-satisfait-de-la-premiere-reponse-venue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Opinion sans originalité sur les exceptions</title>
		<link>http://christianrondeau.wordpress.com/2006/03/03/opinion-sans-originalite-sur-les-exceptions/</link>
		<comments>http://christianrondeau.wordpress.com/2006/03/03/opinion-sans-originalite-sur-les-exceptions/#comments</comments>
		<pubDate>Fri, 03 Mar 2006 18:49:10 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>
		<category><![CDATA[Architecture Logicielle]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/03/03/opinion-sans-originalite-sur-les-exceptions/</guid>
		<description><![CDATA[Cet article est en réalité un courriel répondant à une question sur les bonnes pratiques avec les exceptions. S&#8217;il peut être utile à quelqu&#8217;un, tant mieux!
Lisez cet article sur christianrondeau.net
Premièrement, l&#8217;Exception Management Application Block est surtout fait pour &#8220;réagir&#8221; et publier les exceptions à l&#8217;extérieur du contexte d&#8217;exécution du code. Il n&#8217;aide donc, selon moi, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=12&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Cet article est en réalité un courriel répondant à une question sur les bonnes pratiques avec les exceptions. S&#8217;il peut être utile à quelqu&#8217;un, tant mieux!</p>
<p><a href="http://blog.christianrondeau.net/index.php/opinion-sans-originalite-sur-les-exceptions/" title="Opinion sans originalité sur les exceptions sur christianrondeau.net">Lisez cet article sur christianrondeau.net</a></p>
<p><span id="more-12"></span>Premièrement, l&#8217;<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/ehab.asp">Exception Management Application Block</a> est surtout fait pour &#8220;réagir&#8221; et publier les exceptions à l&#8217;extérieur du contexte d&#8217;exécution du code. Il n&#8217;aide donc, selon moi, aucunement à la bonne gestion des erreur à <em>l&#8217;intérieur</em> du code.</p>
<p>Généralement on arrive devant un des cas suivants:</p>
<ul>
<li>L&#8217;exception est lancée dans un <strong>contexte transactionnel</strong>, dans quel cas le catch et le finally doivent s&#8217;assurer de faire le rollback, et laisser la classe appellante faire son rollback aussi. Dans ces cas là on ne veut pas gérer l&#8217;exception elle même, seulement s&#8217;assurer du bon fonctionnement du code.</li>
<li>L&#8217;exception est lancée à un niveau du <em>stack</em> directement causée par une <strong>action de l&#8217;utilisateur</strong> (par exemple, un paramètre invalide non vérifiable par des validateurs, ou une valeur invalide dans le querystring). Dans ces cas là, on peut simplement gérer l&#8217;erreur sur place (afficher une page disant que la page a reçu un paramètre invalide) ou, ma préférence personnelle, laisser l&#8217;erreur remonter jusqu&#8217;au handler principal (généralement le Main dans une application windows, ou le Global_asax.Application_Error dans les application web).</li>
<li>L&#8217;exception est <strong>récupérable</strong> (par exemple, le caching plante). Dans ces cas là (plutôt rares), simplement récupérer (et s&#8217;assurer qu&#8217;il n&#8217;est pas possible d&#8217;éviter qu&#8217;il y aie une exception en remplaçant le code fautif par une vérification des paramètres! Les exceptions ne devraient jamais faire partie intégrante d&#8217;un flow &#8220;valide&#8221; du code) et publier l&#8217;erreur.</li>
</ul>
<p>J&#8217;ai toujours créé un assemblage &#8220;partagé&#8221; contenant les exceptions, les fonctions de logging, etc. par le passé. Je créais toujours des exceptions héritées de <em>ApplicationException </em>(du genre <em>MyProjectException</em>), de laquelle toutes mes exceptions précises héritaient. Avec le temps j&#8217;ai réalisé que ça ne me servait strictement à rien. Tant que le message d&#8217;exception est clair, et qu&#8217;il n&#8217;y a pas de besoin de <em>catcher</em> un type précis, une <em>ApplicationException</em> ordinaire fait le travail.</p>
<p>Personnellement je ne suis pas un fanatique de l&#8217;<em>Application Block</em> de gestion d&#8217;exception. C&#8217;est pratique, mais généralement un simple logging au niveau le plus haut de l&#8217;architecture fait amplement le travail. (Ça veut pas dire de pas l&#8217;utiliser, seulement que je ne donnerais pas de points pour ça dans une architecture). Je ne fais des throws (incluant l&#8217;exception initiale) que lorsque de l&#8217;information supplémentaire est disponible, sinon je la laisse passer. Exemple:</p>
<p>public bool VerifyCompatibility( Computer c, Version v )<br />
{<br />
<font color="#ffffff">&#8211;</font>if( c == null )<br />
<font color="#ffffff">&#8212;-</font>throw new ApplicationException( &#8220;Computer parameter must not be null&#8221; );</p>
<p><font color="#ffffff">&#8211;</font>&#8230;<br />
}</p>
<p>public void RegisterComputer( int computerId )<br />
{<br />
<font color="#ffffff">&#8211;</font>try<br />
<font color="#ffffff">&#8211;</font>{<br />
<font color="#ffffff">&#8212;-</font>if( VerifyCompatibility(<br />
<font color="#ffffff">&#8212;&#8212;</font>ComputerRegistry.Computer[computerId],<br />
<font color="#ffffff">&#8212;&#8212;</font>Versions.CurrentVersion )<br />
<font color="#ffffff">&#8212;&#8212;</font>)<br />
<font color="#ffffff">&#8212;&#8212;</font>&#8230;<br />
<font color="#ffffff">&#8211;</font>}<br />
<font color="#ffffff">&#8211;</font>catch( Exception exc )<br />
<font color="#ffffff">&#8211;</font>{<br />
<font color="#ffffff">&#8212;-</font>throw new Exception( &#8220;Could not register computer &#8221; + computerId, exc );<br />
<font color="#ffffff">&#8211;</font>}<br />
}</p>
<p>Dans ce cas précédent, si on avait pas encapsulé l&#8217;exception, il aurait été très difficile de retracer le cas fautif. Tandis que maintenant on a les exceptions:</p>
<p>[Computer parameter must not be null]<br />
[Could not register computer 689]</p>
<p>L&#8217;information, ajoutée à l&#8217;URL, l&#8217;utilisateur en cours, les informations du navigateur client et le <em>stack trace</em> est suffisante pour reproduire l&#8217;erreur et la régler au niveau où il convient. Bref, les exceptions doivent être complémentaires, et servir à:</p>
<p>- Faire faillir le code le plus vite et facilement possible pour détecter les bogues tôt dans le développement<br />
- Avoir l&#8217;information la plus concise et complète possible pour reproduire les erreurs facilement.</p>
<p>En bref, les exceptions ne devraient servir à rien d&#8217;autre qu&#8217;à déboguer et logger. Si vous jugez pertinent de créer une exception spéciale qui contient plus d&#8217;information (comme le niveau de gravité de l&#8217;erreur ou un message à afficher au client), amusez vous, mais rappellez-vous que généralement on ne <em>log </em>et n&#8217;utilise que le message et le stack trace d&#8217;une exception.</p>
<p>Une chose importante: une exception ne doit en aucun cas être affichée à l&#8217;utilisateur, directement ou indirectement, ni servir à générer un message utilisateur. Si une exception représente un paramètre invalide (disons une lettre dans un <em>TextBox</em> qui devrait contenir un chiffre), c&#8217;est effectivement une erreur du programme, et non pas de l&#8217;utilisateur. Pourquoi? Une validation de l&#8217;entrée de l&#8217;utilisateur aurait dû avoir lieu. Par exemple, un achat avec un numéro de carte de crédit invalide qui lance une erreur est un problème majeur, car il y aurait dû y avoir un <em>ValidateCreditCardNumber</em> avant, ou la méthode pourrait retourner un <em>enum</em> du statut de la commande.</p>
<p>À vous de juger! Mon mentra est: léger et complet, et ne jamais laisser passer un &#8220;Object not set to an instance of an object&#8221;! Jamais!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=12&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/03/03/opinion-sans-originalite-sur-les-exceptions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Je speak C#</title>
		<link>http://christianrondeau.wordpress.com/2006/03/03/je-speak-c/</link>
		<comments>http://christianrondeau.wordpress.com/2006/03/03/je-speak-c/#comments</comments>
		<pubDate>Fri, 03 Mar 2006 18:47:18 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>
		<category><![CDATA[Architecture Logicielle]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/03/03/je-speak-c/</guid>
		<description><![CDATA[Une grande question, difficile à répondre; dans quelle langue doit-on déclarer ses variables, méthodes et classes? Dans quelle langue devrait-on écrire ses commentaires?La syntaxe
Premièrement, il faut noter que je suis un francophone aguerri, prêt à bondir pour défendre sa langue. Mais, car il y a un mais, un problème survient; lorsqu&#8217;on développe une application, on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=11&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Une grande question, difficile à répondre; dans quelle langue doit-on déclarer ses variables, méthodes et classes? Dans quelle langue devrait-on écrire ses commentaires?<strong>La syntaxe</strong></p>
<p>Premièrement, il faut noter que je suis un francophone aguerri, prêt à bondir pour défendre sa langue. Mais, car il y a un mais, un problème survient; lorsqu&#8217;on développe une application, on utilise un langage de programmation. Ce langage est en quelque sorte une langue à part, un sous-ensemble de l&#8217;anglais. Sa structure et ses mots correspondent à l&#8217;anglais. Quels sont les impacts? Une lecture naturelle.</p>
<p><a href="http://blog.christianrondeau.net/index.php/je-speak-c/" title="Je speak C# sur christianrondeau.net">Lisez cet article sur christianrondeau.net</a></p>
<p><span id="more-11"></span>Par exemple:</p>
<p><font face="courier new"><font size="2"><font color="#3333ff">if</font>( serverConnection.IsOpened )</font></font><br />
<font face="courier new" size="2">{</font><br />
<font face="courier new"><font size="2"><font color="#ffffff">&#8212;</font>Close( serverConnection );</font></font><br />
<font face="courier new" size="2">}</font></p>
<p>on peut facilement lire, vous me pardonnerez l&#8217;expression, en changeant notre mode lecture pour l&#8217;anglais. En effet, la lecture prend tout son sens:</p>
<p><em>If the server connection is opened, close the server connection.</em></p>
<p>Si on utilise la syntaxe francophone, on se retrouve avec:</p>
<p><em>Si la connection serveur est ouverte, fermer la connection serveur.</em></p>
<p><strong>La lecture</strong></p>
<p>Maintenant, prenons pour acquis que nous travaillons avec un <em>framework</em>. Celui-ci contient déjà son lot de phrases partielles (opérations) et de noms (types et propriétés). Le mélange est quelque fois dur à avaler:</p>
<p><font face="courier new"><font size="2"><font color="#3333ff">foreach</font>( Courriel courriel <font color="#3333ff">in</font> listeDeCourriels.ToArray( <font color="#3333ff">typeof</font>(Courriel) ) )</font></font><br />
<font face="courier new"><font size="2"><font color="#ffffff">&#8212;</font><font color="#000000"><font color="#3333ff">if</font>( courriel <font color="#3333ff">is</font> CourrielPerdu )</font></font></font><br />
<font face="courier new"><font size="2"><font color="#ffffff">&#8212;</font><font color="#ffffff">&#8212;</font>listeDeCourriels.Remove( courrielPerdu );</font></font></p>
<p><strong>Le glossaire</strong></p>
<p>On doit aussi prendre en compte les termes utilisés tout au long du projet. Prenez l&#8217;exemple suivant:</p>
<p><font color="#009900" face="courier new" size="2">//La connection à la base de données utilise la chaîne de connection de la composante de configuration native.</font><br />
<font face="courier new" size="2">SqlConnection conn = <font color="#3333ff">new</font> SqlConnection();</font><br />
<font face="courier new" size="2">conn.ConnectionString = ConfigurationSettings.AppSettings[CléChaineDeConfiguration];</font></p>
<p>Premièrement, il est clair que le cerveau n&#8217;associera pas instinctivement les termes à leur description. Il faut lire l&#8217;un, et traduire l&#8217;autre. Ceci ralentit substanciellement la lecture du code &#8211; quoique je n&#8217;ai aucune donnée pour appuyer mon point.. il me faudra acquérir une copie de <a href="http://www.ebookmall.com/ebook/69617-ebook.htm">Code Switching in Conversation, de Peter Auer</a>.</p>
<p>Ensuite, le développeur se retrouve avec une tâche supplémentaire: traduire le <em>framework</em>.</p>
<p>Et s&#8217;il veut hériter de <em>TextEditor </em>pour intégrer le HTML, comment devra-t-il l&#8217;appeller? HtmlEditor? EditeurHtml?</p>
<p><strong>Conclusion</strong></p>
<p>Le mélange de plusieurs langues cause de nombreux problèmes légers qui, je crois, peuvent être mitigés en utilisant un jargon unifié.</p>
<p>Je considère par contre qu&#8217;un jargon francophone doit être édifié, et qu&#8217;une discussion technique puisse se faire dans notre langue natale de manière naturelle et transparente.</p>
<p>Qu&#8217;en pensez-vous?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=11&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/03/03/je-speak-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Deux, c&#8217;est bien, mais un, c&#8217;est mieux!</title>
		<link>http://christianrondeau.wordpress.com/2006/03/03/deux-cest-bien-mais-un-cest-mieux/</link>
		<comments>http://christianrondeau.wordpress.com/2006/03/03/deux-cest-bien-mais-un-cest-mieux/#comments</comments>
		<pubDate>Fri, 03 Mar 2006 18:46:02 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[Architecture Logicielle]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/03/03/deux-cest-bien-mais-un-cest-mieux/</guid>
		<description><![CDATA[Un petit article sur un détail important mais qui, je crois, n&#8217;a pas été beaucoup discuté; le nombre d&#8217;appels sur des objets dans une ligne de code.
Prenons par exemple la ligne de code suivante, ou employe est un paramètre de méthode:
int assignements = employe.GetHoraire().GetAssigments(this.jourEnCours).Length;
Elle peut paraître exagérée pour certains, mais elle représente plusieurs cas que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=10&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Un petit article sur un détail important mais qui, je crois, n&#8217;a pas été beaucoup discuté; le nombre d&#8217;appels sur des objets dans une ligne de code.</p>
<p>Prenons par exemple la ligne de code suivante, ou employe est un paramètre de méthode:</p>
<p>int assignements = employe.GetHoraire().GetAssigments(this.jourEnCours).Length;</p>
<p>Elle peut paraître exagérée pour certains, mais elle représente plusieurs cas que j&#8217;ai vu et que j&#8217;ai fait. Beaucoup auront prévu le coup; en production l&#8217;erreur suivante est lancée:</p>
<p><em>Object reference not set to an instance of an object.</em></p>
<p><a href="http://blog.christianrondeau.net/index.php/deux-cest-bien-mais-un-cest-mieux/" title="Deux, c’est bien, mais un, c’est mieux! sur christianrondeau.net">Lisez cet article sur christianrondeau.net</a></p>
<p><span id="more-10"></span>*musique dramatique* béât devant son courriel d&#8217;erreur (car bien sûr le programmeur fautif s&#8217;est sagement envoyé le stack trace ainsi que le nom de l&#8217;utilisateur connecté, la page visualisée et la date). On a deux cas possible:</p>
<p><strong>1) Le code était en mode <em>Release</em></strong></p>
<p>Étendu sur une ligne ou sur huit, on a pas la ligne de code de toute façon, alors les bonnes pratiques font &#8220;ding&#8221;: toujours vérifier si les valeurs attendues sont nulles! Quoique ce n&#8217;est pas toujours facile lorsqu&#8217;on va chercher un sous-sous-sous-sous objet. Morale: éviter de traîner de trop grosses structures (pas toujours facile).</p>
<p><strong>2) Le code était en mode <em>Debug</em> (oublions que c&#8217;était en production)</strong></p>
<p>C&#8217;est la que cet article dit ce qu&#8217;il a à dire: on a la ligne de code (après tout on s&#8217;attend à avoir des bogues, sinon on ne serait pas en mode debug) et on est prêts à&#8230; oh non. On a aucune idée de la variable qui est nulle! On a plusieurs choix ici.</p>
<p>- De l&#8217;instrumentation manuelle (peut-être fastidieux!)<br />
- Des logiciels d&#8217;instrumentation automatique (tels qu&#8217;<a href="http://www.avicode.com/">AVIcode</a>, que je n&#8217;ai pas encore eu l&#8217;occasion d&#8217;essayer)<br />
- Vérifier les valeurs nulles au début (bonne pratique!)<br />
- Décomposer les appels complexes.</p>
<p>Ce dernier est une pratique simple et efficace. Pourquoi?</p>
<p>- Plus facile de faire &#8220;Next&#8221; en mode débug et suivre le monceau de code<br />
- On a immédiatement la ligne de code dans le stack trace, et on sait automatiquement quel objet était nul<br />
- Plus facilement lisible<br />
- Possibilité d&#8217;insérer des conditions ou des appels supplémentaires sans avoir à décomposer le code<br />
- On visualise plus facilement et rapidement les types auxquels on a affaire. Ça force aussi l&#8217;utilisation du &#8220;using&#8221;. De cette manière, on peut plus facilement voir quels sont les modules <em>réellements</em> impliqués dans une classe.<br />
- Le nombre de lignes de code est plus représentatif de l&#8217;application</p>
<p>Si on reprend l&#8217;exemple de tout à l&#8217;heure, on a:</p>
<p>Horaire h = employe.GetHoraire();<br />
Assignement[] as = h.GetAssignements(this.jourEnCours);<br />
int assignements = ((as==null)?0:as.Length);</p>
<p>Il devient aisé d&#8217;insérer les vérifications d&#8217;objets nuls à mesure, et le tout est plus lisible.</p>
<p>Les cons pouvant survenir sont surtout la performance (une référence est créée et conservée), quoique selon moi complètement transparente (à vérifier avec un profiler), et la longueur du code. Il s&#8217;agira ici de simplifier le code si on voir qu&#8217;on doit décomposer des monstres!</p>
<p>En bref, décomposer les appels imbriqués est selon moi une pratique simple, facile à faire et très efficace. Utilisez là!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=10&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/03/03/deux-cest-bien-mais-un-cest-mieux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>Un éditeur de code semi-graphique</title>
		<link>http://christianrondeau.wordpress.com/2006/03/03/un-editeur-de-code-semi-graphique/</link>
		<comments>http://christianrondeau.wordpress.com/2006/03/03/un-editeur-de-code-semi-graphique/#comments</comments>
		<pubDate>Fri, 03 Mar 2006 18:42:56 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[Architecture Logicielle]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/03/03/un-editeur-de-code-semi-graphique/</guid>
		<description><![CDATA[Dans la veine de Le code; un simple format de spécifications?, voici une idée qui pourrait peut-être devenir une jointure possible entre les avantages des modèles graphiques et les éditeurs déjà très avancés disponibles aujourd&#8217;hui. Elle éveillera peut-être quelques gens ayant travaillé avec Macromedia Flash.
Vérifions certains requis pour une solution applicable:

Le code doit rester flexible
On [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=9&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div>Dans la veine de <a href="http://sherlockdotnet.blogspot.com/2005/11/le-code-un-simple-format-de.html">Le code; un simple format de spécifications?</a>, voici une idée qui pourrait peut-être devenir une jointure possible entre les avantages des modèles graphiques et les éditeurs déjà très avancés disponibles aujourd&#8217;hui. Elle éveillera peut-être quelques gens ayant travaillé avec <a href="http://www.macromedia.com/software/flash/flashpro/">Macromedia Flash</a>.</p>
<p>Vérifions certains requis pour une solution applicable:</p>
<ul>
<li>Le code doit rester flexible</li>
<li>On doit pouvoir coder aussi rapidement qu&#8217;en mode textuel pur</li>
<li>On doit pouvoir accéder à des vues différentes en navigant et en contexte</li>
<li>Une application de collaboration et de développement devrait permettre de &#8220;voir&#8221; autant la documentation que le code d&#8217;une manière flexible et fortement typée</li>
</ul>
<p>Imagineons maintenant une page de code dans <a href="http://msdn.microsoft.com/vstudio/">Microsoft Visual Studio</a>. Considéront maintenant chacun des éléments imbriquables dans l&#8217;exemple suivant:</p>
<pre>1.public Person FindOwner( Car lostCar )
2.{
3.  ValidateCarOwnership( lostCar );
4.  Person owner = base.FindOwner( lostCar );
5.  if( owner != null )
6.    return owner;
7.  else
8.    return new UnknownOwner();
9.}</pre>
<p>Si on considère <em>base.FindOwner</em>, on sait qu&#8217;un appel est fait à la super classe. Celle-ci contient un algorithme et un contexte d&#8217;exécution lui aussi encapsulé. Dans ce cas précis, nous pouvons imaginer les choses suivantes:</p>
<ul>
<li>Ne voir que la hiérarchie des appels à l&#8217;intérieur de la méthode, dans un format de liste</li>
<li>Remplacer la ligne 4 par le code du parent (peut-être grisé)</li>
<li>Garder l&#8217;opération et remplacer la méthode par sa documentation</li>
<li>Remplacer la ligne 3 par l&#8217;opération et sa méthode imbriqués</li>
<li>&#8220;Écraser&#8221; la classe et son parent ensemble de manière à ne voir que l&#8217;implémentation finale pour faciliter la lecture</li>
</ul>
<p>Pour arriver à modeler la vue textuelle, il faudrait que chacun des éléments soit utilisable comme un objet visuel sur lequel un clic simple, par exemple, sélectionnerait l&#8217;élément (en plaçant bien sûr le curseur sous la souris dans le texte). Une double-clic ouvrirait l&#8217;élément dans son contexte (encore une fois, un code de couleur pourrait identifier les éléments liant les variables du corps de la méthode avec l&#8217;appellant). Un contrôle-clic quant à lui donnerait plein focus à l&#8217;élément sélectionné. Pour chaque élément sous la souris, de petits icônes pourraient être disponibles pour passer du code à la documentation, et de la documentation à une liste cliquable des relations.</p>
<p>D&#8217;un côté, une telle approche forcerait le développeur à mettre autant d&#8217;emphase à clarifier les relations entre les objets que les objets eux-même, ce qui en soi n&#8217;est pas une mauvaise chose. D&#8217;un autre, elle offrirait une manière plus &#8220;graphique&#8221; de travailler sur le code dans un environnement liant étroitement les documents d&#8217;analyse à l&#8217;implémentation. Finalement, cette approche permettrait de travailler sur un aspect du code en gardant une approche 100% orientée objet.</p>
<p>Un tel éditeur sera par contre un vrai défi à prototyper.</p></div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=9&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/03/03/un-editeur-de-code-semi-graphique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
		<item>
		<title>L&#8217;affichage des composites en ASP.NET</title>
		<link>http://christianrondeau.wordpress.com/2006/03/03/laffichage-des-composites-en-aspnet/</link>
		<comments>http://christianrondeau.wordpress.com/2006/03/03/laffichage-des-composites-en-aspnet/#comments</comments>
		<pubDate>Fri, 03 Mar 2006 18:38:56 +0000</pubDate>
		<dc:creator>Christian Rondeau</dc:creator>
				<category><![CDATA[.NET/C#]]></category>

		<guid isPermaLink="false">http://christianrondeau.wordpress.com/2006/03/03/laffichage-des-composites-en-aspnet/</guid>
		<description><![CDATA[Beaucoup de gens ont travaillé avec des composites. Ils s&#8217;avèrent en effet utiles pour déterminer des règles imbriquées, des catégories à plusieurs niveaux, des menus récursifs etc. Il est par contre difficile de les afficher en ASP.NET sans transformer le code en amas monstrueux de conditions. Voici donc l&#8217;approche qui, selon mon humble opinion, s&#8217;est [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=8&subd=christianrondeau&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Beaucoup de gens ont travaillé avec des composites. Ils s&#8217;avèrent en effet utiles pour déterminer des règles imbriquées, des catégories à plusieurs niveaux, des menus récursifs etc. Il est par contre difficile de les afficher en ASP.NET sans transformer le code en amas monstrueux de conditions. Voici donc l&#8217;approche qui, selon mon humble opinion, s&#8217;est avérée la plus simple et la plus facile à maintenir.</p>
<p><strong>1) Définir notre composite</strong></p>
<p>La première étape consiste à vérifier si le composite en est bien un. En effet, une erreur que je vois souvent est de considérer que l&#8217;extrémité du composite est nécessairement l&#8217;élément qui n&#8217;est plus une collection. Hors, dans plusieurs cas, la dernière collection contient d&#8217;autres types qui n&#8217;héritent pas du type abstrait, ou le font &#8220;de force&#8221;. Un exemple simple serait le cas suivant:</p>
<p>J&#8217;ai des boîtes de crayons, de différentes tailles. Ces boîtes, faites pour la revente, peuvent être empaquetés dans des boîtes pour les magasins, qui à leur tour peuvent être empaquetés pour le transport, et ainsi de suite. L&#8217;implémentation erronée dont je parle ressemblerait à ceci:</p>
<p><em>classe Boîte héritant de BoîteStratégie<br />
</em><em>  collection BoîtesImbriquées de type BoîteStratégie<br />
</em><br />
<em>classe Crayon héritant de BoîteStratégie</em></p>
<p>Le type Crayon ne partage aucune logique avec la boîte, pourtant beaucoup auront tendance à penser que le Crayon est l&#8217;extrémité de la structure, résultant en de grandes difficultés à filtrer les types à l&#8217;affichage. Une meilleure structure serait la suivante:</p>
<p><em>classe Boîte héritant de BoîteStratégie<br />
  collection BoîtesImbriquées de type BoîteStratégie</em></p>
<p><em>classe BoîteDeCrayons héritant de BoîteStratégie<br />
  collection Crayons de type Crayon</em></p>
<p>Le type Crayon ne partage aucune logique avec la boîte, pourtant beaucoup auront tendance à penser que le Crayon est l&#8217;extrémité de la structure, résultant en de grandes difficultés à filtrer les types à l&#8217;affichage. Une meilleure structure serait la suivante:</p>
<p><em>classe Boîte héritant de BoîteStratégie<br />
  collection BoîtesImbriquées de type BoîteStratégie</em></p>
<p><em>classe BoîteDeCrayons héritant de BoîteStratégie<br />
  collection Crayons de type Crayon</em></p>
<p>Dans le premier cas on aurait été obligé, dans le contrôle affichant une catégorie, de supporter tous les types d&#8217;éléments.</p>
<p>Dans le deuxième cas, on a un contrôle qui ne fait qu&#8217;afficher (encadrer) une catégorie, et le deuxième contrôle gère l&#8217;affichage d&#8217;une liste de crayons. On peut ainsi afficher une structure d&#8217;arbre contenant des couleurs sur l&#8217;horizontale sans complexifier la structure.</p>
<p><strong>2) Définir l&#8217;affichage désiré</strong></p>
<p>Il n&#8217;y a pas de &#8220;silver bullets&#8221;, Brooks a raison, et cela s&#8217;applique à tous les niveaux. Il existe beaucoup de méthodes pour afficher des composites, et certains affichages très complexes, ou non-standards, peuvent demander une approche complètement différente. Je ne présenterai ici la solution la plus commune selon moi.</p>
<p>Pour donner une idée des différents affichages possible, voici quelques exemples:</p>
<ol>
<li>Une liste &#8220;flattened&#8221; des items du composite</li>
<li>Une liste semblable à une table des matières</li>
<li>Un arbre semblable à la TOC d&#8217;une aide en ligne</li>
<li>Un arbre dont les nodes sont des titres et les feuilles sont des fiches</li>
<li>Un arbre chargé sur demande avec AJAX (librairie pour C#)<br />
etc.</li>
</ol>
<p>Pour la solution à la présentation 1, un simple repeater fait l&#8217;affaire, couplé à une méthode récursive comme un visiteur ajoutant chaque objet à une collection ordonnée.</p>
<p>La solution du 5 serait (mais là il ne s&#8217;agit que d&#8217;une opinion) mieux implémentée en contrôle pur qu&#8217;en UserControl.</p>
<p>Toutes les autres solution sont implantables avec la solution proposée.</p>
<p><strong>3) Implémenter les contrôles</strong></p>
<p>Nous aurons besoin d&#8217;un minimum de deux contrôles (qu&#8217;il faudra évidemment renommer selon le cas précis d&#8217;implémentation):</p>
<ul>
<li>Un UserControl pour afficher le composite (pour afficher Boîte). Nommons-le CompositeView.ascx et faisons-le hériter de IStrategyView.</li>
<li>Un UserControl pour afficher les extrémités (pour afficher BoîteDeCrayons). Nommons-le LeafView.ascx et faisons-le hériter de IStrategyView.</li>
<li>Une interface IStrategyView n&#8217;affichant qu&#8217;une propriété lecture/écriture. Nommons-la IStrategyView.DisplayedStrategy.</li>
<li>Plutôt que Boîte, Définissions les abstractions IStrategy représentant la classe abstraite dont hérite le composite, et Composite, assez auto-explicatif.</li>
</ul>
<p><strong>3.1) CompositeView.ascx</strong></p>
<p>Ce contrôle ne contiendra que le conteneur parent. Un cas typique serait l&#8217;étiquette du composite, une forme d&#8217;indentation visuelle et un Repeater contenant les enfants.</p>
<p><em>CategoryName</em></p>
<p><em>&lt;blockquote&gt;<br />
  &lt;asp:repeater<br />
    id=&#8221;ChildrenRepeater&#8221;<br />
    datasource=&#8221;&lt;%#((CategoryComposite)DisplayedCategory).Children%&gt;&#8221;<br />
    Runat=&#8221;server&#8221;<br />
    OnItemCreated=&#8221;ChildrenRepeater_ItemCreated&#8221;</em><em>&gt;<br />
    &lt;itemtemplate /&gt;<br />
  &lt;/asp:repeater&gt;</em><br />
<em> &lt;/blockquote&gt;</em></p>
<p>Le code de cet affichage de composite contiendra principalement une méthode chargeant le bon contrôle-enfant dynamiquement:</p>
<p><em>protected void ChildrenRepeater_ItemCreated(&#8230;)<br />
{<br />
  if(<br />
      e.Item.ItemType == ListItemType.Item ||</em><br />
<em>      e.Item.ItemType == ListItemType.AlternatingItem<br />
     )<br />
  {<br />
    Control ctl = LoadControl(<br />
      e.Item.DataItem.GetType().Name + &#8220;View.ascx&#8221;<br />
      );</em></p>
<p><em>    ((ICompositeView)ctl).DisplayedCategory<br />
      = (IStrategy)e.Item.DataItem;</em></p>
<p><em>    e.Item.Controls.Add(ctl);<br />
  }<br />
}</em> </p>
<p>Voilà, notre récursivité est prête. Il ne reste plus qu&#8217;à implémenter les feuilles.</p>
<p><strong>3.2) LeafView.ascx</strong></p>
<p>Ce contrôle est utilisable à toutes les saveurs. La seule restriction est d&#8217;implémenter l&#8217;interface IStrategyView et que le contrôle puisse s&#8217;intégrer au design du CompositeView.ascx. Un exemple relatif aux boîtes de crayon serait un Repeater qui afficherait une table à trois lignes dont la partie du haut et du bas seraient des images de mines et d&#8217;effaces de crayon, tandis que le centre serait rempli avec la couleur de <em>Crayon.Couleur</em>. Le Repeater itérerait en créant des colonnes pour chaque crayon.</p>
<p><strong>Conclusion</strong></p>
<p>Cette approche est, jusqu&#8217;ici, le juste milieux entre des approches simples mais peu flexibles, et d&#8217;autres très complexes à maintenir. Elle permet aussi d&#8217;être modifiée pour afficher différents types de contrôles selon des conditions variées. Le design est centralisé et ne contient aucune condition d&#8217;affichage, le rendant simple à maintenir. Elle n&#8217;a rien d&#8217;extraordinaire, pourtant j&#8217;aurai vu et fait beaucoup d&#8217;implémentations très originales pour afficher des composites, pas toujours très efficaces je l&#8217;avoue.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/christianrondeau.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/christianrondeau.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/christianrondeau.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/christianrondeau.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/christianrondeau.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/christianrondeau.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/christianrondeau.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/christianrondeau.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/christianrondeau.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/christianrondeau.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/christianrondeau.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/christianrondeau.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=christianrondeau.wordpress.com&blog=139104&post=8&subd=christianrondeau&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://christianrondeau.wordpress.com/2006/03/03/laffichage-des-composites-en-aspnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0e6505c04f1610342d5b198e221caa62?s=96&#38;d=identicon" medium="image">
			<media:title type="html">christianrondeau</media:title>
		</media:content>
	</item>
	</channel>
</rss>