Rob Relyea


  • Do Urls Matter?

    I'm working on a short document currently titled:
       Url Manifesto: A set of guidelines for users, publishers, and software that deals with Urls.

    I hope to have something ready to post in the next month or two.  Until then, what bugs you about urls and software that deals with them?
    (update: see for related links, not a complete doc)


    1. urls that are too long
    2. urls that don't describe what they take you to
    3. urls that are short, but redirect you to a hideous url
    4. software that makes it difficult to discover/capture/share urls
    5. ...

    Or is it just you think urls matter?

    This likely will grow into something covering several related topics.

    I think hyperlinks and urls are critical and useful.  I think things could get so much better!

  • Watered down "Avalon/XAML"???

    Tried to post a comment to another blog post, the server rejected it for some instead I'll blog it here:

    I won't comment on Windows Vista.  I'll let customers who are using it argue the merits.

    As a member of the "Avalon" team, though, I'd like to understand what was meant by "watered-down XAML/Avalon framework".

    It is now called Windows Presentation Foundation.  The version that runs on Windows Vista will be the best version of WPF that we have.  So I'm not sure what watered-down means...watered down from what?

    Thanks, Rob Relyea
    Lead Program Manager
    Windows Presentation Foundation, Microsoft

  • 2 computers often make things worse, not better...

    I'm logged into my corporate network on two machines that sit side by side.

    Why can't these 2 machines work better together?

    1) it should be easy to copy a file from one desktop to the other
    2) it should be easy to copy contents of the clipboard from one machine to the other
    3) it should be easy to drag and drop running applications from one monitor to the other

    Shouldn't it?  Scenarios like this can certainly be improved.

    Are there enough people with 2 computers to make it worthwhile for the Windows team to focus on this?

    Or should I buy lots of stock in USB Drive manufacturers?

  • Visio to Xaml Converter, vector image file format

    I was excited to learn that John is working with Michael Hunter on a Visio Exporter to XAML.

    When vector content is created in xaml, there are a few options.

    Acrylic currently supports 3 modes, I believe:

    • Exporting as a DrawingImage in a resource dictionary.
    • Exporting as a DrawingBrush in a resource dictionary.
    • Exporting as a Canvas with Shapes (in a resource dictionary?)

    Mike Swansons Illustrator exporter, uses just the Canvas/Shapes approach.

    What type of graphics exports would people like to see tools support?  Why?

  • Borland, Delphi and WPF

    Filed under:

    I've just confirmed that I'll be presenting a talk about Windows Presentation Foundation ("Avalon") at Borland's Developer Conference in November.  I'm excited to do this for several reasons:

    1. Talking to new audiences with different backgrounds always gives me a chance to step back and ask what should I be talking about, demoing, etc... 
    2. Our team has worked hard to support a wide variety of languages/tools well in WPF.  This talk gives me extra reason to get Borland's languages/tools working on my machine and engage with them even more to have great WPF support.  I continually need to ask myself, have we told them everything they need to know to build great tools for WPF?
    3. Gives me a chance to update my knowledge about the Borland Product Roadmap: (a) Diagram (b) Danny Thorpe's Blog Entry
    4. I always love talking to developers.

    Part of my new talk strategy is to create a Url for it beforehand, give visibility to what I'm going to do.  Afterwards, make sure everything of interest is available from that Url.

    If you are planning on going to Borland's Developer Conference, or use their tools, I'd love to hear what you'd want to learn about WPF from my talk.  As my outline for my talk turns into slides and demos, I'll keep that Url up to date...

  • PRS305 - Healthcare demo source posted

    Filed under: ,

    Our team had a fantastic PDC.  I was privileged to be the presenter for the Lap Around WPF.  It was my biggest presentation ever.  ~2000 developers!

    My goal was to communicate the basics of WPF/XAML and to give brief introductions to many of the topics that we had a drilldown presentation later in the PDC.  So the session ended up being lots of code, lots of markup, and lots of concepts...

    Download Demo Source Code
    With this event, I'm starting to create a URL for every major event I do.  On that page, I'll link to the resources (slides, demos and descriptions).  Over time, I'll be able to enhance those demos, listen to feedback/questions about them, and change what I post or how I describe it.

    As you are looking at the code, make sure you look at About This Demo for a description of the different files, things I did in a less than perfect way, etc...

    For the demo, I ended up building a subset of the healthcare demo that you may have seen Sanjay and Ben present on Channel 9.

    I've given several presentations like this before.  PDC2003.  Software design reviews.  Sometimes alone, sometimes tag teaming with Chris. It is always fun to balance the description of the platform, reasons behind our design, while trying to build something useful. 

    Minor Demo Hell
    I had one demo snafu that I was able to recover from very early in the talk.  I haven't watched the video yet...but I believe I pressed ctrl-a then ctrl-v when I was viewing window1.xaml.cs instead of window1.xaml.  I wondered...why was intellisense broken in this xaml?  Later I wondered, why don't those tabs work on the top...why did it say I was viewing Window1.xaml.cs.  In the at least 40 times I practiced the demo, that hadn't happened once!  Gotta love it.


    Let me know what you think!

  • Getting the PDC CTP of WinFX installed.

    Filed under: ,

    Critical Update (11/18/2005)

    No reason to install the PDC (Sept 2005) CTP of WinFX anymore.  November 2005 CTP is now out!


    PDC 2005!

    Having a great time at PDC2005!  Man, am I excited.

    We had the "Ask the Experts" session last night at the pdc.  I sat at the "WPF - XAML" table last night with ChuckJ and Mike Hillberg.  We had some great conversations with a bunch of people last night.  (Ok, really, all week long.)

    So, I have a bunch of things to discuss about the PDC.  I'll split them up in some other posts over the next few days and weeks.

    Wow, great software, but can't we make it easier to install for the developer

    I was very upset when a customer (Michael Kairys) came by last night saying that he was very excited to install everything.  Unfortunately, we handed out >30 gigabytes of softward over 7 dvds and we didn't make it real simple to know the different install scenarios.

    He had installed the wrong version of VS (we handed out their beta2 and rc1)...and couldn't get it uninstalled again.  Luckily, we had the right 3-4 Microsoft employees in the room to help fix the problem.  We're not always hanging around to help fix these problems, so we really have to make setup easier than it is now.  (I don't think improving the instructions is a big enough step.)  But that is what I can do for now...below...

    The Heros

    Dennis Cheng, a great sdet on the WPF team, was able to help fix Michael's machine with the assistance of Jason Sutherland from the VS team.  I also met a very helpful member of the VS Setup team...but I'm blanking on his name now.

    The Steps to get a WinFX development box going

    I'll try to lay it out more clearly...I'll give 2 sets of instructions, 1 for folks with the DVDs from the PDCs.  And 1 for those folks who are just downloading it all off the web.

    Uninstalling old builds of WinFX or Avalon/Indigo (Added this section in Update #4)

    Before installing a new build of WinFX, you should generally remove all the pieces of the last one you installed.
    Generally, uninstalling in reverse order is the way to do it.
    If the visual studio build didn't change since the last release, you don't need to uninstall it, but you should still uninstall VS Extensions for WinFX then WinFX SDK then WinFX.

    Once you've done that, you may want to run this script that Tim Sneath writes about to make sure old WPF builds are really gone.

    PDC DVDs - How to get a WPF development box going (order matters) if you have the DVDs from the PDC

    1. Operating System Required - Windows XP SP2 or Windows Vista 5219 (not Windows Vista Beta1 or 5231)

    UPDATE5: 10/19/2005 - Why doesn't Windows Vista 5231 work with the PDC CTP
    Our goal is to balance getting customers fresh bits with getting them full-featured bits. With this particular build Vista, the WinFX components didn’t line up with the Windows Vista build. But post build 5231 we integrated the WinFX components into our main Windows build tree and our intention is that going forward every Windows Vista build will include the WinFX components.

    UPDATE3: Another important issue that Gerald Beuchelt ran into: When trying to install the VS2005 Beta 2 on Vista, it constantly failed and the installation stopped with an error when trying to install the MSXML 6.0 component. The solution is to install the MSXML 6.0 parser before you install VS 2005 Beta 2. The installer can be found in the VS directory in the subfolder wcu\msxml.

    2. Disk 4 - WinFx CTP installation
    This installs WinFX on the machine...end users (and developers) will need this done.
    WPF (fka "Avalon"), WCF (fka "Indigo"), and .NET Framework 2.0 all get installed with an integrated setup.

    3. Disk 2 - Visual Studio (Beta 2!!!)  (you can also install VC# Express or VB Express - just make sure it is "Beta 2"!) - Sorry, there is currently no build of WinFX that is compatible with RC or RTM builds of VS!  The first CTP of WinFX after September 2005 will be in sync with the final VS 2005.
       (Disk 2, but you have to copy the folder to the HD and install it from there
    Once the install is done, make sure you do step 2 of the VS setup...install Help content - use it offline if you want it to work its best with WinFX SDK content to come later.

    4. Disk 5 - Windows WinFX SDK (Disk 5)
     (In the windows SDK folder)
    This installs a ton of help content (samples, documentation) and some great tools (xamlpad, etc...)

    5. VS Extensions for WinFx (Disk 4)
    This installs Project Templates and Item Templates for Visual Studio.


    Off the web - How to get a WPF development box going (order matters) if you are downloading everything from the web.

    1. Operating System Required - Windows XP SP2 or Windows Vista 5219 (not Windows Vista beta1 or Windows Vista 5231)

    UPDATE3: Another important issue that Gerald Beuchelt ran into: When trying to install the VS2005 Beta 2 on Vista, it constantly failed and the installation stopped with an error when trying to install the MSXML 6.0 component. The solution is to install the MSXML 6.0 parser before you install VS 2005 Beta 2. The installer can be found in the VS directory in the subfolder wcu\msxml.

    2. WinFx CTP installation
    This installs WinFX on the machine...end users (and developers) will need this done.
    WPF (fka "Avalon"), WCF (fka "Indigo"), and .NET Framework 2.0 all get installed with an integrated setup.

    3. Visual Studio (Beta 2!!!)  (or you can also install Visual Basic Express  or VC# Express - just make sure it is "Beta 2"!)  Sorry, there is currently no build of WinFX that is compatible with RC or RTM builds of VS!  The first CTP of WinFX after September 2005 will be in sync with the final VS 2005.
    Once the install is done, make sure you do step 2 of the VS setup...install Help content - use it offline if you want it to work its best with WinFX SDK content to come later.

    4. Windows WinFX SDK
    This installs a ton of help content (samples, documentation) and some great tools (xamlpad, etc...)

    5. VS Extensions for WinFx
    This installs Project Templates and Item Templates for Visual Studio.

    6. VS Extension for Windows Workflow Foundation
    This installs the Visual Studio Extensions for WWF, which will let you get started exploring Windows Workflow Foundation.  (Workflow Foundation is also in Office 12, so they will need a separate product that just has workflow's extension...)
       [Thanks to Robert Burke for "adding" these in this post.]

    A few other helpful related posts

    Why matching VS, WinFX and .Net Framework builds is necessary.

    Details about the VS Extensions for WinFX (This was written about November 2004 CTP...I will update...but still likely useful)

    New details about the improved intellisense experience for XAML in the pdc build. (I'm alsoworking on an another update to this schema now...)

    Additional detail after initial post: A few more details to help understand install order dependencies

    Here are the install dependencies that I know of:
    At the very end you must have all 4 things installed.

    These 3 pieces of software only require that any pieces installed before them must have a matching .Net Framework version.

    VS beta2 – no requirements before install
    WinFX – no requirements before install
    WinFX SDK – no requirements before install

    This piece of software requires that some software be installed before it

    VS Extensions for WinFX – requires VS beta2, MSDN Help (step 2 of VS install), and WinFX SDK to be installed beforehand.

    2nd Update: Pointer to CTPMadness tool on Channel 9

    This application and xml data file provide an easier way to understand for any given ctp (winfx, sql, vs, etc...), which other builds are compatible with it: 

  • XAML Editing in an Xml Editor - major schema enhancement coming with PDC release

    I've written a few times in the past about how we provide a WPF ("Avalon") + XAML schema in the Visual Studio 2005 Extensions for WinFX.

    A major schema quality update is in the works for our PDC release of the VS Extensions.

    Avalon + XAML Schema Files
    XML Editor (like the one in Visual Studio) can use XSD schema files to provide Intellisense support for many XML formats. If you are editing with VS' XML Editor and want a better experience, you can put an .xsd file in \program files\microsoft visual studio 8\xml\schemas\

    Determining Content Model for An Object

    The XAML parser design in the past has made it hard for tools or people to understand what the content model for an element is.  In the upcoming PDC build, we've added a new Attribute that allows any object to define which property is their "content" property.  Panels, for example, put their children in their Children property.  Knowing that gives a critical missing clue to solve the "what is the content model" question.

    Because the Children property is of type UIElementCollection, you know that any set of UIElements can be put inside a Panel.

       <Button />
       <ListBox />

    Determining Set of Types in a Xmlns Uri

    We also have an attribute (XmlnsDefinitionAttribute) that allows a class library author to define what a xmlns uri means to XAML.  It helps create a mapping from an xmlns uri to a set of clr namespaces in specific assemblies.

    AssemblyInfo.cs for PresentationFramework.dll
    [assembly: XmlnsDefinition("", "System.Windows")]
    [assembly: XmlnsDefinition("", "System.Windows.Controls")]
    [assembly: XmlnsDefinition("", "System.Windows.Documents")]
    [assembly: XmlnsDefinition("", "System.Windows.Shapes")]
    [assembly: XmlnsDefinition("", "System.Windows.Media")]

    Enhancments to Avalon2005.xsd

    Using the information about content model and XmlnsDefinition, we've changed the schema generation tool that creates Avalon2005.xsd.  That tool no longer relies on a difficult to keep up-to-date data file that describes the content model of all elements.

    • use XmlnsDefinitionAttribute to discover the appropriate types to include in schema
    • filter inappropriate types that can't be represented in XAML (no default constructor, etc...)
    • allow any "object element" to be the root (I no longer suggest Page, Window, etc... as the only valid roots)
    • drastically improve the content model exposed for each element
      • allow all property elements (<ClassName.Property>) as children (I no longer suggest the 2-3 useful ones) -- note, Grid.Children is one of the property elements allowed by the schema...the xaml parser will support it, but
      • support the property content model for children (no longer based on a partially correct data file)
    • properly expose all possible attached properties for an element in the schema (based on the type in the SetFoo, GetFoo static methods)
    • improve attribute value enum values (discover the possible values for Brush by looking at Brushes, etc...)
    • merge in intellisense information about each object, property and element from PresentationFramework.xml, PresentationCore.xml, etc... - providing inline descriptions as you edit in the xml editor.

    Editing Schema vs. Validating Schema

    Schemas can either be focused on assisting editing or can be provided to be completely definitive for validation.  Avalon2005.xsd is focused on being an editing aid for XAML.  Over time, we'll probably start releasing 2 editing and one validating.

    Editing Schema for System.Windows.Data.BindingMode enum:

    <xs:simpleType name="frlrfSystemWindowsDataBindingModeClassTopic">
    xs:restriction base="xs:string">
    xs:enumeration value="TwoWay"/>
    xs:enumeration value="OneWay"/>
    xs:enumeration value="OneTime"/>
    xs:enumeration value="Default"/>
    xs:enumeration value="{x:Null}"/>

    Ideally, we want to represent all the MarkupExtension syntaxes that can be used for these values as well.  Unfortunately, VS' Beta2 XML Editor doesn't support combining enumerations and patterns and still provide suggested values via intellisense.  (It will get better...)


    Validating Schema for System.Windows.Data.BindingMode enum:

    Since we can't add patterns to enumerations and still get intellisense, we could build a validating schema that stops worrying about enumerations for editing niceness, and just tries to be as accurate as possible using patterns.

    <xs:simpleType name="frlrfSystemWindowsDataBindingModeClassTopic">
    xs:restriction base="xs:string">
    xs:pattern value="TwoWay|OneWay|OneTime|Default"/>
          <xs:pattern value="\{Binding.*\}"/>
          <xs:pattern value="\{StaticResource .*\}"/>
          <xs:pattern value="\{DynamicResource .*\}"/>
          <xs:pattern value="\{x:Null}"/>


    Added functionality+Reduced functionality with VS Beta2

    Due to the enumeration + pattern breaking intellisense problem, when you try to set a brush in an attribute, this is the behavior you will see:

    <Button Background="

    will suggest all friendly color names - that is an improvement...we never did that before.

    For now, it will mark #FF0000 or {StaticResource myBrush} as invalid values. That is reduced functionality.  We used to say that Brush was of type xs:string, and had no enums.  So we didn't help you get correctly spelled values, but we never said that a valid syntax was invalid.


    Would love to hear feedback on the decision I made for PDC's schema and any other issues you run into.

  • First opinions on Avalon

    Filed under:

    I use to see what people are saying about Avalon or XAML.

    I was interested in reading this first take on Avalon from slave to the code.  He compares Avalon to Flash.  He discusses some of our stregths..and the fear that people will abuse some of the power... (remember fonts in the early days...)


    Now I'm off for some early morning golf...then more work on the avalon schema generation tool...

  • New codeproject to convert from 3DS files to 3d XAML.

    Filed under: ,

    I woke up a bit early this morning thanks to my 2 year old...had a chance to catch up in the Avalon newsgroup...

    I enjoyed seeing another converter to import content into Avalon.
    Andrej Benedik wrote a converter from 3DS files to 3d XAML.

    Great to see!

    What other converters do people find themselves wanting?

  • Avalon Express Applications vs. Avalon Applications

    Ashish has a nice write-up about Avalon Express applications vs. Avalon Installed applications.  He also covers using clickonce to deploy/update those applications.

    I'm curious to hear what you all think about Express you lean towards building Avalon applications that run in browser with partial trust?

    Have you run into any things that should (but don't) work in Express apps due to security restrictions?

  • Localization for Avalon XAML based applications

    Online Documentation for Beta1 RC Now Available

    After a few week delay, the online version of the documentation for Beta1 RC has finally made it up on MSDN.  Those of you using that build, had current documentation installed on your machine, but the online documentation was still showing March CTP docs.

    Localization and Globalization

    That makes it easier for me to point to 2 documents about localizing and globalizing avalon applications.  This topic came up recently when I did a presentation at XTech about Avalon and a XUL guy thought that Avalon/XAML didn't have a localization story because I didn't mention one in my talk.

    This overview article covers several globalization issues.

    I like our solution for localization, it allows people to use one primary language for development in their XAML.  When these XAML files are compiled into BAML files, they are embedded in satellite assemblies.  This how-to topic documents the steps necessary to localize the content in the baml and to create new satellite assemblies.

    Please tell me anything that isn't clear or doesn't make sense...

    New Article About Localization (10/19/2005)

    Globalize and Localize Your "Avalon" Applications Using LocBaml

    You already know that internationalizing your applications can propel you into new markets. But did you know that the Windows Presentation Framework can make it easier than ever to do? Learn how to write culture-aware WPF applications using this example.


    10/19/2005 - updated 2 links that were broken since the sdk is still moving Urls around.

  • Matthew Adams ponderings on XAML

    Filed under: ,

    Interesting post on "Avalon, XAML as a discoverable API" by Matthew Adams.

    In the discoverable API piece, he ends with:

    But I don't think XAML quite delivers on that ease-of-use goal as it stands. I'm sure the intention is to build tooling around it for RAD development, and so maybe this doesn't register all that high on the radar, but it still doesn't feel as "clean" as it could, to me. Yet.

    We'd love to know which parts of Avalon/XAML need more cleaning.

    Yes, we clearly would benefit from visual designers, but we want to still be readable/writable without one.


    He also says:

    Avalon delivers an API which permits the same ease of use; in fact, I think it is more consistent, simpler and generally easier to use even than VB's API, as well as offering richer functionality even at its surface.

    Glad to hear about the richness and pleasantly surprised about the consistency, simplicity and ease of use you mention.  We still have a number of rough areas, but we've been working towards those goals.

    He has other posts on Avalon as well  "Bad practice, good practice, what is XAML for?"

    Please go read his posts and comment on them on his site.  Would love to know what you all think.

  • Beware warnings from the xml editor...avalon2005.xsd/xaml2005.xsd are not perfect way to validate xaml

    Filed under: ,

    This issue keeps coming up...

    When VS gives you a message like this:

    The element 'Page' in namespace '' has invalid child element 'Page.CommandBindings' in namespace ''. Expected 'Page.Resources, Page.StatusBarContent, Page.Storyboards, Page.Opacity, Page.Clip, Page.RenderTransform, Page.DataContext' in namespace '' as well as any element in namespace '' as well as …

    It is likely a warning, not an error.  The xml editor is warning that the xaml doesn't match the schema that we've provided for Avalon/Xaml.

    Back in February, I blogged about the Issues/Suggestions for November Avalon CTP's VS2005 Add-ons ('Fidalgo').  I've updated the relevant section and included it here:

    Avalon + XAML Schema Files
    The XML Editor in Visual Studio uses XSD schema files to provide Intellisense support for many XML formats. If you are editing an xml format and want a better experience, you can put an .xsd file in \program files\microsoft visual studio 8\xml\schemas\

    XSD Schema doesn't do a great job on XAML intellisense…but it is better that typing blind! The danger is that the schema isn't perfect. It complains about some syntaxes that are perfectly valid (according to the XAML loader and XAML compiler.) It also suggests some syntaxes which won't compile.


    Why doesn't XSD do a great job with XAML?

    Why is XSD inappropriate as a XAML validator:

    1) Type Inheritance - 3rd party types that subclass UIElement should be allowed in DockPanel.

    2) Generics - Generic collection type   List -- content model depends on T





    3) Attached Properties - AttachedProperties could be applied anywhere.  Should all attached properties be added to the schema for all UIElements?


    4) Attributes and Property Elements shouldn't both be set


    The parser/compiler will both error if you do this.  I'm not sure of way to enforce this with XSD.








    5) PropertyElements must all be listed in the schema or they will appear invalid.

    I choose to not list every PropertyElement as a possible child of the ObjectElements today because they would provide too many options to insert as children of tags.  I've tried to find the common PropertyElements and add them to the schema.

    The solution

    Short term: tell us about bad problems in the xsd.  We'll fix most of those until we get our long term solution.

    Long term: we hope to have an editor that doesn't rely on XSD to provide intellisense.  If you are building tools that are targetting Avalon/Xaml, and want to learn more about what I'd recommend in this area, please contact me...I'd be happy to tell you what I believe would be the best way to do this.

    Update: I needed to hand escape all my tag examples...fixed them...

  • Avalon: More Power, Less Pain

    Filed under: ,

    Gervase Markham is attending XTech, an XML focused conference in Amsterdam.  He attended my talk on Avalon/XAML and had some comments.  In this post, I'll address the first of his three comments.


    Avalon’s Motivation

    Gervase said:

    “The motivation behind XAML seems to be to make it easy to write Windows applications, or web applications in IE.”

    Our goal is not JUST to make it easier to build today’s applications...I'll try to clarify.  Avalon will:

    1)      Be the new presentation platform for Windows

    We are building a new presentation platform for Windows that enables a whole new generation of applications.  It is called Avalon.  It will run on Windows XP, Windows Server 2003, and Windows “Longhorn”.  Today’s Windows applications will continue to run compatibly.

    We are working with software developers from around the world to help them build great new applications that can benefit from the new capabilities Avalon offers.  Many developers and business people are very excited by what we are building.  If we and they do our jobs right, users will be delighted by the applications offered in the future.

    2)      Empower great design

    Windows applications today can be built to do almost anything.  Unfortunately, many things require lots of work.  Many others are next to impossible.  Designers often end up compromising their design due to technical limitations.  We’d like to stop that.

    3)      Be a unified platform

    We are building an integrated platform that removes many limitations that today’s platforms have.  We want to provide a unified framework with several important building blocks: controls, vector graphics, media, animations, flow documents, fixed documents, and 3d.  All of these technologies can work well with each other.

    XUL’s Motivation

    He also goes on to say:

    “The motivation behind XUL was to provide a first class UI on every platform without having to do the work multiple times.”

    Hey wait, I thought that was Java’s job.

    I believe that Avalon will enable much better user experiences than other frameworks.  It will do that while meeting fundamental requirements like accessibility, easy deployment, globalization, performance and security.

    We’ll have a platform that developers will enjoy using (due to choice of great programming languages, a declarative model - XAML, ability to use the .NET class library, and a great programming model) and targeting (because of what it enables them to do for their users).

    In the end, as always, developers will choose based on the power provided to them and the amount of pain that they must go through to harness it.  We’ll continue to work hard to provide more power with less pain.

    Does Avalon provide more power with less pain?

    Please download our new Beta1 RC (release candidate) from, kick the tires, and tell us how we can add more power or lessen the pain.



« First ... < Previous 2 3 4 5 6 Next > ... Last »