Tuesday, June 24, 2014

Visualize your goals with Goalscape

Setting goals in life is mandatory for all of us. Though, we can chalk out plans and work towards achieving them, we still don’t get the complete picture of how much we have covered or how much is still left to accomplish the goal. A goal tracker shall be a good solution; but a tracker which displays the progress visually would be the appropriate choice; and Goalscape does that perfectly.


Goalscape is best defined on its website, as visual goal management software; to develop and communicate the key elements of any complex project: overall structure, priorities and progress tracking. It’s an Adobe Air application; available for the desktop and the web ( Goalscape Connect).

Please see below, the goals and sub goals I have defined for a product. Goalscape's circular format reinforces the fact that resources (especially TIME) are limited: time spent for one goal can’t be spent anywhere else.

Using Goalscape

Goalscape Desktop

The tool has a very user friendly and intuitive interface. The primary goal is made up of sub goals and neighbours. While sub goals can be considered as a child node of the parent goal; neighbours are in the same level as other sub goals.
The picture below illustrates the use of the primary goal, subgoals and neighbours.

Primary Goal - “Product”
Sub Goal –“Vision”, “Pricing” , “Development”, “Support”, “Marketing” – they are also neighbours.

There are a several things to note in the picture. One can add notes, resources and tags to a particular goal. Sliders can be used to set the importance and progress. Resource management can also be done, by specifying Responsible, Start Date and End Date.

The sub goal “Need” has a grey arc, which depicts the progress of the respective goal.  Progress aggregates upwards into the parent and higher level goals (all the way to the Main Goal at the centre) in proportion to each subgoal's importance.

The size of each goal's slice indicates its importance (relative to its neighbours).   In the picture below, I have set different importance for the sub goals -  Need ( 31 % ), Identifying users ( 28 % ), Value ( 18 % ) , Crowdsourcing ( 9 % ), Product Continuity ( 14 % ). Since the goal slice of “Need” has the highest importance level, it is followed by the others.  All the sub goals are important, but imagine the plight of an excellent product, which is needed either by very few people or by none.

Filtering by Highlighting

The Highlight feature is a filtering option in Goalscape. Probably the word “highlight” is more appropriate in the Goalscape context, as the tool only filters out the goals matching the dates, resources and tags.

I have added the tag “stakeholders” and “users” to Need and Product Continuity; as a product shall cease to exist if both of them don’t want the product.  In the highlight bar, when I highlight both the tags, only “Need” and “Product Continuity” are being displayed in white, while the others which don’t have the tag are being greyed out.  The highlighting can also be done for dates and responsibilities.

Exporting and Importing

Goalscape also allows user to export their Goalscape’s to PNG, PDF , DOCX,  Mindjet Mindmaps and several other formats. I found the export feature for DOCX and PDF interesting, as a report of the complete goals, sub goals, importance and other goal related facts are generated. Please find the exported “Product Roadmap”  for your understanding.

The import feature, allow Microsoft Project XML and Mindjet mind maps to be imported to Goalscape. I find importing MS Project interesting, as Goalscape shall provide a visual representation, rather than the boring GANTT charts. I have not used the import feature, but I believe it shall work as expected.

Goalscape Connect

Goalscape Connect is the web version and useful for people / teams who want to collaborate the goals with their colleagues. Besides having all the features of the desktop version, it has the real time collaborative features like uploading Goalscape file, chat and sharing.

The Connect version has the following features:-

•  The online project is always the latest version.
•  All participants can access and update the same project at the same time
•  Project administrators can set access privileges for participants individually (View, Edit, Admin).
• Users working on a shared project can see who else is in it and what they are doing (with appropriate warnings about simultaneous updates to the same goal)
•  A central organisational model can be rolled out, for people in different geographies to build their own specific implementations:  and hence ideal for distributed teams and remote coaching.
•  Goal Chat: instant messaging on individual goals, with 'in line' attachments and email notification options.

My Wish List

I would like to see the following features in upcoming versions of Goalscape
        a)    Change the background colour of goal slices.
        b)    Set the font of the goal title in bold.
        c)    Would like to have a Justify option for the Notes section.

Now, it’s time for you, to try out Goalscape, and post your comments. If you feel you would like more features please let them know by filling up the online survey.

I believe you shall like it, as much as I do.

Sunday, April 27, 2014

Displaying the column names for MS Project in C#

