Archive for February, 2009

20th Feb 2009

Coding War Games

Here is the deal for next developer event @ Digicorp:

1) This is completely voluntary event so people are free to participate and not to participate without any hard feelings.

2) You are encouraged to make teams of 4. You can choose team members with whom you would like to work with. Make teams in your department only. For e.g. .NET developer can not pair up with PHP developer.

3) One statement of work will be given to each team having detailed milestones. All teams will have same statement of work.

4) 24-hours will be given to each team to work on the statement of work on their choice of technology.

5) Yes!! that means The Coding War game will start at 10 AM on one day and will finish on 10 AM the next day.

6) You as a team have to plan, code, test whatever you complete in 24 hours. It is not compulsory to complete the whole thing but if you can you have high chances of winning.

7) Lunch, Dinner, Tea, Resources everything you need will be provided by company.

8 ) Rules of the event will be sent to you before hand.

9) This will be head to head competition with fellow developers and will be a great chance to know your skills, strengths, mind under stress and in team.

10) Products developed from each team will be installed for few days after competition and our QA team will test them extensively and we will be doing the code review for few days.

11) We are planning to hold this event on this Saturday. I know its a Holiday but developers who are participating will get a holiday on Monday. As I said earlier this a great chance to know your skills, strengths, mind under stress and also of your team members.

12) Project definition will not be a live requirement from client so don’t worry we do not plan to sell your efforts after 24 hours :)

13) It is necessary to hold this event on Weekend so that we do not disturb other developers who are not participating. We are going to make lot of noise on achievement of each milestone. It is like a Race.

14) Developers who are not participating do not have to come to see the event. But they are always welcome to see what is happening at 3 AM in the night!! We may be at the Kitli drinking hot tea!!

15) Winning teams will be getting a party from Digicorp and a trophy.

The idea of Coding War Games is taken from wonderful book called Peoplewareby Tom DeMarco and Timothy Lister which I am reading right now. The book is about creating and maintaining Productive Projects and Teams. It is the same book that inspired us to start this blog.

Looking forward to teams for this event. It is going to be one hell of an event and one of its kind at Digicorp.

What do you do to ignite fire in your development teams?

Posted by Posted by abhishek under Filed under developer event Comments 3 Comments »

18th Feb 2009

Digicorp @ SQLAuthority

We are honored to be mentioned on one of the most popular blog in the world for SQL server and Database.

The blog is SQLAuthority and is written by highly talented individual Pinal Dave.

Pinal Dave is Microsoft SQL Server MVP and author of over 800 SQL Server articles. He has over six years experience as Sr. Project Manager and Principal Database Administrator in MS SQL Server 2008/2005, .NET (C#) and ColdFusion MX. He has a Masters of Science degree in Computer Networks, along with MCDBA, MCAD(.NET) and ColdFusion Advanced MX Certifications.

Here is the link of the article.

Please do read it and leave your comments.

Posted by Posted by abhishek under Filed under coverage Comments No Comments »

18th Feb 2009

XDebug Install with XAMPP on Ubuntu

Friends this will cover Xdebug installation in 2 different way, you can choose as per your need

1.) Install XDebug for use with XAMPP on Ubuntu Linux.

2.) Install xDebug by apt-get install way.

Install XDebug for use with XAMPP on Ubuntu Linux.

Lets assume you have XAMPP installed with developer source code and header of XAMPP. If you don’t have XAMPP developer package installed you can install it by following…

Build Environment Setup

XDebug will need to be compiled. A couple of packages need to be in place before you can build the source.

1. Install the build-essential package to setup a basic build environment:

sudo apt-get update
sudo apt-get install build-essential

2. Download the development archive for your version of XAMPP and extract it over your existing installation (you may want to backup your XAMPP directory first):

sudo tar xvfz xampp-linux-devel-1.6.8a.tar.gz -C /opt

Build XDebug

wget http://www.xdebug.org/files/xdebug-2.0.3.tgz

tar xzf xdebug-2.0.3.tgz

cd xdebug-2.0.3/

phpize

