IgorShare Thoughts and Ideas

Consulting and Training

Archive for May, 2011

Topmost Floating Status Window (with animation on mouse hover)

Posted by Igor Moochnick on 05/30/2011

Sometimes an app needs an indication of it’s activity to be visible to the user at all times. We already have one mechanism – a tray icon. It’s a well-known and a well-documented trick.

Recently more and more apps are starting to show their activity with the top-most floating windows that are sliding into the view when needed. I see a reason to, sometimes, use this trick but I passionately condemn the implementation where a user (me specifically) can’t move this window out of the way where it overlaps with other notifications or the apps that I’m working with (like Skype or WebEx screen sharing for example).

Below is a small WPF XAML sugar that can allow you to have such a floating window, but, please, make sure a user can drag it out of the way or choose (in the settings?) on what side of the screen he want’s this window to doc. If time permits, I’ll post this information later.

<Window x:Class="JiveHub.Windows.FloatWindow"
        Name="ThisFloatWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="FloatWindow" Height="70" Width="100" Top="-70" WindowStyle="None" Topmost="True" BorderThickness="0" AllowsTransparency="True" Background="Transparent">
    
    <Window.Resources>
        <Storyboard x:Key="EmergeWindow">
            <DoubleAnimation Storyboard.TargetName="ThisFloatWindow"
                                     Storyboard.TargetProperty="(Canvas.Top)" To="-20" Duration="0:0:1">
                <DoubleAnimation.EasingFunction>
                    <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
        <Storyboard x:Key="ShrinkWindow">
            <DoubleAnimation Storyboard.TargetName="ThisFloatWindow"
                                     Storyboard.TargetProperty="(Canvas.Top)" To="-50" Duration="0:0:1" BeginTime="0:0:2">
                <DoubleAnimation.EasingFunction>
                    <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </Window.Resources>

    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="ThisFloatWindow"
                                     Storyboard.TargetProperty="(Canvas.Top)" To="-50" Duration="0:0:1" >
                        <DoubleAnimation.EasingFunction>
                            <ElasticEase Oscillations="2" EasingMode="EaseOut" Springiness="3"/>
                        </DoubleAnimation.EasingFunction>
                    </DoubleAnimation>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="Window.GotFocus">
            <BeginStoryboard Storyboard="{StaticResource EmergeWindow}">
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="Window.MouseEnter">
            <BeginStoryboard Storyboard="{StaticResource EmergeWindow}">
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="Window.LostFocus">
            <BeginStoryboard Storyboard="{StaticResource ShrinkWindow}">
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="Window.MouseLeave">
            <BeginStoryboard Storyboard="{StaticResource ShrinkWindow}">
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    
    <Grid>
        <Border Background="Green" CornerRadius="0,0,5,5" />
    </Grid>
</Window>

Advertisements

Posted in Tutorials, WPF | Leave a Comment »

The Most Important Principle of the Lean Software Team

Posted by Igor Moochnick on 05/29/2011

It is essential to talk about the Lean teams and not only about the Lean companies. Let’s be realistic – most of the current companies are not Lean. I predict that it’ll take a whole generation for software companies to shift from the “old ways” to the “new ways” of Software Development and there is not a lot we can do to change this dynamics. It takes a lot of effort to persuade the current management generation that the “new ways” are much better than the “old ones”. Usually the conflict lies in the “ego” world – whose “ego” is bigger.

One of the principles of Lean Software Development is to “Respect People” or, sometimes it’s reads as, “Empower People”. This directly contradicting the “old ways” where the principle was 100% opposite – the strict “top down” management and control. The “top down” development was a result of that principle where the top level requirements were translated into the top-down architecture which, in it’s order, was translated into a components with a strict plan of dependencies and schedules.

In my personal opinion this principle should be at the second place following the very first and essential one “Eliminate Waste”.

Let’s see what this principle is about and why I see this is one of the core ones:

  1. It’s all about Training:
    1. Training is essential to increase your team’s potential.
    2. The team should be a self-sufficient, self-organizing and self-managing organism.
    3. The people should be trained to the point where they can get a requirement and deliver.
    4. The right training will ensure that the delivery is up to your standards, up to industry standards and contains all the necessary artifacts (i.e. documentation, architecture, testing, installation and configuration instructions, etc…)
  2. Move responsibility to the lowest possible level:
    1. Developers are much closer to the “metal” and to the technology.
    2. They know more about the technological problems that may arise during the development process and they can foresee the conflicts in the requirements.
  3. Encourage pride in craftsmanship:
    1. Encourage people to be passionate about what they do and how well they do it.
    2. Encourage the team to get evolved in the community or, at least, in a cross-team communication. Make them share the ideas and present their achievements.

I hope, the points I’ve discussed above, make pretty compelling explanation why we have to Empower the teams and the people. If you still not convinced and you’d like to ask a usual question: “Why do we need the management and the managers”, I’ll give you my favorite answer: “To empower people, to make them succeed and to provide them with all the support they need to fall into the pit of success”.

The managers should:

  1. Remove impediments
  2. Train
  3. Guide
  4. Advise
  5. Support
  6. Empower
  7. Recognize
  8. Foster
  9. Mitigate
  10. Resolve conflicts
  11. Encourage
  12. Catch errors

The managers should never:

  1. Discourage
  2. Punish
  3. Micro-manage
  4. Downplay

All the above is very well summarized by a very old aphorism: “Find good people and let them do their job”. If you, as a manager, found right and smart people – they’ll do the right job. If the people are not “right and smart” – then why were they hired in the first place?

Posted in Agile, Community, Lean, Thoughts, Training | Leave a Comment »

Agile Design: Best Practices – we KNOW it’s possible

Posted by Igor Moochnick on 05/12/2011

Finally got around to clean up the slide deck and improve the presentation flow. Please enjoy the “Best Practices for the Agile Design”.

Posted in Agile, Composite Applications, Continous Integration, Organization, Presentations, Thoughts, Tutorials | Leave a Comment »

Caliburn.micro – Jump start composite applications for WPF, Silverlight and WP7

Posted by Igor Moochnick on 05/09/2011

This weekend we had Boston CodeCamp. Even though the main site for Boston CodeCamps (TheDevCommunity.org) is under construction and major overhaul – the event organization was as smooth as ever. Thanks for all the organizers and attendees.

The two sessions that I ran had a good attendance and a good flow of questions – thanks for everyone who joined!

As promised, I’m going to publish the slides and the source code.

Demo application source code – on my SkyDrive.

Posted in Agile, Caliburn, Composite Applications, MVVM, Presentations, Tutorials | Leave a Comment »

 
%d bloggers like this: