<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" version="2.0">
   <channel>
      <title>Blogs des consultants A2 Consulting</title>
      <description>flex aggrégé des blogs des consultants d'A2 Consulting</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=ae7841492046a36319c415d375cd6c9a</link>
      <pubDate>Thu, 05 Nov 2009 04:38:34 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/A2Consultants" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>Revue du web .NET du 20 octobre</title>
         <link>http://www.virtew.com/post/Revue-du-web-NET-du-20-octobre.aspx</link>
         <description>&lt;p&gt;Voici notre première revue du web sur l’actualité du monde .NET. Elle ne se veut pas exhaustive, nous essayons de mettre en avant des choses intéressantes, peu connues parfois mais toujours pertinentes. L’objectif est d’offrir une vue synthétique des nouvelles du développement sur notre plateforme préférée. &lt;/p&gt; &lt;p&gt;Vous trouverez 7 petites rubriques : les deux premières sont des extraits de sites qu’on ne présente plus maintenant (Twitter et Stackoverflow). Ensuite des actualités du monde Microsoft et de la communauté Alt.NET. Nous mettrons aussi en avant un projet ou une application .NET et jetterons un coup œil ailleurs (Java, Ruby, PHP) . Enfin on retiendra un évènement pour la semaine à venir.&lt;/p&gt; &lt;p&gt;N’hésitez pas à réagir dans la section “commentaires” !&lt;/p&gt; &lt;h2&gt;&lt;strong&gt;Les tweets de la semaine&lt;/strong&gt;&lt;/h2&gt; &lt;p&gt;&lt;a rel="nofollow" title="lien ver le statut twitter" target="_blank" href="http://twitter.com/SharedProphet/statuses/4925873898"&gt;http://twitter.com/SharedProphet/statuses/4925873898&lt;/a&gt; &lt;br /&gt;Une introduction à la nouvelle invention du père de Linq : Rx, Reactive framework &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="lien ver le statut twitter" target="_blank" href="http://twitter.com/EdgarSanchez/statuses/4905530109"&gt;http://twitter.com/EdgarSanchez/statuses/4905530109&lt;/a&gt;&amp;#160; &lt;br /&gt;ServiceStack : un stack alternatif à WCF pour faire de l’appel distant depuis Linux, Windows et une version pour MonoTouch &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="lien ver le statut twitter" target="_blank" href="http://twitter.com/oising/statuses/4867514391"&gt;http://twitter.com/oising/statuses/4867514391&lt;/a&gt; &lt;br /&gt;On a tous de belles machines en 64bit et on est tous un peu ennuyés par ce message du débogueur de Visual Studio : "Change to 64-bit applications are not allowed" voici une solution. &lt;/p&gt; &lt;h2&gt;&lt;b&gt;La question stackoverflow.com&lt;/b&gt; &lt;/h2&gt; &lt;p&gt;&lt;a rel="nofollow" title="lien vers stackoverflow.com" target="_blank" href="http://stackoverflow.com/questions/9033/hidden-features-of-c"&gt;http://stackoverflow.com/questions/9033/hidden-features-of-c&lt;/a&gt; &lt;/p&gt; &lt;p&gt;« hidden features of c# » c'est la question la plus "active". Il y a sans doute des choses que vous connaissez déjà dans cette liste, d'autres dont vous ne vous servirez peut-être jamais mais la parcourir de temps à autre, avec son café du matin, c'est toujours instructif. &lt;/p&gt; &lt;h2&gt;&lt;b&gt;Actualités Microsoft&lt;/b&gt; &lt;/h2&gt; &lt;p&gt;Le site de MSDN a connu un lifting de son interface, ici le portail consacré à C# &lt;a rel="nofollow" title="site web de MSDN" target="_blank" href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;http://msdn.microsoft.com/en-us/vcsharp/default.aspx&lt;/a&gt; et le site de référence de l’API a aussi une &lt;a rel="nofollow" title="MSDN library" target="_blank" href="http://msdn.microsoft.com/en-us/library/system.data.dataset(VS.100).aspx"&gt;nouvelle version légère&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Un site peu connu avec pleins de projets petits ou grands : &lt;a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/devlabs/dd125421.aspx"&gt;http://msdn.microsoft.com/en-us/devlabs/dd125421.aspx&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Dans un mois c'est la PDC 09 dont les grands moments seront sans doute : le lancement commercial de Azure, .NET Framework 4 et VS 2010.&amp;#160; &lt;a rel="nofollow" target="_blank" href="http://microsoftpdc.com"&gt;http://microsoftpdc.com&lt;/a&gt; /&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt; &lt;p&gt;Le support de MS pour jQuery continue encore plus avec la version 6 de la Preview des contrôles ASP.NET Ajax qui s’exposent aussi comme plugins jQuery : &lt;a rel="nofollow" title="annonce sur le site de Scott Gutherie" target="_blank" href="http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2009/10/15/announcing-microsoft-ajax-library-preview-6-and-the-microsoft-ajax-minifier.aspx&lt;/a&gt; &lt;/p&gt; &lt;h2&gt;&lt;b&gt;Actualités Alt.Net&lt;/b&gt; &lt;/h2&gt; &lt;p&gt;Ce n'est pas de l'actualité chaude mais Karl Seguin (&lt;a rel="nofollow" title="blog de Karl Seguin" target="_blank" href="http://codebetter.com/blogs/karlseguin/"&gt;http://codebetter.com/blogs/karlseguin/&lt;/a&gt; ), développeur canadien et membre de la communauté codebetter.com a publié un e-book de près de 80 pages sur les bonnes pratiques de développement : « Foundations of Programming ». Le sommaire est alléchant et une application accompagne le texte : &lt;a rel="nofollow" title="billet pr&amp;#xe9;sentant l'application" target="_blank" href="http://codebetter.com/blogs/karlseguin/archive/2009/05/25/revisiting-codebetter-canvas.aspx"&gt;http://codebetter.com/blogs/karlseguin/archive/2009/05/25/revisiting-codebetter-canvas.aspx&lt;/a&gt; &lt;/p&gt; &lt;h2&gt;&lt;b&gt;Ailleurs&lt;/b&gt;&lt;/h2&gt; &lt;p&gt;Jetbrains, l'éditeur connu dans le monde .NET pour Resharper (le plugin pour Visual Studio) vient de rendre disponible une version gratuite de son produit phare IntelliJIDEA (un IDE Java) ainsi que le code source de la plateforme. La version dite communauté ne contient pas beaucoup de fonctionnalités au-delà de la programmation JAVA SE mais comme Eclipse un écosystème de plugin va sans doute apparaître. &lt;/p&gt; &lt;p&gt;Avec Eclipse, Netbeans et maintenant IntelliJIDEA, le monde des IDE Java semble plus dynamique que celui de .NET. MonoDevelop et SharpDevelop n'ont pas vu leur adoption croître beaucoup. Et les tentatives infructueuses comme celle de Together .NET de Borland ne sont pas là pour nous rendre optimistes. &lt;/p&gt; &lt;p&gt;On peut juste espérer que Visual Studio 2010 simplifie vraiment l’intégration de plugins. &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="annonce de JetBrains" target="_blank" href="http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html?utm_source=IDEA_BLOG&amp;amp;utm_media=Anouncement&amp;amp;utm_campaign=IDEA9_CE"&gt;http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html?utm_source=IDEA_BLOG&amp;amp;utm_media=Anouncement&amp;amp;utm_campaign=IDEA9_CE&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.jetbrains.com/idea/"&gt;http://blogs.jetbrains.com/idea/&lt;/a&gt; &lt;/p&gt; &lt;h2&gt;&lt;b&gt;Un projet&lt;/b&gt; &lt;/h2&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.sparkviewengine.com"&gt;http://www.sparkviewengine.com&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Spark View Engine est un moteur de vue pour le Framework ASP.NET MVC (et Castle MonoRail) créé par &lt;a rel="nofollow" title="le blog de Louis Dejardin" target="_blank" href="http://whereslou.com/"&gt;Louis Dejardin&lt;/a&gt; (qui depuis a été embauché par Microsoft) pour un projet interne à son ancien employeur. Il simplifie la construction des pages en évitant les spaghettis de tags que représentent pour certains le moteur de vue par défaut de ASP.NET MVC. &lt;/p&gt; &lt;p&gt;Un des cas les plus courants courants les boucles. &lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: &amp;lt;viewdata Posts="&lt;span style="color:#8b0000;"&gt;IList[[MyApp.Models.Post]&lt;/span&gt;"/&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: &amp;lt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; each="&lt;span style="color:#8b0000;"&gt;var post in Posts&lt;/span&gt;"&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: &amp;lt;p&amp;gt;${post.Title}&amp;lt;/p&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 4: &amp;lt;/&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;ou encore plus simple :&lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: &amp;lt;var classes="&lt;span style="color:#8b0000;"&gt;new [] {'even','odd'}&lt;/span&gt;"&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: &amp;lt;tr each="&lt;span style="color:#8b0000;"&gt;var user in users&lt;/span&gt;" &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;="&lt;span style="color:#8b0000;"&gt;${classes[userIndex%2]}&lt;/span&gt;"&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: &amp;lt;td&amp;gt;${userIndex}) ${user.Name}&amp;lt;/td&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 4: &amp;lt;td&amp;gt;${user.UserType}&amp;lt;/td&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 5: &amp;lt;/tr&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 6: &amp;lt;/var&amp;gt;&lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;L’intellisense est un peu dur à mettre en place mais avec Fluent HTML du projet&amp;#160; MVC Contrib on arrive à une productivité agréable : &lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: &amp;lt;content name="&lt;span style="color:#8b0000;"&gt;MainContent&lt;/span&gt;"&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: &amp;lt;viewdata model="&lt;span style="color:#8b0000;"&gt;IList[[Story]]&lt;/span&gt;"/&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: !{&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Html.Grid(Model).Columns(column =&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 4: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 5: column.For(x =&amp;gt; x.Id).Named("&lt;span style="color:#8b0000;"&gt;ID&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 6: column.For(x =&amp;gt; x.Title);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 7: column.For(x =&amp;gt; x.DateSubmitted).Format("&lt;span style="color:#8b0000;"&gt;{0:d}&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 8: column.For(x =&amp;gt; Html.ActionLink&amp;lt;StoryController&amp;gt;(c =&amp;gt; c.Single(x.Ref), "&lt;span style="color:#8b0000;"&gt;View Details&lt;/span&gt;"))
