tag:blogger.com,1999:blog-87105397280612837022009-06-15T23:23:22.154-04:00Blog de David ThibaultDavid Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-8710539728061283702.post-68439247237801145582009-06-15T23:03:00.003-04:002009-06-15T23:21:35.485-04:00Où suis-je ???<p>
Woah, ça fait longtemps que je n'ai pas écrit sur mon blogue! Que suis-je devenu? Suis-je mort? Que se passe-t-il ???
</p><p>
Entre le travail, la vie personnelle et les loisirs, je dois avouer que je n'ai pas beaucoup de temps à consacrer à mon blogue. De plus, les choses sont plutôt lentes au travail dernièrement, ce qui fait que je n'ai pas énormément d'idées d'articles.
</p><p>
Vous courrez plus de chances d'avoir de mes nouvelles si vous me suivez sur <a href="http://twitter.com/leddt">Twitter</a>. Après tout, écrire un message de 140 caractères ou moins nécessite moins de temps que de penser à une phrase d'introduction pour un article sur mon blogue!
</p><p>
Je travail aussi, à temps perdu, sur une librairie .Net de validation, que j'ai nommée <a href="http://nvalid.net/">nValid</a>. Cette librairie a débutée comme un petit projet me permettant d'explorer les façons de créer des <a href="http://en.wikipedia.org/wiki/Fluent_interface"><em>interfaces fluides</em></a>, sujet très à la mode dernièrement en .NET. J'y ai pris intérêt, et j'ai décidé de poursuivre le développement et d'en faire un projet <em>open source</em>. Vous pourrez donc bientôt télécharger la librairie, et si ça vous intéresse, le <a href="http://code.google.com/p/nvalid/">code source</a>.
</p><p>
Bien entendu, une fois ce projet disponible à tous, ce sera un bon sujet de discussion, et quelques articles paraîtront sur ce blogue discutant de la librairie plus en détails.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-6843924723780114558?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-81866794349387237582008-09-17T20:16:00.004-04:002008-09-17T20:52:50.782-04:00StackOverflow<p><a href="http://www.codinghorror.com/">Jeff Atwood</a> et <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> ont récemment lancé une version beta publique de leur nouveau site, <a href="http://stackoverflow.com/">stackoverflow</a>. Ce site a un but bien simple: offrir un endroit où les programmeurs peuvent poser des questions à d'autres programmeurs. Tous les sujets touchant de près ou de loin à la programmation sont les bienvenus.</p>
<p>L'élément qui démarque le plus stackoverflow des autres sites du genre est sa facilité d'utilisation. En effet, vous pouvez utiliser le site sans même vous inscrire. Vous pouvez lire, poser et répondre à toutes les questions dès votre arrivée sur le site. Si vous décidez de vous inscrire, vous n'avez qu'à inscrire votre identifiant <a href="http://openid.net/">OpenID</a>, et en quelques secondes, le tour est joué. L'inscription donne accès au système de réputation et de badges.</p>
<p>Ces deux systèmes font de stackoverflow une expérience très... accrochant. La réputation est un score représentant votre niveau d'implication sur le site. Ce score augmente lorsque d'autres usagers votent pour vos questions et réponses. Plus votre réputation augmente, plus vous pouvez interagir avec le site. Avec un niveau de réputation suffisamment élevé, vous pouvez utiliser le site comme s'il s'agissait d'un <a href="http://fr.wikipedia.org/wiki/Wiki">Wiki</a>, et éditer les questions et réponses des autres utilisateurs.</p>
<p>Quant aux badges, il s'agit de marqueurs que vous obtenez en utilisant les différentes fonctionnalités du site. Certains sont faciles à obtenir, comme « premier vote positif » ou « remplir tous les champs de son profile », et d’autres sont plus difficiles, comme « votre réponse a reçu 100 votes positifs ».</p>
<p>C’est la combinaison de la réputation, des badges et de la facilité d’utilisation qui fait le succès de stackoverflow. En offrant des objectifs précis aux utilisateurs, les développeurs du site dirigent nos actions vers leurs objectifs. En donnant plus de pouvoirs à ceux qui ont fait leurs preuves, la tâche de modération du contenue devient moins lourde. Avec aucune barrière artificielle dans le chemin des nouveaux visiteurs, les questions et réponses arrivent en abondance.</p>
<p>La technologie derrière stackoverflow est <a href="http://www.asp.net/mvc/">ASP.NET MVC</a>, et il est très intéressant de voir un site d’envergure utiliser ce nouveau framework. Si vous désirez plus de détails au sujet du développement de leur site, écoutez le <a href="http://blog.stackoverflow.com/">podcast de Jeff et Joel</a>, qui offre des discussions très intéressantes sur plusieurs sujets.</p>
<p>Je vous suggère fortement de faire l’essai de <a href="http://stackoverflow.com/">stackoverflow</a>. Posez vos questions et vous verrez que les réponses ne tarderont pas!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-8186679434938723758?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-10606424990809572222008-07-09T15:48:00.008-04:002008-11-13T02:54:20.470-05:00Déménagé!<p>J'ai déménagé! Me voici maintenant propriétaire d'une belle maison à Charlesbourg. Le déménagement a très bien été, grâce à une dixaine d'amis et membres de ma famille qui nous ont aidé.</p>
<p>Nous sommes maintenant presque complètement installés, et nous pouvons enfin profiter de la tranquillité qu'apporte une maison qui nous appartiens.</p>
<p>Voici quelques photos que j'ai prises plus tôt cette semaine:</p>
<a href="http://4.bp.blogspot.com/_sENvCJ1yWSQ/SHUYSuDCF2I/AAAAAAAAAbw/YARUyZuw3c8/s1600-h/P1000395.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://4.bp.blogspot.com/_sENvCJ1yWSQ/SHUYSuDCF2I/AAAAAAAAAbw/YARUyZuw3c8/s200/P1000395.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106052883421026" /></a><a href="http://1.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTFGpm1I/AAAAAAAAAb4/ejWnEWPrpXc/s1600-h/P1000396.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://1.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTFGpm1I/AAAAAAAAAb4/ejWnEWPrpXc/s200/P1000396.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106059072609106" /></a><a href="http://3.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTTRWT2I/AAAAAAAAAcA/L_75LI8Gfcs/s1600-h/P1000397.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://3.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTTRWT2I/AAAAAAAAAcA/L_75LI8Gfcs/s200/P1000397.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106062875578210" /></a><a href="http://2.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTv28wyI/AAAAAAAAAcI/eJGCR9AoY-k/s1600-h/P1000398.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://2.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTv28wyI/AAAAAAAAAcI/eJGCR9AoY-k/s200/P1000398.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106070549480226" /></a><a href="http://4.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTyE176I/AAAAAAAAAcQ/t9TdU7vwlzg/s1600-h/P1000399.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://4.bp.blogspot.com/_sENvCJ1yWSQ/SHUYTyE176I/AAAAAAAAAcQ/t9TdU7vwlzg/s200/P1000399.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106071144624034" /></a><a href="http://1.bp.blogspot.com/_sENvCJ1yWSQ/SHUYcRKATdI/AAAAAAAAAcY/dCDlKt8y6M8/s1600-h/P1000400.JPG"><img style="cursor:pointer; cursor:hand; float:left; margin:3px;" src="http://1.bp.blogspot.com/_sENvCJ1yWSQ/SHUYcRKATdI/AAAAAAAAAcY/dCDlKt8y6M8/s200/P1000400.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5221106216926727634" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-1060642499080957222?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com1tag:blogger.com,1999:blog-8710539728061283702.post-86578757107583745902008-05-07T16:13:00.006-04:002008-05-08T10:13:19.326-04:00Est-ce que la culture devrait apparaître dans l'URL ?<p>Récemment j'ai assisté à une conférence sur <a href="http://asp.net/mvc"><abbr title="ASP.NET Model-View-Controller">ASP.NET MVC</abbr></a> donnée par <a href="http://hansleman.com">Scott Hansleman</a> dans le cadre d'un événement de la <a href="http://www.cunq.org/"><abbr title="Communauté des Usagers .Net de Québec">CUNQ</abbr></a>. Pendant sa présentation, Scott a mentionné la globalisation d'applications, et son opinion sur le sujet.</p>
<p>Selon lui, la culture (en-US, fr-CA, etc.) n'a rien à faire dans l'URL. L'application devrait se fier exclusivement sur les paramètres du navigateur. Il va même jusqu'à dire que dans la majorité des cas, il est inutile d'offrir aux visiteurs l'option de sélectionner leur langue préférée (par exemple avec des petits drapeaux représentant les différentes cultures disponibles).</p>
<p>Je n'ai pu m'empêcher d'intervenir. Selon moi, pour certains usagers, la possibilité de changer la langue active sur un site est très utile. Il serait fâchant pour les usagers de devoir modifier la configuration de leur navigateur chaque fois qu'ils désirent changer la langue d'un site.</p>
<p>Scott répond à cela que la proportion d'usagers susceptibles de vouloir ce type de fonctionnalité est si petite qu'elle ne justifie pas d'encombrer l'interface, ni même l'URL.</p>
<p>D'une part, je comprends son point. Pourquoi rendre l'URL moins "amicale" pour un paramètre de la sorte? Toutefois, j'utilise moi même ce type de fonctionnalité assez fréquemment, et je connais plusieurs personnes qui pensent comme moi. Il est parfois aussi pratique de pouvoir changer la langue du site simplement en modifiant "fr" pour "en" dans l'url, ou encore d'avoir la possibilité de faire un lien direct à une page dans une langue précise.</p>
<p>Je crois qu'un compromis est possible. La partie de l'URL déterminant la langue devrait être optionnelle. Si elle est spécifiée, le site utilise cette langue, autrement, il se fie sur les paramètres du navigateur.</p>
<p>Je vais probablement créer un petit exemple d'une façon de faire cela avec ASP.NET MVC. Ce sera une bonne façon de voir par la même occasion s'il est simple de concevoir des sites multilingues avec ce framework. En attendant, qu'en pensez-vous? Quelle est votre opinion là dessus?</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-8657875710758374590?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-64255402162301013092008-04-01T20:42:00.013-04:002008-04-03T15:21:37.433-04:00Nearly Free Speech<p>Depuis sa mise en ligne, <a href="http://www.leddt.com/">mon site</a> était hébergé sur mon ordinateur personnel, chez moi. C'était loin d'être idéal!</p>
<p>Premièrement il y a la question évidente de la disponibilité: si mon ordinateur est fermé, ou si ma connexion Internet fait défaut, le site n'est pas accessible. Pas très intéressant...</p>
<p>Ensuite, mon fournisseur de services Internet est <em>Vidéotron</em>, et ils ont la fâcheuse particularité de bloquer le port 80. Donc, pour héberger mon site chez moi, j'ai du avoir recours à un <em>hack</em>: J'ai configuré <em>IIS</em> pour écouter sur le port 81 au lieu de 80, et lorsqu'une requête arrivait à <code>www.leddt.com</code>, j'effectuais une redirection, grâce à <a href="http://www.everydns.net/"><em>EveryDNS.net</em></a>, vers <code>home.leddt.com:81</code>. Encore une fois, il ne s'agit pas de la meilleure approche.</p>
<p>Malgré tous ces problèmes, m'occuper moi même de l'hébergement avait un avantage très important: le prix. Effectivement, ça ne me coûtait absolument rien pour héberger le site chez moi. Je ne voulais pas être pris avec des factures mensuelles pour un site qui ne reçoit pratiquement pas de trafic.</p>
<a href="https://www.nearlyfreespeech.net"><img style="FLOAT: right; MARGIN: 0px 0px 3px 10px; CURSOR: hand" alt="NearlyFreeSpeech.Net" src="https://www.nearlyfreespeech.net/images/logo.gif" border="0" /></a>
<p>Aujourd'hui j'ai fait le grand saut, et j'ai transférer l'hébergement de leddt.com vers <a href="http://www.nearlyfreespeech.net/"><em>NearlyFreeSpeech.Net</em></a>. Leur politique de prix correspond parfaitement à mes besoins: je paie pour ce que j'utilise, et pas un sous de plus.</p>
<p>Les prix pour la bande passante commencent à 1$ pour 1 Go, et vont en diminuant selon l'utilisation. L'espace disque est 0.01$ par Mo par mois. Vous pouvez avoir une base de données <em>MySQL</em> pour 0.01$ par jour. Mon site, pour le moment, totalise environ 500 Ko, n'utilise pas de base de données et ne reçoit presque pas de trafic, moins de 100 Mo par mois. Cette utilisation me coûtera donc moins de 0.10$ par mois.</p>
<p><strong>10 sous</strong>... J'ai déposé 10$ dans mon compte sur <em><abbr title="NearlyFreeSpeech.Net">NFSN</abbr></em>, et ça devrait me suffire pour quelques années, si mon utilisation reste sensiblement la même. À ce prix, à quoi bon s'en passer?</p>
<p><em>NFSN</em> offre aussi gratuitement le service de <em>DNS</em>. Ce service est complet et n'a pas de limite, le rendant encore plus intéressant que <em>EveryDNS</em>. Il n'est pas possible de l'utiliser pour gérer une adresse IP dynamique, comme avec <em><abbr title="EveryDNS">eDNS</abbr></em>, mais un simple <em>CNAME</em> pointant sur mon compte <a href="http://www.dyndns.org/"><em>dyndns</em></a> fait très bien l'affaire.</p>
<p>Le seul "problème", c'est qu'ils n'offrent pas l'hébergement .Net. C'est compréhensible puisque leurs serveurs sont évidement sous linux. En tant que développeur spécialisé en .Net, c'est dommage, mais pour le moment je n'en ai pas besoin. Mais si un jour j'ai une application asp.net à héberger, je devrai trouver une autre solution.</p>
<p>À part de cela, je n'ai eu aucune difficulté à utiliser ce service jusqu'à maintenant. Les serveurs sont rapides, l'interface d'administration est simple et la documentation est bien écrite. Si vous cherchez de l'hébergement abordable, je ne peux que vous conseiller <a href="http://www.nearlyfreespeech.net/"><em>NearlyFreeSpeech.Net</em></a>.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-6425540216230101309?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-73109901834583662132007-11-15T12:43:00.000-05:002007-11-15T13:34:31.573-05:00Écrire des tests unitaires pour une application ASP.NET<p>
S'il y a une méthodologie de développement qui a gagné beaucoup de popularité ces dernières années, c'est l'écriture de <a href="http://en.wikipedia.org/wiki/Unit_testing">tests unitaires</a>.
</p><p>
De bons tests unitaires sont indispensables puisqu'ils offrent un filet de sureté dans le cadre de la maintenance d'applications. Si votre <a href="http://en.wikipedia.org/wiki/Code_coverage">couverture de code</a> est suffisante, et que vos tests sont correctement conçus, vous pourrez faire des modifications au code sans avoir peur de briser d'autres fonctionnalités par la même occasion.
</p><p>
Il existe de nombreux Framework de tests unitaires pour .NET, tel <a href="http://www.nunit.com/index.php"><em>NUnit</em></a>, <a href="http://www.codeplex.com/xunit"><em>xUnit</em></a> ou <a href="http://msdn2.microsoft.com/en-us/library/ms243147(VS.80).aspx"><em>MSTest</em></a>. Chacun ont leurs forces et faiblesses, mais une lacune commune à travers ces différents outils est la difficulté de tester des applications ASP.NET.
</p><p>
Le principal problème pour ce genre de test est l'absence du <code>HttpContext</code> dans le cadre d'un test unitaire. Admettons que vous avez créé des classes pour écrire et lire des valeurs dans la session d'un usager, comment tester cela si <code>HttpContext.Current</code> est <code>null</code> lors des tests?
</p><p>
J'ai rencontré ce problème pour le projet sur lequel je travail présentement. Après quelques essais infructueux à créer moi même une instance de <code>HttpContext</code>, j'ai trouvé une solution simple et élégante. <a href="http://haacked.com/archive/2007/06/19/unit-tests-web-code-without-a-web-server-using-httpsimulator.aspx"><em>HttpSimulator</em></a>, par <a href="http://haacked.com/">Phil Haack</a>, est une composante très bien faite qui permet de simuler l'état d'une application pendant une requête ASP.NET.
</p><p>
Son usage est extrêmement simple :
</p>
<pre class="c-sharp" name="code">
// Cet exemple utilise MSTest
[TestMethod]
public void SetAndRetreiveBasketID()
{
string expected = "Sample value";
string actual;
using (new HttpSimulator().SimulateRequest())
{
SessionHelper.BasketID = expected;
actual = SessionHelper.BasketID;
}
Assert.AreEqual(expected, actual);
}
</pre>
<p>
Bref, tout le code situé à l'intérieur du <code>using</code> peut utiliser <code>HttpContext.Current</code>. Il est aussi possible de définir des paramètres afin de spécifier une URL particulière, ou encore pour simuler le <em>POST</em> d'un formulaire.
</p><p>
Malheureusement, certaines propriétés du <code>HttpContext</code> demeurent <code>null</code> même en utilisant <em>HttpSimulator</em>, et donc il se peut que vous ne puissiez pas tester toutes les fonctionnalités. Dans certains cas, il est possible de modifier légèrement <em>HttpSimulator</em> pour inclure ce dont vous avez besoin, mais dans d'autres cas, ça peut être plus compliqué.
</p><p>
Malgré tout, ce simulateur devrait vous aider à tester une bonne partie de votre code. Notez que cet outil n'est pas conçu pour tester vos pages ASPX. Il sert à tester le code qui a besoin d'un <code>HttpContext</code> pour fonctionner. Pour tester vos pages, il existe d'<a href="http://nunitasp.sourceforge.net/">autres outils</a>.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-7310990183458366213?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-5385365459000391862007-11-12T20:14:00.000-05:002007-11-12T20:26:53.355-05:00Petite mise à jour<p>
J'ai été plutôt silencieux ces dernières semaines. La raison est que je suis débordé dernièrement.
</p><p>
J'ai déménagé, ce qui a demandé beaucoup de mon temps. L'appartement commence enfin à avoir l'air d'un endroit habitable!
</p><p>
Quelque chose est arrivé qui m'a beaucoup fâché: 2 jours après avoir emménagé, je me suis fait voler >:(. Ils ont pris mon ordinateur portable, des DVD, bijoux... Au total pour près de 3000$. Donc en plus d'être très occupé à remettre de l'ordre dans nos affaires, nous avons du nous occuper de remplir un rapport de police et de faire une réclamation à nos assurances. Au moins, il y a maintenant toujours quelqu'un à l'appartement d'en dessous, donc ce genre de chose ne devrait plus se produire.
</p><p>
Je suis également beaucoup occupé par mon travail. Ces temps-ci, je passe mes journées à corriger des bugs ou à écrire des tests unitaires. Il ne s'agit pas du travail le plus passionnant qui soit, et donc quand je termine ma journée, j'essais de me changer les idées et j'évite mon ordinateur!
</p><p>
Malgré tout, je vais essayer d'écrire un peu plus fréquemment. Attendez-vous à un autre article d'ici quelques jours.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-538536545900039186?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-39159568389418687652007-10-23T21:56:00.001-04:002008-05-13T08:58:49.779-04:00Parallel Framework Extensions<p>
De plus en plus de personnes sont maintenant équipées de processeurs <em>Dual Core</em>. Les <em>Quad Core</em> commencent aussi à gagner de la popularité, et même les processeurs à huit coeurs (<em>Octo Core</em> ?) deviennent réalité. Il est très facile d'imaginer un processeur seize coeurs dans chaque nouvel ordinateur d'ici seulement quelques années.
</p><p>
Tout ceci est bien beau, mais pour prendre avantage de toute cette puissance, il faut que les applications soient programmées pour utiliser plusieurs <em>threads</em>. Ceci peut devenir très compliqué avec les techniques actuelles, et représente parfois trop de travail pour justifier les résultats. Mais lorsque les processeurs à multiples coeurs deviendront chose du commun, ces résultats seront de plus en plus impressionnants.
</p><p>
Afin de diminuer la complexité de la programmation <em>multi-thread</em>, et ainsi favoriser le développement de ce type d'applications, Microsoft travail sur une librairie très intéressante nommée <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e848dc1d-5be3-4941-8705-024bc7f180ba&displaylang=en">Parallel Framework Extensions</a> (PFX). Cette librairie offre des façons très simples d'accomplir certaines tâches communes dans le monde de la programmation parallèle.
</p><p>
Par exemple, supposons que vous avez une collection d'objets sur lesquels vous désirez effectuer un traitement. Une implémentation naïve de cela pourrait ressembler à ceci :
</p>
<pre name="code" class="c-sharp">
private void DoManipulationOnFooList(IList<Foo> data)
{
foreach (Foo f in data)
{
// Do something with f
}
}
</pre>
<p>
Ce code est très simple et parfaitement acceptable lorsque l'ordinateur n'a qu'un seul processeur. Toutefois, une machine à quatre coeurs ne pourra utiliser que le quart de sa capacité pour traiter ce code.
</p><p>
Une meilleure implémentation serait d'utiliser le <a href="http://msdn2.microsoft.com/en-us/library/system.threading.threadpool.aspx"><em>ThreadPool</em></a>.
</p>
<pre name="code" class="c-sharp">
private void DoManipulationOnFooList(IList<Foo> data)
{
foreach (Foo f in data)
{
ThreadPool.QueueUserWorkItem(new WaitCallBack(delegate(object arg)
{
Foo foo = (Foo)arg;
// Do something with foo
}, f));
}
}
</pre>
<p>
De cette façon, plusieurs coeurs seront utilisés. Toutefois, le code est moins élégant que la première version, et quelques problèmes peuvent survenir. Qu'arrive-t-il si une exception a lieu lors du traitement de l'un des item? Plusieurs détails doivent être considérés pour utiliser le <em>ThreadPool</em>, et cette méthode pourrait facilement devenir très compliquée. De plus, pour obtenir le même comportement que la première version du code, il faut ajouter un mécanisme pour empêcher <code>DoManipulationOnFooList</code> de retourner tant que tout le travail n'est pas terminé.
</p><p>
Avec PFX, une implémentation complète et très efficace de cette situation pourrait ressembler à ceci :
</p>
<pre name="code" class="c-sharp">
private void DoManipulationOnFooList(IList<Foo> data)
{
Parallel.ForEach<Foo>(data, delegate(Foo f)
{
// Do something with f
});
}
</pre>
<p><em>Notez qu'il ne s'agit peut-être pas de la syntaxe exacte. Je n'ai pas trouvé d'exemple concret de la méthode ForEach.</em></p>
<p>
Beaucoup plus simple n'est-ce pas? Le code est très semblable à la première version, mais celui-ci utilisera efficacement tout les processeurs disponibles. La liste d'objets sera séparée entre les différents coeurs, qui travailleront chacun de leur côté. Si un processeur termine son travail avant les autres, il ira <em>voler</em> du travail aux autres. Les exceptions seront gérées d'une manière prévisible, et la méthode ne retournera que lorsque tout le travail sera terminé.
</p><p>
Bien entendu, PFX ne s'arrête pas là. Bien que cette façon de faire sera satisfaisante dans plusieurs cas, des problèmes plus compliqués demandent des méthodologies différentes. Pour ces cas, il est possible de descendre d'un niveau d'abstraction et d'utiliser des composantes plus flexibles.
</p><p>
Ces concepts de parallélismes ont aussi été adapté à LINQ. Avec <a href="http://msdn.microsoft.com/en-us/magazine/cc163329.aspx">PLINQ</a>, vous pourrez prendre avantage de tous les processeurs de l'ordinateur lors de vos requêtes LINQ et ce, en ajoutant simplement <code>.AsParallel()</code> à celles-ci.
</p><p>
Il est difficile d'en dire plus sur ce sujet car très peu de documentation existe pour le moment. Toutefois, il s'agit d'une technologie très intéressante, et je crois bien que tous les développeurs devraient se familiariser avec cela le plus tôt possible. Je vous suggère de commencer par ce <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=347531">vidéo sur Channel9</a> qui présente un survol des bases de PFX et PLINQ.
</p>
<p><em>Mise à jour, 13 mai 2008: J'ai réalisé que certains liens dans cet article ne fonctionnaient plus. Je les ai remplacés par des liens fonctionnels. Remarquez qu'un <abbr title="Community Technology Preview">CTP</abbr> de Parallel Extensions est maintenant disponnible à télécharger.</em></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-3915956838941868765?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-73611001946222903582007-10-22T12:34:00.000-04:002007-10-22T18:08:42.994-04:00ReSharper<p>
Un autre outil que j'ai récemment découvert est <a href="http://www.jetbrains.com/resharper/">ReSharper</a>. Il s'agit d'un add-in pour Visual Studio qui aide les développeurs à créer du code à la fois robuste et élégant.
</p><p>
Bien qu'il ne soit pas gratuit, ses nombreuses fonctionnalités le rende très intéressant. Son slogan, "The Most Intelligent Add-In To Visual Studio", semble prétentieux, mais après quelques jours à utiliser cet add-in, je ne crois pas que vous voudrez vous en passer.
</p><p>
Je ne peux pas énumérer ici tout ce qu'il peut faire, mais voici un aperçu.
</p><p>
ReSharper <a href="http://www.jetbrains.com/resharper/features/code_analysis.html">analyse votre code</a> et indique les endroit où il semble y avoir des erreurs ou problèmes. Par exemple, si vous retournez un <code>object</code> au lieu d'une <code>string</code> dans une méthode, le code sera souligné et vous serez averti de cela avant même d'avoir compilé. Ou encore, si vous utilisez <code>String.Format()</code> et que vous utilisez plus de paramètres que vous ne fournissez d'arguments, les paramètres en trop seront soulignés.
</p><p>
Pour la plupart des problèmes identifiés, ReSharper offre des <a href="http://www.jetbrains.com/resharper/features/code_analysis.html#Quick-Fixes">corrections automatiques</a>. Ainsi, dans le cas du mauvais type de retour pour une méthode, un menu vous permettra d'insérer un <em>cast</em> à l'endroit approprié en seulement deux clics.
</p><p>
Ajoutez à cela de <a href="http://www.jetbrains.com/resharper/features/coding_assistance.html">l'autocomplétion</a>, des outils de <a href="http://www.jetbrains.com/resharper/features/code_refactoring.html"><em>refactoring</em></a> avancés, de nombreux <a href="http://www.jetbrains.com/resharper/documentation/ReSharper30DefaultKeymap.pdf">raccourcis claviers</a> très utiles et <a href="http://www.jetbrains.com/resharper/features/navigation_search.html">beaucoup</a> <a href="http://www.jetbrains.com/resharper/features/code_templates.html">plus</a> <a href="http://www.jetbrains.com/resharper/features/code_formatting.html">encore</a>, et vous avez devant vous un outil qui augmentera à coup sur votre productivité.
</p><p>
ReSharper supporte C# et VB, ainsi qu'ASP.NET, XML et XAML. Je vous invite fortement à <a href="http://www.jetbrains.com/resharper/download/index.html">télécharger la version d'essais</a>, et de convaincre votre employeur d'<a href="http://www.jetbrains.com/resharper/buy/index.html">investire</a> dans cet outil.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-7361100194622290358?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-60553303301932664062007-10-18T12:30:00.000-04:002007-10-18T12:52:30.439-04:00Ghost Doc<p>
Dans le cadre de mon nouvel emploi, j'ai découvert un outil très pratique : <a href="http://www.roland-weigelt.de/ghostdoc/">Ghost Doc</a>.
</p><p>
Cet add-in <strong>gratuit</strong> pour Visual Studio aide les développeurs à créer de la documentation pour leur code. Il suffit de positionner le curseur sur le nom d'une méthode ou d'une propriété et de taper un raccourci clavier (Ctrl+Shift+D par défaut), et Ghost Doc génère automatiquement un bloc de commentaire <a href="http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/csref/html/vcorixmldocumentation.asp">XML Doc</a>.
</p><p>
La beauté de Ghost Doc est la façon dont il génère ces commentaires. Si vous documentez une méthode que vous implémentez d'une interface ou d'une super classe, la documentation existante sera copiée pour votre implémentation. Si toutefois vous documentez une nouvelle méthode, le commentaire sera généré à partir du nom de la méthode. Par exemple, avant :
</p>
<pre name="code" class="c-sharp">
public void ChangeDirectory(string targetDirectory)
{
}
</pre>
<p>
Et après :
</p>
<pre name="code" class="c-sharp">
/// <summary>
/// Changes the directory.
/// </summary>
/// <param name="targetDirectory">The target directory.</param>
public void ChangeDirectory(string targetDirectory)
{
}
</pre>
<p>
À première vue, ceci ne semble peut être pas si utile. Peut-être que vous n'utilisez pas les commentaires XML Doc présentement, et que vous ne voyez pas pourquoi vous utiliseriez un tel outil. Demandez-vous dans ce cas : pourquoi n'utilisez-vous pas XML Doc? La réponse est probablement : parce que c'est trop long à écrire! Et bien, avec Ghost Doc, vous n'avez plus d'excuse! Bien entendu, certaines méthodes demandent quelques ajustements aux commentaires générés, mais comme toute la base du commentaire a déjà été générée pour vous, il est très facile de faire les modifications nécessaires.
</p><p>
Un autre avantage de Ghost Doc que j'ai remarqué est qu'à force de l'utiliser, on apprend à mieux nommer ses méthodes. Après avoir bien compris comment les commentaires sont générés, il deviens naturel de choisir un bon nom pour une méthode afin que le commentaire généré soit le plus clair possible, sans avoir à le modifier manuellement. Ce n'est pas évident à expliquer, mais on comprend bien à force de l'utiliser.
</p><p>
Finalement, plusieurs options de configuration sont disponnibles, permettant ainsi d'ajouter certains mots ou certains types de méthodes pour lesquels des traitements spéciaux sont nécéssaires.
</p><p>
J'utilise cet outil depuis maintenant quelques jours, et déjà, je ne m'en passerais plus! Je vous suggère fortement d'en faire l'essaie!
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-6055330330193266406?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-22249321923240756402007-10-10T18:36:00.000-04:002007-10-18T00:35:23.402-04:00Nouvel emploi<p>
Aujourd'hui était la première journée de mon nouvel emploi chez <a href="http://www.bxsystems.com/">bxsystems</a>. C'était un retour aux sources pour moi car il s'agit de la compagnie pour laquelle je <a href="http://www.leddt.com/cv.htm">travaillait auparavant</a>.
</p><p>
Toutefois, la compagnie est méconnaissable. La petite entreprise d'une quinzaine d'employés s'est transformée, en seulement un an, en un joueur important à Québec et embauche maintenant environ 40 personnes. Elle touche à beaucoup plus de domaines qu'auparavant, et ses employés sont divisés en projets internes (tel le projet <a href="http://www.timesheetbx.com/">timesheet</a>), en projets à distances (dont je fais partie) et en consultation.
</p><p>
Le projet sur lequel je travail est très impressionnant. Il s'agit d'un des plus gros système de e-commerce au monde. Le client est <a href="http://www.bestbuy.com/">Best Buy</a>, qui comprend, <a href="http://en.wikipedia.org/wiki/Best_Buy">entre autres</a>, la chaine <a href="http://www.futureshop.com/">Future Shop</a>. Près de 200 développeurs sont impliqués, dans des bureaux à Gatineau, Québec et aux États-Unis. Microsoft est impliqué de très près dans le projet, car une fois complété, il représentera une preuve de l'efficacité des nouvelles technologies .NET.
</p><p>
Une fois livré, tous les sites web de Best Buy, Future Shop, etc. seront gérés par ce système. De plus, toutes autres formes de commerce électronique (kiosques, smartphones, xbox...) pourraient être supportées par ce même système. Il s'agit d'un projet très vaste, très ambitieux et on ne peut plus passionnant.
</p><p>
Un projet et une équipe de cette envergure exigent bien entendu des méthodologies différentes. C'est pour moi l'occasion rêvée d'étendre mon champ de connaissances et d'apprendre à utiliser une foule de nouveaux outils. J'ai très hâte de maitriser l'ensemble de ce projet.
</p><p>
Mon emploi chez bxsystems ne s'arrête pas non plus au projet Best Buy. Il est très possible que je sois appelé à travailler comme consultant dans d'autres firmes, ou que je sois déplacé vers un autre projet. Comme j'ai pu comprendre, les développeurs à l'embauche de la compagnie changent régulièrement de projet. Ceci est intéressant car ça permet de se changer les idées et de voir du nouveau de temps en temps. Bien entendu, je ne crois pas qu'ils déplaceraient un employé affecté à un projet urgent!
</p><p>
Bref, je suis très content de ma première journée. Je suis certain que cet emploi m'offrira une multitude de sujets intéressants pour des articles futurs. Restez-donc à l'écoute!
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-2224932192324075640?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-74593641738395238612007-10-09T16:29:00.000-04:002008-11-13T02:54:20.657-05:00Modèle de couleur<p>Tel que promis, j'ai expérimenté avec différents thèmes de couleurs pour Visual Studio.</p><p>Premièrement, j'ai réalisé que les thèmes à fonds sombres ne sont vraiment pas pour moi. Initialement je les trouves jolis, mais après les avoir utiliser un peu, je les aimes de moins en moins. Je crois que le principal problème est le trop grand contraste entre la zone de travail foncée, et le reste de l'interface de Visual Studio qui est pâle. Ceci pourrait être amélioré en modifiant mon thème Windows, mais je ne voulais pas faire cela.</p><p>Ensuite, j'ai découvert que le point le plus important (pour moi) pour un modèle de couleur est de ne pas utiliser un fond complètement noir ou complètement blanc. Il est préférable d'utiliser des <a href="http://slinky.imukuppi.org/zenburn/">teintes de gris</a> (ou encore <a href="http://caffenero.net/wp-content/uploads/personal/IDE.PNG">d'autres</a> <a href="http://www.tomsdiner.org/vim/oceandeep/index.html">couleurs</a>), car ce sera beaucoup moins fatiguant pour les yeux. Certaines personnes ne jurent que par les fonds noirs, et si ça fonctionne pour eux, tant mieux! L'important est d'<a href="http://www.codinghorror.com/blog/archives/000340.html">éviter les contrastes trop élevés</a>.</p><a href="http://1.bp.blogspot.com/_sENvCJ1yWSQ/Rwvo9z20y5I/AAAAAAAAAaM/vbaqWymXfgE/s1600-h/david-thibault-color-scheme-2007-10-09.png" target="_blank"><img id="BLOGGER_PHOTO_ID_5119441550026525586" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="Modèle de couleur" src="http://1.bp.blogspot.com/_sENvCJ1yWSQ/Rwvo9z20y5I/AAAAAAAAAaM/vbaqWymXfgE/s200/david-thibault-color-scheme-2007-10-09.png" border="0" /></a> <p>Après quelques essais, je me suis arrêté sur une variation au <a href="http://www.codinghorror.com/blog/archives/000682.html">thème</a> de <a href="http://www.codinghorror.com/blog/">Jeff Atwood</a>. Les principales modifications sont un fond très légèrement plus foncé, ainsi que des couleurs un peu plus vives pour marquer les nombres et les chaines de caractères. J'ai aussi modifié la couleur de fond pour les commentaires <a href="http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/csref/html/vcorixmldocumentation.asp">XML Doc</a>. Ceci a l'effet de marquer visuellement la séparation entre les différentes méthodes d'une classe.</p><p>Vous pouvez <a href="http://1.bp.blogspot.com/_sENvCJ1yWSQ/Rwvo9z20y5I/AAAAAAAAAaM/vbaqWymXfgE/s1600-h/david-thibault-color-scheme-2007-10-09.png" target="_blank">voir un aperçu</a> du résultat ou <a href="http://www.leddt.com/files/david-thibault-color-scheme-2007-10-09.zip">télécharger le fichier <em>vssettings</em></a> afin de pouvoir vous-même utiliser ou modifier ce modèle.</p><p>Bien entendu, le point le plus important dans le choix d'un modèle de couleur est de choisir celui qui fonctionne le mieux pour <strong>VOUS</strong>. Ne vous fiez pas à l'opinion des autres, <strong>essayez</strong> les modèles vous-même, et faites une décision en vous fiant sur votre propre expérience.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-7459364173839523861?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-72593640155188370332007-10-04T22:23:00.000-04:002007-10-18T00:35:01.160-04:00Polices pour programmeurs<p>
<a href="http://www.codinghorror.com/blog/">Jeff Atwood</a> a écrit un <a href="http://www.codinghorror.com/blog/archives/000969.html">article très utile sur les polices de caractères pour les programmeurs</a>. Il présente différentes polices rendues avec la technologie <a href="http://www.microsoft.com/typography/WhatIsClearType.mspx">ClearType</a>.
</p><p>
Après une brève comparaison, j'arrive à la même conclusion que lui : <a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&displaylang=en">Consolas</a> est la police que je préfère. Chaque caractère de cette police est facile à différencier des autres, et l'ensemble de la police est légerte pour les yeux.
</p><p>
J'utilise Courier New depuis pratiquement toujours, et je crois bien que je suis prêt à changer!
</p><p>
La prochaine étape sera de trouver un meilleur modèle de couleur. J'aime bien celui de Jeff Atwood, mais je vais voir si je peux faire encore mieux!
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-7259364015518837033?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-59543887962599555672007-10-04T14:39:00.000-04:002007-10-18T00:34:47.811-04:00Le code source du Framework sera ouvertMicrosoft nous annonce que le code source du Framework .NET sera mis à la disposition de tous.
</p><p>
<a href="http://blogs.msdn.com/sburke/default.aspx">Shawn Burke</a> a écrit un <a href="http://blogs.msdn.com/sburke/archive/2007/10/03/making-net-framework-source-available-to-developers.aspx">article donnant plus de détails sur cette nouveauté</a> et a aussi enregistré un <a href="http://channel9.msdn.com/Showpost.aspx?postid=345805">vidéo montrant le tout en action</a>.
</p><p>
La liste des librairies ainsi ouvertes est impressionnante :
<ul><li>Base Class Libraries (mscorlib.dll)</li><li>ASP.NET (System.Web.dll)</li><li>Windows Forms (System.Drawing.DLL & System. Windows.Forms.dll)</li><li>ADO.NET (System.Data.DLL)</li><li>XML (System.Xml.DLL)</li><li>WPF (System.Windows.DLL)</li></ul>
</p><p>
De plus il se peut que d'autres librairies (LINQ, WCF, Workflow) s'ajoutent à cette liste dans le futur.
</p><p>
Tout ceci sera offert dans le cadre de la sortie prochaine de Visual Studio 2008.
</p><p>
Cette nouvelle est très excitante car elle offre quelques avantages comparativement à la méthode actuelle d'ouvrir ces librairies dans <a href="http://www.aisto.com/roeder/dotnet/">Reflector</a>.
</p><p>
Tout d'abord, nous aurons accès au code source original des librairies, ce qui signifie que tous les commentaires ainsi que les particularités de mises en formes seront présents. Mais la plus intéressante des fonctionnalités que cela offrira est la complète intégration dans Visual Studio. Par exemple, si une exception est lancée par l'une des librairies ouverte, Visual Studio pourra afficher la ligne de code exacte où l'exception est survenue, de la même façon que s'il s'agissait de votre propre code. Ainsi, il sera très facile de déterminer la cause exact du problème.
</p><p>
<a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx">Encore plus de détails, et des images de cette fonctionnalité en action</a>, sont disponibles sur le <a href="http://weblogs.asp.net/scottgu/default.aspx">blog de Scott Guthrie</a>.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-5954388796259955567?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0tag:blogger.com,1999:blog-8710539728061283702.post-6464820329289358622007-10-03T22:55:00.000-04:002007-10-18T00:32:45.766-04:00Bienvenue<p>
Bonjour et bienvenue sur mon nouveau blog. Ici j'écrirai à propos de divers sujets relatifs à ma profession de programmeur-analyste <em>.NET</em>.
</p><p>
J'héberge mon blog sur <a href="http://www.blogger.com/">Blogger</a>, une compagnie appartenant à Google. Leur système est extrèmement flexible, et permet de faire à peu près tout ce que l'on veut avec son blog.
</p><p>
Par exemple, j'ai pu configurer le blog pour être accessible à partir d'un sous-domaine de leddt.com, en ajoutant une simple entrée à ma configuration DNS et en spécifiant un minimum d'informations à Blogger.
</p><p>
De plus, les options de personalisation de l'affichage du blog sont pratiquement illimitées, à condition de prendre le temps de bien comprendre leur système de modèles. J'ai donc pu, après quelques heures de travail (pour apprendre le fonctionnement des modèles, et faire un peu de mise en page), donner au blog la même apparence que le reste des pages de <a href="http://www.leddt.com/">leddt.com</a>.
</p><p>
En bref, blogger est excellent pour quelqu'un qui veut avoir un blog hébergé exterieurement, tout en gardant un maximum de contrôle sur le fonctionnement de celui-ci.
</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8710539728061283702-646482032928935862?l=blog.leddt.com'/></div>David Thibaulthttp://www.blogger.com/profile/09863125326904400244noreply@blogger.com0