<?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>Jelle Druyts - Blog|Programming|PDC05</title>
    <link>http://jelle.druyts.net/</link>
    <description>Reflection.Emit()</description>
    <language>en-us</language>
    <copyright>Jelle Druyts</copyright>
    <lastBuildDate>Fri, 16 Sep 2005 16:15:49 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>blog@druyts.net</managingEditor>
    <webMaster>blog@druyts.net</webMaster>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
During the <a href="2005/09/16/PDC05PreConTheArtOfBuildingAReusableClassLibrary.aspx">pre-conference
session on Framework Design Guidelines</a>, <a href="http://blogs.msdn.com/brada/">Brad
Abrams</a> was kind enough to share the story behind the infamous <code>HasShutdownStarted</code> property
on the <code>Environment</code> class with us. If you're unfamiliar with that property,
take a look at its original definition below:
</p>
        <pre>public sealed class Environment<br />
{<br />
private Environment() {}<br />
public bool HasShutDownStarted { get { /*...*/ } }<br />
}</pre>
        <p>
Now see if you can spot the "minor issue" with this property...
</p>
        <p>
The funny thing is, this code actually <em>shipped</em> in the initial release of
the .NET Framework, but obviously it needed to be QFE'd (Quick Fix Engineered). So
Brad did a little investigation to see how it could have happened that an effectively
uncallable property made it into the framework. Running through the engineering callstack,
he found out that:
</p>
        <ul>
          <li>
The property was implemented <em>and unit tested</em> by the developer.</li>
          <li>
It was subsequently tested <em>and approved</em> by the tester.</li>
          <li>
It was documented along with <em>"working" sample code</em>.</li>
          <li>
And finally it was reviewed <em>and accepted</em> by the Program Manager who owned
the feature (in his defense, he had originally specified that it should be static).</li>
        </ul>
        <p>
According to the story, this incident triggered the static classes feature that is
new in C# 2.0 (which declares a class as having only static members) to prevent this
from happening again.
</p>
        <p>
By the way, declaring a class as <code>static</code> makes the compiler mark the class
both <code>sealed</code> (so it cannot be inherited) and <code>abstract</code> (so
it cannot be instantiated) under the covers; furthermore, the compiler checks that
everything on the class is effectively static. It doesn't create a private constructor,
as you might think, because there's no real point to do that anymore (instantiation
is already prevented by defining the class as abstract) and to avoid the small metadata
overhead induced by the additional constructor.
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=d303b62d-5ae8-4b52-a2fc-c742bc66453e" />
      </body>
      <title>Static Classes And The HasShutdownStarted Property</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</guid>
      <link>http://jelle.druyts.net/2005/09/16/StaticClassesAndTheHasShutdownStartedProperty.aspx</link>
      <pubDate>Fri, 16 Sep 2005 16:15:49 GMT</pubDate>
      <description>&lt;p&gt;
During the &lt;a href="2005/09/16/PDC05PreConTheArtOfBuildingAReusableClassLibrary.aspx"&gt;pre-conference
session on Framework Design Guidelines&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/brada/"&gt;Brad
Abrams&lt;/a&gt; was kind enough to share the story behind the infamous &lt;code&gt;HasShutdownStarted&lt;/code&gt; property
on the &lt;code&gt;Environment&lt;/code&gt; class with us. If you're unfamiliar with that property,
take a look at its original definition below:
&lt;/p&gt;
&lt;pre&gt;public sealed class Environment&lt;br&gt;
{&lt;br&gt;
private Environment() {}&lt;br&gt;
public bool HasShutDownStarted { get { /*...*/ } }&lt;br&gt;
}&lt;/pre&gt;
&lt;p&gt;
Now see if you can spot the "minor issue" with this property...
&lt;/p&gt;
&lt;p&gt;
The funny thing is, this code actually &lt;em&gt;shipped&lt;/em&gt; in the initial release of
the .NET Framework, but obviously it needed to be QFE'd (Quick Fix Engineered). So
Brad did a little investigation to see how it could have happened that an effectively
uncallable property made it into the framework. Running through the engineering callstack,
he found out that:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The property was implemented &lt;em&gt;and unit tested&lt;/em&gt; by the developer.&lt;/li&gt;
&lt;li&gt;
It was subsequently tested &lt;em&gt;and approved&lt;/em&gt; by the tester.&lt;/li&gt;
&lt;li&gt;
It was documented along with &lt;em&gt;"working" sample code&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
And finally it was reviewed &lt;em&gt;and accepted&lt;/em&gt; by the Program Manager who owned
the feature (in his defense, he had originally specified that it should be static).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
According to the story, this incident triggered the static classes feature that is
new in C# 2.0 (which declares a class as having only static members) to prevent this
from happening again.
&lt;/p&gt;
&lt;p&gt;
By the way, declaring a class as &lt;code&gt;static&lt;/code&gt; makes the compiler mark the class
both &lt;code&gt;sealed&lt;/code&gt; (so it cannot be inherited) and &lt;code&gt;abstract&lt;/code&gt; (so
it cannot be instantiated) under the covers; furthermore, the compiler checks that
everything on the class is effectively static. It doesn't create a private constructor,
as you might think, because there's no real point to do that anymore (instantiation
is already prevented by defining the class as abstract) and to avoid the small metadata
overhead induced by the additional constructor.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=d303b62d-5ae8-4b52-a2fc-c742bc66453e" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=d303b62d-5ae8-4b52-a2fc-c742bc66453e</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/.NET/Quirks</category>
      <category>Blog/Programming/.NET/Whidbey</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Attending a pre-conference session is a bit like foreplay for the brain: it's not
about going ahead and diving into the action, it's gearing up the body to prepare
for the main dish.
</p>
        <p>
In that sense, I decided to cheat on the wife a little. So last Monday, in stead of
going to the SOA pre-con I originally planned, I followed my instinct and went to
one about a pet peeve of mine: API design. So I spent the entire day exploring "The
Art Of Building A Reusable Class Library" by <a href="http://blogs.msdn.com/brada/">Brad
Abrams</a> and <a href="http://blogs.msdn.com/kcwalina/">Krzysztof Cwalina</a>, who
are both very knowledgeable on the subject in their roles at Microsoft where they
review the public API's of the entire .NET Framework. In fact, they just have a book
out on the subject called "<a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756/qid=1126565222/sr=8-1/ref=pd_bbs_1/102-0703728-8921753?v=glance&amp;s=books&amp;n=507846">Framework
Design Guidelines</a>" and - lucky me - they handed out free copies for their attendees.
Nice!
</p>
        <p>
The reason I chose this session, is that I'm quite passionate about building reusable
libraries which have a clear, consistent and self-explaining API. I've been involved
in designing reusable components and frameworks before, and it's indeed quite challenging
to meet these goals.
</p>
        <p>
There are quite some factors to take into account when designing a framework, and
they've been summarized in the session in four key topics:
</p>
        <ul>
          <li>
The Power Of Sameness</li>
          <li>
Framework Design Matters</li>
          <li>
Tools For Communication</li>
          <li>
The Pit Of Success</li>
        </ul>
        <p>
          <strong>The Power Of Sameness</strong>
        </p>
        <p>
When driving a new type of car, there's no point in reading the owner's manual: you
just know how to operate a car, the seatbelt, the turn signals, ... because they all
work the same way. This principle should be applied as much as possible to software
as well: if your users know how to use previous versions or other parts of your program
or framework, they will easily get started with a new version or with an undiscovered
part of your framework.
</p>
        <p>
In framework design, this means that you must adhere to consistent naming guidelines,
patterns (like prefixes and suffixes, take the "I"-suffix for interfaces and the standard
Exception and Attribute suffixes for example), to lower the learning curve of your
API.
</p>
        <p>
One important point of attention is to "optimize globally" in stead of locally, which
means that even a justified deviation from the guideline shouldn't always be allowed,
even if there are very good reasons to do so. In other words: you should dare to make
one part "less good" to keep the overall system consistent and thus better. A practical
example of a violation of this principle is the <code>ArgumentNullException</code>:
the general pattern is that all exceptions take the message as their first parameter,
but the <code>ArgumentNullException</code> takes the parameter name as its first (because
that makes much more sense in this case). In retrospect, this shouldn't have been
allowed, since it breaks the common usage scenario that developers are used to.
</p>
        <p>
          <strong>Framework Design Matters</strong>
        </p>
        <p>
A well-designed framework must, above all, be <em>simple</em>. To achieve this simplicity,
you need to think like your users. A very convenient way of getting in their heads
is to actually write code samples for the main scenarios first, and then defining
the object model to support these code samples. Another way to make sure your framework
is simple to use is to factor the namespaces to only include the most used types and
move the advanced types into their specialized namespace so they don't clutter the
view for the most commonly used scenarios.
</p>
        <p>
A well-designed framework must be <em>explicitly designed</em>. This means that you
should create an API specification, review the scenarios with expected users, peers
and non-experts, and finally review the API design.
</p>
        <p>
A well-designed framework is part of an <em>ecosystem</em>. Your API won't only show
up in code, it should also be designed to look well in IntelliSense, in the Debugger,
in the Properties Window, ... Also take care to make your framework CLS Compliant,
since there are other languages in the ecosystem that might want to consume it.
</p>
        <p>
A well-designed framework must be <em>integrated</em>. Special points of attention
here are to apply the proper abstractions (e.g. something I do a lot: don't explicitly
declare fields and arguments as a <code>Hashtable</code> when an <code>IDictionary</code> is
enough for your needs), and watch out for type name conflicts (it's not because it's
in a separate namespace that a generic type name such as "Message" won't get in the
way of your users).
</p>
        <p>
A well-designed framework must be <em>designed to evolve</em>. This is particularly
hard, since versioning and building for the future means taking into account the unknown.
In this sense, you should favor using classes (likely abstract classes) over interfaces
since they are easier to version: adding members is a non-breaking change for classes,
but not for interfaces. Also make sure to control your extensibility points, such
as virtual methods, and only open them up if there is a good reason to do so.
</p>
        <p>
