Reflections on the Microsoft WPF Certification BETA Exam (70-502)
Posted by igormoochnick on 01/25/2008
[ Update: just got a word that I've passed the test. Good luck to those who plan to take the test. ]
Today I’ve tried Microsoft’s WPF Certification BETA exam. The exam is still rough: a lot of confusing questions, a bunch of questions with more than one correct answer and a bunch with no correct answer at all. At the end of the exam I was asked to provide my comments and I was happy to, but … I was timed on this portion as well !!! They give you a very limited time to review all the questions again in a very short time. The same amount of questions that took me 2 hours to complete. This was the most bizarre experience ever – they ask for our opinion and do not want to listen to you. How do you like that?!!
If you want to be prepared for the exam, try to replicate my result on the left. It’ll give you a great deal of experience and will cover about 50% of the needed skills. If you’ll make sure that you can retrieve all the presented information from an external source as well as let a user to select a single item from a collection – this will cover the biggest remainder of the needed skills.
Make sure to check the preparation guide for exam 70-502 for a detailed list of skills.
For the lazy ones I provide the XAML code and the running app. I do not claim that this is the most beautiful solution, but it’s the most elegant and short one I’ve came up with.
<?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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2006" mc:Ignorable="d"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="MarilynSite.Page1" x:Name="Page"
WindowTitle="Page"
FlowDirection="LeftToRight"
Width="Auto" Height="Auto"
WindowWidth="740" WindowHeight="680">
<Page.Resources>
<Canvas x:Key="BookWithReflection" Width="138" HorizontalAlignment="Left">
<Canvas x:Name="MainSource">
<Border BorderThickness="2,2,2,2" CornerRadius="4,4,4,4" Width="137.702" Height="184">
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFFAAA00" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="1"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Image Source="http://marilyn-armstrong.com/yahoo_site_admin/assets/images/FromTheBridge.35063808_std.gif" Width="138.702" Height="205" />
</Border>
<Label Content="The 12-foot Teepee" FontWeight="Bold" Foreground="#FFFFFFFF" FontSize="12" Canvas.Top="33" Canvas.Left="5" RenderTransformOrigin="0.5,0.5">
<Label.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="2.5"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Label.RenderTransform>
</Label>
<Label Content="Merilyn Armstrong" FontWeight="Bold" Canvas.Top="83" Canvas.Left="8">
<Label.Foreground>
<LinearGradientBrush EndPoint="0.886,0.516" StartPoint="0.071,0.516">
<GradientStop Color="#FF000000" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="1"/>
</LinearGradientBrush>
</Label.Foreground>
</Label>
</Canvas>
<Rectangle Height="100" Width="136" HorizontalAlignment="Left" VerticalAlignment="Bottom" RenderTransformOrigin="0.5,0.5" d:LayoutOverrides="VerticalAlignment" Canvas.Top="171">
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="-1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="30"/>
</TransformGroup>
</Rectangle.RenderTransform>
<Rectangle.OpacityMask>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="Transparent" Offset="0"/>
<GradientStop Color="#99666666" Offset="1"/>
</LinearGradientBrush>
</Rectangle.OpacityMask>
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=MainSource}" />
</Rectangle.Fill>
</Rectangle>
</Canvas>
<Storyboard x:Key="RockCover" RepeatBehavior="Forever" AutoReverse="True">
<Rotation3DAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="geometryModel3D" Storyboard.TargetProperty="(Model3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)">
<SplineRotation3DKeyFrame KeyTime="00:00:00">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D Angle="20" Axis="0,1,0"/>
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
<SplineRotation3DKeyFrame KeyTime="00:00:05">
<SplineRotation3DKeyFrame.Value>
<AxisAngleRotation3D Angle="20" Axis="0,-1,0"/>
</SplineRotation3DKeyFrame.Value>
</SplineRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
<Page.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource RockCover}"/>
</EventTrigger>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource RockCover}"/>
</EventTrigger>
</Page.Triggers>
<Page.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF000000" Offset="0"/>
<GradientStop Color="#FF7C7C7C" Offset="1"/>
<GradientStop Color="#FF4D4D4D" Offset="0.586"/>
<GradientStop Color="#FF959595" Offset="0.538"/>
</LinearGradientBrush>
</Page.Background>
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.6*"/>
</Grid.ColumnDefinitions>
<Viewport3D Margin="8,29,0,28" RenderTransformOrigin="0.5,0.5" Width="270" HorizontalAlignment="Left" Grid.Column="0">
<Viewport3D.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Viewport3D.RenderTransform>
<Viewport3D.Camera>
<PerspectiveCamera FieldOfView="45" FarPlaneDistance="100" LookDirection="0,0,-4" NearPlaneDistance="0.1" Position="0,0,3.4142135623731" UpDirection="0,1,0"/>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D x:Name="LightSource">
<ModelVisual3D.Content>
<AmbientLight />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="geometryModel3D">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
<ScaleTransform3D ScaleX="1" ScaleY="1" ScaleZ="1"/>
<RotateTransform3D d:EulerAngles="0,0,0"/>
<TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
<TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Visual="{StaticResource BookWithReflection}" ViewboxUnits="RelativeToBoundingBox" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="-.9,-2,0 .9,-2,0, .9,2,0 -.9,2,0" TriangleIndices="0 1 2, 0 2 3" TextureCoordinates="0,1 1,1 1,0 0,0" />
</GeometryModel3D.Geometry>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
<Grid Margin="8,8,8,8" Grid.Column="1" Background="#FFCCCCCC">
<FlowDocumentReader>
<FlowDocument ColumnWidth="300" IsOptimalParagraphEnabled="True" IsHyphenationEnabled="True">
<Section FontSize="16" Foreground="Black">
<Paragraph>
<Figure Width="180" Background="Silver"
HorizontalAnchor="PageLeft"
HorizontalOffset="0" VerticalOffset="40">
<Paragraph IsHyphenationEnabled="True" FontSize="12"
FontStyle="Italic" TextAlignment="Left">
"Nevertheless, Armstrong’s distinctive pathos in the way her narrative flowingly handles an unredeemable childhood with an adulthood filled with love and longing but continued financial and health-related chaos is indeed a winning account of elusive self-discovery…the results are refreshingly therapeutic."
</Paragraph>
<Paragraph FontSize="8">"</Paragraph>
<Paragraph FontWeight="Bold" FontSize="12">– Frank Ochieng, World Voice News"</Paragraph>
</Figure>
Coping with the emotional and spiritual debris left by her horribly abusive childhood while simultaneously grappling with a seemingly endless parade of crises, Maggie decides its time to change her world by changing herself.
</Paragraph>
<Paragraph>
She launches an improbable quest for spiritual rebirth by building a teepee in the woods behind her home in New England. Amidst the tall oaks, clawing blackberry brambles and voracious mosquitoes, she forges her own unique path to salvation. It’s not a traditional path, but it’s the only path Maggie can follow.
</Paragraph>
<Paragraph>
<Floater Width="180" Background="Silver">
<Paragraph IsHyphenationEnabled="True" FontSize="12"
FontStyle="Italic" TextAlignment="Left">
"Marilyn’s life events, including her current day spiritual journey involving her family and the building of a backyard teepee, make for a reflective, honest and very touching story. It is a life of pain, reflection, tears, family and laughter, presented by someone who exhibits fine skills as a writer. Here is one book about life’s challenges and getting through them that will not only make you think … it will make you feel."
</Paragraph>
<Paragraph FontSize="8">
</Paragraph>
<Paragraph FontWeight="Bold" FontSize="12">– Jordan Rich, WBZ 1030AM, Host - "The Jordan Rich Show"</Paragraph>
</Floater>
As the teepee goes up, Maggie grows up. Better late than never, she finally frees herself from her haunted past. Her sense of humor lends her strength as she struggles up the rocky road to healing and peace.
</Paragraph>
<Paragraph>
At the same time shocking, witty, raw and timely, "The 12-Foot Teepee" will keep you turning pages as Maggie’s quixotic journey of self discovery and healing unfolds.
</Paragraph>
</Section>
</FlowDocument>
</FlowDocumentReader>
</Grid>
</Grid>
</Page>




70-502 - Congratulations to … me !!! « IgorShare Weblog said
[...] I’ve mentioned in my previous post Reflections on the Microsoft WPF Certification BETA Exam (70-502) – it was not a hard exam but it definitely covered a lot of [...]
igormoochnick said
Wow. This article got marked with a “private” flag somehow – now everything should work.
70-502 said
Perfect!!! This really helps a lot , i am going for this 70-502 exam now.