After this you will have following output on your console…

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
./configure

make

sudo make install

Then the output will be this.. please monitor the directory specified.

Installing shared extensions:     /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/

After the Xdebug extension is installed, you’re ready to enable and configure the extension.

First create a folder in your temp folder that will holds the data file generated by Xdebug

sudo mkdir /opt/lampp/tmp/xdebug

sudo chmod a+rwx -R /opt/lampp/tmp/xdebug

Open php.ini in a text editor, and add the following lines at the end.
( generally you will find it in /opt/lampp/etc/ )

;xDebug Configuration starts

zend_extension = /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so

xdebug.profiler_output_dir = "/tmp/xdebug/"
xdebug.profiler_enable = On
xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"

;xDebug Configuration ends

After adding the lines and verifying that your output directory is writable, restart your XAMPP server.

you can do it by  sudo /opt/lampp/lampp restart

and thats it..!! you have xDebug server running with apache..

Install xDebug by apt-get install way.

sudo apt-get install php5-xdebug

edit your php.ini file

In the end of the file, just add

xdebug.remote_enable=On
xdebug.remote_host=”localhost”
xdebug.remote_port=9000
xdebug.remote_handler=”dbgp”

If you are developing from another computer, we need to specify that ip address under xdebug.remote_host.

restart the server

sudo /opt/lampp/lampp restart

Posted by Posted by Nilesh under Filed under Uncategorized Comments 4 Comments »

15th Feb 2009

Full-text searching with MySQL

MySQL’s full-text search functions provide a simple framework for an easily implemented, approximate site search. web-applications or desktop applications, written in an interpreted language and powered by MySQL, can use MySQL’s full-text search to avoid third party dependencies.

The basics

The basics of the MySQL full-text search functions are well-documented in the MySQL online documentation. For those lacking patience, here is a quick rundown.

Full-text searching is somewhat akin to a LIKE condition, but is much faster, requiring a FULLTEXT index to be created for the table columns targeted in the search. To search the title and description columns of a table, entries, the following statement would create the proper index:

ALTER TABLE entries ADD FULLTEXT(title, description)

To search these columns for the text, “python threading,” the MATCH...AGAINST functions are used:

SELECT id, MATCH(title, description) AGAINST ('python threading') AS score
FROM entries
ORDER BY score DESC

Notice that we keep the result of the match. The value returned is a float representing the relevance of the match. The higher the number, the more relevant the match.

There are several caveats to the full-text search. In particular, any words that are common between many entries are treated as noise and their relevance in any search is diminished. This means that were every article in entries to be about threading in Python, searching for “python threading” may not return extremely relevant results. Refer to the MySQL docs for more information.

The hard part

If the content to be searched is not conveniently located in one table, things get more complex. In this case, a method must be devised to create an intermediary table to contain the search target.

This might be accomplished with a cron script that aggregates the information nightly or using stored procedures to keep the target table updated.

Refining results

A common case is to weight the search to favor more recent results. Assuming that each entry has a DATETIME field named timestamp, this is easily accomplished by using the entry’s age to modify the score.

For an even reduction to the score based on the article’s age, divide the score by the age, which is determined with DATEDIFF(NOW(), timestamp).

(MATCH(title, description) AGAINST ('python threading'))/GREATEST(1, DATEDIFF(NOW(), timestamp))

Since DATEDIFF returns the difference in days, an entry written today could cause division by zero.
GREATEST means that entries written today and yesterday have equal weight, but prevents results from omitting today’s articles.

A quick test of this will show that results become wildly incorrect after a few days as the text match score begins to diminish further with age. This effect can be reduced by taking the LOG of the age, making the divisor increase less and less the greater the age.

LOG(GREATEST(1, DATEDIFF(NOW(), timestamp)))

The use of LOG causes a steep drop initially, smothing over time. For a less dramatic effect, substituting the square root causes a similar drop in the weight of the entry’s age over time, but diminishing less starkly over time and without the initial steep drop.

SQRT(GREATEST(1, DATEDIFF(NOW(), timestamp)))

The complete SQL statement is now:

SELECT id,
  (MATCH(title, description) AGAINST ('python threading'))/SQRT(GREATEST(1, DATEDIFF(NOW(), timestamp)))
  AS score
FROM entries
ORDER BY score DESC

Posted by Posted by Nilesh under Filed under Software Development Lifecycle Comments 1 Comment »

14th Feb 2009

Microsoft’s New Wonderful Tools To Play Around With Photos

It is amazing to see these tools and it is even more exciting that they are being built by Microsoft.

The first one is PhotoSynth. You all must have heard about it.

Let me just give you one example that is created using PhotoSynth.

Barack Obama’s Inaugural Ceremony

You can see what has been created using thousands of photos taken on the inauguration ceremony of 44th President of United States, Barack Obama.

Second example you can look at is an Indian Temple Heritage Site which is been captured with the use of PhotoSynth.

So you can see how you can create a more meaningful and much engaging 3d images. And this is created very easily using the photographs that you take while you go there and just give it to PhotoSynth and it will create it for you. So these synths basically give you a feel of the place you visited.

Second of the tool is Microsoft HD View, now this I have encountered today only.

The above heritage site video shows how HD View can be useful.

I was just wondering that these tools give a new dimension to digital photography. So from now on when you go to any place for photography, you can keep these tools in mind and while you return you can create synths and share it with others that will give them a better look and feel of the place you visited.

Share your thoughts on the same and another thing I would like to know if you can share any of the synths or hd view images that you might have created and we can have a look at them.

Posted by Posted by kuntal under Filed under Uncategorized Comments No Comments »

13th Feb 2009

Professional-looking charts quickly and easily with pChart

pChart is a PHP class oriented framework designed to create aliased charts. Data can be retrieved from SQL queries, CSV files, or manually provided. To have a complete overview of what pChart can do for you, we invite you to take a look on the on-line documentation which is trying to show all basic & advanced functionalities of this library.

and friends I am going to use this library in one of my undergoing project named Clinical Nursing Home.

Posted by Posted by Nilesh under Filed under Uncategorized Comments No Comments »

13th Feb 2009

Code Inspection

At Digicorp, we have recently started code inspection process. It is too early to say that it is producing wonders but it does look promising in the long run.

We are inspired from the Fagan Inspection invented by Michael Fagan at IBM in mid 1970s. We do not follow the process completely but we have done changes according our environment.

Following presentation will give you more idea about the process:

We make it a point to involve newly recruited developers in the inspection process so they get an idea where experienced developers are also going wrong.

This way it becomes part of training for newly recruited developers.

So far we have had half a dozen code reviews and some of them were good, some of them were bad. But all the developers at the end looks satisfied with the result. Developers are not making it an ego issue so far. :)

What do you do at your company to do make your code better? Any suggestions to make this process better?

Posted by Posted by abhishek under Filed under Software Development Lifecycle Comments No Comments »

11th Feb 2009

Documentation of an already developed project

This is first of my experience regarding documenting an already developed project.

Let me first describe the situation which we are going through.

We have developed a system and before a couple of years and currently it is in a maintenance stage.

It is in use in the production for last 1 year. The project is developed in Visual Studio 2003. It is a purely Windows Based Application and developed in VB.Net. The database behind it is SQL Server 2000 and we are using ASP.Net Web Services as middle layer.

Now as the client is going through the inspection of the project, we are now to generate the documentation of the whole project.

Normally, this happens in many of the projects which I see around, typically in our part of world the developers are more inclined to do coding rather then do designing, documentation and planning and then actually doing coding.

Now in this situation, I would like to share with you what we have decided to develop as part of our documentation of the system which might help you at certain point of time in your project. The main part is we are not having enough time right now and we are in a real hurry.

We have decided to prepare the following documents.

1.    Database Dictionary
We have found out a very useful tool for generating database documentation. The tool is DBScribe. It is an excellent tool, it automatically generates all the documentation related to all the database objects from the database itself. Right now we are using the trial version in order to check the capabilities. Other nice thing about tool is it is automatically defining the dependencies between the database objects. It generates a chm and html document as output. We are trying to figure out how to insert some of the information in the tool. For example, how to add description of the table and how to add description of stored procedure parameters.

2.    Code Commenting
We are using the VB Commenter for generating comments in the code. We are to do two level of commenting in the code. Class level commenting and Procedure level commenting. Following are snippets of what we are going to put as comment in the code.

Class Level Commenting
”’<summary>
”’    [Name] FrontController
”’    [Description] Acts as the initial point of entry/exit into the system
”’                  and manages the handling of the request, including invoking security services such as authentication and authorization.
”’    [Reference]
”’ </summary>
”’——————————————————
”’ <remarks>
”’ </remarks>
”’——————————————————
”’ <history>
”’    <creation>
”’     [amita] [anokhi] 12 June 2007
”’    </creation>
”’    <modification>
”’    </modification>
”’ </history>
”’——————————————————

Procedure Level Commenting
”’<summary>
”’    [Name] AuthenticateRequest
”’    [Description] Validates UserID and Password and updates Database by Authenticating Login Request
”’    [Reference]
”’ </summary>
”’——————————————————
”’ <history>
”’    <creation>
”’     [amita] [anokhi] 12 June 2007
”’    </creation>
”’    <modification>
”’    </modification>
”’ </history>
”’——————————————————
”’  Algorithm
”’  Steps
”’  [1]   Get Current Context
”’  [2]   If Request is of Login from Home page then
”’  [3]   Retrieve User Id and Password
”’  [4]   If user ID exist in hastable then get its Users Object else goto [7]
”’  [5]   If Password is not Correct  then goto [7]
”’  [6]   Generate Ticket, identity and Principal
”’        Assign it in Context, User object (also in HashTable), Session, Database
”’  [7]   If Password or UserId is incorrect then set Users object as nothing and call Invalid Login
”’——————————————————

3.    Class Diagram
We are planning to convert our project which is in .Net 2003 to .Net 2005 and generate a class diagram from the IDE itself. Now here I am searching for some more sophisticated automatic class diagram generator tools as generating class diagram from this code manually will be a very time consuming and tedious work. Right now VS-2005 editor is giving some errors while I try to generate the class diagram and also I do not find those class diagrams very attractive.

4.    Database Relationship Diagram
This will be similar as what SQL Server generates. We will link up all the tables and then submit the diagram.

Can you suggest me some better and efficient ways of doing this?

Posted by Posted by kuntal under Filed under Software Development Lifecycle Comments 2 Comments »

10th Feb 2009

First Post and Peopleware

One of the inspirations for creating this blog is a wonderful book called Peoplewareby Tom DeMarco and Timothy Lister which I am reading right now. The book is about creating and maintaining Productive Projects and Teams.

peopleware

Yesterday I read an interesting chapter called “TEAMICIDE”. It is about making teams jell at your company.

The authors could not come up with “Six things you can do to make team formation possible” so they tackled the problem by the trick called “inversion” described Edward deBono’s Lateral Thinking.

“Inversion” is a technique to achieve your goal by looking for ways to achieve exactly opposite of your goal. This helps in clearing brains cobwebs which keep you from being creative.

So they focused on six things which will keep them away from creating jelled team. They came up with following

  • defensive management
  • bureaucracy
  • physical separation
  • fragmentation of people’ s time
  • quality reduction of the product
  • phony deadlines
  • clique control

I would not go into details here but I can say these are some of most commonly found techniques in all the companies.

I don’t deny that we are not affected by any of the above techniques but fortunately the effect is less and manageable. My personal target is to make sure above techniques are completely removed from Digicorp.

My first target should be to remove phony deadlines from the projects if there are any. This is the most prevalent technique in most of the companies today and I do feel that it kills the motivation of developers to do well.

I would encourage my development team to write something more on this and what we can do it remove this.

I would love to hear from you more on this. What other techniques you think can hamper creating jelled teams?

Posted by Posted by abhi under Filed under project management Comments No Comments »