<?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" version="2.0">
  <channel>
    <title>simplegeek</title>
    <link>http://www.simplegeek.com</link>
    <description />
    <copyright>Copyright 2003 Chris Anderson</copyright>
    <lastBuildDate>Mon, 29 Mar 2004 22:11:34 GMT</lastBuildDate>
    <generator>ChrisAn's BlogX</generator>
    <managingEditor>chris_l_anderson@hotmail.com</managingEditor>
    <webMaster>chris_l_anderson@hotmail.com</webMaster>
    <item>
      <title>Is it bollixed up?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/36697366-bbdb-4f55-8490-3aceafcf391d</guid>
      <link>http://www.simplegeek.com/permalink.aspx/36697366-bbdb-4f55-8490-3aceafcf391d</link>
      <pubDate>Mon, 29 Mar 2004 22:11:34 GMT</pubDate>
      <description>problems in XAML... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        From <a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1241">Chris
        Sells</a>... 
    </p>
        <p>
        "<em>Marc Clifton, author of </em><a title="http://www.myxaml.com/" href="http://www.myxaml.com/"><em>the
        MyXaml open source project</em></a><em>, publishes a series of articles exploring
        opportunities for improvement for the Avalon architects to consider:</em></p>
        <ul>
          <li>
            <a class="posttitle" id="_94477d56267_HomePageDays_DaysList__ctl1_DayItem_DayList__ctl1_TitleUrl" title="http://myxaml.com/marcclifton/archive/2004/03/28/166.aspx" href="http://myxaml.com/marcclifton/archive/2004/03/28/166.aspx">
              <em>Is
            Microsoft Bollixing Up XAML?--a look at "tag names are class names"</em>
            </a>
            <em>
            </em>
          </li>
          <li>
            <a class="posttitle" id="_94477d56267_HomePageDays_DaysList__ctl0_DayItem_DayList__ctl5_TitleUrl" title="http://myxaml.com/marcclifton/archive/2004/03/29/169.aspx" href="http://myxaml.com/marcclifton/archive/2004/03/29/169.aspx">
              <em>Is
            Microsoft Bollixing Up XAML? -- The joys of VisualTree</em>
            </a>
            <em>
            </em>
          </li>
          <li>
            <a class="posttitle" id="_94477d56267_HomePageDays_DaysList__ctl0_DayItem_DayList__ctl3_TitleUrl" title="http://myxaml.com/marcclifton/archive/2004/03/29/170.aspx" href="http://myxaml.com/marcclifton/archive/2004/03/29/170.aspx">
              <em>Is
            Microsoft Bollixing Up XAML? -- The case of the missing collection</em>
            </a>
            <em>
            </em>
          </li>
          <li>
            <a class="posttitle" id="_94477d56267_HomePageDays_DaysList__ctl0_DayItem_DayList__ctl1_TitleUrl" title="http://myxaml.com/marcclifton/archive/2004/03/29/171.aspx" href="http://myxaml.com/marcclifton/archive/2004/03/29/171.aspx">
              <em>Is
            Microsoft Bollixing Up XAML? -- Decorating the house of cards</em>
            </a>" 
        </li>
        </ul>
        <p>
        I hate to defend stuff, generally I like the debate more than one sided... hopefully
        Marc will hear some of my responses and respond... 
    </p>
        <p>
        First, generally about style. Yep, Marc, you are right Style is messed up. Before
        we dive into the tag names are class names issues, lets address "Set"... right now
        it looks like we are fixing that one in a future release (I say looks like because
        of the standard caveats, etc... current plans always subject to change and still looking
        for feedback from customers, blah blah...). 
    </p>
        <p>
        The tag name issue - which for style we call "As Use" syntax - was a concious decision
        where Avalon broke the XAML rules. 
    </p>
        <p>
        Yes, as we have said many times, XAML is broader than Avalon. Don Box and I have shown
        XAML being used for console apps and more. In this case, Avalon decided that the markup
        model for style, strictly following the XAML rules, would have been horrible. 
    </p>
        <p>
        The problem starts with cloning. Since styles are effectively defining templates that
        need to be applied to multiple elements, you have the issue of defining what things
        need to be copied, and what can be assigned. In early builds of Avalon we used an
        implicit cloning model. We would create an instance of the element tree and then clone
        the tree, using several models for accomplishing this. It turned out not to work very
        well. 
    </p>
        <p>
        As part of the Avalon rearchitecture last year we moved to an explicit cloning model
        - enter FrameworkElementFactory. The element factor was an explicit object that would
        create new instances of another class and apply that style to it. Hence we could now
        create elements in a reasonable fashion. Of course, the markup ended up looking horrible: 
    </p>
        <p class="code">
        &lt;Style&gt;<br />
            &lt;Style.VisualTree&gt;<br />
                &lt;FrameworkElementFactory Type="DockPanel"
        ... /&gt; 
    </p>
        <p>
        So we came up with an alternative - what if Style had special parsing logic (by implementing
        an interface) and would basically switch the parser over from generating elements,
        to generating factories. Ah... now from an imperitive code model, we had
        explicit cloning, but from a markup model we had code you could understand. We then
        applied the same hack (uhm, i mean design) to the element explar - which gave
        us "&lt;Button Background='Red' /&gt;"
    </p>
        <p>
        I agree completely that the style tag breaks a bunch of XAML rules, and this was by
        design. The correct way to parse XAML is to instantiate the appropriate
        CLR types and inspect them for the various interfaces (IAddChild, IParseContent [or
        was it IParseLiteralContent?])... XAML is a way of binding XML to CLR objects.
    </p>
        <p>
        And for the last bit - the magic missing collections... here is a continued debate
        on the Avalon team. Having a collection specified for every tag is a pain, so
        we introduced IAddChild as a way for a specific object to control the parsing of child
        elements and text. If we are using this interface too much, we should fix it
        - however the interface (and capability) is needed to support the final leaf
        nodes of the tree - eventually someone has to consume the text nodes in the XML
        document ;-)
    </p>
        <p>
        Anyway, some of the issues that Marc brought up we are actively addressing, some
        we think are there by design... regardless, lets keep the conversation going and keep
        the feedback coming... we are listening!
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/36697366-bbdb-4f55-8490-3aceafcf391d</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Latest "Inside Avalon" posted...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/8039d848-bb9d-4e63-b719-db017c39bf93</guid>
      <link>http://www.simplegeek.com/permalink.aspx/8039d848-bb9d-4e63-b719-db017c39bf93</link>
      <pubDate>Sat, 27 Mar 2004 17:44:50 GMT</pubDate>
      <description>Blink blink... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My latest article seems to have appeared up on MSDN... <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnavalon/html/avalon03262004.asp">The Blinking Lights Division</a> is this month's (or bi-month's) column in Inside Avalon...
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/8039d848-bb9d-4e63-b719-db017c39bf93</comments>
      <category>Software</category>
    </item>
    <item>
      <title>What is a color?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/53ee6620-a140-4a8a-8bae-fce585b2c504</guid>
      <link>http://www.simplegeek.com/permalink.aspx/53ee6620-a140-4a8a-8bae-fce585b2c504</link>
      <pubDate>Tue, 24 Feb 2004 06:55:02 GMT</pubDate>
      <description>Wes digs into colors... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Wesner has been spending time with <a href="http://wesnerm.blogs.com/net_undocumented/2004/02/colors_undocume.html">color</a>,
        the good old color from WinForms. Interestingly enough, there are reasons for the
        odd behavior he describes... 
    </p>
        <p>
        When working on WinForms and ASP.NET we really wanted to unify some of the system
        types, and color was a pretty problematic one. The issue was that ASP.NET wanted to
        allow all the oddities of HTML (including the ability to use bogus or out of range
        values) for color, while WinForms wanted to allow all the oddities of User and GDI+
        (including system colors that represent a logical color). The solution - lets to it
        all!
    </p>
        <p>
        So the Color class was born. 
    </p>
        <p>
        We debated a lot internally if Color should be 64-bit scRGB or 32-bit RGB... in the
        end GDI+ (if i recall correctly) ended up punting on full 64-bit support for color,
        however we knew in the future they would want to move there. The internal data structure
        of color therefore uses a 64-bit value to store the color, but only ever utalizes
        the first 32-bits.
    </p>
        <p>
        Next, to support the various ASP.NET round tripping issues, we needed to store the
        string name of the color.
    </p>
        <p>
        Finally, we have a state bit to determine what is determining the color - basically
        is this a natural RGB, known color, or named color. Known colors are just the magic
        colors that are part of the web and win32 built in color set (Red, ControlText, etc.).
        We wanted to track the known colors both for dealing with the whacky Win32 system
        colors, and to preserve the knowledge that a color was specified as "red" not as 255,0,0.
    </p>
        <p>
        That is what we have today - a big color class that can do a lot, but has a lot of
        idosyncricies... 
    </p>
        <p>
        In Avalon we are moving to a full 64-bit color engine (native scRGB support) with
        support for multiple color spaces (you can specify colors in CMYK, etc.). Our color
        object won't be shared by ASP.NET, so we don't have some of the name based stuff that
        we have to worry about, and right now our plan is not to support Win32 system colors
        - but rather to solve the same problem using our styling and resource system to have
        a more natural and evolvable system instead of the magic colors.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/53ee6620-a140-4a8a-8bae-fce585b2c504</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Nikhil is at it again... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/ec87fa4e-d000-48d0-852d-a203745d4b2c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/ec87fa4e-d000-48d0-852d-a203745d4b2c</link>
      <pubDate>Fri, 13 Feb 2004 22:19:44 GMT</pubDate>
      <description>That guy... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        A couple points...
    </p>
        <ol>
          <li>
            Why didn't Nikhil tell me he was doing something this cool?</li>
          <li>
            Yes, Nikhil is the guy that wrote "Web Matrix" in his spare time</li>
          <li>
            Nikhil is one of the few developers that I have met that is also a great graphi designer</li>
        </ol>
        <p>
        Check out his very cool <a href="http://www.nikhilk.net/Entry.aspx?id=30">bexier spline
        designer</a>... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/ec87fa4e-d000-48d0-852d-a203745d4b2c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Rip XAML out? Sure!</title>
      <guid>http://www.simplegeek.com/permalink.aspx/64711fa5-4a90-46ce-8d20-d04a2926a69a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/64711fa5-4a90-46ce-8d20-d04a2926a69a</link>
      <pubDate>Wed, 11 Feb 2004 21:12:50 GMT</pubDate>
      <description>Rory's views... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Rory chimes in on some people saying that <a href="http://neopoleon.com/blog/posts/3350.aspx">XAML
    should go</a>... Of course, if I said something like "<em>Just because you don't like
    the fact that Microsoft created a new markup language, you want to rip it out and
    replace it with something else. Did you stop for even a moment to consider what a
    monumental task that would be? Why don't you just ask for someone to repaint the Empire
    State Building? Or have it moved a block over? Or transported to Sweden?</em>" people
    would just assume that I'm lazy and don't want to do the work... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/64711fa5-4a90-46ce-8d20-d04a2926a69a</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Ryan's cool Longhorn stuff</title>
      <guid>http://www.simplegeek.com/permalink.aspx/ec99805e-8504-4c59-8b2f-9a45845d48e6</guid>
      <link>http://www.simplegeek.com/permalink.aspx/ec99805e-8504-4c59-8b2f-9a45845d48e6</link>
      <pubDate>Mon, 09 Feb 2004 21:45:31 GMT</pubDate>
      <description>Too much to do one at a time...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.longhornblogs.com/rdawson">Ryan</a> is doing too many cool things
    to link to them one at a time... Just subscribe to his feed and check out the cool
    Longhorn (and Avalon!) stuff he is writing... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/ec99805e-8504-4c59-8b2f-9a45845d48e6</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Tim Anderson about the London ISV event... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/f44d6bd4-d8f8-40a2-9aac-eff63ba0c72c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/f44d6bd4-d8f8-40a2-9aac-eff63ba0c72c</link>
      <pubDate>Mon, 09 Feb 2004 21:44:12 GMT</pubDate>
      <description>Tim's summary... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.itwriting.com/blog/?postid=18">Tim comments on the London ISV
        event</a> [via <a href="http://radio.weblogs.com/0001011/2004/01/27.html#a6408">Scoble</a>]...
        "<em>I had wondered whether Microsoft might rewrite MSHTML in managed code, or else
        create a Longhorn web browser that converts HTML to Avalon rich text. Chris said no.
        He said that MSHTML is a complex body of code which does an extraordinary job of rendering
        even malformed HTML. Since the Internet works on the assumption that this kind of
        web page renders successfully, and since there are so many quirks and workarounds
        in MSHTML, Microsoft's developers did not dare to replace it. I hope I'm representing
        Chris's comments accurately. In essence, it suggests that IE will remain broadly as-is,
        well, for ever.</em>"
    </p>
        <p>
        Of course, "for ever" is a mighty long time... but I can say for certain, MSHTML is
        a complex body of code, and as with User32, GDI, etc., we will think long and hard
        about the application compatibility bar before we start thinking about rewriting that
        code... But, as James Bond says, "Never say never"... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/f44d6bd4-d8f8-40a2-9aac-eff63ba0c72c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XAML attributes</title>
      <guid>http://www.simplegeek.com/permalink.aspx/18d1ad29-5486-4c91-8d46-9e427f51413a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/18d1ad29-5486-4c91-8d46-9e427f51413a</link>
      <pubDate>Fri, 06 Feb 2004 06:56:15 GMT</pubDate>
      <description>Rob is publishing a lot of great questions... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    If you are intersted in where we are headed with XAML, you should really read <a href="http://www.longhornblogs.com/rrelyea">Rob
    Relyea</a>'s blog... in one of his latest posts he outlines one of the debates we
    are currently having about how <a href="http://www.longhornblogs.com/rrelyea/archive/2004/02/06/2374.aspx">we
    want to expose complex properties</a> (like Brush) in markup... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/18d1ad29-5486-4c91-8d46-9e427f51413a</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Messages, Objects, and Services</title>
      <guid>http://www.simplegeek.com/permalink.aspx/aa87eed8-a61f-4f52-afde-f534af94f6d5</guid>
      <link>http://www.simplegeek.com/permalink.aspx/aa87eed8-a61f-4f52-afde-f534af94f6d5</link>
      <pubDate>Wed, 04 Feb 2004 06:34:09 GMT</pubDate>
      <description>The confusion continues... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        It's taken me a while to wrap my head around this whole service orientation thing,
        and this indigo thing, and... well, everything. Reading Dare's post about <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=35476d3a-4994-4a8a-973c-c367d9661d65">Objects
        and Messaging</a> I can really see how people get this stuff confused. In ObjectiveC
        all method calls are really sending messages (in the implementation, I believe they
        really do send messages)... so, does that qualify as service orientation?
    </p>
        <p>
        Well, remember the 4 pillars of service orientation:
    </p>
        <ol>
          <li>
            Boundaries are explicit</li>
          <li>
            Services are autonomous</li>
          <li>
            Services share schema and contract, not types</li>
          <li>
            Policy based compatibility</li>
        </ol>
        <p>
        None of these actually say that messaging is part of service orientation. Messaging
        is one technique to accomplish some of these goals, it isn't a fundamental tenet of
        service orientation.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/aa87eed8-a61f-4f52-afde-f534af94f6d5</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Generics in WinFX</title>
      <guid>http://www.simplegeek.com/permalink.aspx/6faa8b2c-34e0-40e4-953f-79d2fa86ed76</guid>
      <link>http://www.simplegeek.com/permalink.aspx/6faa8b2c-34e0-40e4-953f-79d2fa86ed76</link>
      <pubDate>Tue, 03 Feb 2004 00:10:09 GMT</pubDate>
      <description>Wesner likes the sound of it... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        "<em>What excites me is the possibility that generics and other new CLR constructs
        as they come will also be integrated into the OS. I have not really seen any generic
        mechanism used at the API level in any operating system, since generics often were
        a compile-time feature, not a run-time feature as it is in .NET.</em>" [<a href="http://wesnerm.blogs.com/net_undocumented/2004/01/generics_in_ava.html">Wesner</a>]
    </p>
        <p>
        We are spending a lot of time these days debating generics in WinFX... generics will
        be in the CLS for Longhorn, so we are free to use them. Right now there is purely
        a process/engineering issue where we need to get all the various pieces together to
        make generics work (NGEN, C++, etc.)... obviously in the PDC build there wasn't a
        lot of generics, but hopefully in future releases you will see more generics in the
        APIs... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/6faa8b2c-34e0-40e4-953f-79d2fa86ed76</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Martin on commands</title>
      <guid>http://www.simplegeek.com/permalink.aspx/5c879f88-7d0d-47e3-acea-746c71d808b4</guid>
      <link>http://www.simplegeek.com/permalink.aspx/5c879f88-7d0d-47e3-acea-746c71d808b4</link>
      <pubDate>Sun, 01 Feb 2004 23:42:23 GMT</pubDate>
      <description>We are debating this internally... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Martin has an interesting bliki entry on <a href="http://martinfowler.com/bliki/DecoratedCommand.html">commands</a>...
        we are trying to work through the design of Avalon commands internally... once we
        get something solid enough, I'll try to post some of the design docs... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/5c879f88-7d0d-47e3-acea-746c71d808b4</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XAML as a document format</title>
      <guid>http://www.simplegeek.com/permalink.aspx/59813cd9-da00-42bd-ba17-826067dfad4c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/59813cd9-da00-42bd-ba17-826067dfad4c</link>
      <pubDate>Sun, 01 Feb 2004 09:17:51 GMT</pubDate>
      <description>Wesner notices that XAML could be used by everyone... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://wesnerm.blogs.com/net_undocumented/2004/01/xaml_as_documen.html">Wesner</a> has
        noticed that XAML can be used pretty broadly as a document format "<em>If application
        developers start writing document-based applications that follow the Avalon model
        of deriving new classes from existing elements, or even simply reusing existing elements,
        and turning on some of Avalon's designer services, XAML could quickly become one of
        the most common file formats.</em>"
    </p>
        <p>
        In fact, if you look at the container support in Longhorn (System.IO.CompoundFile,
        if I remember right) there is more than just XAML in here. With Longhorn we are doubling
        down on OLE compound files to have a good way to have complex documents with rich
        metadata.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/59813cd9-da00-42bd-ba17-826067dfad4c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Rory figures out how important Indigo is</title>
      <guid>http://www.simplegeek.com/permalink.aspx/cdaf92e8-c04c-4962-8eed-1f14da377eeb</guid>
      <link>http://www.simplegeek.com/permalink.aspx/cdaf92e8-c04c-4962-8eed-1f14da377eeb</link>
      <pubDate>Sun, 01 Feb 2004 08:43:37 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;p&gt;
        Rory had an epiphany... &lt;a href="http://neopoleon.com/blog/posts/2566.aspx"&gt;Indigo
        is key&lt;/a&gt;. As Don says&amp;#160;"No program is an island".
    &lt;/p&gt;