A well-designed framework must be <em>consistent</em>. This, of course, relates to
the Power Of Sameness mentioned before, and is key to a good user experience. Specific
rules include having consistent naming guidelines and using common patterns and idioms
(like the Async pattern, the Dispose pattern, ...).
</p>
        <p>
          <strong>Tools For Communication</strong>
        </p>
        <p>
Consumers of your framework can't read your mind, so you have to communicate your
intent. This can take the classical form of documentation, of course, but even if
you have 500 pages worth of documentation, your API can still reek royally and your
customers won't be happy. The layout of your namespaces, the naming patterns in your
types, the exceptions you define, ... all form a common vocabulary that allows your
consumers to feel familiar with your API (and of course, if your API adheres to the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp">guidelines
published by Microsoft</a>, they'll feel right at home right away if they know their
way around the .NET Framework).
</p>
        <p>
A few interesting highlights out of the different artifacts of that vocabulary:
</p>
        <ul>
          <li>
Namespaces are just an organizational element, they have nothing to do with implementation
(so there doesn't have to be a one-on-one link between the namespace name and the
assembly name, for example).</li>
          <li>
Classes are a conceptual model for a <em>thing</em> so they should represent something
with one single semantic meaning.</li>
          <li>
A struct is a domain specific extension of the intrinsic type system, so typically
they should be smaller than 16 bytes and, quite importantly, immutable.</li>
          <li>
Exceptions should be defined wisely, and a new type should only be defined if the
user would like to differentiate the way to handle this exception versus other exceptions
you've defined.</li>
          <li>
An enum is a container for <em>named constants</em>; you should take care to explicitly
assign the enum values and make their name singular, e.g. <code>Color</code> for a
list of colors (except when they're <code>[Flags]</code> type of enum, in which case
their name should be plural, e.g. <code>AnchorStyles</code>).</li>
          <li>
A constructor should be lazy and only capture state, make sure not to do too much
work in the constructor.</li>
          <li>
A method exposes an action or operation, it doesn't return instance state as such.</li>
          <li>
A property is a logical backing field for instance state, but take care that it's
not retrieved using an expensive operation (like going to the database), in which
case you're better of with an explicit method.</li>
          <li>
A field is just an implementation detail, and it should never be exposed anyway.</li>
          <li>
An event is <em>raised</em> (not fired or triggered) to inform a subscriber of something
that happened, and you should carefully follow the common event naming pattern to
avoid confusion.</li>
        </ul>
        <p>
        </p>
        <p>
          <strong>The Pit Of Success</strong>
        </p>
        <p>
The final part talked about a very interesting concept: you should guide the consumers
of your framework into just "doing the right thing" if they don't really know what
to do in a given situation. Doing the right thing shouldn't be hard as climbing a
mountain or running through a desert - instead it should be as easy as just <em>falling
into a pit</em>. Enabling this Pit Of Success can be accomplished by avoiding the
Perilous Summit Of Complexity and the Desert Of Confusion. The first can be summarized
as "making the simple things simple, and the hard things possible". The second means
making consumers fall into doing things the right way by avoiding leading them down
confusing and possibly wrong paths. A good way to put this into practice could be
to provide easy-to-discover convenience methods for the most common scenarios (e.g.
the new <code>File.ReadAllLines</code> method in the .NET Framework 2.0 that hides
all the filestream plumbing in one simple method call).
</p>
        <p>
Finally, one other way to achieve the Pit Of Success is to remove unnecessary features
- thereby reducing the surface area and the accompanying room for mistakes, which,
in the end, adds value to your framework. Or to put it another way: you can actually <em>reduce
the value</em> of your framework by <em>adding features</em>. So you should do as
little as possible now (but no less) to ensure room for extensibility in the future.
</p>
        <p>
So this is the compressed takeaway I got out of this excellent pre-conference session.
If you found this interesting (I sure do), I can highly recommend the book "<a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756/qid=1126565222/sr=8-1/ref=pd_bbs_1/102-0703728-8921753?v=glance&amp;s=books&amp;n=507846">Framework
Design Guidelines</a>" which is full of practical guidelines, <em>do</em>'s and <em>don't</em>s,
along with their reason and additional annotations. Learn from it, and apply the guidelines
to your own API's so your consumers will be happy to use what you've built.
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=25abda72-34c0-42cc-8df1-e628a6e2909e" />
      </body>
      <title>PDC05 Pre-Con: The Art Of Building A Reusable Class Library</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</guid>
      <link>http://jelle.druyts.net/2005/09/16/PDC05PreConTheArtOfBuildingAReusableClassLibrary.aspx</link>
      <pubDate>Fri, 16 Sep 2005 16:01:58 GMT</pubDate>
      <description>&lt;p&gt;
Attending a pre-conference session is a bit like foreplay for the brain: it's not
about going ahead and diving into the action, it's gearing up the body to prepare
for the main dish.
&lt;/p&gt;
&lt;p&gt;
In that sense, I decided to cheat on the wife a little. So last Monday, in stead of
going to the SOA pre-con I originally planned, I followed my instinct and went to
one about a pet peeve of mine: API design. So I spent the entire day exploring "The
Art Of Building A Reusable Class Library" by &lt;a href="http://blogs.msdn.com/brada/"&gt;Brad
Abrams&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/kcwalina/"&gt;Krzysztof Cwalina&lt;/a&gt;, who
are both very knowledgeable on the subject in their roles at Microsoft where they
review the public API's of the entire .NET Framework. In fact, they just have a book
out on the subject called "&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756/qid=1126565222/sr=8-1/ref=pd_bbs_1/102-0703728-8921753?v=glance&amp;amp;s=books&amp;amp;n=507846"&gt;Framework
Design Guidelines&lt;/a&gt;" and - lucky me - they handed out free copies for their attendees.
Nice!
&lt;/p&gt;
&lt;p&gt;
The reason I chose this session, is that I'm quite passionate about building reusable
libraries which have a clear, consistent and self-explaining API. I've been involved
in designing reusable components and frameworks before, and it's indeed quite challenging
to meet these goals.
&lt;/p&gt;
&lt;p&gt;
There are quite some factors to take into account when designing a framework, and
they've been summarized in the session in four key topics:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The Power Of Sameness&lt;/li&gt;
&lt;li&gt;
Framework Design Matters&lt;/li&gt;
&lt;li&gt;
Tools For Communication&lt;/li&gt;
&lt;li&gt;
The Pit Of Success&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;The Power Of Sameness&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
When driving a new type of car, there's no point in reading the owner's manual: you
just know how to operate a car, the seatbelt, the turn signals, ... because they all
work the same way. This principle should be applied as much as possible to software
as well: if your users know how to use previous versions or other parts of your program
or framework, they will easily get started with a new version or with an undiscovered
part of your framework.
&lt;/p&gt;
&lt;p&gt;
In framework design, this means that you must adhere to consistent naming guidelines,
patterns (like prefixes and suffixes, take the "I"-suffix for interfaces and the standard
Exception and Attribute suffixes for example), to lower the learning curve of your
API.
&lt;/p&gt;
&lt;p&gt;
One important point of attention is to "optimize globally" in stead of locally, which
means that even a justified deviation from the guideline shouldn't always be allowed,
even if there are very good reasons to do so. In other words: you should dare to make
one part "less good" to keep the overall system consistent and thus better. A practical
example of a violation of this principle is the &lt;code&gt;ArgumentNullException&lt;/code&gt;:
the general pattern is that all exceptions take the message as their first parameter,
but the &lt;code&gt;ArgumentNullException&lt;/code&gt; takes the parameter name as its first (because
that makes much more sense in this case). In retrospect, this shouldn't have been
allowed, since it breaks the common usage scenario that developers are used to.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Framework Design Matters&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
A well-designed framework must, above all, be &lt;em&gt;simple&lt;/em&gt;. To achieve this simplicity,
you need to think like your users. A very convenient way of getting in their heads
is to actually write code samples for the main scenarios first, and then defining
the object model to support these code samples. Another way to make sure your framework
is simple to use is to factor the namespaces to only include the most used types and
move the advanced types into their specialized namespace so they don't clutter the
view for the most commonly used scenarios.
&lt;/p&gt;
&lt;p&gt;
A well-designed framework must be &lt;em&gt;explicitly designed&lt;/em&gt;. This means that you
should create an API specification, review the scenarios with expected users, peers
and non-experts, and finally review the API design.
&lt;/p&gt;
&lt;p&gt;
A well-designed framework is part of an &lt;em&gt;ecosystem&lt;/em&gt;. Your API won't only show
up in code, it should also be designed to look well in IntelliSense, in the Debugger,
in the Properties Window, ... Also take care to make your framework CLS Compliant,
since there are other languages in the ecosystem that might want to consume it.
&lt;/p&gt;
&lt;p&gt;
A well-designed framework must be &lt;em&gt;integrated&lt;/em&gt;. Special points of attention
here are to apply the proper abstractions (e.g. something I do a lot: don't explicitly
declare fields and arguments as a &lt;code&gt;Hashtable&lt;/code&gt; when an &lt;code&gt;IDictionary&lt;/code&gt; is
enough for your needs), and watch out for type name conflicts (it's not because it's
in a separate namespace that a generic type name such as "Message" won't get in the
way of your users).
&lt;/p&gt;
&lt;p&gt;
A well-designed framework must be &lt;em&gt;designed to evolve&lt;/em&gt;. This is particularly
hard, since versioning and building for the future means taking into account the unknown.
In this sense, you should favor using classes (likely abstract classes) over interfaces
since they are easier to version: adding members is a non-breaking change for classes,
but not for interfaces. Also make sure to control your extensibility points, such
as virtual methods, and only open them up if there is a good reason to do so.
&lt;/p&gt;
&lt;p&gt;
A well-designed framework must be &lt;em&gt;consistent&lt;/em&gt;. This, of course, relates to
the Power Of Sameness mentioned before, and is key to a good user experience. Specific
rules include having consistent naming guidelines and using common patterns and idioms
(like the Async pattern, the Dispose pattern, ...).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Tools For Communication&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Consumers of your framework can't read your mind, so you have to communicate your
intent. This can take the classical form of documentation, of course, but even if
you have 500 pages worth of documentation, your API can still reek royally and your
customers won't be happy. The layout of your namespaces, the naming patterns in your
types, the exceptions you define, ... all form a common vocabulary that allows your
consumers to feel familiar with your API (and of course, if your API adheres to the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp"&gt;guidelines
published by Microsoft&lt;/a&gt;, they'll feel right at home right away if they know their
way around the .NET Framework).
&lt;/p&gt;
&lt;p&gt;
A few interesting highlights out of the different artifacts of that vocabulary:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Namespaces are just an organizational element, they have nothing to do with implementation
(so there doesn't have to be a one-on-one link between the namespace name and the
assembly name, for example).&lt;/li&gt;
&lt;li&gt;
Classes are a conceptual model for a &lt;em&gt;thing&lt;/em&gt; so they should represent something
with one single semantic meaning.&lt;/li&gt;
&lt;li&gt;
A struct is a domain specific extension of the intrinsic type system, so typically
they should be smaller than 16 bytes and, quite importantly, immutable.&lt;/li&gt;
&lt;li&gt;
Exceptions should be defined wisely, and a new type should only be defined if the
user would like to differentiate the way to handle this exception versus other exceptions
you've defined.&lt;/li&gt;
&lt;li&gt;
An enum is a container for &lt;em&gt;named constants&lt;/em&gt;; you should take care to explicitly
assign the enum values and make their name singular, e.g. &lt;code&gt;Color&lt;/code&gt; for a
list of colors (except when they're &lt;code&gt;[Flags]&lt;/code&gt; type of enum, in which case
their name should be plural, e.g. &lt;code&gt;AnchorStyles&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
A constructor should be lazy and only capture state, make sure not to do too much
work in the constructor.&lt;/li&gt;
&lt;li&gt;
A method exposes an action or operation, it doesn't return instance state as such.&lt;/li&gt;
&lt;li&gt;
A property is a logical backing field for instance state, but take care that it's
not retrieved using an expensive operation (like going to the database), in which
case you're better of with an explicit method.&lt;/li&gt;
&lt;li&gt;
A field is just an implementation detail, and it should never be exposed anyway.&lt;/li&gt;
&lt;li&gt;
An event is &lt;em&gt;raised&lt;/em&gt; (not fired or triggered) to inform a subscriber of something
that happened, and you should carefully follow the common event naming pattern to
avoid confusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Pit Of Success&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The final part talked about a very interesting concept: you should guide the consumers
of your framework into just "doing the right thing" if they don't really know what
to do in a given situation. Doing the right thing shouldn't be hard as climbing a
mountain or running through a desert - instead it should be as easy as just &lt;em&gt;falling
into a pit&lt;/em&gt;. Enabling this Pit Of Success can be accomplished by avoiding the
Perilous Summit Of Complexity and the Desert Of Confusion. The first can be summarized
as "making the simple things simple, and the hard things possible". The second means
making consumers fall into doing things the right way by avoiding leading them down
confusing and possibly wrong paths. A good way to put this into practice could be
to provide easy-to-discover convenience methods for the most common scenarios (e.g.
the new &lt;code&gt;File.ReadAllLines&lt;/code&gt; method in the .NET Framework 2.0 that hides
all the filestream plumbing in one simple method call).
&lt;/p&gt;
&lt;p&gt;
Finally, one other way to achieve the Pit Of Success is to remove unnecessary features
- thereby reducing the surface area and the accompanying room for mistakes, which,
in the end, adds value to your framework. Or to put it another way: you can actually &lt;em&gt;reduce
the value&lt;/em&gt; of your framework by &lt;em&gt;adding features&lt;/em&gt;. So you should do as
little as possible now (but no less) to ensure room for extensibility in the future.
&lt;/p&gt;
&lt;p&gt;
So this is the compressed takeaway I got out of this excellent pre-conference session.
If you found this interesting (I sure do), I can highly recommend the book "&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756/qid=1126565222/sr=8-1/ref=pd_bbs_1/102-0703728-8921753?v=glance&amp;amp;s=books&amp;amp;n=507846"&gt;Framework
Design Guidelines&lt;/a&gt;" which is full of practical guidelines, &lt;em&gt;do&lt;/em&gt;'s and &lt;em&gt;don't&lt;/em&gt;s,
along with their reason and additional annotations. Learn from it, and apply the guidelines
to your own API's so your consumers will be happy to use what you've built.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=25abda72-34c0-42cc-8df1-e628a6e2909e" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=25abda72-34c0-42cc-8df1-e628a6e2909e</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In the third and final keynote, Bob Muglia talked about the server side of things
in the roadmap that matters for developers. This was a much shorter session, but covered
some interesting topics such as management, Monad, WinFX, Active Directory, ...
</p>
        <p>
Some interesting notes from the keynote:
</p>
        <p>
          <strong>Management</strong>
        </p>
        <ul>
          <li>
            <strong>WS-Management</strong>, <a href="2005/07/11/TechEdDay2.aspx">which I've also
seen in action at TechEd</a>, has been defined as a unification of remote management
of hardware, operating systems and application. It even enables remote management
of WMI services <em>cross-platform</em>. 
</li>
          <li>
            <strong>MMC 3.0</strong> has been announced to host managed components, so you can
finally write MMC Snap-Ins in .NET!</li>
        </ul>
        <p>
          <strong>Monad</strong>
        </p>
        <p>
As you might already know, Monad is the codename of a new object-based command line
language.
</p>
        <ul>
          <li>
It has been created in .NET. 
</li>
          <li>
It works with thin commandlets. 
</li>
          <li>
In integrates the command line, COM and .NET</li>
        </ul>
        <p>
          <strong>Active Directory</strong>
        </p>
        <p>
Active Directory has been around for a few years providing identity management and
single sign-on across the enterprise. Now with Federation Services it will extend
this single sign-on principle to work between different enterprises.
</p>
        <p>
          <strong>Longhorn Server</strong>
        </p>
        <p>
The server edition of Windows Vista should be ready in 2007. Of course, there are
a lot of interesting enhancements and new features but a few highlights were pointed
out:
</p>
        <ul>
          <li>
            <strong>Terminal Services</strong> will be accessible through firewalls, and it will
support USB device redirection. Nice! 
</li>
          <li>
            <strong>TxF</strong> is the codename for the Transactional Filesystem, which adds
transaction support to an NTFS filesystem. This means you can finally have atomic
changes to filesets (which can be very handy for certain Source Control scenarios
and, why not, <a href="2004/02/24/LonghornRequestSecureTransactionalFTP.aspx">Transactional
FTP</a>?) 
</li>
          <li>
            <strong>IIS 7</strong>, but this actually deserves a point of its own :-)</li>
        </ul>
        <p>
          <strong>IIS 7</strong>
        </p>
        <p>
One of the most common problems with IIS to date has been the centralized and opaque
nature of the IIS Metabase (which holds all the configuration data for the IIS server).
It required an administrator to update the settings, and you were in serious problems
if the metabase ever got corrupted. So it was very exciting to hear that the metabase
is now officially <em>dead</em>. All configuration is now persisted in XML configuration
files, and this even trickles down to the web.config files of the individual websites.
Take for example the task of adding a default document to be served for a website,
which can now be defined in its own web.config as such:
</p>
        <pre>&lt;configuration&gt;<br />
  &lt;system.webServer&gt;<br />
    &lt;defaultDocument&gt;<br />
      &lt;files&gt;<br />
        &lt;add value="MyHomePage.aspx" /&gt;<br />
      &lt;/files&gt;<br />
    &lt;/defaultDocument&gt;<br />
  &lt;/system.webServer&gt;<br />
&lt;/configuration&gt;</pre>
        <p>
Furthermore, IIS7 is completely modular, so you can remove modules that you don't
use (e.g. CGI) and rewrite modules that you're not happy with (e.g. the DirectoryListingModule)
- and all of this on an individual website basis and without restarting the server
or IIS! This is very powerful and opens up a lot of interesting scenarios.
</p>
        <p>
So that concludes the last keynote, I'm off to some more in-depth sessions!
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=972eb8e5-8317-4d78-86c2-611d14fda2e3" />
      </body>
      <title>PDC05: The Third Keynote</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</guid>
      <link>http://jelle.druyts.net/2005/09/15/PDC05TheThirdKeynote.aspx</link>
      <pubDate>Thu, 15 Sep 2005 18:06:49 GMT</pubDate>
      <description>&lt;p&gt;
