Showing posts with label Certifications. Show all posts
Showing posts with label Certifications. Show all posts

Tuesday, May 22, 2012

Microsoft Certifications

The certification marathon is complete.  The process was long and extremely difficult.  The exams themselves are very detailed and require some fairly in-depth knowledge of the specific environment / technology being covered.  I received the following six certifications:
  • MCTS - Accessing Data with .Net Framework 4.0
  • MCTS - .Net Framework 4 - Web Application Development
  • MCTS - WCF Development with .Net Framework 4.0
  • MCTS - .Net Framework 4 - Windows Application Development
  • MCPD - Designing and Developing Windows Applications using .Net Framework 4.0
  • MCPD - Designing and Developing Web Applications using .Net Framework 4.0
I learned many new things in regard to each of these items.  Had a bunch of 'light-bulb moments' for possible directions or possible fixes to existing items.  I want to set the proper expectations as well; these certifications were hard to achieve.  In my group, only two of these tests had the entire class pass the first time.  Our failure rate was around 25% on the first take and some as high as 50%.  These are not exams that you go into with a working knowledge of the platforms and pass.  They are much more in-depth than just a working knowledge.  The WCF exam is probably the most difficult test of all the TS level exams.  The MCPD exams are even tougher that the TS exams.  You are presented test scenarios that are the equivalent of business requirements and then must answer a set of questions on technical implementation.  The trick on those is that very few of the answers are absolutely wrong, so you have to choose the one that is 'best', based on wording of the questions.  For instance, there are a couple of questions where you are presented with four 'correct' answers, meaning they all fix the scenario, but the question asks for the single answer that would limit the regression testing the most.

For those of you keeping score, or just wondering, I passed all of my exams the first time (passing grade was 700/1000) .  My average score was just above 870/1000 with a high of 978/1000 (MCPD Windows).  I hope to leverage the new knowledge and intense training on some new platforms very soon.

Sunday, May 6, 2012

MCTS Windows Development with .NET 4

The first certification I am pursuing is the MCTS in Windows application development.  Coming in with a few years of C# winforms development in hand, I thought this one would be fairly straightforward.  I soon realized that having in-depth exposure in my world doesn't always equate to having wide exposure in the rest of the world.  The expectations are high for this session.  The workload amounts to 12-13 hours a day between labs, studying and practice tests.  I have read a five hundred and eighty page text book in just over two days and have found that at least 65% of it has been fairly new territory.  The MCTS certification is heavily slanted to WPF.  It seems like Microsoft is pushing the technology toward this platform as the standard for development.  After having some time to delve into it, the reason becomes obvious.  The rich presentation layer that can be created on this platform is powerful, scalable and adaptable.  The xaml itself is not unlike any other markup, and if you can read and follow html, xml, etc., you will be fine reading through xaml and understanding the intent of the code.  What stands out to me regarding this platform is the inherent dynamism of the GUI itself.  The ease with which we can create a highly usable and intuitive interface is really quite impressive.  Take the following example (borrowed from the class):

    <Window.Resources>
        <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
            <Grid>
                <Ellipse Name="Ellipse1" Stroke="{TemplateBinding BorderBrush}"
         StrokeThickness="{TemplateBinding BorderThickness}">
                    <Ellipse.Fill>
                        <RadialGradientBrush GradientOrigin=".5, .5">
                            <GradientStop Color="Red" Offset="0" />
                            <GradientStop  Color="Orange" Offset=".25" />
                            <GradientStop  Color="Blue" Offset=".5" />
                            <GradientStop  Color="Yellow" Offset=".75" />
                            <GradientStop Color="Green" Offset="1" />
                        </RadialGradientBrush>
                    </Ellipse.Fill>
                </Ellipse>
                <ContentPresenter HorizontalAlignment="Center" 
         VerticalAlignment="Center"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="Ellipse1" Property="Fill">
                        <Setter.Value>
                            <RadialGradientBrush GradientOrigin=".5, .5">
                                <GradientStop Color="LightCoral" Offset="0" />
                                <GradientStop  Color="LightSalmon" Offset=".25" />
                                <GradientStop  Color="LightBlue" Offset=".5" />
                                <GradientStop  Color="LightYellow" Offset=".75" />
                                <GradientStop Color="LightGreen" Offset="1" />
                            </RadialGradientBrush>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter TargetName="Ellipse1" Property="Fill">
                        <Setter.Value>
                            <RadialGradientBrush GradientOrigin=".5,.5">
                                <GradientStop Color="Gray" Offset="0" />
                                <GradientStop  Color="LightGray" Offset=".25" />
                                <GradientStop  Color="Black" Offset=".5" />
                                <GradientStop  Color="White" Offset=".75" />
                                <GradientStop Color="DarkGray" Offset="1" />
                            </RadialGradientBrush>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard AutoReverse="True">
                            <DoubleAnimation To="0" Duration="0:0:0.1"   
             Storyboard.TargetProperty="Width" />
                            <DoubleAnimation To="0" Duration="0:0:0.1" 
             Storyboard.TargetProperty="Height" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Template" Value="{StaticResource ButtonTemplate}" />
        </Style>
    </Window.Resources>

This creates a button template that applies a style (very ugly) and behavior that can be associated with any button.   By including the following style block and associated setters, the template is automatically applied to all buttons contained in the current window.

<Style TargetType="{x:Type Button}">
  <Setter Property="Template" Value="{StaticResource ButtonTemplate}" />
</Style>  

If I wanted to apply this template and style to the entire application, I would simply move these snippets to the app.xaml.  Another level of dynamism comes by allowing you to link to external xaml files as application resources and swap them.  So, not only could you customize the look and feel of the application, you can dynamically customize the inherent behavior of elements at the application level.  There is a ton more to get into with this kind of thing, and we will at a later date.  Other possibilities include, command triggers, gestures, framed animations and much more.  It has been very interesting to date and I will bring back some renewed focus on pushing the ui envelope within our applications.