After I wrote about how to check a website's position at the Google search result page, I thought it would be fun to write a little application that uses that method, but extend it to work with Yahoo and AltaVista as well. This is the result.

The application let you save the keywords of all the websites you want to check. Then just press the “Find positions” button and it automatically retrieves the data from the different search engines.

Installation

The application is deployed using ClickOnce, so Internet Explorer has to be your default browser for it to install. Afterwards you can change your default browser back to what it was.

Install the Search Engine Positioner
C# source code (49 KB)

During the years I’ve seen a lot of different ways of commenting code – some good and some bad. My personal favourite way of commenting code is by using the XML comment feature of C# and VB.NET, but the important part of commenting code is not how you do it, but what you write in them.

Methods are the most challenging members to comment, because they perform an action and can contain many lines of code compared to e.g. properties. Because of their relative complexity they need to be well commented, so lets take a look at what that actually means.

Answer the questions

The XML comments of a method needs to answer three simple questions: What, why and how. The simplest is “what”. In a class called Dog there is a public method called Bark() and the comment that answers the "what"-question could be Makes the dog bark out loud.

Next we want to answer the "why"-question and it is a bit trickier. The answer must tell you why this method has a reason to exist. For the Bark() method it could be The dog has to bark every day, otherwise it will get depressed and violent.

Last but not least we need an answer to "how". This one can be very hard to write and not all methods need it answered. You need to understand the "how"-question as a question about the workings of the method in non-technical terms. So the answer to the "how"-question on the Bark() method could sound something like The dog can not bark if it is eating or drinking, so if it does, it first needs to spit it out.

Example

To make sure that all three questions get answered as often and detailed as possible and needed, we can use a simple scheme in the XML comments. Here is an example of such a scheme.

/// <summary>

/// Makes the dog bark out loud. (what)

/// <para>

/// The dog has to bark every day, otherwise

/// it will get depressed and violent. (why)

/// </para>

/// </summary>

/// <remarks>

/// The dog can not bark if it is eating or drinking,

/// so if it does, it first needs to spit it out. (how)

/// </remarks>

public void Bark()

{

  if (IsEating || IsDrinking)

  {

    SpitOut();

  }

 

  DoSomething();

}

By using the same scheme every time you comment, it get’s easier to write and understand and the code gets well documented. It is not important what the scheme looks like as long as the three questions get answered.

Remember that you don't need a reason to answer all three questions - you need one not to. As soon as you get that rule under your skin, it gets easier to uphold every time and before long it gets part of the daily coding routine.