<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Ed at Work</title>
    <link>http://www.ejball.com/EdAtWork/</link>
    <description>Thoughts from the office by Ed Ball</description>
    <copyright>Ed Ball</copyright>
    <lastBuildDate>Tue, 22 Nov 2005 23:33:32 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.0</generator>
    <managingEditor>ed@libronix.com</managingEditor>
    <webMaster>ed@libronix.com</webMaster>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=5159b47a-a750-44a3-b8c9-2ec87e7ebc0e</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,5159b47a-a750-44a3-b8c9-2ec87e7ebc0e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,5159b47a-a750-44a3-b8c9-2ec87e7ebc0e.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=5159b47a-a750-44a3-b8c9-2ec87e7ebc0e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This PDC 2005 session was a great introduction to the top-level application framework
      used by WPF. We learned about the Application class. We learned about the various
      ways to store application settings. We learned about the various supported “user experience
      models,” and about the navigation-based model in particular.
   </p>
        <p>
      I didn’t realize that WPF would have special support for “structured navigation” –
      that’s when you navigate to a page or series of pages that has a “finish” button at
      the end that brings you back to the page where you started the trail, akin to a traditional
      application that launches a wizard dialog, but all in the main frame of the application.
      I still don’t quite understand the programming model, but it didn’t look too complicated.
   </p>
        <p>
      The session also talked about running WPF applications from a Web browser. The same
      application model is used for both Windows and Web apps, though there are special
      challenges for Web apps, especially as regards code access security.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=5159b47a-a750-44a3-b8c9-2ec87e7ebc0e" />
      </body>
      <title>PRS314: Windows Presentation Foundation (“Avalon”): Using Application Services</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,5159b47a-a750-44a3-b8c9-2ec87e7ebc0e.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/11/22/PRS314WindowsPresentationFoundationAvalonUsingApplicationServices.aspx</link>
      <pubDate>Tue, 22 Nov 2005 23:33:32 GMT</pubDate>
      <description>&lt;p&gt;
   This PDC 2005 session was a great introduction to the top-level application framework
   used by WPF. We learned about the Application class. We learned about the various
   ways to store application settings. We learned about the various supported “user experience
   models,” and about the navigation-based model in particular.
&lt;/p&gt;
&lt;p&gt;
   I didn’t realize that WPF would have special support for “structured navigation” –
   that’s when you navigate to a page or series of pages that has a “finish” button at
   the end that brings you back to the page where you started the trail, akin to a traditional
   application that launches a wizard dialog, but all in the main frame of the application.
   I still don’t quite understand the programming model, but it didn’t look too complicated.