.DoNotEncode();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 9: })}
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 10: &lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 11: &amp;lt;/content&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 12: &lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 13: &lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;Qui a dit « IntelliSense pour XAML ! » ? &lt;/p&gt; &lt;p&gt;ASP.NET MVC devient un des domaines où la communauté est des plus actives. &lt;/p&gt; &lt;h2&gt;&lt;b&gt;La semaine prochaine &lt;/b&gt;&lt;/h2&gt; &lt;p&gt;La conférence Monospace sur 4 jours avec bien sûr la vedette du moment MonoTouch, l’environnement de développement .NET pour l’iPhone : &lt;a rel="nofollow" target="_blank" href="http://monospace.us/"&gt;http://monospace.us/&lt;/a&gt;&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=2e25bb2d-1763-41b1-bf5c-d377dac5efd6</guid>
         <pubDate>Tue, 20 Oct 2009 12:51:49 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>AltNet Montréal – Et Umbrella fut…</title>
         <link>http://www.virtew.com/post/AltNet-Montreal-e28093-Et-Umbrella-fute280a6.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=AltNet.png"&gt;&lt;img style="border-right-width:0px;margin:0px 5px 0px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="logo altnet" border="0" alt="logo altnet" align="left" src="http://www.virtew.com/image.axd?picture=AltNet_thumb.png" width="404" height="70"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Le 22 octobre prochain j’animerai une &lt;a rel="nofollow" title="lien ver la fiche de la pr&amp;#xe9;sentation" target="_blank" href="http://www.altnetmontreal.com/portal/%C3%89v%C3%A9nements/tabid/63/ModuleID/405/ItemID/4/mctl/EventDetails/language/en-US/Default.aspx?selecteddate=10/22/2009"&gt;présentation&lt;/a&gt; organisée par le groupe ALT.NET de Montréal. Pour ceux qui ne connaissent pas ALT.NET, le groupe montréalais est tout jeune mais il fait parti d’un &lt;a rel="nofollow" title="le site de alt.net" target="_blank" href="http://altdotnet.org/"&gt;mouvement plus large&lt;/a&gt; . Bien que peu formalisée cette communauté est vivante : elle organise des conférences &lt;a rel="nofollow" title="conf&amp;#xe9;rence de vancouver" target="_blank" href="http://www.altnetconfcanada.com/home/index.castle"&gt;réelles&lt;/a&gt; ou &lt;a rel="nofollow" title="virtual altnet" target="_blank" href="http://groups.google.com/group/virtualaltnet"&gt;virtuelles&lt;/a&gt;, une &lt;a rel="nofollow" target="_blank" href="http://tech.groups.yahoo.com/group/altdotnet/"&gt;liste de discussion technique&lt;/a&gt; et bien sûr des évènements locaux autour des bonnes pratiques logiciels.&lt;/p&gt; &lt;p&gt;Le sujet de cette présentation sera &lt;a rel="nofollow" title="site codeplex de Umbrella" target="_blank" href="http://umbrella.codeplex.com/"&gt;Umbrella&lt;/a&gt; :&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=vuesur.png"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="vue sur hanselman.com et ayende.com" border="0" alt="vue sur hanselman.com et ayende.com" src="http://www.virtew.com/image.axd?picture=vuesur_thumb.png" width="640" height="422"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Umbrella n’est pas un nième framework, il n’y a pas de setup, juste une assemblie de 56k avec plein de goodies !&lt;/p&gt; &lt;p&gt;Voici un petit avant-goût de ce que vous allez voir, Umbrella est une bonne façon d’apprendre : en connaissant ses limites, on découvre d’autres choses sur le framework .NET.&lt;/p&gt; &lt;p&gt;IEnumerable &amp;amp; Dictionnaire : les méthodes qu’on a toujours voulues avoir sans jamais avoir oser les demander !&lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: maCollection.ForEach(item =&amp;gt; Console.WriteLine(item + 1));
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: maCollection.Remove(item =&amp;gt; item == "&lt;span style="color:#8b0000;"&gt;1&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: var maybe = monDictionnaire.GetValueOrDefault("&lt;span style="color:#8b0000;"&gt;AD&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;Exécuter une action à la fin d’un bloc using : &lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; DummyMethod()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (TimeMethod())
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 4: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 5: Console.WriteLine("&lt;span style="color:#8b0000;"&gt;I'm in the method...&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 6: &lt;span style="color:#008000;"&gt;// Do something...&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 7: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 8: &lt;span style="color:#008000;"&gt;//The approximate time spent in the using block has been displayed at the end &lt;br /&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 9: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 10: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IDisposable TimeMethod()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 11: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 12: var w = Stopwatch.StartNew();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 13: Action stopTimer = () =&amp;gt; {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 14: Console.WriteLine(w.Elapsed);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 15: };
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 16: &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; stopTimer.ToDisposable();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 17: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 18: &lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;Ou avoir le Cast facile :&lt;/p&gt; &lt;pre style="border-bottom:#c0c0c0 1px solid;border-left:#c0c0c0 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;padding-right:5px;overflow:auto;border-top:#c0c0c0 1px solid;border-right:#c0c0c0 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;Type&amp;gt; EnumPlugins(Assembly assembly)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 3: &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from pluginType &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; assembly.GetTypes()
&lt;/pre&gt;&lt;pre style="background-color:#ffff00;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 4: where pluginType.Is&amp;lt;IPlugin&amp;gt;()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 5: select pluginType;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 6: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,;font-size:12px;"&gt; 7: &lt;/pre&gt;&lt;/pre&gt; &lt;p&gt;Mais il y a encore plein d’autres choses à voir.&lt;/p&gt; &lt;p&gt;Vous trouverez les détails sur le &lt;a rel="nofollow" title="fiche de la pr&amp;#xe9;sentation" target="_blank" href="http://www.altnetmontreal.com/portal/%C3%89v%C3%A9nements/tabid/63/ModuleID/405/ItemID/4/mctl/EventDetails/language/en-US/Default.aspx?selecteddate=10/22/2009"&gt;site de Alt.NET Montréal&lt;/a&gt; et n’oubliez de vous &lt;a rel="nofollow" title="r&amp;#xe9;servation" target="_blank" href="http://altnet20091022.eventbrite.com/"&gt;inscrire&lt;/a&gt; !&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=3702147a-bfae-49b2-a0ed-117ce024880c</guid>
         <pubDate>Thu, 01 Oct 2009 13:13:13 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>Fluent NHibernate</title>
         <link>http://www.virtew.com/post/Fluent-NHibernate.aspx</link>
         <description>&lt;p&gt;Je suis en train de travailler sur une application utilisant &lt;a rel="nofollow" title="site officiel du framework" target="_blank" href="http://nhforge.org/Default.aspx"&gt;NHibernate&lt;/a&gt;, et cela me permet d’utiliser la librairie &lt;a rel="nofollow" title="site de la librarie" target="_blank" href="http://fluentnhibernate.org/"&gt;Fluent NHibernate&lt;/a&gt;. Cette dernière qui a reçu beaucoup d’attention cer derniers mois (voir le &lt;a rel="nofollow" title="questions tagg&amp;#xe9;es FNH sur stackoverflow" target="_blank" href="http://stackoverflow.com/questions/tagged/fluent-nhibernate"&gt;volume de questions&lt;/a&gt; sur Stackoverflow)&amp;#160; se propose de simplifier la configuration du mapping avec une API se basant sur le principe de &lt;a rel="nofollow" title="article sur wikipedia" target="_blank" href="http://en.wikipedia.org/wiki/Fluent_interface"&gt;l’interface “fluent”&lt;/a&gt; (i.e. lisible) par le biais du chaînage des méthodes. Voici un exemple de configuraton classique NHIbernate sous la forme XML :&lt;/p&gt; &lt;pre class="brush:xml"&gt; &amp;lt;hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access=""&amp;gt;
&amp;lt;class name="ContactPoint" table="`ContactPoint`" xmlns="urn:nhibernate-mapping-2.2"&amp;gt; &amp;lt;id name="Id" type="Guid" column="Id"&amp;gt; &amp;#160; &amp;lt;generator class="guid.comb" /&amp;gt; &amp;lt;/id&amp;gt; &amp;lt;many-to-one name="Contact"&amp;gt; &amp;#160; &amp;lt;column name="ContactId" /&amp;gt; &amp;lt;/many-to-one&amp;gt; &amp;lt;many-to-one name="Location"&amp;gt; &amp;#160; &amp;lt;column name="LookupLocationId" /&amp;gt; &amp;lt;/many-to-one&amp;gt; &amp;lt;many-to-one name="Rank"&amp;gt; &amp;#160; &amp;lt;column name="LookupRankId" /&amp;gt; &amp;lt;/many-to-one&amp;gt; &amp;#160;&amp;#160; &amp;lt;joined-subclass name="Address"&amp;gt; &amp;#160;&amp;#160; &amp;lt;key column="Id" /&amp;gt; &amp;#160;&amp;#160; &amp;lt;property name="PostalCode" type="String"&amp;gt;&amp;lt;column name="PostalCode" /&amp;gt;&amp;lt;/property&amp;gt; &amp;#160;&amp;#160; &amp;lt;property name="City" type="String"&amp;gt;&amp;lt;column name="City" /&amp;gt;&amp;lt;/property&amp;gt; &amp;#160;&amp;#160; &amp;lt;many-to-one name="Usage"&amp;gt;&amp;lt;column name="LookupUsagekId" /&amp;gt;&amp;lt;/many-to-one&amp;gt; &amp;#160;&amp;#160; &amp;lt;many-to-one name="Region" column="RegionId" /&amp;gt; &amp;#160;&amp;#160; &amp;lt;many-to-one name="Country" column="CountryId" /&amp;gt; &amp;#160;&amp;#160; &amp;lt;/joined-subclass&amp;gt;&amp;#160;&amp;#160; &amp;lt;/class&amp;gt;
&lt;/pre&gt; &lt;p&gt;Voici le même mapping avec Fluent NHibernate :&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;
public class ContactPointMapping : ClassMap 
{ public ContactPointMapping() { Id(x =&amp;gt; x.Id); References (x =&amp;gt; x.Contact).WithColumns("ContactId"); References (x =&amp;gt; x.Location).WithColumns("LookupLocationId"); References (x =&amp;gt; x.Rank).WithColumns("LookupRankId"); JoinedSubClass("Id", EmailAsJoinedSubClass()); JoinedSubClass("Id",PhoneAsJoinedSubClass()); JoinedSubClass("Id", AddressAsJoinedSubClass()); JoinedSubClass("Id", WebSiteAsJoinedSubClass()); } public static Action&lt;address&gt;&amp;gt; AddressAsJoinedSubClass() { return sub =&amp;gt; { sub.References (x =&amp;gt; x.Usage).WithColumns("LookupUsagekId"); sub.Map(x =&amp;gt; x.PostalCode); sub.Map(x =&amp;gt; x.City); sub.References (x =&amp;gt; x.Region).ColumnName("RegionId"); sub.References (x =&amp;gt; x.Country).ColumnName("CountryId"); }; } }
&lt;/pre&gt; &lt;p&gt;Il y a quelques temps un &lt;a rel="nofollow" title="t&amp;#xe9;lechargement de NH Attributes" target="_blank" href="http://nhforge.org/media/p/8.aspx"&gt;projet associé&lt;/a&gt; de NH proposait d’exprimer la même chose via des attributes C#. Cela permettait d’avoir un mapping plus proche i.e. de ne pas avoir à ouvrir un fichier externe tout en offrant un typage fort plus sûr que la forme textuelle du XML. Cetains reprochaient à cette approche l’intrusion, même minimale, de NH dans les objets du domaine.&lt;/p&gt; &lt;p&gt;Je trouve en Fluent Nhibernate une bonne alternative. Le mapping est proche (dans le code sans être dans le domaine), avec un typage fort grâce aux expressions lambda. Il reste quelques limitations mais son utilisation est assez intuitive et très productive.&lt;/p&gt;&lt;/address&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=22dca717-e9d7-4a23-915a-cf89d76764bb</guid>
         <pubDate>Sat, 11 Jul 2009 16:02:00 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>Hébergement, Wordpress et performance</title>
         <link>http://www.virtew.com/post/Hebergement-Wordpress-et-performance.aspx</link>
         <description>&lt;p&gt;L&amp;rsquo;informatique est un monde vaste qui recouvre beaucoup de m&amp;eacute;tiers diff&amp;eacute;rents, mais c&amp;rsquo;est quand on cherche un h&amp;eacute;bergement pour un site internet qu&amp;rsquo;on s&amp;rsquo;en rend compte vraiment.&amp;nbsp; Si on passe les offres mutualis&amp;eacute;es pour parler directement VPS ou serveurs d&amp;eacute;di&amp;eacute;s, il existe encore de nombreux h&amp;eacute;bergeurs. Et puis m&amp;ecirc;me si vous &amp;ecirc;tes d&amp;eacute;veloppeur, quand il s&amp;rsquo;agit de machines, il faut un temps d&amp;rsquo;apprentissage non n&amp;eacute;gligeable pour appr&amp;eacute;hender les d&amp;eacute;tails. Lorsque des probl&amp;egrave;mes surviennent n&amp;rsquo;oubliez pas que les administrateurs syst&amp;egrave;mes ne sont pas des d&amp;eacute;veloppeurs donc souvent ils peuvent vous aider sur les sympt&amp;ocirc;mes (c&amp;rsquo;est d&amp;eacute;j&amp;agrave; beaucoup) mais n&amp;rsquo;&amp;eacute;coutez pas trop leur diagnostics.&lt;/p&gt;
&lt;p&gt;D&amp;eacute;j&amp;agrave; il est pr&amp;eacute;f&amp;eacute;rable de se situer dans la m&amp;ecirc;me zone g&amp;eacute;ographique que vos visiteurs (il en va de m&amp;ecirc;me pour vos DNS) surtout si vous avez un domaine en .com qui ne donnent aucun indice au moteur de recherche quand &amp;agrave; votre localisation.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai choisi Wordpress pour un blog car m&amp;ecirc;me si je ne suis pas &amp;agrave; l&amp;rsquo;aise avec le langage PHP (depuis &amp;ccedil;a va mieux) ce moteur de blogs est un des plus populaires donc avec des nouvelles versions (et des patchs) r&amp;eacute;guli&amp;egrave;rement et un &amp;eacute;cosyst&amp;egrave;me vivant (pour des plug-ins, des tutoriaux, les forums etc.). Mais cette facilit&amp;eacute; vient avec un prix : la performance.&lt;/p&gt;
&lt;p&gt;Il existe pas &lt;a rel="nofollow" target="_blank" href="http://www.bing.com/search?q=wordpress+cpu+usage&amp;amp;go=&amp;amp;form=QBRE&amp;amp;filt=all&amp;amp;qs=n"&gt;mal d&amp;rsquo;articles sur les performances&lt;/a&gt; de Wordpress et notamment son usage du CPU. Et je dois dire que j&amp;rsquo;ai mis du temps &amp;agrave; trouver les bonnes ressources. Beaucoup de micro-optimisations sont possibles : enlever les appels &amp;agrave; des fonctions comme bloginfo(&amp;lsquo;url&amp;rsquo;) en pr&amp;eacute;f&amp;eacute;rant les urls en dur, &amp;eacute;viter les plug-ins qui sont gourmands en requ&amp;ecirc;tes SQL, utiliser un syst&amp;egrave;me de cache au niveau de Wordpress comme WP Super-Cache.&lt;/p&gt;
&lt;p&gt;Toutefois voici quelques informations glan&amp;eacute;es apr&amp;egrave;s des recherches approfondies :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;regarder les &lt;a rel="nofollow" target="_blank" href="http://www.codinghorror.com/blog/files/matt-mullenweg-wordpress-mysql-recommendations.txt"&gt;param&amp;egrave;tres recommand&amp;eacute;s&lt;/a&gt; par WP pour MySql trouv&amp;eacute; via le blog de &lt;a rel="nofollow" target="_blank" href="http://www.codinghorror.com/blog/archives/001105.html"&gt;Coding Horror&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;cette &lt;a rel="nofollow" target="_blank" href="http://joseph.randomnetworks.com/archives/2008/09/01/slides-from-wordpress-performance-scalability/"&gt;pr&amp;eacute;sentation&lt;/a&gt; donn&amp;eacute;e par l&amp;rsquo;&amp;eacute;quipe de WP est pr&amp;eacute;cieuse, notamment sur l&amp;rsquo;usage du syst&amp;egrave;me de cache APC de PHP&lt;/li&gt;
&lt;li&gt;Nous avons une partie ind&amp;eacute;pendante de WP et nous utilisons &lt;a rel="nofollow" target="_blank" href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; pour garder en m&amp;eacute;moire des infomations souvent consult&amp;eacute;es et tr&amp;egrave;s rarement mises &amp;agrave; jour. Ces &lt;a rel="nofollow" target="_blank" href="http://mrphp.com.au/code/code-category/miscellaneous/whm-cpanel/install-memcache-cpanel-running-centos"&gt;deux&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/"&gt;liens&lt;/a&gt; sont int&amp;eacute;ressants pour l&amp;lsquo;installation si vous &amp;ecirc;tes h&amp;eacute;berg&amp;eacute;s avec CPanel et Cent OS (plus il existe &lt;a rel="nofollow" target="_blank" href="http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/"&gt;une page&lt;/a&gt; pour voir l&amp;rsquo;&amp;eacute;tat du cache)&lt;/li&gt;
&lt;li&gt;Attention APC &lt;a rel="nofollow" target="_blank" href="http://2bits.com/articles/installing-php-apc-gnulinux-centos-5.html#comment-473"&gt;ne semble pas compatible&lt;/a&gt; avec le module suPHP (qui permet de faire ex&amp;eacute;cuter PHP par un user sp&amp;eacute;cifique pour des raisons de s&amp;eacute;curit&amp;eacute;) car c&amp;rsquo;est un mode CGI , un process par requ&amp;ecirc;te, donc le cache n&amp;lsquo;est pas partag&amp;eacute;.&lt;/li&gt;
&lt;li&gt;Sous cPanel, utiliser &lt;a rel="nofollow" target="_blank" href="http://www.webhostgear.com/122.html"&gt;easyapache&lt;/a&gt; (/scripts/easyapache) si vous faites une erreur, cela &lt;a rel="nofollow" target="_blank" href="http://twiki.cpanel.net/twiki/bin/view/EasyApache3/WebHome"&gt;reconfigure&lt;/a&gt; Apache + PHP de fa&amp;ccedil;on tr&amp;egrave;s simple.&lt;/li&gt;
&lt;li&gt;Si vous n'&amp;ecirc;tes pas en h&amp;eacute;bergement partag&amp;eacute; suPHP n'est pas recommand&amp;eacute; car plus lent que le mode DSO, il faut juste configurer le user Apache au lieu d'utiliser le user nobody&lt;/li&gt;
&lt;/ul&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=9372b729-6f2e-4eb5-b77e-53cb3a0a564f</guid>
         <pubDate>Wed, 01 Jul 2009 09:14:00 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>Premier coding dojo</title>
         <link>http://www.virtew.com/post/Premier-coding-dojo.aspx</link>
         <description>&lt;p&gt;Jeudi dernier j’ai fait mon premier &lt;a rel="nofollow" title="site du coding dojo" target="_blank" href="http://codingdojo.org/"&gt;coding dojo&lt;/a&gt; lors d’une rencontre de la communauté &lt;a rel="nofollow" title="site du groupe" target="_blank" href="http://www.altnetmontreal.com/portal/"&gt;Alt.NET de Montréal&lt;/a&gt;. Comme son nom ne l’indique pas c’est une façon de pratiquer le partage de connaissance autour du code. Nous avons utilisé la manière ”&lt;a rel="nofollow" title="d&amp;#xe9;finition" target="_blank" href="http://codingdojo.org/cgi-bin/wiki.pl?RandoriKata&amp;rdquo;Randori"&gt;Randori Kata&lt;/a&gt;” qui revient à coder à deux, l’un ayant le clavier l’autre suggérant, aidant, critiquant. On change toutes les 5 à 7 minutes les protagonistes avec des personnes présentes et volontaires.&lt;/p&gt; &lt;p&gt;Cela se fait dans la bonne humeur et le sujet de cette session, le &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-Driven Development&lt;/a&gt;, se prête bien aux discussions : le TDD étant une façon de coder et surtout de faire réfléchir au design avant l’implémentation via les tests, on jasse beaucoup :) Deux heures bien remplies dans un agenda de développeur, vous avez tout l’éte pour vous &lt;a rel="nofollow" title="inscription au Alt.NET de Montr&amp;#xe9;al" target="_blank" href="http://www.altnetmontreal.com/portal/Accueil/tabid/36/ctl/Register/language/en-US/Default.aspx?returnurl=/portal/default.aspx"&gt;inscrire&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Merci à &lt;a rel="nofollow" title="le blog de Maxime Rouiller" target="_blank" href="http://blog.decayingcode.com"&gt;Maxime&lt;/a&gt; et &lt;a rel="nofollow" title="le blog de Eric de Carufel" target="_blank" href="http://blog.decarufel.net/"&gt;Eric&lt;/a&gt;, les organisateurs !&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=6d304584-5373-46f5-8f6b-b23edd2c7e1f</guid>
         <pubDate>Sun, 28 Jun 2009 20:59:35 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>Notifications sur iPhone 3.0</title>
         <link>http://www.virtew.com/post/Notifications-sur-iPhone-30.aspx</link>
         <description>&lt;p&gt;Une des grandes nouveautés de la version 3 du système d’exploitation sont les notifications.&lt;/p&gt; &lt;p&gt;Apple ne donne pas le droit à une application de tourner en tâche de fond, donc en quittant une application par exemple de messagerie instantanée pour aller consulter votre courrier ou visiter une page web, vous ne la minimisez pas conme sur un ordinateur de bureau ou portable, vous perdez vos discussions en cours.&lt;/p&gt; &lt;p&gt;Je n’ai pas vu d’explications officielles précises mais le fait que l’iPhone n’est que 128 Mo de RAM (256 pour le nouveau modèle) milite pour cette exclusivité sur cette ressource rare surtout pour un appareil avec une interface aussi riche. Je ne connais pas Android ou BlackBerry mais &lt;a rel="nofollow" title="la gestion de la m&amp;#xe9;moire sous WM" target="_blank" href="http://www.simonrhart.com/2008/05/memory-management-on-windows-mobile-61.html"&gt;Windows Mobile&lt;/a&gt; a un système de warning à plusieurs niveaux de criticité envers les applications lorsque la mémoire vive disponible est basse.&lt;/p&gt; &lt;p&gt;Depuis la dernière version les applications peuvent envoyer des notifications à l’appareil, ici un exemple avec &lt;a rel="nofollow" title="site web de l'application" target="_blank" href="http://www.beejive.com/iphone/"&gt;Beejive&lt;/a&gt; une application de messagerie instantanée : &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=notification.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="exemple de notification" border="0" alt="exemple de notification" src="http://www.virtew.com/image.axd?picture=notification_thumb.jpg" width="324" height="484"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Comment cela se passe sous la capot ? Voici un résumé du worflow entre l’application, les serveurs d’Apple et votre serveur :&lt;/p&gt; &lt;ol&gt; &lt;li&gt;L’utilisateur lance l’application&lt;/li&gt; &lt;li&gt;L’application s’enregistre auprès des serveurs de notification d’Apple&lt;/li&gt; &lt;li&gt;Ces derniers générent&amp;#160; un token applicatif à partir des informations de l’application et de l’iPhone et renvoie cette information à l’application. &lt;/li&gt; &lt;li&gt;L’application transmets ce token à son serveur&lt;/li&gt; &lt;li&gt;Le client quitte l’application par exemple&lt;/li&gt; &lt;li&gt;Le serveur peut alors envoyer des notifications à l’utilisateur via les serveurs d’Apple avec le token précédemment enregistré sous la forme d’un son, badge (chiffre affiché sur l’icône de l’application) ou d’un court texte.&lt;/li&gt; &lt;li&gt;L’utilisateur choisit de fermer la notification ou de lancer l’application concernée&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;En dessin :&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=schema_notifications.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="schema dy syst&amp;#xe8;me de notifications" border="0" alt="schema dy syst&amp;#xe8;me de notifications" src="http://www.virtew.com/image.axd?picture=schema_notifications_thumb.jpg" width="460" height="484"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Cela marche très bien avec l’application testée. On ne peut pas pour l’instant spécifier comme on le fait naturellement sur un ordinateur quand est-ce qu’on &lt;strong&gt;quitte&lt;/strong&gt; une application et quand on la &lt;strong&gt;minimise&lt;/strong&gt;. On peut bien sûr désactiver la notification mais ce n’est pas très pratique. Beejive contourne un peu le problème en laissant l’utilisateur spécifier un temps (de qqles minutes à 24h) au bout duquel les notifications ne sont plus transmises. Je pense qu’il y a une marge de progession pour le système de notifications (sans parler ici de la consommation supplémentaire induite par la connexion IP permanente entre l’iPhone et les serveurs d’Apple).&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=9d77fc41-ef83-4fdb-ab99-a94c48df5083</guid>
         <pubDate>Tue, 23 Jun 2009 12:14:19 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>OS iPhone 3.0</title>
         <link>http://www.virtew.com/post/OS-iPhone-30.aspx</link>
         <description>&lt;p&gt;Parmi les &lt;a rel="nofollow" title="panorama des nouveaut&amp;#xe9;s sur lifehacker.con" target="_blank" href="http://lifehacker.com/5294196/hands-on-with-iphone-30s-best-new-features"&gt;nouveautés&lt;/a&gt; de cette version du système d’exploitation celle de la recherche dans l’application de courrier est une des plus attrayantes pour moi. &lt;/p&gt; &lt;p&gt;La recherche avec filtre s’effectue d’abord en local (sur les courriers contenu sur l’iPhone) puis on peut choisir de continuer sur le serveur, i.e. dans les archives qui sont sur le serveur (dans mon cas exchange).&lt;/p&gt; &lt;p&gt;Un exemple en images : &lt;/p&gt; &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(2).png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="iPhoneSearch (2)" border="0" alt="iPhoneSearch (2)" src="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(2)_thumb.png" width="164" height="244"/&gt;&lt;/a&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(1).png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="iPhoneSearch (1)" border="0" alt="iPhoneSearch (1)" src="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(1)_thumb.png" width="164" height="244"/&gt;&lt;/a&gt;&amp;#160;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(3).png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="iPhoneSearch (3)" border="0" alt="iPhoneSearch (3)" src="http://www.virtew.com/image.axd?picture=iPhoneSearch%20(3)_thumb.png" width="164" height="244"/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=24ff87f4-c589-4be3-8caa-3d3f9ab14b8b</guid>
         <pubDate>Wed, 17 Jun 2009 19:16:49 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>From AZERTY2QWERTY</title>
         <link>http://www.virtew.com/post/From-AZERTY2QWERTY.aspx</link>
         <description>&lt;p&gt;Ayant un ordinateur portable (DELL e6500) avec un clavier français AZERTY l’adaptation vers un clavier QWERTY aurait éte dure. Imaginez : travailler la journée&amp;#160; avec un clavier QWERTY puis le soir revenir au clavier AZERTY. J’ai essayé quelques jours avec le clavier canadien (c’est simplement un clavier US avec une touche pour le e accentué) &lt;a rel="nofollow" title="fiche du clavier chez MS" target="_blank" href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=094"&gt;Microsoft Desktop 4000&lt;/a&gt; mais le passage entre les deux fomes est trop dur.&lt;/p&gt; &lt;p&gt;Dell permet à ses clients de &lt;a rel="nofollow" title="explications des CSR parts sur le site de DELL" target="_blank" href="http://support.dell.com/support/topics/topic.aspx/ca/shared/support/csr/en/cust_replaceable_parts?c=ca&amp;amp;l=en&amp;amp;s=gen&amp;amp;~ck=anavml"&gt;remplacer eux-même&lt;/a&gt; certaines parties de leur ordinateur, et le clavier en fait partie. Le manuel explique le &lt;a rel="nofollow" title="manuel pour d&amp;#xe9;monter le clavier" target="_blank" href="http://support.dell.com/support/edocs/systems/late6500/en/sm/html/keyboard.htm#wp1179980"&gt;comment&lt;/a&gt;, bien que l’étape qui requiert d’énlever l’écran est superflue… (et très chiante).&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=maybaca6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="extrait du manuel de DELL pour d&amp;#xe9;monter le clavier" border="0" alt="extrait du manuel de DELL pour d&amp;#xe9;monter le clavier" src="http://www.virtew.com/image.axd?picture=maybaca6_thumb.jpg" width="244" height="171"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt; Voici en image l’opération :&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="IMG_0795" target="_blank" href="http://www.flickr.com/photos/77921893@N00/3620654086/"&gt;&lt;img border="0" alt="IMG_0795" src="http://farm4.static.flickr.com/3598/3620654086_0f2f7fbdba.jpg" width="500" height="375"/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Cette étape n’a pas servi à grand chose ….&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="IMG_0796" target="_blank" href="http://www.flickr.com/photos/77921893@N00/3619838923/"&gt;&lt;img border="0" alt="IMG_0796" src="http://farm4.static.flickr.com/3412/3619838923_cbc355b87d.jpg"/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Au revoir AERTY :&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="IMG_0797" target="_blank" href="http://www.flickr.com/photos/77921893@N00/3620659542/"&gt;&lt;img border="0" alt="IMG_0797" src="http://farm4.static.flickr.com/3339/3620659542_05fbbebb3d.jpg"/&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Bonjour QWERTY :&lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" title="IMG_0798" target="_blank" href="http://www.flickr.com/photos/77921893@N00/3620662660/"&gt;&lt;img border="0" alt="IMG_0798" src="http://farm4.static.flickr.com/3384/3620662660_1507610748.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=9d03f24a-b048-46a8-8962-cdbd3021954a</guid>
         <pubDate>Fri, 12 Jun 2009 20:43:09 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>Applying Domain-Driven Design and Patterns: With Examples in C# and .NET - Jimmy Nilsson</title>
         <link>http://www.virtew.com/post/Applying-Domain-Driven-Design-and-Patterns-With-Examples-in-C-and-NET-Jimmy-Nilsson.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=ddd_net.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 5px 5px 0px;display:inline;border-top:0px;border-right:0px;" title="couverture du livre" border="0" alt="couverture du livre" align="left" src="http://www.virtew.com/image.axd?picture=ddd_net_thumb.jpg" width="189" height="244"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Etant interessé par le DDD et ayant déjà lu le livre &lt;a rel="nofollow" target="_blank" href="http://www.amazon.ca/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_sim_b_7"&gt;d’Eric Evans&lt;/a&gt; qui est un peu la bible dans ce domaine, j’ai appris l’existence d’un &lt;a rel="nofollow" title="fiche du livre chez amaon.ca" target="_blank" href="http://www.amazon.ca/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1244497671&amp;amp;sr=8-3"&gt;autre ouvrage&lt;/a&gt; sur la question, qui plus est avec des exemples en C#/.NET. Il date de 2005, une éternité dans le secteur de l’informatique ce qui n’est pas gênant en soit vu qu’on parle de concepts. Mais il est vrai que si 4 ans auparavant le TDD, l’intégration continue étaient des choses “nouvelles” aujourd’hui leur adpatation est sinon comprise voire acquise. &lt;/p&gt; &lt;p&gt;J’ai bien aimé le cheminent adopté dans le chapitre 4 : en partnat d’une liste d’exigences on construit le modèle du domaine, chaque exigence servant d’exemple des problématiques classiques comme la validation, la recherche par critères, etc. Mais c’est aussi là que la confusion commence car le modèle d’ensemble est rarement abordé. On se perd un peu dans la succession des zooms faits sur telle ou telle parties. &lt;/p&gt; &lt;p&gt;Je dois dire que l’aspect .Net/C# est léger puisque d’une part on est en 2005 et que je trouve que les forces de C# vis-à-vis du DDD ne sont pas encore présents (comme les lambda expressions, Linq) et d’autre part on ne voit pas une architecture .NET mais un ensemble de frameworks comme NHibernate ou Spring.NET / Windsor pour l’IoC (pattern très bien abordé comme le reste des patterns rencontrés dans le livre).&lt;/p&gt; &lt;p&gt;Je suis un peu déçu même si ce livre constitue un complément très appréciable du livre Evans. Si c’est pour découvrir le DDD, je ne conseillerai pas cet ouvrage mais pour le DDD appliqué avec les bonnes pratiques dans un environnement .NET&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=0b2ae9f6-7057-4e74-a8c8-0e979997ca1b</guid>
         <pubDate>Mon, 08 Jun 2009 17:20:03 -0700</pubDate>
      </item>
      <item>
         <title>Mix09, le grand bazar de Microsoft pour les développeurs web</title>
         <link>http://www.virtew.com/post/Mix09-le-grand-bazar-de-Microsoft-pour-les-developpeurs-web.aspx</link>
         <description>&lt;p&gt;Mix devient une conférence importante dans le monde Microsoft. Destinée aux mondes des professionnels du web, elle a servi de tremplin pour lancement de Silverlight. Cette édition n’est pas en reste :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a rel="nofollow" title="page de t&amp;#xe9;l&amp;#xe9;chargement d'ASP.NET MVC" target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en#filelist"&gt;ASP.NET MVC 1.0&lt;/a&gt; en version finale&lt;/li&gt; &lt;li&gt;Azure / SDS : on attend les détails lors des sessions mais &lt;a rel="nofollow" title="blog de l'&amp;#xe9;quipe azure" target="_blank" href="http://blogs.msdn.com/windowsazure/archive/2009/03/18/using-3rd-party-programming-languages-via-fastcgi.aspx"&gt;PHP est supporté via FastCGI&lt;/a&gt;, on attend avec impatience le détail sur le tournant relationnel de SDS. Un &lt;a rel="nofollow" title="resource pour d&amp;#xe9;veloppeurs azure" target="_blank" href="http://www.microsoft.com/azure/windowsazurefordevelopers/"&gt;nouveau portail&lt;/a&gt; a vu le jour. On notera aussi le support du niveau .NET Full Trust (nécessaire pour certaines librairies tierces) ainsi que de la géo localisation du déploiement&lt;/li&gt; &lt;li&gt;Expression Blend, l’outil de développement autour de Silverlight avec &lt;a rel="nofollow" title="le d&amp;#xe9;tail sur sketchflow" target="_blank" href="http://electricbeach.org/?p=145"&gt;SketchFlow&lt;/a&gt; qui permet de prototyper (et de partager le résultat) mais aussi une fonction d’import Photoshop/Illustrator qui ressemble beaucoup à &lt;a rel="nofollow" title="Catalyst, techno Adobe" target="_blank" href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;Catalyist/Thermo&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Bien sûr une tonne d’annonces autour de &lt;a rel="nofollow" title="un r&amp;#xe9;sum&amp;#xe9; des annonces autour de SL3" target="_blank" href="http://timheuer.com/blog/archive/2009/03/18/silverlight-3-whats-new-a-guide.aspx"&gt;Silverlight 3&lt;/a&gt;, pas mal autour des nouveaux codecs vidéo/audio supportés ainsi que des nouveaux effets, méthodes de rendu etc. Je retiendrai deux éléments plus orientés développement : le support de Mac pour le développement avec le projet &lt;a rel="nofollow" title="silverlight developpement sous Mac OSX" target="_blank" href="http://www.eclipse4sl.org/blog/uncategorized/announcing-eclipse4sl-technology-preview-for-macintosh-platform/"&gt;Eclipse4SL&lt;/a&gt; et surtout la possibilité de faire tourner les applications &lt;strong&gt;en-dehors du navigateur (et en mode offline) pour Windows et Mac OSX&lt;/strong&gt;. Comme le dit &lt;a rel="nofollow" title="commentaire sur SL3 et WPF" target="_blank" href="http://twitter.com/migueldeicaza/status/1349702476"&gt;Miguel de&amp;#160; Icaza&lt;/a&gt;, WPF va avoir du mal à concurrencer Silverlight maintenant.&lt;/li&gt; &lt;li&gt;Des trucs pas très clairs comme &lt;a rel="nofollow" title="pr&amp;#xe9;sentation de .NET RIA Services" target="_blank" href="http://silverlight.net/forums/t/80529.aspx"&gt;.NET RIA services&lt;/a&gt;, il y a un pdf de 100 pages mais il va falloir quelques jours pour digérer ça … &lt;/li&gt; &lt;li&gt;Que serait le web sans les serveurs ? L’équipe IIS en profite pour &lt;a rel="nofollow" title="blog de l'&amp;#xe9;quipe IIS" target="_blank" href="http://blogs.iis.net/bills/archive/2009/03/18/new-experiences-mix-from-the-microsoft-web-platform.aspx"&gt;publier&lt;/a&gt; des modules pour IIS 7.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Le flux vidéo du keynote de Scott Gutherie sur le &lt;a rel="nofollow" title="site officiel de la conf&amp;#xe9;rence" target="_blank" href="http://live.visitmix.com/"&gt;site officiel&lt;/a&gt; était accompagné des tweets taggés MIX09, très intéressant pour obtenir des urls avec des infos complémentaires. &lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=42677a26-62f3-4d8b-a13a-bc9faac0df45</guid>
         <pubDate>Wed, 18 Mar 2009 15:44:06 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>NHibernate 2.1 première alpha</title>
         <link>http://www.virtew.com/post/NHibernate-21-premiere-alpha.aspx</link>
         <description>&lt;p&gt;NHibernate est le framework ORM du monde .NET, projet open source qui a connu beaucoup de maisons, la dernière en date étant &lt;a rel="nofollow" title="le site communautaire de NHibernate" target="_blank" href="http://nhforge.org"&gt;nhforge.org&lt;/a&gt;. Il a bien sûr bénéficier de la réputation de sa version Java (cette alpha correspond à la version 3.2.6 d’Hibernate en terme de fonctionnalités), mais a depuis acquis son propre eco-system avec une communauté de développeurs très grande. Le &lt;a rel="nofollow" title="release note de la 2.1" target="_blank" href="http://sourceforge.net/project/shownotes.php?release_id=668347&amp;amp;group_id=73818"&gt;release note&lt;/a&gt; est toujours aussi impressionnante, l’un des principaux apports est en fait un abandon : celui de la &lt;a rel="nofollow" title="post du blog officiel sur les bytecodes providers" target="_blank" href="http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx"&gt;dépendance vers Castle&lt;/a&gt; pour la génération de proxy (les fameux proxies du lazy-loading).&lt;/p&gt; &lt;p&gt;Le grand absent de cette version est Linq. Il n’est pas très clair si on verra un vrai provider Linq (chose pas très aisée) qui remplacera l’implémentation actuelle basée sur l’API Criteria. &lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=e299b663-9ab6-4dbe-83c3-0e1694ff932a</guid>
         <pubDate>Sun, 15 Mar 2009 10:27:44 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>S#arp Architecture, le pet shop DDD du monde .NET</title>
         <link>http://www.virtew.com/post/Sarp-Architecture-le-pet-shop-DDD-du-monde-NET.aspx</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/SarpArchitecturelepetshopDDDdumonde.NET_E139/sharp_arch.jpg_2.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="logo du projet" border="0" alt="logo du projet" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/SarpArchitecturelepetshopDDDdumonde.NET_E139/sharp_arch.jpg_thumb.jpg" width="210" height="95"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a rel="nofollow" title="article sur nhibernate" target="_blank" href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx"&gt;L’article&lt;/a&gt; de Bill McCafferty sur les bonnes pratiques dans l’utilisation de NHibernate s’est peu à peu transformé en un projet (et un framework) à la &lt;a rel="nofollow" title="d&amp;#xe9;finition d'un pet shop" target="_blank" href="http://en.wikipedia.org/wiki/Pet_shop"&gt;PetShop&lt;/a&gt; : &lt;a rel="nofollow" title="site web du projet" target="_blank" href="http://code.google.com/p/sharp-architecture/"&gt;Sharp Architecture&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;La dernière release (RC2) comporte en plus du code, un projet d’exemple autour de la base Northwind et un document de 50 pages sur les différentes couches : leur implémentation, les outils et frameworks utilisés sans oublier les considérations transverses comme la gestion des transactions. Les tests unitaires ne sont pas en reste avec l’utilisation de SQlLite pour les test de la couche de données, Rhino Mocks. &lt;/p&gt; &lt;p&gt;Cela peut paraître un peu trop liste de courses mais l’évolution du projet sous l’influence des discussions sur le &lt;a rel="nofollow" title="forum du projet" target="_blank" href="http://groups.google.com/group/sharp-architecture"&gt;forum dédié&lt;/a&gt; est intéressante et garanti je trouve un bon équilibre entre pragmatisme et pédagogie.&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=501291a9-0c5c-4235-93ff-d776bcf9f048</guid>
         <pubDate>Sat, 14 Mar 2009 08:59:27 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>SQL Data Services abandonne REST et SOAP</title>
         <link>http://www.virtew.com/post/SQL-Data-Services-abandonne-REST-et-SOAP.aspx</link>
         <description>&lt;p&gt;Depuis le début on avait un peu de mal à distinguer Windows Azure Storage et SDS. Ce dernier va fortement évolué dans la &lt;a rel="nofollow" title="annonce sur SDS" target="_blank" href="http://blogs.msdn.com/ssds/archive/2009/03/10/9469228.aspx"&gt;prochaine beta&lt;/a&gt; puisque ses API clientes actuelles (REST et SOAP) vont disparaître au profit de &lt;a rel="nofollow" title="fiche wikipedia" target="_blank" href="http://en.wikipedia.org/wiki/Tabular_Data_Stream"&gt;TDS&lt;/a&gt;, le protocole de Microsoft pour communiquer avec SQL Server. Le côté positif réside dans le support d’une API programmation très proche du SQL qu’on connait actuellement. La conférence &lt;a rel="nofollow" title="liste des sessions" target="_blank" href="https://content.visitmix.com/2009/Sessions/"&gt;MIX09&lt;/a&gt; sera l’occasion d’en connaître un peu plus. On y perd le côté ouvert/interopérable de REST/SOAP mais Microsoft annonce le support de PHP, Ruby et Java.&lt;/p&gt; &lt;p&gt;Ceci est très étonnant car la “mode” est plutôt aux bases de données cloud “schema-less” (ou entités flexibles) comme BigTable ou AmzonDB. Azure reste dans cette optique mais SDS fait un changement de cap à 180 degrés.&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=49b41aab-2312-4455-afdd-0701ac88e647</guid>
         <pubDate>Thu, 12 Mar 2009 16:14:44 -0700</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>OpenID et ASP.NET MVC</title>
         <link>http://www.virtew.com/post/OpenID-et-ASPNET-MVC.aspx</link>
         <description>&lt;p&gt;J’avais déjà entendu parler de RPX comme étant un service qui rend l’intégration d’OpenID très facile. Mais c’est en l’utilisant que je me suis rendu compte de sa simplicité. RPX se propose de jouer l’intermédiaire entre votre application et les différents fournisseurs d’identité dont OpenID. &lt;/p&gt; &lt;p&gt;Voici un diagramme issu du site de RPX qui résume très bien l’interaction entre les acteurs : &lt;/p&gt; &lt;p&gt;&lt;img title="s&amp;#xe9;quence d'appels entre les acteurs" alt="s&amp;#xe9;quence d'appels entre les acteurs" src="https://rpxnow.com/images/rpx-basic-flow.png" width="501" height="383"/&gt; &lt;/p&gt; &lt;p&gt;Voici son intégration dans une application ASP.NET MVC : &lt;/p&gt; &lt;p&gt;Le premier écran est une page d’identification, celle-ci est appelée quand un visiteur non-identifié accède au site (On pourra utiliser un attribut pour sécuriser son controller &lt;a rel="nofollow" title="s&amp;#xe9;curiser l'acc&amp;#xe8;s &amp;#xe0; son application ASP.NET MVC" target="_blank" href="http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/"&gt;comme expliqué ici&lt;/a&gt;) &lt;/p&gt; &lt;pre class="c-sharp:nogutter"&gt;&amp;lt;authentication mode="Forms"&amp;gt;
&amp;lt;forms loginUrl="~/OpenID/Login" /&amp;gt; &amp;lt;/authentication&amp;gt;&lt;/pre&gt; &lt;br /&gt; &lt;pre class="c-sharp:nogutter"&gt;
&lt;a rel="nofollow" class="rpxnow" target="_blank" href="https://a2reporting.rpxnow.com/openid/v2/signin"&gt;Sign In &lt;/a&gt;&lt;/pre&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/login_2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="page d'identification" border="0" alt="page d'identification" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/login_thumb.png" width="644" height="128"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Dans l’en-tête il suffit d’ajouter une référence à un script, on ajoute une URL de retour en paramètre qui sera ajouté à la page de retour appelée par RPX quand l’identification “tierce” sera finie (étape 5): &lt;/p&gt; &lt;pre class="c-sharp:nogutter"&gt;
&amp;lt;script src="https://rpxnow.com/openid/v2/widget" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script type="text/javascript"&amp;gt; function getUrlRPX() { return window.location.protocol + "//" + window.location.host + "/OpenID/LoginFromOpenID?ReturnUrl=&amp;lt;%=Request.QueryString["returnUrl"]%&amp;gt;"; } RPXNOW.token_url = getUrlRPX(); RPXNOW.realm = "a2reporting"; RPXNOW.overlay = true; RPXNOW.language_preference = 'fr'; RPXNOW.default_provider = 'google'; &amp;lt;/script&amp;gt;&lt;/pre&gt; &lt;br /&gt; &lt;p&gt;(ici on génère aussi une partie de l’adresse par javascript car cette application déployée sur Azure est derrière des serveurs frontaux, on ne repose donc pas sur des variables serveur comme le SERVER_PORT qui renvoie des informations interne à l'infrastructure Azure) &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/choix_fournisseur.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="choix fournisseur" border="0" alt="choix fournisseur" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/choix_fournisseur_thumb.png" width="644" height="291"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/GoogleSignIn.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="identification chez Google" border="0" alt="identification chez Google" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/OpenIDetASP.NETMVC_14221/GoogleSignIn_thumb.png" width="644" height="210"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="left"&gt;Lorsque l’utilisateur est authentifié, notre application est appelée via l’URL spécifiée avec un token passé en paramètre : &lt;a rel="nofollow" target="_blank" href="http://127.0.0.1/OpenID/LoginFromOpenID?ReturnUrl=/Reporting/&amp;amp;token=68368d24709811020394bd459b3a77cb5c48d893"&gt;http://127.0.0.1/OpenID/LoginFromOpenID?ReturnUrl=/Reporting/&amp;amp;token=68368d24709811020394bd459b3a77cb5c48d893&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Ce token nous sert à récupérer l’identité de l’utilisateur via le helper trouvé aussi sur le site de &lt;a rel="nofollow" title="wiki pour d&amp;#xe9;veloppeur" target="_blank" href="http://rpxwiki.com/Recipes&amp;nbsp;Examples&amp;nbsp;How-To's"&gt;RPX&lt;/a&gt;, Voici le code du controller : &lt;/p&gt; &lt;pre class="c-sharp:nogutter"&gt;
public ActionResult LoginFromOpenID(){ string token = Request.QueryString["token"]; string returnUrl = Request.QueryString["returnUrl"]; //user cancel the auth. on the provider website if(string.IsNullOrEmpty(token)) return RedirectToAction("Index", "Home"); //get the user info var authenticationDetails = rpxService.GetAuthenticationDetails(token, true); //check the user locally var user = Provider.ValidateUser(authenticationDetails.Email, authenticationDetails.Email); if (user) { SignIn(authenticationDetails.Email, true); if (!String.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl); } return RedirectToAction("Index", "Home"); } else { return RedirectToAction("Login", new { message = "Vous n'êtes pas autorisés à accèder à cette application" }); } }
&lt;/pre&gt; &lt;br /&gt; &lt;p&gt;On récupère le token puis les informations de l’utilisateur. Nous vérifions auprès de notre base locale d’utilisateurs que celui-ci est autorisé. Le provider de “membership” ASP.NET utilisé est celui fourni par Microsoft dans le &lt;a rel="nofollow" title="SDK pour Azure" target="_blank" href="http://www.microsoft.com/azure/sdk.mspx"&gt;SDK Azure&lt;/a&gt; et qui permet de stocker les informations de profile, session dans une table Azure Storage. &lt;/p&gt; &lt;p&gt;Bien sûr on se repose beaucoup sur un fournisseur tiers mais la simplicité de RPX amène un bon compromis. &lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=8c9d785a-f37a-4b5d-a7a4-93d2b3c5ab5a</guid>
         <pubDate>Mon, 02 Mar 2009 14:39:00 -0800</pubDate>
         <category>coding</category>
      </item>
      <item>
         <title>WPF dans Visual Studio 2010</title>
         <link>http://www.virtew.com/post/WPF-dans-Visual-Studio-2010.aspx</link>
         <description>&lt;p&gt;Lors de la PDC la prochaine version de Visual Studio a été présentée et &lt;a rel="nofollow" title="t&amp;#xe9;l&amp;#xe9;chargement de la CTP" target="_blank" href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=922b4655-93d0-4476-bda4-94cf5f8d4814&amp;amp;displaylang=en"&gt;une version “CTP”&lt;/a&gt; a même été mise à disposition. J’avais évoqué l’utilisation de WPF dans la fabrication de l’environnement de développement sans savoir à l’époque son étendue. L’éditeur de Workflow sera en WPF, et je viens d’écouter dans &lt;a rel="nofollow" target="_blank" href="http://www.hanselminutes.com/default.aspx?showID=165"&gt;l’excellent podcast de Scott Hanselman que l’éditeur de code aussi sera récrit en WPF&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;J’en ai profité pour aller voir dans la CTP et en effet on devine un nouveau rendu : &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/WPFdansVisualStudio2010_CECA/VS2010.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="nouveau rendu dans VIsual Studio 2010" border="0" alt="nouveau rendu dans VIsual Studio 2010" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/WPFdansVisualStudio2010_CECA/VS2010_thumb.png" width="244" height="167"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/WPFdansVisualStudio2010_CECA/vs2010_2.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="cela ne saute pas aux yeux :)" border="0" alt="cela ne saute pas aux yeux :)" src="http://www.virtew.com/image.axd?picture=WindowsLiveWriter/WPFdansVisualStudio2010_CECA/vs2010_2_thumb.png" width="244" height="103"/&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Mais les changements de fond sont aussi importants avec l’extensibilité (via &lt;a rel="nofollow" title="site web de MEF" target="_blank" href="http://www.codeplex.com/MEF"&gt;MEF&lt;/a&gt;) pour fournir à des tiers la possibilité d’enrichir l’éditeur. J’espère que les éditeurs comme celui de &lt;a rel="nofollow" title="site web du produit CodeRush" target="_blank" href="http://devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/"&gt;CodeRush&lt;/a&gt; font en profiter pour faire des trucs sympas !&lt;/p&gt;</description>
         <author>Matthieu Guyonnet-Duluc</author>
         <guid isPermaLink="false">http://www.virtew.com/post.aspx?id=01f7dccd-b7df-4476-9785-bee47777549a</guid>
         <pubDate>Mon, 16 Feb 2009 05:42:13 -0800</pubDate>
         <category>coding</category>
      </item>
   </channel>
</rss><!-- fe6.pipes.sp1.yahoo.com uncompressed/chunked Thu Nov  5 04:38:32 PST 2009 -->