In the third and final keynote, Bob Muglia talked about the server side of things
in the roadmap that matters for developers. This was a much shorter session, but covered
some interesting topics such as management, Monad, WinFX, Active Directory, ...
&lt;/p&gt;
&lt;p&gt;
Some interesting notes from the keynote:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Management&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WS-Management&lt;/strong&gt;, &lt;a href="2005/07/11/TechEdDay2.aspx"&gt;which I've also
seen in action at TechEd&lt;/a&gt;, has been defined as a unification of remote management
of hardware, operating systems and application. It even enables remote management
of WMI services &lt;em&gt;cross-platform&lt;/em&gt;. 
&lt;li&gt;
&lt;strong&gt;MMC 3.0&lt;/strong&gt; has been announced to host managed components, so you can
finally write MMC Snap-Ins in .NET!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Monad&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
As you might already know, Monad is the codename of a new object-based command line
language.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
It has been created in .NET. 
&lt;li&gt;
It works with thin commandlets. 
&lt;li&gt;
In integrates the command line, COM and .NET&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Active Directory&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Active Directory has been around for a few years providing identity management and
single sign-on across the enterprise. Now with Federation Services it will extend
this single sign-on principle to work between different enterprises.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Longhorn Server&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The server edition of Windows Vista should be ready in 2007. Of course, there are
a lot of interesting enhancements and new features but a few highlights were pointed
out:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal Services&lt;/strong&gt; will be accessible through firewalls, and it will
support USB device redirection. Nice! 
&lt;li&gt;
&lt;strong&gt;TxF&lt;/strong&gt; is the codename for the Transactional Filesystem, which adds
transaction support to an NTFS filesystem. This means you can finally have atomic
changes to filesets (which can be very handy for certain Source Control scenarios
and, why not, &lt;a href="2004/02/24/LonghornRequestSecureTransactionalFTP.aspx"&gt;Transactional
FTP&lt;/a&gt;?) 
&lt;li&gt;
&lt;strong&gt;IIS 7&lt;/strong&gt;, but this actually deserves a point of its own :-)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;IIS 7&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One of the most common problems with IIS to date has been the centralized and opaque
nature of the IIS Metabase (which holds all the configuration data for the IIS server).
It required an administrator to update the settings, and you were in serious problems
if the metabase ever got corrupted. So it was very exciting to hear that the metabase
is now officially &lt;em&gt;dead&lt;/em&gt;. All configuration is now persisted in XML configuration
files, and this even trickles down to the web.config files of the individual websites.
Take for example the task of adding a default document to be served for a website,
which can now be defined in its own web.config as such:
&lt;/p&gt;
&lt;pre&gt;&amp;lt;configuration&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;system.webServer&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;defaultDocument&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;files&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;add value="MyHomePage.aspx" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/files&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/defaultDocument&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/system.webServer&amp;gt;&lt;br&gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;
Furthermore, IIS7 is completely modular, so you can remove modules that you don't
use (e.g. CGI) and rewrite modules that you're not happy with (e.g. the DirectoryListingModule)
- and all of this on an individual website basis and without restarting the server
or IIS! This is very powerful and opens up a lot of interesting scenarios.
&lt;/p&gt;
&lt;p&gt;
So that concludes the last keynote, I'm off to some more in-depth sessions!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=972eb8e5-8317-4d78-86c2-611d14fda2e3" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=972eb8e5-8317-4d78-86c2-611d14fda2e3</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Introduction
</h3>
        <p>
Although the <a href="2005/09/13/PDC05Keynote.aspx">first keynote</a> on Tuesday already
ran way over time, Eric Rudder still found plenty more to talk about in the second
keynote today. The main announcements were:
</p>
        <ul>
          <li>
            <strong>Windows Workflow Foundation</strong>: this natural extension to the .NET Framework
enables developers to incorporate both System Workflow as Human Workflow into their
applications. Microsoft is actually using this themselves in their next versions of
SharePoint and Office "12".</li>
          <li>
            <strong>Microsoft Expression</strong>: this is a suite of designer tools (codenamed
Acrylic, Sparkle and Quartz) aimed at graphics and web designers.</li>
          <li>
            <strong>Visual Studio Tools for Applications (VSTA)</strong>: think of this as the
next version of Visual Basic for Applications (VBA), but of course now within the
managed .NET runtime. So this technology enables application customization in .NET,
and it's already committed to by its integration into Office InfoPath "12".</li>
        </ul>
        <h3>Windows Workflow Foundation
</h3>
        <p>
The main statement that caught my attention was that "Workflow is everywhere": every
"if" statement you write is a branch that effectively represents a lightweight workflow
step; every webpage transition is a choice you make and can be modeled in a workflow.
</p>
        <p>
So Windows Workflow Foundation sets out to capture complex workflows, expose them
to developers and enable on-the-fly extensions to them for added flexibility. Although
this sounds impressive, in the end, all it is is "just another .NET namespace": you
can execute all of this through managed classes. Furthermore, you can design the workflows
right in Visual Studio, very much like you can model Biztalk orchestrations right
now.
</p>
        <p>
As a small remark (but I think this is quite big news), it was noted that Microsoft
will be providing the tools to embed these workflow designers inside your own applications,
so your end users will also benefit from this runtime.
</p>
        <p>
As a demo, we were shown how this currently works: there's a new project type in Visual
Studio, you can define the state machine in a visual designer which is persisted as
a .xoml file and you can program the individual activities through managed classes.
Furthermore, the entire development experience supported since you can visually set
breakpoints in your workflow designer and it will just work in the debugger. Incredibly
powerful!
</p>
        <h3>Microsoft Expression
</h3>
        <p>
          <strong>Acrylic</strong> is a tool that allows you to create vector-based graphics
and export them as XAML.
</p>
        <p>
          <strong>Quartz Web Designer</strong> allows a web designer to create ASP.NET ASPX
and master pages in a rich designer environment that supports XML/XSLT and even ASP.NET
controls with their full design-time power (such as smart tags). It even features
a built-in web server that runs your website locally.
</p>
        <p>
          <strong>Sparkle</strong> is basically a XAML designer that uses the same project and
MSBuild system as Visual Studio.
</p>
        <p>
The last two tools actually make me wonder how large the overlap is with Visual Studio:
since they share so many features (designers, web server, project system, build system,
...), I would think that the tools are just customized and "skinned" versions of Visual
Studio, but targeted at non-developers...
</p>
        <h3>Visual Studio Tools for Applications
</h3>
        <p>
The VSTA platform looks promising, and we were shown a demo that showed the runtime
in action in a special build of AutoCAD, but there wasn't really much info available
on the runtime or on the capabilities of the platform. I'm sure we will hear much
more about this in the near future, since VBA is still one of the most used extension
platforms for a lot of applications.
</p>
        <h3>Office 12
</h3>
        <p>
During the second part of the keynote, more time was dedicated to showcasing the upcoming
Office "12" release. The user experience seems much improved, but unfortunately, we
won't be able to get our hands on it for a few months yet. For PDC attendees, this
is truly a shame, since we're all quite thrilled about it and they're hyping it all
up, but we need to wait a few months before we can actually start using it...
</p>
        <p>
Some random notes from the Office 12 part:
</p>
        <ul>
          <li>
SharePoint (Windows SharePoint Services as well as SharePoint Portal Server) is positioned
as the core element of the entire Office System.</li>
          <li>
Office 12 will have blogs and wiki's as part of the collaboration framework. You heard
it right, blogs and wiki's!</li>
          <li>
You can think of the new FrontPage as a designer or management tool for SharePoint,
e.g. you can use it to define new workflows (which are of course also persisted as
.xoml files).</li>
          <li>
You can finally use InfoPath forms over the web! Another cool feature was that you
can now store and share design snippets for reusable parts of your InfoPath forms.
Nice!</li>
        </ul>
        <p>
So that wrapped up the second keynote, less interesting (apart from the Windows Workflow
Services) but nevertheless lots of promise for the future.
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=55fa57d3-ca9c-48d1-8493-163bad5926ec" />
      </body>
      <title>PDC05: The Second Keynote</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</guid>
      <link>http://jelle.druyts.net/2005/09/14/PDC05TheSecondKeynote.aspx</link>
      <pubDate>Wed, 14 Sep 2005 23:07:23 GMT</pubDate>
      <description>&lt;h3&gt;Introduction
&lt;/h3&gt;
&lt;p&gt;
Although the &lt;a href="2005/09/13/PDC05Keynote.aspx"&gt;first keynote&lt;/a&gt; on Tuesday already
ran way over time, Eric Rudder still found plenty more to talk about in the second
keynote today. The main announcements were:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows Workflow Foundation&lt;/strong&gt;: this natural extension to the .NET Framework
enables developers to incorporate both System Workflow as Human Workflow into their
applications. Microsoft is actually using this themselves in their next versions of
SharePoint and Office "12".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Expression&lt;/strong&gt;: this is a suite of designer tools (codenamed
Acrylic, Sparkle and Quartz) aimed at graphics and web designers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Studio Tools for Applications (VSTA)&lt;/strong&gt;: think of this as the
next version of Visual Basic for Applications (VBA), but of course now within the
managed .NET runtime. So this technology enables application customization in .NET,
and it's already committed to by its integration into Office InfoPath "12".&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Windows Workflow Foundation
&lt;/h3&gt;
&lt;p&gt;
The main statement that caught my attention was that "Workflow is everywhere": every
"if" statement you write is a branch that effectively represents a lightweight workflow
step; every webpage transition is a choice you make and can be modeled in a workflow.
&lt;/p&gt;
&lt;p&gt;
So Windows Workflow Foundation sets out to capture complex workflows, expose them
to developers and enable on-the-fly extensions to them for added flexibility. Although
this sounds impressive, in the end, all it is is "just another .NET namespace": you
can execute all of this through managed classes. Furthermore, you can design the workflows
right in Visual Studio, very much like you can model Biztalk orchestrations right
now.
&lt;/p&gt;
&lt;p&gt;
As a small remark (but I think this is quite big news), it was noted that Microsoft
will be providing the tools to embed these workflow designers inside your own applications,
so your end users will also benefit from this runtime.
&lt;/p&gt;
&lt;p&gt;
As a demo, we were shown how this currently works: there's a new project type in Visual
Studio, you can define the state machine in a visual designer which is persisted as
a .xoml file and you can program the individual activities through managed classes.
Furthermore, the entire development experience supported since you can visually set
breakpoints in your workflow designer and it will just work in the debugger. Incredibly
powerful!
&lt;/p&gt;
&lt;h3&gt;Microsoft Expression
&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Acrylic&lt;/strong&gt; is a tool that allows you to create vector-based graphics
and export them as XAML.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Quartz Web Designer&lt;/strong&gt; allows a web designer to create ASP.NET ASPX
and master pages in a rich designer environment that supports XML/XSLT and even ASP.NET
controls with their full design-time power (such as smart tags). It even features
a built-in web server that runs your website locally.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Sparkle&lt;/strong&gt; is basically a XAML designer that uses the same project and
MSBuild system as Visual Studio.
&lt;/p&gt;
&lt;p&gt;
The last two tools actually make me wonder how large the overlap is with Visual Studio:
since they share so many features (designers, web server, project system, build system,
...), I would think that the tools are just customized and "skinned" versions of Visual
Studio, but targeted at non-developers...
&lt;/p&gt;
&lt;h3&gt;Visual Studio Tools for Applications
&lt;/h3&gt;
&lt;p&gt;
The VSTA platform looks promising, and we were shown a demo that showed the runtime
in action in a special build of AutoCAD, but there wasn't really much info available
on the runtime or on the capabilities of the platform. I'm sure we will hear much
more about this in the near future, since VBA is still one of the most used extension
platforms for a lot of applications.
&lt;/p&gt;
&lt;h3&gt;Office 12
&lt;/h3&gt;
&lt;p&gt;
During the second part of the keynote, more time was dedicated to showcasing the upcoming
Office "12" release. The user experience seems much improved, but unfortunately, we
won't be able to get our hands on it for a few months yet. For PDC attendees, this
is truly a shame, since we're all quite thrilled about it and they're hyping it all
up, but we need to wait a few months before we can actually start using it...
&lt;/p&gt;
&lt;p&gt;
Some random notes from the Office 12 part:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SharePoint (Windows SharePoint Services as well as SharePoint Portal Server) is positioned
as the core element of the entire Office System.&lt;/li&gt;
&lt;li&gt;
Office 12 will have blogs and wiki's as part of the collaboration framework. You heard
it right, blogs and wiki's!&lt;/li&gt;
&lt;li&gt;
You can think of the new FrontPage as a designer or management tool for SharePoint,
e.g. you can use it to define new workflows (which are of course also persisted as
.xoml files).&lt;/li&gt;
&lt;li&gt;
You can finally use InfoPath forms over the web! Another cool feature was that you
can now store and share design snippets for reusable parts of your InfoPath forms.
Nice!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So that wrapped up the second keynote, less interesting (apart from the Windows Workflow
Services) but nevertheless lots of promise for the future.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=55fa57d3-ca9c-48d1-8493-163bad5926ec" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=55fa57d3-ca9c-48d1-8493-163bad5926ec</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=543fb84e-c089-4333-bdfc-dfab517b1756</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=543fb84e-c089-4333-bdfc-dfab517b1756</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=543fb84e-c089-4333-bdfc-dfab517b1756</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=543fb84e-c089-4333-bdfc-dfab517b1756</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Introduction
</h3>
        <p>
The keynote for this year's PDC traditionally started off with a roadmap of the Microsoft
platform from the times of yore. In waves of 10 years, we received new foundations
to build upon:
</p>
        <ul>
          <li>
In 1975, the software industry really took off as a consumer-oriented market.</li>
          <li>
In 1985, there was MS-DOS and the PC that we could take for granted.</li>
          <li>
In 1995, Windows '95 established the new GUI capabilities that we still use today.</li>
          <li>
In 2005, we can really depend on the internet, .NET, XML and WebServices to build
connected applications.</li>
        </ul>
        <h3>Windows Vista
</h3>
        <p>
The keynote went on to talk about the three C's of Windows Vista: Clear, Confident
and Connect. Things that caught my attention in those areas were:
</p>
        <p>
          <strong>Clear</strong>
        </p>
        <ul>
          <li>
The ALT-TAB window looks <em>much</em> nicer, with live previews of the windows in
a sort of carroussel mode.</li>
          <li>
You can also get a very nice 3D view of the open windows.</li>
          <li>
If you hover over a taskbar item, you get a nice little live preview of the associated
window (a bit like the little inline Windows Media Player toolbar).</li>
          <li>
Search is embedded everywhere, also in the Start Menu, where you can quickly filter
all items collected from your start menu, your applications, your favorites, ...</li>
          <li>
A virtual folder in Windows Explorer is actually just a persisted query stored in
an XML file, so you can actually open the virtual folder in notepad and see the XML.</li>
          <li>
The sidebar is back! I heard some rumors that it would disappear but it's there and
still looking as nice as before. The individual panels on it are now called "gadgets"
(I don't think that was how they were called before.)</li>
          <li>
There's also a little something called "Sideshow", which looked kind of like a PDA
built into the case of a laptop where you get quick access to your email, calendar,
... without booting your laptop.</li>
        </ul>
        <p>
          <strong>Confident</strong>
        </p>
        <ul>
          <li>
There's built-in support for Parental Control, so you can define which games can be
played by who for example.</li>
          <li>
A lot of work has been put into anti-phishing. For example, there's a new Dynamic
Protection Service, which blocks websites which have been marked as phishing sites.
You can easily mark sites as phishing, so they will be blocked for everyone automatically;
you can also request to unblock sites you believe are falsely blocked. A team is actively
maintaining the list, so if they can keep this up-to-date, it could be a viable solution
to the problem.</li>
        </ul>
        <p>
          <strong>Connect</strong>
        </p>
        <ul>
          <li>
IE7 supports tabbed browsing, as we already knew. The pretty cool extra feature is
that you can get a PowerPoint-like slide overview of all your open windows and manage
them through there.</li>
          <li>
IE7 has built-in support for discovering RSS feeds and subscribing to them. The only
problem I have with it, is that it heavily uses the orange XML icon we all know now,
but I wouldn't want this to become too mainstream. XML does <em>so </em>much more
than RSS that it's just stupid to use it as a "marketing icon" for it. Why not just
use an orange RSS icon?</li>
          <li>
Microsoft is also anticipating RSS to be used for much more than just subscribing
to feeds: businesses will depend on a syndication format more and more as they connect
to their partners and suppliers. One example was the new version of their CRM solution,
Microsoft Dynamics CRM, which uses RSS to let a user subscribe to changes in the backend
CRM system.</li>
        </ul>
        <h3>Office 12
</h3>
        <p>
After touring Windows Vista, Office 12 was next up. The target of Office has always
been to "Get Better Results Faster" and there sure seem to be a lot of productivity
enhancements. As a fun fact, Word 1.0 had 100 commands (in the menu bars and toolbars),
Word 2003 has over 1500! So with that in mind, we basically got a quick tour of Word,
Excel and PowerPoint running under Vista and it truly looks wonderful.
</p>
        <p>
Windows Vista and Office 12 are both scheduled for release the second half of 2006,
so that's getting pretty close already. I'm actually very much looking forward to
getting all this power, so I might start really using Windows Vista as my main OS.
I'll keep you posted if it works out :-)
</p>
        <h3>Pillars Of Longhorn
</h3>
        <p>
In the second part of the keynote, Jim Allchin came out to revisit the four pillars
of Longhorn as they were originally set out at the PDC two years ago (Indigo, Avalon
and WinFS on top of a common Core). They still seem to be in the current version of
Vista although, for a long time, I thought they were gone: Indigo and Avalon were
backported to Windows XP SP2 and Windows 2003, and WinFS seemed to be postponed to
Longhorn Server. Here's how they look today:
</p>
        <p>
          <strong>Core</strong>
        </p>
        <ul>
          <li>
The security system has been adapted so that users can more easily run in least-privilege
accounts.</li>
          <li>
SuperFetch is a service that monitors your application usage over time (seconds, hours,
days, ...) to see which applications you use most and pre-loads them so they start
up much faster.</li>
          <li>
If you stick in a USB drive, the system will notice this and start using it as extra
RAM. Funky!</li>
          <li>
Another attempt has been made to reduce the number of reboots by 50%. In fact, it
seems they can now shut down part of the system to replace dll's while the rest of
the system keeps running.</li>
        </ul>
        <p>
          <strong>Presentation (formerly Avalon)</strong>
        </p>
        <ul>
          <li>
They've officially announced the Atlas technology, which is basically an AJAX framework
integrated into ASP.NET 2.0 and Visual Studio 2005.</li>
          <li>
The Windows Presentation Foundation consists of both the engine (allowing applications
to run on screen real estate varying from devices to laptops to 21" screens to wall-sized
video screens) and the framework (the managed classes you can use to build your application).</li>
          <li>
Newly announced is WPF/E, which stands for Windows Presentation Foundation/Everywhere.
This is a lightweight stripped subset of the WPF runtime for use on devices, and is
based on XAML and JScript (so no support for C# or other managed languages to code
your application in).</li>
        </ul>
        <p>
          <strong>Communication (formerly Indigo)</strong>
        </p>
        <ul>
          <li>
Relatively new to the Windows Communication Foundation (for me anyway) is InfoCards,
which is a federated claims-based identity system. Important to note is that the OS
manages all your identities and use one type of window and thus one user experience
to log you on to different remote systems.</li>
          <li>
Another feature shown is People Near Me (PNM), which seems to have locality-based
information about the people you know.</li>
        </ul>
        <p>
If you think both these features seam a little vague, I can't blame you: they weren't
really explained very much yet and I'm not sure what they do exactly or how to use
them (but there will be plenty of sessions to explain later this week).
</p>
        <p>
          <strong>WinFS</strong>
        </p>
        <p>
Actually, this part wasn't covered today, so I'm assuming the "Windows Storage Foundation"
(wild guess on the future official name) will still only appear in the Longhorn Server
timeframe.
</p>
        <h3>Lap Around Vista
</h3>
        <p>
By far the coolest new feature that was announced today is LINQ, or .NET Language
Integrated Query. This means you can write SQL-like selects with filtering and sorting
as first-class citizens in the C# language. I'll definitely be spending time exploring
this feature but in short, it means that you can query any object that implements
IEnumerable&lt;T&gt;. Look at <a href="http://blogs.msdn.com/danielfe/">Dan Fernandez</a>'s
blog for more info on <a href="http://blogs.msdn.com/danielfe/archive/2005/09/13/464904.aspx">LINQ</a> and
a code sample. Really, really cool!
</p>
        <p>
Another surprise was the return of ObjectSpaces (once again). This time, using this
long-awaited Object/Relational Mapping framework looked very similar to XML serialization
in some way: you can decorate your types with attributes that define their mapping
onto the database and you're pretty much done.
</p>
        <p>
To conclude, Don Box, Anders Hejlsberg, Chris Anderson and Scott Guthrie came out
to run a lap around Vista. The demo started with Anders Hejlsberg building a LINQ
query doing a cross select of the currently running processes with an ObjectSpaces-fronted
database containing process description. So that was one query, in native C#, that
did an in-memory join between objects and the database in a very easy and recognizable
format.
</p>
        <p>
After that, Don Box exposed this information as an RSS stream through an Indigo service.
A custom PoxBinding stripped off the SoapEnvelope at the top and as such, just doing
an HTTP/GET on the service returnd a valid RSS stream, which was consumeable from
IE7 out of the box.
</p>
        <p>
To go even further, Scott Guthrie made ASP.NET consume this feed through an Atlas
client, which means that it was queried asynchronously and with a pretty slick UI.
</p>
        <p>
Chris Anderson concluded by showing the new Avalon rendering in action to show the
items in the feed through fancy 2D and 3D views with minimal amounts of code and XAML.
</p>
        <p>
All in all, this was a very impressive demo, although some parts were obscure and
highly customized (the PoxBinding, the special plumbing to consume the Indigo service
from JScript, some of the XAML formatting, ...).
</p>
        <h3>Wrap-up
</h3>
        <p>
At the very end, Hillel Cooperman showed us a demo application called Project Max
that was built to showcase all these different components: it's a photo-sharing app
that you can actually use and download at the <a href="http://www.microsoft.com/Max/">Project
Max Homepage</a>. Looks good!
</p>
        <p>
As a sidenote, the live transcript that was running while the speakers were talking
was pretty cool, especially the fact that the person typing the transcript was pretty
fast but apparently not very technical. While trying to keep up with the speaker,
things like WinFS were consistently transcribed as WinFX (understandeable but critical
mistake in this case), RSS became RSF and lots of other small mistakes. But the funniest
one was where "things like RSS" was transcribed as "things like our asses" :-)
</p>
        <p>
