<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>MIX</title>
        <link>http://geekswithblogs.net/lbugnion/category/6583.aspx</link>
        <description>MIX conference in Las Vegas</description>
        <language>en-US</language>
        <copyright>Laurent Bugnion</copyright>
        <managingEditor>laurent@galasoft.ch</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
        <item>
            <title>Using a Behavior to magnify your WPF applications</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx</link>
            <description>&lt;p&gt;At MIX 2009, the Expression Blend team cam up with a new concept called Behaviors. In fact, the only thing new is the way that the Behaviors are packed. WPF developers have been doing what we called "Attached Behaviors" for quite some time already: see &lt;a href="http://groups.google.com/group/wpf-disciples/browse_thread/thread/bbf3a9d83bd9c21e/d2b8e66663e01224?lnk=gst&amp;amp;q=attached+behavior#d2b8e66663e01224"&gt;this thread&lt;/a&gt; (dated July 2008) to read a discussion around this topic at the WPF Disciples group.&lt;/p&gt;  &lt;p&gt;Attached Behaviors leverage a feature of WPF called Attached Properties, that allows you to add a property to an element even if this element doesn't implement it. When the Attached Property value is set (or changes), you get an access to the element to which the property is attached, and you get a chance to attach an event handler to it, or to modify how it looks, reacts, etc... This is why we call this Attached Behavior. In fact it is similar to extension methods in C#: You define a method somewhere in your code, and you attach it to another element that doesn't know about it. For more information about attached behaviors, you can read the article that my good friend and fellow WPF Disciple Josh Smith &lt;a href="http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx" target="_blank"&gt;wrote about them&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Behaviors proposed by the Blend team are using Attached Behaviors under the covers, and propose a neat way to "pack" them and to attach them to an element. In this post, we will see how I built a Behavior that you can use to add a magnifying glass to a WPF application in just a few lines of XAML (the Behavior implementation needs more than that though ;) but it is neatly packed and can be reused).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In this article, you will see&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;How to download the assemblies needed. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How to add them into Expression Blend 3 or in Visual Studio 2008. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How to set the ZoomBehavior's properties. &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How the ZoomBehavior is built (and of course you can download the source code). &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;And a sample application.&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3647/3412149897_0e350c7ba9.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Default magnifier on a picture&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;Why Expression.Interactivity?&lt;/h2&gt;  &lt;p&gt;This question was asked many times after the Behaviors were shown at MIX: Why do I need to add a reference to an Expression Blend assembly to use Behaviors in my application, even though they do not really have anything to do with Blend? Sure, Blend provides a nice way to add a Behavior to an element visually, but you can do the same in XAML.&lt;/p&gt;  &lt;p&gt;The answer is that Behaviors have been implemented by members of the Blend team, and are still very new. They just needed a place to store them, and it made sense to them to put that code in an assembly that comes with Blend. In my opinion it was not the best choice, and putting Behaviors in the WPF Toolkit (and in the Silverlight Toolkit) would have been a better option. I suppose that this will change later, and that Behaviors will maybe even flow into the .NET framework (and maybe even into the System.* namespace).&lt;/p&gt;  &lt;h2&gt;What does the behavior do?&lt;/h2&gt;  &lt;p&gt;The ZoomBehavior I developed and expose here allows to easily add a magnifying glass to any WPF window. With just a few lines of XAML code, you add a relative complex functionality. You can have any shape and any content - photos, videos, user interface elements, shapes, etc...&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3627/3412150387_540c388c9a.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Custom magnifier on a video&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3381/3412954854_2a21635ebc.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Custom magnifier on text&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;img src="http://farm4.static.flickr.com/3360/3412954946_4d818229f6.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Default magnifier with custom width on UI elements&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;What about Silverlight?&lt;/h2&gt;  &lt;p&gt;Behaviors work in Silverlight as well as in WPF. The mechanisms they rely on are compatible. However, my ZoomBehavior does not work in Silverlight, because it relies on a class named VisualBrush that is not available in Silverlight yet. Also, I draw the magnifying glass on the Adorner layer, which is not available in Silverlight applications (but we could imagine a workaround for that particular limitation).&lt;/p&gt;  &lt;p&gt;In other words, if you do Silverlight code, you can learn from this sample, but you cannot use it.&lt;/p&gt;  &lt;h2&gt;Using the ZoomBehavior in Expression Blend 3&lt;/h2&gt;  &lt;p&gt;Expression Blend 3 is probably the easiest way to add a Behavior to an application. You will need Expression Blend 3, which is currently in Community Technology Preview state, and &lt;a href="http://www.microsoft.com/expression/try-it/blendpreview.aspx"&gt;can be downloaded here&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Download my &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;Utilities assembly&lt;/a&gt;. This assembly is in a Zip file. Extract it to a local folder. &lt;/li&gt;    &lt;li&gt;In Blend 3, right click on the Project tab, on the References folder. &lt;/li&gt;    &lt;li&gt;From the context menu, select Add Reference. Navigate to the folder containing the Utilities assembly, select it and press OK. &lt;/li&gt;    &lt;li&gt;Build the application. This ensures that all the referenced assemblies are copied to the bin/Debug folder. &lt;/li&gt;    &lt;li&gt;Open the Assets Library. &lt;/li&gt;    &lt;li&gt;You should see the ZoomBehavior in the Behaviors tab. &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3309/3412149179_a917343cb8.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;The Asset Library and the ZoomBehavior&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Drag and drop the ZoomBehavior on any element in the Window.      &lt;br /&gt;&lt;em&gt;Note: Typically, you want to add this behavior to the LayoutRoot panel (the first element under the main window). Even if you add the ZoomBehavior to a child element somewhere in the window, the magnifier will be added to the window's Content element, and will be visible in the whole window.&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;You should see the behavior appear in the Objects and Timeline panel. &lt;/li&gt; &lt;/ul&gt; &lt;img src="http://farm4.static.flickr.com/3590/3412953756_5e7fa8d798.jpg?v=0" /&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;Objects and Timeline panel&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To toggle the magnifier on and off, you need a little snippet of code. For example, you can use a ToggleButton and then write the following C# code:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;First add the following using directive to the top of the page: &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="csharp" name="code"&gt;using GalaSoft.Utilities.Wpf.Zoom;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Then, use this snippet for the Click event handler on the Button: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharp" name="code"&gt;/// &lt;summary&gt;
/// Test the ToggleZoom extension method
/// &lt;/summary&gt;
private void Button_Click(object sender, RoutedEventArgs e)
{
  TestRectangle.ToggleZoom();
}&lt;/pre&gt;

&lt;p&gt;The result is a round magnifier, with a magnifying factor of 2.0 and a diameter of 200 pixels. You will see below how to change the size and aspect of the magniifier.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Alternatively, you can use the IsVisible dependency property on the ZoomBehavior object, set it directly or data bind it, for example to a checkbox or a ToggleButton, or any other boolean property. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3555/3412150697_265ce4955e.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;ZoomBehavior properties in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://farm4.static.flickr.com/3350/3412150743_12329f50d9.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Binding the IsVisible property in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://farm4.static.flickr.com/3363/3412955168_024520a69f.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Binding the IsVisible property in Blend 3&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Using the ZoomBehavior in Visual Studio&lt;/h2&gt;

&lt;p&gt;Adding the magnifier can also be done directly in XAML, without using Blend 3:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Download my &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;Utilities assembly and the Microsoft Expression Interactivity assembly&lt;/a&gt;. These assemblies are in a Zip file. Extract them to a local folder. &lt;/li&gt;

  &lt;li&gt;In Visual Studio, add a reference to both assemblies to your WPF application 
    &lt;ul&gt;
      &lt;li&gt;Right click on the References folder &lt;/li&gt;

      &lt;li&gt;Select Add Reference from the context menu &lt;/li&gt;

      &lt;li&gt;Browse to the folder in which you saved both assemblies above, and select them. Then press OK. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;In XAML, add two XML namespaces to the Window tag: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;xmlns:i="http://schemas.microsoft.com/expression/2009/interactivity"
xmlns:zoom="clr-namespace:GalaSoft.Utilities.Wpf.Zoom;assembly=GalaSoft.Utilities"&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Add the following attached property to the element you want to attach the magnifier to (in that case, the Rectangle named TestRectangle). 
    &lt;br /&gt;&lt;em&gt;Note: Typically, you want to add this behavior to the LayoutRoot panel (the first element under the main window). Even if you add the ZoomBehavior to a child element somewhere in the window (like in this sample), the magnifier will be added to the window's Content element, and will be visible in the whole window.&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;Rectangle x:Name="TestRectangle"
           Fill="#FF821A32"
           Stroke="#FF000000"
           HorizontalAlignment="Right"
           Margin="0,260,17,354"
           Width="179"&amp;gt;

  &amp;lt;i:Interaction.Behaviors&amp;gt;
    &amp;lt;zoom:ZoomBehavior x:Name="MyZoom" /&amp;gt;
  &amp;lt;/i:Interaction.Behaviors&amp;gt;

&amp;lt;/Rectangle&amp;gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;Here too, to toggle the magnifier on/off, you need to add the namespace GalaSoft.Utilities.Wpf.Zoom to your code-behind, and then call the extension method ToggleZoom() on the element to which you added the behavior. For example: &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="csharp" name="code"&gt;TestRectangle.ToggleZoom();&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;And of course here too you can use a binding on the IsVisible property &lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;
  &amp;lt;zoom:ZoomBehavior x:Name="MyZoom"
                     IsVisible="{Binding ElementName=ToggleZoomCheckBox,
                                         Path=IsChecked, Mode=TwoWay}" /&amp;gt;
&amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/pre&gt;

&lt;h2&gt;Using properties&lt;/h2&gt;

&lt;p&gt;There are a number of properties that you can use to customize the magnifier's look and feel. All these properties are Dependency Properties, which means that they can be data bound or animated, such as in the sample that you can download below.&lt;/p&gt;

&lt;h3&gt;Zoom factor&lt;/h3&gt;

&lt;p&gt;The property ZoomFactor can be set to any value between 1.0 and Double.MaxValue. The default value is 2.0.&lt;/p&gt;