Whilst, MSDN provides a very updated and informative developer reference for MS Office  suite in general; it seems to have missed out the same for MS Project .

I was recently developing a MS Project addin in C# using VSTO, and came across several challenges ; but I am happy to say I completed the addin in due time.

The following code displays the name of the columns in the currently open project .

   MSProject.Project activeProject  = Globals.ThisAddIn.Application.ActiveProject;
    MSProject.Table prjTable = prjTable.TaskTables[activeProject  .CurrentTable];

    for (int i = 1; i <= prjTable .TableFields.Count; i++)
         MSProject.PjField field = objTable.TableFields[i].Field;
         string colName  = Globals.ThisAddIn.Application.FieldConstantToFieldName(field).ToString();

    if (activeProject  != null)
        Marshal.ReleaseComObject(activeProject  );
        objProject = null;

    if (prjTable != null)
       Marshal.ReleaseComObject(prjTable );
       prjTable = null;

There are two other points that should be noticed in this post :-

a) Usage of for loop instead of foreach loop. According to OOM.NET: Part 2 - Outlook Item Leaks , foreach  loops causes a memory leak while for does not. I am following this principle for all the Office addins.

b) Usage of Marshal.ReleaseComObject - Its usage is mandatory as all the objects being dealt with are COM objects


Saturday, May 04, 2013

Analayze your code with Ndepend

Ndepend is a static code analyzer  for .NET projects. It performs analysis of the project codebase;  and provides metrics, graphs and reports ; all of which helps a developer to enhance the code quality. I would like to  thank Patrick , for developing it, and also for providing a licence to me.

Post code analysis, Ndepend provides several tools to better your code . 

1) Dependency Graph - As the name implies, the graph  displays the caller and the callee in the project. This is important as it provides a birds eye view , when the code base is large.

2) Queries and Rules explorer - This is an amazing tool , which displays areas where the code needs improvement. The explorer addresses several sections - architecture, design considerations, dead code etc . I am providing a snapshot below :-

Once a rule is selected ; the query and rules editor automatically creates a CQLinq syntax , executes the query and displays the result. Alliteratively , the developer can also write a query ( for those not covered by Ndepend ) and get respective results.

3) Metrics - The Metrics window displays the usage and relevance of the code being analyzed.  The developer can use the metrics, to view where are the methods being called directly or indirectly. Besides methods, developers can also view metrics of namespaces , fields  ; which come in very handy to understand calling sequences and workflow in large projects.

4) Dependency Matrix - The dependency matrix is a visual representation of the methods being used, and the methods using them . I am posting a screenshot below .

The following is the representation of the green and blue colour .

The Matrix Cell is Green because the method (in column) is used by the method (in row). 

The Matrix Cell is Blue because the method (in column) is using the method (in row). 

More features can be found here.  Overall I find it a great tool ; I shall update this post once I come across new features.

Monday, May 28, 2012

Interface based programming in C++

This is a small example of the interface I had designed for exposing SkypeKit functions in a DLL .
In the below sample,  only the interface ISkypeClientLib is being exported.

// This interface is exported from the DLL
   1: class SKYPECLIENTLIB_API ISkypeClientLib
   2: {
   3: public:
   4:     virtual bool Connect(char* strAccountUID,char* strAccountPWD) = 0;
   5:     virtual void LogOut() = 0;
   6: };
   8: // Forward declaration
   9: class CSkype;
  11: class CSkypeClientLib: public ISkypeClientLib
  12: {
  13:     public:
  14:         CSkypeClientLib(void);
  15:         virtual bool Connect(char* strAccountUID,char* strAccountPWD);
  16:         virtual void LogOut();
  18:     private :
  19:         CSkype *pSkype ;
  20: // more code
  22: }

Monday, April 09, 2012

Creating an Office Ribbon in Outlook

I have stared working on an Outlook addin which shall have the most commonly used utilities needed. I shall be releasing the tool as freeware , but till then let me share how can you integrate an Office Fluent Ribbon to Outlook.

I am using Addin Express to do this , and below are the steps I have followed

1) Add a AdxRibbonTab and ImageList in the Visual Designer.
2) In the Imagelist one can add several images , and access them by the index, 0 being the first image in the Imagelist.
3) Add the buttons in the Ribbon tab, in my case I have added two Convert to PDF, and About.

Now you can tie up the button events and write your code there.