Anyway, that pretty much concludes the keynote. A great start for a promising conference!
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=543fb84e-c089-4333-bdfc-dfab517b1756" />
      </body>
      <title>PDC05 Keynote</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=543fb84e-c089-4333-bdfc-dfab517b1756</guid>
      <link>http://jelle.druyts.net/2005/09/13/PDC05Keynote.aspx</link>
      <pubDate>Tue, 13 Sep 2005 23:45:03 GMT</pubDate>
      <description>&lt;h3&gt;Introduction
&lt;/h3&gt;
&lt;p&gt;
The keynote for this year's PDC traditionally started off with a roadmap of the Microsoft
platform from the times of yore. In waves of 10 years, we received new foundations
to build upon:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
In 1975, the software industry really took off as a consumer-oriented market.&lt;/li&gt;
&lt;li&gt;
In 1985, there was MS-DOS and the PC that we could take for granted.&lt;/li&gt;
&lt;li&gt;
In 1995, Windows '95 established the new GUI capabilities that we still use today.&lt;/li&gt;
&lt;li&gt;
In 2005, we can really depend on the internet, .NET, XML and WebServices to build
connected applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Windows Vista
&lt;/h3&gt;
&lt;p&gt;
The keynote went on to talk about the three C's of Windows Vista: Clear, Confident
and Connect. Things that caught my attention in those areas were:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Clear&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The ALT-TAB window looks &lt;em&gt;much&lt;/em&gt; nicer, with live previews of the windows in
a sort of carroussel mode.&lt;/li&gt;
&lt;li&gt;
You can also get a very nice 3D view of the open windows.&lt;/li&gt;
&lt;li&gt;
If you hover over a taskbar item, you get a nice little live preview of the associated
window (a bit like the little inline Windows Media Player toolbar).&lt;/li&gt;
&lt;li&gt;
Search is embedded everywhere, also in the Start Menu, where you can quickly filter
all items collected from your start menu, your applications, your favorites, ...&lt;/li&gt;
&lt;li&gt;
A virtual folder in Windows Explorer is actually just a persisted query stored in
an XML file, so you can actually open the virtual folder in notepad and see the XML.&lt;/li&gt;
&lt;li&gt;
The sidebar is back! I heard some rumors that it would disappear but it's there and
still looking as nice as before. The individual panels on it are now called "gadgets"
(I don't think that was how they were called before.)&lt;/li&gt;
&lt;li&gt;
There's also a little something called "Sideshow", which looked kind of like a PDA
built into the case of a laptop where you get quick access to your email, calendar,
... without booting your laptop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Confident&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
There's built-in support for Parental Control, so you can define which games can be
played by who for example.&lt;/li&gt;
&lt;li&gt;
A lot of work has been put into anti-phishing. For example, there's a new Dynamic
Protection Service, which blocks websites which have been marked as phishing sites.
You can easily mark sites as phishing, so they will be blocked for everyone automatically;
you can also request to unblock sites you believe are falsely blocked. A team is actively
maintaining the list, so if they can keep this up-to-date, it could be a viable solution
to the problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Connect&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
IE7 supports tabbed browsing, as we already knew. The pretty cool extra feature is
that you can get a PowerPoint-like slide overview of all your open windows and manage
them through there.&lt;/li&gt;
&lt;li&gt;
IE7 has built-in support for discovering RSS feeds and subscribing to them. The only
problem I have with it, is that it heavily uses the orange XML icon we all know now,
but I wouldn't want this to become too mainstream. XML does &lt;em&gt;so &lt;/em&gt;much more
than RSS that it's just stupid to use it as a "marketing icon" for it. Why not just
use an orange RSS icon?&lt;/li&gt;
&lt;li&gt;
Microsoft is also anticipating RSS to be used for much more than just subscribing
to feeds: businesses will depend on a syndication format more and more as they connect
to their partners and suppliers. One example was the new version of their CRM solution,
Microsoft Dynamics CRM, which uses RSS to let a user subscribe to changes in the backend
CRM system.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Office 12
&lt;/h3&gt;
&lt;p&gt;
After touring Windows Vista, Office 12 was next up. The target of Office has always
been to "Get Better Results Faster" and there sure seem to be a lot of productivity
enhancements. As a fun fact, Word 1.0 had 100 commands (in the menu bars and toolbars),
Word 2003 has over 1500! So with that in mind, we basically got a quick tour of Word,
Excel and PowerPoint running under Vista and it truly looks wonderful.
&lt;/p&gt;
&lt;p&gt;
Windows Vista and Office 12 are both scheduled for release the second half of 2006,
so that's getting pretty close already. I'm actually very much looking forward to
getting all this power, so I might start really using Windows Vista as my main OS.
I'll keep you posted if it works out :-)
&lt;/p&gt;
&lt;h3&gt;Pillars Of Longhorn
&lt;/h3&gt;
&lt;p&gt;
In the second part of the keynote, Jim Allchin came out to revisit the four pillars
of Longhorn as they were originally set out at the PDC two years ago (Indigo, Avalon
and WinFS on top of a common Core). They still seem to be in the current version of
Vista although, for a long time, I thought they were gone: Indigo and Avalon were
backported to Windows XP SP2 and Windows 2003, and WinFS seemed to be postponed to
Longhorn Server. Here's how they look today:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Core&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The security system has been adapted so that users can more easily run in least-privilege
accounts.&lt;/li&gt;
&lt;li&gt;
SuperFetch is a service that monitors your application usage over time (seconds, hours,
days, ...) to see which applications you use most and pre-loads them so they start
up much faster.&lt;/li&gt;
&lt;li&gt;
If you stick in a USB drive, the system will notice this and start using it as extra
RAM. Funky!&lt;/li&gt;
&lt;li&gt;
Another attempt has been made to reduce the number of reboots by 50%. In fact, it
seems they can now shut down part of the system to replace dll's while the rest of
the system keeps running.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Presentation (formerly Avalon)&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
They've officially announced the Atlas technology, which is basically an AJAX framework
integrated into ASP.NET 2.0 and Visual Studio 2005.&lt;/li&gt;
&lt;li&gt;
The Windows Presentation Foundation consists of both the engine (allowing applications
to run on screen real estate varying from devices to laptops to 21" screens to wall-sized
video screens) and the framework (the managed classes you can use to build your application).&lt;/li&gt;
&lt;li&gt;
Newly announced is WPF/E, which stands for Windows Presentation Foundation/Everywhere.
This is a lightweight stripped subset of the WPF runtime for use on devices, and is
based on XAML and JScript (so no support for C# or other managed languages to code
your application in).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Communication (formerly Indigo)&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Relatively new to the Windows Communication Foundation (for me anyway) is InfoCards,
which is a federated claims-based identity system. Important to note is that the OS
manages all your identities and use one type of window and thus one user experience
to log you on to different remote systems.&lt;/li&gt;
&lt;li&gt;
Another feature shown is People Near Me (PNM), which seems to have locality-based
information about the people you know.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you think both these features seam a little vague, I can't blame you: they weren't
really explained very much yet and I'm not sure what they do exactly or how to use
them (but there will be plenty of sessions to explain later this week).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;WinFS&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Actually, this part wasn't covered today, so I'm assuming the "Windows Storage Foundation"
(wild guess on the future official name) will still only appear in the Longhorn Server
timeframe.
&lt;/p&gt;
&lt;h3&gt;Lap Around Vista
&lt;/h3&gt;
&lt;p&gt;
By far the coolest new feature that was announced today is LINQ, or .NET Language
Integrated Query. This means you can write SQL-like selects with filtering and sorting
as first-class citizens in the C# language. I'll definitely be spending time exploring
this feature but in short, it means that you can query any object that implements
IEnumerable&amp;lt;T&amp;gt;. Look at &lt;a href="http://blogs.msdn.com/danielfe/"&gt;Dan Fernandez&lt;/a&gt;'s
blog for more info on &lt;a href="http://blogs.msdn.com/danielfe/archive/2005/09/13/464904.aspx"&gt;LINQ&lt;/a&gt; and
a code sample. Really, really cool!
&lt;/p&gt;
&lt;p&gt;
Another surprise was the return of ObjectSpaces (once again). This time, using this
long-awaited Object/Relational Mapping framework looked very similar to XML serialization
in some way: you can decorate your types with attributes that define their mapping
onto the database and you're pretty much done.
&lt;/p&gt;
&lt;p&gt;
To conclude, Don Box, Anders Hejlsberg, Chris Anderson and Scott Guthrie came out
to run a lap around Vista. The demo started with Anders Hejlsberg building a LINQ
query doing a cross select of the currently running processes with an ObjectSpaces-fronted
database containing process description. So that was one query, in native C#, that
did an in-memory join between objects and the database in a very easy and recognizable
format.
&lt;/p&gt;
&lt;p&gt;
After that, Don Box exposed this information as an RSS stream through an Indigo service.
A custom PoxBinding stripped off the SoapEnvelope at the top and as such, just doing
an HTTP/GET on the service returnd a valid RSS stream, which was consumeable from
IE7 out of the box.
&lt;/p&gt;
&lt;p&gt;
To go even further, Scott Guthrie made ASP.NET consume this feed through an Atlas
client, which means that it was queried asynchronously and with a pretty slick UI.
&lt;/p&gt;
&lt;p&gt;
Chris Anderson concluded by showing the new Avalon rendering in action to show the
items in the feed through fancy 2D and 3D views with minimal amounts of code and XAML.
&lt;/p&gt;
&lt;p&gt;
All in all, this was a very impressive demo, although some parts were obscure and
highly customized (the PoxBinding, the special plumbing to consume the Indigo service
from JScript, some of the XAML formatting, ...).
&lt;/p&gt;
&lt;h3&gt;Wrap-up
&lt;/h3&gt;
&lt;p&gt;
At the very end, Hillel Cooperman showed us a demo application called Project Max
that was built to showcase all these different components: it's a photo-sharing app
that you can actually use and download at the &lt;a href="http://www.microsoft.com/Max/"&gt;Project
Max Homepage&lt;/a&gt;. Looks good!
&lt;/p&gt;
&lt;p&gt;
As a sidenote, the live transcript that was running while the speakers were talking
was pretty cool, especially the fact that the person typing the transcript was pretty
fast but apparently not very technical. While trying to keep up with the speaker,
things like WinFS were consistently transcribed as WinFX (understandeable but critical
mistake in this case), RSS became RSF and lots of other small mistakes. But the funniest
one was where "things like RSS" was transcribed as "things like our asses" :-)
&lt;/p&gt;
&lt;p&gt;
Anyway, that pretty much concludes the keynote. A great start for a promising conference!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=543fb84e-c089-4333-bdfc-dfab517b1756" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=543fb84e-c089-4333-bdfc-dfab517b1756</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just like the rest of us who flew in on the special EMEA@PDC charter yesterday (check
out <a href="http://dotnetjunkies.com/WebLog/davidb/">David</a>'s blog for the <a href="http://dotnetjunkies.com/WebLog/davidb/archive/2005/09/10/132476.aspx">list
of Belgians</a>), I arrived in L.A. without problems, all ready and geared up for
the <a href="http://msdn.microsoft.com/events/pdc/">PDC 2005</a>! The community is
looking good, the vibe is definitely here, and I'm looking forward to spending a week
in braincooking mode.
</p>
        <p>
          <img src="content/binary/PDC05Flair_74852.jpg" border="0" />
        </p>
        <p>