&lt;/body&gt;</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Rory had an epiphany... <a href="http://neopoleon.com/blog/posts/2566.aspx">Indigo
        is key</a>. As Don says "No program is an island".
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/cdaf92e8-c04c-4962-8eed-1f14da377eeb</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Rob is back... now with XAML, BAML, and CAML!</title>
      <guid>http://www.simplegeek.com/permalink.aspx/d65baa9d-25f8-41c8-b7c3-31a4d702063b</guid>
      <link>http://www.simplegeek.com/permalink.aspx/d65baa9d-25f8-41c8-b7c3-31a4d702063b</link>
      <pubDate>Sun, 01 Feb 2004 08:39:58 GMT</pubDate>
      <description>Rob digs into the details of XAML compilation and parsing... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Rob Relyea (master of XAML) is back in force on his blog, and started with a great
    post about <a href="http://www.longhornblogs.com/rrelyea/archive/2004/01/31/2306.aspx">XAML
    compilation</a>... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/d65baa9d-25f8-41c8-b7c3-31a4d702063b</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Wesner's views on Windows evolution</title>
      <guid>http://www.simplegeek.com/permalink.aspx/5455e3cc-b77c-4042-9edf-522995677df7</guid>
      <link>http://www.simplegeek.com/permalink.aspx/5455e3cc-b77c-4042-9edf-522995677df7</link>
      <pubDate>Sun, 01 Feb 2004 08:38:19 GMT</pubDate>
      <description>Office vs. Windows?</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Windows and Office have often had an interesting leap frog-ing behavior, and Wesner
        points out that with <a href="http://wesnerm.blogs.com/net_undocumented/2004/01/evolution_of_th.html">Longhorn
        we are pushing the envelope in Windows</a>... 
    </p>
        <p>
        Interestingly I think going forward we will see more innovation from application vendors
        - Longhorn will give developers so much more to build with that they can build much
        more distictive looking appliations.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/5455e3cc-b77c-4042-9edf-522995677df7</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>More Longhorn overviews... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/b5493697-67ec-405a-95a3-681c6b2134c3</guid>
      <link>http://www.simplegeek.com/permalink.aspx/b5493697-67ec-405a-95a3-681c6b2134c3</link>
      <pubDate>Thu, 29 Jan 2004 09:33:54 GMT</pubDate>
      <description>Incase you haven't gotten enough...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>For those of you that still want more... Here is the latest <a href="http://msdn.microsoft.com/theshow/Episode039/default.asp">.NET Show</a>, include Don and I in another reprise of the Lap... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/b5493697-67ec-405a-95a3-681c6b2134c3</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Presentation done... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/ec4aba1a-972a-48a0-9435-34ca4b051a7c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/ec4aba1a-972a-48a0-9435-34ca4b051a7c</link>
      <pubDate>Mon, 26 Jan 2004 11:06:24 GMT</pubDate>
      <description>Ahh... some quick relaxation...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Don &amp; I have finished our presentation now... I did my 10 minute keynote demo
        (B) and then the first hour of the presentation was focused on the fundamentals (I
        did the talking, B-)... after lunch we did 2 hours to cover the three pillars of Longhorn
        (A)... overal, I guess I'd give myself a B+ rating then... 
    </p>
        <p>
        We talked with press for about 30 minutes after Bill's gig, then hung out with the
        delegates (attendees) for another hour or so - it was great fun. I've really enjoyed
        the UK gig, however I wish I had done a better job on the first hour of the talk (a
        B- is below what I'm willing to accept &lt;G&gt;)... 
    </p>
        <p>
        Anyway, tonight is the Blogger's dinner at Masala Zone - we tried to organize a pre-func
        at a local pub, but unfortunately we never choose a venue... looks like we will have
        a pretty good showing (40 comments at this point, something around 30+ people claiming
        they are going to show &lt;G&gt;)... Don's bet is we will hit around 20... still sounds
        like it will be a smashing good time!
    </p>
        <p>
        As a side note - Megan (my wife) watched me present for the first time ever today.
        Very interesting. She's going to be at the blogger's dinner tonight also. An interesting
        experience to merge facets of your life like this &lt;G&gt;
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/ec4aba1a-972a-48a0-9435-34ca4b051a7c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Trees and events and properties - oh my!</title>
      <guid>http://www.simplegeek.com/permalink.aspx/f45fd8c7-4fc3-4183-a46a-1cfd8d34f2c3</guid>
      <link>http://www.simplegeek.com/permalink.aspx/f45fd8c7-4fc3-4183-a46a-1cfd8d34f2c3</link>
      <pubDate>Tue, 20 Jan 2004 23:09:31 GMT</pubDate>
      <description>More Avalon minutia</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>I had a meeting at work today where I was asked to explain a bit about Avalons
        multiple trees, events, property system, resources, styles, etc... I didn't quite
        get to all of it, but I thought I'd share some of my explanation here... </em>
        </p>
        <p>
          <em>Pre-reading... The Avalon rearchitecture <a href="http://blog.simplegeek.com/PermaLink.aspx/2e58f16e-d569-4660-b010-f557272580ee">Part
        1</a>, <a href="http://blog.simplegeek.com/PermaLink.aspx/359c73aa-4711-4061-b9d9-16300d8d278e">Part
        2</a>, and <a href="http://blog.simplegeek.com/PermaLink.aspx/29723093-9ce4-4edd-917e-9800f4a36317">Part
        3</a>.</em>
        </p>
        <p>
          <strong>Trees</strong>
        </p>
        <p>
        Avalon has One Tree, right? Well, that was what I claimed in a <a href="http://blog.simplegeek.com/PermaLink.aspx/359c73aa-4711-4061-b9d9-16300d8d278e">previous
        post</a>... Of course, by now you should know that I firmly believe in the saying
        that "facts obscure the truth". From the view of the Avalon rearchitecture we did
        go down to one tree, however reality is never that clean.
    </p>
        <p>
        Avalon as a "visual tree". That tree is a tree of objects that derive from MSAvalon.Windows.Media.Visual.
        Visual can be conceptually thought of as a rendering surface. In fact there are several
        types of visuals (2d rendering, 3d rendering, video, etc.). The base element class
        - MSAvalon.Windows.UiElement - derives from Visual also. Thus, the "visual tree" is
        a tree of visuals, some of which are also elements.
    </p>
        <p>
        &lt;LowLevelDetail BoredomFactor="High"&gt;<br /><em>The "visual tree" is actually not really the display tree. The managed visual
        objects are compiled (converted, rendered, whatever you want to call it) into a "composition
        tree". This is built up of unmanaged "comp node" objects that are what we use for
        low level rendering and animation. It is these comp nodes that can animate and render
        at display refresh speed (yes, that means updating 60Hz+). No user code (or managed
        code) ever makes it to the composition tree - this is critical to maintain glitch
        free video and animation (not because of the GC or anything... the design of the composition
        tree could be an entire post...)... Communication between the composition tree and
        the visual tree is done through two one way message pipelines - one inbound, one outbound.<br /></em>&lt;/LowLevelDetail&gt;
    </p>
        <p>
        Within this visual tree we needed to splice in things like a &lt;Bold&gt; or &lt;Paragraph&gt;
        - which can't be simply represented as a single visual (imagine a bold or paragraph
        that splits multiple pages). To facilitate this, we created a notion of the "logical
        tree" - that is a parent pointer (and children) that are not associated always with
        the visual hierarchy, but can have non-visual nodes in the tree.
    </p>
        <p>
          <strong>Events</strong>
        </p>
        <p>
        Events come in three flavors - preview events, bubbling events, and simple events.
    </p>
        <p>
        Preview events (like PreviewKeyDown) travel down the tree from the root to the target
        element. Imagine if you press the key "A" inside of a textbox. The window at the root
        of the tree will first get the PreviewKeyDown event, followed by each element that
        is a parent of the textbox, until eventually the preview event makes it to the textbox.
    </p>
        <p>
        Bubbling events (like KeyDown) travel from the target up to the root element. Again,
        imagine the textbox and your press "A". In this case the textbox gets the KeyDown
        event first, followed by each of the parents of the textbox, until eventually the
        event makes it all the way to the window.
    </p>
        <p>
        Simple events (like TextChanged) only are raised on the target element. Almost all
        the property changed events are simple events (also called "Direct only" events).
    </p>
        <p>
        Events are dealt with in two stages - build route, and invoke. Build route basically
        traces the path from the target element to the root of the tree. Then, during invoke,
        each element in the route is invoked with the event - either starting at the begining
        of the route or the end. The route will include elements from both the logical and
        visual tree - thus, you can handle the TextBox PreviewKeyDown event in the Bold element
        that is wrapped around it!
    </p>
        <p>
          <strong>Properties</strong>
        </p>
        <p>
        The Avalon property system - called the dependency property system - was originally
        designed as a way for our engineers to reuse code. We found that all of our properties
        wanted to share a great deal of features; inheritence, styling, change notification,
        attached storage, data binding, validation, etc. We didn't want to duplicate all the
        implementation of this for every property, so we had to find a way to make this work
        consistently across the platform. In addition, we didn't want the consumers of these
        components to have to learn a new concept, so we knew that we needed to leverage the
        existing CLR property system.
    </p>
        <p>
        Dependency properties are defined with a token - the DependencyProperty - that uniquely
        identifies the property and lets the definer specify the various services that they
        want associated with that property. The definer then implements a CLR accessor for
        easy use. Thus, when you say "button1.Backgorund = Brushes.Red;" the dependency property
        system is actually invoked, and allowed to provide the implementation of that property.
    </p>
        <p>
          <em>This is a much more abreviated version of the discussion, but probably long enough
        to bore you all... </em>
        </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/f45fd8c7-4fc3-4183-a46a-1cfd8d34f2c3</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Avalon MSDN column</title>
      <guid>http://www.simplegeek.com/permalink.aspx/a30862a9-21ca-49b0-8133-8065ac6466ec</guid>
      <link>http://www.simplegeek.com/permalink.aspx/a30862a9-21ca-49b0-8133-8065ac6466ec</link>
      <pubDate>Thu, 15 Jan 2004 08:29:22 GMT</pubDate>
      <description>Alternating... it's Jeff's turn</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Jeff Bogdan is one of the other architects on Avalon... He and I signed up to write
    a column on MSDN, he got to publish the <a href="http://msdn.microsoft.com/longhorn/default.aspx?pull=/library/en-us/dnavalon/html/avalon01062004.asp">first
    article in the series</a>... Hopefully Jeff will keep on me to make sure I don't let
    this die like the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/reaworapps1.asp">last</a><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/reaworapps2.asp">series</a> I
    told MSDN that I would do! :)</body>
      <comments>http://www.simplegeek.com/commentview.aspx/a30862a9-21ca-49b0-8133-8065ac6466ec</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Longhorn in my blood... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/2ba4a895-b08a-4b8f-8d9b-381f2545eeb8</guid>
      <link>http://www.simplegeek.com/permalink.aspx/2ba4a895-b08a-4b8f-8d9b-381f2545eeb8</link>
      <pubDate>Wed, 24 Dec 2003 09:20:04 GMT</pubDate>
      <description>Response to Michael Earls plea... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Michael Earls has stirred up a lot of responses to his plea for Microsoft bloggers
        to talk more about the here and now...
    </p>
        <p>
        "<em>Here's my point, enough with the "this Whidbey, Longhorn, XAML is so cool you
        should stop whatever it is you are doing and use it".  Small problem, we can't. 
        Please help us by remembering that we're still using the release bits, not the latest
        technology.</em>" -- <a href="http://www.cerkit.com/cerkitBlog/PermaLink.aspx?guid=9ededd3b-a7a3-401a-9a74-63e048c5e68e">Michael</a></p>
        <p>
          <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=a467e0a7-f659-4661-bbc9-44e36c9b5bb0 ">Dare</a>, <a href="http://www.gotdotnet.com/team/dbox/default.aspx?key=2003-12-24T07:52:19Z">Don</a>, <a href="http://devhawk.net/PermaLink.aspx?guid=8317cdbc-4e33-436c-8f61-47f07bfdee0c">Harry</a>,
        and <a href="http://radio.weblogs.com/0001011/2003/12/23.html#a5906">Scoble</a> have
        responded...
    </p>
        <p>
        Michael responded to the responses...
    </p>
        <p>
        "<em>My plea was not so that the advanced developers of Microsoft would stop posting
        about new technologies, it was merely to get them to remember where we're coming from
        and take a few extra seconds to connect the "now" with the "next".</em>" -- <a href="http://www.cerkit.com/cerkitBlog/PermaLink.aspx?guid=695f822c-b8ec-4cc4-bf66-a6fd778e9317 ">Michael</a></p>
        <p>
        I think this clarifying point is a great one. I write my blog to talk about what I
        do all day, whether it is working on the house, driving at the race track, or building
        Longhorn. My goal in my blog is not to be a corporate mouthpiece, but rather just
        communicate with an entire ecosystem of people out there (of course, this could cause
        another round of blog-examination for me...)
    </p>
        <p>
        Michael's comment is valid - connecting the here and now with the future is absolutely
        key. Not just for blogging about Microsoft and/or technology, but when talking about
        almost anything. One of the great skills of a presenter is to grab the audience, typically
        by describing the here and now, and how whatever they are talking about will move
        you from the here and now to a better future.
    </p>
        <p>
        I worked on WinForms, .NET, and Visual Studio for years (well, my time in Visual Studio
        was mostly in the VJ++ team, which, well, anyway...) so I should spend more time talking
        about how WinForms, etc, contribute to the design of Longhorn... and how code and
        developers can migrate forward.
    </p>
        <p>
        I don't intend to stop talking about Longhorn - it is what I work on every day (regardless
        of if I'm in the office! &lt;G&gt;) - it is part of my DNA at this point.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/2ba4a895-b08a-4b8f-8d9b-381f2545eeb8</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Building Longhorn... on what OS?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/83c5811d-ca9f-4967-a856-8473af40ef45</guid>
      <link>http://www.simplegeek.com/permalink.aspx/83c5811d-ca9f-4967-a856-8473af40ef45</link>
      <pubDate>Mon, 22 Dec 2003 08:23:56 GMT</pubDate>
      <description>Dogfooding strikes!</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Interestingly CLauer thinks we <a href="http://weblogs.asp.net/clauer/posts/45005.aspx">develop
        Avalon on Windows XP</a>... "<em>My understanding is that the development teams that
        are working on WinFS, Avalon and Indigo are neccessary working on today's systems,
        Windows XP to name it. So, obviously, current pre-alpha builds of each of these three
        Longhron pilars have to run on Windows XP. I do not understand how it could be otherwise.</em>"
    </p>
        <p>
        While the build lab does produce builds compiling on a shipping operating system (I
        actually don't know if they run Windows Server 2003 or Windows XP, but I think it
        is Win2K3?), developers run Longhorn.
    </p>
        <p>
        If memory serves about 14 months ago it became a requirement that we dogfood Longhorn
        to use Avalon. For the first year or more of Avalon's existence Windows XP was the
        base we built on, however as we added more dependencies, and got more people using
        the bits, we could no longer support using WinXP as the dogfood environment, so we
        all upgraded to Longhorrn.
    </p>
        <p>
        Of course, trying to develop a component and have your main dev machine be running
        a daily build of a pre-Beta operating system is quite a challenge. Some days you come
        in and upgrade to the daily build only to find that some core part of the OS decided
        to break that day. Of course, this is one of the ways we try to drive quality - by
        having the developers feel the pain if something is broken, generally it gets fixed
        very quickly. In addition even our VPs dogfood Longhorn, so you can imagine that occasionally
        there is a lot of pressure to fix something if their machines break!
    </p>
        <p>
        The answer to the question is a little of both - we compile the new version of the
        operating system on both released Windows and Longhorn, but we only debug, test, and
        run (obviously) on Longhorn.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/83c5811d-ca9f-4967-a856-8473af40ef45</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Sami hacks Avalon...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/d3149746-ac49-4155-9914-f7f359b9bb2d</guid>
      <link>http://www.simplegeek.com/permalink.aspx/d3149746-ac49-4155-9914-f7f359b9bb2d</link>
      <pubDate>Mon, 22 Dec 2003 08:15:31 GMT</pubDate>
      <description>Might work today, but not for long :)</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Sami did some DLL hacking and got <a href="http://www.dotnetguru.org/blogs/sami/index.php?m=200312#4">Avalon
        running on Windows XP</a>... I missed the post, but someone internally forwarded me
        that he was asking what I thought of this. I guess there are a couple points here:
    </p>
        <p>
        Avalon is a Longhorn only feature.
    </p>
        <p>
        One of the big new changes that isn't yet in the Longhorn builds is the new video
        driver model. Once that goes in, you really won't be able to run Avalon on XP. In
        addition when the desktop composition stuff gets turned on (it wasn't in the PDC handout
        build) there will be a tight dependency between Avalon and the Longhorn User32.
    </p>
        <p>
        As with any single feature in an operating system, you can manage to get it running
        elsewhere. If you really wanted you could probably copy the Longhorn Kernel32 over
        to an XP machine, however eventually you will need to copy most of the OS over to
        XP to make all the features work.
    </p>
        <p>
        Early on in the Avalon development we actually ran Avalon on XP all the time (there
        was no real "Longhorn" yet). For more than a year now Avalon was only running on Longhorn. Now
        that we are pushing towards Beta 1 the number of inter-dependencies between components
        are increasing.
    </p>
        <p>
        In short, while you may have been able to get this working on the PDC build, this
        won't be possible in the future builds.
    </p>
        <p>
        I guess my advice to Sami, I wouldn't bother publishing the steps needed for this.
        Not only is it a completely unsupported configuration, it is also something that won't
        work going forward.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/d3149746-ac49-4155-9914-f7f359b9bb2d</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>The need for document based apps in Avalon</title>
      <guid>http://www.simplegeek.com/permalink.aspx/443329e3-9875-4731-b89e-63e90a6bd8c0</guid>
      <link>http://www.simplegeek.com/permalink.aspx/443329e3-9875-4731-b89e-63e90a6bd8c0</link>
      <pubDate>Wed, 17 Dec 2003 07:24:20 GMT</pubDate>
      <description>Feedback on the lack of Doc/View support in Avalon... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Wes is lamenting the <a href="http://wesnerm.blogs.com/net_undocumented/2003/12/documentbased_a.html">lack
        of a formal doc/view framework in Avalon</a>... I can say that as of today we don't
        have plans (at least on the Avalon team) to produce a doc/view framework ala MFC (as
        with all statements about products these are subject to change at any time, especially
        with feedback &lt;G&gt;).
    </p>
        <p>
        A couple key points that Wes makes:
    </p>
        <p>
        "<em>In MFC, we start with a full implementation of a document-based application that
        does nothing; all the infrastructure (opening, edit, printing, windowing, OLE, etc)
        is in place, and developing an application involves simply modifying the do-nothing
        application to do something. The best thing about this approach was that almost all
        the testing for the the infrastructure code came for free.</em>"
    </p>
        <p>
        However, he continues, we took a step back in WinForms:
    </p>
        <p>
        "<em>In WinForms, we lost that, although there is a project underway called </em><a title="http://www.sellsbrothers.com/tools/genghis/" href="http://www.sellsbrothers.com/tools/genghis/"><em>Genghis </em></a><em>to
        restore the missing glue tying all the framework objects together into a document-based
        application.</em>"
    </p>
        <p>
        Genghis creator <a href="http://www.sellsbrothers.com/spout">Chris Sells</a> (who
        is now a 'softie) often gives me grief for our decision not to do a doc/view framework.
    </p>
        <p>
        At this point, it is all about resources. In Avalon we are rebuilding the core infrastructure
        for the presentation platform in Longhorn. We have a new driver model[1], graphics
        stack, control library, and application model. All of this with a unified approach
        allowing for integrated documents, ui, and media. This has been an amazing undertaking.
        Prior to PDC 2003 we had already spent over 2 years working on Avalon.
    </p>
        <p>
        The issue is that we don't have enough time or resources to do everything, and right
        now the doc/view framework has fallen off of our plate (it was considered).
    </p>
        <p>
        I've talked with people from the C++ team (that own MFC) and the .NET Client team
        (that own WinForms) to see if they have the resources to build a doc/view framework
        on top of Avalon. The nice thing about a doc/view framework (going the way that MFC
        did) is that it can be layered on top of a core framework. No news yet as to if they
        can or will do it, but we are listening to the feedback and trying to understand how
        we could tackle this.
    </p>
        <p>
        "<em>Other than the strange Objective C syntax, I found much to my liking in Cocoa.
        I was surprised to see support for name-value pairs, which look similar to Dependency
        Properties in Avalon. Cocoa does use the familiar MVC paradigm, with the standard
        NSController, NSApplication, NSDocument, NSWindow, NSControl objects. NSWindow, NSApplication
        and other "NSViews" derive from NSResponders, which implements the "Chain of Responsibility"
        design pattern. Even though, I have never seen Cocoa before, I know how it works because
        it follows the same pattern as every other framework. I know that Cocoa's NSResponder
        is the same as TCL's Bureaucrat, which is the same as MacApp's EventHandler.</em>"
    </p>
        <p>
        I've spent a small amount of time programming in Objective C against Cocoa, and I
        also found it very elegant, but overly complex to do simple tasks. My personal believe
        is that MVC paradigms should always be layered on top of a simple object oriented
        component based framework. There is a large class of developers that don't understand
        MVC and you can never hide complexity completely.
    </p>
        <p>
        "<em>But my fear is that, while document-based applications based on Avalon may become
        more flashy, they will look more like web-pages and less like Office-style applications.
        I not getting the sense that Avalon is paying attention to the traditional document-editor
        application.</em>"
    </p>
        <p>
        I disagree with your view here, but I totally understand the concern. Right now we
        are trying to crawl before we run. Avalon has a complete editing infrastructure with
        extensible mechanisms for adorners, backend stores, selection, etc. With a couple
        simple controls and properties you can create a editing surface for writing documents,
        media (animations, vector graphics, etc.), and ui (traditional forms). While we do
        lack the doc/view framework as an intrinsic, we are spending a lot of time trying
        to make sure that the platform provides the core services to allow for a great document
        editor...
    </p>
        <p>
          <em>[1] All WinXP drivers will continue to be supported, rather there is a new driver
        model that will be more robust, blah blah... </em>
        </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/443329e3-9875-4731-b89e-63e90a6bd8c0</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Interesting alternative to XML hierarchy</title>
      <guid>http://www.simplegeek.com/permalink.aspx/3a127c15-ca47-4039-bd2b-bc1fd0dd29ed</guid>
      <link>http://www.simplegeek.com/permalink.aspx/3a127c15-ca47-4039-bd2b-bc1fd0dd29ed</link>
      <pubDate>Tue, 16 Dec 2003 23:00:03 GMT</pubDate>
      <description>Not using XML hierarchy... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.docuverse.com/blog/donpark/2003/12/16.html#a1067 ">Don Park has
        an alternative</a> to reusing the XML hierarchy for visual hierarchy for things like
        XAML... 
    </p>
        <i>
          <p class="code">
         &lt;XAML&gt;<br />
          &lt;Window ID="root"&gt;<br />
           &lt;Window.Background&gt;Blue&lt;/Window.Background&gt;<br />
         &lt;/Window&gt;<br />
          &lt;Button ID="mybtn"&gt;Hello World&lt;/Button&gt;<br />
          &lt;Insert object="btn" into="root"/&gt;<br />
          &lt;Center object="btn" to="root"/&gt;<br />
          &lt;Move object="btn" x="10" y="20"/&gt;<br />
         &lt;/XAML&gt; 
    </p>
        </i>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/3a127c15-ca47-4039-bd2b-bc1fd0dd29ed</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Uri vs. String</title>
      <guid>http://www.simplegeek.com/permalink.aspx/95710b54-71ac-4a76-9136-142e801297a1</guid>
      <link>http://www.simplegeek.com/permalink.aspx/95710b54-71ac-4a76-9136-142e801297a1</link>
      <pubDate>Sat, 13 Dec 2003 09:28:20 GMT</pubDate>
      <description>The big debate today... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>We are currently having a big debate internally around the usage of Uri and String
        in our APIs.</em>
        </p>
        <p>
          <strong>Use Uri not String</strong>
        </p>
        <p>
        URI cannonicalization and escaping is very complex and people always get it wrong,
        so you must have a single codebase to do the work. Beyond that, converting from each
        form of a URI can introduce artifacts, so once you resolve (my shorthand for canon,
        escape, etc.) the URI you can really never go back to a string and try to resolve
        again (not precisely true, but basically). In Internet Explorer the resolving of URIs
        was a huge source of security issues, so we can't repeat that mistake in WinFS.
    </p>
        <p>
          <strong>Offer both Uri and String</strong>
        </p>
        <p>
        Using a single codebase for resolving URIs is great, just don't make developers suffer
        by having to create URIs everywhere. Developers think of URIs as strings, not complex
        objects.
    </p>
        <p>
        The pattern should look like:
    </p>
        <p>
        class MyComponent {<br />
            void SetSomething(string uri);<br />
            void SetSomething(Uri uri);<br />
            Uri GetSomething();<br />
        }
    </p>
        <p>
        The idea being that developers can call either version of the API. The implementation
        of SetSomething(string) would do nothing more than new up a Uri and call SetSomething(Uri).
    </p>
        <p>
          <strong>Use Uri not String</strong>
        </p>
        <p>
        The problem with the above pattern is that in a component based system you have people
        calling components through multiple layers. If internal MSFT develoepers (and third
        party component developers) start calling the string version, we get back into the
        "string -&gt; uri -&gt; string -&gt; uri" world which introduces loss of data (hence
        security issues).
    </p>
        <p>
          <strong>Offer both Uri and String</strong>
        </p>
        <p>
        We should just have a rule that says once you convert a Uri to a string, never go
        back. Then developers on the leaf of a component hierarchy would do the conversion,
        and it would transfer back.
    </p>
        <p>
          <strong>Use Uri not String</strong>
        </p>
        <p>
        Ahh, that is a great view, however history has shown us that doesn't work. It isn't
        possible to guarantee that no one converts back to a string, and therefore we will
        ship a bunch of components with this.
    </p>
        <p>
          <em>... And the debate continues to rage... </em>
        </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/95710b54-71ac-4a76-9136-142e801297a1</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XAML design review anyone?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/0f53cbd2-302f-43b8-948a-2a8c9cb0353c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/0f53cbd2-302f-43b8-948a-2a8c9cb0353c</link>
      <pubDate>Sat, 06 Dec 2003 17:32:11 GMT</pubDate>
      <description>Feedback on the syntax... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        As has been mentioned many times before, XAML is a generic programming model for working
        with CLI object trees. Don even wrote a <a href="http://www.gotdotnet.com/team/dbox/default.aspx?key=2003-11-07T07:41:40Z">console
        application in XAML</a>. As part of our effort to really nail down the format and
        rules for XAML, we are doing some internal design reviews of XAML. Right now we have
        assembled <a href="http://www.gotdotnet.com/team/mgudgin/default.aspx">Gudge</a>, <a href="http://www.gotdotnet.com/team/dbox/default.aspx">Don</a>, <a href="http://longhornblogs.com/rrelyea/">Rob</a>,
        and myself.
    </p>
        <p>
        The four of us came up with a long list of our pet peeves and issues (for example,
        using a PI for the Mapping directive makes it impossible to embed XAML inside of a
        SOAP message).
    </p>
        <p>
        Rob is the program manager owner of the XAML spec, and is looking for anyone out there
        that has strong opinions about some of these issues to make comments on his blog... <a href="http://longhornblogs.com/rrelyea/posts/1633.aspx">What
        is missing from or broken about XAML?</a></p>
        <p>
        We gave out bits at the PDC to ellicit feedback from people, Here is an opportunity
        to directly spout off to the owner of the specification of XAML!
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/0f53cbd2-302f-43b8-948a-2a8c9cb0353c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Disecting Avalon</title>
      <guid>http://www.simplegeek.com/permalink.aspx/30990015-ed3d-4e84-808c-0c7201a30476</guid>
      <link>http://www.simplegeek.com/permalink.aspx/30990015-ed3d-4e84-808c-0c7201a30476</link>
      <pubDate>Wed, 03 Dec 2003 01:31:06 GMT</pubDate>
      <description>Interesting view...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Interesting... <a href="http://weblogs.asp.net/dmarsh/posts/40513.aspx">Drew Disects
    Avalon</a>... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/30990015-ed3d-4e84-808c-0c7201a30476</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Joe on Visuals</title>
      <guid>http://www.simplegeek.com/permalink.aspx/a6c415a4-c624-482e-be06-c68e57bb3518</guid>
      <link>http://www.simplegeek.com/permalink.aspx/a6c415a4-c624-482e-be06-c68e57bb3518</link>
      <pubDate>Wed, 03 Dec 2003 01:27:51 GMT</pubDate>
      <description>The details about the visual system in Avalon</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Joe dives into the details on the <a href="http://www.eightypercent.net/Archive/2003/12/02.html#a158">visual
    system in Avalon</a>.</body>
      <comments>http://www.simplegeek.com/commentview.aspx/a6c415a4-c624-482e-be06-c68e57bb3518</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Another Avalon-er in the house...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/d8642085-e455-4f94-9135-6dcfdc56e0fe</guid>
      <link>http://www.simplegeek.com/permalink.aspx/d8642085-e455-4f94-9135-6dcfdc56e0fe</link>
      <pubDate>Wed, 26 Nov 2003 17:49:41 GMT</pubDate>
      <description>Markus helps make us faster...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://longhornblogs.com/mmielke/">Markus</a> has <a href="http://longhornblogs.com/mmielke/posts/1281.aspx">started
    blogging</a>.. Markus is working as a program manager on the Avalon Performance team...
    yes, he has a lot of work ahead of him :)</body>
      <comments>http://www.simplegeek.com/commentview.aspx/d8642085-e455-4f94-9135-6dcfdc56e0fe</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Ah, the details of element composition... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/2f3a5105-d889-414f-8665-3f347b85288a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/2f3a5105-d889-414f-8665-3f347b85288a</link>
      <pubDate>Wed, 26 Nov 2003 08:02:46 GMT</pubDate>
      <description>Nothing is as simple as it seems... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Adam Ulrich <a href="http://blog.simplegeek.com/commentview.aspx/29723093-9ce4-4edd-917e-9800f4a36317">commented</a> on
        my last <a href="http://blog.simplegeek.com/PermaLink.aspx/29723093-9ce4-4edd-917e-9800f4a36317">Avalon
        rearchecture</a> post:
    </p>
        <p>
        "<span class="commentBody"><em>Mustn't controls have some inherent _general_ knowledge
        of their visuals? </em></span></p>
        <p>
          <span class="commentBody">
            <em>My example: a scrollbar must know that it has some logical
        element that relates to visual elements that equate to a thumb, and that it can move
        along logical element that relates to visual elements that define some path.</em>
          </span>"
    </p>
        <p>
        Someone once told me that facts obscure the truth (actually many people have told
        me that)... There are several (small number) of controls that must have deep knowledge
        of their visuals. The slider portion of the scrollbar needs to have knowledge of it's
        visuals, although the scrollbar doesn't. The scrollbar istelf is composed of a repeat
        button (line up), slider (which is the well and thumb), and another repeat button
        (line down). I don't think in the PDC builds it's quite this clean, but this 3 controls
        will be (hopefully! &lt;G&gt;) the way we build the scrollbar later this milestone.
    </p>
        <p>
        Generally an element should have contracts with it's visuals with commands, databinding,
        attached properties, and named styles.
    </p>
        <p>
        Commands are how the repeat button should bind to the LineUp/Down command on the scrollbar.
        Databinding allows you to bind the value of the scrollbar to the value of the slider
        nested within. Attached properties are used to allow the element to locate a child
        within - for example the ListBox looks for the ItemsControl.ContentOwner property
        on a child element, and that element becomes the parent for all the generated content
        from the list items. Named styles would be the way that you could replace sub sections
        of a control, this would typically only be used on more complex controls (like
        a data grid, or something of that ilk).
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/2f3a5105-d889-414f-8665-3f347b85288a</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Avalon's rearchitecture - Flexibility</title>
      <guid>http://www.simplegeek.com/permalink.aspx/29723093-9ce4-4edd-917e-9800f4a36317</guid>
      <link>http://www.simplegeek.com/permalink.aspx/29723093-9ce4-4edd-917e-9800f4a36317</link>
      <pubDate>Fri, 21 Nov 2003 21:58:26 GMT</pubDate>
      <description>Part III of the rearchitecture story... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        "Rich Everywhere" is a phrase I like to use to talk about Avalon. We want to enable
        every control to support any rich content, interaction, and presentation. Part of
        being rich is actually having a system that people can understand, tool, and build
        these great experiences on the platform.
    </p>
        <p>
        In DOTNET the number of customization points brought about a big problem. You could
        customize the look of an element up to a certain point, but then you would have to
        completely change your programming model to use the presenter. Presenters couldn't
        be authored in XAML, and you weren't able to create elements dynamically inside of
        the presenter, so you ended up being limited to using low level drawing calls.
    </p>
        <p>
          <strong>ECM</strong>
        </p>
        <p>
        We had to solve the notion of "rich content". There is this tension between flexibility
        and programmability. For the VB developer, we want to enable something as simple as:
    </p>
        <p>
        Dim b As New Button()<br />
        b.Text = "Hello World"
    </p>
        <p>
        For a web developer we want to enable something as rich as:
    </p>
        <p>
        &lt;Button&gt;<br />
            &lt;GridPanel&gt;&lt;Video ... /&gt;&lt;Text&gt;Hello &lt;Bold&gt;World!&lt;/Bold&gt;&lt;/GridPanel&gt;<br />
        &lt;/Button&gt;
    </p>
        <p>
        The problem was to do both with a single object model. We talked about having two
        buttons - a "simple" and a "rich" button. No. We talked about having multiple properties
        - "Text" and "Elements". No.
    </p>
        <p>
        Then the idea came - borrow some pages from WinForms and ASP.NET, mix in some new
        twists, and viola!
    </p>
        <p>
        ECM (I forget what the abreviation stood for originally...) was the idea to have a
        mechanism to take arbitrary CLR objects and convert them to UIElements. If the CLR
        object happened to be a UIElement, we were done. If it wasn't, then we could create
        a visualization for that data item using TypeConverters, ToString, or a data style.
        Basically that means that button now has a "Content" property, that is of type "System.Object".
        If you pass a string in, we stuff that string into a text element, and if you
        pass a GridPanel in, then we just display it.
    </p>
        <p>
        Controls have 3 flavors - No content (Border, etc.), Singular Content (Button,
        etc.), Multiple Content (ListBox, etc.).
    </p>
        <p>
        You can mix and match; a Menu has a header (Singular Content) and a list of menu items
        (Multiple Content) - so we have something called a "HeaderedItemsControl"... 
    </p>
        <p>
          <strong>Only use elements</strong>
        </p>
        <p>
        When I talked about simplicity, I mentioned that we doubled down on element composition.
        Another side effect of this was to unify the programming model for all customization.
        You could now completely change the look of an element all declaratively in XAML.
    </p>
        <p>
        Once we have this model, we now have a tenet that all controls must not have inherit
        knowledge of their visuals. This allows developers to completely change the look of
        any built in control without having to change the behavior at all.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/29723093-9ce4-4edd-917e-9800f4a36317</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Avalon's rearchitecture - Performance</title>
      <guid>http://www.simplegeek.com/permalink.aspx/359c73aa-4711-4061-b9d9-16300d8d278e</guid>
      <link>http://www.simplegeek.com/permalink.aspx/359c73aa-4711-4061-b9d9-16300d8d278e</link>
      <pubDate>Fri, 21 Nov 2003 21:42:02 GMT</pubDate>
      <description>Part II about our rearchitecture... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Part of the original goals of Avalon was to leverage the power of the GPU. The idea
        of hardware accelerated 2D graphics has been around for a long time, but it hadn't
        really taken off yet (remember, we started Avalon in early 2001 [fixed date]). Today
        it seems pretty obvious that leveraging the GPU for 2D is the right path, but at the
        time that we started there was a lot of concern about the type of hardware that we
        would require. 
    </p>
        <p>
        One hugely controversial decision that we made early on was to write Avalon in managed
        code. From a platform component, the CLR is still immature. It's getting better by
        leaps and bounds. The work to integrate the CLR into Yukon, moving the entire system
        to 64-bit, and the work in .NET 1.1, and Whidbey have made the system amazing. Again,
        when we started .NET was just first released in beta. Also, the development teams
        working on Avalon are used to the C and C++ toolset that they had been working with
        for the past twenty years. The decision to move to managed code was a fun process,
        but that I'll leave for another day. 
    </p>
        <p>
        The DOTNET tree was not measuring up to performance goals. The startup time was slow,
        but more troubling was that the scalability of the system - the number of elements
        that we could create and manipulate was just too small. To acheive our goals around
        richness we would need a system that could scale to tens of thousands of elements,
        and we were only a couple thousand elements displayed in a reasonable performance.
        Layout was slow, working set was huge, it was a bit scary. 
    </p>
        <p>
        Before we began the rearchitecture we spent a bunch of time focusing the entire team
        on performance. We started doing deep analysis and looking at how the system hung
        together. We created two virtual teams to try and drive the performance effort -
        a bottoms up team that was focusing on tuning components and code, and a top down
        team that was looking at the design of the system to see what we could do architecturally
        to make the system faster. When we started the rearchitecture effort we took the data
        from the bottoms up and top down team as baseline data. 
    </p>
        <p>
        We had several simplifications that we hoped would contribute to better performance: 
    </p>
        <ul>
          <li>
            One tree 
        </li>
          <li>
            Simplified property engine 
        </li>
          <li>
            CPS/DPS 
        </li>
        </ul>
        <p>
          <strong>One tree</strong>
        </p>
        <p>
        By unifying the tree, we felt that for UI scenarios we would see a huge performance
        benefit. Specifically you would only have a single node for a element (like a Rectangle)
        where as before you might have up to 3 objects. Also, the connections between the
        elements would be much more simplified, there was no need for back pointers from the
        visual tree to the element tree to managed input, etc. 
    </p>
        <p>
          <strong>Simplified property engine</strong>
        </p>
        <p>
        The original property engine from DOTNET was designed to support a very complex expression
        evaluation system, track dependencies, deal with complex CSS-style rules, etc. Part
        of the rearchitecture was the decision to cut several of these features to make the
        property system much simpler, and therefore (hopefully) faster. 
    </p>
        <p>
          <strong>CPS/DPS</strong>
        </p>
        <p>
        The DOTNET layout engine, using presenters, was a single monolithic system. That system
        handled everything from a single absolute X,Y layout up to a complex paginated table.
        The issue was that for all the simple UI scenarios we were doing a ton of work
        for relatively no value. The solution was to create the "Control Presenter System"
        that would handle basic UI layout, and a more advanced "Document Presenter System"
        that would deal with the rich pagination and typographic layout. 
    </p>
        <p>
        By the time we finished the design for all of this we had actually completely removed
        the concept of presenters from the system, but the name CPS/DPS stuck for the architectural
        design. Funny how those things happen. 
    </p>
        <p>
        As we rolled out the architecture proposal the performance aspects of the proposal
        were probably the most controversial. No prototype can accurately represent how a
        system will behave in the "wild", and our performance team had previously heard promises
        of large changes helping performance. Unfortunately we were never able to get a 100%
        accurate measurement of the perf gains, but we had to make a decision. As with a lot
        of decisions, you never have all the information that you would like to have. 
    </p>
        <p>
        During the implementation and conversion to the new architecture we hit several perf
        snags. We didn't get any huge working set improvements (we are still working on this
        today), however we did achieve our scalability. The system (in our tests, no warrenties
        implied, etc.) scales linearly as you add more elements. The largest I've done is
        a couple hundred thousand elements... it was really slow, but it didn't crash. 
    </p>
        <p>
          <em>Best performance bug: I forget the root cause, but when you ran a specific test
        the working set of the app would hit around 1.2GB (yes, gigabyte!) before the app
        would die.</em>
        </p>
        <p>
        We have made a couple other changes to the system since the big rearchitecture - the
        new styling system is one example - and we continue to try and make the system faster.
        The PDC bits are clearly way below what we want for performance. 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/359c73aa-4711-4061-b9d9-16300d8d278e</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Avalon's rearchitecture - Simplicity</title>
      <guid>http://www.simplegeek.com/permalink.aspx/2e58f16e-d569-4660-b010-f557272580ee</guid>
      <link>http://www.simplegeek.com/permalink.aspx/2e58f16e-d569-4660-b010-f557272580ee</link>
      <pubDate>Fri, 21 Nov 2003 08:05:41 GMT</pubDate>
      <description>More of the nuts and bolts...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        The Avalon rearchitecture that happened earlier this year was motivated by several
        things (in my mind... hmm... another time for a disclaimer - as with anything that
        happens each participant will have a slightly different version of the "truth". As
        time goes their becomes more and more difference between each persons view. So, all
        that follows here is my fuzzy recollection of what happened, and shouldn't be missinterpreted
        to be the only "truth" of what happened...)... 
    </p>
        <ul>
          <li>
            Simplicity</li>
          <li>
            Performance</li>
          <li>
            Flexibility</li>
        </ul>
        <p>
        Before I start, I need to tell you about a few new names - DOTNET and WCP. Our old
        architecture bits lived in a source tree where the root name was "DOTNET". I wasn't
        on the team when this name was choosen, but I'm guessing that it was picked because
        the Avalon team was an early adopter of managed code, and so they named the directory
        after .NET. When we began work on the new architecture we picked a new directory name,
        "WCP". When I refer to WCP and DOTNET design, these are nothing more than the names
        of two directories in our build tree - these aren't product names, no warrenties apply,
        blah blah...
    </p>
        <p>
          <strong>Simplicity</strong>
        </p>
        <p>
        The DOTNET model had some pretty severe problems with complexity of the design. Their
        tended to be 7 ways to do anything, and many of them tended to be massively complex.
        The reason for this was pretty simple - we had 400 people working on the product and
        all of them were trying to build the "best" of whatever they were working on. The
        best example that I have is how to customize the appearance of your control... we
        had templating, presenters, element composition, visuals, etc... I can't remember
        the complete list, but at one point there were actually 7 full featured ways to customize
        this.
    </p>
        <p>
        Probably the most maligned peice of technology in DOTNET was this thing called "Presenters".
        Presenters were a very well thought out, robust, and complete technology. Basically
        it was an abstraction over layout and rendering, which allowed for any control to
        have any display. Presenters allowed for pluggable rendering, pagination, virtualization,
        etc. They allowed for a clean separation between the visual tree and the element tree.
    </p>
        <p>
        Ah, which reminds me - we had a lot of trees at the time. There was the element tree
        which was where your buttons and listboxes lived, and the visual tree which was the
        retained mode managed scene graph, the presenter tree which was a "kinda" tree that
        was made up of the presenters and their relationships  to their child presenters
        (basically an element may or may not have an element. For example, text formatting
        elements like "Bold" didn't have a presenter, they used their parent presenter), and
        we had a composition tree, etc.
    </p>
        <p>
        Presenters where this great thing, however they were very complex to use, and they
        had a fairly different design center and programming model than the rest of the system.
    </p>
        <p>
        Our solution to simplify a lot of this in WCP was to make a couple big bets - Element
        composition and a unified tree. 
    </p>
        <p>
        Where in DOTNET we had a separate tree for elements, visuals, and presenters - in
        WCP we have a single tree of nodes. For various reasons we have multiple "views" on
        the tree - Logical and Visual - they actually share nodes. Some people find this 1.5
        tree system to also be confusing and we are still looking at ways to simplify this.
    </p>
        <p>
        Element composition was the biggest bet by far. We are now using elements for all
        display composition. When you see a button in the PDC build, there are actually 17
        elements inside of that button. Rectangles, Borders, DockPanels, Text, etc. Using
        a single feature for all rendering allowed us to remove some of the duplicate ways
        of customizing the display of the elements. In addition, we settled on a single styling
        system that included the ability to style the "visual tree" of any element.
    </p>
        <p>
          <em>To be continued...</em>
        </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/2e58f16e-d569-4660-b010-f557272580ee</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>What is MSAvalon?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/4f2774d8-58f7-4790-b2e3-84d8415070c5</guid>
      <link>http://www.simplegeek.com/permalink.aspx/4f2774d8-58f7-4790-b2e3-84d8415070c5</link>
      <pubDate>Fri, 21 Nov 2003 00:01:19 GMT</pubDate>
      <description>Why do we have this namespace... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>The <a href="http://blog.simplegeek.com/commentview.aspx/6fa66b36-635f-4775-a61d-14f58fc9da30">early
        votes</a> are in, and it looks like people want to hear about anything besides my
        sump pump...</em>
        </p>
        <p>
        What is the deal with the MSAvalon namespace? To start, this namespace will (obviously)
        change. Generally we are never allowed to ship any product with any cool codename
        or team name in the product, so we picked this name intentionally to make it easy
        to remove later. Most likely MSAvalon will be renamed to "System" - the idea being
        that the classes that constitute "Avalon" will be in the System.Windows namespace.
        If you got one of the PDC namespace posters, you will notice that we actually used
        System.Windows on that poster.
    </p>
        <p>
        Why did we use a namespace that is easy to replace? Because we ran out of time.
    </p>
        <p>
        Depending on who you read and talk to, you may have heard some of the story of the
        Avalon team. I'm not talking about the Avalon umbrella term that we used at the PDC,
        but rather the group of people that work directly on the team inside of Microsoft
        called "Avalon". At the PDC we rolled up a bunch of teams under the term "Avalon"
        as a way of talking about all the great client presentation technology that a lot
        of teams are working on. A large portion of this work is being done directly on the
        Avalon team, however we have determined long ago that 99% of the populate really could
        care less about the organizational structure of Microsoft, so we decided to reuse
        the name. Fun, right?
    </p>
        <p>
        Avalon the team was formed almost 3 years ago. It was formed by merging almost 400
        people from various teams working on client presentation technologies - some people
        from Internet Explorer, some people from User32, GDI32, DirectX, WinForms, etc, etc,
        etc... a lot of people with a wide variety of opinions. As the team gelled and worked
        on the vision of a unified presentation platform for UI, Documents, and Media they
        did a lot of experiments and writing of core fundamental code.
    </p>
        <p>
        About 2 years ago, the Avalon team really started cooking. They had a shared vision
        and were working hard on producing the large body of code to replace User32, GDI,
        etc... They began to get some internal customers (a few) and start to actually look
        at the developer expierence and really think about what people could do with all this
        great technology.
    </p>
        <p>
        About a year ago, we really noticed some fundamental problems in the design of some
        of the components. We made a super hard decision to step back and do a rearchitecture
        of some major portions of the system. We revisited the tree model that we had, the
        way controls fit together, our styling system, binding, and more. The end result was
        a new architecture that was a more holistic view of the entirity of Avalon.
    </p>
        <p>
        Even with the PDC on the horizon, we made a tough call to begin coding on the rearchitecture,
        with the goal being feature complete on the new design for the PDC. A lot of people,
        from a lot of teams, put in a tremendous amount of effort to get this work done in
        time. However, there were still components that were built on the old architecture
        of Avalon, and we couldn't break them with only a few months left before PDC. We decided
        to make the old architecture and new architecture Avalon bits run side by side - and
        hence we needed a namespace for the new bits. MSAvalon was born.
    </p>
        <p>
        Once we get the last of the internal customers that depend on the old architecture
        bits moved over to the new architecture, we will retire the old namespace and eventually
        remove the DLLs from the build. After that, we can do the monster namespace change
        to move to the new namepsace.
    </p>
        <p>
        It was really interesting some of the discussions that we had around this change.
        There were really two camps inside of the team - one said that we should ship the
        old architecture bits as they were more mature and had more features. The other camp
        said that we should push as hard as we can to give the developers at the PDC a preview
        of the design that we were moving forward with. There wasn't a perfect answer - the
        old design would show more of the intent of what we wanted to accomplish, but the
        new design would show more of our developer API.
    </p>
        <p>
        In the end we decided to push forward with the new design - getting feedback from
        developers about our new model was determined to be the top priority. We need to hear
        if the explicit styling mechanism, element composition, data binding, logical tree
        split, etc, are usable and in the right direction.
    </p>
        <p>
        There was amazing effort put forth by so many people to make this happen it was mind
        boggling. Taking a team of 400 people, and an even larger group of internal customers
        and partners, and making a radical design change 8 months before a public release
        was an amazing risk... I really hope you all feel that it was the right decision... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/4f2774d8-58f7-4790-b2e3-84d8415070c5</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>What should I write about?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/6fa66b36-635f-4775-a61d-14f58fc9da30</guid>
      <link>http://www.simplegeek.com/permalink.aspx/6fa66b36-635f-4775-a61d-14f58fc9da30</link>
      <pubDate>Thu, 20 Nov 2003 01:33:11 GMT</pubDate>
      <description>A poll for my few readers... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        I still owe a code sample about using DependencyObject from a previous post (I will
        write that!), however I'm curious what would interest the couple people out there
        that read this... besides my boring opinions about the universe, and my adventures
        with aquatics, what do you want to read about?
    </p>
        <ol>
          <li>
            Design issues that we are tackling for the next release of Windows (Beta 1?)?</li>
          <li>
            History of the PDC bits (how we formed Avalon, etc.)?</li>
          <li>
            How to code with the PDC bits?</li>
          <li>
            Some other topic?</li>
        </ol>
        <p>
        I'm happy to do a combination of all of the above, or skip them all... what do you
        care about... I just don't want to becoming boring... that would just be sad.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/6fa66b36-635f-4775-a61d-14f58fc9da30</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XML and XAML</title>
      <guid>http://www.simplegeek.com/permalink.aspx/b8173969-cb95-4995-a89f-cccbf1fe3138</guid>
      <link>http://www.simplegeek.com/permalink.aspx/b8173969-cb95-4995-a89f-cccbf1fe3138</link>
      <pubDate>Mon, 17 Nov 2003 19:14:36 GMT</pubDate>
      <description>Rob spouts off.. </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Rob gives the scoop on <a href="http://longhornblogs.com/rrelyea/posts/1336.aspx ">why
    XAML is XML</a>... 
</body>
      <comments>http://www.simplegeek.com/commentview.aspx/b8173969-cb95-4995-a89f-cccbf1fe3138</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Yes Sam, it is dynamic... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/9ab86f9a-bec0-46e1-a5c5-7e4a8541150f</guid>
      <link>http://www.simplegeek.com/permalink.aspx/9ab86f9a-bec0-46e1-a5c5-7e4a8541150f</link>
      <pubDate>Wed, 12 Nov 2003 22:04:13 GMT</pubDate>
      <description>Avalon is very very dynamic... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.intertwingly.net/blog/1644.html">
            <em>Sam asks</em>
          </a>
          <em> "the
        ability to modify the rendering and content of the document on the fly?  Isn't
        that lost by a compile to bytecode approach?"...</em>
        </p>
        <p>
        Sorry for the delay in responding, Sam's post has been sitting in my inbox while I
        found a couple minutes to respond... There are lots of comments on Sam's post directly
        that respond to this, but I thought a more detailed answer might prove interesting
        for everyone... 
    </p>
        <p>
        First, as people pointed out there is a difference between XAML (the programming model)
        and Avalon (the presentation system). 
    </p>
        <p>
        Using XAML, you can invoke the parser at anytime: 
    </p>
        <p class="code">
        DockPanel d  = (DockPanel)<a href="http://longhorn.msdn.microsoft.com/?//longhorn.msdn.microsoft.com/lhsdk/ref/ns/msavalon.windows.serialization/c/parser/m/loadxml.aspx">Parser.LoadXML</a>("&lt;DockPanel
        xmlns=\"http://schemas.microsoft.com/2003/xaml\"&gt;&lt;Button DockPanel.Dock=\"Fill\"&gt;Hello&lt;/Button&gt;&lt;/DockPanel&gt;"); 
    </p>
        <p>
          <em>(Appologies if the code doesn't compile, i'm not sitting in front of a Longhorn
        machine right now)</em>
        </p>
        <p>
        However - that XAML can't contain any def:Code fragments, because at this time we
        don't do dynamic compilation on the client during parsing. 
    </p>
        <p>
        In addition to dynamic execution of the compiler, you can also programmatically create
        elements: 
    </p>
        <p class="code">
        DockPanel panel = new DockPanel();<br />
        Button b = new Button();<br />
        panel.SetDock(b, Dock.Fill);<br />
        b.Content = "Hello";<br />
        panel.Children.Add(b); 
    </p>
        <p>
        Of course, you can also set events: 
    </p>
        <p class="code">
        b.Click += new ClickEventHandler(MyHandler); 
    </p>
        <p>
        In fact, the parser is really just doing a bunch of "new DockPanel" and "new Button"
        calls when it parses the XAML. XAML is just another view on code... You can do everything
        in code that you can do in XAML - and you can do it dynamically with a strongly typed
        simple programming model. 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/9ab86f9a-bec0-46e1-a5c5-7e4a8541150f</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>I see XAML...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/7660047e-3b28-4a39-b441-333f26c7a50c</guid>
      <link>http://www.simplegeek.com/permalink.aspx/7660047e-3b28-4a39-b441-333f26c7a50c</link>
      <pubDate>Fri, 07 Nov 2003 06:49:10 GMT</pubDate>
      <description>Don discovered the secret...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
    Don has a secret... He knows how to make <a href="http://www.gotdotnet.com/team/dbox/default.aspx?key=2003-11-07T07:41:40Z">XAML
    work for any object</a>... I guess it's not a secret anymore.</body>
      <comments>http://www.simplegeek.com/commentview.aspx/7660047e-3b28-4a39-b441-333f26c7a50c</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Rob "Mr. XAML" Relyea has a blog</title>
      <guid>http://www.simplegeek.com/permalink.aspx/706f4703-aec2-43be-9c5f-112ccf3a18c1</guid>
      <link>http://www.simplegeek.com/permalink.aspx/706f4703-aec2-43be-9c5f-112ccf3a18c1</link>
      <pubDate>Thu, 06 Nov 2003 23:56:35 GMT</pubDate>
      <description>And he isn't afraid to use it! :)</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Rob is a PM on the Avalon team. He owns the XAML spec. He also is a member of the
        Avalon architecture team (with me and a few other folks). 
    </p>
        <p>
        Rob has a <a href="http://longhornblogs.com/rrelyea">blog</a>. 
    </p>
        <p>
        See rob blog. 
    </p>
        <p>
        Blog Rob, Blog.
    </p>
        <p>
        Rob's first task, to do some postings that cover some of the <a href="http://longhornblogs.com/rrelyea/posts/1190.aspx">Avalon
        overview</a> presentations that he has done in the past.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/706f4703-aec2-43be-9c5f-112ccf3a18c1</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Hillel-blog</title>
      <guid>http://www.simplegeek.com/permalink.aspx/fa72710a-52ce-4be5-92d9-5c0dae4f1a79</guid>
      <link>http://www.simplegeek.com/permalink.aspx/fa72710a-52ce-4be5-92d9-5c0dae4f1a79</link>
      <pubDate>Tue, 04 Nov 2003 22:01:51 GMT</pubDate>
      <description>Yet another 'softie on the blog...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://themicrosoftexperience.com/default.htm">Hillel Cooperman</a>, of Aero
    fame, now has a blog... with <a href="http://royo.is-a-geek.com/siteFeeder/GetFeed.aspx?FeedId=43">RSS</a> (now
    &lt;G&gt;)!</body>
      <comments>http://www.simplegeek.com/commentview.aspx/fa72710a-52ce-4be5-92d9-5c0dae4f1a79</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Why doesn't UIElement derive from XmlElement?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/a523b450-ec01-477f-a350-4a72f228757a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/a523b450-ec01-477f-a350-4a72f228757a</link>
      <pubDate>Mon, 03 Nov 2003 18:11:02 GMT</pubDate>
      <description>Erik asks a good question, i'll try to answer...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://erik.eae.net/">
            <em>Erik Arvidsson</em>
          </a>
          <em> asked in a </em>
          <a href="http://blog.simplegeek.com/commentview.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a">
            <em>comment</em>
          </a>
          <em>:
        "What was the reasoning for not making the UI elements extend XmlElement? Since XAML
        is supposed to be an XML language it would seem obvious that one should be able to
        use the W3C DOM."</em>
        </p>
        <p>
        Yet another often discussed issue internally. To start, lets consider the following
        markup: 
    </p>
        <p class="code">
        &lt;Window ...&gt;<br />
            &lt;Window.Resources&gt;<br />
                &lt;SolidColorBrush def:Name="MyBackground"
        Color="Red" /&gt;<br />
            &lt;/Window.Resources&gt;<br />
            &lt;Button Background="{MyBackground}"&gt;<br />
                &lt;myobj:Customer Name="Chris Anderson"
        /&gt;<br />
            &lt;/Button&gt;<br />
        &lt;/Window&gt; 
    </p>
        <p>
        In the fabulous XML DOM I would get, of course, a bunch of nodes. The root node would
        be the "Window" tag, and would have children "Window.Resources" and "Button". Of course,
        we have already gone astray. 
    </p>
        <p>
        In XAML we recognized that properties (which can be attributes) often contain complex
        values (for example, the Resources property on the Window in the above example is
        actually a type of map/dictionary). However, sometimes they can contain simple values
        (like Color="Red" on the brush). Thus, you can end up with any attribute in XAML also
        being a compound property, which makes it a nested tag. Thus, these two are syntatically
        equivalent: 
    </p>
        <p class="code">
        &lt;Button Background="Red" /&gt;<br />
        &lt;Button&gt;&lt;Button.Background&gt;Red&lt;/Button.Background&gt;&lt;/Button&gt; 
    </p>
        <p>
        Which makes it problematic to use the XML DOM out of the box. In addition, lets flashback
        to that first example above - the SolidColorBrush is not actually a UIElement. While
        the Button and Window are both UIElements, the SolidColorBrush is just a CLR object.
        It would not appear in your element tree, and asking the Window or Button for it's
        visual children would never produce the brush. Second problem. 
    </p>
        <p>
        Finally, check out the "myobj:Customer", this is an example of a random business object
        (maybe a WinFS thing? maybe just something I invented) that I wanted to create in
        the markup. Since XAML is programming model for targeting arbitrary CLR objects, there
        is no requirement about the OM that these objects must implement to be serialized
        into the XAML (well, there are a few, but they are simple things). 
    </p>
        <p>
        Given these three things, we felt it would actually be confusing for developers if
        we implemented the XmlElement OM. The XmlElement OM is about traversing an XML document
        - the Avalon element tree can be persisted into an XML document, but it can also be
        generated from C#, your custom markup, or any other format that you dream up. In addition,
        using .NET 1.x you can serialize any .NET object into XML also - so that would argue
        that everything should derive from XmlElement (yes, I know that some people would
        applaud this! &lt;G&gt;). 
    </p>
        <p>
        Remember - XAML is just one of the programming models for targeting the Avlaon presentation
        classes. 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/a523b450-ec01-477f-a350-4a72f228757a</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Dynamic UI</title>
      <guid>http://www.simplegeek.com/permalink.aspx/7283be10-2652-466c-a7d7-34cb67afbd4f</guid>
      <link>http://www.simplegeek.com/permalink.aspx/7283be10-2652-466c-a7d7-34cb67afbd4f</link>
      <pubDate>Sun, 02 Nov 2003 22:00:47 GMT</pubDate>
      <description>In any language...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>There seems to be a lot of discussion floating around in my comments about "Dynamic
        XAML", which confuses me (I'm easily confused). No one thinks of "Dynamic C#" or "Dynamic
        VB", they are languages - it is the application that you create that has dynamic behavior...</em>
        </p>
        <p>
        Dynamic user interface can be easily created in Longhorn using Avalon in several ways:
    </p>
        <ol>
          <li>
            Dynamic code</li>
          <li>
            Conditional/Bound markup</li>
          <li>
            Parsed-at-runtime markup</li>
          <li>
            Projection based markup</li>
        </ol>
        <h3>Projection based markup</h3>
        <p>
        I start with projection, because I think it is what most people think of when they
        asked the question about "dynamic XAML". In the web world today you create projection
        based user interface. You do work on the server to determine what the static view
        the client should see (maybe with some interactivity in the form of jscript, etc.),
        and then you project HTML across the wire and let the (basically) dumb client render
        that logic.
    </p>
        <p>
        In the web today there is this uneasy tension with DHTML (W3C DOM or IE DOM) and
        ASP.NET/PHP/JSP... Here you have a sever and client side programming model, both trying
        to produce dynamic results. You end up with this bizaree spaghetti code that spans
        between the tiers. You might do data filtering on the server, but allow for sorting
        to occur on the client to avoid round trips.
    </p>
        <p>
        The question then is raise, with this new Windows markup "XAML", can you accomplish
        projection based UI? The simple answer - yes. We support parsing of markup on the
        fly. 
    </p>
        <p>
        However for interactivity the programming model for Avalon is .NET classes, which
        means you need to somehow get IL generated, or have an interpretted language. Today
        the JScript parser is the closest thing we have to an interpretted .NET language,
        but I know there are other interpretted languages out there.
    </p>
        <p>
        Why have we not focused on interpretted or projection based UI? To put it simply -
        it doesn't scale. Smart client applications aren't really possible in projection based
        UI. If you look at any even moderately interactive application they have moved the
        processing logic to the client to leverage the power of the PC - Flash, Java, Anark,
        all do the logic on the client. Yes, there are some places that do dynamic Flash generation,
        but that seems to be a limitation that products like Royale and Central will solve.
    </p>
        <h3>Parsed-at-runtime markup</h3>
        <p>
        If projection based markup is only supported limitedly, then what about parsing at
        runtime? This is the old DHTML model of doing things like "document.Write" and "someId.InnerHtml='...'"
        as a programming model.
    </p>
        <p>
        Avalon has a simple object model for our parser that will allow this type of programming.
        You can concat a string together, pass it to the parser, and get back a fully realized
        .NET object, viola!
    </p>
        <p>
        Of course, parsing and string generation has it's problems - lack of type checking
        at compile time, performance, debuggability, etc. This model, like projection based
        markup, is supported - just not encouraged.
    </p>
        <h3>Conditional/Bound markup</h3>
        <p>
        Hopefully, eventually, I will actually hit one of these mechanisms for dynamic UI
        that we think is great. Well, wait no longer!
    </p>
        <p>
        Using databinding, repeating, styling, triggers, frames, etc, for creating truly dynamic
        UI is the Avalon recommended way. People write "dynamic" UI today using VB.NET and
        WinForms that gets data from a database and presents it in a great format using DataGrids,
        etc. In Avalon we are evolving this and adding rich typography, template based repeating,
        and a new model for triggers and styling.
    </p>
        <p>
        The nuts and bolts of this? Say that I want to create a news browser, I can create
        styles for the news objects (note, these are data objects, not UIElements):
    </p>
        <p class="code">
        &lt;!-- Psuedo-code, I don't have a longhorn box handy right now --&gt;<br />
        &lt;Style def:Name="*typeof(NewsReport)"&gt;<br />
            &lt;DataElement /&gt; &lt;!-- I forget the exact name of this element...
        ? --&gt;<br />
            &lt;Style.VisualTree&gt;<br />
                &lt;DockPanel&gt;<br />
                    &lt;SimpleText
        DockPanel.Dock="Top" Text="*Bind(Path=Title)"&gt;<br />
                    &lt;SimpleText
        DockPanel.Dock="Top" Text="*Bind(Path=ByLine)"&gt;<br />
                    &lt;TextBox DockPanel.Dock="Fill"
        Content="*Bind(Path=Body)" /&gt;<br />
                &lt;/DockPanel&gt;<br />
            &lt;/Style.VisualTree&gt;<br />
        &lt;/Style&gt;
    </p>
        <p>
        Now, I could have another format for some other type of story:
    </p>
        <p class="code">
        &lt;!-- Psuedo-code, I don't have a longhorn box handy right now --&gt;<br />
        &lt;Style def:Name="*typeof(ForSaleAdd)"&gt;<br />
            &lt;DataElement /&gt; &lt;!-- I forget the exact name of this element...
        ? --&gt;<br />
            &lt;Style.VisualTree&gt;<br />
                &lt;DockPanel&gt;<br />
                    &lt;SimpleText
        DockPanel.Dock="Top" Text="*Bind(Path=Title)"&gt;<br />
                    &lt;TextBox DockPanel.Dock="Fill"
        Content="*Bind(Path=Body)" /&gt;<br />
                &lt;/DockPanel&gt;<br />
            &lt;/Style.VisualTree&gt;<br />
        &lt;/Style&gt;
    </p>
        <p>
        Here I could then have a listbox that contains an arbitrary list of NewsReports and
        ForSaleAdds, and each would be rendered according to the style - thus a WebService
        (or, heaven forbid!, a database) could return the content. These "data styles" can
        be associated with the class that defines the data structure also.
    </p>
        <p>
          <em>
            <strong>Remember</strong> The ListBox is really a generic repeating control, it
        isn't the same as the old scrollbar and horizontal list control. The ListBox in Avalon
        is more of a peer of the "DataList" in ASP.NET.</em>
        </p>
        <h3>Dynamic Code</h3>
        <p>
        Finally, if dynamic markup doesn't solve this, you can go to the brute force traditional
        model for dynamic UI - write code. One of the goals with Avalon was to have a unified
        model that provided both a simple markup and a simple code based programming model.
        Thus, if you want to dynamically generate user interface elements you can simply write
        code like:
    </p>
        <p class="code">
        void ButtonClicked(object sender, ClickEventArgs e)<br />
        {<br />
            someElement.Controls.Add(new Button());<br />
        }
    </p>
        <p>
        Which provides you with unlimited flexibility.
    </p>
        <h3>Summary</h3>
        <p>
        My not-to-hidden agenda here is simple - <strong>dynamic applications should
        be dynamic on the client</strong>. The server should send data - either through web
        services, database access, or any other wire protocol - and the client should consume
        that data and generate UI. The model of a server trying to generate the correct display
        for a client is just broken. 
    </p>
        <p>
        My computer knows what my settings are, I don't need to server to guess them. The
        application on the client knows my screen resolution, DPI, color depth. It knows if
        I have a scanner, mouse, keyboard, tablet, printer, etc. The application on the client
        has full access to a powerful CPU, GPU, and hard disk that are dedicated to <strong>*me*</strong>.
    </p>
        <p>
        We are past the world of generating static snapshots of display and blasting them
        down to a client. Most desktop computers you buy today have 2+Ghz CPU, &gt;256MB of
        RAM, and a massive hard disk. Use them! Make your application be so engaging and productive
        for your customers that they want to buy it.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/7283be10-2652-466c-a7d7-34cb67afbd4f</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XAML and the web</title>
      <guid>http://www.simplegeek.com/permalink.aspx/0fe9b07e-f6ad-4eb6-af1f-ea85b3f0a72f</guid>
      <link>http://www.simplegeek.com/permalink.aspx/0fe9b07e-f6ad-4eb6-af1f-ea85b3f0a72f</link>
      <pubDate>Sun, 02 Nov 2003 21:19:20 GMT</pubDate>
      <description>I'm a bit confused...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        I'm a bit confused by the concern that Microsoft is somehow trying to threaten or
        take over the web with the introduction of a markup language to program Windows applications.
        XAML is a new programming model for the next release of Windows, code named "Longhorn".
        That's it.
    </p>
        <p>
          <a href="http://www.clawbox.com/blog.2003.11.1.1.xpath.cb">Christopher Lord</a> put
        it nicely: "<em>One thing seems fairly clear: XAML will not threaten the web much,
        since the platform will only be on longhorn.</em>"
    </p>
        <p>
        My goal is to provide the simplest and most productive platform for developers to
        build smart client applications on.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/0fe9b07e-f6ad-4eb6-af1f-ea85b3f0a72f</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>What I want LonghornBlogs to be...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/e9dd76d1-5e74-48be-a873-dfe260eafdba</guid>
      <link>http://www.simplegeek.com/permalink.aspx/e9dd76d1-5e74-48be-a873-dfe260eafdba</link>
      <pubDate>Sun, 02 Nov 2003 09:26:45 GMT</pubDate>
      <description>an aggregator...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        I've been getting hits from <a href="http://longhornblogs.com/">LonghornBlogs</a> (which
        I like &lt;G&gt;), but I really wish my content just appeared there. I think <a href="http://longhornblogs.com/">LonghornBlogs</a> should
        support an aggregation model (like <a href="http://pdcbloggers.net/">PDCBloggers</a>)... 
    </p>
        <p>
        Here are my links... <a href="http://longhornblogs.com/robert/">Robert</a>, can you
        make this happen? :-)
    </p>
        <p>
        HTML: <a href="http://blog.simplegeek.com/categoryview.aspx/Longhorn">http://blog.simplegeek.com/categoryview.aspx/Longhorn</a><br />
        RSS: <a href="http://blog.simplegeek.com/BlogXBrowsing.asmx/GetRssCategory?categoryName=Longhorn">http://blog.simplegeek.com/BlogXBrowsing.asmx/GetRssCategory?categoryName=Longhorn</a></p>
        <p>
        In the mean time, thanks to <a href="http://longhornblogs.com/abudja/">Andrej</a> who
        keeps linking to me!
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/e9dd76d1-5e74-48be-a873-dfe260eafdba</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Another view on XUL</title>
      <guid>http://www.simplegeek.com/permalink.aspx/ef19c2f1-5002-4ecd-9a8d-ca04b80ba9e6</guid>
      <link>http://www.simplegeek.com/permalink.aspx/ef19c2f1-5002-4ecd-9a8d-ca04b80ba9e6</link>
      <pubDate>Sun, 02 Nov 2003 08:55:59 GMT</pubDate>
      <description>From Neil...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.xulplanet.com/ndeakin/article/215/">Neil says</a>:
    </p>
        <p>
        "<em>People are looking for something familiar to compare XAML to, usually comparing
        it to XUL, since they are both XML languages for constructing user interfaces. They
        do have very different purposes though. XUL was primarily developed for constructing
        Mozilla's UI, and for constructing web oriented applications. It wasn't designed so
        one could write a better alternative to Microsoft Excel or Adobe PhotoShop. Thus,
        XUL builds on existing web technologies such as CSS and JavaScript. Web developers
        are familiar with these so the transition is much simpler and smoother. XAML, on the
        other hand, is a transition only for .NET developers since it contains things from
        there but contains almost nothing from the Web. The gap is much too large for web
        developers, which may mean that it may have trouble getting any usage by that group.</em>"
    </p>
        <p>
        I really like the statement "It wasn't designed so one could write a better alternative
        to Microsoft Excel or Adobe Photoshop". Longhorn is a platform for all applications,
        and so the pillars - Avalon, Indigo, and WinFS - must support that large of applications
        being built on top of it. When we designed XAML we wanted to ensure that any scale
        of application could leverage the power of the platform with a simple declarative
        markup... 
    </p>
        <p>
        I also agree with Neil that "The gap is much too large for web developers, which
        may mean that it may have trouble getting any usage by that group"... this is something
        we are constantly concerned with. We need a platform that scales from VB to C++, from
        Web to Win32, from applications to documents... whenever you try to address such breadth
        it is always a concern that you will miss people. We are really trying to make the
        platform accessible to web developers, we hope to get feedback on how to do that (without
        making it impossible to also get the Win32/C++ devs also &lt;G&gt;)... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/ef19c2f1-5002-4ecd-9a8d-ca04b80ba9e6</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>More on Avalon Styling... and CSS... </title>
      <guid>http://www.simplegeek.com/permalink.aspx/b7e02709-0112-4977-9b73-1aa9d471a570</guid>
      <link>http://www.simplegeek.com/permalink.aspx/b7e02709-0112-4977-9b73-1aa9d471a570</link>
      <pubDate>Sun, 02 Nov 2003 08:48:35 GMT</pubDate>
      <description>Yes, we tried it... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>Matt (no link) comments on my <a href="http://blog.simplegeek.com/PermaLink.aspx/206ac3de-c661-4bf3-8a0f-a9601fa6a8ee">styling
        post</a> "Why not use CSS, instead of re-inventing it?"...</em>
        </p>
        <p>
        Avalon originally started with a very CSS-like styling mechanism. I say "CSS-like"
        because we tried to implement the syntax and rules of CSS, but not the property set.
        Because we made the decision to base our object model on .NET conventions, the property
        set for our styles needed to be the same. We didn't want "font-family" in the style,
        and "FontFamily" in the programing model and markup. It looked something like: 
    </p>
        <p class="code">
        &lt;Window ...&gt;<br />
            &lt;Window.Style&gt;<br />
                Button { Background="Red"; }<br />
            &lt;/Window.Style&gt;<br />
        &lt;/Window&gt; 
    </p>
        <p>
        We got a lot of feedback from internal customers. First, there was the complaint that
        this syntax wasn't XML. Secondly, there was the complaint that the CSS mechanism for
        dealing with namespaces was pretty nasty (using pipes). In CSS today most people don't
        use namespaces, but because of attached properties in Avalon (DockPanel.Dock for example)
        we would be using these a lot. Third was the lack of support for complex elements.
        Consider defining a linear gradient in XAML: 
    </p>
        <p class="code">
        &lt;LinearGradientBrush&gt;<br />
            &lt;LinearGradientBrush.GradientStops&gt;<br />
                &lt;GradientStop Offset="0" Color="Red"
        /&gt;<br />
                &lt;GradientStop Offset=".2" Color="Blue"
        /&gt;<br />
                &lt;GradientStop Offset="1" Color="Transparent"
        /&gt;<br />
            &lt;/LinearGradientBrush.GradientStops&gt;<br />
        &lt;/LinearGradientBrush&gt; 
    </p>
        <p>
        That doesn't quite work in the CSS syntax. We where then faced with creating a syntax
        that wasn't XML, CSS, or anything else people had used - and didn't actually solve
        all the problems that we needed. 
    </p>
        <p>
        In addition, the CSS model of "rule based" styles (that is, you have a prescedence
        of rules applied based upon the specificity of them) was a performance nightmare.
        We knew that we wanted scoped styles, default styles, and massive element composition
        (50K elements as a goal). Very recently (earlier this year) we did a rearchitecture
        and part of that was switching from the CSS-like rule based style engine to the simpler
        explicit XML based style system. 
    </p>
        <p>
        Our goals for the new model where: 
    </p>
        <ul>
          <li>
            Better performance 
        </li>
          <li>
            Easier to tool 
        </li>
          <li>
            Support for complex object definitions 
        </li>
          <li>
            Unified syntax (no special parser for style) 
        </li>
        </ul>
        <p>
        In addition, there were several features that we could accomplish with our CSS-like
        approach - namely the notion of "BasedOn" styles. This is a lot like Microsoft Word's
        model where you can have one style inherit from another style explicitly. In CSS you
        can kinda make this happen by having two rules have the same sets of rules, but it
        isn't intuitive and it isn't really possible to provide a good tool experience. 
    </p>
        <p>
        Unfortunately we didn't fully succeed on the unified parser for style and "regular"
        XAML. From the developer perspective the syntax is the same, but internally we have
        to create FrameworkElementFactories isntead of inline elements, because the style
        can be applied multiple times we must provide a model for cloning the trees of elements
        that are defined within the style. 
    </p>
        <p>
        Which leads us to the other features - VisualTree and VisualTriggers. In Avalon the
        Style object (which is a CLR object) has several properties, of which VisualTree and
        VisualTrigger are the two most interesting for this discussion. While CSS has a huge
        amount of overlap with the property sets that occur in a style, there isn't a part
        of CSS that works for defining the visual triggers (property sets to occur when a
        property value or event occurs) and visual tree (the template for the display of that
        element). Of course, CSS attribute selectors can accomplish some of the work of visual
        triggers, but they don't support the event based edge triggers that we are planning
        in the future. 
    </p>
        <p>
        Our goal with XAML (and Avalon) was to provide a simple unified programming model
        for UI, Documents, and Media. This includes timelines, animation, video, controls,
        rich text, etc. We felt a unified approach was the only way to produce a simple understandable
        object model and markup. 
    </p>
        <p>
        Now, for the big pitch... 
    </p>
        <p>
          <strong>This is a developer preview</strong>. We want your feedback, we are listening
        to your feedback. The pushback on XUL, CSS, etc, is being listened to. I can't say
        that we will implement every suggestion that is given, but the entire purpose of this
        early preview of our technology is to get feedback from the development community.
        Tell me how to avoid having two languages - CSS for style and XAML for UI, tell me
        how to make CSS easier to tool, tell me how to make it perform and scale to tens of
        thousands of elements with nested style sheets... We are listening. 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/b7e02709-0112-4977-9b73-1aa9d471a570</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>XUL apparently is the topic of the day...</title>
      <guid>http://www.simplegeek.com/permalink.aspx/800ad347-1812-40e4-8277-fa8fed8a74df</guid>
      <link>http://www.simplegeek.com/permalink.aspx/800ad347-1812-40e4-8277-fa8fed8a74df</link>
      <pubDate>Sun, 02 Nov 2003 08:22:34 GMT</pubDate>
      <description>JohnMont talks more... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.gotdotnet.com/johnmont/">John Montgomery</a> has more fun discussion
        on XUL... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/800ad347-1812-40e4-8277-fa8fed8a74df</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Response in some XUL newsgroups</title>
      <guid>http://www.simplegeek.com/permalink.aspx/4d5589d1-6d6d-43ce-ba44-4c8e9ace0991</guid>
      <link>http://www.simplegeek.com/permalink.aspx/4d5589d1-6d6d-43ce-ba44-4c8e9ace0991</link>
      <pubDate>Sat, 01 Nov 2003 23:12:12 GMT</pubDate>
      <description>Not everyone is happy... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        Obviously not everyone likes what we are doing with XAML... <a href="http://article.gmane.org/gmane.comp.lang.xul.announce/137">Gerald
        Bauer</a> says "<em>Evidently working together with others to build a rich internet
        for everyone wasn't on the agenda.</em>" 
    </p>
        <p>
        And he also posted a <a href="http://article.gmane.org/gmane.comp.lang.xul.announce/134">mini-play</a>: 
    </p>
        <p>
        "<em>Act I: Ellen and Ian discuss Microsoft's Longhorn<br />
        Markup Language (XAML):<br /><br />
        Ellen:  look at that xaml page. it's just ridiculous<br />
        Ian: you mean how much it's like XUL?<br />
        Ellen: yeah<br />
                except that they use C# instead of js<br />
                so if you want interactivity, it has to
        be<br />
        compiled<br />
        Ian: right. 
        <br />
        jeez. wow.<br />
        could that be a bigger rip-off?<br />
        Ellen: it's stunning</em>" 
    </p>
        <p>
        Obviously I need to look at XUL more - frankly I never have seen the XUL syntax or
        used it. I found the spec for <a href="http://www.mozilla.org/projects/xul/xul.html">XUL
        1.0</a> over at <a href="http://www.mozilla.org">Mozilla</a> and saw some of
        the markup there... 
    </p>
        <p>
        How do I create a new custom binary behavior using XUL? I understand that in IE I
        am able to implement IElementBehavior and then I can create a new custom element,
        but I'm wondering how this works in XUL? 
    </p>
        <p>
        XAML is a simple langauge that binds to CLR objects - there is no set of "intrinsic"
        objects in XAML, everything is based on CLR metadata for types. 
    </p>
        <p>
        Anyway, obviously everyone will have their different views, should be a fun couple
        years while we all try to make progress on this stuff... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/4d5589d1-6d6d-43ce-ba44-4c8e9ace0991</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Of styles and styling</title>
      <guid>http://www.simplegeek.com/permalink.aspx/206ac3de-c661-4bf3-8a0f-a9601fa6a8ee</guid>
      <link>http://www.simplegeek.com/permalink.aspx/206ac3de-c661-4bf3-8a0f-a9601fa6a8ee</link>
      <pubDate>Sat, 01 Nov 2003 15:06:14 GMT</pubDate>
      <description>More feedback from the "brief history"</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>A </em>
          <a href="http://blog.simplegeek.com/commentview.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a">
            <em>great
        comment</em>
          </a>
          <em> from </em>
          <a href="http://weblogs.asp.net/yreynhout">
            <em>Yves</em>
          </a>
          <em> says
        "Have you not learned anything from CSS, HTML and the future direction of not using
        inline styles, but using CSS for look and feel(color, font, position ...) outside
        of the HTML document (or at least in the head)?"...</em>
        </p>
        <p>
        Avalon has a solid notion of styles. All appearance of an element can be determined
        from a style. Avalon styles are hierarchical - that is they can be defined at any
        scope an impacts from that location down in the tree. Avalon styles are not rule based
        (like CSS) but rather used a "named style" mechanism. Avalon styles support the definition
        of property and event based transformations (although I believe the event triggers
        aren't working in the PDC bits). First, lets look at a basic style:
    </p>
        <p class="code">
        &lt;Window ...&gt;<br />
            &lt;Window.Resources&gt;<br />
                &lt;Style def:Name="MyStyle"&gt;&lt;Button
        Background="Red" /&gt;&lt;/Style&gt;<br />
            &lt;/Window.Resources&gt;<br />
            &lt;Button&gt;Hello&lt;/Button&gt;<br />
        &lt;/Window&gt;
    </p>
        <p>
        In this example the button *<strong>would not</strong>* be colored red. The style
        has a name, and therefore you would need to specify on the button:
    </p>
        <p class="code">
        &lt;Button Style="{MyStyle}"&gt;Hello&lt;/Button&gt;
    </p>
        <p>
        The curly brace syntax means that the style is being set from a resource reference.
        Resources can be defined and overriden anywhere in the tree. If you have browsed the
        SDK documentation for Longhorn you have probably seen styles that look like this:
    </p>
        <p class="code">
                &lt;Style&gt;&lt;Button Background="Red"
        /&gt;&lt;/Style&gt;
    </p>
        <p>
        This is what we call a "default" or "implicit" style. This requires some explanation.
        You see every element has a default value for every property. The default value for
        the "Style" property is the type of that element... OK, more explanation needed. The
        name of a resource can be any object, not just a string. Thus, you can actually make
        a resource have the name of "*Int(5)" which would be the integer value of 5 (don't
        try this in the PDC build, doesn't work &lt;G&gt;). However, one thing you can do
        is use a type reference:
    </p>
        <p class="code">
                &lt;Style def:Name="*typeof(Button)"&gt;&lt;Button
        Background="Red" /&gt;&lt;/Style&gt;
    </p>
        <p>
        Ahh! So, we can use the type of an element to be the key for that style in the resource
        collection.
    </p>
        <p>
        When designing the styling system we had a lot of discussion about how people would
        discover the default value of the style. We could have used a naming convention like
        "SysButton" or something else, but in the end the simplicity of using the type object
        from the CLR was the perfect fit. The final piece of this puzzle is that when you
        omit the name of style, we assume that you meant to use the type of the element that
        the style is for. Bingo.
    </p>
        <p>
        OK, now that we have named the style, and have a way for elements to hook up to the
        style, how does a style work?
    </p>
        <p>
        The basis of style is an "as use" syntax, that is - the content of the style should
        be just like the element when you would use it. This made it easy for cut and paste
        type operations, but also made a single syntax for people to learn. In addition, there
        are style specific properties you can set - like "VisualTree" and "VisualTriggers".
    </p>
        <p>
        Before I dive into the fun of tree &amp; triggers - one more comment about the lookup
        rules for resources (and therefore styles)... You can define resources at any level
        of the hierarchy. Including the application object. Thus, if you want to define the
        look for all buttons in your application you can simply say:
    </p>
        <p class="code">
        &lt;Application ...&gt;<br />
            &lt;Application.Resources&gt;<br />
                &lt;Style def:Name="MyStyle"&gt;&lt;Button
        Background="Red" /&gt;&lt;/Style&gt;<br />
            &lt;/Application.Resources&gt;<br />
        &lt;/Application&gt;
    </p>
        <p>
        Although this is a really long winded response to Yves, I hope he can see that we
        haven't forgotten styling.
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/206ac3de-c661-4bf3-8a0f-a9601fa6a8ee</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>Is XAML just data?</title>
      <guid>http://www.simplegeek.com/permalink.aspx/00d0674e-eed7-4658-83a8-7decde2b637a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/00d0674e-eed7-4658-83a8-7decde2b637a</link>
      <pubDate>Sat, 01 Nov 2003 10:49:27 GMT</pubDate>
      <description>Always a fun discussion... </description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>In comments on my </em>
          <a href="http://blog.simplegeek.com/PermaLink.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a">
            <em>brief
        history of XAML</em>
          </a>
          <em> post there seems to be a lot of "Why don't you make XAML
        be pure data?"... </em>
        </p>
        <h3>Purity 
    </h3>
        <p>
        I used to work on the .NET Framework team, including Windows Forms and ASP.NET. There
        was never a debate about ASP.NET supporting inline script, it was required because
        they wanted to preserve the experience for ASP developers. When it came to imlementing
        the VS designer we all came to a reluctant decision that the "pure" way of writing
        ASP.NET application should be with a separate code behind file. There werre some technical
        reasons (we didn't have intellisense in the inline case) and there were some architectural
        purity arguments (shouldn't mix code and UI definition). So we shipped. 
    </p>
        <p>
        The feedback from the community has been rather vocal about this decision. There are
        so many times when dropping little snippets of code into the UI definition is amazingly
        fast and easy. In Web Matrix they made the inline code be the default. 
    </p>
        <p>
        When we started on XAML we had this same debate, and we basically decided early to
        side with our past experience with ASP.NET. While the architecturally pure view was
        to complete separate code and UI definition, the reality was that developers like
        to do things that aren't architecturally pure ;-) 
    </p>
        <h3>IDs &amp; Events 
    </h3>
        <p>
        In addition to the purity argument, there is the ID and event problem. When defining
        some UI in XAML you often do something like this: 
    </p>
        <p class="code">
        &lt;Window ...&gt;<br />
            &lt;TextBox ID="text1" /&gt;&lt;Button Click="DoSomething"&gt;Click&lt;/Button&gt;<br />
        &lt;/Window&gt; 
    </p>
        <p>
        Then, in the code behind file you want to be able to simply say: 
    </p>
        <p class="code">
        Sub DoSomething(sender As Object, e as ClickEventArgs)<br />
            text1.Text = "Something"<br />
        End Sub 
    </p>
        <p>
        To accomplish this, you need to have a shared namespace (from the conceptual standpoint,
        not a shared CLR or XML namespace) between the code and the markup. Given that in
        this case the markup is defining a field in the class that will be generated you quickly
        want to be able to also specify the modifiers: 
    </p>
        <p class="code">
        &lt;!-- We don't support this yet!! --&gt;<br />
        &lt;TextBox ID="text1" def:Modifiers="public" /&gt; 
    </p>
        <p>
        This isn't in the builds yet, but you can see how quickly the worlds of the UI definition
        and the code behind begin to blur. 
    </p>
        <h3>Commands and DataBinding to the rescue 
    </h3>
        <p>
        We believe that because of the RAD aspects and the ID/Event issues that XAML should
        support some of these code features - however there are clearly some people that would
        like to have this not be the cause. Of course, you can choose not to use these features,
        but in addition we are working on adding features to make this separation be easier. 
    </p>
        <p>
        Commands are the ability for a component or application define a logical command that
        can be handled within the display tree. This means that you can create the definition
        of "Cut", "Copy", "Save", "PostToBlog", whatever you want (many of these are common
        commands that are built in). These logical commands can then be used to have a loose
        coupling between your logic in the code behind and the element tree defined in markup. 
    </p>
        <p>
        DataBinding is another key part. With data binding you can bind any property of any
        element to any property of any other object. Thus you can actually have a complete
        contract between your code behind and your markup implemented through a set of business
        objects. 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/00d0674e-eed7-4658-83a8-7decde2b637a</comments>
      <category>Longhorn</category>
    </item>
    <item>
      <title>A brief history of XAML</title>
      <guid>http://www.simplegeek.com/permalink.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a</guid>
      <link>http://www.simplegeek.com/permalink.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a</link>
      <pubDate>Fri, 31 Oct 2003 21:53:14 GMT</pubDate>
      <description>From my view...</description>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>While I haven't been involved in every aspect of the design and history of XAML,
        I thought you all might enjoy a bit of the history of how we got to where we are with
        XAML... </em>
        </p>
        <p>
        An early debate on the Avalon team was about what our markup should look like. We
        knew that we wanted a declarative UI model - it is actually something we have had
        for a long time. The Avalon team was formed with members from all over the company
        - User, IE, etc. And each team had a different history with markup. Obviously the
        IE folks had used HTML and VML in the past, while the User folks had used RC files.
        To add to the great debate there was also the new success of ASP.NET and their form
        of markup. 
    </p>
        <p>
        After great debate, we decided that the programatic object model would be based on
        .NET conventions. We also felt that the markup should have the same programming model
        as code. Neither HTML nor RC files had this "markup == object model" tenet, and it
        made programming difficult. ASP.NET had (basically) this model, and people seemed
        to really like that. 
    </p>
        <p>
        Finally we decided that the markup should be a new format that was, in fact, a persistence
        format for .NET objects. Thus, code like this: 
    </p>
        <p class="code">
        Button b = new Button();<br />
        b.Text = "Hello";<br />
        b.Background = Colors.Red; 
    </p>
        <p>
        Would be transformed into: 
    </p>
        <p class="code">
        &lt;Button Text="Hello" Background="Red" /&gt; 
    </p>
        <p>
        Of course, that wasn't the end of the debates. Now of course, we had to decide on
        the object model for our objects. Should we try to make the object model familiar
        to Win32, HTML, WinForms, ASP.NET, or some other group of developers? There were various
        camps, but after the success of .NET in 2001/2 it became increasingly obvious that
        a WinForms/ASP.NET based object model would be the right thing for majority of developers. 
    </p>
        <p>
        Anyway, back to the markup... 
    </p>
        <p>
        The general rules for XAML go something like this: 
    </p>
        <ol>
          <li>
            Tag names are class names. The CLR namespace and assembly is discovered by an XML
            namespace mapping scheme (more later). 
        </li>
          <li>
            XML Elements are mapped to CLR properties or events 
        </li>
          <li>
            Sub-elements of a tag can either be other class instances or "compound" properties (of
            the form Type.PropertyName) 
        </li>
        </ol>
        <p>
        There are a few more advanced rules around the "Definition" namespace and Style.VisualTree,
        but basically these three rules are it. Property values are converted from strings
        in markup to code using TypeDescriptors (just like in ASP.NET). Rule #3 has some complications
        to it - there are several ways that a child object gets attached to a parent (IAddChild,
        IList, etc.). 
    </p>
        <p>
        There is a fourth rule: 
    </p>
        <p>
        4. The root tag of a markup file is the base type of the class the markup file defines. 
    </p>
        <p>
        Thus a file like this: 
    </p>
        <p class="code">
        &lt;Window xmlns="..." xmlns:def="..." def:Class="Window1"&gt;<br />
            &lt;Button&gt;Hello&lt;/Button&gt;<br />
        &lt;/Window&gt; 
    </p>
        <p>
        Would define a new type called "Window1" that derives from "Window".
    </p>
        <p>
        Here introduces one of our current debates - is XAML a programming language or a resource
        format? With XAML you can define new types, define interactivity with "def:Code",
        and specifiy member variables of the type using "ID". XAML also defines the UI appearance
        of something, and is used for localization scenarios. XAML lacks any imperitive constructs
        (branching, etc.). XAML is more of a "programming model" rather than a language, so
        we have left it at that - "XAML is a declarative programming model".
    </p>
        <p>
        In the PDC bits their are two modes of XAML compilation - binary (BAML) and code (CAML).
        We are still working on analyising the two options - CAML works just like ASP.NET,
        it converts XAML into code (VB.NET, C#, C++, any other CodeDOM language)... BAML uses
        a binary format and also creates a small section of code for the parts of XAML that
        can't be represented in binary (like the outer class definition). CAML is the default
        in PDC bits, and you can use Optimization="Download" in the project file for getting
        BAML.
    </p>
        <p>
        This entry is turning into a bit of a rambling mess... more later... 
    </p>
      </body>
      <comments>http://www.simplegeek.com/commentview.aspx/100aec62-3352-4c35-b471-f3f2fa5fac5a</comments>
      <category>Longhorn</category>
    </item>
  </channel>
</rss>