• Home
  • About Me
  • Musings
  • Programming
  • Open Source
  • Computers
  • Society
  • Books
  • Design
  • Movies
  • Archive for June, 2009

    Star Team : Missing Files from Source Control

    Here is a nice incident that happened today at office.

    We use Star Team for source code configuration tool. I wanted to move the location where I maintain the project files in my local system, from C:\ to D:\. So I logged into Star Team, and opened the project. Then I clicked on View -> Properties. This opened the Properties dialog. There I selected the “Alternate Path” option and specified the “D:\Directory”.

    Instead of showing all the files in the ‘Missing’ status, Star Team just didn’t display any folder excepting the Root folder. For any one who logged in after i made the change, Star Team just was reporting a ‘Not in View’ status, meaning, the file was not in the Star Team. Ah! It turned out that I had deleted all the files from “Source Control”… with a big stress on the word ‘Deleted’.

    Actually, we are living in a connected world. So it happened that, our Star Team administrator had removed the ‘Grant’ privilege on all of us as he was doing some testing and he didn’t want us to make change to the Star Team. What he failed to do was not intimating us of the grant change.

    So once, the grant was provided to all, we were all able to see all the files. That ended the case of the missing files!!!

    Here is the learning: To change Grant options: On the Folder Tree Menu, choose Advanced and then Select Child Folders. Then choose the users who need Access and Grant them the access to the folder. If nothing is specified, all are granted privilege to the folders.

    C#: Calculate Age in Years, Month and Days

    Today I was given the task of finding the age of a person, provided the birth date. When I was given the task, I just said, just use the DateDiff function. But it is not that simple.

    One thing I wanted was to keep the code simple and in a few lines of code. Here goes my first iteration.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
             static void CalculateAge()
            {
                DateTime dateOfBirth;
                DateTime.TryParse("02/18/2008", out dateOfBirth);
                DateTime currentDate = DateTime.Now;
     
                TimeSpan difference = currentDate.Subtract(dateOfBirth);            
     
                // This is to convert the timespan to datetime object
                DateTime age = DateTime.MinValue + difference;
     
                // Min value is 01/01/0001
                // Actual age is say 24 yrs, 9 months and 3 days represented as timespan
                // Min Valye + actual age = 25 yrs , 10 months and 4 days.
                // subtract our addition or 1 on all components to get the actual date.
     
                int ageInYears = age.Year - 1;
                int ageInMonths = age.Month - 1;
                int ageInDays = age.Day - 1;
     
                Console.WriteLine("{0}, {1}, {2}", ageInYears, ageInMonths, ageInDays);
            }

    But then, there were problems with this method. If the current date is ‘06/18/2009′ and the birth date was ‘04/18/2000′, it returns, 9 yrs, 2 months and 2 days. The 2 days part is wrong. I didn’t have any clue as to why it appears.

    Then I went down to the basics, using elementary mathematics of subtraction. Here goes the second iteration of the code.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
            static void CalculateAge2()
            {
                DateTime dateOfBirth = new DateTime(2000, 6, 18);
     
                int ageInYears = 0;
                int ageInMonths = 0;
                int ageInDays = 0;
     
                CalculateAge(dateOfBirth, out ageInYears, out ageInMonths, out ageInDays);
     
                Console.WriteLine("{0}, {1}, {2}", ageInYears, ageInMonths, ageInDays);
            }
     
            ///
            /// Calculate the Age of a person given the birthdate.
            ///
            static void CalculateAge(DateTime adtDateOfBirth, out int aintNoOfYears, out int aintNoOfMonths, out int aintNoOfDays)
            {
                // get current date.
                DateTime adtCurrentDate = DateTime.Now;
     
                // find the literal difference
                aintNoOfDays = adtCurrentDate.Day - adtDateOfBirth.Day;
                aintNoOfMonths = adtCurrentDate.Month - adtDateOfBirth.Month;
                aintNoOfYears = adtCurrentDate.Year - adtDateOfBirth.Year;
     
                if (aintNoOfDays < 0)
                {
                    aintNoOfDays += DateTime.DaysInMonth(adtCurrentDate.Year, adtCurrentDate.Month);
                    aintNoOfMonths--;
                }
     
                if (aintNoOfMonths < 0)
                {
                    aintNoOfMonths += 12;
                    aintNoOfYears--;
                }
            }

    And it works like a charm for all scenarios I throw upon it.

    Scenario 1:
    Current Date : 15 – 09 – 2009
    Birth Date : 09 – 03 – 2000

    Just a difference gives the result
    Age : 6 – 6 – 9 Result is 9 yrs, 6 months, 6 days.

    Scenario 2:
    Current Date : 15 – 09 – 2009
    Birth Date : 28 – 07 – 2000

    Here since 15 – 28 < 0: we borrow one from the month and then add the no of days in the month to the current date. 15 + 30 = 45: 45 – 28 = 17 days
    Then since one month is borrowed: 08 – 07 = 01 months
    Remaining is normal difference
    Age : 17 – 1 – 9 Result is 9 yrs, 1 months, 17 days.

    Scenario 3:
    Current Date : 15 – 09 – 2009
    Birth Date : 28 – 12 – 2000
    Here since 15 – 28 < 0: we borrow one from the month and then add the no of days in the current month to the current date. 15 + 30 = 45: 45 – 28 = 17 days
    Then since one month is borrowed: 08 – 12: So we are supposed to borrow a year and add no of months in current year to current month. 08 + 12 = 20: 20 – 12 = 8 months
    Since a year was borrowed: 2008 – 2000: 8 yrs
    Remaining is normal difference
    Age : 17 – 8 – 8 Result is 8 yrs, 8 months, 17 days.

    But I know there must be better ways to do it. Feel free to drop in code snippets. Comments too are most welcome.

    Ubuntu Panel Missing!

    When I logged into the machine today, I was shocked to see no panel appearing on the ubuntu desktop. I thought the computer has hung. But when I right clicked the desktop, I got the regular pop-up menu and was able to change desktop wallpapers.

    Here is what I did to get the panel back. With the desktop without the panel and not remembering any of the shortcuts, it was quiet difficult.

    First, I created a launcher for Terminal. Right Click on any area on the desktop and then choose ‘Create Launcher’. Choose any name and then in the command text box, type in

    terminal

    This should create a terminal launcher. That done, double click to open a terminal session. Enter the following command,

    killall gnome-panel

    Then right click on the desktop to create another launcher. This time in the command text box, type in

    gnome-panel

    This creates a gnome-panel launcher. Double click and viola! you have the Panel.

    Programming Fonts

    Little lately, I am obsessed in finding the best font to use, when I do the coding. I try to keep the same font across all editors and IDE’s that I use. The first font that I loved was ‘Courier New’ set at 10pt.

    Then with VS2008 came in a new attraction for Consolas a true type font from Microsoft. Consolas is really good. And it appears even better on TextPad, jEdit and VS2008 IDE.

    Last month, I began using Anonymous font. I would have sworn by it, if not for Monaco.

    Now I use only Monaco. Smooth and pleasing! So what fonts do you use.