Here are some of my pictures from the first day (check out the other blogs for much
better ones):
</p>
        <p>
          <img src="content/binary/PDC05-01-Amsterdam.jpg" border="0" />
        </p>
        <p>
          <em>Departure in Amsterdam</em>
        </p>
        <p>
          <img src="content/binary/PDC05-02-Greenland.jpg" border="0" />
        </p>
        <p>
          <em>Flying over Greenland</em>
        </p>
        <p>
          <img src="content/binary/PDC05-03-LA.jpg" border="0" />
        </p>
        <p>
          <em>Flying over L.A.</em>
        </p>
        <p>
          <img src="content/binary/PDC05-04-Charter.jpg" border="0" />
        </p>
        <p>
          <em>Arrival at LAX</em>
        </p>
        <p>
          <img src="content/binary/PDC05-05-Downtown.jpg" border="0" />
        </p>
        <p>
          <em>Downtown L.A. seen from the bus to the hotel</em>
        </p>
        <p>
          <img src="content/binary/PDC05-06-Reception.jpg" border="0" />
        </p>
        <p>
          <em>The welcome reception at the pool</em>
        </p>
        <p>
And I fully intend to keep making this kind of crappy pictures with my phone so stay
tuned for some more low-res fuzzy images of PDC05 - because that's how it feels over
here anyway ;-)
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=e3bd04a9-1126-4297-aa88-972bde2d8b6a" />
      </body>
      <title>PDC05: Ready To Rumble!</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</guid>
      <link>http://jelle.druyts.net/2005/09/11/PDC05ReadyToRumble.aspx</link>
      <pubDate>Sun, 11 Sep 2005 15:26:54 GMT</pubDate>
      <description>&lt;p&gt;
Just like the rest of us who flew in on the special EMEA@PDC charter yesterday (check
out &lt;a href="http://dotnetjunkies.com/WebLog/davidb/"&gt;David&lt;/a&gt;'s blog for the &lt;a href="http://dotnetjunkies.com/WebLog/davidb/archive/2005/09/10/132476.aspx"&gt;list
of Belgians&lt;/a&gt;), I arrived in L.A. without problems, all ready and geared up for
the &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC 2005&lt;/a&gt;! The community is
looking good, the vibe is definitely here, and I'm looking forward to spending a week
in braincooking mode.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05Flair_74852.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Here are some of my pictures from the first day (check out the other blogs for much
better ones):
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-01-Amsterdam.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Departure in Amsterdam&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-02-Greenland.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Flying over Greenland&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-03-LA.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Flying over L.A.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-04-Charter.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Arrival at LAX&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-05-Downtown.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Downtown L.A. seen from the bus to the hotel&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="content/binary/PDC05-06-Reception.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The welcome reception at the pool&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
And I fully intend to keep making this kind of crappy pictures with my phone so stay
tuned for some more low-res fuzzy images of PDC05 - because that's how it feels over
here anyway ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=e3bd04a9-1126-4297-aa88-972bde2d8b6a" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=e3bd04a9-1126-4297-aa88-972bde2d8b6a</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=9f439e69-7419-48b7-8301-a9653cb894b4</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=9f439e69-7419-48b7-8301-a9653cb894b4</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=9f439e69-7419-48b7-8301-a9653cb894b4</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9f439e69-7419-48b7-8301-a9653cb894b4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://channel9.msdn.com/pdc/">A free ticket to PDC05 just by blogging, you
say</a>? Try and stop me!
</p>
        <p>
          <a href="http://channel9.msdn.com/pdc/pdcfriends.aspx?contest=true">
            <img alt="blogging my way to pdc" src="http://channel9.msdn.com/pdc/Flairs/Blogmyway-h.jpg" border="0" />
          </a>
        </p>
        <p>
Apart from the obvious reasons why I think I should attend the <a href="http://msdn.microsoft.com/events/pdc/">PDC</a> (me
being a consultant and blogger, focused on pretty much all things Microsoft, and .NET
more specifically, which basically means I help sell <em>your</em> platform, e.g. <a href="CategoryView.aspx?category=Blog%7CProgramming%7C.NET%7CWeFly247">by
developing widely distributed end-to-end sample applications on .NET 2.0 Beta 2</a>,
for which I require all the information I can get as soon as I can get it, in order
for me to generate money for <em>your</em> company and ultimately <em>your</em> paycheck,
dear judge - think about <em>that</em> for a minute, I'm doing you <em>a favor</em> here
dammit, so giving me a ticket is the <em>least</em> you can do... but I digress),
here's the real deal:
</p>
        <ul>
          <li>
I'm from <a href="http://www.belgium.be/">Belgium</a>, where, as you may or may not
know, we make <a href="http://www.leonidas.com/">incredible chocolates</a> and <a href="http://www.beeradvocate.com/beer/profile/212/1711/">fantastic
beer</a>. I'll take as much with me as I can smuggle through customs, and throw a
party for all you <a href="http://channel9.msdn.com/">Channel 9</a>'ers out there.</li>
          <li>
            <a href="CategoryView.aspx?category=Blog%7CProgramming%7CPDC03">I was at PDC03</a> but
forgot my undies after the most excellent <a href="http://weblogs.asp.net/jlerman/archive/2003/10/21/32820.aspx">"Women
Who Code" BOF session</a>, so I really need to get back and pick them up before they
start to tear down the L.A. Convention Center on grounds of "asbestos smell".</li>
          <li>
I tipped my cab to wait for me at <a href="http://www.los-angeles-lax.com/">LAX</a> when
I flew out, and I'm anxious to see if he's still there.</li>
          <li>
I didn't get to <a href="http://neopoleon.com/blog/posts/263.aspx">show my weewee
to Don Box</a> at any conference yet, and I feel I'm just as entitled to show off
my manlyhood as <a href="http://neopoleon.com/">Rory</a> is.</li>
          <li>
I'm planning on speaking at PDC07, so I'd like to check out the locations of all the
electric outlets for my talk's setup. You don't expect me to fly out just to do <em>that</em>,
do you?</li>
          <li>
I'm also planning on speaking at PDC05, but unlike last time, I'll try to wait until
the guy with the mic has finished his talk.</li>
          <li>
My boss just bought a Porsche (really) so now he can't afford to buy me a ticket anymore.
Do you think it's fair that <em>I</em>'m a victim of <em>his</em> mid-life crisis?
(Hi Peter! Good thing my annual review is just over, eh?)</li>
          <li>