&lt;/p&gt;
&lt;p&gt;
   The session also talked about running WPF applications from a Web browser. The same
   application model is used for both Windows and Web apps, though there are special
   challenges for Web apps, especially as regards code access security.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=5159b47a-a750-44a3-b8c9-2ec87e7ebc0e" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,5159b47a-a750-44a3-b8c9-2ec87e7ebc0e.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=c8570cf1-c90a-4f45-8889-b7900481fa76</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,c8570cf1-c90a-4f45-8889-b7900481fa76.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,c8570cf1-c90a-4f45-8889-b7900481fa76.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=c8570cf1-c90a-4f45-8889-b7900481fa76</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The Microsoft Visual Studio Express Editions are <a href="http://msdn.microsoft.com/vstudio/express/support/faq/default.aspx#pricing">absolutely
      free</a>! Installed! 
   </p>
        <ul>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/express/visualc/">Visual C++ 2005 Express</a>
          </li>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/">Visual C# 2005 Express</a>
          </li>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/express/vwd/">Visual Web Developer 2005
         Express</a>
          </li>
          <li>
            <a href="http://msdn.microsoft.com/vstudio/express/sql/">SQL Server 2005 Express</a>
          </li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c8570cf1-c90a-4f45-8889-b7900481fa76" />
      </body>
      <title>Visual Studio Express: Free!</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,c8570cf1-c90a-4f45-8889-b7900481fa76.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/11/08/VisualStudioExpressFree.aspx</link>
      <pubDate>Tue, 08 Nov 2005 16:25:38 GMT</pubDate>
      <description>&lt;p&gt;
   The Microsoft Visual Studio Express Editions are &lt;a href="http://msdn.microsoft.com/vstudio/express/support/faq/default.aspx#pricing"&gt;absolutely
   free&lt;/a&gt;!&amp;nbsp;Installed! 
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      &lt;a href="http://msdn.microsoft.com/vstudio/express/visualc/"&gt;Visual C++ 2005 Express&lt;/a&gt; 
   &lt;li&gt;
      &lt;a href="http://msdn.microsoft.com/vstudio/express/visualcsharp/"&gt;Visual C# 2005 Express&lt;/a&gt;
   &lt;/li&gt;
   &lt;li&gt;
      &lt;a href="http://msdn.microsoft.com/vstudio/express/vwd/"&gt;Visual Web Developer 2005
      Express&lt;/a&gt; 
   &lt;li&gt;
      &lt;a href="http://msdn.microsoft.com/vstudio/express/sql/"&gt;SQL Server 2005 Express&lt;/a&gt;
   &lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c8570cf1-c90a-4f45-8889-b7900481fa76" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,c8570cf1-c90a-4f45-8889-b7900481fa76.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=6e54b46e-4809-4022-bafc-d27e36f07ad0</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,6e54b46e-4809-4022-bafc-d27e36f07ad0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,6e54b46e-4809-4022-bafc-d27e36f07ad0.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=6e54b46e-4809-4022-bafc-d27e36f07ad0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This PDC 2005 session was about WinFS, the object-oriented storage system that Microsoft
      has been working on for years. It is certainly interesting, but still basically the
      same technology that they were talking about two years ago. It’s also hard to get
      excited about a technology that they’re not planning to ship until after Windows Vista
      ships in late 2006…
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6e54b46e-4809-4022-bafc-d27e36f07ad0" />
      </body>
      <title>DAT310: “WinFS” Future Directions</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,6e54b46e-4809-4022-bafc-d27e36f07ad0.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/24/DAT310WinFSFutureDirections.aspx</link>
      <pubDate>Mon, 24 Oct 2005 15:03:30 GMT</pubDate>
      <description>&lt;p&gt;
   This PDC 2005 session was about WinFS, the object-oriented storage system that Microsoft
   has been working on for years. It is certainly interesting, but still basically the
   same technology that they were talking about two years ago. It’s also hard to get
   excited about a technology that they’re not planning to ship until after Windows Vista
   ships in late 2006…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6e54b46e-4809-4022-bafc-d27e36f07ad0" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,6e54b46e-4809-4022-bafc-d27e36f07ad0.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=caadde7f-cd23-4308-96a4-339f55dfd46c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,caadde7f-cd23-4308-96a4-339f55dfd46c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,caadde7f-cd23-4308-96a4-339f55dfd46c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=caadde7f-cd23-4308-96a4-339f55dfd46c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I love writing extensible applications, so I was very interested in attending this
      PDC session. The obvious approach to writing managed add-ins is to simply load any
      assemblies that are registered as add-ins, use reflection to look for specially-marked
      types in each assembly, create instances of those types, and communicate with those
      instances. This session talked about potential problems with that approach and discussed
      solutions.
   </p>
        <p>
      One problem is that old add-ins won’t work with new versions of the application (and
      vice-versa) because of strong naming. This problem is solved by using non-versioned,
      stable interfaces for any communication between the application and the add-in.
   </p>
        <p>
      If the add-in assembly is loaded directly, the assembly can’t be unloaded if the add-in
      is unloaded. This can be solved by loading the assembly into its own app domain, or
      even in its own process. Also, the add-in must run under the same security as the
      application unless it is loaded into its own app domain or process. Another potential
      problem is that the add-in must use the same version of the CLR and the .NET
      Framework, but the only way around that is to load the add-in into a separate process.
   </p>
        <p>
      Of course, loading an add-in into its own app domain has its own problems. Objects
      that are passed between the application and the add-in must be serializable or marshal-by-ref,
      which can be more work, and decreases performance. Loading an add-in into its own
      process provides even worse performance, and communication between the two becomes
      even more difficult.
   </p>
        <p>
      The speakers thus recommended loading add-in assemblies into their own app domains,
      and spent the rest of the session explaining the add-in model used by the new System.AddIn
      namespace. Unfortunately, I was pretty lost for most of the presentation; it can’t
      be as complicated as it seemed…
   </p>
        <p>
      In any case, I’ll still consider the direct approach for loading add-ins if I ever
      need them for a desktop application. Leaving an add-in assembly loaded even after
      the add-in is unloaded is not a significant problem for short-lived client apps. Giving
      add-ins full trust seems a bit dangerous, but if you trust an add-in developer enough
      to run their installer, it’s not a stretch that you need to trust their add-in as
      well.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=caadde7f-cd23-4308-96a4-339f55dfd46c" />
      </body>
      <title>FUN309: Designing Managed Add-Ins for Reliability, Security, and Versioning</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,caadde7f-cd23-4308-96a4-339f55dfd46c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/21/FUN309DesigningManagedAddInsForReliabilitySecurityAndVersioning.aspx</link>
      <pubDate>Fri, 21 Oct 2005 15:31:56 GMT</pubDate>
      <description>&lt;p&gt;
   I love writing extensible applications, so I was very interested in attending this
   PDC session. The obvious approach to writing managed add-ins is to simply load any
   assemblies that are registered as add-ins, use reflection to look for specially-marked
   types in each assembly, create instances of those types, and communicate with those
   instances. This session talked about potential problems with that approach and discussed
   solutions.
&lt;/p&gt;
&lt;p&gt;
   One problem is that old add-ins won’t work with new versions of the application (and
   vice-versa) because of strong naming. This problem is solved by using non-versioned,
   stable interfaces for any communication between the application and the add-in.
