<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>Pierre-Emmanuel Dautreppe</title>
    <description>There is no technical difficulty. Just incompetence</description>
    <link>https://www.pedautreppe.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.6.1.0</generator>
    <language>fr-FR</language>
    <blogChannel:blogRoll>https://www.pedautreppe.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Pierre-Emmanuel DAUTREPPE</dc:creator>
    <dc:title>Pierre-Emmanuel Dautreppe</dc:title>
    <geo:lat>421,543.000000</geo:lat>
    <geo:long>5,050,871.000000</geo:long>
    <item>
      <title>Free conference : NodeJS and Azure - what you need to know</title>
      <description>&lt;div&gt;The Belgian Agile &amp;amp; .NET usergroup &lt;strong&gt;DotNetHub &lt;/strong&gt;(&lt;a href="http://www.dotnethub.be" target="_blank"&gt;http://www.dotnethub.be&lt;/a&gt;) is planning soon a free conference about &lt;strong&gt;NodeJS and Windows Azure&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt;This conference will be given by &lt;a href="http://codeofrob.com/" target="_blank"&gt;Rob Ashton&lt;/a&gt; (one of the contributor to &lt;a href="http://ravendb.net/" target="_blank"&gt;RavenDB&lt;/a&gt;) on June 05th and will be held in the &lt;strong&gt;Microsoft premises&lt;/strong&gt; in Zaventem, Belgium.&lt;/div&gt;
&lt;div&gt;Here is the conference abstract :&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;em&gt;&lt;strong&gt;NodeJS&lt;/strong&gt; is a pretty cool and fun technology to build server-side applications in; so cool in fact that Microsoft are now supporting it in &lt;strong&gt;their latest incarnation of Azure&lt;/strong&gt;.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;Let us first look at what NodeJS actually is and what it allows us to do, before building our first application and deploying it to Azure using the new tooling provided by Microsoft.&lt;/em&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The conference is free. You want more information ? You want to register ? Just have a look on &lt;a href="http://www.dotnethub.be/events/29/nodejs-and-azure-what-you-need-to-know.aspx" target="_blank"&gt;http://www.dotnethub.be/events/29/nodejs-and-azure-what-you-need-to-know.aspx&lt;/a&gt;&lt;/div&gt;</description>
      <link>https://www.pedautreppe.com/post/Free-conference-NodeJS-and-Azure-what-you-need-to-know.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Free-conference-NodeJS-and-Azure-what-you-need-to-know.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=6e82d566-80af-4db4-8978-3ad5190a394a</guid>
      <pubDate>Thu, 26 Apr 2012 23:24:00 -0600</pubDate>
      <category>.NET</category>
      <category>Training</category>
      <category>UserGroup</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=6e82d566-80af-4db4-8978-3ad5190a394a</pingback:target>
      <slash:comments>35</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=6e82d566-80af-4db4-8978-3ad5190a394a</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Free-conference-NodeJS-and-Azure-what-you-need-to-know.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=6e82d566-80af-4db4-8978-3ad5190a394a</wfw:commentRss>
    </item>
    <item>
      <title>When using Moles &amp; Stubs, we cannot access the configuration file... A workaround...</title>
      <description>&lt;h1&gt;The problem&lt;/h1&gt;
&lt;p&gt;Usually, you will use your app.config / web.config file to store some configuration. And so you will have some code depending on it. Let's take for instance :&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public class MyService
{
   public void DoSomething()
   {
      string setting = ConfigurationManager.AppSettings["SomeSetting"];
      if ( setting == null )
         throw new ConfigurationErrorsException("Your settings shall be present");
      Console.WriteLine(setting);
   }
}&lt;/pre&gt;
&lt;p&gt;and of course, you will test your code. So you will have a test DLL, that will hold both a config file, and a test.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;configuration&amp;gt;
   &amp;lt;appSettings&amp;gt;
      &amp;lt;add key="SomeSetting" value="My Setting Value" /&amp;gt;
   &amp;lt;/appSettings&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/pre&gt;
&lt;pre class="brush: c-sharp;"&gt;[TestClass]
public class UnitTest1
{
   [TestMethod]
   public void TestMethod1()
   {
      var service = new MyService();
      service.DoSomething();
   }
}&lt;/pre&gt;
&lt;p&gt;When you will write a more complete test, you will probably start using a mock framework. Personnaly my favorite ones are &lt;a title="Rhino Mock" href="http://hibernatingrhinos.com/open-source/rhino-mocks" target="_blank"&gt;Rhino Mock&lt;/a&gt; from Ayende, and &lt;a title="Moles &amp;amp; Stubs" href="http://research.microsoft.com/en-us/projects/moles/" target="_blank"&gt;Moles &amp;amp; Stubs&lt;/a&gt; that is developped by Microsoft Research. &lt;em&gt;(Note that Moles &amp;amp; Stubs is getting replaced by &lt;strong&gt;Fakes&lt;/strong&gt;&amp;nbsp;under Visual Studio 2001).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Both framework has its own benefits and disadvantage, but this is not the place for a debate. Personally, in the late years, my preference has gone to Moles &amp;amp; Stubs, for its power and simplicity. So let's say you are using Moles for your test :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(&lt;em&gt;Note that the goal here is not to show the use of Moles. So we just assumere you are using some moles in your test, and so applying the HostType attribute&lt;/em&gt;).&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[TestMethod]
[HostType("Moles")]
public void TestMethod1()
{
   var service = new MyService();
   service.DoSomething();
}&lt;/pre&gt;
&lt;p&gt;Run your test again and that time it crashes : &lt;strong&gt;your configuration file is not found anymore.&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;What happens ?&lt;/h1&gt;
&lt;p&gt;If you have already executed code from an external exe via .NET code, you may have already coped with the problem : your code is becoming the main AppDomain, and thus the searched config file correspond to your own exe and no longer to the one of the external exe. I can imagine the problem is similar here.&lt;/p&gt;
&lt;p&gt;Note that this bug exist only when you use the &lt;strong&gt;HostType("Moles")&lt;/strong&gt;&amp;nbsp;and not when you only use stubs.&lt;/p&gt;
&lt;h1&gt;What do we want ?&lt;/h1&gt;
&lt;p&gt;Let's find a workaround to that bug. Moles &amp;amp; Stubs allows you &lt;strong&gt;to mock any method of the .NET framework&lt;/strong&gt;. So we can mock also the ConfigurationManager ?&lt;/p&gt;
&lt;p&gt;Here is the idea, using moles to "mole" the ConfigurationManager in order to let him "eat" the correct configuration file.&lt;/p&gt;
&lt;p&gt;Of course, we need to do that in each test that is running with the &lt;strong&gt;HostType("Moles")&lt;/strong&gt;. So the best would be to have that code in a global location that could be applied to every single corresponding method. This is typically where we need some AOP &lt;em&gt;(Aspect Oriented Programming)&lt;/em&gt;.&lt;/p&gt;
&lt;h1&gt;The solution - Step 1&lt;/h1&gt;
&lt;p&gt;There is many AOP framework available for .NET. As far as I am concerned, I think the best one (simpler to use and more powerful) is &lt;strong&gt;&lt;a title="PostSharp - An AOP framework for .NET" href="http://www.nuget.org/packages/PostSharp" target="_blank"&gt;PostSharp&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So we want to have an attribute that can be applied to every method having the HostType attribute.&lt;/p&gt;
&lt;p&gt;So we start by referencing PostSharp using &lt;strong&gt;NuGet&lt;/strong&gt;, and we declare an attribute that will target the corresponding Test methods.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[Serializable]
[MulticastAttributeUsage(MulticastTargets.Method, AllowMultiple = false)]
public class ReconcileConfigurationManagerAttribute : OnMethodBoundaryAspect
{
   /// &amp;lt;summary&amp;gt;
   /// Returns whether the currently under investigation method shall we woven or not.
   /// We are searching any method that has the attributes [TestMethod] and [HostType("Moles")]
   /// &amp;lt;/summary&amp;gt;
   /// &amp;lt;param name="method"&amp;gt;The method being investigated&amp;lt;/param&amp;gt;
   /// &amp;lt;returns&amp;gt;True if the method shall be woven, otherwise false&amp;lt;/returns&amp;gt;
   public override bool CompileTimeValidate(MethodBase method)
   {
      if ( method.GetCustomAttributes(typeof(TestMethodAttribute), false).Length == 0 )
         return false;
      var hostType = method.GetCustomAttributes(typeof(HostTypeAttribute), false)
                           .Cast&amp;lt;HostTypeAttribute&amp;gt;()
                           .FirstOrDefault();
      if ( hostType == null || hostType.HostType != "Moles" )
         return false;
      return true;
   }
}&lt;/pre&gt;
&lt;h1&gt;Step 2 : let's reconcile the ConfigurationManager&lt;/h1&gt;
&lt;p&gt;Now we need to update the attribute so we can use Moles to let the ConfigurationManager work again. To do that, we need to override the &lt;strong&gt;OnEntry&lt;/strong&gt;&amp;nbsp;method of our attribute.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;/// &amp;lt;summary&amp;gt;
/// When entrying the method, let's mole the ConfigurationManager, so he uses the correct config file.
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name="args"&amp;gt;The execution argument&amp;lt;/param&amp;gt;
public sealed override void OnEntry(MethodExecutionArgs args)
{
   ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
   fileMap.ExeConfigFilename = args.Method.DeclaringType.Assembly.GetName().Name + ".dll.config";
   var config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
   MConfigurationManager.GetSectionString = (sectionName) =&amp;gt;
      {
         //Note that when your code is using AppSettings, you do not work with the AppSettingsSection
         //but with a NameValueCollection.
         //So we need to handle that differently
         var section = config.GetSection(sectionName);
         if ( section is AppSettingsSection )
         {
            var collection = new NameValueCollection();
            foreach ( KeyValueConfigurationElement item in ( (AppSettingsSection)section ).Settings )
               collection.Add(item.Key, item.Value);
            return collection;
         }
         return section;
      };


   base.OnEntry(args);
}&lt;/pre&gt;
&lt;p&gt;What we do here is quite simple : the application should have used the app.config file that you have defined in your test assembly. So we are just taking the name of the test assembly, and concatening ".dll.config" : this correspond to the name of the config file that should have been used. And so, when our production code is calling the method &lt;strong&gt;ConfigurationManager.GetSection&lt;/strong&gt;, we are just "redirecting" to the correct file.&lt;/p&gt;
&lt;p&gt;Note that calling the GetSection method returns you a class inheriting from ConfigurationSection. However, we need to do a special treatment for the section &lt;strong&gt;appSettings&lt;/strong&gt;. Indeed when you call &lt;strong&gt;ConfigurationManager.AppSettings&lt;/strong&gt;, you receive a &lt;strong&gt;NameValueCollection&lt;/strong&gt;&amp;nbsp;and not the &lt;strong&gt;AppSettingsSection&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;Step 3 : let's use our attribute&lt;/h1&gt;
&lt;p&gt;So now that our attribute is ready for use, we just need to use it in our test library. That's so simple : let's edit our &lt;strong&gt;AssemblyInfo.cs&lt;/strong&gt;&amp;nbsp;to apply our attribute to the whole assembly.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[assembly: ReconcileConfigurationManager]
//This line may be needed
//[assembly: MoledType(typeof(ConfigurationManager))]&lt;/pre&gt;
&lt;p&gt;PostSharp will do it's job and apply our code to any TestMethod that is using Moles. And, you have simply worked around the bug !&lt;/p&gt;
&lt;p&gt;Note that for performance reasons, Moles &amp;amp; Stubs &lt;strong&gt;does not allow to mole some methods from the code of the .NET framework&lt;/strong&gt;. To do this, you need to explicitely allow him to mole those types. That's the goal of the &lt;strong&gt;MoledTypeAttribute&lt;/strong&gt;. In some of my tests, this attribute was not needed.&lt;/p&gt;
&lt;h1&gt;Limitations&lt;/h1&gt;
&lt;p&gt;Does this solution is a complete workaround for that bug ? I need to add some more stuff.&lt;/p&gt;
&lt;h2&gt;PostSharp is partly commercial&lt;/h2&gt;
&lt;p&gt;We are relying here on PostSharp which is a commercial product (even though it has a free licence that allows you to do a lot of great stuffs). The ability of declaring the attribute on the assembly and letting him to "propagate" to any method of that assembly is called &lt;strong&gt;multicast&lt;/strong&gt;. This capability is available only with the commercial version.&lt;/p&gt;
&lt;p&gt;If you do not want to invest (&lt;em&gt;personal advice,&amp;nbsp;I do think that this product worth 10x its price, and I recommend you to buy it. You won't be able to let it aside !&lt;/em&gt;), the described solution can still be used. But you will need to set this attribute individually on each TestMethod for which you need to "correct" the Moles bug.&lt;/p&gt;
&lt;h2&gt;Moles &amp;amp; Stubs cannot moles static constructor&lt;/h2&gt;
&lt;p&gt;There is another limitation to Moles &amp;amp; Stubs. You can mole what is called "predictibly". Unfortunately, this is not the case of a static constructor that will get called once you first call a member of a class. So any code that is inside of a static constructor cannot be replaced / detoured. So even if you are using this solution, if one of your static constructor is calling ConfigurationManager, you are stuck.&lt;/p&gt;
&lt;p&gt;There is one possibility offered by Moles &amp;amp; Stubs : there is one attribute that is &lt;strong&gt;MolesEraseStaticConstructor&lt;/strong&gt;. This will simply erase the cctor for the type given in the attribute constructor. This may not be sufficient in some of your cases anyway.&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;You were in love with Moles &amp;amp; Stubs, but quite bothered by this annoying bug ? Don't be anymore ! It can worked around, simply, and quite transparently.&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/When-using-Moles-Stubs-we-cannot-access-the-configuration-file-A-workaround.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/When-using-Moles-Stubs-we-cannot-access-the-configuration-file-A-workaround.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=889c4169-379f-47ad-87b1-dffd28e96c73</guid>
      <pubDate>Wed, 18 Apr 2012 00:26:00 -0600</pubDate>
      <category>.NET</category>
      <category>AOP</category>
      <category>TDD</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=889c4169-379f-47ad-87b1-dffd28e96c73</pingback:target>
      <slash:comments>1599</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=889c4169-379f-47ad-87b1-dffd28e96c73</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/When-using-Moles-Stubs-we-cannot-access-the-configuration-file-A-workaround.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=889c4169-379f-47ad-87b1-dffd28e96c73</wfw:commentRss>
    </item>
    <item>
      <title>How to add an alert on TFS when a build does not succeed ?</title>
      <description>&lt;p&gt;So you have setup your continuous integration and every time you are doing a checkin, a new automated build is launched on your build server. Nice !&lt;/p&gt;
&lt;p&gt;You have also launched the &lt;strong&gt;Team Foundation Build Notification&lt;/strong&gt;&amp;nbsp;tool to have a small popup alert every time a build finishes and starts. Nice !&lt;/p&gt;
&lt;p&gt;But you would like to go a bit further and receive a mail with the build result every time a build fails (or let's say do not succeed).&lt;/p&gt;
&lt;h1&gt;Use the TFS' alerts&lt;/h1&gt;
&lt;p&gt;The Team Foundation Server includes a powerful alert system, but by default, you cannot do so many things.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f7%2fProjects+Alerts.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f7%2fProjects+Alerts+-+Any+build+completes.png" alt="" /&gt;&lt;/p&gt;
&lt;h1&gt;Use the Team Foundation Server Power Tools&lt;/h1&gt;
&lt;p&gt;If the Project Alerts does not allow so many things, the underlying alert system is very powerful. And you can use the &lt;strong&gt;Team Foundation Server Power Tools&lt;/strong&gt;&amp;nbsp;(&lt;a href="http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f"&gt;http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f&lt;/a&gt;) that allow a very fine control of the alerts.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f7%2fAlerts+Explorer.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You can then create a new rule like the following one :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f7%2fAlerts+Explorer+-+Alert+for+failed+builds.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Note that for the &lt;strong&gt;Send To&lt;/strong&gt;&amp;nbsp;field, you can either indicate a account name, or an email address. In the case of an account name, this correspond to an AD account, and you must have configured the email address of that person in the Active Directory.&lt;/p&gt;
&lt;h1&gt;How to customize the received email ?&lt;/h1&gt;
&lt;p&gt;All the alert process is based on XML and XSL and so you can customize the email you will received.&lt;/p&gt;
&lt;p&gt;In the above windo, you have the &lt;strong&gt;Event&lt;/strong&gt;&amp;nbsp;field, corresponding to the alert type that will be raised. In our case, this correspond to the type &lt;strong&gt;BuildCompletionEvent2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You can find in the folder&amp;nbsp;&lt;strong&gt;C:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\TFSJobAgent\Transforms&lt;/strong&gt; all the XSL that are used to transform the XML into a nice HTML or plain text email. The XSL are named with the event type. So in our case, we are interesed in the two following files :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BuildCompletionEvent2.xsl&lt;/strong&gt;&amp;nbsp;for HTML emails&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BuildCompletionEvent2.plaintextXsl&lt;/strong&gt; for plain text emails&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Now it's up to you to customize the XSL content to include for example your company logo.&lt;/div&gt;
&lt;h1&gt;Which fields are available to include in the XSL ?&lt;/h1&gt;
&lt;p&gt;It's nice to be able to customize the XSL to change its look, but it could be interesting also to include some more information.&lt;/p&gt;
&lt;p&gt;So which are the information available ?&lt;br /&gt; You can have access to the XSD in the TFS database.&lt;/p&gt;
&lt;p&gt;Just run the following query in your TFS database : &lt;br /&gt; &lt;strong&gt;select * from tbl_EventType&lt;/strong&gt;&lt;br /&gt; and you will see for each event type the available fields.&lt;/p&gt;
&lt;p&gt;If you want to really see the XML and not the XSD, you can simply&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;specify that your alert launch an plain text email&lt;/li&gt;
&lt;li&gt;replace the XSL by one that does give the XML like the following one&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: xml;"&gt;    
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:msxsl="urn:schemas-microsoft-com:xslt"
   exclude-result-prefixes="msxsl" &amp;gt;
   &amp;lt;xsl:output method="xml" indent="yes"/&amp;gt;

   &amp;lt;xsl:template match="@* | node()"&amp;gt;
      &amp;lt;xsl:copy&amp;gt;
         &amp;lt;xsl:apply-templates select="@* | node()"/&amp;gt;
      &amp;lt;/xsl:copy&amp;gt;
   &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;
&lt;/pre&gt;</description>
      <link>https://www.pedautreppe.com/post/How-to-add-an-alert-on-TFS-when-a-build-does-not-succeed-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-to-add-an-alert-on-TFS-when-a-build-does-not-succeed-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=fad2b6df-4d43-4ae8-a8d6-7b23dd448997</guid>
      <pubDate>Mon, 11 Jul 2011 10:48:00 -0600</pubDate>
      <category>TFS</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=fad2b6df-4d43-4ae8-a8d6-7b23dd448997</pingback:target>
      <slash:comments>238</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=fad2b6df-4d43-4ae8-a8d6-7b23dd448997</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-to-add-an-alert-on-TFS-when-a-build-does-not-succeed-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=fad2b6df-4d43-4ae8-a8d6-7b23dd448997</wfw:commentRss>
    </item>
    <item>
      <title>How to setup an ASP.NET unit test ?</title>
      <description>&lt;p&gt;In some cases, when you are writing a unit test, you might need to have a valid HttpContext. Fortunately, you have the ability to do that with the Visual Studio's unit tests.&lt;/p&gt;
&lt;h1&gt;Let's use a static web site&lt;/h1&gt;
&lt;p&gt;So to do that, you can simply use a local existing web site. And can define your unit test as following :&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;[TestMethod]
[HostType("ASP.NET")]
[UrlToTest("http://localhost:7778/Default.aspx")]
[AspNetDevelopmentServerHost(@"c:\temp\WebSite\", "/")]
public void MyTestAccessingHttpContext()
{
   Assert.IsNotNull(HttpContext.Current);
}&lt;/pre&gt;
&lt;p&gt;So what does that mean ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HostType&lt;/strong&gt;&amp;nbsp;specifies that you are writing an ASP.NET Unit test&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UrlToTest&lt;/strong&gt;&amp;nbsp;defined the URL of your web site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AspNetDevelopmentServerHost&lt;/strong&gt;&amp;nbsp;is optional. It's required only if the website you want to use is &lt;strong&gt;not&lt;/strong&gt; hosted in IIS. In that case, you will just specify a folder that is located on your computer and that will be mounted as a WebSite using the Visual Studio Web Server (Cassini). The port specified in the UrlToTest will be used to mount your web site.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;How to use a "dynamic" web site ?&lt;/h1&gt;
&lt;p&gt;That's pretty cool, but the main drawback is that your website must exist on your disk. So when you have this kind of test in your team, all the team members' computer must be setup the same way to be sure to find the local website. And of course, this is the same thing for you conitnuous integration server.&lt;/p&gt;
&lt;p&gt;To avoid this, you could have a website located in your solution (and so with a path that will change from environment to environment) and refer to this website. You could also have a folder defined in your test project and use it as a local web site. That's this second solution I will explain here (the first one is just similar, but even simpler).&lt;/p&gt;
&lt;h2&gt;First step : create your website&lt;/h2&gt;
&lt;p&gt;Here the usual way I create my minimal test web site.&lt;/p&gt;
&lt;p&gt;&lt;img style="border: 0px initial initial;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f6%2fTest+Project.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;My website just contain a empty Default.aspx page. The readme file is just some documentation to explain why I use this website.&lt;/p&gt;
&lt;p&gt;I use two parent folders :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;WebSite&lt;/strong&gt;&amp;nbsp;folder is the one that I will be using as a reference in my test. In my scenario, this &lt;strong&gt;must be unique&lt;/strong&gt;&amp;nbsp;(meaning that if you have several test projects, and some of them are using the same technique, just choose a unique name for each web site folder).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;__Deployment__&lt;/strong&gt;&amp;nbsp;folder is the folder where I include all my deployable artifacts that I need for my tests. This will be more explained in the Second Step.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: 15px; font-weight: bold;"&gt;Second step : deploy your website&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For now my website just exist in my solution, but I want it to be deployed for each test run. To do that, I need to update the &lt;strong&gt;testsettings &lt;/strong&gt;of my solution.&lt;/p&gt;
&lt;p&gt;In a basic scenario, we can just update the&amp;nbsp;&lt;strong&gt;Local.testsettings&lt;/strong&gt;&amp;nbsp;file that is available under &lt;strong&gt;Solution Items&lt;/strong&gt;. Of course if you have multiple "testsettings files", you may need to update all of them.&lt;/p&gt;
&lt;p&gt;&lt;img style="border: 0px initial initial;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f6%2fTestSettings.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;So what are we doing here ? We are asking MsTest to deploy, each time we are doing a test run, to deploy our "__Deployment__" folder. As a consequence, this folder will be copied to our&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Last step : use it in your test&lt;/h2&gt;
&lt;p&gt;So now when we run our test, we can have access to this website as it will be available in our current folder. So how can we transform our test code ?&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;/// &amp;lt;summary&amp;gt;
/// Initialization of the test class
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name="testContext"&amp;gt;The test execution context&amp;lt;/param&amp;gt;
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
   //Set an env. variable that can be used with AspNetDevelopmentServerHostAttribute
   Environment.SetEnvironmentVariable("DeployDirectory", testContext.DeploymentDirectory);
}

[TestMethod]
[HostType("ASP.NET")]
[UrlToTest("http://localhost:7778/Default.aspx")]
[AspNetDevelopmentServerHost(@"%DeployDirectory%\WebSite\", "/")]
public void MyTestAccessingHttpContext()
{
   Assert.IsNotNull(HttpContext.Current);
}&lt;/pre&gt;
&lt;p&gt;So in the initialization of our test (here I have chosen the &lt;strong&gt;ClassInitialize &lt;/strong&gt;to run it only once before the first test of the class), we can create an environment variable that can be used in our aspNetDevelopmentServerHost.&lt;/p&gt;
&lt;p&gt;With such a configuration, our test will work perfecly no matter which client computer or build server.&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-to-setup-an-ASPNET-unit-test-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-to-setup-an-ASPNET-unit-test-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=7828c521-dc96-4674-96a5-d9b0f04ac45f</guid>
      <pubDate>Wed, 01 Jun 2011 17:09:00 -0600</pubDate>
      <category>.NET</category>
      <category>TDD</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=7828c521-dc96-4674-96a5-d9b0f04ac45f</pingback:target>
      <slash:comments>20</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=7828c521-dc96-4674-96a5-d9b0f04ac45f</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-to-setup-an-ASPNET-unit-test-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=7828c521-dc96-4674-96a5-d9b0f04ac45f</wfw:commentRss>
    </item>
    <item>
      <title>How can we render CSS3 in a WebBrowser Control ?</title>
      <description>&lt;h1&gt;The scenario&lt;/h1&gt;
&lt;p&gt;CSS3 is released and implemented in all major browser latest version.&lt;/p&gt;
&lt;p&gt;Time to use it ! So you have defined a "nice" CSS3 page like&lt;span style="white-space: pre;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;pre class="brush: css;"&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
   &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
   &amp;lt;style type="text/css"&amp;gt;
      div
      {
         padding: 10px;
         background-color: Blue;
         border: 1px solid black;
         border-radius: 30px;
         width: 800px;
         box-shadow: 10px 10px 50px red;
      }
   &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
   &amp;lt;p&amp;gt;
      Before&amp;lt;/p&amp;gt;
   &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;
         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum et ipsum eget nibh gravida porta. Morbi vitae felis risus, sagittis egestas ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi
         pretium eleifend ultricies. Nulla ut tellus vel dui ultricies scelerisque ut at odio. Morbi sem magna, facilisis non facilisis vel, molestie non diam. Aliquam ultrices velit nec lorem venenatis sit amet ultrices justo facilisis. Vivamus posuere ultricies
         mauris, accumsan tempus nibh scelerisque eget. Curabitur sed tortor feugiat diam tincidunt ultrices. Aenean fringilla dictum risus, imperdiet rutrum nibh adipiscing non. Praesent porta massa ut risus consequat ut aliquam sapien venenatis. Phasellus
         bibendum facilisis lacus, nec suscipit ante faucibus eget. Donec dolor sem, congue vestibulum malesuada et, condimentum at ante.&amp;nbsp;
      &amp;lt;/p&amp;gt;
   &amp;lt;/div&amp;gt;
   &amp;lt;p&amp;gt;After&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;and you have checked in your favorite browser that the display is correct.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f5%2fcss3page.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;And now you want to use this page in a Windows Form / WPF application, hosting the page in a WebBrowser control.&lt;/p&gt;
&lt;h1&gt;The problem&lt;/h1&gt;
&lt;p&gt;One you have created a basic form and that you have rendered this HTML page in the WebBrowser, here is how it is rendered :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f5%2fCSS3pageInWebBrowser_ByDefault.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Well... seem that all the CSS3 functionalities have been skipped.&lt;/p&gt;
&lt;h1&gt;How the WebBrowser control works&lt;/h1&gt;
&lt;p&gt;When you use a WebBrowser control, there are several things to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The WebBrowser control use the rendering engine of Internet Explorer that is installed in you computer&lt;/li&gt;
&lt;li&gt;More precisely it uses the ieframe.dll that is located in c:\Windows\System32&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So if you have checked that you have correctly installed IE9 and that the ieframe.dll is at the correct version (meaning at least 9.0.8112.16421 for the first RTM version of IE9), the WebBrowser control will use the rendering engine of IE9.&lt;/p&gt;
&lt;p&gt;But you must know that by default, the WebBrowser control is run in "&lt;strong&gt;IE7 compatibility mode&lt;/strong&gt;", and so, quite logically, CSS3 is not supported.&lt;/p&gt;
&lt;h1&gt;How to correct it ?&lt;/h1&gt;
&lt;p&gt;Another important thing to know is that the WebBrowser control can be intensively configured thru the registry. That's what we call the &lt;strong&gt;Internet Feature Controls&lt;/strong&gt;. More info about all those features can be found on&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ee330720(v=VS.85).aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ee330720(v=VS.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And one of these features is called &lt;strong&gt;Browser Emulation&lt;/strong&gt;. It is the feature that controls the compatibility mode used by the WebBrowser control when rendering a page. The possible values are :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;7000 : IE7 Standard mode (default)&lt;/li&gt;
&lt;li&gt;8000 : IE8 mode if containing standards-based DOCTYPE&lt;/li&gt;
&lt;li&gt;8888 : IE8 mode, whatever the DOCTYPE&lt;/li&gt;
&lt;li&gt;9000 : IE9 mode if containing standards-based DOCTYPE&lt;/li&gt;
&lt;li&gt;9999 : IE9, whatever the DOCTYPE&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All info can be found on&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx#browser_emulation" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx#browser_emulation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So what do you need to do ? Just add a new DWORD value in the following registrey key:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HKEY_LOCAL_MACHINE     
&lt;ul&gt;
&lt;li&gt;SOFTWARE     
&lt;ul&gt;
&lt;li&gt;Microsoft     
&lt;ul&gt;
&lt;li&gt;Internet Explorer     
&lt;ul&gt;
&lt;li&gt;MAIN     
&lt;ul&gt;
&lt;li&gt;FeatureControl     
&lt;ul&gt;
&lt;li&gt;FEATURE_BROWSER_EMULATION&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key you need to add is the name of your executable, meaning, if your application is named "WindowsFormsApplication1"&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WindowsFormsApplication1.exe&lt;/strong&gt;&amp;nbsp;when you will run directly the executable of your application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WindowsFormsApplication1.vshost.exe&lt;/strong&gt;&amp;nbsp;when you will run your application in debug in Visual Studio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And so let's run once more our application :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f5%2fCSS3pageInWebBrowser_AfterRegistryUpdate.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Now everything is ok !&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks to &lt;a href="http://www.cnblogs.com/telnet_mike/" target="_blank"&gt;Mike Dos Zhang&lt;/a&gt; for helping me to point out this solution !&lt;/em&gt;&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-can-we-render-CSS3-in-a-WebBrowser-Control-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-can-we-render-CSS3-in-a-WebBrowser-Control-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=5502f2ad-2f05-4e43-9ff8-ec801245fa12</guid>
      <pubDate>Fri, 27 May 2011 17:37:00 -0600</pubDate>
      <category>.NET</category>
      <category>CSS</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=5502f2ad-2f05-4e43-9ff8-ec801245fa12</pingback:target>
      <slash:comments>1010</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=5502f2ad-2f05-4e43-9ff8-ec801245fa12</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-can-we-render-CSS3-in-a-WebBrowser-Control-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=5502f2ad-2f05-4e43-9ff8-ec801245fa12</wfw:commentRss>
    </item>
    <item>
      <title>How to mark a bug as "Rejected" with TFS ?</title>
      <description>&lt;p&gt;What happens if you create a new Bug in Team Foundation Server, and if you see afterwards that this is not a bug ? Usually, you would like to &lt;strong&gt;reject it&lt;/strong&gt;. But... you can't! Indeed, by default Team Foundation Server allows you to resolve a bug with one of the following reasons :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As Designed&lt;/li&gt;
&lt;li&gt;Cannot Reproduce&lt;/li&gt;
&lt;li&gt;Deferred&lt;/li&gt;
&lt;li&gt;Duplicate&lt;/li&gt;
&lt;li&gt;Fixed&lt;/li&gt;
&lt;li&gt;Obsolete&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;In some cases, none of these values can do the job.&amp;nbsp;So if this does not suit your need, let's see together how can we update the normal workflow to include this new value.&lt;/div&gt;
&lt;h1&gt;Use the Team Foundation Server Power Tools&lt;/h1&gt;
&lt;p&gt;This free Visual Studio extension can be found &lt;a href="http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f" target="_blank"&gt;here&lt;/a&gt;. It will add some nice extensions to Visual Studio to help you working with the Team Foundation Server, and above all it will add a new menu in the tool menu : &lt;strong&gt;Process Editor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Let's use it to update our workflow. First select the Work Item Type (&lt;strong&gt;WIT&lt;/strong&gt;) you want to update&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fOpenWorkItemType.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Just select the Work Item Type you want to update (here select &lt;strong&gt;Bug&lt;/strong&gt;), and you will have the following screen:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fWorkItemType+screen.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Here we are interested by two tabs :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Fields&lt;/strong&gt;&amp;nbsp;tab list all the fields that are used in the Bug Work Item Type.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Workflow&lt;/strong&gt;&amp;nbsp;tab show the the different status that the Work Item Type can hold, and the transition between each state&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Change the list of possible values for "Resolved Reason"&lt;/h1&gt;
&lt;p&gt;When you resolve a Work Item, you have a field called &lt;strong&gt;Resolved Reason&lt;/strong&gt;&amp;nbsp;that holds the reason of the resolution. In our case, we need a new value &lt;strong&gt;Rejected&lt;/strong&gt;. So how do we define it ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go on the &lt;strong&gt;Field Tab&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Resolved Reason&lt;/strong&gt;&amp;nbsp;field&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Edit&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;On the &lt;strong&gt;Field Definition&lt;/strong&gt;&amp;nbsp;window, select the &lt;strong&gt;Rules&lt;/strong&gt;&amp;nbsp;tab&lt;/li&gt;
&lt;li&gt;Edit the &lt;strong&gt;ALLOWEDVALUES&lt;/strong&gt;&amp;nbsp;field&lt;/li&gt;
&lt;li&gt;Add a new value &lt;strong&gt;Rejected&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: center;"&gt;&lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fFieldDefinition.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2farrow.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fAllowedValue+Window.jpg" alt="" /&gt;&lt;br /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2farrow.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fAdd+new+Allowed+Value.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;And here it is, you have a new resolution value, that can be used in the workflow.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note that the list we have just updated is used when performing validation of the workflow. If we do not update this list, therefore, our workflow would be valid, but when changing the resolution of a bug, we would have an error.&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;Update the workflow&lt;/h1&gt;
&lt;p&gt;So now, we can go back to the main screen and select the &lt;strong&gt;Workflow&lt;/strong&gt; tab. You should see something like :&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fWorkflow.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;What does that mean ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The bug item type has three states : Active, Resolved and Closed&lt;/li&gt;
&lt;li&gt;We have an entry point leading to the Active state&lt;/li&gt;
&lt;li&gt;We have some transitions&amp;nbsp;                
&lt;ul&gt;
&lt;li&gt;from Active to Resolved&lt;/li&gt;
&lt;li&gt;from Resolved to Active&lt;/li&gt;
&lt;li&gt;from Resolved to Close&lt;/li&gt;
&lt;li&gt;from Close to Active&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In our case, we want to add a new way of resolving a bug, so let's &lt;strong&gt;double click&lt;/strong&gt;&amp;nbsp;(or right click, and Open Details) on the transition &lt;strong&gt;from Active to Resolve &lt;/strong&gt;and let's create a new &lt;strong&gt;Transition Reason&lt;/strong&gt;.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fWorkflow+Transition.jpg" alt="" /&gt;&lt;br /&gt;&lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2farrow.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fTransition+Reason.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Now we'll need to edit this new reason. Let's go the &lt;strong&gt;Fields &lt;/strong&gt;tab       and let's create a new &lt;strong&gt;Field reference&lt;/strong&gt;. This Field Reference will       be of type &lt;strong&gt;ResolvedReason&lt;/strong&gt;&amp;nbsp;and will have two &lt;strong&gt;Rules : COPY&lt;/strong&gt;&amp;nbsp;and       &lt;strong&gt;ALLOWEDVALUE.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fTransition+Reason+-+Field+Reference.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2farrow.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fTransition+Reason+-+Field+Reference+-+Step2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;How do we parameter these two Rules ? Quite Simple. We are just copying a new value,       which is Rejected, and after we'll check that the value is within the list of the       allowed values.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fTransition+Reason+-+Field+Reference+-+Step3.jpg" alt="" /&gt; &lt;img style="vertical-align: middle;" src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fTransition+Reason+-+Field+Reference+-+Step4.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;And here we are ! We just have to check that everything is ok now.&lt;/p&gt;
&lt;h1&gt;Check that the new workflow is correct&lt;/h1&gt;
&lt;p&gt;Once we have saved our Work Item Type definition, we can open a bug and check that everything is correct.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fBug+Resolution+Status.jpg" alt="" /&gt;&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-to-mark-a-bug-as-Rejected-with-TFS-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-to-mark-a-bug-as-Rejected-with-TFS-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=f900e8b9-a644-407c-85d3-668050eb6020</guid>
      <pubDate>Thu, 21 Apr 2011 18:14:00 -0600</pubDate>
      <category>continuous integration</category>
      <category>TFS</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=f900e8b9-a644-407c-85d3-668050eb6020</pingback:target>
      <slash:comments>45</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=f900e8b9-a644-407c-85d3-668050eb6020</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-to-mark-a-bug-as-Rejected-with-TFS-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=f900e8b9-a644-407c-85d3-668050eb6020</wfw:commentRss>
    </item>
    <item>
      <title>How can you shrink your powerpoint documents ? Find quickly the source of the problem !</title>
      <description>&lt;p&gt;Recently, I was needing to publish the powerpoints coming from various speakers on my server. When I have seen the size of some powerpoints (more than 20Mo) I thought it would not be a very nice user experience if my end-users were needing to download documents of such a size.&lt;/p&gt;
&lt;h1&gt;The problem&lt;/h1&gt;
&lt;p&gt;When you deal with Powerpoint documents, you will add some medias (images, cliparts, ...) to give them a better look. And of course the more medias you add, the bigger will be your powerpoint document.&lt;/p&gt;
&lt;p&gt;As long as you work locally, this is not such a big deal. But when you need to publish your document (send it by mail, publish on internet, ...) it can bother you if you do not want your recipients or end user needing to download files of 10 or 20Mo.&lt;/p&gt;
&lt;p&gt;Do we need such a size ? Usually, no. So what can we do ?&lt;/p&gt;
&lt;h1&gt;The Microsoft solution&lt;/h1&gt;
&lt;p&gt;Powerpoint includes a way to compress all the pictures of your document. To do that, they will reduce the quality of the images (DPI) depending of the profile (print, screen, email), and also remove the cropped parts of your images. To do that,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;select one of your images&lt;/li&gt;
&lt;li&gt;do to the Picture Tools / Format menu&lt;/li&gt;
&lt;li&gt;choose Compress Pictures&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/file.axd?file=2011%2f4%2fCompress+Pictures.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p style="text-align: left; "&gt;This should normally help you to reduce your document size.&lt;/p&gt;
&lt;h1&gt;So is there a problem ?&lt;/h1&gt;
&lt;p&gt;This solution is nice but does not give you a lot of control about the document size. Let's imagine you have added some TIFF or BMP pictures in your powerpoint document (or doing some "Print Screen" and "CTRL+C"). Powerpoint will shrink them but will never point out that you have included some file format that are probably completely useless.&lt;/p&gt;
&lt;p&gt;So in my view the real solution to investigate and understand the document size is to be able to check very quickly all the media that are present in your document, and check their size. The biggest ones can so be pointed as the first one to correct !&lt;/p&gt;
&lt;h1&gt;Lets use Jarod.PowerpointAnalyser&lt;/h1&gt;
&lt;p&gt;To be able to analyse the documents, I have quickly written a tool that will analyse the content of the powerpoint to help you pointing wich medias are responsible of your document size.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;How does it work ?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select the document you want to analyse by using the &lt;strong&gt;browse&lt;/strong&gt;&amp;nbsp;button&lt;/li&gt;
&lt;li&gt;Then click on the button &lt;strong&gt;Analyse&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Check the different medias you have and their respective size&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fAnalyse+Powerpoint.JPG" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;In the given example you can clearly determine the source of the problem : 3 images of 3 and 6Mo are clearly responsible of the document size.&lt;/p&gt;
&lt;p&gt;Which image are they ? The column &lt;strong&gt;Used in slides&lt;/strong&gt;&amp;nbsp;will tell you where they are used in your powerpoint. Some explanations :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;slide17 : your image is located in the slide number 17&lt;/li&gt;
&lt;li&gt;slideMaster1 : your image is located on your first slide master&lt;/li&gt;
&lt;li&gt;slideLayout1 : each slide master can be composed on several layout (empty slide, image slide, ...). In that case you image is located on the first layout&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have several images on the same slide, you can quickly use the &lt;strong&gt;View&lt;/strong&gt;&amp;nbsp;link to get a preview of the image.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=2011%2f4%2fImage+Preview.jpg" alt="" /&gt;&lt;/p&gt;
&lt;h1&gt;How to install it ?&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Ensure you have the &lt;strong&gt;.NET framework v4.0&lt;/strong&gt;. Otherwise &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa569263" target="_blank"&gt;you can get it here&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Get the tool here&amp;nbsp;&lt;a href="https://www.pedautreppe.com/downloads/Jarod.PowerpointAnalyser - v0.1.rar"&gt;Jarod.PowerpointAnalyser - v0.1.rar (79,70 kb)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unrar the files in a folder on your computer&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Some limitations ?&lt;/h1&gt;
&lt;p&gt;I have quickly released this tool as a v0.1. So of course, it has a bunch of limitations (or bugs). Let's note :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It can analyse only PPTX files (2007 or 2010 format), as long as they have been saved in the default format (Powerpoint Presentation *.pptx)&lt;/li&gt;
&lt;li&gt;The PPTX file is locked while the tool is open&lt;/li&gt;
&lt;li&gt;If you select a file that does not exist, or that is not in the correct format, the tool will crash&lt;/li&gt;
&lt;li&gt;The "Image Preview" is available on all media, even if the media is NOT an image (a video for example). If you try to preview a media that is NOT an image, the tool will crash.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Are you interested in this tool ?&lt;/h1&gt;
&lt;p&gt;Do you think it is interesting? Is there anything missing to suit your needs ? Would you like to see another feature ? Leave a comment !&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-can-you-shrink-your-powerpoint-documents-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-can-you-shrink-your-powerpoint-documents-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=b1faeb78-5f28-41d3-857f-d318769b4741</guid>
      <pubDate>Wed, 20 Apr 2011 19:15:00 -0600</pubDate>
      <category>Office</category>
      <category>Tools</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=b1faeb78-5f28-41d3-857f-d318769b4741</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=b1faeb78-5f28-41d3-857f-d318769b4741</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-can-you-shrink-your-powerpoint-documents-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=b1faeb78-5f28-41d3-857f-d318769b4741</wfw:commentRss>
    </item>
    <item>
      <title>How to shrink an image ?</title>
      <description>&lt;p&gt;If you need to create a thumbnial on the fly of a given image, it is quite easy to do in C# as the Image object include a&amp;nbsp;&lt;span style="white-space: pre;"&gt;&lt;strong&gt;GetThumbnailImage&lt;/strong&gt; method.&lt;/span&gt;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using ( Image originalImage = Image.FromFile(@"c:\temp\originalimage.jpg") )
{
   int newWidth = originalImage.Width / 2;
   int newHeight = originalImage.Height / 2;
   Image resizedImage = originalImage.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
   resizedImage.Save(@"c:\temp\resizedimage.jpg");
}&lt;/pre&gt;
&lt;p&gt;This method works fine, but may in some cases produce images of bad quality, spacially when dealing with GIF or PNG with transparency. Indeed, it will generate a Black background behind the image. You could correct this problem by handling the resize manually :&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using ( Image originalImage = Image.FromFile(@"c:\temp\originalimage.jpg") )
{
   int newWidth = originalImage.Width / 2;
   int newHeight = originalImage.Height / 2;

   Image resizedImage = new Bitmap(newWidth, newHeight);
   using ( Graphics g = Graphics.FromImage(resizedImage) )
   {
      g.InterpolationMode = InterpolationMode.HighQualityBicubic;
      g.FillRectangle(Brushes.White, 0, 0, newWidth, newHeight);
      g.DrawImage(originalImage, 0, 0, newWidth, newHeight);
   }
   resizedImage.Save(@"c:\temp\resizedimage.jpg");
}&lt;/pre&gt;
&lt;p&gt;The resulting image will be a bit bigger (size in octet) but will handle correctly any type of image.&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-to-shrink-an-image-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-to-shrink-an-image-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=0d6bb7fd-d020-44af-8d81-f6756877c4fc</guid>
      <pubDate>Mon, 18 Apr 2011 13:57:00 -0600</pubDate>
      <category>.NET</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=0d6bb7fd-d020-44af-8d81-f6756877c4fc</pingback:target>
      <slash:comments>11</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=0d6bb7fd-d020-44af-8d81-f6756877c4fc</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-to-shrink-an-image-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=0d6bb7fd-d020-44af-8d81-f6756877c4fc</wfw:commentRss>
    </item>
    <item>
      <title>How can you determine at what date a picture was taken ?</title>
      <description>&lt;p&gt;Recently, I was needed to order all the pictures that where taken during an event, but by different photographers. In Windows Explorer you can simply add a column "Date Taken" but how can we do the same by code ?&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;private static DateTime GetDateTaken(string imagePath)
{
   using ( Image myImage = Image.FromFile(imagePath) )
   {
      PropertyItem propItem = myImage.GetPropertyItem(0x9003); // Property "Date Taken"

      //Convert date taken metadata to a DateTime object
      string sdate = Encoding.UTF8.GetString(propItem.Value).Trim();
      return DateTime.ParseExact(sdate, "yyyy:MM:dd HH:mm:ss\0", null);
   }
}&lt;/pre&gt;
&lt;p&gt;And here it is ! As simple as that !&lt;/p&gt;
&lt;p&gt;And if you want to have more information about the different property items of an image, just go to&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms534413" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ms534413&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An so if you want to order the images by date it was taken, you could use a simple LINQ query :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;string path = @"C:\Temp\MyPhotos";
string[] files = Directory.GetFiles(path, "*.jpg")
                          .OrderBy(file =&amp;gt; GetDateTaken(file)).ToArray();&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/How-can-you-determine-at-what-date-a-picture-was-taken-.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/How-can-you-determine-at-what-date-a-picture-was-taken-.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=0aaa51a7-39e9-4620-8f53-ae58b64786da</guid>
      <pubDate>Sat, 16 Apr 2011 21:45:00 -0600</pubDate>
      <category>.NET</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=0aaa51a7-39e9-4620-8f53-ae58b64786da</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=0aaa51a7-39e9-4620-8f53-ae58b64786da</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/How-can-you-determine-at-what-date-a-picture-was-taken-.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=0aaa51a7-39e9-4620-8f53-ae58b64786da</wfw:commentRss>
    </item>
    <item>
      <title>6 new tools for web developpers</title>
      <description>&lt;p&gt;Microsoft has launched 6 new products for web developpers. A wide set of tools from WebMatrix (complete and simple tool to develop and publish a website), to advanced libraries like ASP.NET MVC3 and NuGet.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d2928bc1-f48c-4e95-a064-2a455a22c8f6&amp;amp;displaylang=en" target="_blank"&gt;ASP.NET MVC 3&lt;/a&gt; (Avec entre autre un support de RAZOR) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://nuget.codeplex.com/" target="_blank"&gt;NuGet&lt;/a&gt; (Gratuit, open source pour .NET, Plus d&amp;rsquo;info &lt;a href="http://nuget.org/" target="_blank"&gt;NuGet Gallery&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;IIS Express 7.5 (&lt;a href="http://www.microsoft.com/downloads/fr-fr/details.aspx?FamilyID=abc59783-89de-4adc-b770-0a720bb21deb" target="_blank"&gt;Download &amp;amp; Info&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;SQL Server Compact Edition 4 (Gratuit,  Embedded, database engine qui ne require aucun service) &lt;/li&gt;
&lt;li&gt;Web Deploy &amp;amp; &lt;a href="http://www.iis.net/download/WebFarmFramework" target="_blank"&gt;Web Farm Framework 2.0&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://orchardproject.net/" target="_blank"&gt;Orchard 1.0&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/web/" target="_blank"&gt;WebMatrix 1.0&lt;/a&gt; (Tutoriaux en Fran&amp;ccedil;ais : &lt;a href="http://msdn.microsoft.com/fr-fr/asp.net/web-webmatrix.aspx" target="_blank"&gt;http://msdn.microsoft.com/fr-fr/asp.net/web-webmatrix.aspx&lt;/a&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To have more info about this, just follow the Scott Guthrie's blog : &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/01/13/announcing-release-of-asp-net-mvc-3-iis-express-sql-ce-4-web-farm-framework-orchard-webmatrix.aspx" target="_blank"&gt;Announcing release of ASP.NET MVC 3, IIS Express, SQL CE 4, Web Farm Framework, Orchard, WebMatrix&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/6-produits-disponibles-pour-les-developpeurs-web.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/6-produits-disponibles-pour-les-developpeurs-web.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=9684a96d-3ee1-44c4-9355-490289834149</guid>
      <pubDate>Sun, 23 Jan 2011 16:58:00 -0600</pubDate>
      <category>.NET</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=9684a96d-3ee1-44c4-9355-490289834149</pingback:target>
      <slash:comments>25</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=9684a96d-3ee1-44c4-9355-490289834149</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/6-produits-disponibles-pour-les-developpeurs-web.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=9684a96d-3ee1-44c4-9355-490289834149</wfw:commentRss>
    </item>
    <item>
      <title>Visual Studio 2010 Testing Tools</title>
      <description>&lt;p&gt;This week, on Tuesday 21th, I was in Mons in the &lt;a href="http://www.mic-belgique.be/" target="_blank"&gt;Microsoft Innovation Center &lt;/a&gt;to give a presentation about the &lt;a href="http://www.fikket.com/mic/event/215" target="_blank"&gt;Visual Studio 2010 Testing Tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As I told during the session, 3 hours to present the testing tools of Visual Studio is quite short and I add to bypass some demo. But anyway, you will find "the full version" of it on the session slide, including some additional comments on some slides. You can download them here :&amp;nbsp;&lt;a href="https://www.pedautreppe.com/file.axd?file=2010%2f9%2fVS+2010+Testing+Tools+-+vFinal+-+Published.pptx"&gt;VS 2010 Testing Tools - vFinal - Published.pptx (2,78 mb)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also had an interesting question at the end of the session&amp;nbsp;: which tool is available on which version of Visual Studio ? As it may help you to know which product version you will want to buy, here is a map of the different tools I presented.&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="3"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;&lt;th&gt;VS Pro&lt;/th&gt;&lt;th&gt;VS Premium&lt;/th&gt;&lt;th&gt;VS Ultimate&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit Tests&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coded UI Test (Web / Winforms / WPF)&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebTest&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoadTest&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Coverage&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Impact&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated Build&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&amp;nbsp;&amp;radic; (with TFS)&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic; (with TFS)&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic; (with TFS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IntelliTrace&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Manager&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&amp;radic;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you want to know more about the differences about these versions, you can go to &lt;a href="http://www.microsoft.com/visualstudio/en-us/products"&gt;http://www.microsoft.com/visualstudio/en-us/products&lt;/a&gt;&amp;nbsp;that will describe all the features and differences between the different tools.&lt;/p&gt;
&lt;p&gt;And if the conference did not answer to some question you were having about the tests, do not hesitate to contact me, or let's continue the discussion here !&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/Visual-Studio-2010-Testing-Tools.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Visual-Studio-2010-Testing-Tools.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=663bac24-c375-4c20-a8ec-ab47468147d7</guid>
      <pubDate>Thu, 23 Sep 2010 15:43:00 -0600</pubDate>
      <category>.NET</category>
      <category>Training</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=663bac24-c375-4c20-a8ec-ab47468147d7</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=663bac24-c375-4c20-a8ec-ab47468147d7</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Visual-Studio-2010-Testing-Tools.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=663bac24-c375-4c20-a8ec-ab47468147d7</wfw:commentRss>
    </item>
    <item>
      <title>David Anderson visits OCTO Technology in Paris for the second time !</title>
      <description>&lt;p&gt;For the second time, David Anderson will visit &lt;a href="http://www.octo.com" target="_blank"&gt;OCTO Technology&lt;/a&gt; in Paris in October 27th &amp;amp; 28th, to speak about Kanban.&lt;/p&gt;
&lt;p&gt;This tool, coming from the industry world, and adapted to the software development, is more and more broadly used in the agile community.&lt;/p&gt;
&lt;p&gt;This intensive 2-day Kanban workshop with the Kanban pioneer provides an introduction to Lean, Pull Systems and Kanban and will explain how established industrial engineering theory can apply to software development process.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What you will learn there ?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An introduction to Lean, Pull Systems and Kanban&lt;/li&gt;
&lt;li&gt;4 areas of focus to deliver success&lt;/li&gt;
&lt;li&gt;Value Stream Mapping&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Process Flow Tracking&lt;/li&gt;
&lt;li&gt;Implementing different classes of service&lt;/li&gt;
&lt;li&gt;Implementing a culture of continuous improvement (Kaizen)&lt;/li&gt;
&lt;li&gt;Applying established industrial engineering theory to software development process&lt;/li&gt;
&lt;li&gt;Controlling Work In Progress&lt;/li&gt;
&lt;li&gt;Identifying, classifying and managing bottlenecks&lt;/li&gt;
&lt;li&gt;Defining release and input cadence for a kanban system&lt;/li&gt;
&lt;li&gt;Using Metrics and Reporting to drive continuous improvement&lt;/li&gt;
&lt;li&gt;Establishing policies to prevent abuse and gaming of the kanban system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You are intereseted by this session ? Find all the information and subscribtion form at &lt;a href="http://www.octo.com/Formation-Kanban-avec-David-Anderson-octobre-2010.31/Evenements"&gt;http://www.octo.com/Formation-Kanban-avec-David-Anderson-octobre-2010.31/Evenements&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://www.pedautreppe.com/post/David-Anderson-visits-OCTO-Technology-in-Paris-for-the-second-time-!.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/David-Anderson-visits-OCTO-Technology-in-Paris-for-the-second-time-!.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=e795194c-37f3-419f-b665-a89f6fae2c06</guid>
      <pubDate>Wed, 22 Sep 2010 23:53:00 -0600</pubDate>
      <category>Agile</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=e795194c-37f3-419f-b665-a89f6fae2c06</pingback:target>
      <slash:comments>10</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=e795194c-37f3-419f-b665-a89f6fae2c06</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/David-Anderson-visits-OCTO-Technology-in-Paris-for-the-second-time-!.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=e795194c-37f3-419f-b665-a89f6fae2c06</wfw:commentRss>
    </item>
    <item>
      <title>Ne ratez pas la "Journée Agile - Wallonie 2010"</title>
      <description>&lt;p&gt;Pour tout savoir sur cet &amp;eacute;v&amp;egrave;nement, rendez-vous sur le site d&amp;eacute;di&amp;eacute; de l'&amp;eacute;v&amp;egrave;nement : &lt;a href="http://www.journeeagile.be/"&gt;http://www.journeeagile.be&lt;/a&gt;&amp;nbsp;&amp;nbsp;! Mais en quelques mots : &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Qu'est-ce-que c'est ?&lt;/h2&gt;
&lt;p&gt;Cette ann&amp;eacute;e, et pour la premi&amp;egrave;re fois en Wallonie, l'association &lt;a title="DotNetHub - La communaut&amp;eacute; .NET francophone" href="http://www.dotnethub.be/" target="_blank"&gt;DotNetHub&lt;/a&gt;, a d&amp;eacute;cid&amp;eacute; de mettre en place &lt;strong&gt;un grand &amp;eacute;v&amp;egrave;nement agile francophone.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'objectif est simple : &lt;br /&gt;Offrir aux spectateurs, &lt;span class="underline"&gt;en Belgique, et en fran&amp;ccedil;ais&lt;/span&gt;, une s&amp;eacute;rie de conf&amp;eacute;rences et d'ateliers sur le th&amp;egrave;me de l'agilit&amp;eacute;.&lt;/p&gt;
&lt;h2&gt;Quand et comment cela se passera-t-il ?&lt;/h2&gt;
&lt;p&gt;L'&amp;eacute;v&amp;egrave;nement se passera le &lt;strong&gt;16 Juin 2010&lt;/strong&gt; dans le centre &lt;a title="Technofutur TIC" href="http://maps.google.be/maps?hl=fr&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=technofutur&amp;amp;fb=1&amp;amp;gl=be&amp;amp;hq=technofutur&amp;amp;hnear=R%C3%A9gion+de+Bruxelles-Capitale&amp;amp;cid=0,0,15829548678870460959&amp;amp;ei=0g3gS42aI4_6_Aar4KC-Bw&amp;amp;sa=X&amp;amp;oi=local_result&amp;amp;ct=image&amp;amp;resnum=1&amp;amp;ved=0CAcQnwIwAA" target="_blank"&gt;&lt;strong&gt;TechnoFutur TIC&lt;/strong&gt; &amp;agrave; Gosselies, pr&amp;egrave;s de Charleroi, en Belgique.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L'&amp;eacute;v&amp;egrave;nement se d&amp;eacute;roulera &lt;strong&gt;de 13h &amp;agrave; 19h30&lt;/strong&gt; sur deux salles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une salle de conf&amp;eacute;rence de 60/70 personnes&lt;/li&gt;
&lt;li&gt;une salle de r&amp;eacute;union de 20/30 personnes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les sessions organis&amp;eacute;es dureront &lt;strong&gt;une heure&lt;/strong&gt;, et seront faites &lt;strong&gt;en Fran&amp;ccedil;ais&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Quel est le programme ?&lt;/h2&gt;
&lt;p&gt;Pour savoir ce que vous pourrez d&amp;eacute;couvrir lors de cet &amp;eacute;v&amp;egrave;nement, consultez &lt;a title="Le programme de la journ&amp;eacute;e Agile" href="http://www.journeeagile.be/page/programme.aspx" target="_blank"&gt;simplement le programme ici&lt;/a&gt;.&lt;br /&gt;Vous pouvez &amp;eacute;galement d&amp;eacute;couvrir une &lt;a title="La biographie des speakers de la Journ&amp;eacute;e Agile" href="http://www.journeeagile.be/page/Biographie-des-speakers.aspx" target="_blank"&gt;biographie des speakers&lt;/a&gt; que vous pourrez rencontrez lors des conf&amp;eacute;rences !&lt;/p&gt;
&lt;h2&gt;Comment s'inscrire ?&lt;/h2&gt;
&lt;p&gt;Pour pouvoir participer &amp;agrave; cet &amp;eacute;v&amp;egrave;nement, rendez-vous &lt;a title="Inscrivez-vous !" href="http://www.journeeagile.be/page/Inscription-a-la-journee-agile.aspx" target="_blank"&gt;sur la page des inscriptions&lt;/a&gt;.&lt;br /&gt;L'&amp;eacute;v&amp;egrave;nement est payant, et co&amp;ucirc;te 30&amp;euro;.&lt;br /&gt;Ce prix d'entr&amp;eacute;e comprend :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La participation &amp;agrave; l'&amp;eacute;v&amp;egrave;nement, &amp;agrave; toutes les sessions que vous d&amp;eacute;sirez&lt;/li&gt;
&lt;li&gt;Un lunch en d&amp;eacute;but d'&amp;eacute;v&amp;egrave;nement (sandwichs et boissons)&lt;/li&gt;
&lt;li&gt;Un en-cas en cours d'&amp;eacute;v&amp;egrave;nement (viennoiseries et boissons)&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://www.pedautreppe.com/post/Ne-ratez-pas-la-Journee-Agile-Wallonie-2010.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Ne-ratez-pas-la-Journee-Agile-Wallonie-2010.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=40211c62-f5fa-4510-b44a-7a3663176320</guid>
      <pubDate>Mon, 07 Jun 2010 11:27:00 -0600</pubDate>
      <category>continuous integration</category>
      <category>dotnethub</category>
      <category>General</category>
      <category>TDD</category>
      <category>Training</category>
      <category>UserGroup</category>
      <category>XP</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=40211c62-f5fa-4510-b44a-7a3663176320</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=40211c62-f5fa-4510-b44a-7a3663176320</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Ne-ratez-pas-la-Journee-Agile-Wallonie-2010.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=40211c62-f5fa-4510-b44a-7a3663176320</wfw:commentRss>
    </item>
    <item>
      <title>DotNetHub - Découvrez C# 4.0 et les principales améliorations apportées à la BCL</title>
      <description>&lt;div class="event-photo"&gt;&lt;img src="http://www.dotnethub.be/Data/Sites/1/_speakers/pierre.jpg" alt="Pierre-Emmanuel Dautreppe" /&gt;&lt;/div&gt;
&lt;div class="event-titre"&gt;&lt;strong&gt;Session n&amp;deg;2&lt;/strong&gt; &amp;agrave; Mons, &lt;strong&gt;Jeudi 04 Mars 2010&lt;/strong&gt;&lt;br /&gt; &lt;strong&gt;Conf&amp;eacute;rence&lt;/strong&gt; par &lt;strong&gt;Pierre-Emmanuel Dautreppe&lt;/strong&gt; de Thales Belgium&lt;/div&gt;
&lt;div class="event-description"&gt;&lt;span class="event-titre"&gt;Description de la session :&lt;/span&gt;
&lt;p&gt;Alors que la sortie officielle de Visual Studio 2010 et du framework 4.0 est pr&amp;eacute;vue pour le 12 Avril 2010, et que le langage arrive avec de nouvelles r&amp;eacute;volutions, il est temps d'en explorer les am&amp;eacute;liorations.&lt;/p&gt;
&lt;p&gt;Au cours de cette conf&amp;eacute;rence, nous aborderons donc les points suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Co &amp;amp; Contra Variance&lt;/strong&gt; des types g&amp;eacute;n&amp;eacute;riques&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Param&amp;egrave;tres nomm&amp;eacute;es et optionnels&lt;/strong&gt; des m&amp;eacute;thodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Types dynamiques&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Simplification pour l'&lt;strong&gt;interop&amp;eacute;rabilit&amp;eacute; COM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Am&amp;eacute;liorations apport&amp;eacute;es &amp;agrave; la &lt;strong&gt;BCL&lt;/strong&gt; &lt;em&gt;(Base Class Library)&lt;/em&gt; 
&lt;ul&gt;
&lt;li&gt;D&amp;eacute;couverte de la classe &lt;strong&gt;Tuple&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Quelques am&amp;eacute;liorations apport&amp;eacute;es &amp;agrave; &lt;strong&gt;System.IO&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;D&amp;eacute;couverte des &lt;strong&gt;fichiers mapp&amp;eacute;s en m&amp;eacute;moire&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Introduction &amp;agrave; &lt;strong&gt;CodeContracts&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Introduction &amp;agrave; &lt;strong&gt;PFX&lt;/strong&gt; &lt;em&gt;(Parallel Framework Extensions)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Pr&amp;eacute;sentation du type &lt;strong&gt;BigInteger&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="event-description"&gt;&lt;span class="event-titre"&gt;Niveau requis :&lt;/span&gt;
&lt;p&gt;La session est ouverte &amp;agrave; tous, n&amp;eacute;anmoins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une connaissance de C# 2.0 ou sup&amp;eacute;rieure est fortement conseill&amp;eacute;e&lt;/li&gt;
&lt;li&gt;avoir d&amp;eacute;j&amp;agrave; travaill&amp;eacute; avec la r&amp;eacute;flexion et l'interop&amp;eacute;rablit&amp;eacute; COM (excel / word / ...) est un plus pour suivre plus facilement les exemples &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="event-description"&gt;&lt;span class="event-titre"&gt;A propos de Pierre-Emmanuel Dautreppe :&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Pierre-Emmanuel Dautreppe est un des co-fondateurs de &lt;a href="http://www.dotnethub.be/"&gt;DotNetHub&lt;/a&gt;.&lt;br /&gt; Pour plus d'informations, rendez-vous sur le &lt;a title="les fondateurs de DotNetHub" href="http://www.dotnethub.be/membres"&gt;la page de pr&amp;eacute;sentation des fondateurs de l'association&lt;/a&gt;&lt;/p&gt;
&lt;div class="event-information"&gt;&lt;span class="event-titre"&gt;Lieu de la session :&lt;/span&gt; 
&lt;table border="0" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Adresse &lt;/th&gt;
&lt;td class="event-body-address"&gt;Microsoft Innovation Center &lt;em&gt;(1er &amp;eacute;tage)&lt;/em&gt;&lt;br /&gt; Boulevard Initialis, 1&lt;br /&gt; 7000 Mons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Horaires &lt;/th&gt;
&lt;td colspan="2"&gt;La salle sera ouverte &lt;strong&gt;&amp;agrave; partir de 18h00&lt;/strong&gt;&lt;br /&gt; La session aura lieu de &lt;strong&gt;18h30 &amp;agrave; 20h30&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Catering &lt;/th&gt;
&lt;td colspan="2"&gt;Une collation (sandwichs et boissons) sera propos&amp;eacute;e en cours de session&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;em&gt;Un remerciement tout particulier au &lt;a href="http://www.mic-belgique.be/" target="_blank"&gt;Microsoft Innovation Center&lt;/a&gt; de nous accueillir pour cette session !&lt;/em&gt;&lt;br /&gt; &lt;br /&gt;&lt;/div&gt;
&lt;div class="event-information"&gt;&lt;span class="event-titre"&gt;Concours :&lt;/span&gt;
&lt;p&gt;Les &lt;a href="http://www.microsoft.com/belux/techdays/2010/default.aspx"&gt;Tech Days 2010&lt;/a&gt; ont bient&amp;ocirc;t lieu, et &lt;a href="http://www.dotnethub.be/"&gt;l'&amp;eacute;quipe de DotNetHub&lt;/a&gt; sera sur place avec un stand pour promouvoir son activit&amp;eacute;.&lt;br /&gt; A cette occasion, nous avons le plaisir d'&lt;strong&gt;offrir une entr&amp;eacute;e&lt;/strong&gt; aux &lt;a href="http://www.microsoft.com/belux/techdays/2010/default.aspx"&gt;Tech Days 2010&lt;/a&gt; &amp;agrave; l'un d'entre vous !&lt;br /&gt; &lt;strong&gt;Un concours&lt;/strong&gt; sera organis&amp;eacute; de fa&amp;ccedil;on &amp;agrave; choisir le vainqueur !&lt;/p&gt;
&lt;img src="http://www.dotnethub.be/Data/Sites/1/_otherevents/techdays2010.png" alt="Tech Days 2010" /&gt;&lt;/div&gt;</description>
      <link>https://www.pedautreppe.com/post/DotNetHub-Decouvrez-C-40-et-les-principales-ameliorations-apportees-a-la-BCL.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/DotNetHub-Decouvrez-C-40-et-les-principales-ameliorations-apportees-a-la-BCL.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=cfc7fd59-32c8-4246-8634-74a4d90c100f</guid>
      <pubDate>Sun, 14 Feb 2010 14:08:00 -0600</pubDate>
      <category>dotnethub</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=cfc7fd59-32c8-4246-8634-74a4d90c100f</pingback:target>
      <slash:comments>10</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=cfc7fd59-32c8-4246-8634-74a4d90c100f</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/DotNetHub-Decouvrez-C-40-et-les-principales-ameliorations-apportees-a-la-BCL.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=cfc7fd59-32c8-4246-8634-74a4d90c100f</wfw:commentRss>
    </item>
    <item>
      <title>DotNetHub - Téléchargez les slides de la session de 'Peli' de Halleux</title>
      <description>&lt;p&gt;
Le 20 Janvier, Jonathan &amp;#39;Peli&amp;#39; de Halleux &amp;eacute;tait parmi nous pour pr&amp;eacute;senter Stubs, Moles et Pex. 
&lt;/p&gt;
&lt;p&gt;
Pour une premi&amp;egrave;re session, nous pouvons dire que c&amp;#39;&amp;eacute;tait un succ&amp;egrave;s ! Nous avons mis &amp;agrave; jour&amp;nbsp;&lt;a href="http://www.dotnethub.be/agenda/stubs-moles-et-pex-test-unitaires-isole-et-parametrise" target="_blank"&gt;la page descriptive de l&amp;#39;&amp;eacute;v&amp;egrave;nement&lt;/a&gt; afin que vous puissiez trouver les photos de l&amp;#39;&amp;eacute;v&amp;egrave;nement et les slides de la session. 
&lt;/p&gt;
&lt;p&gt;
Continuez &amp;agrave; nous suivre et &amp;agrave; parler de nous autour de vous ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/DotNetHub-Telechargez-les-slides-de-la-session-de-Peli-de-Halleux.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/DotNetHub-Telechargez-les-slides-de-la-session-de-Peli-de-Halleux.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=6a0f1db9-e883-41ed-a8c3-e10f04cfaa5b</guid>
      <pubDate>Sun, 07 Feb 2010 18:07:00 -0600</pubDate>
      <category>dotnethub</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=6a0f1db9-e883-41ed-a8c3-e10f04cfaa5b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=6a0f1db9-e883-41ed-a8c3-e10f04cfaa5b</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/DotNetHub-Telechargez-les-slides-de-la-session-de-Peli-de-Halleux.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=6a0f1db9-e883-41ed-a8c3-e10f04cfaa5b</wfw:commentRss>
    </item>
    <item>
      <title>DotNetHub, un nouveau user group en Wallonie, ciblant les technologies .NET et les méthodologies Agiles</title>
      <description>&lt;p&gt;
&lt;em&gt;Searching for an english version to have details about this user group ? Go&amp;nbsp;to look&amp;nbsp;on &lt;a href="http://blog.yoot.be/index.php/2009/12/14/announcing-dotnethub/" target="_blank"&gt;the blog of Steve&amp;nbsp;here&lt;/a&gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;h1&gt;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;, c&amp;rsquo;est quoi ?&lt;/h1&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;&lt;/strong&gt; est un nouveau user group qui vient de voir le jour.&lt;br /&gt;
Cr&amp;eacute;&amp;eacute; par un groupe de francophones, ce user group a pour vocation &lt;strong&gt;l&amp;rsquo;apprentissage, le partage et l&amp;rsquo;&amp;eacute;change de connaissance en Fran&amp;ccedil;ais&lt;/strong&gt; autour &lt;strong&gt;des technologies .NET et des m&amp;eacute;thodologies Agile&lt;/strong&gt;.&lt;br /&gt;
&lt;strong&gt;Notre objectif ?&lt;/strong&gt;&amp;nbsp;Parcourir la Wallonie et les terres francophones, pour partager avec vous et dans la langue de Moli&amp;egrave;re les sujets br&amp;ucirc;lants qui feront de vous et de la Wallonie un partenaire majeur dans le monde informatique d&amp;rsquo;aujourd&amp;rsquo;hui.&lt;br /&gt;
Ce user group a deux vocations 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;strong&gt;Technique&lt;/strong&gt; pour la partie .net &amp;agrave; destination des d&amp;eacute;veloppeurs, architectes, chefs de projets, ... 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;strong&gt;M&amp;eacute;thodologique&lt;/strong&gt; pour la partie agile toujours &amp;agrave; destination des d&amp;eacute;veloppeurs et profils techniques, mais &amp;eacute;galement aux d&amp;eacute;cideurs, responsables produits ou tout autre entrepreneur d&amp;eacute;sireux de se lancer dans la cr&amp;eacute;ation d&amp;rsquo;un outil informatique 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Bref nous nous adressons&amp;nbsp;&amp;agrave; tout ceux qui de pr&amp;egrave;s ou de loin interragissent avec une &amp;eacute;quipe informatique et veulent collaborer sur le projet.Nous traiterons de sujets aussi vari&amp;eacute;s que&amp;nbsp; 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	les langages de d&amp;eacute;veloppement (C# par exemple) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	les frameworks existants autour de .NET (Silverlight, ASP.NET MVC, Sync framework, &amp;hellip;), 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	l&amp;rsquo;architecture (SOA, Domain Driven Design, Domain Specific Languages, &amp;hellip;)&amp;nbsp; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	les pratiques des m&amp;eacute;thodologies Agiles (eXtreme Programming, &amp;hellip;) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	le pilotage de projet, la gestion des relations client-fournisseur 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;, c&amp;#39;est qui ?&lt;/h1&gt;
&lt;p&gt;
&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt; c&amp;#39;est un groupe de &lt;a href="http://www.dotnethub.be/membres" target="_blank"&gt;6 francophones&lt;/a&gt; travaillant en .NET et / ou dans les m&amp;eacute;thodes Agiles depuis de nombreuses ann&amp;eacute;es, tous mus par une m&amp;ecirc;me passion : apprendre et transmettre ! 
&lt;/p&gt;
&lt;p&gt;
Mais surtout, &lt;strong&gt;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;, c&amp;rsquo;est vous !&lt;/strong&gt; &lt;br /&gt;
Vous qui travaillez d&amp;eacute;j&amp;agrave; (ou qui travaillerez demain) en .NET en Agile.&lt;br /&gt;
Vous qui voulez apprendre et &amp;eacute;changer autour de ces technologies.&lt;br /&gt;
Vous, qui viendrez vous connecter au Hub et le faire vivre ! 
&lt;/p&gt;
&lt;h1&gt;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;, que proposons-nous ?&lt;/h1&gt;
&lt;p&gt;
&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt; c&amp;rsquo;est beaucoup de choses, mais surtout un portail, des conf&amp;eacute;rences, des dojos et des forums ouverts. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Un portail d&amp;rsquo;informations :&lt;/strong&gt;&lt;br /&gt;
Sur le site de &lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt; (&lt;a href="http://www.dotnethub.be/"&gt;http://www.dotnethub.be/&lt;/a&gt;), vous pourrez trouver toute une s&amp;eacute;rie d&amp;rsquo;informations via des news, blogging, articles, des supports de conf&amp;eacute;rences ou encore des podcasts. &lt;br /&gt;
Ces diff&amp;eacute;rentes ressources seront publi&amp;eacute;es en Fran&amp;ccedil;ais ou en Anglais. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Des conf&amp;eacute;rences :&lt;/strong&gt;&lt;br /&gt;
A intervalle r&amp;eacute;gulier,&amp;nbsp;&lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt; organisera des conf&amp;eacute;rences traitant de nos diff&amp;eacute;rents sujets de pr&amp;eacute;dilection. Ces conf&amp;eacute;rences seront donn&amp;eacute;es soit par les membres de &lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;, soit par des speakers nationaux et internationaux, mais toujours en Fran&amp;ccedil;ais.&lt;br /&gt;
De m&amp;ecirc;me qu&amp;rsquo;un s&amp;eacute;isme arrive rarement seul, des r&amp;eacute;pliques de ces conf&amp;eacute;rences pourront se propager en Wallonie, &amp;agrave; votre demande (Contactez nous sur &lt;a href="mailto:board@dotnethub.be"&gt;board@dotnethub.be&lt;/a&gt;&amp;nbsp;?).&lt;br /&gt;
Attention, le nombre de place sera limit&amp;eacute; &amp;agrave; chaque conf&amp;eacute;rence. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Des dojos :&lt;/strong&gt;&lt;br /&gt;
En arts martiaux, le dojo est la salle d&amp;rsquo;entrainement. Et comme la connaissance vient de la pratique, nous organiserons r&amp;eacute;guli&amp;egrave;rement des dojos (ou ateliers) o&amp;ugrave; les diff&amp;eacute;rents participants mettront en application ensemble une technologie, un framework, &amp;hellip;, et ce sous les conseils d&amp;rsquo;un facilitateur de session. On peut voir ces dojos comme des sessions de travaux dirig&amp;eacute;s. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Des forums ouverts :&lt;/strong&gt;&lt;br /&gt;
L&amp;rsquo;association internationale &lt;a href="http://www.oif.com/" target="_blank"&gt;Open Information Foundation&lt;/a&gt; a d&amp;eacute;mocratis&amp;eacute; les &lt;em&gt;Open Space Discussion&lt;/em&gt; : s&amp;eacute;ances de discussion ouvertes dont les participants sont avant tout les acteurs.&lt;br /&gt;
Comme nous pensons que le royaume est couvert d&amp;rsquo;experts (nous, vous, le d&amp;eacute;veloppeur &amp;agrave; c&amp;ocirc;t&amp;eacute; de vous dont nous n&amp;rsquo;avions malheureusement pas l&amp;rsquo;adresse), et que l&amp;rsquo;on apprend encore plus efficacement avec un vrai retour d&amp;rsquo;exp&amp;eacute;rience et une discussion &amp;agrave; b&amp;acirc;tons rompus, nous organiserons &amp;eacute;galement ce type de session.&lt;br /&gt;
C&amp;rsquo;est vous qui pourrez proposer le sujet de ces sessions. 
&lt;/p&gt;
&lt;h1&gt;Vous voulez participer ?&lt;/h1&gt;
&lt;p&gt;
Que ce soit comme participant (spectateur), speaker ou encore sponsor, &lt;strong&gt;vous &amp;ecirc;tes les bienvenus&lt;/strong&gt; ! C&amp;#39;est &lt;strong&gt;vous&lt;/strong&gt; qui ferez vivre &lt;a href="http://www.dotnethub.be" target="_blank"&gt;DotNetHub&lt;/a&gt;. Aller sur &lt;a href="http://www.dotnethub.be" target="_blank"&gt;notre site&lt;/a&gt; ou contactez-nous sur &lt;a href="mailto:board@dotnethub.be"&gt;board@dotnethub.be&lt;/a&gt; ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/DotNetHub-un-nouveau-user-group-en-Wallonie-ciblant-les-technologies-NET-et-les-methodologies-Agiles.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/DotNetHub-un-nouveau-user-group-en-Wallonie-ciblant-les-technologies-NET-et-les-methodologies-Agiles.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=920d4e59-3b80-4290-9d60-8955b3262477</guid>
      <pubDate>Tue, 15 Dec 2009 00:17:00 -0600</pubDate>
      <category>dotnethub</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=920d4e59-3b80-4290-9d60-8955b3262477</pingback:target>
      <slash:comments>490</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=920d4e59-3b80-4290-9d60-8955b3262477</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/DotNetHub-un-nouveau-user-group-en-Wallonie-ciblant-les-technologies-NET-et-les-methodologies-Agiles.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=920d4e59-3b80-4290-9d60-8955b3262477</wfw:commentRss>
    </item>
    <item>
      <title>Generating fields in an existing class - Using PostSharp 1.5</title>
      <description>&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;
In many scenario, you will want to generate fields in an existing class of an existing assembly. Let&amp;#39;s imagine for example that you want to do some lazy loading in your classes. As a consequence, in all of your properties you will have some code checking if your private backing field has already been loaded or not. For that, you will have two solutions : look the nullity of your backing field, or look a boolean variable &amp;quot;hasBeenLoaded&amp;quot;. This second solution is the best. Indeed the nullity can be a valid value and retreiving a &amp;quot;null&amp;quot; from your database shall prevent you from doing another get in your database. 
&lt;/p&gt;
&lt;p&gt;
Of course, this solution will result in a lots of cumbersome code that you will need to propagate in all of your classes. So you will probably think &amp;quot;aspect&amp;quot; and so use an AOP framework like &lt;a href="http://www.postsharp.org/" target="_blank"&gt;PostSharp&lt;/a&gt; to do all of this plumbing code. You will find many posts on Internet speaking of dealing with LazyLoading functionality in PostSharp, but they usually deal with the nullity of the backing field. 
&lt;/p&gt;
&lt;p&gt;
So how can we use PostSharp &lt;em&gt;(I will use the 1.5 version for this example. The version 2.0 of PostSharp will probably simplify this solution&lt;/em&gt;) to generate a boolean field ? 
&lt;/p&gt;
&lt;p&gt;
This example &lt;em&gt;(that should be seen more like a proof of concept&lt;/em&gt;) will probably make you think of many other cases where you will need to generate some code in an existing class. Here we will generate a simple variable in a class, but the code can be easily adapted to generate a field per existing property. 
&lt;/p&gt;
&lt;h1&gt;Let&amp;#39;s create an aspect&lt;/h1&gt;
&lt;p&gt;
With PostSharp, many high-level aspects already exist and they will be sufficient for many of your scenarios. However for code generation, you will need to go a bit more low level. 
&lt;/p&gt;
&lt;p&gt;
So in your project you will need to add a reference to &lt;strong&gt;PostSharp.Public&lt;/strong&gt; (in the GAC) and to &lt;strong&gt;PostSharp.Core&lt;/strong&gt; (that can be found in the installation folder of PostSharp). Now you can create your attribute : 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;AttributeUsage&lt;/span&gt;(&lt;span class="codeClass"&gt;AttributeTargets&lt;/span&gt;.Class, AllowMultiple = &lt;span class="codeKeyword"&gt;false&lt;/span&gt;, Inherited = &lt;span class="codeKeyword"&gt;false&lt;/span&gt;)] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;MulticastAttributeUsage&lt;/span&gt;(&lt;span class="codeClass"&gt;MulticastTargets&lt;/span&gt;.Class, AllowMultiple = &lt;span class="codeKeyword"&gt;false&lt;/span&gt;)] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;RequirePostSharp&lt;/span&gt;(&lt;span class="codeString"&gt;&amp;quot;InjectCodeAttributePlugin&amp;quot;&lt;/span&gt;, &lt;span class="codeString"&gt;&amp;quot;InjectCodeAttributeTask&amp;quot;&lt;/span&gt;)] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt; : &lt;span class="codeClass"&gt;MulticastAttribute&lt;/span&gt; { } 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
With the &lt;strong&gt;AttributeUsage&lt;/strong&gt; attribute, I specify that this attribute will target only classes, and the &lt;strong&gt;MulticastAttributeUsage&lt;/strong&gt; attribute tells that only the tagged class will be &amp;quot;aspected&amp;quot; (&lt;em&gt;I could here decide that when I put my attribute on a class, it will get automatically propagated to all properties&lt;/em&gt;). I also specify the &lt;strong&gt;RequirePostSharp&lt;/strong&gt; attribute. Indeed as we work low-level, we need to tell PostSharp what to do when seeing this attribute. So in this atribute, we specify the &lt;strong&gt;plugin file&lt;/strong&gt; and &lt;strong&gt;the task&lt;/strong&gt; related to our attribute. 
&lt;/p&gt;
&lt;p&gt;
The plugin file can be seen like a configuration file, listing tasks to perform and dependencies between them. Let&amp;#39;s see the file we will create in our case. In our attribute, we have specified &lt;strong&gt;InjectCodeAttributePlugin&lt;/strong&gt;, so it means that PostSharp will look for a file named &lt;strong&gt;InjectCodeAttributePlugin.psplugin&lt;/strong&gt;. Let&amp;#39;s create such a file in our project: 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="codeXmlElement"&gt;xml&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;version&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;encoding&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt; ?&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PlugIn&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;xmlns&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;http://schemas.postsharp.org/1.0/configuration&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;SearchPath&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;Directory&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;bin/{$Configuration}&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;TaskType&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;Name&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;InjectCodeAttributeTask&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;Implementation&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;LowLevelAspect.InjectCodeAttributeTask, LowLevelAspect&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;Dependency&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt; &lt;/span&gt;&lt;span class="codeXmlAttribute"&gt;TaskType&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;=&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;CodeWeaver&lt;/span&gt;&amp;quot;&lt;span class="codeXmlAttributeValue"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span class="codeXmlElement"&gt;TaskType&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PlugIn&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
What does it say ? Simply that the task &lt;strong&gt;InjectCodeAttributeTask&lt;/strong&gt; (the name we specified in the RequirePostSharp attribute) will be implemented by a class of the same name, in a specific assembly and namespace. We also specify that our task will depend&amp;nbsp;on a task called &lt;strong&gt;CodeWeaver&lt;/strong&gt;. This is an out-of-the-box task of PostSharp that allow us to re-use the current weaver process. It&amp;#39;s a best practice for nearly all the low level tasks you will create. 
&lt;/p&gt;
&lt;h1&gt;Let&amp;#39;s create a task&lt;/h1&gt;
&lt;p&gt;
So what does the task ? In my view, it can be seen as an orchestrator (or provider) of &lt;em&gt;advices.&amp;nbsp;&lt;/em&gt;And an advice&amp;nbsp;is the object that will inject &lt;em&gt;(weave)&lt;/em&gt; code in our class. Remember that we are doing low level aspects. So when we speak of code, we mean &lt;em&gt;&lt;strong&gt;IL code&lt;/strong&gt;&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
Our task is an &lt;strong&gt;IAdviceProvider&lt;/strong&gt;, meaning that it will provide PostSharp with the different advices we want to define (only one in our case : the one responsible for generating a new field). So the task&amp;#39;s responsability is limited to two things: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;As the task knows on which specific member it&amp;#39;s weaving (type, method, ...), it can extract everything our advices&amp;nbsp;will need for injection (types, methods, ...) &lt;/li&gt;
	&lt;li&gt;Iterate thru all the attributes (and attribute&amp;#39;s targets) we have specified in our code to create the advices. Here is how we deal with that : &lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;internal&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;InjectCodeAttributeTask&lt;/span&gt; : &lt;span class="codeClass"&gt;Task&lt;/span&gt;, &lt;span class="codeClass"&gt;IAdviceProvider&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; Initialize the task. &lt;/span&gt;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; This is where we should extract some types or methods our advices will use&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;protected&lt;/span&gt; &lt;span class="codeKeyword"&gt;override&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Initialize() 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;base&lt;/span&gt;.Initialize(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; &lt;span class="codeClass"&gt;IAdviceProvider&lt;/span&gt;.ProvideAdvices(&lt;span class="codeClass"&gt;Weaver&lt;/span&gt; codeWeaver) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// Gets the dictionary of all custom attributes and more specifically, extract our attribute&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; annotationRepository = &lt;span class="codeClass"&gt;AnnotationRepositoryTask&lt;/span&gt;.GetTask(&lt;span class="codeKeyword"&gt;this&lt;/span&gt;.Project); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; customAttributeEnumerator 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; = annotationRepository.GetAnnotationsOfType(&lt;span class="codeKeyword"&gt;typeof&lt;/span&gt;(&lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt;), &lt;span class="codeKeyword"&gt;false&lt;/span&gt;); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// For each instance of our InjectCodeAttribute&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;while&lt;/span&gt; ( customAttributeEnumerator.MoveNext() ) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// Gets a reference to the attribute and then the type to which it applies &lt;/span&gt;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// (Remember the MulticastAttributeUsage targets types !)&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt; attribute 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; = (&lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt;) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;CustomAttributeHelper&lt;/span&gt;.ConstructRuntimeObject(customAttributeEnumerator.Current.Value, 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.Project.Module); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; type = (&lt;span class="codeClass"&gt;TypeDefDeclaration&lt;/span&gt;)customAttributeEnumerator.Current.TargetElement; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// And we can add our advices&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; codeWeaver.AddTypeLevelAdvice(&lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;AddFieldAdvice&lt;/span&gt;(&lt;span class="codeKeyword"&gt;this&lt;/span&gt;, attribute, type), 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;JoinPointKinds&lt;/span&gt;.AfterInstanceInitialization, 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;Singleton&lt;/span&gt;&amp;lt;&lt;span class="codeClass"&gt;TypeDefDeclaration&lt;/span&gt;&amp;gt;(type)); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Note that we will complete later on the &lt;strong&gt;Initialize&lt;/strong&gt; method. The &lt;strong&gt;JoinPointKinds &lt;/strong&gt;enum of the &lt;strong&gt;AddTypeLevelAdvice&lt;/strong&gt; is useless in our case. Its goal is to tell PostSharp where we want to inject code in the methods or classes. In our case creating our fields is independant of the existing code so we can be agnostic of the present code and so we just choose one of type-level JoinPointKinds. 
&lt;/p&gt;
&lt;p&gt;
So what do we want to generate ?&amp;nbsp;We said a boolean field that can logically be decorated with an attribute &lt;strong&gt;CompilerGenerated&lt;/strong&gt;. This is typically the kind of information we need for the &lt;strong&gt;Initialize&lt;/strong&gt; method. Let&amp;#39;s extract these informations. 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;internal&lt;/span&gt; &lt;span class="codeClass"&gt;ITypeSignature&lt;/span&gt; SystemBoolean; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;internal&lt;/span&gt; &lt;span class="codeClass"&gt;IMethod&lt;/span&gt; CompilerGeneratedAttributeCtor; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; Initialize the task. &lt;/span&gt;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; This is where we should extract some types or methods our advices will use&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;protected&lt;/span&gt; &lt;span class="codeKeyword"&gt;override&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Initialize() 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;base&lt;/span&gt;.Initialize(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; module = &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.Project.Module; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//1. Extract the System.Boolean type&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.SystemBoolean = module.FindType(&lt;span class="codeKeyword"&gt;typeof&lt;/span&gt;(&lt;span class="codeKeyword"&gt;bool&lt;/span&gt;), &lt;span class="codeClass"&gt;BindingOptions&lt;/span&gt;.Default); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//2. Extract the constructor (ie the method named &amp;quot;.ctor&amp;quot;) of the CompilerGeneratedAttribute&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; compilerGeneratedAttribute = module.FindType(&lt;span class="codeKeyword"&gt;typeof&lt;/span&gt;(&lt;span class="codeClass"&gt;CompilerGeneratedAttribute&lt;/span&gt;), &lt;span class="codeClass"&gt;BindingOptions&lt;/span&gt;.Default); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.CompilerGeneratedAttributeCtor = module.FindMethod(compilerGeneratedAttribute, &lt;span class="codeString"&gt;&amp;quot;.ctor&amp;quot;&lt;/span&gt;); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;em&gt;Note that for an attribute, we are not interested by the type itself, but by its constructor.&lt;/em&gt; 
&lt;/p&gt;
&lt;h1&gt;Let&amp;#39;s create our advice&lt;/h1&gt;
&lt;p&gt;
So let&amp;#39;s go to our advice ! This is the class that will generate the field. This is the easiest part of our job ! 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;internal&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;AddFieldAdvice&lt;/span&gt; : &lt;span class="codeClass"&gt;IAdvice&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeClass"&gt;InjectCodeAttributeTask&lt;/span&gt; task; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt; attribute; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeClass"&gt;TypeDefDeclaration&lt;/span&gt; type; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; AddFieldAdvice(&lt;span class="codeClass"&gt;InjectCodeAttributeTask&lt;/span&gt; task, &lt;span class="codeClass"&gt;InjectCodeAttribute&lt;/span&gt; attribute, &lt;span class="codeClass"&gt;TypeDefDeclaration&lt;/span&gt; type) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.task = task; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.attribute = attribute; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.type = type; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;int&lt;/span&gt; &lt;span class="codeClass"&gt;IAdvice&lt;/span&gt;.Priority 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;get&lt;/span&gt; { &lt;span class="codeKeyword"&gt;return&lt;/span&gt; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.attribute.AttributePriority; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;bool&lt;/span&gt; &lt;span class="codeClass"&gt;IAdvice&lt;/span&gt;.RequiresWeave(&lt;span class="codeClass"&gt;WeavingContext&lt;/span&gt; context) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;return&lt;/span&gt; &lt;span class="codeKeyword"&gt;true&lt;/span&gt;; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; &lt;span class="codeClass"&gt;IAdvice&lt;/span&gt;.Weave(&lt;span class="codeClass"&gt;WeavingContext&lt;/span&gt; context, &lt;span class="codeClass"&gt;InstructionBlock&lt;/span&gt; block) 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//1. Create a new field&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;FieldDefDeclaration&lt;/span&gt; field = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;FieldDefDeclaration&lt;/span&gt;(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; field.FieldType = &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.task.SystemBoolean; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; field.Name = &lt;span class="codeString"&gt;&amp;quot;HasBeenLoaded&amp;quot;&lt;/span&gt;; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; field.Attributes = &lt;span class="codeClass"&gt;FieldAttributes&lt;/span&gt;.Public; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//2. Add the field to the class&amp;#39; fields&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; type.Fields.Add(field); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//3. Add the attributes &lt;/span&gt;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//(the field must be added to the class&amp;#39; fields)&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; ctor = &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.task.CompilerGeneratedAttributeCtor; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; compilerGenerated = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;CustomAttributeDeclaration&lt;/span&gt;(ctor); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; field.CustomAttributes.Add(compilerGenerated); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
} 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;em&gt;Note that we must add the field to the class&amp;#39; fields before we can add the attribute to our field. Otherwise we would get an exception telling that the field&amp;#39;s parent is not known.&lt;/em&gt; 
&lt;/p&gt;
&lt;h1&gt;Ready to use our attribute !&lt;/h1&gt;
&lt;p&gt;
Our attribute is now finished and we can test it ! 
&lt;/p&gt;
&lt;p&gt;
So I just create a separate project (our attribute will be typically created in a framework DLL and not in your business DLL) referencing the DLL where my attribute reside and I add a basic class like this one : 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;InjectCode&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;MyAspectedClass&lt;/span&gt; { } 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
and I build it. But it does not work ! I have the following compilation error : &lt;strong&gt;Error 2 PostSharp: The plug-in &amp;quot;InjectCodeAttributePlugin&amp;quot; required by the type &amp;quot;LowLevelAspect.InjectCodeAttribute&amp;quot; was not found.&lt;br /&gt;
&lt;/strong&gt;What happen is simple. PostSharp is searching for the file &amp;quot;.psplugin&amp;quot; but it cannot find it. So what to do ? You must know that by default PostSharp knows about the plugin files that are deployed on the machine under the &amp;quot;Plugin&amp;quot; folder (typically in C:\Program Files\PostSharp 1.5\PlugIns). But you can also give him a hint of where to find it. To do so, just edit your&amp;nbsp;project file to add this property : 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PropertyGroup&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PostSharpSearchPath&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt;..\LowLevelAspect\bin\Debug&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PostSharpSearchPath&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeXmlAttributeValue"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="codeXmlElement"&gt;PropertyGroup&lt;/span&gt;&lt;span class="codeXmlAttributeValue"&gt;&amp;gt;&lt;/span&gt; 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;em&gt;In my case, &lt;strong&gt;LowLevelAspect&lt;/strong&gt; is the name&amp;nbsp;of the project where I defined my aspect. Note that you could also replace &amp;quot;Debug&amp;quot; with &lt;strong&gt;$(Configuration)&lt;/strong&gt; to target either the Debug or the Release folder depending of the configuration you are building in&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
For this to work, you need of course to deploy your psplugin file. So you can just update the properties of your file to specify &lt;strong&gt;Copy to Ouput Directory : Copy Always&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
So let&amp;#39;s try again to compile. This time, it&amp;#39;s ok ! 
&lt;/p&gt;
&lt;p&gt;
We can now look to our class in the reflector and here what we get : 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;MyAspectedClass&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// Fields&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; [&lt;span class="codeClass"&gt;CompilerGenerated&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;bool&lt;/span&gt; HasBeenLoaded; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;// Methods&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; MyAspectedClass(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
} 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Pretty cool no ? 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Generating-fields-in-an-existing-class-Using-PostSharp-15.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Generating-fields-in-an-existing-class-Using-PostSharp-15.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=6b176457-9779-448e-aa8f-33c9fe486bd8</guid>
      <pubDate>Thu, 19 Nov 2009 09:56:00 -0600</pubDate>
      <category>AOP</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=6b176457-9779-448e-aa8f-33c9fe486bd8</pingback:target>
      <slash:comments>37</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=6b176457-9779-448e-aa8f-33c9fe486bd8</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Generating-fields-in-an-existing-class-Using-PostSharp-15.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=6b176457-9779-448e-aa8f-33c9fe486bd8</wfw:commentRss>
    </item>
    <item>
      <title>Après l'Agile Tour 2009 à Lille, téléchargez les slides !</title>
      <description>&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td align="left"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009_lil172.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td align="right"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009speaker-fr.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Quelques jours de retour apr&amp;egrave;s l&amp;#39;Agile Tour 2009 &amp;agrave; Lille, nous voil&amp;agrave; &lt;a href="http://letsgo-agile.blogspot.com/" target="_blank"&gt;Norman&lt;/a&gt; et moi de retour &amp;agrave; Bruxelles. Vous pourrez trouver ci-dessous les slides des deux conf&amp;eacute;rences que nous avons donn&amp;eacute;. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Que tester dans une application ? 
	&lt;ul&gt;
		&lt;li&gt;T&amp;eacute;l&amp;eacute;chargez les slides de la session en &lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=Open+Space+-+Que+tester.pptx" target="_blank"&gt;PPTX (463,87 kb)&lt;/a&gt; ou en &lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=Open+Space+-+Que+tester.pdf" target="_blank"&gt;PDF (541,02 kb)&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;XP : applicable uniquement dans de petits projets ? 
	&lt;ul&gt;
		&lt;li&gt;T&amp;eacute;l&amp;eacute;chargez les slides de la session en &lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=Retour+d'exp%c3%a9rience.pptx" target="_blank"&gt;PPTX (2.27 mb)&lt;/a&gt; ou en &lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=Retour+d'exp%c3%a9rience.pdf" target="_blank"&gt;PDF (1.22 mb)&lt;/a&gt; &lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Vous avez pris des notes pendant la session et vous avez blogg&amp;eacute;s sur l&amp;#39;&amp;eacute;v&amp;egrave;nement ? 
&lt;/p&gt;
&lt;p&gt;
Vous voulez continuer la discussion ? 
&lt;/p&gt;
&lt;p&gt;
N&amp;#39;h&amp;eacute;sitez pas &amp;agrave; commenter sur cet article et &amp;agrave; faire r&amp;eacute;f&amp;eacute;rence &amp;agrave; votre propre blog et articles relatifs &amp;agrave; l&amp;#39;&amp;eacute;v&amp;egrave;nement ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Apres-lAgile-Tour-2009-a-Lille-telechargez-les-slides-!.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Apres-lAgile-Tour-2009-a-Lille-telechargez-les-slides-!.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=793477c7-ec0e-40b7-8cd1-c39accb8e9d8</guid>
      <pubDate>Tue, 17 Nov 2009 00:24:00 -0600</pubDate>
      <category>Training</category>
      <category>TDD</category>
      <category>XP</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=793477c7-ec0e-40b7-8cd1-c39accb8e9d8</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=793477c7-ec0e-40b7-8cd1-c39accb8e9d8</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Apres-lAgile-Tour-2009-a-Lille-telechargez-les-slides-!.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=793477c7-ec0e-40b7-8cd1-c39accb8e9d8</wfw:commentRss>
    </item>
    <item>
      <title>L'Agile Tour 2009 s'arrête à Lille... Et moi aussi ! Venez assistez à mes sessions ! (French)</title>
      <description>&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td align="left"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009_lil172.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td align="right"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009speaker-fr.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Encore une fois, les m&amp;eacute;thodologies agiles font leur tourn&amp;eacute;e en 2009. Et une fois encore, de nombreuses dates sont disponibles partout dans le monde, et principalement en france. Et cette ann&amp;eacute;e, un arr&amp;ecirc;t est &amp;eacute;galement pr&amp;eacute;vu &amp;agrave; Lille le 30 Octobre, et c&amp;#39;est gratuit ! &lt;em&gt;Pour plus d&amp;#39;information, &lt;a href="http://www.agiletour.org/fr/at2009_lille.html" target="_blank"&gt;regardez leur site web&lt;/a&gt; pour avoir tous les d&amp;eacute;tails sur cet &amp;eacute;v&amp;egrave;nement !&lt;/em&gt;&lt;br /&gt;
J&amp;#39;&amp;eacute;tais tr&amp;egrave;s occup&amp;eacute; l&amp;#39;ann&amp;eacute;e derni&amp;egrave;re et j&amp;#39;ai donc manqu&amp;eacute; l&amp;#39;&amp;eacute;v&amp;egrave;nement, mais cette ann&amp;eacute;e, il &amp;eacute;tait impensable pour moi de ne pas y aller ! 
&lt;/p&gt;
&lt;p&gt;
Si vous voulez parler de tests, de m&amp;eacute;thodologies agile, d&amp;#39;int&amp;eacute;gration continue, ... Rejoignez-nous l&amp;agrave; bas ! Avec mon partenaire &lt;a href="http://letsgo-agile.blogspot.com/" target="_blank"&gt;Norman Deschauwer&lt;/a&gt;, nous donnerons deux sessions: 
&lt;/p&gt;
&lt;h1&gt;Retour d&amp;#39;exp&amp;eacute;rience : XP n&amp;#39;est-il applicable que dans des petits projets ?&lt;/h1&gt;
&lt;p&gt;
Nous avons souvent l&amp;rsquo;image d&amp;rsquo;eXtreme Programming dans des projets de courte dur&amp;eacute;e. Et &amp;agrave; en juger par quelques chiffres (15 personnes pour plus de 8000 jours hommes), notre projet est en ligne directe avec les m&amp;eacute;triques des projets traditionnels et semble pr&amp;eacute;senter un volume de travail fr&amp;ocirc;lant ou d&amp;eacute;passant les barri&amp;egrave;res standards des projets agiles.&lt;br /&gt;
Cependant, nous en avons fait un vrai projet XP, avec il est vrai quelques adaptations &amp;agrave; la m&amp;eacute;thode pour satisfaire nos contraintes propres. &lt;br /&gt;
Nous aimerions montrer ici qu&amp;rsquo;un projet critique &amp;ndash; dans le domaine financier &amp;ndash; m&amp;ecirc;me durant plus de cinq ans peut tout &amp;agrave; fait &amp;ecirc;tre r&amp;eacute;alis&amp;eacute; en XP. Serait-ce m&amp;ecirc;me la solution &amp;agrave; suivre ? 
&lt;/p&gt;
&lt;p&gt;
Nous parcourrons les diff&amp;eacute;rentes valeurs et pratiques d&amp;rsquo;eXtreme Programming afin de mettre en &amp;eacute;vidence la fa&amp;ccedil;on dont nous avons pu les mettre en place, tout en montrant les diff&amp;eacute;rents probl&amp;egrave;mes que nous avons pu rencontrer et comment nous les avons r&amp;eacute;solus. 
&lt;/p&gt;
&lt;h1&gt;Discussion ouverte : Que tester dans une application ?&lt;/h1&gt;
&lt;p&gt;
Que doit-t-on tester dans une application ? Que ne doit-t-on pas tester ?&lt;br /&gt;
Quels types de test devons-nous faire ? Des tests orient&amp;eacute;s GUI ? Des tests unitaires ? Des tests orient&amp;eacute;s donn&amp;eacute;es ? Exploratoires ? Al&amp;eacute;atoires ?&lt;br /&gt;
Allons-nous mettre en place des mocks ou non ? Tester la base de donn&amp;eacute;es ?&lt;br /&gt;
Les tests me permettent-ils vraiment de v&amp;eacute;rifier l&amp;rsquo;application ? Ou tout simplement de la designer ? De la documenter ? 
&lt;/p&gt;
&lt;p&gt;
Ecrire un test est tr&amp;egrave;s simple, mais am&amp;egrave;ne vite de tr&amp;egrave;s nombreuses questions.&lt;br /&gt;
C&amp;rsquo;est donc bien une session sous la forme &amp;laquo; d&amp;rsquo;Open Space Discussion &amp;raquo; que nous voudrions &amp;laquo; faciliter &amp;raquo; ici, afin que notre exp&amp;eacute;rience et la votre permette de r&amp;eacute;pondre tous ensemble &amp;agrave; quelques unes de ces questions. 
&lt;/p&gt;
&lt;h1&gt;Vous &amp;ecirc;tes int&amp;eacute;ress&amp;eacute;s par d&amp;#39;autres sujets ?&lt;/h1&gt;
&lt;p&gt;
Un Open Space est pr&amp;eacute;vu &amp;agrave; la fin de la journ&amp;eacute;e, et pour plusieurs heures. Avec Norman nous resterons un moment pendant cet open space. N&amp;#39;h&amp;eacute;sitez donc pas &amp;agrave; nous contacter, nous serons tr&amp;egrave;s heureux de discuter avec vous de tout sujet traitant de l&amp;#39;agile, XP, Scrum, les tests, l&amp;#39;int&amp;eacute;gration continue, ... 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Agile-Tour-2009-sarrete-a-Lille-Et-moi-aussi-!-Venez-assistez-a-mes-sessions-!-(French).aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Agile-Tour-2009-sarrete-a-Lille-Et-moi-aussi-!-Venez-assistez-a-mes-sessions-!-(French).aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=42039670-c138-4a8c-9207-0504efa268b2</guid>
      <pubDate>Wed, 21 Oct 2009 23:13:00 -0600</pubDate>
      <category>Training</category>
      <category>TDD</category>
      <category>XP</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=42039670-c138-4a8c-9207-0504efa268b2</pingback:target>
      <slash:comments>478</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=42039670-c138-4a8c-9207-0504efa268b2</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Agile-Tour-2009-sarrete-a-Lille-Et-moi-aussi-!-Venez-assistez-a-mes-sessions-!-(French).aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=42039670-c138-4a8c-9207-0504efa268b2</wfw:commentRss>
    </item>
    <item>
      <title>Agile Tour 2009 stops in Lille... So do i ! Assist my sessions there ! (English)</title>
      <description>&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td align="left"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009_lil172.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td align="right"&gt;&lt;a href="http://www.agiletour.org/" target="_blank"&gt;&lt;img class="noborder" src="https://www.pedautreppe.com/image.axd?picture=at2009speakerSimple.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Once again, agile methodologies is doing his tour in 2009. And once again you can find lots of dates all over the world, mainly in France. And this year it again stops in Lille the 30th of&amp;nbsp;October and it&amp;#39;s free !. &lt;em&gt;For more info, &lt;a href="http://www.agiletour.org/en/at2009_lille.html" target="_blank"&gt;check the website &lt;/a&gt;to have all the details !&lt;/em&gt;&lt;br /&gt;
I was very busy last year and so I missed it but this year it was not possible for me not to go there. 
&lt;/p&gt;
&lt;p&gt;
You want to speak about testing, agile methodologies, continuous integration, .... Join us there ! With my agile speaker partner &lt;a href="http://letsgo-agile.blogspot.com/" target="_blank"&gt;Norman Deschauwer&lt;/a&gt;, we&amp;#39;ll give two sessions: 
&lt;/p&gt;
&lt;h1&gt;Return of Experience : Is XP applicable only on small projects ?&lt;/h1&gt;
&lt;p&gt;
We often have the image of XP in small projects. And if we look to some figures (15 guys for 8000 men days), our project is directly in the metrics of traditional projects and seem to present a work volume overwhelming the bareers of agile project. &lt;br /&gt;
Nevertheless, we have made it a real XP project, with from time to time some adaptations to the method. 
&lt;/p&gt;
&lt;p&gt;
We would like here to show that a critical project (in the financial domain), even when lasting more that 5 years, can be done in XP. And maybe is this the solution to follow ? 
&lt;/p&gt;
&lt;p&gt;
During the session, we will speak about the different valus and practices of XP to show how we have put them in practice while showing the different problems we met and how we solved them. 
&lt;/p&gt;
&lt;h1&gt;Open Discussion : What to test in an application ?&lt;/h1&gt;
&lt;p&gt;
What shall we test in an application ? What shall we not test ? &lt;br /&gt;
Which kind of test shall we do ? GUI oriented tests ? Unit tests ? Data oriented tests ? Exploratory tests ? Random tests ? &lt;br /&gt;
Shall we use mocks ? Shall we test the database ? &lt;br /&gt;
Do the test really allow me to check the application ? Or to design it ? To document it ? 
&lt;/p&gt;
&lt;p&gt;
Writing tests is very simple, but quickly brings lots of question. We want to have an Open Space Discussion with all of you to share experiences and try to answer to some of these questions. 
&lt;/p&gt;
&lt;h1&gt;Interested in any other subject ?&lt;/h1&gt;
&lt;p&gt;
An open space is planned at the end of the day for a few hours. With Norman, we&amp;#39;ll stay a while during this open space so feel free to contact us, we would be very happy to discuss of any subject around agile, XP, Scrum, testing, continuous integration, ... 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Agile-Tour-2009-stops-in-Lille-So-do-i-!-Assist-my-sessions-there-!-(English).aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Agile-Tour-2009-stops-in-Lille-So-do-i-!-Assist-my-sessions-there-!-(English).aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=38ac49b5-6c9d-45e0-beee-e9f3f7ac404b</guid>
      <pubDate>Wed, 21 Oct 2009 23:08:00 -0600</pubDate>
      <category>Training</category>
      <category>TDD</category>
      <category>XP</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=38ac49b5-6c9d-45e0-beee-e9f3f7ac404b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=38ac49b5-6c9d-45e0-beee-e9f3f7ac404b</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Agile-Tour-2009-stops-in-Lille-So-do-i-!-Assist-my-sessions-there-!-(English).aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=38ac49b5-6c9d-45e0-beee-e9f3f7ac404b</wfw:commentRss>
    </item>
    <item>
      <title>My story with PostSharp</title>
      <description>&lt;p&gt;
A few years ago, when I discovered AOP, &lt;a href="http://didierdanse.net/Default.aspx" target="_blank"&gt;Didier Danse&lt;/a&gt; told me about an AOP framework he was liking for .NET : &lt;a href="http://www.postsharp.org/" target="_blank"&gt;PostSharp by Ga&amp;euml;l Fraiteur&lt;/a&gt;. So I started to try it, and simply felt in love with this tool. 
&lt;/p&gt;
&lt;p&gt;
I do not want here to explain how to use it (I will try to post some examples about that in the future) but for now, I just want to tell you my story about PostSharp, and why I really started to use it. 
&lt;/p&gt;
&lt;h1&gt;The context&lt;/h1&gt;
&lt;p&gt;
A few years ago, I was writing data oriented tests : typically, I was inserted some data, checking the behavior of my web app and then cleaning my data. And so my tests started to look like this&amp;nbsp;: 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;TestMethod&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Mytest() 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;try&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; InsertSomeData(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; InsertSomeOtherData(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; DoMyTest(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;finally&lt;/span&gt; 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; { 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; CleanMyOtherData(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; CleanMyData(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; } 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
} 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
It was working, but was a bit too verbose and my test code was &amp;quot;lost among noise&amp;quot;. 
&lt;/p&gt;
&lt;h1&gt;Kind of AOP using the .NET framework&lt;/h1&gt;
&lt;p&gt;
I was not knowing AOP at that time but I was sure I was able to do something different. I read the book of &lt;a href="http://www.amazon.com/Applied-NET-Attributes/dp/B001GIPDIY/ref=sr_1_6?ie=UTF8&amp;amp;s=books&amp;amp;qid=1256068995&amp;amp;sr=8-6" target="_blank"&gt;Jason Bock called &amp;quot;Applied .NET Attributes&amp;quot;&lt;/a&gt; and I discovered the &lt;a href="http://msdn.microsoft.com/fr-fr/library/system.contextboundobject.aspx" target="_blank"&gt;ContextBoundObject&lt;/a&gt; and I turn my code to this : 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;TestMethod&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;InsertSomeData&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;InsertSomeOtherData&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Mytest() 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; DoMyTest(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
} 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Much better and elegant. My attributes were doing the stuff of inserting and deleting and there were no more noise in my test.&lt;br /&gt;
But dealing with messages and sinks is not so simple and has a lot of limitation. Above all, all this stuff is done at runtime and impose you to inherit from ContextBoundObject. Possible for my tests, but no further application for my production code. 
&lt;/p&gt;
&lt;h1&gt;The revelation&lt;/h1&gt;
&lt;p&gt;
It&amp;#39;s at this moment that one of my colleague has done a thesis about AOP and that I met Didier Danse. He told&amp;nbsp;me about PostSharp and I started to test it. And quickly I had migrated all my attributes into PostSharp. And of course I had in the meanwhile extended their capabilities for keeping my test very declarative: 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;TestMethod&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;InsertSomeData&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;InsertSomeOtherData&lt;/span&gt;] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;ExecuteThisTestSeveralTimeAs&lt;/span&gt;(&lt;span class="codeString"&gt;&amp;quot;user1&amp;quot;&lt;/span&gt;, &lt;span class="codeString"&gt;&amp;quot;user2&amp;quot;&lt;/span&gt;, &lt;span class="codeString"&gt;&amp;quot;user3&amp;quot;&lt;/span&gt;)] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
[&lt;span class="codeClass"&gt;IgnoreThisTestIfDbVersionIsInferiorTo&lt;/span&gt;(35)] 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Mytest() 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
{ 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; DoMyTest(); 
&lt;/p&gt;
&lt;p class="codeLine"&gt;
} 
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
I was no longer injecting (asking PostSharp to inject) code into my test, but also modifying its metadata attributes ! I was indeed adding some IgnoreAttribute to my code at postcompilation if my test was not relevant to my current test context. This was alllowing me not only to reduce the number of test I had to write, but also to keep a very simple test result file without any inconclusive test. 
&lt;/p&gt;
&lt;h1&gt;My present&lt;/h1&gt;
&lt;p&gt;
And I started to see so many possible applications in my code - without any performance penalty as every aspet I was thinking to would be woven at compilation time. &lt;em&gt;(Well indeed there is a small performance penalty as PostSharp inject some additional method call but this is practically negligeable in practice. Note moreover that PostSharp 2.0 will just remove this extra overhead !)&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
My next step was when I wanted to do some performance investigation in my code. Usually, I add some Stopwatches in my code to capture the execution time and log that to a file. But in my case, I wanted to instrument many many methods that were calling each other. Ok... Let&amp;#39;s do an assembly attribute and work with &amp;quot;OnMethodInvocationAspect&amp;quot; and using some filtering on my class names and method names !&lt;br /&gt;
In a few lines of code, I had instrumented thousands of methods (but only the one I wanted to). Pretty awsome. 
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
What about now ?&lt;br /&gt;
Postsharp is now a key feature of my designs. How could I make a clean INotifyPropertyChanged without it ? 
&lt;/p&gt;
&lt;p&gt;
I would not say PostSharp is transparent to use. There is of course a learning cost and a vocabulary, specially if you do not know AOP by itself. But this learning cost is quite small compared to the productivity you can obtain in your development.&lt;br /&gt;
In my view, it&amp;#39;s the best way to create some cross-cutting functionality in a very elegant and efficient way ! And when you want to enforce some design rules in your code, working declaratively is a dream ! Specially when you can work at interface level ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/My-story-with-PostSharp.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/My-story-with-PostSharp.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=5fd48c1b-6cd3-4d16-aea9-dea90c034fdc</guid>
      <pubDate>Tue, 20 Oct 2009 23:08:00 -0600</pubDate>
      <category>.NET</category>
      <category>AOP</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=5fd48c1b-6cd3-4d16-aea9-dea90c034fdc</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=5fd48c1b-6cd3-4d16-aea9-dea90c034fdc</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/My-story-with-PostSharp.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=5fd48c1b-6cd3-4d16-aea9-dea90c034fdc</wfw:commentRss>
    </item>
    <item>
      <title>CITCON 2009 in Paris</title>
      <description>&lt;p&gt;
&lt;img style="width: 388px; height: 129px" src="https://www.pedautreppe.com/image.axd?picture=CITCON2009.jpg" alt="" width="388" height="129" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I discovered the &lt;a href="http://www.citconf.com" target="_blank"&gt;CITCON&lt;/a&gt; in 2007 when &lt;a href="https://www.pedautreppe.com/post/CITCON-2007-in-Brussels---Part-2.aspx" target="_blank"&gt;the conference came to Brussels&lt;/a&gt;. Since this moment, I felt in love of this kind of session where we can learn so many things by highly motivated people ! 
&lt;/p&gt;
&lt;p&gt;
So for the third consecutive year, and &lt;a href="https://www.pedautreppe.com/post/CITCON-2008-in-Amsterdam---Part-2.aspx" target="_blank"&gt;after Amsterdam in 2008&lt;/a&gt;, I came in Paris this year with lots of colleague :&amp;nbsp;&lt;a href="http://blog.lelibre.eu/index.php" target="_blank"&gt;Thierry Thoua&lt;/a&gt;, &lt;a href="http://cidesoft.com.pe/blogs/paullorena/" target="_blank"&gt;Paul Lorena&lt;/a&gt;, &lt;a href="http://www.linkedin.com/pub/marc-andr%C3%A9-filion-pilon/0/548/343" target="_blank"&gt;Marc-Andr&amp;eacute; Filion-Pilon&lt;/a&gt; and &lt;a href="http://thibautvs.com/blog/" target="_blank"&gt;Thibaut Van Spaandonck&lt;/a&gt;. Pity that my agile and continuous integration speaker&amp;nbsp;partner&amp;nbsp;&lt;a href="http://letsgo-agile.blogspot.com/" target="_blank"&gt;Norman Deschauwer&lt;/a&gt;&amp;nbsp;could not join us at the end. 
&lt;/p&gt;
&lt;p&gt;
But let&amp;#39;s summarize a bit the sessions I attended to: 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
	&lt;div&gt;
	At 10h00, I started with a session I proposed about testing.&amp;nbsp;I wanted to speak about the different&amp;nbsp;level of testing (unit testing, web testing, data oriented testing, ...) but the session was jointed with other one and discussion quickly changed of subject. Many attendees for this session among them &lt;a href="http://gojko.net/" target="_blank"&gt;Gojko Adzic&lt;/a&gt;&amp;nbsp;and &lt;a href="http://antonymarcano.com" target="_blank"&gt;Antony Marcano&lt;/a&gt;&amp;nbsp;that brought a very interesting experience into the discussion. I can also name &lt;a href="http://www.linkedin.com/in/manuelmolinier" target="_blank"&gt;Manuel Molinier&lt;/a&gt;, &lt;a href="http://www.linkedin.com/in/cirilowortel" target="_blank"&gt;Cirilo Wortel&lt;/a&gt;, &lt;a href="http://www.linkedin.com/pub/tiina-kiuru/4/990/49a" target="_blank"&gt;Tiina Kiuru&lt;/a&gt;, &lt;a href="http://www.jroller.com/mhjort/" target="_blank"&gt;Markus Hjort&lt;/a&gt;, &lt;a href="http://www.sos.be/mensen/patrick-debois/" target="_blank"&gt;Patrick Debois&lt;/a&gt;, &lt;a href="http://testdriveninformation.blogspot.com/" target="_blank"&gt;Gilles Mantel&lt;/a&gt;, &lt;a href="http://21croissants.blogspot.com/" target="_blank"&gt;Jean-Michel Garnier&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.bossavit.com" target="_blank"&gt;Laurent Bossavit&lt;/a&gt;.&lt;br /&gt;
	We spoke a lot of the notion of done but more at use story level than at technical task level (when you split a story into several tasks, when do you consider your job on thie specific task is over ?) Two definitions were interested : &lt;strong&gt;a story is done when everyone feels right about it &lt;/strong&gt;(everyone meaning the client / product owner, the developper, ...). For &lt;a href="http://www.linkedin.com/in/cirilowortel" target="_blank"&gt;Cirilo Wortel&lt;/a&gt;, it&amp;#39;s when we are able to demo to the client. 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	At 11h15, I went to a session animated by &lt;a href="http://www.m3p.co.uk/blog/" target="_blank"&gt;Steve Freeman&lt;/a&gt;. This &lt;a href="http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1254058199&amp;amp;sr=8-1" target="_blank"&gt;book author&lt;/a&gt; nearly gave us a course about mock objects, accompanied by &lt;a href="http://blog.javabien.net/" target="_blank"&gt;David Gageot&lt;/a&gt;&amp;nbsp;that showed some test code using the Java mock framework&amp;nbsp;&lt;a href="http://mockito.org/" target="_blank"&gt;mockito&lt;/a&gt;. Were also present among others &lt;a href="http://ericlefevre.net/" target="_blank"&gt;Eric Lefevre&lt;/a&gt;, &lt;a href="http://www.antoniogoncalves.org" target="_blank"&gt;Antonio Goncalves&lt;/a&gt;&amp;nbsp;and &lt;a href="http://gojko.net/" target="_blank"&gt;Gojko Adzic&lt;/a&gt;. Some things to record about the session ? Another book reference : &lt;strong&gt;&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201379430/objectsbydesign" target="_blank"&gt;Object Design&lt;/a&gt;&lt;/strong&gt; by Rebecca Wirfs-Brock. Check also the website &lt;a href="http://www.objectsbydesign.com/"&gt;http://www.objectsbydesign.com/&lt;/a&gt;. We have spoken a lot of TDD, quoting &lt;a href="http://blog.objectmentor.com/" target="_blank"&gt;&amp;quot;Uncle&amp;quot; Bob Martin&lt;/a&gt; sentence : &lt;strong&gt;The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification&lt;/strong&gt;. For Steeve Freeman, for this act of design, we should use interfaces to explicit the relation between objects. Just finding a name for this interface will explicit and document the relation. Check &lt;a href="http://ericlefevre.net/wordpress/2009/09/21/mock-objects-at-citcon-paris-2009/trackback/" target="_blank"&gt;the post of Eric Lefevre for a small debate&lt;/a&gt; about this subject between Eric, Steeve and Antonio. The conclusion sentence could be when doing TDD, do not think class first, but role first ! 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	At 14h00, I joined the session proposed by &lt;a href="http://gojko.net/" target="_blank"&gt;Gojko Adzic&lt;/a&gt;&amp;nbsp;about Acceptance testing. Many participants (&lt;a href="http://www.linkedin.com/in/henkvanvoorthuijsen" target="_blank"&gt;Henk van Voorthuijsen&lt;/a&gt;, Sandrine Raffali, &lt;a href="http://www.linkedin.com/in/clairehernandez" target="_blank"&gt;Claire Hernandez&lt;/a&gt;, &lt;a href="http://antonymarcano.com" target="_blank"&gt;Antony Marcano&lt;/a&gt;, &lt;a href="http://andypalmer.com/" target="_blank"&gt;Andy Palmer&lt;/a&gt;, &lt;a href="http://21croissants.blogspot.com/" target="_blank"&gt;Jean-Michel Garnier&lt;/a&gt;, &lt;a href="http://www.linkedin.com/in/cirilowortel" target="_blank"&gt;Cirilo Wortel&lt;/a&gt;, &lt;a href="http://www.linkedin.com/pub/tiina-kiuru/4/990/49a" target="_blank"&gt;Tiina Kiuru&lt;/a&gt;, &lt;a href="http://www.jroller.com/mhjort/" target="_blank"&gt;Markus Hjort&lt;/a&gt;, &lt;a href="http://www.sos.be/mensen/patrick-debois/" target="_blank"&gt;Patrick Debois&lt;/a&gt;&amp;nbsp;and many more) and lots of information.. Gojko started by its top&amp;nbsp;5 reasons why agile team fail when they do acceptance testing. The list has been completed during the session. 
	&lt;/div&gt;
	&lt;ol&gt;
		&lt;li&gt;
		&lt;div&gt;
		No collaboration 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Focusing on &amp;quot;How&amp;quot; and not on &amp;quot;What&amp;quot; 
		&lt;/div&gt;
		&lt;ul&gt;
			&lt;li&gt;
			&lt;div&gt;
			Your test intent is lost inside of all your &amp;quot;FillField&amp;quot; or &amp;quot;ClickButton&amp;quot; sentences 
			&lt;/div&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Tests are unusable as live documentation 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Expecting acceptance tests to be a full regression test suite 
		&lt;/div&gt;
		&lt;ul&gt;
			&lt;li&gt;
			&lt;div&gt;
			Acceptance test are the specifications 
			&lt;/div&gt;
			&lt;/li&gt;
			&lt;li&gt;
			&lt;div&gt;
			You do not use acceptance tests to chjeck all your limit values 
			&lt;/div&gt;
			&lt;/li&gt;
			&lt;li&gt;
			&lt;div&gt;
			Do not forget other types of tests like Exploratory tests 
			&lt;/div&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Focusing on tools 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Do not consider acceptance testing as bringing added value 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		&amp;quot;Test Code&amp;quot; is not maintained &amp;quot;with love&amp;quot; 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Management problems : objectives are not aligned between the product owner, the developper, the project manager, ... 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		No management support 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Under estimating skills required to get things done right 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ol&gt;
	&lt;div&gt;
	Gojko has detailed all items of this list &lt;a href="http://gojko.net/2009/09/24/top-10-reasons-why-teams-fail-with-acceptance-testing/trackback/" target="_blank"&gt;in its own post about that session&lt;/a&gt;. Some reference to read ? &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=126923" target="_blank"&gt;The post of Micha&amp;euml;l Feathers of 2005 about what is not a unit test&lt;/a&gt;. 
	&lt;/div&gt;
	&lt;div&gt;
	Note that we should also avoid to many transformation in the specification. When do they come from ? Ever tried the telephone game ? The client explain what he wants. The analyst will write that down in a document. The developper code acceptance test based on that document. Do you really think the developper will have coded what the client has asked ? Do you have any other &amp;quot;level of indirection&amp;quot; in your company ? 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Finally I assisted at 15h15 to the session &amp;quot;Putting Selenium its place&amp;quot;. Lots of participant once again counting &lt;a href="http://www.linkedin.com/in/cirilowortel" target="_blank"&gt;Cirilo Wortel&lt;/a&gt;, &lt;a href="http://www.linkedin.com/pub/tiina-kiuru/4/990/49a" target="_blank"&gt;Tiina Kiuru&lt;/a&gt;, &lt;a href="http://www.jroller.com/mhjort/" target="_blank"&gt;Markus Hjort&lt;/a&gt;, &lt;a href="http://antonymarcano.com" target="_blank"&gt;Antony Marcano&lt;/a&gt;, &lt;a href="http://andypalmer.com/" target="_blank"&gt;Andy Palmer&lt;/a&gt;&amp;nbsp;and &lt;a href="http://21croissants.blogspot.com/" target="_blank"&gt;Jean-Michel Garnier&lt;/a&gt;. Antony showed us &lt;a href="http://seleniumhq.org/docs/04_selenese_commands.html" target="_blank"&gt;Selenese&lt;/a&gt;, ie the Selenium commands and explained us how we could write a unit test using tables listing the commands to use. I am not fan of Selenium, but I found very interesting the demonstration they did about the &lt;a href="http://code.google.com/p/selenium/wiki/PageObjects" target="_blank"&gt;Page Objects&lt;/a&gt; capabalities and how we could extract activities from test to have self explanatory tests. 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Unfortunately the last session I was interested in (Architect in Agile) had been cancelled (or moved in a room I couldn&amp;#39;t found ?!?). But as I will be present in the next &lt;a href="http://www.agiletour.org/en/at2009_lille.html" target="_blank"&gt;Agile Tour in Lille&lt;/a&gt;, I will be happy to facilitate an open space session - since 19h30&amp;nbsp;- with anyone interested. 
&lt;/p&gt;
&lt;p&gt;
Any conclusion to this event ? It was my third CITCON (&lt;em&gt;and the first I was late... sorry guys...&lt;/em&gt;). As for each time, I do not have a special&amp;nbsp;&lt;strong&gt;&lt;em&gt;aha! moment&lt;/em&gt;&lt;/strong&gt;, but I always like the event as a whole. I like standard conferences, but with Open Space Discussion, I really encountered a real exchange of experiences with all of you ! And I always meet people highly motivated by their job and what they are doing. And this gives me each time enough energy to continue wanting to share experience and ideas with all my team ! 
&lt;/p&gt;
&lt;p&gt;
So there is one thing sure, if eveything goes well, I will be present for the next edition of the CITCON ! 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;You want more about the CITCON ? 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	See &lt;a href="http://www.citconf.com/wiki/index.php?title=Photos#CITCON_Europe_2009_Paris" target="_blank"&gt;all the photos&lt;/a&gt; the members took during the event ! 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Check also &lt;a href="http://www.citconf.com/wiki/index.php?title=OnTheWeb#CITCON_Europe_2009_Paris_France" target="_blank"&gt;the blog posts&lt;/a&gt; written after the events 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	And &lt;a href="https://twitter.com/#search?q=citcon" target="_blank"&gt;all the tweets&lt;/a&gt; writteng during the session 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</description>
      <link>https://www.pedautreppe.com/post/CITCON-2009-in-Paris.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/CITCON-2009-in-Paris.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=17507fb9-9de4-436d-a12b-9d70a484b423</guid>
      <pubDate>Wed, 30 Sep 2009 11:00:00 -0600</pubDate>
      <category>Training</category>
      <category>TDD</category>
      <category>XP</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=17507fb9-9de4-436d-a12b-9d70a484b423</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=17507fb9-9de4-436d-a12b-9d70a484b423</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/CITCON-2009-in-Paris.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=17507fb9-9de4-436d-a12b-9d70a484b423</wfw:commentRss>
    </item>
    <item>
      <title>Internet Explorer and Session Merging</title>
      <description>&lt;p&gt;
Recently, I was playing with &lt;a href="http://watin.sourceforge.net/" target="_blank"&gt;WatiN&lt;/a&gt; to do some integration and web testing, and I have &amp;quot;discovered&amp;quot; the concept of &lt;strong&gt;session merging&lt;/strong&gt; in the browsers. 
&lt;/p&gt;
&lt;p&gt;
What is this ? By default, the browsers (Internet Explorer, Firefox, ...) are sharing the session information of a website (for instance the authentication information) between its tabs and different instances. What does implies in practice ?&amp;nbsp;Just launch&amp;nbsp;one instance of your favorite browser and log into an application (mail, ...). Then launch another instance (for instance another process) of the same browser and go to the same website. You should be logged in, even if you had not checked the magic checkbox &amp;quot;Remember&amp;nbsp;me&amp;quot;.&amp;nbsp;Why are they doing this ? Just because many websites expect this behavior. Just imagine how surfing would behave without session merging in an application when it open popups ? 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Just note that all website do NOT manage their authentication in the same way, and so, some of them may not be affected by session merging.&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
So, that&amp;#39;s a feature ok. But when you do some web testing and that you would like to launch several browser logged in with different users to check simultaneous actions or things like that, this feature can be very very annoying. 
&lt;/p&gt;
&lt;p&gt;
But Internet Explorer 8 has added a new feature, that allow you to surf in a &lt;strong&gt;new session&lt;/strong&gt;, meaning you just &lt;strong&gt;deactivate explicitely the session merging&lt;/strong&gt;. How to do that ? Simple: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	either from an existing Internet Explorer windows, juts use the menu &lt;strong&gt;File / New Session&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	from command line, use &lt;strong&gt;IExplore.exe -nomerge&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;What about in COM ?&lt;/h1&gt;
&lt;p&gt;
Let&amp;#39;s go back to my testing session. I was manipulating the DLL &lt;strong&gt;&amp;quot;Interop.SHDocVw.dll&amp;quot;&lt;/strong&gt; to drive my browser and to create a new instance of Internet Explorer, I was just using the syntax &lt;strong&gt;new InternetExplorerClass&lt;/strong&gt;. So how can I use this feature using the COM component ? Well, so far, I haven&amp;#39;t found any way to do that directly so &lt;strong&gt;I&amp;#39;m waiting for your comments ! :-) &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Anyway, I am using a workaround, that has been highly inspired of the source code of &lt;a href="http://watin.sourceforge.net" target="_blank"&gt;WatiN&lt;/a&gt;, just updating it to take into account the notion of session merging, and giving enough time to Internet Explorer to start. 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;To make this compile, you will need two references:&lt;/em&gt; 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	Interop.SHDocVw.dll : The COM wrapper exposing the Internet Explorer&amp;#39;s classes 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	WatiN.Core.dll : The DLL of &lt;a href="http://watin.sourceforge.net" target="_blank"&gt;WatiN&lt;/a&gt;&amp;nbsp;to be able to use the very nice &lt;strong&gt;TryFuncUntilTimeOut&lt;/strong&gt; class and to collect the running instances of IE using the &lt;strong&gt;ShellWindows2&lt;/strong&gt; class 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codeBlock"&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;using&lt;/span&gt; System;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;using&lt;/span&gt; System.Diagnostics;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;using&lt;/span&gt; SHDocVw;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;using&lt;/span&gt; WatiN.Core.Native.InternetExplorer;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;using&lt;/span&gt; WatiN.Core.UtilityClasses;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;namespace&lt;/span&gt; ClassLibrary1
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
{
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;IEFactory&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; Start Internet Explorer without session merging&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span class="codeComment"&gt;The IE process&lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeClass"&gt;Process&lt;/span&gt; StartIEProcess()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;string&lt;/span&gt; argument = &lt;span class="codeString"&gt;&amp;quot;-nomerge about:blank&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; process = &lt;span class="codeClass"&gt;Process&lt;/span&gt;.Start(&lt;span class="codeString"&gt;&amp;quot;IExplore.exe&amp;quot;&lt;/span&gt;, argument);
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;if&lt;/span&gt; ( process == &lt;span class="codeKeyword"&gt;null&lt;/span&gt; )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;throw&lt;/span&gt; &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;InvalidOperationException&lt;/span&gt;(&lt;span class="codeString"&gt;&amp;quot;The IExplore.exe process can&amp;#39;t be started&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;return&lt;/span&gt; process;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; Start a new instance of Internet Explorer and attach it to a IWebBrowser2 object&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeXmlComment"&gt;///&lt;/span&gt;&lt;span class="codeComment"&gt; &lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span class="codeComment"&gt;The COM object corresponding to the running instance&lt;/span&gt;&lt;span class="codeXmlComment"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeClass"&gt;IWebBrowser2&lt;/span&gt; DemarreInstanceCOM()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//1. Let&amp;#39;s count the current number of IE instances&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;int&lt;/span&gt; count = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;ShellWindows2&lt;/span&gt;().Count;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//2. Start the process&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;Process&lt;/span&gt; process = StartIEProcess();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//3. Let&amp;#39;s find the handle of the new running IE&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//&amp;nbsp;&amp;nbsp; We will try for a maximum of 5 seconds, with trial every 100ms &lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//&amp;nbsp;&amp;nbsp; if we had not been successful&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; getWindowHandle = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;TryFuncUntilTimeOut&lt;/span&gt;(5) { SleepTime = 100 };
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;int&lt;/span&gt; windowHandle = getWindowHandle.Try&amp;lt;&lt;span class="codeKeyword"&gt;int&lt;/span&gt;&amp;gt;(() =&amp;gt; process.MainWindowHandle.ToInt32());
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//4. If we got the handle, let&amp;#39;s get the browser&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; allBrowsers = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;ShellWindows2&lt;/span&gt;();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;if&lt;/span&gt; ( windowHandle != 0 )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;foreach&lt;/span&gt; ( &lt;span class="codeKeyword"&gt;var&lt;/span&gt; browser &lt;span class="codeKeyword"&gt;in&lt;/span&gt; allBrowsers )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;if&lt;/span&gt; ( ( (&lt;span class="codeClass"&gt;IWebBrowser2&lt;/span&gt;)browser ).HWND == windowHandle )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;return&lt;/span&gt; browser &lt;span class="codeKeyword"&gt;as&lt;/span&gt; &lt;span class="codeClass"&gt;IWebBrowser2&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//5. Otherwise, let&amp;#39;s take the first instance on a blank page&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;else&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//for that we&amp;#39;ll wait until a new instance of IE is running&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;var&lt;/span&gt; action = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;TryFuncUntilTimeOut&lt;/span&gt;(5) { SleepTime = 100 };
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; action.Try&amp;lt;&lt;span class="codeKeyword"&gt;bool&lt;/span&gt;&amp;gt;(() =&amp;gt; &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;ShellWindows2&lt;/span&gt;().Count &amp;gt; count);
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;foreach&lt;/span&gt; ( &lt;span class="codeKeyword"&gt;var&lt;/span&gt; browser &lt;span class="codeKeyword"&gt;in&lt;/span&gt; &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;ShellWindows2&lt;/span&gt;() )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;if&lt;/span&gt; ( ( (&lt;span class="codeClass"&gt;IWebBrowser2&lt;/span&gt;)browser ).LocationURL == &lt;span class="codeString"&gt;&amp;quot;about:blank&amp;quot;&lt;/span&gt; )
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;return&lt;/span&gt; browser &lt;span class="codeKeyword"&gt;as&lt;/span&gt; &lt;span class="codeClass"&gt;IWebBrowser2&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeComment"&gt;//6. We had not been able to start the instance&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;throw&lt;/span&gt; &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;InvalidOperationException&lt;/span&gt;(&lt;span class="codeString"&gt;&amp;quot;Internet Explorer could not be started&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h1&gt;Other information ?&lt;/h1&gt;
&lt;p&gt;
Here is the link to the blog I have found explaining about session merging : &lt;a href="http://blogs.msdn.com/ie/archive/2009/05/06/session-cookies-sessionstorage-and-ie8.aspx"&gt;http://blogs.msdn.com/ie/archive/2009/05/06/session-cookies-sessionstorage-and-ie8.aspx&lt;/a&gt; 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Internet-Explorer-and-Session-Merging.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Internet-Explorer-and-Session-Merging.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=cf43e5bc-72c2-42e4-a6a2-88aa42be8ad6</guid>
      <pubDate>Fri, 03 Jul 2009 09:30:00 -0600</pubDate>
      <category>Tools</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=cf43e5bc-72c2-42e4-a6a2-88aa42be8ad6</pingback:target>
      <slash:comments>98</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=cf43e5bc-72c2-42e4-a6a2-88aa42be8ad6</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Internet-Explorer-and-Session-Merging.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=cf43e5bc-72c2-42e4-a6a2-88aa42be8ad6</wfw:commentRss>
    </item>
    <item>
      <title>Criticism - Beautiful Code</title>
      <description>&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;img style="border: 0px" src="https://www.pedautreppe.com/image.axd?picture=Beautiful+Code.jpg" alt="" /&gt;&lt;/td&gt;
			&lt;td align="center"&gt;
			&lt;p&gt;
			&lt;font size="7"&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="6"&gt;Beautiful Code&lt;/font&gt; 
			&lt;/p&gt;
			&lt;p align="center"&gt;
			&lt;font size="4"&gt;Leading Programmers Explain How They Think&lt;/font&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;font size="4"&gt;&lt;/font&gt;
			&lt;/p&gt;
			&lt;p&gt;
			&lt;font size="4"&gt;By Andy Oram and Greg Wilson&lt;/font&gt; 
			&lt;/p&gt;
			&lt;br /&gt;
			&lt;font size="4"&gt;Find it on &lt;a href="http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047" target="_blank"&gt;Amazon&lt;/a&gt;&lt;/font&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" valign="top"&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;font size="3"&gt;Summary of the editor&lt;/font&gt;&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			This unique and insightful book is a collection of master classes in software design.&lt;br /&gt;
			In each chapter, today&amp;#39;s leading programmers walk through elegant solutions to hard problems, and explain what make those solutions so appealing. 
			&lt;/p&gt;
			&lt;p&gt;
			This is not simply another design patterns book, or another software engineering treatise on the right and wrong ways to do things. Instead, it gives you the chance to look over the shoulder of some superb software designers and see the world through their eyes. 
			&lt;/p&gt;
			&lt;p&gt;
			Thirty-eight master coders think aloud as they work through a project&amp;#39;s architecture, the tradeoffs made in its construction, and those moments when it was important to break rules. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;font size="3"&gt;My criticsm and comments&lt;/font&gt;&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			This book is an interesting reading to do, but to me, a bit inegal. Some chapters are very good and interesting and let&amp;#39;s say I was&amp;nbsp;less sensitive to other ones. What i will do here, is just giving a word about some chapters I found among the ones of best added values. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 2 : &amp;quot;Subversion&amp;#39;s delta-editor interface as ontology&amp;quot;&lt;/strong&gt; by Karl Fogel&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			This chapter will show a concrete example of how a classical problem can be solve : tree comparison. It uses as example one core API of Subversion, written in 2000 and still unchanged until now. The main interesting part is showing how you can do the choice of implementing a restrictive API to force users to use it in a given manner. As a consequence, all the future code becomes very predictible and the current porgram is much more robust. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 7 : &amp;quot;Beautiful tests&amp;quot;&lt;/strong&gt; by Alberto Savoia&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			I&amp;#39;m working in TDD for&amp;nbsp;years now and this chapter just bring some testing approach to you.&amp;nbsp;It starts with a very simple code example : the dichotomic search. This algorithm seem to be very simple but 12 years have been necessary to provide the first implementation proven to be bug-free, even with dealing with very large arrays. 
			&lt;/p&gt;
			&lt;p&gt;
			What I like in this chapter ? The explanation of the testing strategy : which test you can write and until which point you go to be almost sure your code is bug-free. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 8 : &amp;quot;On-the-fly code generation for image processing&amp;quot;&lt;/strong&gt; by Charles Petzold&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			Charles Petzold is delivering here a very interesting chapter, showing two meanings of the word &amp;quot;beautiful&amp;quot;. It starts with a simple - and elegant - code&amp;nbsp;to apply raster operation on images. It works good but is not so performant. As a consequence, he shows us how can generate IL code that will do the image transformation, and above all will be fast. His strategy ? Just generate minimalistic code, that won&amp;#39;t have any loop or predicate, limiting the numboer of access to array element, ... 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 14 : &amp;quot;How elegant code evolves with hardwares : The case of Gaussian elimination&amp;quot;&lt;/strong&gt; by Jack Dongarra and Piotr Luszczek&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			They present here the evolution of one of the core&amp;nbsp;method of the system LINPACK, LAPACK and ScaLAPACK. What is very interesting is how they made evolve the code to adapt it to the successive computer architecture. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 17 : &amp;quot;Another level of indirection&amp;quot;&lt;/strong&gt; by Diomidis Spinellis&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			A nice explanation of the implementation of the core of FreeBSD dedicated to the IO operation: how an additionnal level of indirection can elegantly support the different type&amp;nbsp;of file system : FAT-32, ISO-9660, NTFS, ... and can even simply support their specificities like security checks.&amp;nbsp; 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 23 : &amp;quot;Distributed programming with MapReduce&amp;quot;&lt;/strong&gt; by Jeff Dean and Sanjay Ghemawat&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			MapReduce is used internally at Google&amp;nbsp;to execute processing of a huge number of data on a huge number of computers. They describe here how we can take advantage of this framework / API to let our programs being executed on a large scale of clusters, and then re-collecting the data into the main application. One of the introduction sentence is clear enough : 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;em&gt;&amp;quot;Suppose that you have 20 billion documents, and you want to generate a count of how often each unique word occurs in the documents. With an average document size of 20 KB, just reading through the 400 terabytes of data on one machine will take roughly four months.&amp;quot;&lt;/em&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;strong&gt;Chapter 31 : &amp;quot;Emacspeak : the complete audio desktop&amp;quot; &lt;/strong&gt;by T. V. Raman&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			He explains here how he took the Emacs system&amp;nbsp;to provide him with an audio system. What was the most interesting ? The way he does. Indeed he didn&amp;#39;t modified the original code but worked in AOP (&lt;em&gt;Aspect oriented Programmation&lt;/em&gt;) using the &lt;strong&gt;advice functionality of Lisp&lt;/strong&gt; to provide Emacs with new aspects : the ability to speak. 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;u&gt;&lt;font size="3"&gt;Conclusion&lt;/font&gt;&lt;/u&gt; 
			&lt;/p&gt;
			&lt;p&gt;
			This book shows interesting code in various languages. Maybe some chapters will be harder to read because you are so unfamiliar&amp;nbsp;with Haskell or Lisp. But anyway, go for them ! They will show interesting thoughts and may point out&amp;nbsp;some functionality of the used language that will let&amp;nbsp;you think &amp;quot;&lt;em&gt;How I would do that in .NET ?&lt;/em&gt;&amp;quot;. No doubt that this book will inspire you and give you many new ideas ! 
			&lt;/p&gt;
			&lt;p&gt;
			Go for it ! 
			&lt;/p&gt;
			&lt;p&gt;
			&lt;em&gt;&lt;strong&gt;Want to find more about the books I have read ? Go to &lt;/strong&gt;&lt;/em&gt;&lt;a href="https://www.pedautreppe.com/page/My-Bookshelf.aspx" target="_blank"&gt;&lt;em&gt;&lt;strong&gt;my bookshelf&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;strong&gt; to find the few criticism I have already made !&lt;/strong&gt;&lt;/em&gt; 
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
      <link>https://www.pedautreppe.com/post/Criticism-Beautiful-Code.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Criticism-Beautiful-Code.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=9fbbaabc-4267-4912-8b95-0feb28c99146</guid>
      <pubDate>Thu, 02 Jul 2009 10:30:00 -0600</pubDate>
      <category>Books</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=9fbbaabc-4267-4912-8b95-0feb28c99146</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=9fbbaabc-4267-4912-8b95-0feb28c99146</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Criticism-Beautiful-Code.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=9fbbaabc-4267-4912-8b95-0feb28c99146</wfw:commentRss>
    </item>
    <item>
      <title>NDepend - Extracting the call tree of a function</title>
      <description>&lt;table border="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.ndepend.com" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend+small.jpg" alt="" width="59" height="60" /&gt;&lt;/a&gt; &lt;/td&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			Recently I have been in the need of extracting&amp;nbsp; kind of a &amp;quot;call tree&amp;quot; of some functions of my code. 
			&lt;/p&gt;
			&lt;p&gt;
			More exactly, it was not such the call tree, but I was needing to be able to list of methods being called by a given entry point, and then seeing the size of each tree. 
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;a href="http://www.ndepend.com" target="_blank"&gt;NDepend&lt;/a&gt; can very easily give this information. Let&amp;#39;s see how ! 
&lt;/p&gt;
&lt;h1&gt;Let&amp;#39;s start with code&lt;/h1&gt;
&lt;p&gt;
Let&amp;#39;s write some code that we&amp;#39;ll use to validate our results. We&amp;#39;ll start with a very basic set of class that will call each other: 
&lt;/p&gt;
&lt;div class="codeBlock"&gt;
&lt;pre class="codeLine"&gt;
&lt;span class="codeKeyword"&gt;namespace&lt;/span&gt; ClassLibrary1
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
{
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;SecondClass&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; DoInSecondClass()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.PrivateMethod();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; DoInSecondClass_NoPrivate() { }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; PrivateMethod() { }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;class&lt;/span&gt; &lt;span class="codeClass"&gt;TopClass&lt;/span&gt;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;public&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; Do()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.FirstMethod();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;this&lt;/span&gt;.SecondMethod();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; FirstMethod()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;SecondClass&lt;/span&gt; obj = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;SecondClass&lt;/span&gt;();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; obj.DoInSecondClass_NoPrivate();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeKeyword"&gt;private&lt;/span&gt; &lt;span class="codeKeyword"&gt;void&lt;/span&gt; SecondMethod()
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; {
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span class="codeClass"&gt;SecondClass&lt;/span&gt; obj = &lt;span class="codeKeyword"&gt;new&lt;/span&gt; &lt;span class="codeClass"&gt;SecondClass&lt;/span&gt;();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; obj.DoInSecondClass();
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
&amp;nbsp;&amp;nbsp; }
&lt;/pre&gt;
&lt;pre class="codeLine"&gt;
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h1&gt;Let&amp;#39;s create our NDepend project&lt;/h1&gt;
&lt;p&gt;
Our project is very basic but should be enough to validate our results. So now, we will create our NDepend project to start collecting (and validating) our metrics. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	Start NDepend 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Click on &amp;quot;&lt;strong&gt;Home / Start&lt;/strong&gt;&amp;quot; and choose &amp;quot;&lt;strong&gt;New Project&lt;/strong&gt;&amp;quot; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Give a project name (&amp;quot;&lt;strong&gt;NDepend Test&amp;quot;&lt;/strong&gt; for instance) and the location where you want to store it 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	In the &lt;strong&gt;Code to Analyse&lt;/strong&gt; tab, click on &lt;strong&gt;Add assemblies of a Visual Studio Solution&lt;/strong&gt; and select the project you have just created. 
	&lt;/div&gt;
	&lt;div align="center"&gt;
	&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-AddAssembly.jpg" alt="" width="600" height="140" /&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	In the &lt;strong&gt;Report&lt;/strong&gt; tab, click on &lt;strong&gt;Select All&lt;/strong&gt; &lt;br /&gt;
	&lt;/div&gt;
	&lt;div align="center"&gt;
	&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-ReportConfiguration.jpg" alt="" width="400" height="257" /&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And here you are, ready to&amp;nbsp;start the analysis ! Just click on &lt;strong&gt;Run Analysis&lt;/strong&gt; and wait for NDepend to prompt the report. 
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-RunAnalysis.jpg" alt="" width="400" height="102" /&gt; 
&lt;/div&gt;
&lt;h1&gt;Let&amp;#39;s dig into the called method&lt;/h1&gt;
&lt;p&gt;
We now want to find all the methods called by our entry point. 
&lt;/p&gt;
&lt;p&gt;
At the end of the analysis, NDepend pops up the report in your favorite browser. However, we&amp;#39;ll close it for now and we will search our entry point in the &lt;strong&gt;Class Browser&lt;/strong&gt;. To do that, either use the &lt;strong&gt;Show Menu&lt;/strong&gt; button in the menu, or the hotkey &lt;strong&gt;ctrl + alt + C&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
Just select the method you want, right-click on it, and select &lt;strong&gt;Who I use indirectly&lt;/strong&gt; and then &lt;strong&gt;SELECT METHODS WHERE ...&lt;/strong&gt; 
&lt;/p&gt;
&lt;div align="center" style="font-style: italic"&gt;
&lt;a href="https://www.pedautreppe.com/image.axd?picture=NDepend-ClassBrowser.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-ClassBrowser-small.jpg" alt="" width="300" height="181" /&gt;&lt;/a&gt;&lt;br /&gt;
Click on the image to enlarge 
&lt;/div&gt;
&lt;p&gt;
What happens here ? NDepend will generate for us a &lt;strong&gt;CQL Query&lt;/strong&gt;. A &lt;strong&gt;CQL Query&amp;nbsp;&lt;/strong&gt;is written using the &lt;strong&gt;CQL language&lt;/strong&gt;, a SQL-like&amp;nbsp;language&amp;nbsp;that allows us to run queries against our code to extract some information, statistics, .... Here we are using the following query : 
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff"&gt;SELECT METHODS WHERE &lt;/font&gt;&lt;font color="#000064"&gt;IsUsedBy &lt;/font&gt;&lt;font color="#a31515"&gt;&amp;quot;ClassLibrary1.TopClass.Do()&amp;quot;&lt;/font&gt; &lt;font color="#0000ff"&gt;ORDER BY &lt;/font&gt;&lt;font color="#000064"&gt;DepthOfIsUsedBy&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
When we look to the result, it looks pretty good, unless that we do not have the number of line of code. Easy. We can just update the CQL Query like that : 
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff"&gt;SELECT METHODS WHERE &lt;/font&gt;&lt;font color="#000064"&gt;IsUsedBy &lt;/font&gt;&lt;font color="#a31515"&gt;&amp;quot;ClassLibrary1.TopClass.Do()&amp;quot;&lt;/font&gt; &lt;font color="#0000ff"&gt;ORDER BY &lt;/font&gt;&lt;font color="#000064"&gt;DepthOfIsUsedBy&lt;/font&gt;, &lt;font color="#000064"&gt;NbLinesOfCode&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
and here the result we get : 
&lt;/p&gt;
&lt;div align="center"&gt;
&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-IsUsedBy-Result.jpg" alt="" width="421" height="379" /&gt; 
&lt;/div&gt;
&lt;p&gt;
Of course the last column is visible only because we have altered the query to add another ORDER BY clause 
&lt;/p&gt;
&lt;h1&gt;Any graphical representation ?&lt;/h1&gt;
&lt;p&gt;
It would be very nice to be able to extract a visual call tree with all the methods we have here in the CQL result. And of course, this can be done easily. Just go to the &lt;strong&gt;CQL Query Result&lt;/strong&gt; page and right clic on the line marked &lt;strong&gt;8 methods matched&lt;/strong&gt;. Then you can choose &lt;strong&gt;Export 8 methods matched to Graph&lt;/strong&gt; 
&lt;/p&gt;
&lt;div align="center" style="font-style: italic"&gt;
&lt;a href="https://www.pedautreppe.com/image.axd?picture=NDepend-IsUsedBy-GraphResult.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend-IsUsedBy-GraphResult-small.jpg" alt="" width="400" height="84" /&gt;&lt;/a&gt;&lt;br /&gt;
Click on the image to enlarge 
&lt;/div&gt;
&lt;h1&gt;Antyhing missing ?&lt;/h1&gt;
&lt;p&gt;
What we have here is pretty cool to find quickly information and in our case the dependencies between methods. Anyway, there is a functionality that could be nice to be added on the graph. We may start viewing a graph not from a CQL Query result, but from&amp;nbsp;a list of assemblies. And thus it could be interesting to be able to : 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	From a graph of assemblies dependencies : doing a zoom meaning double-clicking on an assembly to see the type dependencies of that assembly 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	On a type, being able to do a zoom, meaning double-clicking on the type to see the method dependencies of that type 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	On a mehtod being able to right-clic to add to the graph or the callers, or the callees 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;
&amp;nbsp;Anyway, even if some functionalities could be added to the tool, NDepend is a very interesting tool, easy to learn and very powerful - especially due to the CQL language. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ndepend.com/NDependDownload.aspx" target="_blank"&gt;Give it a try&lt;/a&gt;, and comment about our use ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/NDepend-Extracting-the-call-tree-of-a-function.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/NDepend-Extracting-the-call-tree-of-a-function.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=89203403-3c70-494c-b7a8-170d01b19ef7</guid>
      <pubDate>Fri, 12 Jun 2009 09:51:00 -0600</pubDate>
      <category>Tools</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=89203403-3c70-494c-b7a8-170d01b19ef7</pingback:target>
      <slash:comments>21</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=89203403-3c70-494c-b7a8-170d01b19ef7</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/NDepend-Extracting-the-call-tree-of-a-function.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=89203403-3c70-494c-b7a8-170d01b19ef7</wfw:commentRss>
    </item>
    <item>
      <title>NDepend - an analysis tool</title>
      <description>&lt;p&gt;
&lt;a href="http://www.ndepend.com" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=NDepend.jpg" alt="" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
A few months ago, &lt;a href="http://www.smacchia.com/" target="_blank"&gt;Patrick Smacchia&lt;/a&gt; offered me a professional licence of &lt;a href="http://www.ndepend.com" target="_blank"&gt;NDepend&lt;/a&gt; so I can try it on my current projects. 
&lt;/p&gt;
&lt;p&gt;
I was already knowing &lt;a href="http://www.ndepend.com" target="_blank"&gt;NDepend&lt;/a&gt; as being a reference tool for analysing code, extracting metrics, ... but I never had the opportunity to really trying it. But I was so far from the truth ! 
&lt;/p&gt;
&lt;p&gt;
Unfortunately, I have had very hard months with many things to do (day to day job, articles, conferences, ...) and I have had to postpone so many times my trials. 
&lt;/p&gt;
&lt;p&gt;
But better late than never ! It&amp;#39;s now on my top priority list and all the trials I now do with the tool show me the extarodinary possibilities of the tool. I will explain in a next post what was my&amp;nbsp;first use of &lt;a href="http://www.ndepend.com" target="_blank"&gt;NDepend&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ndepend.com/NDependDownload.aspx" target="_blank"&gt;Ready for a try ? Just download a trial version of the tool&lt;/a&gt; and have fun ! 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/NDepend-an-analysis-tool.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/NDepend-an-analysis-tool.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=ac166469-469e-43d5-ac12-61ee96578879</guid>
      <pubDate>Fri, 12 Jun 2009 09:40:00 -0600</pubDate>
      <category>Tools</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=ac166469-469e-43d5-ac12-61ee96578879</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=ac166469-469e-43d5-ac12-61ee96578879</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/NDepend-an-analysis-tool.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=ac166469-469e-43d5-ac12-61ee96578879</wfw:commentRss>
    </item>
    <item>
      <title>Continuous Integration in the Microsoft.NET World - Part 2</title>
      <description>&lt;p&gt;
&lt;img src="https://www.pedautreppe.com/image.axd?picture=Developpez.com.jpg" alt="" width="344" height="74" /&gt; 
&lt;/p&gt;
&lt;p&gt;
As I explained some time ago, I was writing an article about &lt;strong&gt;Continuous Integration in the Microsoft.NET world&lt;/strong&gt; for the (french-speaking) website &lt;a href="http://www.developpez.com/"&gt;http://www.developpez.com/&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
The article has been phased as follows : 
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="5"&gt;
	&lt;caption&gt;&lt;/caption&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th align="center" style="border-bottom: black 1px solid"&gt;&lt;strong&gt;First Part (&lt;em&gt;published on March 4th - &lt;a href="http://pedautreppe.developpez.com/tutoriels/dotnet/integration-continue-visual-studio-team-foundation-server-partie1-mstest-static-code-analysis/" target="_blank"&gt;available online here&lt;/a&gt;&lt;/em&gt;) - 43 pages&lt;/strong&gt;&lt;/th&gt;&lt;th align="center" style="border-bottom: black 1px solid"&gt;&lt;strong&gt;Second&amp;nbsp;Part (&lt;em&gt;published on&amp;nbsp;June 5th - &lt;a href="http://pedautreppe.developpez.com/tutoriels/dotnet/integration-continue-visual-studio-team-foundation-server-partie2-msbuild-tfsbuild/" target="_blank"&gt;available online here&lt;/a&gt;&lt;/em&gt;) - 62 pages&lt;/strong&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr valign="top"&gt;
			&lt;td style="width: 50%; border-right: black 1px solid"&gt;
			&lt;ul&gt;
				&lt;li&gt;
				&lt;div&gt;
				Quick introduction to continuous integration 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Why do we want Continuous Integration 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					What is Continuous Integration 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					What do we call BVTs 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Quick presentation of the tools needed for Continuous Integration (in the Microsoft.NET world) 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					MsTest 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Static Code Analysis 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					MsBuild 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					TfsBuild 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Unit Test : Writing unit tests with MsTest 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Structure of a test class 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Checking the correctness of a test 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Testing the non public API 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Unit Test : Executing tests with MsTest 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Via Visual Studio&amp;nbsp; 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Thru Command line 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Unit Test : Configuring tests 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Test Runs naming 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Code Coverage 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Deploying files 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					TimeOut 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Unit Test : Managing the tests 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Via the &amp;quot;Test View&amp;quot; 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Via the &amp;quot;Test Editor&amp;quot; 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Unit Test : Additional attributes 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Behavioral attributes 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Informational attributes 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Static Code Analysis : Presentation 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Activate the analysis 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Running the analysis 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Explication of the rule naming 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Parameterizing the analysis 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Static Code Analysis : Correcting the errors 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Correcting one error 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Correcting several errors 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Grouping the rules suppression in a global file 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Static Code Analysis : Limitations 
				&lt;/div&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
			&lt;td style="border-left: black 1px solid; width: 50%"&gt;
			&lt;ul&gt;
				&lt;li&gt;
				&lt;div&gt;
				Quick introdution to MsBuild 
				&lt;/div&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				First steps with MsBuild - Writing a basic project file 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Its structure 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					What is a task ? a target ? 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Creating and executing a project file 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Going further with MsBuild 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Ensure the project file is valid 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Properties and PropertyGroup 
					&lt;/div&gt;
					&lt;ul&gt;
						&lt;li&gt;
						&lt;div&gt;
						How to statically &amp;amp; dynamically create them ? To use them ? 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Order of declaration 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Updating the value 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Delaying the creation of a PropertyGroup 
						&lt;/div&gt;
						&lt;/li&gt;
					&lt;/ul&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Items and ItemGroup 
					&lt;/div&gt;
					&lt;ul&gt;
						&lt;li&gt;
						&lt;div&gt;
						Same detail as for Properties 
						&lt;/div&gt;
						&lt;/li&gt;
					&lt;/ul&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Executing a project file in command line 
					&lt;/div&gt;
					&lt;ul&gt;
						&lt;li&gt;
						&lt;div&gt;
						Choosing the target to execute 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Overriding properties 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Playing with verbosity 
						&lt;/div&gt;
						&lt;/li&gt;
					&lt;/ul&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Using .NET 3.5 tasks 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Playing with Targets 
					&lt;/div&gt;
					&lt;ul&gt;
						&lt;li&gt;
						&lt;div&gt;
						Control the execution order 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Explicit call of a target : 3 techniques and their differences 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Passing input and output parameters to a target 
						&lt;/div&gt;
						&lt;/li&gt;
					&lt;/ul&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Refactor a project file 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					.targets files 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Importing files from Source Control 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Create your own tasks 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					A simple one, with inputs (mandatory or not), with outputs 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Raising errors 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Debugging your task 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Quick introduction to Team Foundation Server 
				&lt;/div&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				TFS &amp;amp; Continuous Integration 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Create, edit and execute a build 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Parameter a build 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Which target can you override ? 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Managing TFS 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					Destroying, Undoing and listing files 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Presentation of TFS Power Tools 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
				&lt;li&gt;
				&lt;div&gt;
				Tips &amp;amp; Tricks 
				&lt;/div&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
To read this article, just go to &lt;a href="http://dotnet.developpez.com/"&gt;http://dotnet.developpez.com/&lt;/a&gt; or directly to my webpage on this site : &lt;a href="http://pedautreppe.developpez.com/"&gt;http://pedautreppe.developpez.com/&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Note that these article &lt;strong&gt;are available only in french for now&lt;/strong&gt;, but do not hesitate to leave comments here if you think the content is interesting and that it could be interesting that I translate it. 
&lt;/p&gt;
</description>
      <link>https://www.pedautreppe.com/post/Continuous-Integration-in-the-MicrosoftNET-World-Part-2.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Continuous-Integration-in-the-MicrosoftNET-World-Part-2.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=0c9bb42d-dfdc-4378-9664-7510f2ff3bc5</guid>
      <pubDate>Fri, 05 Jun 2009 09:58:00 -0600</pubDate>
      <category>Training</category>
      <category>.NET</category>
      <category>TDD</category>
      <category>XP</category>
      <category>Tools</category>
      <category>TFS</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=0c9bb42d-dfdc-4378-9664-7510f2ff3bc5</pingback:target>
      <slash:comments>28</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=0c9bb42d-dfdc-4378-9664-7510f2ff3bc5</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Continuous-Integration-in-the-MicrosoftNET-World-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=0c9bb42d-dfdc-4378-9664-7510f2ff3bc5</wfw:commentRss>
    </item>
    <item>
      <title>Back from Xp Days Switzerland</title>
      <description>&lt;p&gt;
&lt;img src="https://www.pedautreppe.com/image.axd?picture=XpDay2009.ch.png" alt="" width="200" height="127" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Last week, I was in Geneva with &lt;a href="http://www.linkedin.com/in/normandeschauwer" target="_blank"&gt;Norman Deschauwer&lt;/a&gt; to give two conferences in the XpDays. 
&lt;/p&gt;
&lt;h1&gt;About our sessions&lt;/h1&gt;
&lt;p&gt;
It was the first time we were giving these sessions with Norman, and I&amp;#39;m quite&amp;nbsp;happy of&amp;nbsp;this experience as we received many questions during the sessions and lots of good comments after the sessions ! You were almost 100 assisting to the conferences: more or less&amp;nbsp;35 for the&amp;nbsp;first one, and more than 60 for the second one.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
If you have any other comments about 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the way we did the presentation &lt;/li&gt;
	&lt;li&gt;the content itself &lt;/li&gt;
	&lt;li&gt;missing information or redundant information &lt;/li&gt;
	&lt;li&gt;any other subject &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
please do not hesitate to leave a comment to this post, and Norman and I will be happy to complete our explanations here and to take these remarks into account for our next conference ! 
&lt;/p&gt;
&lt;p&gt;
In the meantime, you can download our slides here : 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=XpDays+Suisse+2009+-+Mettre+en+Symbiose+des+outils+traditionnels+et+XP.pdf"&gt;XpDays Suisse 2009 - Mettre en Symbiose des outils traditionnels et XP.pdf (753,22 kb)&lt;/a&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;a rel="enclosure" href="https://www.pedautreppe.com/file.axd?file=XpDays+Suisse+2009+-+Retour+d'exp%c3%a9rience+-+XP+%c3%a0+dimension+industrielle.pdf"&gt;XpDays Suisse 2009 - Retour d&amp;#39;exp&amp;eacute;rience - XP &amp;agrave; dimension industrielle.pdf (1,45 mb)&lt;/a&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
All the slides (&lt;em&gt;including the ones of the other sessions&lt;/em&gt;) are available on the &lt;a href="http://www.xpdays.ch" target="_blank"&gt;xp day website&lt;/a&gt;. 
&lt;/p&gt;
&lt;h1&gt;About the speakers&lt;/h1&gt;
&lt;p&gt;
I have&amp;nbsp;been able&amp;nbsp;to meet&amp;nbsp;nice other speakers during this event and many of them have already blogged about it. You will&amp;nbsp;find below&amp;nbsp;the list of all speakers and some information about them (either LinkedIn contact or their blog). Whenever possible, I will include a link to their post speaking about the event. 
&lt;/p&gt;
&lt;table border="1"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Speaker Name&lt;/th&gt;&lt;th&gt;Blog and posts about the session&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/in/portiatung" target="_blank"&gt;Portia Tung&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://www.selfishprogramming.com/" target="_blank"&gt;Her Blog&lt;/a&gt; - &lt;a href="http://www.selfishprogramming.com/2009/04/02/xp-day-switzerland-a-retrospective-version-anglaise/trackback/" target="_blank"&gt;Her post&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/in/pascalvancauwenberghe" target="_blank"&gt;Pascal Van Cauwenberghe&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://blog.nayima.be/" target="_blank"&gt;His Blog&lt;/a&gt; - &lt;a href="http://blog.nayima.be/2009/04/02/xp-day-suisse-2009-retrospective-version-anglaise/trackback/" target="_blank"&gt;His post&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/in/didierbesset" target="_blank"&gt;Didier Besset&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&amp;nbsp;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/pub/0/806/594" target="_blank"&gt;Isabelle Therrien&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&amp;nbsp;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Fr&amp;eacute;d&amp;eacute;ric Sch&amp;auml;ffer&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://blog.octo.com/" target="_blank"&gt;His company blog&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Dominic Williams&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://www.dominicwilliams.net/index.html.en" target="_blank"&gt;His WebSite&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Nicolas Charpentier&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://charpi.net/blog/" target="_blank"&gt;His&amp;nbsp;Blog&lt;/a&gt; - &lt;a href="http://charpi.net/blog/2009/03/22/xp-day-suisse-2009/" target="_blank"&gt;His post&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/pub/0/400/534" target="_blank"&gt;J&amp;eacute;r&amp;ocirc;me Layat&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&amp;nbsp;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/in/ericmignot" target="_blank"&gt;Eric Mignot&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://mignots.free.fr/Eric/" target="_blank"&gt;His Blog&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/in/gabriellevan" target="_blank"&gt;Gabriel Le Van&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&amp;nbsp;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;a href="http://www.linkedin.com/pub/0/8b2/b02" target="_blank"&gt;Philippe Kern&amp;eacute;vez&lt;/a&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://www.kernevez.net/" target="_blank"&gt;His WebSite&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;About the event&lt;/h1&gt;
&lt;p&gt;
It was the first edition of the Xp Days in Switzerland but the &lt;a href="http://www.agile-swiss.org/wiki/index.php/Accueil" target="_blank"&gt;Agile Swiss team&lt;/a&gt; did a very good work ! Apart of too little space in front of the rooms to be able to speak confortably during the &amp;quot;inter-sessions&amp;quot;, nothing to say about the organization. Just a warm applause to all of the organizers ! 
&lt;/p&gt;
&lt;p&gt;
Really waiting to see the next edition and hoping we will be able to present again a session there ! They were speaking (&lt;em&gt;joking&lt;/em&gt;) to organize the next edition in the Ch&amp;acirc;teau of Gruy&amp;egrave;re. Well not so probable, but would be very interesting ! :-) 
&lt;/p&gt;
&lt;p&gt;
Just a few photos to conclude the post (&lt;em&gt;not mines&lt;/em&gt;) and I hope I will see these guys and girls in the next edition or at the next &lt;a href="http://www.citconf.com/" target="_blank"&gt;CITCON&lt;/a&gt; ! 
&lt;/p&gt;
&lt;table border="0" width="100%"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td width="50%" align="center"&gt;&lt;a href="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+1.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+1+-+small.jpg" alt="" width="250" height="188" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td width="50%" align="center"&gt;&lt;a href="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+2.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+2+-+small.jpg" alt="" width="250" height="188" /&gt;&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="50%" align="center"&gt;&lt;em&gt;On stage during our firts&amp;nbsp;session &lt;/em&gt;&lt;br /&gt;
			&lt;em&gt;&amp;quot;Return of Experience: XP with industrial dimensions&amp;quot;&lt;/em&gt; &lt;/td&gt;
			&lt;td width="50%" align="center"&gt;&lt;em&gt;Back on Stage : 1mn introduction to our second session : &lt;/em&gt;&lt;br /&gt;
			&lt;em&gt;&amp;quot;Using together Waterfall and XP tools&amp;quot;&lt;/em&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="50%" align="center"&gt;&lt;a href="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+3.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+3+-+small.jpg" alt="" width="188" height="250" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td width="50%" align="center"&gt;&lt;a href="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+4.jpg" target="_blank"&gt;&lt;img src="https://www.pedautreppe.com/image.axd?picture=XpDays2009+-+4+-+small.jpg" alt="" width="250" height="188" /&gt;&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td width="50%" align="center"&gt;&lt;em&gt;After the effort : a very good Swiss restaurant with some of the conferencers&lt;/em&gt;&lt;/td&gt;
			&lt;td width="50%" align="center"&gt;&lt;em&gt;The &amp;quot;Agile Swiss&amp;quot; team (part of it) in debriefing during the day&lt;/em&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
      <link>https://www.pedautreppe.com/post/Back-from-Xp-Days-Switzerland.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Back-from-Xp-Days-Switzerland.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=0278b439-9ff8-405f-b10b-ea282209118c</guid>
      <pubDate>Tue, 07 Apr 2009 10:21:00 -0600</pubDate>
      <category>Training</category>
      <category>XP</category>
      <category>continuous integration</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=0278b439-9ff8-405f-b10b-ea282209118c</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=0278b439-9ff8-405f-b10b-ea282209118c</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Back-from-Xp-Days-Switzerland.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=0278b439-9ff8-405f-b10b-ea282209118c</wfw:commentRss>
    </item>
    <item>
      <title>Tech Days 2009 in Antwerpen, Belgium - Day 2</title>
      <description>&lt;p&gt;
Hello, 
&lt;/p&gt;
&lt;p&gt;
Again for this day, I exclusively followed the &lt;strong&gt;Developper and Solution Architect track&lt;/strong&gt;, but switched between the sessions related to &lt;strong&gt;Client &amp;amp; Web&lt;/strong&gt;, &lt;strong&gt;Tools &amp;amp; Languages&lt;/strong&gt; and &lt;strong&gt;Servers and Services&lt;/strong&gt;.&amp;nbsp;Definitely&amp;nbsp;good sessions ans goof speakers. So many lessons to learn !&amp;nbsp; 
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
&lt;strong&gt;Session 1 :&amp;nbsp;The Daily Scrum&amp;nbsp;(&lt;em&gt;by &lt;a href="http://weblogs.asp.net/jsemeniuk/" target="_blank"&gt;Joel Semeniuk&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.stephenforte.net/" target="_blank"&gt;Stephen Forte&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
I am now working for 3 years and a half, and so I try to follow all the agile related sessions to learn a maximum of things and compare other practitionners method implementation with mine. Some key points of this session: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	The daily stand up meeting 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		The daily stand up meeting &lt;strong&gt;is not a status meeting&lt;/strong&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		The scrum faster &lt;strong&gt;is a facilitater&lt;/strong&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		Three questions to answer during the meeting : 
		&lt;/div&gt;
		&lt;ul&gt;
			&lt;li&gt;
			&lt;div&gt;
			What did you do yesterday ? 
			&lt;/div&gt;
			&lt;/li&gt;
			&lt;li&gt;
			&lt;div&gt;
			What will you do today ? 
			&lt;/div&gt;
			&lt;/li&gt;
			&lt;li&gt;
			&lt;div&gt;
			Is anything in your way ? 
			&lt;/div&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		You should not attack anyone during the meeting --&amp;gt; See him after the meeting 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	An important question to answer : &lt;strong&gt;What is &amp;quot;done&amp;quot; meaning ?&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Some book references : 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		&amp;quot;&lt;a href="http://www.amazon.fr/Agile-Project-Management-Scrum-Schwaber/dp/073561993X" target="_blank"&gt;Agile Project Management with Scrum&lt;/a&gt;&amp;quot; by &lt;a href="http://www.controlchaos.com/" target="_blank"&gt;Ken Schwaber &lt;/a&gt;
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		&amp;quot;&lt;a href="http://www.amazon.com/Agile-Estimating-Planning-Robert-Martin/dp/0131479415" target="_blank"&gt;Agile Estimating and Planning&lt;/a&gt;&amp;quot; by &lt;a href="http://blog.mountaingoatsoftware.com/" target="_blank"&gt;Mike Cohn&lt;/a&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The duration of sprint is fixed in advance, but all the sprint may not have the same length (we can plan &lt;em&gt;in advance&lt;/em&gt; that the next spring will be longer or shorter, but once it has started, we do not re-schedule it) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	There are three key parts in a project (&lt;em&gt;Functionality, Cost and Schedule&lt;/em&gt;), and only two of them can be fixed 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;
&lt;strong&gt;Session&amp;nbsp;2 :&amp;nbsp;ASP.NET MVC for Smart People &lt;em&gt;(By &lt;a href="http://www.mostlylucid.net" target="_blank"&gt;Scott Galloway&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
I was already knowing quite well the model of &lt;a href="http://www.asp.net/mvc/" target="_blank"&gt;ASP.NET MVC&lt;/a&gt; so this session didn&amp;#39;t show lots of things new. However, some key information : 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	When creating a new MVC solution, the template will create among all: 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		a &amp;quot;Content&amp;quot; folder that will hold images, ... 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		a &amp;quot;Scripts&amp;quot; folder including &lt;a href="http://jquery.com/" target="_blank"&gt;JQuery&lt;/a&gt; 1.3.1 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The template will create the controller and the associated views (on demand) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	We can use the &lt;strong&gt;[OutputCache]&lt;/strong&gt; attribute on a view 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	When doing some POST to the server, the controller works by default with the FormCollection. However, we can use the &lt;strong&gt;ModelBinding&lt;/strong&gt; to replace this FormCollection by the currently typed object we are managing 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The Model is a partial class and so we can &amp;quot;extend it&amp;quot; &lt;em&gt;(creating another partial class&lt;/em&gt;) to add some validation. For that purpose, we can use the &lt;strong&gt;IDataErrorInfo&lt;/strong&gt; interface 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Two goals of the MVC framework 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		to have a tight control on the HTML markup 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		to have&amp;nbsp;user and SEO &lt;em&gt;(Search Engine Optimization)&lt;/em&gt; friendly URLs&amp;nbsp; 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;em&gt;In my view, this framework is interesting, but I&amp;#39;m not totally convinced by its&amp;nbsp;added value. More specifically if we note that&lt;/em&gt; 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;em&gt;in ASP.NET 4.0 we&amp;#39;ll be more free to manage the HTML markup (by avoiding to have long generated IDs)&lt;/em&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	&lt;em&gt;we can already use the Routing namespace to get friendly URLs&lt;/em&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;em&gt;I think it&amp;#39;s currently generating extra work for limited added value. Well let&amp;#39;s see and try !&lt;/em&gt; 
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
&lt;strong&gt;Session&amp;nbsp;3 :&amp;nbsp;Fastest to Market : RAD Web Applications with &lt;a href="http://www.asp.net/dynamicdata/" target="_blank"&gt;ASP.NET Dynamic Data&lt;/a&gt; and Entity Framework &lt;em&gt;(By &lt;a href="http://blogs.thinktecture.com/ingo/" target="_blank"&gt;Ingo Rammer&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
One of my favorite speaker for an interesting session even if Dynamci Data is not really new for me. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	Some&amp;nbsp;new templates are available, among them we can note &amp;quot;&lt;strong&gt;Dynamic Data Entities Web Site&lt;/strong&gt;&amp;quot; to have a web site using Dynamic Data and entity Framework. Another template will use LINQ to SQL. 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	You will need to install the latest hot fixes of Entity Framework 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	In configuration : &lt;strong&gt;ScaffoldAllTables&lt;/strong&gt; means that some CRUD &lt;em&gt;(Create, Read, Update, Delete)&lt;/em&gt; interface will be generated for all the tables of database we are targeting. But we can decide to scaffold only the tables we want 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Dynamic Data will fo automatic form generation 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	We can use Routing 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		&lt;strong&gt;Be careful, &lt;/strong&gt;if the routing you specify creates URLs not finishing with .aspx, IIS Will not redirect to ASP.NET We need to change the HttpMapping to redirect all the URLs to &lt;strong&gt;aspnet_isapi.dll&lt;/strong&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	We can use the &lt;strong&gt;[MetadataType]&lt;/strong&gt; attribute to specify wich class will&amp;nbsp;contain the definition of the attributes. This will be usefull if we want to add some extra attributes on the generated members of the entity framework model 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		Ingo has published on his blog a small tool to generate al the metadata type class based on a model. It is available here 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		We can use a &lt;strong&gt;[DataType]&lt;/strong&gt; attribute to interecept the formatting of a column thru the Format method 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		It is not possible currently to reorder the columns, except if we use the &lt;strong&gt;IAutoFieldGenerator&lt;/strong&gt; interface of &lt;em&gt;classical &lt;/em&gt;ASP.NET&amp;nbsp; 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The conclusion of Ingo ? Dynamic Data will never get used to generate a business web site where high performance is needed as everything is done here at runtime. Moreover, managing business rules thru this model could be tricky. However this could be very usefull to generate some maintenance pages very quickly. 
&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;
&lt;strong&gt;Session&amp;nbsp;4 :&amp;nbsp;ASP.NET 4.0 what is coming? How do I prepare my app?&amp;nbsp;&lt;em&gt;(By &lt;a href="http://www.mostlylucid.net" target="_blank"&gt;Scott Galloway&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
No so many information to remember here. Let&amp;#39;s just say that: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	Lot&amp;#39;s of snippets will now be available in the HTML code 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Some web.config transformation files have been added. This will allow to change osme attributes dependent of the configuration we are using (development database versus production database for instance) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	An &lt;strong&gt;OutputCacheProvider&lt;/strong&gt; has been added, targeting &amp;quot;On Disk&amp;quot;, &amp;quot;In Memory&amp;quot;, or even &amp;quot;Azure&amp;quot; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	We can now control more the client ids that will generated : a new &lt;strong&gt;ClientIdMode&lt;/strong&gt; property is available on the controls: 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		&lt;strong&gt;static&lt;/strong&gt;: the ids will &amp;quot;forget&amp;quot; the naming containers part and will restart to this point 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		&lt;strong&gt;predictable:&lt;/strong&gt; we can&amp;nbsp;use a pattern to generate the Ids as for instance the identity of a data row in a grid 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Visual Studio 2010 will be shipped with JQuery and Ajax Control Toolkit 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;
&lt;strong&gt;Session 5 :&amp;nbsp;ASP.NET AJAX 4.0 &lt;em&gt;(By &lt;a href="http://blogs.msdn.com/jurgen_postelmans/" target="_blank"&gt;Jurgen Postelmans&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Jurgen has posted the slides of his session on his blog on &lt;a href="http://www.u2u.be/res/articles.aspx"&gt;http://www.u2u.be/res/articles.aspx&lt;/a&gt;. 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	Jurgen has reinsisted on the fact that the UpdatePanel is doing an asynchronous POST to the server, sending all the data of the pages (view state included), and that the server will thus process all the page (running all the events Page_Load, ...) to send back the HTML of the parts to update (ie the panel itself AND the view state) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	POX : Plain Old XML 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	If we want to use WCF from Javascript, we must declare our service using &lt;strong&gt;webHttpBinding&lt;/strong&gt; and adding a behavior declaring &lt;strong&gt;enableWebScript&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	To view the WCF service proxy that can be used in the javascript, we can use the WCF service URL and adding at the end &lt;strong&gt;/js&lt;/strong&gt; or &lt;strong&gt;/jsdebug&lt;/strong&gt;. This URL can be simply referenced on the page where we wantr to use the service 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	In javascript, the OnSuccess and OnFailure method take three parameters : The data received (or the error), the context and the method name 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	To do some binding in our HTML, we must use the syntax: 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		&lt;strong&gt;{{expression}}&lt;/strong&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		where &amp;quot;expression&amp;quot; can contain method call, variables, ... 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	A new client class &lt;strong&gt;DataView&lt;/strong&gt; has been added 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		One method &lt;strong&gt;set_data&lt;/strong&gt; to fill the dataview 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		The method &lt;strong&gt;render&lt;/strong&gt; has been replaced by &lt;strong&gt;updated&lt;/strong&gt; 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	ASP.NET AJAX recognize tthe CSS class &lt;strong&gt;sys_template&lt;/strong&gt; and will remove it when rendering an object. This class should be reponsible of hiding one element (typically visibility=hidden and display=none) 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The prerogative &lt;strong&gt;sys:activate=&amp;quot;*&amp;quot;&lt;/strong&gt; is used to define the elements (here all of them) where we allow the creation of a control we have referenced in an xml namespace 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	A class &lt;strong&gt;Sys.Observer&lt;/strong&gt; has been added. The method &lt;strong&gt;remove&lt;/strong&gt; must be used to inform a grid that we have removed an element. This class is similar to the .NET classes &lt;strong&gt;ObservableCollection &lt;/strong&gt;and&lt;strong&gt;&amp;nbsp;INotifyPropertyChanged&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;
&amp;nbsp;&lt;strong&gt;Session&amp;nbsp;6 :&amp;nbsp;Azure&amp;nbsp;- A lap around cloud-hosted Services&amp;nbsp;&lt;em&gt;(By &lt;a href="http://blogs.thinktecture.com/ingo/" target="_blank"&gt;Ingo Rammer&lt;/a&gt;)&lt;/em&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Last session of the TechDays, and last one about Azure. Some more information to get: 
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
	&lt;div&gt;
	SQL Services is a high scalable database available in the cloud, that should support up to a peta bytes of data 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	A Web Role can be seen as equivalent of an ASP.NET application that has medium trust 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The &lt;strong&gt;Development Fabric&lt;/strong&gt; allow to debug a cloug computing project locally 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	Azure provides us with a &lt;strong&gt;Zero Downtime Environment&lt;/strong&gt; 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		Two platform are available online : Production and Staging 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		A simple click will swith between these two platforms 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	A new &lt;strong&gt;SessionStateProvider&lt;/strong&gt; has been provided to target Azure 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	A WebRole is done to perform Synchronous Operations, while a WorkerRole will be in charge of Asynchronous Operations 
	&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;div&gt;
	The WorkerRole is based on a queue 
	&lt;/div&gt;
	&lt;ul&gt;
		&lt;li&gt;
		&lt;div&gt;
		It&amp;#39;s important to (explicitely) delete a message from the queue once it is processed. Otherwise, it could be treated by another worker role later 
		&lt;/div&gt;
		&lt;/li&gt;
		&lt;li&gt;
		&lt;div&gt;
		This process (without implicit deletion) has been done to counter a potential message loss if a server has a problem while processing it 
		&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;&amp;nbsp; 
&lt;/ul&gt;
</description>
      <link>https://www.pedautreppe.com/post/Tech-Days-2009-in-Antwerpen-Belgium-Day-2.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Tech-Days-2009-in-Antwerpen-Belgium-Day-2.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=1498e207-7371-405f-9999-6e81bd10b2b7</guid>
      <pubDate>Sun, 22 Mar 2009 22:06:00 -0600</pubDate>
      <category>Training</category>
      <category>.NET</category>
      <category>XP</category>
      <category>ASP.NET</category>
      <category>Tools</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=1498e207-7371-405f-9999-6e81bd10b2b7</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=1498e207-7371-405f-9999-6e81bd10b2b7</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Tech-Days-2009-in-Antwerpen-Belgium-Day-2.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=1498e207-7371-405f-9999-6e81bd10b2b7</wfw:commentRss>
    </item>
    <item>
      <title>Meet me... in the XP Days 2009 in Switzerland</title>
      <description>&lt;table border="0"&gt;
	&lt;tbody&gt;
		&lt;tr valign="top"&gt;
			&lt;td&gt;&lt;a href="http://xpdays.ch" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://www.xpdays.ch" target="_blank"&gt;&lt;img style="width: 200px; height: 127px" src="https://www.pedautreppe.com/image.axd?picture=XpDay2009.ch.png" alt="" width="200" height="127" /&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;td valign="top"&gt;
			&lt;p&gt;
			With one of my colleague - Norman Deschauwer - I will be present for the first&amp;nbsp;edition of the &lt;a href="http://xpday.agile-swiss.org/index.php?page=le-programme" target="_blank"&gt;French Speaking Swiss Xp Days&lt;/a&gt;. 
			&lt;/p&gt;
			&lt;p&gt;
			We will give two conferences there (in French) : 
			&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;
				&lt;div&gt;
				Tools presentation 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					How can we make work together tools coming from traditional methodologies and the ones coming from XP and Agile communities ? 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Our Agenda will follow our maturity in the methodology 
					&lt;/div&gt;
					&lt;ul&gt;
						&lt;li&gt;
						&lt;div&gt;
						The Genesis of the method in our project : learning and discoveries 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Coaching : getting more agile 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Internal Crisis : how we were wrong in the use of the method tools 
						&lt;/div&gt;
						&lt;/li&gt;
						&lt;li&gt;
						&lt;div&gt;
						Maturity ! 
						&lt;/div&gt;
						&lt;/li&gt;
					&lt;/ul&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;ul&gt;
				&lt;li&gt;
				&lt;div&gt;
				Information Session : XP with an industrial level 
				&lt;/div&gt;
				&lt;ul&gt;
					&lt;li&gt;
					&lt;div&gt;
					We&amp;nbsp;have&amp;nbsp;been&amp;nbsp;working in XP for 4 years in a project presenting a few characteristics of a traditional projet (duration, number of people involved). Anyway we are doing it fully in XP, but this force us to adapt ourselves and doing some compromises on our implementation of the methodology 
					&lt;/div&gt;
					&lt;/li&gt;
					&lt;li&gt;
					&lt;div&gt;
					Our Agenda will browse among the 13 practices of XP and how we have &lt;em&gt;implemented&lt;/em&gt; them in our project 
					&lt;/div&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
				&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;
			After the session, Norman and I will blog about this event and we&amp;#39;ll probably propose downloading the slides of the sessions. 
			&lt;/p&gt;
			&lt;p&gt;
			Interested ? Meet us there ! 
			&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
      <link>https://www.pedautreppe.com/post/Meet-me-in-the-XP-Days-2009-in-Switzerland.aspx</link>
      <author>pe.dautreppe</author>
      <comments>https://www.pedautreppe.com/post/Meet-me-in-the-XP-Days-2009-in-Switzerland.aspx#comment</comments>
      <guid>https://www.pedautreppe.com/post.aspx?id=8477ba8a-21fd-437a-8238-89f7b83d110e</guid>
      <pubDate>Tue, 17 Mar 2009 10:12:00 -0600</pubDate>
      <category>Training</category>
      <dc:publisher>pe.dautreppe</dc:publisher>
      <pingback:server>https://www.pedautreppe.com/pingback.axd</pingback:server>
      <pingback:target>https://www.pedautreppe.com/post.aspx?id=8477ba8a-21fd-437a-8238-89f7b83d110e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>https://www.pedautreppe.com/trackback.axd?id=8477ba8a-21fd-437a-8238-89f7b83d110e</trackback:ping>
      <wfw:comment>https://www.pedautreppe.com/post/Meet-me-in-the-XP-Days-2009-in-Switzerland.aspx#comment</wfw:comment>
      <wfw:commentRss>https://www.pedautreppe.com/syndication.axd?post=8477ba8a-21fd-437a-8238-89f7b83d110e</wfw:commentRss>
    </item>
  </channel>
</rss>