I missed the <a href="http://weblogs.asp.net/cfranklin/archive/2005/04/17/402346.aspx">gig
by the Band On The Runtime at the Standard Hotel</a> last time, but I've been <a href="PermaLink.aspx?guid=2808152c-6fd5-42f2-b4d1-c4f9fbc7f668">preparing
a replacement Channel 9 drummer</a> (sorry 'bout that <a href="http://weblogs.asp.net/cfranklin/">Carl</a>).</li>
          <li>
Despite popular belief (and the picture on my site), I'm actually a gorgeous young
female with perfect measures, an IQ of <code>0x9D</code> and a higher libido than
the average rabbit on viagra. Where do you want to meet up?</li>
        </ul>
        <p>
        </p>
        <p>
Right, that should do. See you there!
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=9f439e69-7419-48b7-8301-a9653cb894b4" />
      </body>
      <title>Blog'n My Way To The PDC05</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=9f439e69-7419-48b7-8301-a9653cb894b4</guid>
      <link>http://jelle.druyts.net/2005/06/12/BlognMyWayToThePDC05.aspx</link>
      <pubDate>Sun, 12 Jun 2005 21:10:02 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://channel9.msdn.com/pdc/"&gt;A free ticket to PDC05 just by blogging, you
say&lt;/a&gt;? Try and stop me!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://channel9.msdn.com/pdc/pdcfriends.aspx?contest=true"&gt;&lt;img alt="blogging my way to pdc" src="http://channel9.msdn.com/pdc/Flairs/Blogmyway-h.jpg" border=0&gt; &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Apart from the obvious reasons why I think I should attend the &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC&lt;/a&gt; (me
being a consultant and blogger, focused on pretty much all things Microsoft, and .NET
more specifically, which basically means I help sell &lt;em&gt;your&lt;/em&gt; platform, e.g. &lt;a href="CategoryView.aspx?category=Blog%7CProgramming%7C.NET%7CWeFly247"&gt;by
developing widely distributed end-to-end sample applications on .NET 2.0 Beta 2&lt;/a&gt;,
for which I require all the information I can get as soon as I can get it, in order
for me to generate money for &lt;em&gt;your&lt;/em&gt; company and ultimately &lt;em&gt;your&lt;/em&gt; paycheck,
dear judge - think about &lt;em&gt;that&lt;/em&gt; for a minute, I'm doing you &lt;em&gt;a favor&lt;/em&gt; here
dammit, so giving me a ticket is the &lt;em&gt;least&lt;/em&gt; you can do... but I digress),
here's the real deal:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I'm from &lt;a href="http://www.belgium.be/"&gt;Belgium&lt;/a&gt;, where, as you may or may not
know, we make &lt;a href="http://www.leonidas.com/"&gt;incredible chocolates&lt;/a&gt; and &lt;a href="http://www.beeradvocate.com/beer/profile/212/1711/"&gt;fantastic
beer&lt;/a&gt;. I'll take as much with me as I can smuggle through customs, and throw a
party for all you &lt;a href="http://channel9.msdn.com/"&gt;Channel 9&lt;/a&gt;'ers out there.&lt;/li&gt;
&lt;li&gt;
&lt;a href="CategoryView.aspx?category=Blog%7CProgramming%7CPDC03"&gt;I was at PDC03&lt;/a&gt; but
forgot my undies after the most excellent &lt;a href="http://weblogs.asp.net/jlerman/archive/2003/10/21/32820.aspx"&gt;"Women
Who Code" BOF session&lt;/a&gt;, so I really need to get back and pick them up before they
start to tear down the L.A. Convention Center on grounds of "asbestos smell".&lt;/li&gt;
&lt;li&gt;
I tipped my cab to wait for me at &lt;a href="http://www.los-angeles-lax.com/"&gt;LAX&lt;/a&gt; when
I flew out, and I'm anxious to see if he's still there.&lt;/li&gt;
&lt;li&gt;
I didn't get to &lt;a href="http://neopoleon.com/blog/posts/263.aspx"&gt;show my weewee
to Don Box&lt;/a&gt; at any conference yet, and I feel I'm just as entitled to show off
my manlyhood as &lt;a href="http://neopoleon.com/"&gt;Rory&lt;/a&gt; is.&lt;/li&gt;
&lt;li&gt;
I'm planning on speaking at PDC07, so I'd like to check out the locations of all the
electric outlets for my talk's setup. You don't expect me to fly out just to do &lt;em&gt;that&lt;/em&gt;,
do you?&lt;/li&gt;
&lt;li&gt;
I'm also planning on speaking at PDC05, but unlike last time, I'll try to wait until
the guy with the mic has finished his talk.&lt;/li&gt;
&lt;li&gt;
My boss just bought a Porsche (really) so now he can't afford to buy me a ticket anymore.
Do you think it's fair that &lt;em&gt;I&lt;/em&gt;'m a victim of &lt;em&gt;his&lt;/em&gt; mid-life crisis?
(Hi Peter! Good thing my annual review is just over, eh?)&lt;/li&gt;
&lt;li&gt;
I missed the &lt;a href="http://weblogs.asp.net/cfranklin/archive/2005/04/17/402346.aspx"&gt;gig
by the Band On The Runtime at the Standard Hotel&lt;/a&gt; last time, but I've been &lt;a href="PermaLink.aspx?guid=2808152c-6fd5-42f2-b4d1-c4f9fbc7f668"&gt;preparing
a replacement Channel 9 drummer&lt;/a&gt; (sorry 'bout that &lt;a href="http://weblogs.asp.net/cfranklin/"&gt;Carl&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
Despite popular belief (and the picture on my site), I'm actually a gorgeous young
female with perfect measures, an IQ of &lt;code&gt;0x9D&lt;/code&gt; and a higher libido than
the average rabbit on viagra. Where do you want to meet up?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Right, that should do. See you there!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=9f439e69-7419-48b7-8301-a9653cb894b4" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=9f439e69-7419-48b7-8301-a9653cb894b4</comments>
      <category>Blog</category>
      <category>Blog/General</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/PDC03</category>
      <category>Blog/Programming/PDC05</category>
    </item>
    <item>
      <trackback:ping>http://jelle.druyts.net/Trackback.aspx?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</trackback:ping>
      <pingback:server>http://jelle.druyts.net/pingback.aspx</pingback:server>
      <pingback:target>http://jelle.druyts.net/PermaLink.aspx?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</pingback:target>
      <dc:creator>Jelle Druyts</dc:creator>
      <wfw:comment>http://jelle.druyts.net/CommentView.aspx?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</wfw:comment>
      <wfw:commentRss>http://jelle.druyts.net/SyndicationService.asmx/GetEntryCommentsRss?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yes! <a href="http://www.bsdg.org/2004/12/microsoft-pdc-2005.shtml">It seems there'll
be a PDC again in 2005</a> (via <a href="http://radio.weblogs.com/0001011/2004/12/07.html#a8822">Scoble</a>)!
The new <a href="http://msdn.microsoft.com/events/pdc/">PDC05 site</a> is already
up although there's not a lot of content yet (meaning there's <em>no</em> content
yet, apart from the date (and the fact that it's announced of course (which is most
important))). In fact the news is so hot they didn't even have the time to update
the PDC03 logo yet ;-)
</p>
        <p>
Oh, I so wanna go again, last year's PDC was a blast... I'm already marking that week
as busy in my agenda, wink wink :-)
</p>
        <p>
Since <a href="http://lab.msdn.microsoft.com/vs2005/">Whidbey/VS2005</a> should be
old news by then, I'm assuming this one will be all about <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/">Indigo</a> and <a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/avalon/default.aspx">Avalon</a>,
and of course <a href="http://msdn.microsoft.com/longhorn/">Longhorn</a> (or what's
left of it anyway), and they'll probably have some yet unrevealed tricks up their
sleave as well. Bring it on!
</p>
        <img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=69d2f55f-05e3-4974-8262-f7c17f5417f8" />
      </body>
      <title>PDC 2005!</title>
      <guid isPermaLink="false">http://jelle.druyts.net/PermaLink.aspx?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</guid>
      <link>http://jelle.druyts.net/2004/12/08/PDC2005.aspx</link>
      <pubDate>Wed, 08 Dec 2004 09:05:49 GMT</pubDate>
      <description>&lt;p&gt;
Yes! &lt;a href="http://www.bsdg.org/2004/12/microsoft-pdc-2005.shtml"&gt;It seems there'll
be a PDC again in 2005&lt;/a&gt; (via &lt;a href="http://radio.weblogs.com/0001011/2004/12/07.html#a8822"&gt;Scoble&lt;/a&gt;)!
The new &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC05 site&lt;/a&gt; is already
up although there's not a lot of content yet (meaning there's &lt;em&gt;no&lt;/em&gt; content
yet, apart from the date (and the fact that it's announced of course (which is most
important))). In fact the news is so hot they didn't even have the time to update
the PDC03 logo yet ;-)
&lt;/p&gt;
&lt;p&gt;
Oh, I so wanna go again, last year's PDC was a blast... I'm already marking that week
as busy in my agenda, wink wink :-)
&lt;/p&gt;
&lt;p&gt;
Since &lt;a href="http://lab.msdn.microsoft.com/vs2005/"&gt;Whidbey/VS2005&lt;/a&gt; should be
old news by then, I'm assuming this one will be all about &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/"&gt;Indigo&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/Longhorn/understanding/pillars/avalon/default.aspx"&gt;Avalon&lt;/a&gt;,
and of course &lt;a href="http://msdn.microsoft.com/longhorn/"&gt;Longhorn&lt;/a&gt; (or what's
left of it anyway), and they'll probably have some yet unrevealed tricks up their
sleave as well. Bring it on!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://jelle.druyts.net/aggbug.ashx?id=69d2f55f-05e3-4974-8262-f7c17f5417f8" /&gt;</description>
      <comments>http://jelle.druyts.net/CommentView.aspx?guid=69d2f55f-05e3-4974-8262-f7c17f5417f8</comments>
      <category>Blog</category>
      <category>Blog/Programming</category>
      <category>Blog/Programming/.NET</category>
      <category>Blog/Programming/.NET/Whidbey</category>
      <category>Blog/Programming/PDC03</category>
      <category>Blog/Windows/Longhorn</category>
      <category>Blog/Programming/PDC05</category>
    </item>
  </channel>
</rss>