&lt;/p&gt;
&lt;p&gt;
   If the add-in assembly is loaded directly, the assembly can’t be unloaded if the add-in
   is unloaded. This can be solved by loading the assembly into its own app domain, or
   even in its own process. Also, the add-in must run under the same security as the
   application unless it is loaded into its own app domain or process.&amp;nbsp;Another potential
   problem is that&amp;nbsp;the add-in must use the same version of the CLR and the .NET
   Framework, but the only way around that is to load the add-in into a separate process.
&lt;/p&gt;
&lt;p&gt;
   Of course, loading an add-in into its own app domain has its own problems. Objects
   that are passed between the application and the add-in must be serializable or marshal-by-ref,
   which can be more work, and decreases performance. Loading an add-in into its own
   process provides even worse performance, and communication between the two becomes
   even more difficult.
&lt;/p&gt;
&lt;p&gt;
   The speakers thus recommended loading add-in assemblies&amp;nbsp;into their own app domains,
   and spent the rest of the session explaining the add-in model used by the new System.AddIn
   namespace. Unfortunately, I was pretty lost for most of the presentation; it can’t
   be as complicated as it seemed…
&lt;/p&gt;
&lt;p&gt;
   In any case, I’ll still consider the direct approach for loading add-ins if I ever
   need them for a desktop application. Leaving an add-in assembly loaded even after
   the add-in is unloaded is not a significant problem for short-lived client apps. Giving
   add-ins full trust seems a bit dangerous, but if you trust an add-in developer enough
   to run their installer, it’s not a stretch that you need to trust their add-in as
   well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=caadde7f-cd23-4308-96a4-339f55dfd46c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,caadde7f-cd23-4308-96a4-339f55dfd46c.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=263cc079-e70f-4467-b536-61bc78f1e0a8</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,263cc079-e70f-4467-b536-61bc78f1e0a8.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,263cc079-e70f-4467-b536-61bc78f1e0a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=263cc079-e70f-4467-b536-61bc78f1e0a8</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      (Ah, “performant.” I used that word the other day while talking to my boss, and he
      wondered if I had made it up. It’s not actually a word, and most people talking about
      it on the Internet don’t seem to like it very much, but it works for me. I knew immediately
      what it was getting at – “having high performance,” basically. I wonder how long it
      will take to make it into the dictionary…)
   </p>
        <p>
      Rico Mariani’s session was mostly about performance improvements to the .NET Framework
      2.0. He talked about improvements to “ngen,” which should be good news for the startup
      time of client applications. He talked about “generic” collections – and warned against
      creating too many collection types that store less than 500 value type items. He talked
      about how “foreach” should now always be the optimal way to enumerate a collection.
      Garbage collection is faster, and it’s okay to call GC.Collect after the user does
      something that causes “mass extinction” of objects. Throwing exceptions is faster
      – though still discouraged for normal flow control. Security is faster, particularly
      for “full trust” applications. Reflection is faster – good news for users of custom
      attributes. Profiling is better. Delegates are faster. String hashing is faster. Et
      cetera. Basically, to “write performant managed code,” use the latest .NET Framework.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=263cc079-e70f-4467-b536-61bc78f1e0a8" />
      </body>
      <title>FUNL04: Tips &amp; Tricks: Writing Performant Managed Code</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,263cc079-e70f-4467-b536-61bc78f1e0a8.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/18/FUNL04TipsTricksWritingPerformantManagedCode.aspx</link>
      <pubDate>Tue, 18 Oct 2005 15:28:35 GMT</pubDate>
      <description>&lt;p&gt;
   (Ah, “performant.” I used that word the other day while talking to my boss, and he
   wondered if I had made it up. It’s not actually a word, and most people talking about
   it on the Internet don’t seem to like it very much, but it works for me. I knew immediately
   what it was getting at – “having high performance,” basically. I wonder how long it
   will take to make it into the dictionary…)
