Feeds:
Posts
Comments

Archive for the ‘Uncategorized’ Category

There are three pillars that matter in project management, task management, time management and team management. A good project manager should always have the latest and greatest truth about who is working on what and for how long. In the other hand, a good project management tool should help answer these questions in a simple and effective way. There are numerous project management tools out there, a good part of these tools are utterly complicated! It took me more than a minute to add a simple task to my project. Other tools are too simple. Some of these simple tools have things like due dates on tasks which is not good enough as I can’t get a clear answer on what is left to do on my various projects. After some time wondering around looking for a tool that fits my needs, I decided to go on and write a tool that will suite me best. So I came up with the Online Task Manager which I am using to organize my everyday work and other various projects I have. The tool can be found at https://www.online-task-manager.com

picture

Online Task Manager organizes your tasks into Projects. Every project is board that contains lists. Every list is a set of tasks. You can have as many lists as you wish. Every list contains as many tasks as you want. Tasks can be dragged from one list to the other.

You first need to register into the system. Once in, you will be directed into your main work area as shown in the picture above.

createProject

Start by creating a new project, enter your project main information such as a title, a description and how would you like to track your time spent on this project. Work measurement can be days, hours, weeks, months or anything else that can represented as a number. At the bottom of the page, the system gives you the ability to add new team members into your project. The system is smart enough to look at your other projects and propose to add team mates you have on other project into the current one. You can always invite new team members via email, just enter their email and we will take care of the rest. Added members will be added to your project and can be assigned tasks straight away. Even before they register into the system.

Once your project is created, click on open to open the project board. There are three lists that we create for you by default, “To do“, “Doing” and “Done” you are free to rename these lists to anything you want. We also offer you a possibility of adding a new lists at your will.

taskBoard

To edit a task, click on it, the following dialog will pop up.

taskDialog

This dialog allows you to:

  • Change a task title
  • Change a task color
  • Assign new team members
  • Attach files

The board also offers a powerful instant search. Enter any text into the search box and all tasks will be filtered instantaneously.

Note that changes made on your project will be automatically reflected on all your colleagues computers, the changes propagate instantaneously.

Online Task Manager also gives your the ability to view your project’s timing measurements. As mentioned earlier, every project has an estimation / work unit which can be days, hours, weeks, months or anything else that can represented as a number. Every task has an estimate. Tasks and task lists display their remaining work efforts, this gives you plenty of possibilities as to measuring how much work is left in every category

To view your project dashboard, click on the Dashboard button at the top of your board. This will bring up a graph showing effort spent up to the current date. You can filter out the graph and see who changed what and how.

dashboard

Note that Online Task Manager is now in a beta phase, we would be more than happy to have you give us a try and let us know what you think and how we can change our system to fit your needs.

Read Full Post »

On the way of introducing a compass to my GIS prototype, I came across an implementation idea that I would like to share.

Well structured and designed applications often separate user interface and domain business layers. Data binding is one of the great means introduced in WPF that aims and helps developers efficiently decouple their user interfaces from the rest of the application.

The following XAML code creates a window containing a slider and an image control. The idea is to rotate the image by a rotation angle given by the slider control.
<Window x:Class="Exercises.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="278" Width="356">
<StackPanel Name="stackPanel">
<Label Content="{Binding ElementName=slider, Path=Value}" Height="28" Name="label1" />
<Slider Name="slider" Height="23" Margin="12,58,0,0" Width="307" Maximum="360" ValueChanged="slider_ValueChanged" />
</StackPanel>
</Window>

If you are coming from WinForms world, you would capture the ValueChangedEvent of the slider and do the following:

private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
   double rotationAngle = slider.Value;
   stackPanel.Children.Remove(compassDrawing);
   compassDrawing = DrawImage(rotationAngle);
   stackPanel.Children.Add(compassDrawing);
}
UIElement DrawImage(double rotationAngle) {
   // Create a 100 by 100 image with an upper-left point of (75,75).
   ImageDrawing compassImage = new ImageDrawing();
   compassImage.Rect = new Rect(0, 0, 200, 200);
   compassImage.ImageSource = new BitmapImage(
    new Uri(@"D:\Documents\Visual Studio 2010\Projects\Exercises\Exercises\Images\compassImage.png", UriKind.Relative));
    // Use a DrawingImage and an Image control to display the drawing.
    DrawingImage drawingImageSource = new DrawingImage(compassImage);
    // Freeze the DrawingImage for performance benefits.
    drawingImageSource.Freeze();

    Image imageControl = new Image();
    imageControl.Stretch = Stretch.None;
    imageControl.Source = drawingImageSource;
    imageControl.RenderTransform = new RotateTransform(rotationAngle, compassImage.Rect.Width/2, compassImage.Rect.Height/2);
    // Create a border to contain the Image control.
    Border imageBorder = new Border();
    imageBorder.Child = imageControl;
    return imageBorder;
}

The slider_ValueChanged event handler will replace the previous image in the main stack panel by a newly generated image. The DrawImage() method will draw a new rotated image given an angle as a parameter.

Figure 1 : Non rotated image

Figure 1 shows a non rotated image that is shown either at application start up or when the slider’s value is set to 0 or 360 degrees.

Figure 2 in the other hand shows the result when the slider is set to a given value:

Figure2: Rotated image

If we look back to the code now, there is clearly a smell of a binding possibility out there!

The compass image can have a property, say Rotation which, whenever changed, the image rotates automatically without involving event handlers.

Looking to the UI controls used above, none of them supports this functionality. A great opportunity for us to do some custom data binding.

Read Full Post »