Monthly Archives: September 2006

1 Comment

My favorite blogger Rory Blyth (aka Neopoleon) has joined Channel9. Channel9 will never be the same again! He was a Microsoft employee presenting roadshows in the USA and was thinking about leaving Microsoft. I am glad Rory has decided to stay on in a different job.

I've been reading his blog since PDC03. He has written classics like:

WinFS and your p*rn collection - Making life easier

Check out Rory Blyth: The Exit Interview on Channel9. It's hilarious already. Can't wait to see him doing his first Channel9 interview.

I've never attended one of his presentations, but if you look at this list of Rory quotes they must have been extremely entertaining. As a teaser:

  • “Your skill set did not scale with your ambition.”
  • “…some people drink Honey but I think bee vomit is kind of gross”
  • “Reindeer Purple”
  • “…or whatever inferior scripting language you want to use”
  • “Whether you're using punch cards or people in the back writing real fast”
  • “Clipboard inheritance” - a term used to describe copying and pasting code to simulate inheritance, what a genius!
  • “I can scratch that off” - referring to a giveaway prize, left over from a previous conference that had a non-Microsoft label on it.
  • “…and other stuff like that” - summing up 2 slides that he skipped right through

BTW: Even though Rory is very in touch with his feminine side: he is not gay, he just acts like he is 😉

1 Comment

[Update 2006-12-05: Changed the download location of NeaveStrobe.xaml to my new domain which serves the right mime type application/xaml+xml for .xaml files.]

Ever since I saw the Neave Strobe I wanted to create a Windows Presentation Foundation version. The original version uses Flash. The Neave Strobe is an optical illusion. Stare at the middle of the strobing lines for 20 seconds and then look away. You will be amazed at what you see.

Staring at the image below doesn't work of course, because the lines don't move 🙂

If you have the .NET Framework 3.0 installed you can view my animated WPF version: NeaveStrobe.xaml.

It doesn't work when you view this this link directly in Internet Explorer. The reason is that the web server that is hosting my XAML file, does not return the mime type application/xaml+xml for .xaml files. To work around this, download the file and save it to your local disc. Then open it in Internet Explorer.

Alternatively, you can view it in XamlPad (included in the Windows SDK). Or better, use Charles Petzold's XAML Cruncher. This program is click-once deployed to your computer if you click here.

To create the XAML file I tried using Expression Interactive Designer and "Cider". They didn't really help, so I ended up hand-coding most of it. You can see the code below:

 

<?xml version="1.0" encoding="utf-8" ?>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="DocumentRoot"
    WindowTitle="Neave Strobe" Width="400" Height="400">
  <Page.Resources>
    <Style TargetType="{x:Type Line}" x:Key="LineStyle">
      <Setter Property="Stroke" Value="Black"/>
      <Setter Property="StrokeThickness" Value="18"/>
    </Style>

    <Style TargetType="{x:Type Line}" x:Key="LineStyle2">
      <Setter Property="Stroke" Value="Black"/>
      <Setter Property="StrokeThickness" Value="18"/>
    </Style>

    <Style TargetType="{x:Type Canvas}" x:Key="BlockStyle">
      <Setter Property="Width" Value="200"/>
      <Setter Property="Height" Value="200"/>
    </Style>

    <Style TargetType="{x:Type Grid}" x:Key="GridSize">
      <Setter Property="Width" Value="400"/>
      <Setter Property="Height" Value="400"/>
    </Style>

    <Grid x:Key="LineGrid" RenderTransformOrigin="0.5,0.5">
      <Grid.RenderTransform>
        <TransformGroup>
          <TranslateTransform X="0" Y="0" x:Name="LineTransform" />
        </TransformGroup>
      </Grid.RenderTransform>
      <Grid.Children>
        <Line X1="-25" Y1="-25" X2="100" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="25" Y1="-25" X2="150" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-75" Y1="-25" X2="50" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-125" Y1="-25" X2="0" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-175" Y1="-25" X2="-50" Y2="100"
          Style="{StaticResource LineStyle}" />
      </Grid.Children>
    </Grid>

    <Grid x:Key="LineGrid2" RenderTransformOrigin="0.5,0.5">
      <Grid.RenderTransform>
        <TransformGroup>
          <TranslateTransform X="0" Y="0" x:Name="LineTransform2" />
        </TransformGroup>
      </Grid.RenderTransform>
      <Grid.Children>
        <Line X1="-25" Y1="-25" X2="100" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="25" Y1="-25" X2="150" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-75" Y1="-25" X2="50" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-125" Y1="-25" X2="0" Y2="100"
          Style="{StaticResource LineStyle}" />
        <Line X1="-175" Y1="-25" X2="-50" Y2="100"
          Style="{StaticResource LineStyle}" />
      </Grid.Children>
    </Grid>

    <VisualBrush x:Key="DiagonalLines" x:Name="DiagonalLines" 
      Viewbox="0,0,50,50" 
      ViewboxUnits="Absolute" 
      Viewport="0,0,0.1,0.1"
      ViewportUnits="RelativeToBoundingBox" 
      TileMode="Tile" 
      AlignmentX="Center"
      AlignmentY="Center"
      Visual="{StaticResource LineGrid}" />

    <VisualBrush x:Key="DiagonalLines2" x:Name="DiagonalLines2" 
      Viewbox="0,0,50,50" 
      ViewboxUnits="Absolute" 
      Viewport="0,0,0.1,0.1"
      ViewportUnits="RelativeToBoundingBox" 
      TileMode="Tile" 
      AlignmentX="Center"
      AlignmentY="Center"
      Visual="{StaticResource LineGrid2}" />

    <Storyboard x:Key="LineStoryboard" >
      <DoubleAnimation Storyboard.TargetProperty="X" BeginTime="00:00:00" 
         Storyboard.TargetName="LineTransform" 
      From="0" To="100" Duration="0:0:1" RepeatBehavior="Forever" />
      <DoubleAnimation Storyboard.TargetProperty="X" BeginTime="00:00:00" 
         Storyboard.TargetName="LineTransform2" 
      From="100" To="0" Duration="0:0:1" RepeatBehavior="Forever" />
    </Storyboard>

    <Grid x:Key="QuadLineGrid" VerticalAlignment="Top" Style="{StaticResource GridSize}">

      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
      </Grid.RowDefinitions>

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="1" Grid.Column="1" RenderTransformOrigin="0.5,0.5" 
          Canvas.Background="{StaticResource DiagonalLines}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="90"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>

      <Canvas Style="{StaticResource BlockStyle}"
        Grid.Row="0" Grid.Column="1" 
        Grid.ColumnSpan="1" Grid.RowSpan="1"
        Canvas.Background="{StaticResource DiagonalLines}" />

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="1" Grid.Column="0" 
          Grid.ColumnSpan="1" Grid.RowSpan="1" RenderTransformOrigin="0.5,0.5"
          Canvas.Background="{StaticResource DiagonalLines}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="180"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="0" Grid.Column="0" 
          Grid.ColumnSpan="1" Grid.RowSpan="1" RenderTransformOrigin="0.5,0.5" 
          Canvas.Background="{StaticResource DiagonalLines}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="270"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>

    </Grid>

    <Grid x:Key="QuadLineGrid2" VerticalAlignment="Top" Style="{StaticResource GridSize}">
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
      </Grid.RowDefinitions>

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="1" Grid.Column="1" RenderTransformOrigin="0.5,0.5" 
          Canvas.Background="{StaticResource DiagonalLines2}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="90"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="0" Grid.Column="1" 
          Grid.ColumnSpan="1" Grid.RowSpan="1"
          Canvas.Background="{StaticResource DiagonalLines2}">
      </Canvas>

      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="1" Grid.Column="0" 
          Grid.ColumnSpan="1" Grid.RowSpan="1" RenderTransformOrigin="0.5,0.5"
          Canvas.Background="{StaticResource DiagonalLines2}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="180"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>


      <Canvas Style="{StaticResource BlockStyle}"
          Grid.Row="0" Grid.Column="0" 
          Grid.ColumnSpan="1" Grid.RowSpan="1" RenderTransformOrigin="0.5,0.5" 
          Canvas.Background="{StaticResource DiagonalLines2}">
        <Canvas.RenderTransform>
          <TransformGroup>
            <RotateTransform Angle="270"/>
          </TransformGroup>
        </Canvas.RenderTransform>
      </Canvas>
    </Grid>

    <VisualBrush x:Key="QuadLineBrush" x:Name="QuadLineBrush"      
    Visual="{StaticResource QuadLineGrid2}" Stretch="None" />

  </Page.Resources>

  <Page.Triggers>
    <EventTrigger RoutedEvent="Canvas.Loaded">
      <BeginStoryboard Storyboard="{StaticResource LineStoryboard}">
      </BeginStoryboard>
    </EventTrigger>
  </Page.Triggers>

  <Canvas>
    <StaticResource ResourceKey="QuadLineGrid"/>
    <Ellipse Width="200" Height="200" Margin="100,100">
      <Ellipse.Fill>
        <SolidColorBrush Color="White"/>
      </Ellipse.Fill>
    </Ellipse>
    <Ellipse Width="200" Height="200" Fill="{StaticResource QuadLineBrush}" Margin="100,100" />
  </Canvas>

</Page>

1 Comment

Even though I blog a lot about installing things and trying out new Microsoft technology, my day job is being an application architect.

Today, I would like to state I am an Agile Architect.

Sam Gentile has a wonderful blog post titled Being an Agile Architect. I quote:

(...) Agile Architects CODE ALL THE TIME and SIT WITH THE WHOLE TEAM and not on the mount. We use Agile Modeling. We use Simple Models with Sketches, Whiteboards, Pair Programming rather than Rational Rose UML models because the value-add is the business value we generate in code (Software Is Your Primary Goal) not some UML diagram. I am an Agile Architect.

So Agile teams don't be afraid of us. After all we're guides on the same journey.

Hopefully Matthijs, the developer on the team for our Rabobank TV project, can agree that I practice what I preach 😉 At least on that project.

During my holiday, another project will start for which I proposed the high-level application architecture. That was a document containing a lot of words but 0% code. Nevertheless still pretty down to earth, and nothing like what Architecture Astronauts produce. My favorite piece from that post by Joel Spolsky:

Sometimes smart thinkers just don't know when to stop, and they create these absurd, all-encompassing, high-level pictures of the universe that are all good and fine, but don't actually mean anything at all. 

These are the people I call Architecture Astronauts. It's very hard to get them to write code or design programs, because they won't stop thinking about Architecture. They're astronauts because they are above the oxygen level, I don't know how they're breathing.

Tim Sneath has a more complete list of all Windows Vista RC1 and .NET Framework 3.0 related downloads than I had.

For your convenience I have copied his list:

I am still running Windows XP Professional as the main OS on my home machine. I can't fully switch to Windows Vista yet, because the Office 2007 Beta 2 Technical Refresh is not available yet. Office 2007 Beta 2 is not compatible with Windows Vista RC1 and I need my Outlook 2007!

So I installed everything listed above (sans Vista of course) on Windows XP.

My XP installation has carried over 10 different alpha, beta, CTP and RTM builds of VS "Whidbey" (VS 2005), "Yukon" (SQL 2005) and WinFX (.NET 3.0) since 2003. In the past, installation has sometimes been troublesome, but I always managed to get it working.

This time it was the easiest ride ever: the WinFX Beta 2 stuff deinstalled without problems and the RC1 stuff installed just fine without a single reboot in between.

Oh, and one other reason why I am not ready to fully switch to Windows Vista yet: I want Windows Vista Ultimate, but I am not willing to pay $399 for it or buy a new machine with an OEM license. Microsoft has not yet announced if the Ultimate Edition will be included in my MSDN Subscription.

1 Comment

Sunday, I am going on a one-week trip to the South of France, near Carcassonne. The trip is organized by the Dutch travel organization SNP. Here is the description of the trip (in Dutch). The following pictures are from the SNP site (photograph taken by Ben van Hecke):

 Map of the region in the South of France where I am going on holiday Picture of the walls of Carcassone

After the trip I think I will take the plunge and finally sign up for a Flickr account to publish some of my photographs online. Especially now that I have seen the Flickr plugin for Windows Live Writer on RJ's blog.

BTW: Due to the heavy flood of comment spam here at BloggingAbout.NET, comment moderation is switched on on my blog. If you want to make a comment on one of my blog posts and have it appear immediately, please register as a user first. Otherwise anonymous comments will not be published until I get back and get the opportunity to do so.

Microsoft's Rico Mariani has two very interesting posts that shed some light on when to prefer structs (value types) and public fields over classes (reference types) and properties. He explains why it is a good thing to break Microsoft's Design Guidelines (partially enforced by FxCop) in certain situations.

If you have some time to spare, go read the first post to ponder on the questions he asks. Then check out the comments made to that post. Finally, read Rico's answers to the questions in the second post.

If you want to cut to the chase, go right to the second post.

1 Comment

Anyone can now download the RC1 build 5600 of Windows Vista. However, to install it you need to have a valid product key. If you have a product key for Beta 2 of Windows Vista you are good to go. There is only one ISO image (or two if you include the 64-bit version), but there are different product keys for the different editions of Windows Vista. Of course, I chose the Ultimate one.

Check out this post on the Windows Vista Team Blog for some more details about the RC1 release.

I installed the RC1 build on three machines without any problems. Installation is pretty fast if you do a clean install on a separate partition and it should take no more than about 30 minutes with few questions asked.

Compared to the pre-RC1 build 5536 that I installed previously, I noticed a couple of changes. For example, the Aero Glass interface has become more stable. There is less flickering of the screen when you change display modes, like when you start Windows Media Center or start a slide show. The experience has become smoother.

Although Aero Glass is nice, this UI looks much more impressive. Microsoft demoed Flip 3D at PDC03 and it will be available early 2007, so catching up with this should take Microsoft no more than 3 years, right? 😉

Microsoft has released the first Release Candidate (RC1) of WinFXthe .NET Framework 3.0 on September 1, 2006. It is the same version as the one that comes preinstalled with Windows Vista pre-RC1 (build 5536) or RC1 (build 5600).

Download .NET Framework 3.0 RC1.
Download .NET Framework 3.0 RC1 SDK.
Download Visual Studio 2005 Extensions for .NET Framework 3.0 RC 1.

You can sign a Go-Live License agreement for RC1 to allow you to use the release candidate in a live operating environment.

The RC1 runtime download is 48.7 MB in size. The June 2006 CTP was 45.8 MB in size. The download contains the setup for the original .NET Framework 2.0 that was digitally signed by Microsoft on September 23, 2005.

.NET 3.0 adds the following to .NET 2.0:

  • Windows Communication Foundation (WCF)
  • Windows Workflow Foundation (WWF)
  • Windows Presentation Foundation (WPF)
  • Windows CardSpace (WCS)
  • Windows Imaging Components (WIC)
  • XML Paper Specification Components (XPS)
  • Microsoft Core XML Services 6.0 (MSXML6)

 [Updated 2006-09-07: The Visual Studio 2005 Extensions for .NET Framework 3.0 RC1 are now available for download.]