&lt;/p&gt;
&lt;p&gt;
   Rico Mariani’s session was mostly about performance improvements to the .NET Framework
   2.0. He talked about improvements to “ngen,” which should be good news for the startup
   time of client applications. He talked about “generic” collections – and warned against
   creating too many collection types that store less than 500 value type items. He talked
   about how “foreach” should now always be the optimal way to enumerate a collection.
   Garbage collection is faster, and it’s okay to call GC.Collect after the user does
   something that causes “mass extinction” of objects. Throwing exceptions is faster
   – though still discouraged for normal flow control. Security is faster, particularly
   for “full trust” applications. Reflection is faster – good news for users of custom
   attributes. Profiling is better. Delegates are faster. String hashing is faster. Et
   cetera. Basically, to “write performant managed code,” use the latest .NET Framework.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=263cc079-e70f-4467-b536-61bc78f1e0a8" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,263cc079-e70f-4467-b536-61bc78f1e0a8.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=9e90ef0b-951b-44d4-a768-17d309305159</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,9e90ef0b-951b-44d4-a768-17d309305159.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,9e90ef0b-951b-44d4-a768-17d309305159.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=9e90ef0b-951b-44d4-a768-17d309305159</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Brent Rector’s session was not what I had hoped it would be. I thought I was going
      to learn about the APIs, but the session was about some of the SDK tools. The session
      seemed pretty random; here are some of the interesting bits:
   </p>
        <ul>
          <li>
         The XSD tool will help you build an XML schema from a .NET class or an existing XML
         document, and it will build a .NET class from an XML schema.</li>
          <li>
         The SGEN tool will build XML serializer code so that it doesn’t have to happen via
         reflection at runtime.</li>
          <li>
         The Fusion Log Viewer can be used to see where your .NET assemblies are coming from,
         but the tool is ugly and finicky.</li>
          <li>
         The new Windows shell (code-named Monad) looks very cool, but I wonder if I’ll ever
         take the time to learn it. If you spend a lot of time writing batch files and one-off
         scripts, you should really appreciate its power.</li>
          <li>
         Perforator is a tool that can help diagnose WPF (Avalon) performance (frame rates,
         etc.).</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9e90ef0b-951b-44d4-a768-17d309305159" />
      </body>
      <title>FUNL02: Lap around the WinFX and Win32 SDKs</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,9e90ef0b-951b-44d4-a768-17d309305159.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/06/FUNL02LapAroundTheWinFXAndWin32SDKs.aspx</link>
      <pubDate>Thu, 06 Oct 2005 20:52:26 GMT</pubDate>
      <description>&lt;p&gt;
   Brent Rector’s session was not what I had hoped it would be. I thought I was going
   to learn about the APIs, but the session was about some of the SDK tools. The session
   seemed pretty random; here are some of the interesting bits:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      The XSD tool will help you build an XML schema from a .NET class or an existing XML
      document, and it will build a .NET class from an XML schema.&lt;/li&gt;
   &lt;li&gt;
      The SGEN tool will build XML serializer code so that it doesn’t have to happen via
      reflection at runtime.&lt;/li&gt;
   &lt;li&gt;
      The Fusion Log Viewer can be used to see where your .NET assemblies are coming from,
      but the tool is ugly and finicky.&lt;/li&gt;
   &lt;li&gt;
      The new Windows shell (code-named Monad) looks very cool, but I wonder if I’ll ever
      take the time to learn it. If you spend a lot of time writing batch files and one-off
      scripts, you should really appreciate its power.&lt;/li&gt;
   &lt;li&gt;
      Perforator is a tool that can help diagnose WPF (Avalon) performance (frame rates,
      etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9e90ef0b-951b-44d4-a768-17d309305159" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,9e90ef0b-951b-44d4-a768-17d309305159.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=2b4a1317-76b4-4feb-82e6-aea9592610f4</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,2b4a1317-76b4-4feb-82e6-aea9592610f4.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,2b4a1317-76b4-4feb-82e6-aea9592610f4.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=2b4a1317-76b4-4feb-82e6-aea9592610f4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I attended two Birds of a Feather sessions, which are informal sessions where the
      (generally small) audience is expected to participate in the discussion.
   </p>
        <p>
      I started at Keith Brown’s “Writing Secure Code” session, but it ended up focusing
      on server security, which really isn’t relevant to what I do. So I switched to John
      Moody’s “Help! I Have to Manage Programmers!”, which was packed to the gills. Clearly
      this topic resonated with people, and there were lots of strong opinions in the audience.
      Much of the discussion was about task estimation. One interesting idea was to allow
      experienced programmers to estimate longer tasks, but require newer programmers to
      estimate shorter tasks.
   </p>
        <p>
      For the next session, I returned to Keith Brown for “Writing Partially Trusted Code,”
      which was much more interesting to me than his first session, as it stayed more focused
      on client applications. I actually learned some things about .NET code access security,
      the most important of which was about assembly-level security attributes. Even though
      FxCop wants me to <a href="http://www.gotdotnet.com/team/fxcop/docs/rules/Usage/AssembliesShouldDeclareMinimumSecurity.html">declare
      security attributes on my assemblies</a>, the experts at the session insisted that
      it is often best to simply ignore that rule. That’s great, because I still don’t understand
      how I would use them.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2b4a1317-76b4-4feb-82e6-aea9592610f4" />
      </body>
      <title>PDC 2005 Birds of a Feather</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,2b4a1317-76b4-4feb-82e6-aea9592610f4.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/04/PDC2005BirdsOfAFeather.aspx</link>
      <pubDate>Tue, 04 Oct 2005 17:33:02 GMT</pubDate>
      <description>&lt;p&gt;
   I attended two Birds of a Feather sessions, which are informal sessions where the
   (generally small) audience is expected to participate in the discussion.
&lt;/p&gt;
&lt;p&gt;
   I started at Keith Brown’s “Writing Secure Code” session, but it ended up focusing
   on server security, which really isn’t relevant to what I do. So I switched to John
   Moody’s “Help! I Have to Manage Programmers!”, which was packed to the gills. Clearly
   this topic resonated with people, and there were lots of strong opinions in the audience.
   Much of the discussion was about task estimation. One interesting idea was to allow
   experienced programmers to estimate longer tasks, but require newer programmers to
   estimate shorter tasks.
&lt;/p&gt;
&lt;p&gt;
   For the next session, I returned to Keith Brown for “Writing Partially Trusted Code,”
   which was much more interesting to me than his first session, as it stayed more focused
   on client applications. I actually learned some things about .NET code access security,
   the most important of which was about assembly-level security attributes. Even though
   FxCop wants me to &lt;a href="http://www.gotdotnet.com/team/fxcop/docs/rules/Usage/AssembliesShouldDeclareMinimumSecurity.html"&gt;declare
   security attributes on my assemblies&lt;/a&gt;, the experts at the session insisted that
   it is often best to simply ignore that rule. That’s great, because I still don’t understand
   how I would use them.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2b4a1317-76b4-4feb-82e6-aea9592610f4" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,2b4a1317-76b4-4feb-82e6-aea9592610f4.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=09908ec7-7e0f-4669-ad27-50eaecb0a4de</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,09908ec7-7e0f-4669-ad27-50eaecb0a4de.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,09908ec7-7e0f-4669-ad27-50eaecb0a4de.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=09908ec7-7e0f-4669-ad27-50eaecb0a4de</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This session by Joe Duffy had more practical advice about programming with concurrency.
      Some highlights:
   </p>
        <ul>
          <li>
         It is important to maintain invariants (“assumed conditions in your code”), even in
         the face of exceptions.</li>
          <li>
         Asynchronous exceptions like thread aborts can happen almost anywhere, which can make
         invariant maintenance difficult, but .NET prevents them from being thrown from certain
         sensitive areas, such as catch/finally blocks, static constructors, and native code.</li>
          <li>
         Generally speaking, when you write a class, you should make any static state thread-safe,
         but require your client to lock access to your class instances, since you can’t predict
         their concurrency needs.</li>
          <li>
         Always protect shared memory with locks. In .NET, locks do more than prevent concurrent
         access; they also guard the code against hardware instruction reordering, etc.</li>
          <li>
         In the future, parallel programming will be the only way to leverage the increasing
         speed of computers, as the speed of a single CPU is nearing its physical maximum.</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=09908ec7-7e0f-4669-ad27-50eaecb0a4de" />
      </body>
      <title>FUN405: Programming with Concurrency (Part 2)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,09908ec7-7e0f-4669-ad27-50eaecb0a4de.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/30/FUN405ProgrammingWithConcurrencyPart2.aspx</link>
      <pubDate>Fri, 30 Sep 2005 20:37:11 GMT</pubDate>
      <description>&lt;p&gt;
   This session by Joe Duffy had more practical advice about programming with concurrency.
   Some highlights:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      It is important to maintain invariants (“assumed conditions in your code”), even in
      the face of exceptions.&lt;/li&gt;
   &lt;li&gt;
      Asynchronous exceptions like thread aborts can happen almost anywhere, which can make
      invariant maintenance difficult, but .NET prevents them from being thrown from certain
      sensitive areas, such as catch/finally blocks, static constructors, and native code.&lt;/li&gt;
   &lt;li&gt;
      Generally speaking, when you write a class, you should make any static state thread-safe,
      but require your client to lock access to your class instances, since you can’t predict
      their concurrency needs.&lt;/li&gt;
   &lt;li&gt;
      Always protect shared memory with locks. In .NET, locks do more than prevent concurrent
      access; they also guard the code against hardware instruction reordering, etc.&lt;/li&gt;
   &lt;li&gt;
      In the future, parallel programming will be the only way to leverage the increasing
      speed of computers, as the speed of a single CPU is nearing its physical maximum.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=09908ec7-7e0f-4669-ad27-50eaecb0a4de" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,09908ec7-7e0f-4669-ad27-50eaecb0a4de.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=48520cec-671e-4605-a9bb-66275e3f3013</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,48520cec-671e-4605-a9bb-66275e3f3013.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,48520cec-671e-4605-a9bb-66275e3f3013.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=48520cec-671e-4605-a9bb-66275e3f3013</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This was a good session by Jan Gray on the fundamentals of using concurrency in software
      development. Why bother with concurrency? For one, hanging the application is as disruptive
      as a crash, so it is important to free up the user interface thread by delegating
      work to other threads. You can also improve the user experience by allowing the user
      to see the status of the work, examine partial results of the work so far, and cancel
      the work if necessary.
   </p>
        <p>
      Another use of concurrency is to increase performance by spreading the work across
      multiple processors. Of course, measurement is the key here; before adding the complexity
      of concurrency, make sure that you’re already pegging the CPU, and make sure that
      your algorithms are already fully optimized.
   </p>
        <p>
      This session provided a number of tips:
   </p>
        <ul>
          <li>
         Server applications are often already highly concurrent, since each client gets their
         own thread, and SQL can distribute a single database query among multiple processors. 
      </li>
          <li>
            <a href="http://www.openmp.org/">OpenMP</a> exists for doing straightforward parallelism
         in client applications. (It is supported by Visual C++ 2005.) Otherwise, the classic
         tools are <em>threads</em> using <em>shared memory</em> protected by <em>locks</em>. 
      </li>
          <li>
         The standard techniques for protecting shared memory from conflicts, in increasing
         order of difficulty, are <em>confinement</em> (sharing as little memory as possible), <em>immutability</em> (not
         allowing writes to the shared memory), and <em>synchronization</em> (locking access
         to the shared memory). 
      </li>
          <li>
         There are three primary goals when writing concurrent code: <em>safety</em> (identifying
         and holding “invariants” in shared data), <em>liveness</em> (avoiding deadlocks –
         two threads waiting for a lock the other holds), and <em>efficiency</em> (making the
         code as parallel as possible, generally by waiting as little as possible). 
      </li>
          <li>
         In most cases, the thread pool is best for doing work in parallel, since it may not
         have the overhead of creating a new thread. In .NET, use <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingthreadpoolclassqueueuserworkitemtopic.asp">ThreadPool.QueueUserWorkItem</a> or <a href="http://msdn2.microsoft.com/en-us/library/4852et58(en-us,vs.80).aspx">BackgroundWorker</a>. 
      </li>
          <li>
         In .NET, use the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemThreadingMonitorClassTopic.asp">Monitor</a> class
         for shared memory management. Two threads interacting via shared memory use Monitor.Enter
         and Monitor.Exit to protect the memory. If one thread needs to wait for the other,
         Monitor.Wait releases the lock until the other thread calls Monitor.Pulse and releases
         its lock. 
      </li>
          <li>
         If necessary, consider other classes in the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemThreading.asp">System.Threading</a> namespace,
         such as WaitHandle, Auto/ManualResetEvent, Mutex, and Semaphore. Rarely consider the
         Interlocked methods, ReaderWriterLock, Thread.Interrupt, and asynchronous delegates. 
      </li>
          <li>
         Lock all writable shared state over the entire invariant, using private lock objects
         (not the instance or type object). 
      </li>
          <li>
         Avoid calling “third-party” code while you hold a lock, including overridable methods. 
      </li>
          <li>
         Use asynchronous I/O, e.g. <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemiostreamclassbeginreadtopic.asp">Stream.BeginRead</a> in
         .NET.</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=48520cec-671e-4605-a9bb-66275e3f3013" />
      </body>
      <title>FUN302: Programming with Concurrency (Part 1)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,48520cec-671e-4605-a9bb-66275e3f3013.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/29/FUN302ProgrammingWithConcurrencyPart1.aspx</link>
      <pubDate>Thu, 29 Sep 2005 16:58:22 GMT</pubDate>
      <description>&lt;p&gt;
   This was a good session by Jan Gray on the fundamentals of using concurrency in software
   development. Why bother with concurrency? For one, hanging the application is as disruptive
   as a crash, so it is important to free up the user interface thread by delegating
   work to other threads. You can also improve the user experience by allowing the user
   to see the status of the work, examine partial results of the work so far, and cancel
   the work if necessary.
&lt;/p&gt;
&lt;p&gt;
   Another use of concurrency is to increase performance by spreading the work across
   multiple processors. Of course, measurement is the key here; before adding the complexity
   of concurrency, make sure that you’re already pegging the CPU, and make sure that
   your algorithms are already fully optimized.
&lt;/p&gt;
&lt;p&gt;
   This session provided a number of tips:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Server applications are often already highly concurrent, since each client gets their
      own thread, and SQL can distribute a single database query among multiple processors. 
   &lt;li&gt;
      &lt;a href="http://www.openmp.org/"&gt;OpenMP&lt;/a&gt; exists for doing straightforward parallelism
      in client applications. (It is supported by Visual C++ 2005.) Otherwise, the classic
      tools are &lt;em&gt;threads&lt;/em&gt; using &lt;em&gt;shared memory&lt;/em&gt; protected by &lt;em&gt;locks&lt;/em&gt;. 
   &lt;li&gt;
      The standard techniques for protecting shared memory from conflicts, in increasing
      order of difficulty, are &lt;em&gt;confinement&lt;/em&gt; (sharing as little memory as possible), &lt;em&gt;immutability&lt;/em&gt; (not
      allowing writes to the shared memory), and &lt;em&gt;synchronization&lt;/em&gt; (locking access
      to the shared memory). 
   &lt;li&gt;
      There are three primary goals when writing concurrent code: &lt;em&gt;safety&lt;/em&gt; (identifying
      and holding “invariants” in shared data), &lt;em&gt;liveness&lt;/em&gt; (avoiding deadlocks –
      two threads waiting for a lock the other holds), and &lt;em&gt;efficiency&lt;/em&gt; (making the
      code as parallel as possible, generally by waiting as little as possible). 
   &lt;li&gt;
      In most cases, the thread pool is best for doing work in parallel, since it may not
      have the overhead of creating a new thread. In .NET, use &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingthreadpoolclassqueueuserworkitemtopic.asp"&gt;ThreadPool.QueueUserWorkItem&lt;/a&gt; or &lt;a href="http://msdn2.microsoft.com/en-us/library/4852et58(en-us,vs.80).aspx"&gt;BackgroundWorker&lt;/a&gt;. 
   &lt;li&gt;
      In .NET, use the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemThreadingMonitorClassTopic.asp"&gt;Monitor&lt;/a&gt; class
      for shared memory management. Two threads interacting via shared memory use Monitor.Enter
      and Monitor.Exit to protect the memory. If one thread needs to wait for the other,
      Monitor.Wait releases the lock until the other thread calls Monitor.Pulse and releases
      its lock. 
   &lt;li&gt;
      If necessary, consider other classes in the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemThreading.asp"&gt;System.Threading&lt;/a&gt; namespace,
      such as WaitHandle, Auto/ManualResetEvent, Mutex, and Semaphore. Rarely consider the
      Interlocked methods, ReaderWriterLock, Thread.Interrupt, and asynchronous delegates. 
   &lt;li&gt;
      Lock all writable shared state over the entire invariant, using private lock objects
      (not the instance or type object). 
   &lt;li&gt;
      Avoid calling “third-party” code while you hold a lock, including overridable methods. 
   &lt;li&gt;
      Use asynchronous I/O, e.g. &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemiostreamclassbeginreadtopic.asp"&gt;Stream.BeginRead&lt;/a&gt; in
      .NET.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=48520cec-671e-4605-a9bb-66275e3f3013" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,48520cec-671e-4605-a9bb-66275e3f3013.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=86ee9460-8674-4067-bb73-f2f9ab77f899</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,86ee9460-8674-4067-bb73-f2f9ab77f899.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,86ee9460-8674-4067-bb73-f2f9ab77f899.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=86ee9460-8674-4067-bb73-f2f9ab77f899</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      My first session at PDC 2005 was “Getting Users to Fall in Love with Your Software”
      by Hillel Cooperman. This session wasn’t really about Microsoft technology, but about
      ways to ensure that your users have a positive emotional reaction to your software.
      Unfortunately, there were no easy answers given here. Basically, you need to understand
      your customers, watch them in usability studies, anonymously instrument their use
      of the software, etc. Software products should be friendly, forgiving, and rock-solid.
   </p>
        <p>
      Of course, there are other factors at play here, particularly the cost in time and
      money of doing all of that research and subsequent development. When retrofitting
      an existing software package, you also need to consider the amount of retraining that
      will be necessary.
   </p>
        <p>
      The application that they developed to demonstrate these principles is a photo album
      application called Microsoft Max. If you’re curious, and dare install the WinFX September
      CTP, go <a href="http://www.microsoft.com/max/">check it out</a>.
   </p>
        <p>
      Basically, this session was a good reminder that we need to spend all of the time
      and money we can afford to eliminate the many negative emotional reactions that our
      products create in our users and actively strive toward a positive experience. Like
      most aspects of software development, there’s never a point where you’ve reached perfection,
      but most software teams should be spending more time in this area than they are.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=86ee9460-8674-4067-bb73-f2f9ab77f899" />
      </body>
      <title>PRS223: Getting Users to Fall in Love with Your Software</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,86ee9460-8674-4067-bb73-f2f9ab77f899.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/28/PRS223GettingUsersToFallInLoveWithYourSoftware.aspx</link>
      <pubDate>Wed, 28 Sep 2005 22:37:11 GMT</pubDate>
      <description>&lt;p&gt;
   My first session at PDC 2005 was “Getting Users to Fall in Love with Your Software”
   by Hillel Cooperman. This session wasn’t really about Microsoft technology, but about
   ways to ensure that your users have a positive emotional reaction to your software.
   Unfortunately, there were no easy answers given here. Basically, you need to understand
   your customers, watch them in usability studies, anonymously instrument their use
   of the software, etc. Software products should be friendly, forgiving, and rock-solid.
&lt;/p&gt;
&lt;p&gt;
   Of course, there are other factors at play here, particularly the cost in time and
   money of doing all of that research and subsequent development. When retrofitting
   an existing software package, you also need to consider the amount of retraining that
   will be necessary.
&lt;/p&gt;
&lt;p&gt;
   The application that they developed to demonstrate these principles is a photo album
   application called Microsoft Max. If you’re curious, and dare install the WinFX September
   CTP, go &lt;a href="http://www.microsoft.com/max/"&gt;check it out&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   Basically, this session was a good reminder that we need to spend all of the time
   and money we can afford to eliminate the many negative emotional reactions that our
   products create in our users and actively strive toward a positive experience. Like
   most aspects of software development, there’s never a point where you’ve reached perfection,
   but most software teams should be spending more time in this area than they are.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=86ee9460-8674-4067-bb73-f2f9ab77f899" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,86ee9460-8674-4067-bb73-f2f9ab77f899.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=12f75703-16b1-4ced-a256-81a66179cab9</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,12f75703-16b1-4ced-a256-81a66179cab9.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,12f75703-16b1-4ced-a256-81a66179cab9.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=12f75703-16b1-4ced-a256-81a66179cab9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      It was, of course, fun to watch Bill Gates give his keynote on Day One. The video
      segment was entertaining, though a bit lost on me – it was a spoof on Napoleon Dynamite,
      which I have not seen. Jim Allchin’s keynote was also good; it was fun to see Windows
      1.0 running on an old IBM XT. He claimed that 475 million new PCs will ship in the
      two years after Windows Vista is released; I reckon I’ll be one of the buyers. The
      best part of the keynotes on Day One was the demos. We saw Windows Vista and Office
      “12” and Superfetch and “Atlas” and WPF and WCF and LINQ, etc. Great stuff.
   </p>
        <p>
      The keynotes on Day Two were a bit less interesting. The first half wasn’t too bad;
      we saw demos of Windows Workflow Foundation and the new Expression products for designing
      the next generation of cool user interface. The second half was, unfortunately, one
      of the most boring demos I’ve ever sat through, being about two technologies I (still)
      know nothing about, InfoPath and SharePoint.
   </p>
        <p>
      I had low expectations for the keynote on Day Three, but it turned out fine. It was
      all about the new features coming for Windows Server, including better debugging of
      Web applications, remote computing, the new console, and IIS improvements, particularly
      for ASP.NET applications.
   </p>
        <p>
      The “trouble” with the PDC is that it’s about products that won’t ship for a year
      or two; I’m ready now!
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=12f75703-16b1-4ced-a256-81a66179cab9" />
      </body>
      <title>PDC 2005 Keynotes</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,12f75703-16b1-4ced-a256-81a66179cab9.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/23/PDC2005Keynotes.aspx</link>
      <pubDate>Fri, 23 Sep 2005 20:57:40 GMT</pubDate>
      <description>&lt;p&gt;
   It was, of course, fun to watch Bill Gates give his keynote on Day One. The video
   segment was entertaining, though a bit lost on me – it was a spoof on Napoleon Dynamite,
   which I have not seen. Jim Allchin’s keynote was also good; it was fun to see Windows
   1.0 running on an old IBM XT. He claimed that 475 million new PCs will ship in the
   two years after Windows Vista is released; I reckon I’ll be one of the buyers. The
   best part of the keynotes on Day One was the demos. We saw Windows Vista and Office
   “12” and Superfetch and “Atlas” and WPF and WCF and LINQ, etc. Great stuff.
&lt;/p&gt;
&lt;p&gt;
   The keynotes on Day Two were a bit less interesting. The first half wasn’t too bad;
   we saw demos of Windows Workflow Foundation and the new Expression products for designing
   the next generation of cool user interface. The second half was, unfortunately, one
   of the most boring demos I’ve ever sat through, being about two technologies I (still)
   know nothing about, InfoPath and SharePoint.
&lt;/p&gt;
&lt;p&gt;
   I had low expectations for the keynote on Day Three, but it turned out fine. It was
   all about the new features coming for Windows Server, including better debugging of
   Web applications, remote computing, the new console, and IIS improvements, particularly
   for ASP.NET applications.
&lt;/p&gt;
&lt;p&gt;
   The “trouble” with the PDC is that it’s about products that won’t ship for a year
   or two; I’m ready now!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=12f75703-16b1-4ced-a256-81a66179cab9" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,12f75703-16b1-4ced-a256-81a66179cab9.aspx</comments>
      <category>Development</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Last week, I went to the Microsoft PDC with three coworkers and had a great time.
      They keep you much too busy to blog while you’re there, but that shouldn’t stop me
      from blogging it now that I’m back, right?
   </p>
        <p>
      The conference really was excellent. For the most part, it was well-organized and
      well-executed. Even the name badge was great, complete with a pen and an easy-to-access
      mini-guide of the conference for helping you keep track of the agenda, find your next
      session, etc. Food and drink was available everywhere, at all times, including three
      square meals each day. Lots of software and “swag” was distributed by Microsoft and
      by various sponsors and advertisers. An evening of exclusive access to Universal
      Studios was simply the icing on the cake. The PDC isn’t cheap, so it’s hard to measure
      whether it is “worth it,” but it was, at minimum, a great experience. Hopefully I’m
      better prepared to face the future of Windows application development…
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3" />
      </body>
      <title>Blogging PDC 2005</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/22/BloggingPDC2005.aspx</link>
      <pubDate>Thu, 22 Sep 2005 22:59:38 GMT</pubDate>
      <description>&lt;p&gt;
   Last week, I went to the Microsoft PDC with three coworkers and had a great time.
   They keep you much too busy to blog while you’re there, but that shouldn’t stop me
   from blogging it now that I’m back, right?
&lt;/p&gt;
&lt;p&gt;
   The conference really was excellent. For the most part, it was well-organized and
   well-executed. Even the name badge was great, complete with a pen and an easy-to-access
   mini-guide of the conference for helping you keep track of the agenda, find your next
   session, etc. Food and drink was available everywhere, at all times, including three
   square meals each day. Lots of software and “swag” was distributed by Microsoft and
   by various sponsors and advertisers.&amp;nbsp;An evening of exclusive access to Universal
   Studios was simply the icing on the cake. The PDC isn’t cheap, so it’s hard to measure
   whether it is “worth it,” but it was, at minimum, a great experience. Hopefully I’m
   better prepared to face the future of Windows application development…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,16422a2e-4bb1-4cd9-bf33-7428ddfd8ce3.aspx</comments>
      <category>Development</category>
    </item>
  </channel>
</rss>