&lt;h3&gt;Magnifier height and width&lt;/h3&gt;

&lt;p&gt;The properties MagnifierWidth and MagnifierHeight govern the dimensions of the magnifying glass. Default value: 200 px * 200 px.&lt;/p&gt;

&lt;h3&gt;Distance from the mouse&lt;/h3&gt;

&lt;p&gt;When the magnifier is visible, the mouse cursor turns into a cross. The magnifier appears next to the cursor, either left or right, below or above, depending on the mouse position. If you move the mouse too fast, the cursor might "land" on the magnifier, which you want to avoid. In that case, and depending on the shape of the magnifier, you may want to increase the distance from the mouse, using the DistanceFromMouse property. Default value: 5 pixels.&lt;/p&gt;

&lt;h3&gt;Magnifier shape&lt;/h3&gt;

&lt;p&gt;By default, the magnifier is an Ellipse. You can however specify any shape you want, using the Template property.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Create a ControlTemplate, either in Blend or in Visual Studio. &lt;/li&gt;

  &lt;li&gt;The ControlTemplate must target a Control (TargetType property). &lt;/li&gt;

  &lt;li&gt;One of the elements of the ControlTemplate must set its Fill (or Background) property to a TemplateBinding on the Control's Background. This is where the magnified view will appear. &lt;/li&gt;

  &lt;li&gt;Save this template in the window's resources (for example). &lt;/li&gt;

  &lt;li&gt;Set the ZoomBehavior's Template property to the saved ControlTemplate. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For instance:&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;ControlTemplate x:Key="ZoomGlassTemplate1"
                 TargetType="{x:Type Control}"&amp;gt;
  &amp;lt;Grid Background="Silver"&amp;gt;
    &amp;lt;Rectangle Fill="{TemplateBinding Background}"
               Stroke="#FF000000"
               StrokeThickness="5"
               StrokeDashArray="1 2" /&amp;gt;
  &amp;lt;/Grid&amp;gt;
&amp;lt;/ControlTemplate&amp;gt;&lt;/pre&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;
  &amp;lt;zoom:ZoomBehavior x:Name="MyZoom"
                     Template="{StaticResource ZoomGlassTemplate1}"
                     DistanceFromMouse="20" /&amp;gt;
&amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Tip: You want to make sure that an opaque background is set in your template (in that case, the Grid's Background is set to Silver), to avoid having a transparent background and seeing the window's content below the magnifier when it is close to the window's edges.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IsVisible&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This boolean property can be set directly, or data bound for example to a checkbox, to toggle the magnifier on and off.&lt;/p&gt;

&lt;h2&gt;Downloads&lt;/h2&gt;

&lt;p&gt;You can download the following files:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Assemblies needed to add the ZoomBehavior to your application (&lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Release.V1.zip"&gt;GalaSoft.Utilities and Microsoft.Expression.Interactivity&lt;/a&gt;). &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/GalaSoft.Utilities.Source.zip"&gt;Source code for my Utilities classes&lt;/a&gt; (the ZoomBehavior classes are into the Wpf/Zoom subfolder) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you'll have fun playing with this behavior, and feel free to give me your feedback!&lt;/p&gt;

&lt;h2&gt;Sample application&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://www.galasoft.ch/mydotnet/GalaSoft.Utilities/ZoomBehaviorTest.zip" target="_blank"&gt;sample application&lt;/a&gt; allows you to test the ZoomBehavior with multiple shapes, sliders for dependency properties and dynamic content.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use the shapes on the left to change the shape of the magnifier. The round shape sets the default template. The other two templates are defined in Window1.xaml. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3611/3412150907_9abde79d68.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;RadioButtons to choose templates&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use the button and checkbox on the top right to toggle the magnifier on/off. You can use the ToggleZoom extension method, or use the IsVisble dependency property on the ZoomBehavior. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3396/3412955264_8ab850cbca.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Toggling the magnifier on/off&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Press the "Z" key to toggle the ZoomBehavior on/off. &lt;/li&gt;

  &lt;li&gt;Pass the cursor on UI elements, shapes, image and even video and see the magnified content &lt;/li&gt;

  &lt;li&gt;Use the sliders on the bottom right to change the width, height and the zoom factor of the magnifier. &lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://farm4.static.flickr.com/3654/3412151281_75945c7aea.jpg?v=0" /&gt; 

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Changing the width, height and zoom factor&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;How does it even work?&lt;/h2&gt;

&lt;p&gt;The ZomBehavior relies on three classes.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;ZoomBehavior&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class inherits the Microsoft.Expression.Interactivity.Behavior class, which is a generic class. The ZoomBehavior can be attached to any FrameworkElement. However, the magnifier will always be available for the whole window containing the FrameworkElement. &lt;/li&gt;

      &lt;li&gt;This class also defines a set of dependency properties detailed above in the Using Properties section. &lt;/li&gt;

      &lt;li&gt;The ZoomBehavior also defines a method used to toggle the magnifier on/off. There is also another way to toggle the magnifier, using an attached method. &lt;/li&gt;

      &lt;li&gt;To get a grip on the FrameworkElement using the behavior, you can override the OnAttached method, which will be called when the behavior is attached to an element. Then use the AssociatedObject of the Behavior class, which is automatically casted to a FrameworkElement in ZoomBehavior (thanks to the generic implementation). &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ZoomAdorner&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class inherits the System.Windows.Documents.Adorner class, that defines objects that can be added to the AdornerLayer. &lt;/li&gt;

      &lt;li&gt;The AdornerLayer is a special layer that is guaranteed to always appear in front of all the other elements on the window. This is perfect to draw decorations for objects (such as handles to resize an element) or in our case, to make sure that the magnifier is on top of all other elements. &lt;/li&gt;

      &lt;li&gt;If no template is defined, the method CreateGlass will create an Ellipse to display the magnified view. &lt;/li&gt;

      &lt;li&gt;If a template is defined, the method CreateGlass will create a Control and apply the template to that element. This allows using any shape to display the magnified view. &lt;/li&gt;

      &lt;li&gt;We override a few methods and properties in the ZoomAdorner class, to allow placing any element in the AdornerLayer. We use the helper class VisualCollection to create a tree of visual elements below the adorner. This requires overriding VisualChildrenCount, GetVisualChild, ArrangeOverride and MeasureOverride. &lt;/li&gt;

      &lt;li&gt;We attach an event handler to the root element on which the magnifier is displayed, to track mouse movements. When we detach the adorner, we must remember to remove the event handler to avoid memory leaks. &lt;/li&gt;

      &lt;li&gt;The magnified view is provided by a VisualBrush. This is a representation of the observed scene, which we can move by changing the ViewBox property. &lt;/li&gt;

      &lt;li&gt;The method SetGlass is called everytime that the mouse moves, or that the aspect of the magnifier changes (through a dependency property). It is used to calculate the magnifier's size, position, and the ViewBox of the VisualBrush. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ZoomExtension&lt;/strong&gt; 

    &lt;ul&gt;
      &lt;li&gt;This class is a utility class, that defines an extension method available on every FrameworkElement. &lt;/li&gt;

      &lt;li&gt;The method ToggleZoom will only be active on the element on which you added the ZoomBehavior. On other elements, it will simply be ignored. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;License&lt;/h2&gt;
&lt;a href="http://creativecommons.org/licenses/by/3.0/" target="_blank"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="left" src="http://creativecommons.org/images/public/somerights20.png" /&gt;&lt;/a&gt; 

&lt;p&gt;The GalaSoft.Utilities assembly and all the classes it contains are distributed under the &lt;strong&gt;Creative Commons License (Attribution 3.0 Unported).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="http://creativecommons.org/licenses/by/3.0/" href="http://creativecommons.org/licenses/by/3.0/"&gt;http://creativecommons.org/licenses/by/3.0/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I hope you will have fun using this behavior. For me it was a great occasion to learn how to program behaviors, and to review the Adorner Layer, a great feature of WPF applications. But having played with the ZoomBehavior quite a lot in the last few days, I think it has a potential for many WPF applications. Feel free to use it!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130749"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130749" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130749.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx</guid>
            <pubDate>Sun, 05 Apr 2009 12:32:21 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130749.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/04/05/using-a-behavior-to-magnify-your-wpf-applications.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130749.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130749.aspx</trackback:ping>
        </item>
        <item>
            <title>Solving cross domain access problems (via Jon Galloway)</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx</link>
            <description>&lt;p&gt;At my MIX09 and TechDays Belgium talk recently, I mentioned the issues that a Silverlight developer faces when trying to access a cross-domain web site. If the site has a clientaccesspolicy.xml (or crossdomain.xml) policy file in place, the call is allowed. If not, the call is rejected.&lt;/p&gt;  &lt;p&gt;The solution, I mentioned, is to put a "gateway" in place to forward the call to the cross domain site. In my talk, I said that you could do that on your own web server, the server the Silverlight application is served from. Well, of course that works, but will add some load to your server (not even mentioning that you have to write the gateway yourself, which is not the nicest task).&lt;/p&gt;  &lt;p&gt;Thankfully, others have thought about that, and apparently I had missed that my good friend Jon Galloway has a post back then in December that shows how to leverage Yahoo Pipes to act as a gateway from cross-domain access. Yahoo Pipes has a cross domain access policy file in place, so it will work.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2008/12/12/silverlight-crossdomain-access-workarounds.aspx"&gt;Read Jon's article here&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130516"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130516" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130516.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx</guid>
            <pubDate>Mon, 30 Mar 2009 23:32:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130516.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/30/solving-cross-domain-access-problems-via-jon-galloway.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130516.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130516.aspx</trackback:ping>
        </item>
        <item>
            <title>Posting the source code for my #mix09 and #techdays (Belgium) talk</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/25/posting-the-source-code-for-my-mix09-talk.aspx</link>
            <description>&lt;div class="gslb_rsbDivFrame"&gt;Note: I just updated the title for this article, sorry to all of you who were waiting for the TechDays Belgium source code and didn't realize it was here :)&lt;/div&gt;  &lt;p&gt;I just posted the source code of the demo applications I used in my MIX09 talk "Working across the client continuum".&lt;/p&gt;  &lt;p&gt;The source code is structured as follows:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/mydotnet/articles/resources/mix09/DotNetContinuum.zip"&gt;DotNetContinuum&lt;/a&gt;&lt;/strong&gt;: This solution contains the following projects:       &lt;ul&gt;       &lt;li&gt;DotNetContinuum: a WCF service configured with 2 endpoints (SOAP and JSON), as well as 3 client applications: &lt;/li&gt;        &lt;li&gt;DotNetContinuum.Mvc: An ASP.NET MVC application showing a "pure" ASP.NET MVC application enhanced with AJAX content. See the following files          &lt;ul&gt;           &lt;li&gt;HomeController.cs (in Controllers): Contains the "ServerDateTime" action. &lt;/li&gt;            &lt;li&gt;ServerDateTime.aspx (in Views/Home): Contains the view code for ServerDateTime. &lt;/li&gt;            &lt;li&gt;Index.aspx (in Views/Home): Start page for the MVC application, contains the links to ServerDateTime, as well as the AJAX code. &lt;/li&gt;            &lt;li&gt;Silverlight.html: Start page for the Silverlight application. &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;        &lt;li&gt;DotNetContinuum.SL: A Silverlight application connecting to the WCF service in an asynchronous way. See the following files:          &lt;ul&gt;           &lt;li&gt;Page.xaml: Front end with a very simple UI. &lt;/li&gt;            &lt;li&gt;Page.xaml.cs: Code behind with the code to connect to the WCF service. &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;        &lt;li&gt;DotNetContinuum.Wpf: A WPF application connecting to the WCF service in an asynchronous way. See the following files:          &lt;ul&gt;           &lt;li&gt;Window.xaml: Front end with a very simple UI. &lt;/li&gt;            &lt;li&gt;Window.xaml.cs: Code behind with the code to connect to the WCF service. &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/mydotnet/articles/resources/mix09/Customers.zip"&gt;Customers&lt;/a&gt;:&lt;/strong&gt; This solution is a WCF service reading a list of customers from an XML file and delivering them as a list of Customer objects.       &lt;ul&gt;       &lt;li&gt;CustomerAccess.cs: Contains the LINQ to XML code used to read and write the XML file. &lt;/li&gt;        &lt;li&gt;Customer.cs: The class used to pass information between the service and the client. &lt;/li&gt;        &lt;li&gt;CustomerService.svc.cs: The service implementation. &lt;/li&gt;        &lt;li&gt;Customers.xml: The "data base" of customers &lt;/li&gt;        &lt;li&gt;Note also that there is a unit test project in the solution, used to unit test the WCF service. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.galasoft.ch/mydotnet/articles/resources/mix09/CustomersApplication.zip"&gt;CustomersApplication&lt;/a&gt;:&lt;/strong&gt; This solution contains client applications for the Customers WCF service.       &lt;ul&gt;       &lt;li&gt;CustomersApplication.Mvc: An ASP.NET MVC and AJAX client.          &lt;ul&gt;           &lt;li&gt;HomeController.cs: Contains the "ShowCustomers" action. &lt;/li&gt;            &lt;li&gt;ShowCustomers.aspx: Contains a mix of ASP.NET MVC and AJAX code to interact with the WCF service. &lt;/li&gt;            &lt;li&gt;Silverlight.html: Start page for the Silverlight application. &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;        &lt;li&gt;CustomersApplication.SL: The Silverlight application connecting to the WCF service and showing the list of customers. &lt;/li&gt;        &lt;li&gt;CustomersApplication.WPF: Same application, implemented in WPF. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The last applications (CustomersApplication.SL and CustomersApplication.WPF) are implemented using the MVVM pattern, and share a maximum of code.&lt;/p&gt;  &lt;p&gt;As soon as I have a moment, I will post a walkthrough of my demos. In the mean time, you can catch the Powerpoint slides and the talk's video &lt;a href="http://videos.visitmix.com/MIX09/T13F"&gt;&lt;strong&gt;from the MIX09 session page&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Have fun!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130385"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130385" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130385.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/25/posting-the-source-code-for-my-mix09-talk.aspx</guid>
            <pubDate>Wed, 25 Mar 2009 12:06:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130385.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/25/posting-the-source-code-for-my-mix09-talk.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130385.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130385.aspx</trackback:ping>
        </item>
        <item>
            <title>My #MIX09 session is available in video</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/21/my-mix09-session-is-available-in-video.aspx</link>
            <description>&lt;p&gt;MIX09 is over, people are slowly going back home. I will be flying home tomorrow, quite a long trip since I will reach Zurich only on Sunday morning.&lt;/p&gt;  &lt;p&gt;I had the great pleasure to see that the video of my talk was posted online! This is great, because I didn't have a huge crowd (what do you expect when you "compete" against and Vertigo and their Playboy talk, and the amazing Corrina Black :))&lt;/p&gt;  &lt;p&gt;But it's OK, because the people at my talk were really great. I felt wonderful during the talk, and even the small issue I had with Visual Studio didn't manage to disturb me much (even though I kind of freaked out when it happened, you can hardly notice it).&lt;/p&gt;  &lt;p&gt;The video is &lt;a href="http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t13f.wmv"&gt;available for download&lt;/a&gt;. You can also stream it (Silverlight required) by clicking on the image below. Have fun!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://videos.visitmix.com/MIX09/T13F"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Working across the client continuum" border="0" alt="Working across the client continuum" src="http://www.galasoft.ch/blogs-all/MyMIX09sessionisavailableinvideo_1047C/image.png" width="657" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130286"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130286" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130286.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/21/my-mix09-session-is-available-in-video.aspx</guid>
            <pubDate>Sat, 21 Mar 2009 20:09:41 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130286.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/21/my-mix09-session-is-available-in-video.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130286.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130286.aspx</trackback:ping>
        </item>
        <item>
            <title>#MIX09 Book Signing: &amp;quot;Silverlight 2 Unleashed&amp;quot;</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/20/mix09-book-signing-quotsilverlight-2-unleashedquot.aspx</link>
            <description>&lt;p&gt;When: &lt;strong&gt;Today, Friday 20th of March 2009, 10:30 - 11:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Where: &lt;strong&gt;MIX2009 Book store (in 3rd Place)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;What: &lt;strong&gt;I will be signing my book there.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Come and bring your friends!!&lt;/p&gt; &lt;img src="http://www.galasoft.ch/images/Silverlight2Unleashed.png" width="184" height="240" /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130262"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130262" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130262.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/20/mix09-book-signing-quotsilverlight-2-unleashedquot.aspx</guid>
            <pubDate>Sat, 21 Mar 2009 04:49:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130262.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/20/mix09-book-signing-quotsilverlight-2-unleashedquot.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130262.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130262.aspx</trackback:ping>
        </item>
        <item>
            <title>Reminder: My talk at #MIX09</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/19/reminder-my-talk-at-mix09.aspx</link>
            <description>&lt;p&gt;Tomorrow Thursday 19th of March 2009&lt;/p&gt;  &lt;p&gt;Location: Delfino 4105&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Working across the .NET continuum&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Come see how to build a continuum of client applications including HTML, AJAX, ASP.NET, Microsoft Silverlight, and Windows Presentation Foundation (WPF) that all consume the same Windows Communication Foundation (WCF) service. Learn how to reuse as much code as possible, how to optimize the development process, and how to address key logistical issues like external servers and cross domain communication.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;See you there!!&lt;/h2&gt; &lt;img title="MIX09" alt="MIX09" src="http://geekswithblogs.net/images/geekswithblogs_net/lbugnion/4797/r_MIX09_BlogBling_InterfaceCreativity_CR4_3.jpg" /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130210"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130210" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130210.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/19/reminder-my-talk-at-mix09.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 13:58:01 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130210.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/19/reminder-my-talk-at-mix09.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130210.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130210.aspx</trackback:ping>
        </item>
        <item>
            <title>#MIX09 Random Pictures</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-random-pictures.aspx</link>
            <description>&lt;h2&gt;&lt;a title="el20090317002" href="http://www.flickr.com/photos/8071066@N04/3365877876/"&gt;&lt;img border="0" alt="el20090317002" src="http://farm4.static.flickr.com/3593/3365877876_71a1538a57.jpg" /&gt;&lt;/a&gt;&lt;/h2&gt;  &lt;h2&gt;At the Venetian&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090318009" href="http://www.flickr.com/photos/8071066@N04/3365884526/"&gt;&lt;img border="0" alt="el20090318009" src="http://farm4.static.flickr.com/3435/3365884526_8378a30195.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318001" href="http://www.flickr.com/photos/8071066@N04/3365881668/"&gt;&lt;img border="0" alt="el20090318001" src="http://farm4.static.flickr.com/3424/3365881668_20314de1b8.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318003" href="http://www.flickr.com/photos/8071066@N04/3365060529/"&gt;&lt;img border="0" alt="el20090318003" src="http://farm4.static.flickr.com/3580/3365060529_686ebcd83a.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318010" href="http://www.flickr.com/photos/8071066@N04/3365063093/"&gt;&lt;img border="0" alt="el20090318010" src="http://farm4.static.flickr.com/3634/3365063093_a294d55bc3.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090317001" href="http://www.flickr.com/photos/8071066@N04/3365877520/"&gt;&lt;img border="0" alt="el20090317001" src="http://farm4.static.flickr.com/3610/3365877520_f320fbdf64.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318002" href="http://www.flickr.com/photos/8071066@N04/3365060157/"&gt;&lt;img border="0" alt="el20090318002" src="http://farm4.static.flickr.com/3623/3365060157_dcb480297a.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Workshop: Design fundamentals for developers&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090317003" href="http://www.flickr.com/photos/8071066@N04/3365056457/"&gt;&lt;img border="0" alt="el20090317003" src="http://farm4.static.flickr.com/3459/3365056457_15de9301b4.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090317004" href="http://www.flickr.com/photos/8071066@N04/3365056773/"&gt;&lt;img border="0" alt="el20090317004" src="http://farm4.static.flickr.com/3626/3365056773_2317a255b9.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090317005" href="http://www.flickr.com/photos/8071066@N04/3365879144/"&gt;&lt;img border="0" alt="el20090317005" src="http://farm4.static.flickr.com/3585/3365879144_6153384d15.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Workshop: Hiking Mt Avalon&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090317011" href="http://www.flickr.com/photos/8071066@N04/3365059361/"&gt;&lt;img border="0" alt="el20090317011" src="http://farm4.static.flickr.com/3623/3365059361_6524b2b0da.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090317010" href="http://www.flickr.com/photos/8071066@N04/3365059023/"&gt;&lt;img border="0" alt="el20090317010" src="http://farm4.static.flickr.com/3658/3365059023_4ec3e7aa2d.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090317007" href="http://www.flickr.com/photos/8071066@N04/3365058021/"&gt;&lt;img border="0" alt="el20090317007" src="http://farm4.static.flickr.com/3623/3365058021_d0a65fa46e.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;My room at the Venetian&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090318004" href="http://www.flickr.com/photos/8071066@N04/3365061007/"&gt;&lt;img border="0" alt="el20090318004" src="http://farm4.static.flickr.com/3611/3365061007_9807cc4dca.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318008" href="http://www.flickr.com/photos/8071066@N04/3365062447/"&gt;&lt;img border="0" alt="el20090318008" src="http://farm4.static.flickr.com/3577/3365062447_2938d17601.jpg" /&gt;&lt;/a&gt;&lt;img border="0" alt="el20090318005" src="http://farm4.static.flickr.com/3580/3365883170_4dcba72254.jpg" /&gt;&lt;a title="el20090318006" href="http://www.flickr.com/photos/8071066@N04/3365883540/"&gt;&lt;img border="0" alt="el20090318006" src="http://farm4.static.flickr.com/3468/3365883540_a485e39119.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318007" href="http://www.flickr.com/photos/8071066@N04/3365883882/"&gt;&lt;img border="0" alt="el20090318007" src="http://farm4.static.flickr.com/3664/3365883882_bfd7ffd7a1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Silverlight insiders tweetup at breakfast&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090318011" href="http://www.flickr.com/photos/8071066@N04/3365885308/"&gt;&lt;img border="0" alt="el20090318011" src="http://farm4.static.flickr.com/3584/3365885308_d78c967243.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;MIX 09 Keynote&lt;/h2&gt;  &lt;p&gt;&lt;a title="el20090318012" href="http://www.flickr.com/photos/8071066@N04/3365885664/"&gt;&lt;img border="0" alt="el20090318012" src="http://farm4.static.flickr.com/3559/3365885664_9b2061df2d.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318013" href="http://www.flickr.com/photos/8071066@N04/3365886038/"&gt;&lt;img border="0" alt="el20090318013" src="http://farm4.static.flickr.com/3569/3365886038_ca716c263b.jpg" /&gt;&lt;/a&gt;&lt;a title="el20090318014" href="http://www.flickr.com/photos/8071066@N04/3365886320/"&gt;&lt;img border="0" alt="el20090318014" src="http://farm4.static.flickr.com/3570/3365886320_b83bd9916c.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130206"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130206" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130206.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-random-pictures.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 08:18:39 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130206.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-random-pictures.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130206.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130206.aspx</trackback:ping>
        </item>
        <item>
            <title>MIX09 Keynote</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-keynote.aspx</link>
            <description>&lt;p&gt;Great energy in the room. Bill Buxton enters and starts talking about how lucky we are to work in Experience Design.&lt;/p&gt;  &lt;p&gt;"What do Canada and Transitions have in common? They are both dominated by the States"&lt;/p&gt;  &lt;p&gt;"It's a not a creative job, it's a negative job, because you start with a 100 great ideas, but end up throwing away 99 of them"&lt;/p&gt;  &lt;p&gt;"You cannot be anal. These things are too important to take seriously."&lt;/p&gt;  &lt;p&gt;"How can we deliver on thin client, on the web, the same rich experience as on rich devices such as Surface and Win7"&lt;/p&gt; &lt;a href="http://www.flickr.com/photos/lbugnion/3365885664/"&gt;&lt;img src="http://farm4.static.flickr.com/3559/3365885664_9b2061df2d.jpg?v=0" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/lbugnion/3365886038/"&gt;&lt;img src="http://farm4.static.flickr.com/3569/3365886038_ca716c263b.jpg?v=0" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/lbugnion/3365886320"&gt;&lt;img src="http://farm4.static.flickr.com/3570/3365886320_b83bd9916c.jpg?v=0" /&gt;&lt;/a&gt; &lt;a href="http://www.flickr.com/photos/lbugnion/3365886622"&gt;&lt;img src="http://farm4.static.flickr.com/3644/3365886622_d137af65e4.jpg?v=0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130200"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130200" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130200.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-keynote.aspx</guid>
            <pubDate>Thu, 19 Mar 2009 05:40:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130200.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-keynote.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130200.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130200.aspx</trackback:ping>
        </item>
        <item>
            <title>#MIX09: Design fundamentals for developers (2)</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-design-fundamentals-for-developers-2.aspx</link>
            <description>&lt;p&gt;Talks about Gestalt (shape), Swiss design in the 1950's, Bauhaus. Then moves on to shapes, color, contrasts. Visual language.&lt;/p&gt;  &lt;p&gt;A page is governed by a number of visual elements.&lt;/p&gt;  &lt;h2&gt;"Figure / Ground"&lt;/h2&gt;  &lt;p&gt;Background vs Message you want to show. The Ground is usually ignored while the Figure is observed. Make the Ground solid to reinforce the Figure.&lt;/p&gt;  &lt;p&gt;The Ground can be overwhelming the Figure, which gives a sense of confusion.&lt;/p&gt;  &lt;h2&gt;"Closure"&lt;/h2&gt;  &lt;p&gt;Visual effects used to create a link to the user. Feels like we're in an inside joke. Playing with shapes to suggest something else (for example a code bare morphs into an umbrella, elements are placed to suggest 3D...)&lt;/p&gt;  &lt;h2&gt;"Whitespace" &lt;/h2&gt;  &lt;ol&gt;   &lt;li&gt;Yes space can be wasted&lt;/li&gt;    &lt;li&gt;Empty space is not (necessarily) wasted space&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;"The ultimate wasted space is overfilled space" Alex White&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Feeling of quality&lt;/li&gt;    &lt;li&gt;Legibility&lt;/li&gt;    &lt;li&gt;Order and structure&lt;/li&gt;    &lt;li&gt;Create interest&lt;/li&gt;    &lt;li&gt;Don't overdo it (but don't underdo it either)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Active space (Movement) vs Passive space (more "boxes")&lt;/p&gt;  &lt;p&gt;Active space is great for logos. They draw attention and make the observer go into the picture.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unfortunately I had to stop following Robby's excellent workshop at this point, and go prepare the one that I was co hosting. But it seems that Robby's workshop was filmed and I hope you can all download the video. It was really interesting!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130175"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130175" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130175.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-design-fundamentals-for-developers-2.aspx</guid>
            <pubDate>Wed, 18 Mar 2009 19:25:16 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130175.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/18/mix09-design-fundamentals-for-developers-2.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130175.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130175.aspx</trackback:ping>
        </item>
        <item>
            <title>#MIX09: Design fundamentals for developers</title>
            <link>http://geekswithblogs.net/lbugnion/archive/2009/03/17/mix09-design-fundamentals-for-developers.aspx</link>
            <description>&lt;p&gt;Speaker: Robby Ingebretsen&lt;/p&gt;  &lt;p&gt;Authors/Designers of reference&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Alex White &lt;/li&gt;    &lt;li&gt;Milton Blazer &lt;/li&gt;    &lt;li&gt;Saul Bass &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The difference between design and art is intent. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Creative brief"      &lt;br /&gt;&lt;/strong&gt;First document, interview with the client &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Pitch"      &lt;br /&gt;&lt;/strong&gt;Presenting your best thinking. Interactive thing. Way of getting aligned with the client &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Wireframe"&lt;/strong&gt;     &lt;br /&gt;Express the information design. Tell a story. Navigation. Shouldn't look like the final product. Ni visual design, focus on information design. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Interaction spec"      &lt;br /&gt;&lt;/strong&gt;Expresses how user will interact with the application &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Motion guide"&lt;/strong&gt;     &lt;br /&gt;Defines animations, guide to the personality and tone of the application &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Visual comp"      &lt;br /&gt;&lt;/strong&gt;Final visual design for the project &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;"Prototype" &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Roles (note: all these intersect)    &lt;br /&gt;&lt;strong&gt;"Visual Designer"&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;"Interaction Designer"&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;"Motion Designer"      &lt;br /&gt;"Information Architect"&lt;/strong&gt; --&amp;gt; If you should hire one guy next to an interaction designer, it should probably be an information architect.     &lt;br /&gt;&lt;strong&gt;"User Interface designer"      &lt;br /&gt;"User experience designer"&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;"Identity designer"      &lt;br /&gt;"Customer service designer"       &lt;br /&gt;"Copy Writer"&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;"Production Designer" &lt;/strong&gt;--&amp;gt; This is the Integrator (woohoo)&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC01154" border="0" alt="DSC01154" src="http://phvj8a.bay.livefilestore.com/y1pPbkf1I8NCV3K2ZkP1JZfT9oUl_CZOBPf1lBl-UWeRN0ZlLaX4rqjQOUOJAmss9l553_8ZA4m7EF6NBHxfYy29w/DSC01154.jpg" width="596" height="450" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130159"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130159" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/lbugnion/aggbug/130159.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Laurent Bugnion</dc:creator>
            <guid>http://geekswithblogs.net/lbugnion/archive/2009/03/17/mix09-design-fundamentals-for-developers.aspx</guid>
            <pubDate>Wed, 18 Mar 2009 06:45:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/lbugnion/comments/130159.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/lbugnion/archive/2009/03/17/mix09-design-fundamentals-for-developers.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/lbugnion/comments/commentRss/130159.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/lbugnion/services/trackbacks/130159.aspx</trackback:ping>
        </item>
    </channel>
</rss>