RSS
Showing posts with label Problem Solving. Show all posts
Showing posts with label Problem Solving. Show all posts

How to renew / reissue Indian passport after 10 years, in USA by post - BLS international


*** IMP Update:  Cox and Kings would be the knew service provider to Indian consulate after May 20th. If you can, wait for them to take over than submitting your application to BLS.


*** Update: 06/04 As per comments from many others it seems like BLS is still handling passport services so ignore the comment above


http://ibnlive.in.com/news/indian-embassy-in-us-outsources-visa-passport-services-to-new-firm/470326-2.html


** Check the end of the post for issues related to BLS & USPS express packages


** Check comments for FAQ


 Have woken from my long siesta to share some info on the process of getting an Indian passport renewed while staying in USA.


Thought of writing this post to help others like me, who may want to get their Indian passports renewed while staying in USA and are faced with little or minimal how to on the Indian consulate site.

***As of May 2013   The Consulate General of India  outsourced the handling of Passport and related applications to M/s. BLS International Services Ltd [Earlier it was with Travisa]

Step 1: -  Visit the Indian consulate site at http://www.indianconsulate.com/  [Check if another agency change has occured if not then the below is still valid info]

Step 2:- Visit the BLS International site at http://www.blsindia-usa.com/

Passport_Renew001

Step 3:- Click on the Passport link / image.

Step 4:- Click on the Passport menu ->> Reissue of passport after 10 years

Passport_Renew006

You will be re-directed to a page which has a lot of data about the process - general information, application centers, documents required etc etc.

Step 5:-Read through this page for an overview of the process then go to the Indian Passport application center section.

Indian consulate has divided various states into regions and they have 1 office catering to multiple states, please make sure you understand which application center you need to apply to as per the state / region you live in.  For me it was Chicago being in Indiana, click on the various application center's to understand which center you fall in.

Application centres as per regions

Step 6:-  Go through the entire page to make sure you understand the process and the documentations required. The details on this page are pretty straight forward and shouldn't be that hard to follow. I just had to get the passport reissued after 10 years hence my documentation requirement was pretty straight forward. Please check the page in detail as per your requirement.

Step 7: BLS needs you to fill an application form which can be found here http://blsindianvisa.com/orderform/passport.php

BLS Passport order form

In this form most of the fields are pretty self explanatory , will mention a few just for clarity

a) Location - This needs to be the passport application center and not the region you are located in.

b) Airway bill no : Provide the tracking number of your shipment, this is further used to track the package delivery on BLS website. This is provided in the receipt / slip that you will have from your shipping. Yeah its kind of confusing for some but basically we need to go and get the envelops from postal services [USPS / UPS / Fedex] prior to filling the forms.

[caption id="attachment_340" align="alignnone" width="300"]Shipping - Airway bill number Shipping - Airway bill number[/caption]

[Please read the section below on how to send the documents to BLS.]

c) Airway bill no [return envelope airway bill no] It is always a good idea to send BLS a self addressed return envelope. This provides 2 way tracking of the application. If your postal tracking shows dispatched that means BLS has processed your passport and its on the way. It sure helps to have a backup tracking mechanism.

BLS passport form 2d) Address to be printed on passport:- This should be the US address as you are living in US, some people have reported even if they entered their Indian address it went through on the passport. I had called BLS center to check on this , as per them it should be US address only, but many of my friends have also got their Indian addresses printed without providing any address proof.

e) Payment details:- Here we have to mention if its a demand draft / money order / cashiers check and the check number associated with it. Please note cashiers check is not same as the normal check we receive on opening the bank account

Once you save this form , you will get an email on the email address which was provided by you , that email contains 2 documents

1) BLS Form :- Take a print out of this form , it needs to be submitted along with your documents in the application envelope.

2) BLS shipping label:- This contains the mailing address for BLS and your application / case number - Make sure that you paste this label along with your shipping label on the form. This has a barcode which gets scanned on receipt at the BLS office and it updates the tracker.

Step 8:- Once you are done with the BLS Passport form, its time to fill another form :) The govt of India NRI passport application form located at https://passport.gov.in/nri/

NRI Passport Application form

Before you start filling this form please note the following -

  • Once you submit this form, you cannot go back and edit the form, the only way to update the info on this form is to fill up another form.

  • If you are not sure of a few things in the form, do not submit. You can keep the form partially filled and fill later on based on the temporary application id received while filling the form. [check the image below for the location of temporary application id]


NRI passport application form

Select the appropriate Indian mission ie the application center and the type of service ie reissue of passport.

The only thing confusing in this form is "File number" required in the passport section. This information is available on the last page of your passport as shown in the image below.

Passport file number

Once done filling the rest of the information, click save and then print the form. In case you do not print the form, you can always go back and print the form with the web file number. Once you print the form, you will get a 3 page document which contains some of the fields pre- populated based on the info you just filled and some fields which you need to fill in now to complete the form.

Will mention some of the fields here for clarity.

  • Amount paid should match the total of the amount shown at the BLS passport form, you can combine the total amount ie passport service + BLS service + ICWF for me it was $91.20.

  • For delivery by mail ... should be NA since you are sending a self addressed envelope to BLS. In case you do not then you need to pay extra for them to ship the package to you.

  • Point # 10 : Education - People with Degree certificate etc fall under ECNR category. hence mention your education properly.

  • Point #11: When did the applicant first leave India - If you read the question properly it asks you the first time you left India not when did you leave india for this trip, hence in case, this is not your first trip out of India please mention the date of your first travel out side India. You can find the date on the passport pages stamped on the adjacent page by your visa.

  • Point #11: When was he / she last in India:- this should be the last time you left India if you haven't yet returned to India then this would be your departure date- check the passport again for the exact date.

  • Point #12: Total time outside India - This is the time from your last date in India till now.

  • Point#13: Present emigration status ie ECNR or ECR- this is available on the 2nd page of your passport.

  • Point #19: references - these can be anybody [other than family] even in India .

  • Point #22: No of lost/damaged passport:- Since this is reissue of passport only mention NA here. Mention NA in the next few points where appropriate.

  • Point #29: Sign in the boxes.

  • Passport photo needs to be attached to the form in the designated space, Along with this the "documents requirements" section on BLS site mentions send 2 more photos. When I had called the BLS helpline they asked me to staple an additional photo at the end of the form below the signatures. I stapled one there and added an additional one by attaching it to the form with a u-pin.


Step 9:-Nationality verification form  - Can be downloaded from http://www.passport.blsindia-usa.com/forms/NationalityVerificationForm.doc

  • This form is pretty straightforward and doesn't require any clarification - Its the same information which we have filled in the earlier 2 forms.

  • The only confusing part here is in document requirements section they have mentioned take 3 copies of this form and in the checklist they have mentioned nationality form not forms. I got pretty confusing answers from people, after calling BLS they confirmed its 3 forms [no idea why] with 3 photos attached to them in the space provided.


**Tip: - We can either print this form and then write on it or we can type in the document and take a printout directly. I did the later, saved me time.

Step 10:- Documents required - what goes in the package 

  • BLS filled form print out.

  • NRI Passport Application form. [1 photo attached in the space on 1st page and 1 more at the end of the form below the signatures.]

  • 3 copies of national verification form [each form needs 1 photo attached to it in the designated space]

  • Photo copy of 1st 5 pages of passport. [Page numbers are mentioned on the passport in case you are confused.]

  • Photo copy of the last 2 pages of passport.

  • NOTARIZED Photocopy of the visa page in passport.

  • Notarized photocopy of address proof for USA - either of Electricity bill, Mobile bill, Gas bill , internet bill , driving license suffices here.

  • Optional: Photocopy of graduation / post graduation certificate Just to avoid any delays had attached photocopy of my Masters certificate.

  • Optional: Affidavit for change in appearance - I had got my passport in my college days and as I had my travel trip planned within a couple of months from application for renewal of passport, I didn't want to take the risk of any delays hence I had attached a change in appearance form along with the documents, its mentioned on the BLS site and can be located at the following location - http://passport.blsindia-usa.com/forms/ChangeInAppearanceAffidavit.pdf

  • Passport [Don't forget this, its very easy to forget, also ensure you have removed the i94]


**** Tip: We can get the documents notarized at various locations in the city - banks, post office , mostly companies have a notary on their payroll too. Else the ones outside charge something around $7-$9 per document going up to a upper bar on the amount something like $20 irrespective of how many you notarize. If you have a bank account visit their branch they will do it for free.

Update 01/27: It seems Bank of America has stopped notarizing documents, PNC bank still continues to do so. Also read my comment below which has a link to diff places we can get notarization done.

**** TIPS ****



  1. Make a photocopy / scan important pages of your passport. Remember your passport identifies you as a valid Indian citizen.

  2. I have the habit of scanning any form I send, hence I have kept a scanned copy of all the forms , cashiers check etc sent for this application.

  3. Hand delivering the package doesn't add any value to the processing time, I had called and confirmed with BLS if it would help in speeding the processing time. Of course If you live in the same city might as well go and visit personally. For me it was a drive from Southern Indiana to Illinois and not worth the time.

  4. You have an option of sending the package via USPS / UPS / Fedex. I chose USPS as it was right next to my office and it provided Express overnight delivery at a good price $15 envelope and $19 for cardboard box as of 11 OCT 2013.

  5. Make sure while getting the envelope from post office , you take a printout of your document to make sure you can fit them in and don't have to fold them in.

  6. I took a cardboard envelope and a normal envelope for express shipping ie overnight shipping and put the self addressed shipping slip on the cardboard envelope and the TO BLS shipping slip on the normal envelope.

  7. While sending the documents , put them in the semi hard envelope [do not seal this] and then put the semi hard envelope inside the normal envelope which is addressed to BLS. [this gives your documents and passport the extra layer of protection].

  8. IMP info: I had shipped on Friday 11th and the package reached BLS office on 12th , as the office was closed on Saturday the delivery person took it back to the post office and left a notice for them. I had called USPS call center and then the local post office to make sure they redelivered to BLS. They had already planned to redeliver on 15th and the nice lady at the Chicago local post office went and checked to confirm if it had been sent out. I had explained the package contains imp documents ie passport etc to her.  Hence please time your package delivery accordingly, make sure it reaches them on a working day [Mon - Friday] and also take into account any holidays in the week to avoid wastage of days :)

  9. Photo --- Based on my friend's recommendations had visited CVS,  Wallgreens for getting a pic clicked, unfortunately I didn't find any of their service good. The camera used by them were old, i had my doubts it would work and also pics clicked by them sucked big time and did not follow the photo specifications specified by the consulate at all. [Remember its 2 X 2 like US pics and not the 3.5 or XXX we have back in India].

  10. I finally visited SAMS club and they had proper equipment and in the system they had a proper template which checked for the placement of eyes, chin, ear in the pic as per the specifications. The quality of the pics was too good. [This was in Columbus, Indiana maybe your luck might be better in your region]

  11. Passport photos can be clicked at post office too. [I found this out while finally sending the package, they charge a whopping $15 for 2 photos]

  12. Some people suggest online sites http://www.epassportphoto.com/ ,  http://www.idphoto4you.com/ which help you crop the photo in the passport photo specifications.-personally feel its nor worth the hassle and risk to save approximately $20 - $25 [unless you do not have a time constraint] but of course choice lies with you.

  13. Payment:- Payment modes allowed are Demand Draft, Money Order, Cashiers check. Cashiers check is usually free to bank's account holders check with your bank. Mine was PNC and they provided it free of cost to me.

  14. Copying and pasting from a reply to question as per suggestion by Keerti. 


BLS drops the packages in the drop box in their building. Unlike Fedex & UPS , USPS express packages need to be hand delivered in the post office to be considered as express mails [in spite of express mail packaging]. The express packages received via drop box get treated as normal mail and are processed as per the standard mail duration. I went through the same scenario during my application resulting in me running around USPS office and BLS/ consulate to track my missing passport.[BLS site claimed it was dispatched while USPS had no acknowledgement of receiving the parcel]

This was confirmed to me by USPS office / USPS pickup guy and they also told me they have repeatedly asked BLS not to drop express packages in drop box yet they do the same to save a few efforts [USPS office is 2 blocks away from BLS office]

Unfortunately, you won’t be able to track on USPS tracking site till it reaches a distribution center near your city. It took 3 days from Chicago to Columbus, IN. USPS showed no record of receipt of my passport till it reached Indy the reason being it gets acknowledged only at the distribution center, in my case Indy.BLS had dropped it on Monday and I collected it from Columbus USPS on Wednesday morning. Till Tuesday 8:00 PM USPS site showed no record of receiving the package.

 

Let me know if I missed adding any important info , would be happy to add more to this post.

**** Disclaimers ****



  • All the urls mentioned in the post are from BLS India website.

  • This is my understanding of the process and how I got my passport renewed, please make sure you visit their website and ensure the process has not changed since the date of this post.


Let me know your feedback on what is missing, what should be added etc

P.S: I had applied in the month of Oct 2013

 

Extracting HTML source from a URL website


Was just thinking of trying something short and sweet and thought of trying out a snippet for extracting code from the entered url.
Following is the code have not declared the namespaces on top but used them directly in the code to bring more clarity on which namespace the object comes from.

The code is self explanatory so wont add any explanations over here..

</// <summary>
/// Extracts the source from the url entered.
/// </summary>
/// <param name="url">url to fetch the source from.</param>
/// <returns>string: source for the url entered.</returns>
public static string GetHtmlPageSource(string url)
{

System.IO.Stream st = null;
System.IO.StreamReader sr = null;

try
{
// make a Web request
System.Net.WebRequest req = System.Net.WebRequest.Create(url);

// get the response and read from the result stream
System.Net.WebResponse resp = req.GetResponse();
st = resp.GetResponseStream();
sr = new System.IO.StreamReader(st);
// read all the text in it
return sr.ReadToEnd();
}
catch (Exception ex)
{
return string.Empty;
}
finally
{
// close the stream & reader objects.
sr.Close();
st.Close();
}
}



UPDATE:

If you need to authenticate the request use the following just before you make the request to read the source

// authenticate using the credentials passed for getting access to the page.
if (username != null && password != null)
req.Credentials = new System.Net.NetworkCredential(username, password);
// get the response and read from the result stream
.
.
.

Exception Handling .NET Try Catch Finally Block working




Exception handling and performance


The vanila try- catch statement:

try
{

// Execute the code for SQL
}

Catch(Exception Ex)
{

// Handle the exception.
}

In the above example the try catch encapsulates a piece of code executing some DB operations.
In case there is an exception thrown in the try block code the exception will be smartly catched in the catch block and can be processed and handled.

Catch working.

A Catch block is used as a catcher of exceptions. i.e A catch block will catch the exception or any child exceptions that are derived from the class.

try

{

// Execute the code
}

Catch(ArgumentException Ex)
{

// Handle the exception.
}

In the above case any exceptions from the ArgumentException class will be caught in the catch block this will also include any child exceptions of the ArgumentException such as ArgumentOutOfRangeException, ArgumentNullException etc. As these exception classes are derived from the parent class ArgumentException (Remember .NET classes have loads of base classes :) )

Now that its caught what to do?

A Million dollar question!!! In code reviews have seen developers writing a try catch block and catching the exceptions and doing nothing with it. Wake up!!!!!! guys an exception is a exceptional flow of the code.. ie the moment it comes in the exception block it means this wasn't the expected flow so obviously we cant let it go silently unnoticed.

Of course we don't navigate it back to the user , but we do need to log it, process it, pass it back to the calling method with more info etc so that the developer is aware of the exceptions that occurred.

When i say Pass it back to the calling method a qts arises in our mind.. if we have to pass it to the calling function why in the name of God do we need to catch it as if we dont catch it it will automatically get thrown back to the calling method!!!!!!.

Thats true completely true, but as a developer we need to understand the exact location of error, maybe we want to add more custom information to the exception and then pass it back to the calling method.

Lets take an example of a utility class you have written for processing some data, now since this is a class which will be providing service to the classes calling on it.It will have to give out details of the exception if any that it will face in the operations..

try

{
// Open file
// Process data
// Send confirmation mail

}Catch(Exception Ex)
{

Logger.WriteLog("Exception: Method: ProcessData: Parameters: A = 4, b= "ABC");
Throw new Exception("Error occured in processing data MethodXYZ with parameters a = 4, b ="ABC", ex);
}

The above try catch block will not only handle the exception thrown but also log it into the custom logger and then send a customized exception with the details as well as the stack trace for the exception.

Such detailed exception/debuggin output will not only help the developer pinpoint the exception source but also provide him the details of the object when the exception occured.



P.S Its not a good idea to create new exception class objects and send the existing exception through it as it has some performance issues so choose carefully.

Multiple Catch

In the above scenario it would have been better to even drill down to the exact exception type as we have 3 different piece of code

1) File operation
2) Data Processing
3) Email functionality

* Ideally all these 3 functionality should be in their separate methods for maintainability but for the purpose of this example had to club them together in 1 method.

try

{
// Open file
// Process data
// Send confirmation mail

}
Catch(IOExecption Ex)
{
// Perform catch handling for File input /output exceptions
}
Catch(SQLException Ex)
{
// Perform catch handling for DB exceptions
}
Catch(Exception Ex)
{
// Perform catch handling for general exceptions
}

Order of catch blocks and the importance behind it.

We can very well have multiple catch blocks to handle specific exceptions and process them in specific ways, but in such a case such as the above the order of catch blocks holds lot of importance in the way the catch blocks will be functioning.

Care needs to be taken to see that the most specific catch blocks should be on top of the generic exception catch blocks. inshort the derived exception class catch should be on top of the parent exception class.
Please Note: Exception is the parent of all the other exception classes, hence the catch block for exception should be the last

Before we move on to the last part of exception handling need to mention the last catch block which will take care of any exception
try
{
// code
}
Catch
{
}

Why did .NET give this class? when we already have Exception which is the parent class for all exceptions?? Well the answer is simple Exception class is the parent class for all the exceptions that are thrown through managed code or rather .NET code. what about the code which might throw exception ie not written in .NET maybe a COM component, C++, code ? In such a case we can use the above catch block.This block however due to lack of the exception class/object will not provide us with any information on the exception.Its only useful for making sure no exceptions get through.

Finally Block

The last part of try catch is the finally. It should be like a inseparable trio try-catch-finally block.
As we have seen till now incase there is any error the code execution halts at the error code statement and the execution gets thrown into the catch block.

Now incase we had opened a Database connection / File / etc and inbetween the processing of the connection the exception occurs the execution will be thrown to the exception block and in turn the code for closing of the statements wont be executed and the connections will remain open.

To take care of such situations we have a Finally block and as the name suggets this block is executed finally ie after all the above code in try or catch block gets executed.

The finally block is executed:

  • Incase the code gets through the try block without any errors

  • Incase the code falls through the Catch block because of some exceptions.

  • Incase of any flow followed by the code.So the best bet is to put such code in finally block which has to be executed irrespective of the flow of code.

    try

    {

    1) Open Database Connection
    2) Retrieve Records
    3) Process data <<------ Exception gets thrown at this point.
    4) Update records back to DataBase
    5) Close Database Connection

    }
    Catch(SQLException Ex)
    {

    Logger.WriteLog("Exception: Method: ProcessData: Parameters: A = 4, b= "ABC");
    Throw new Exception("Error occured in processing data MethodXYZ with parameters a = 4, b ="ABC", ex);
    }
    Finally
    {
    If (Connection is Open)
    {
    Close Connection
    }
    }

    In the above scenario we have opened a connection in Point # 1 and while processing data i.e Point # 3 the exception gets thrown.In such a case the other statement below ie Point # 4 & #5 will never get executed as the control will be thrown to the catch block and then out of the method. This will lead to open connection.To take care of such situations instead of writing the close connection code in the Try block we should write the same in the Finally block as this block will get executed irrespective of whther there is an exception or not.


   UPDATE: plz check this post related to exception being raised due to using Response.Redirect
in a try catch block

Copyright © Shounak Pandit

Programming outlook 2003 in C# using outlook in C# to send mails


A good resource to programming outlook 2003 using c# or using the Primary interop assemblies for Microsoft outlook 2003 in C#

MSDN Article

please note its better to use the primary interop asemblies than directly referencing the COM outlook library

Deja vu Avec Nant & Continous Integration


Got lucky to try my hand at Continous integration once again.. I remember it has been like more than 5 years now that i had used Nant and CCnet for Continous Integration.

It was fun and challenging to use with the then rustic error messages thrown by both.also configuring the same was also a big pain..
Had asked a developer to get it setup for one of the teams projects as i was aware of the advantages of continous integration. but the developer wasn't able to get it up and running so finally had to get my hands dirty in CI.

Was surprised to see that even now almost after 4-5 years there is no guide/how to on setting it up and using it completely. even now ppl have to go through the site and exmaples which arent in reality what we look for..

Anyways enuf of cribbing .... ill put up a howto/guide on setting it up soon ,it wont be very soon as am quite tied up with different project releases and process implementation stuff.. but hopefully it should be out by mid Oct !!
Copyright © Shounak Pandit

Visual Studio IDE Tips & tricks: ShortCuts for playing with blocks regions


How many times we get fed up of all the cluttered code? Best thing to do is put regions and collapse the regions to free up some space...

  • Fold/Unfold the current code block - Ctrl+M, Ctrl+M

  • Unfold all - Ctrl+M, Ctrl+L

  • Stop outlining - Ctrl+M, Ctrl+P

  • Fold all - Ctrl+M, Ctrl+O

Best frequency for code review... how to code review


Had an interesting discussion with a peer while coming back home..and it got me thinking..  he was complaining about the quality of code by his developers and was inquiring what approach I follow in my projects.

To tell you the truth I don't follow a specific time frame or frequency for performing code review.

Just to give you some food for thought
The frequency of code review should be directly proportional to the number of developers working on the project.

More the number of developers on a project more should be the code review frequency.just to give you a rough idea How many lines of code do we write in an hour? or in an day? we write lots of lines of code... multiplied by the number of developers is the lines of code you will have to review !!!!!!!

He was arguing about the time a PL/TL gets to do code reviews. well yes indeed he was right in his argument, we as PL's definitely do not get much time but who says we have to do code reviews every time till the release of the project?

The way the developers will write code in a project depends directly on the way they write code in the first couple of weeks of the start of the development phase.If you get them into the habbit of coding it right from the start of the project i guess we wont have to monitor much.

Of course that depends on the quality of the resource :)

The way i do code reviews is through automated tools & mentoring of good developers to perform code reviews on the team mates.

Naturally PL's dont get much time to get deeper into the code review process but yes all they have to do is

  • Identify the good resource who has a good style + approach at coding and mentor him/her to get into your shoes of performing code reviews.

  • Dont completely rely on that resource you do your surprise random code reviews.

  • Encourage peer reviews amongst the team. This will in turn ensure small coding issues get addressed at your subordinate level.

  • Utilize automated tools for code reviews there are loads of them in the market

  • There also are some preventive code review tools which get integrated into the VS IDE as a plugin and correct you with regards to naming convention/ style to a certain extent while you are writing code.Makes sense doesn't it? to be told what not to do while you are doing it rather than being told after you have already done it and moved on to the next piece of code.

  • Generate a check list for coding standards.


Copyright © Shounak Pandit

These are my views, my thoughts need not necassarily be the same as yours….. :)

Effective Code review or How to execute a Succesful code review


Code Review.... The dreaded words for a newbie ears ..or in most of the cases even for the experienced developers!!!!

How to code review ?
Over the years of being the code reviewer or me being the reviewee have noticed a few things which i feel are worth mentioning for an effective and pain free code review to happen.

What exactly is a code review i guess everybody knows that , ill try and point out some of the things which should be taken care of for a productive and pain free code review to happen.

  • Objective: Make sure the objective behind the code review is well known to the developers involved: Developers need to understand that the code is being reviewed and not the developers ability to code.



  • Coding Standard: Make sure you have a predefined set of coding standards circulated with the team before coding. Developers wont have any clue as to what you as a reviewer feel is the right coding standard unless they know what needs to be followed before they start coding.



  • Dont Accuse:Code review shouldn't be used to accuse the coder, but to point out the improvement areas in the code.



  • Ask / Discuss: Ask reasons for deviation that have happened than assuming: Its better to let the developers explain the reason for deviation rather than assuming.Lets face it many time there are some theoretically correct statements which cant be possible practically.Hence ask reasons for deviation, understand the developers thought process.



  • Listen: Remember the coding approach you use isn't like the ten commandments.Just because you feel reaching point C is better by going via point A not necessarily everybody will think the same.Let the developer explain why he felt going via point X was better as per him.



  • Understand: Remember the code review is about the coding style not about you.: Dont get offended if there are any improvement areas in your coding.Keep one thing in mind the person reviewing your code has also gone through the same phase as you currently.and till the time one understands the improvement areas we wont be able to improve and do coding expected by a seasoned developer.



  • Contribute: The coding standards wont contain all the development situations we face under the sun Hence contribution from the developer is absolutely necessary.Just because the person reviewing your code is a TL or PL doesn't mean he is right all the time.Express your view, understand the reasons why there are improvement areas.Keep one thing in mind we do those things best in which we believe in!!! hence if you do not understand why we are doing certain thing in a certain expected way you will never do it correctly so discuss and understand.



  • Appreciate: Code review isn't just about finding improvement areas. Utilize it also to appreciate someones coding style/Approach.


    Lets face it whether we like it or not we have to go in for code reviews some because their leaders make it mandatory while some because they understand the importance of code review.As long as code review happens in the right manner and for the right reasons it is always healthy for the complete team.

    Have seen or rather experienced developers who would argue over coding standard violation with pointless reasoning.reasoning that would be treated as childish excuses.Listen and explain to them anyways try and make them understand.Ofcourse in many cases you as a TL/PL need to put your foot down or do a little booting to make the developer sunderstand that crappy excuses wont be tolerated.

    Also one good thing to do beyond the coding standards document of what to do is to create a coding standard checklist for developers to check against as when they are coding.

    Copyright © Shounak Pandit

    These are my views, my thoughts need not necassarily be the same as yours.....

Google Chrome the new hottie in the market ..


Google chrome just another browser or the mother of all browsers?

Google has done it again..another product/service in the market that has caught all the attention... yeah there are some negative feedbacks especially by the German media on the same too but hey whats success without some criticism??

The argument they have setup is pretty much the old stuff... personal data going to google with respect to the auto suggest feature explained more in detail here

 Google did bend to the criticism and declared they will anonymise the data within 24 hrs of collecting it..but the speculations will always be there..don't understand the logic behind it... guys its a open source just dig into the source and satisfy your speculative minds ( if you are upto it :) ).... rather than just barking into the wind...

yeah its a bit risky giving a Beta to inexperience non techie users its like giving a child a Bazooka !! but am sure the Beta isn't a actual Beta in the scientific terms its definitely a well tested and tried version of the product.we can trust google on this..

 

© Shounak Pandit

Code Review / Peer review.....


One wonders ....Why in the name of God would one want to spend (waste as some people say) time on performing a code review on any piece of code which we/peers have written and seems to be working properly and providing the functionality

I remember back then when i was an intern and i was assigned to a project in which my PM was a guy working in our US branch...people having worked with US bosses might be knowing thr are 2 types of techies our there... one who have less knowledge than you and the other lot who has so much knowledge than you that they make you feel like you are learning the alphabets of development while they are shooting out complex phrases after phrases of sentences....

man how i hated that guy i can still recall his words "Shounak, Dont even show me the functionality i dont care about it, first make sure you have it as per the coding standards" and i used to think what kind of a weirdo have i got as my boss ..he doesn't even want to see if the requirement has been met but cares about some stupid code review.....and i used to laugh at his code review obsession...

but over the years as i grew into a techie...into what they call a seasoned developer ..i realised the importance of code review
Code review isnt a tool to find mistakes in others code...its a tool by which one ensures the code is going to meet the standards expected of a seasoned developer.

There are various technical ways of achieving our requirements...or rather let me put it this way there are abundant ways of screwing up the way you meet your requirement.and there are some ways in which you meet the requirement in one of the optimum ways...and code review is a tool that helps us walk on the optimum path or close to the optimum path...



for an example check my post on string builder usage vs string concat... at String Builder Vs String concat/


Code reviews are important for a developer to understand how to keep improving his coding style ..


there are various good tools used for having automated code checking one that i have used extensively in my development days is FxCop and one more that i can't recall the name of...these were tools which would use the assembly n metadata as source and parse the assembly for any coding style /optimization errors


will try and write up about one of them soon



Cheers


© Shounak Pandit



It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level This error can be caused by a virtual directory not being configured as an application in IIS


Got the following error some time back when i tried running the project,



since it said that it wasnt configured to be dubugged i ran it with the good old "CTRL + F5" option and got the following error message in IE



my first guess after reading the error (make that reading half the error) was that somehow there was some configuration problem regardign who overrides whom in the web.config and the machine.config.

but after reading the Total error message understood that the error wasnt in the Web.config it was in the IIS virtual Directory settings that I had ,somehow it had changed.

Anyways, here is how to solve the error :-

Just open IIS and goto the properties for the Virtual directory and click on this button

How to have Multiple Instances of Project Server 2003 on 1 Machine


How to have Multiple Instances of Project Server 2003 on 1 Machine


How to have Multi[ple Instances of Project server on 1 Machine

I am using the following as examples throughout this article this will describe the steps needed to follow using EditSite tool by Microsoft:

SQL Server : Shounakp (my machine)

Database Name : ProjServer

Site name : ProjServer

Edit site tool : http://go.microsoft.com/fwlink/?LinkId=20891



    1. Copy the DATABASE directory – inside the support directory from your SQL 2002/ MS Project server installation CD, to the local drive on your SQL server (Server containing the ProjectServer DB).

    2. Create the new DB ( check fig below ) that will host your new Project Server instance in your SQL server. We need the <SETUPDB.CMD> file.
      NOTE: We cannot name the new instance DB as ProjectServer since the already existing instance of project server creates a DB named ProjectServer for use.







3. On your SQL server, go to command prompt and execute the following command from the Database directory.



4. In this case, <ProjServer> is my SQL Server and using the <SA> account with password < pa$$@word1 >. The command will look like this : E.g



5. Hit ‘Enter”

6. The processing will take up few minutes let it finish properly (check the following screen)





7. The screen will look like the following screen shot, you will have to press any key to continue.



8. We need to grant permissions to the MSProject Roles on our new instance Database. Follow the steps





      • Open SQL Server Enterprise Manager

      • Click <Security>

      • Click <Logins>

      • Double-click on MSProjectServerUser and grant permission to access the new Dataabse instance <ProjServer>

      • Check <Public> and <MSProjectServerRole> in the <Database Roles> in ProjServer DB (the name of your new DB is) Tab.

      • Double-click on MSProjectUser and grant permission to access the new <ProjServer> Db

      • Check <Public> and <MSProjectRole> in the Dabase Roles in ProjServer (the name of your new DB is) Tab






See the following snap shot :-





9. Install the EditSite tool

10. Browse to C:\Program Files\Microsoft Office Project Server 2003 Resource Kit\Toolbox\EditSite and open the tool .

11. Click on “Add” in the Edit Site tool.A prompt will appear with focus on <Site Information> Tab (see folowing screen shot).

12. Enter the <SiteName> and In <Session Manager> enter the name of your SQL server Machine managing your Session
in my case I used <shounakp>. Select “Default Web Site”, and any of the application pools. I selected MSPS2003AppPool.





13. Click on the Database Information tab and fill in the details.




    • Enter the name of your SQL server, the name of your new manually created DB (in my case I used ProjServer)

    • Enter the SQL user that has the MSProjectServerRole in ITProjects DB (in my case I used MSProjectServerUser with password “password”) and its respective password.

    • Do the above for the MSProjectRole Member (in my case I used MSProjectUser with password “password”.






14. Click on the <Windows Sharepoint Services Information>

We need to use the same Sharepoint Services settings that we are already using for the 1st instance of Project Server
Hence we can get the WSS Settings from the 1st instance of the ProjectServer.


By following the path : Admin - > Manage Windows Sharepoint Services (See snapshot)



15. Click on Create of Edit Site tool You will get the message indicating that the new site was successfully created

16. Open IE and go to your new PWA instance. In my case, I go to http://shounakp/ProjServer

You will be given the following screen :-



17. Enter User name: Administrator and DO NOT enter a password. Hit “Enter”
You will see your newly created Project Server Instance and this message will pop up giving you the opportunity to change the PWA
Administrator’s password.






Change and save the password

18. Enjoy your newly created Project Server instance.



Cheers!!!!!

UPDATE: Reposting from my previous blog..

Copyright © Shounak Pandit

Crystal Report toolbar images not Displayed ASP.NET


Reposting from old blog

One of my colleague faced a strange problem while using Crystal Reports

He got his report published on the ASPX page but the images in the toolbar weren't being displayed.
While trying to find out the problem for it I checked the ASPX page and noticed that the src path for the images on the toolbar was from another virtual directory  “crystalreportwebformviewer2” which to our surprise didnt exists on his machine at all.
Well no idea whether that was due to inapropriate installation or what but the fact was we didnt have a directory to which
t he images were being referenced from.

Well anyways here's the solution to the above problem
When you plan to use the Crystal reports toolbar in your reports it will automatically
refer to the images stored in your program files directory i.e


C:\Program Files\Microsoft Visual Studio .NET 2003\Crystal Reports\Viewers\Images



this directory has all the images in appropriate sub directories inside but for .NET to refer to it at runtime there
needs to be a virtual directory


in Our case the virtual directory being referenced was This might change according to the version of Crystal reports being used.

So all we had to do to get the Images on the toolbar was to

1# Create a virtual directory   crystalreportwebformviewer2
2# M
ap it to  C:\Program Files\Microsoft Visual Studio .NET 2003\Crystal Reports\Viewers\Images


After which the images on the toolbar were displayed without any other issue :)

Shounak Pandit

How StringBuilder string concatenation affects performance , string builder vs string concatenation "+"


reposting from older blog

How String Concatenation String Builder Append affects performance

Most of us have used String concatenation in our projects, Have we ever given a thought to what goes on behind while concatenating the strings?

There is a major flaw in using string concatenation as against the String builders append concerning performance only.
Except for performance and memory management both are same and give us the same desired output.

How they work


Lets take a look at how the things work when we concatenate strings

lets take a case where we are concatenating 2 strings and assigning the output to a 1st string

outputString += secondString;

In the above case, each instance of the string is created and assigned hence

in total we will have 3 instances of the strings!! Surprised?? well thats how strings concatenation works

It will create a new string outputString,with both old outputString and secondString

String objects in .net are immutable. Once the string has been created, the value can't be changed. When you type
outputString = outputString + secondString;
you actually discard the old outputString and create a new string object containing the result of the concatenation. When repeated several times, you end up constructing many temporary string objects.


now just imagine the case where you have n number of strings you have to concatenate how many string objects will be created wont that be a waste of time ??? Creating a string object assigning it some value then again creating a string object and so on .....

Imagine the impact on the performance of the application!!!!

Now lets see how String builder works

Using a string builder you will have



System.Text.StringBuilder outputString = new System.Text.StringBuilder();

outputString.Append(secondString);

StringBuilder, is a mutable string hence in this case we just have 1 instance of outputString and the second string is appended into that existing instance
no other instance is created hence the process is efficient and fast.


Note :- The point to remember here is that using StringBuilder for a concatenation of 2-3 strings doesnt make a significant difference in the performance but when you have numerous strings then the usage of StringBuilder has a big positive Impact on the performance

To see a example check my post

Shounak Pandit

Sending a Appointment programmatically through Code , ASP.NET ,ICalendar Format


Here is  in which you can send appointments via ICalendar format through code and not using the Outlook Object library (This is a very basic version of the way and does not involve much exception handling,and doesnt take care of nth case , explore a bit on that front :))



I am going to show the method of sending an appointment by creating a ICalendar Appointment file first and then sending it as an attachement over email.  (The way in which ICalendar format files are sent when you click on Tools ->Export -> as ICalendar file in the appointment )






Here is the declaration for the TimeFormat and some variables used to fill  the Appoinment details. viz start time,endtime etc.





const string c_strTimeFormat = "yyyyMMdd\\THHmmss\\Z";
string
strStartTime="";
string
strEndTime="";
string
strTimeStamp="";
string
strTempStartTime ="";
string
strTempEndTime = "";
string
vCalendarFile = "";

Create a Skeleton for the appointment ICalendar file format and using the variables created above we will assign the values accordingly into the Appoinment skeleton. (This string concatation can be optimised by using string builder)







// VCalendar Format.
const string
VCAL_FILE =
"BEGIN:VCALENDAR\n" +
"VERSION:1.0\n" +
"BEGIN:VEVENT\n" +
"DTSTART{0}\n" +
"DTEND{1}\n" +
"LOCATION;ENCODING=QUOTED-PRINTABLE:{2}\n" +
"DESCRIPTION;ENCODING=QUOTED-PRINTABLE:{3}\n" +
"SUMMARY;ENCODING=QUOTED-PRINTABLE:{4}\n" +
"TRIGGER:-PT15M\n" +
"PRIORITY:3\n" +
"END:VEVENT\n" +
"END:VCALENDAR" ;



Assign the Appointment values to the variables declared in the first code section and in the appropriate format.








DateTime dtmStartDate = DateTime.Parse(startDate.ToString());
DateTime dtmStartTime = DateTime.Parse(startDate + " " + startTime.ToString());
DateTime dtmEndTime = DateTime.Parse(startDate + " " + endTime.ToString());
strTempStartTime = string
.Format("{0} {1}",
dtmStartDate.ToShortDateString(),dtmStartTime.ToLongTimeString());
strTempEndTime = string
.Format("{0} {1}",
dtmStartDate.ToShortDateString(),dtmEndTime.ToLongTimeString());
strTimeStamp = (DateTime.Parse(strTempStartTime)).ToUniversalTime().ToString(c_strTimeFormat);
strStartTime = string
.Format(":{0}", strTimeStamp);
strEndTime = string
.Format(":{0}",
(DateTime.Parse(strTempEndTime)).ToUniversalTime().ToString(c_strTimeFormat));

Using String.format fill in the Appoinment skeleton created earlier with the variable values.





vCalendarFile =
String.Format(VCAL_FILE, strStartTime, strEndTime, location, summary, subject , strTimeStamp, attendeeEmail.Trim() , "ShaunakP", attendeeName.Trim(), attendeeEmail.Trim(), organizerEmail.Trim());

Now that we have the ICalendar file created, we need to write it to the disk so as to attach it to the outgoing email
(Anybody knows a method of just creating the ICalendar file in memory and directly attaching the file without creating a Physical file please leave a feedback on how to do that,didnt get much time to look into it.)







filePath += "\\" + subject+ ".ics";
TextWriter tw = new StreamWriter(filePath);


// write a line of text to the file
tw.WriteLine(vCalendarFile.ToString());


// close the stream
tw.Close();

Now that we have the ICalendar all we need to do is send a mail to the persons involved in the Appoinment with the ICalendar file as an attachment.







// Create object for sending mails

MailMessage mail = new
MailMessage();
mail.To = attendeeEmail.Trim();
mail.From = organizerEmail.Trim();
mail.Subject = "You have got a Appointment.";

// create the attachment
MailAttachment attachment = new MailAttachment(filePath, MailEncoding.UUEncode);
// Attach
mail.Attachments.Add( attachment );
SmtpMail.SmtpServer = _smtpServer;
SmtpMail.Send( mail );

When the Person who receives the mail opens the attached ICalendar file,it will open up in Outlook as an Outlook Appoinment.

Cheers!!

P.S There are a lot of improvements that can be done in this code like for e.g using stringbuilder etc but I have skipped on them as this is just a code snippet.

To see the code for the above SendAppoinment method click here

*Update : For those of you interested in sending a Meeting Request here is the VCalendar format





"BEGIN:VCALENDAR\n" +
"PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" +
"VERSION:2.0\n" +
"METHOD:REQUEST\n" +
"BEGIN:VEVENT\n" +
"ATTENDEE;CN=\"{8}\";ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:{9}\n\n" +
"ORGANIZER:MAILTO:{10}\n" +
"DTSTART{0}\n" +
"DTEND{1}\n" +
"LOCATION:{2}\n" +
"TRANSP:OPAQUE\n" +
"SEQUENCE:0\n" +
"UID:{6}\n" +
"DTSTAMP:{5}\n" +
"DESCRIPTION:{3}\n" +
"SUMMARY:{4}\n" +
"PRIORITY:5\n" +
"X-MICROSOFT-CDO-IMPORTANCE:1 \n" +
"CLASS:PUBLIC\n" +
"BEGIN:VALARM\n" +
"TRIGGER:-PT15M\n" +
"ACTION:DISPLAY\n" +
"DESCRIPTION:Reminder\n" +
"END:VALARM\n" +
"END:VEVENT\n" +
"END:VCALENDAR" ;



* Known Issue: If a person rejects the meeting it wont be conveyed to you

Datagrid Sorting ASP.NET or How to Sort Datagrid


Datagrid Sorting ASP.NET or How to Sort Datagrid


Step I )

In the Datagrid definition:
add 2 properties AllowSorting = true and OnSortCommand="MethodName in code behind"


e.g
<asp:datagrid id="dgSearchList" runat="server" Height="125px" Width="627px" CssClass="panelChildSolidBorder"
CellPadding="2" AllowCustomPaging="True" AutoGenerateColumns="False" OnItemCommand="detailsClicked"
ShowHeader="True" AllowSorting="True" OnSortCommand="dgSearchList_SortClick" PageSize="4">

AllowSorting="True"
makes the datagrid sortable and OnSortCommand="dgSearchList_SortClick" tells which method to call when the header is clicked.


Step II )

Now we need to define the method to call when the column headers are clicked
here dgSearchList_SortClick is the method that will be called when the Column headers are clicked for sorting.

Codebehind :

public void dgSearchList_SortClick(object sender,DataGridSortCommandEventArgs e)
{
sortField = e.SortExpression; // ie the Sortexpression assigned to the Column.Check STEP III for how to assign a   // sortexpression on a column.
PopulateDatagrid(); //Call the method that populates the Datagrid with
//the values from the Dataview.
}

PopulateDatagrid()
{
if(sortMode.ToString().Trim().Equals(SORT_ASC))
{
sortMode = SORT_DESC; // Here sortMode is just a Variable storing the
direction of the sort.There are better ways to store this than the current one shown hereJ
}
else
{
sortMode = SORT_ASC;
}
txtSortMode.Text = sortMode;

// SORT_DESC and SORT_ASC are constants with the following string values.
// SORT_DESC = “Desc”
// SORT_ASC = “Asc”

DataView dv = new DataView(dt);
dv.Sort = sortField.Trim() + " " + sortMode;
dgSearchList.DataSource = dv;
dgSearchList.DataBind();

}

The code above checks whether we want to sort in Ascending order or in Descending order
and assigns the SortExpression concatenated with the Sorting direction (Asc/Desc)
and binds the datagrid again (don’t forget to bind the data grid its very important)


Step III)
You need to specify the sorting expression for that column in the column definition in the ASPX page

e.g
<asp:BoundColumn DataField="Location" SortExpression="Location" HeaderText="LocationArea">
<ItemStyle Height="10px" Width="10px"><!--ItemStyle>
asp:BoundColumn>


be carefull of what you define as the sortexpression because this is what is passed to the codebehind and sortexpression is what identifies which column was clicked for sorting

in this case the sort expression for the LocationArea column is “Location”, hence when we clicking on the location column will set the e.SortExpression (check Step III for e.SortExpression) to “Location”. Hence identifying the column clicked.

First Web Service :) used XSLT for transforming XML


Worked on my first Web Service today, wasn't much of a complex web service but I got some idea about WebServices and their working.
Was a simulation of a XML returned by a third party tool retrieving records from DB2,
The objective involved getting rid of the extra nodes (data) returned in the XML from the 3rd party and just passing on the XML data recognised by the consumer application as a valid object.This was achieved by making my transformer app sit in between the Webservice and the consumer app.


The best option in this case was transforming the XML output from the 3rd party tool into XML recognised by the consumer application using XSLT as it allowed us to change the nodes (data) passed on to the consumer app by just changing the XLS file and not recompiling the whole of the transformer app (incase we had written a custom class to take care of parsing the output XML and returning only selected number of fields).
Will post a code snippet on the transformation code a bit later.Now I am almost done with the Cruisenet Doc ,will be posting that in a while here (by tomorrow most probably) and ofcourse the Nant and Nunit doc need to be completed and posted too :)

Response.Redirect Try catch block , ThreadAbortException


What is with the combination of Response.redirect and Try catch block?



well, most of you who have tried out the combination must have been stuck with a weird error of "Thread was being aborted" and must have wondered what has a thread got to do with Response.redirect?



Well, to answer your question here goes:-

A thread is executing your application in terms of ASP.NET worker process , when you call Response.Redirect(URL);

In your code then to redirect to the new URL specified by you ASP.NET framework must be told to stop the current execution of the page and to transfer the execution to the URL page specified in the method call.

This is done in a 2 way step :-

1) Response.End() is called internally by Response.Redirect to stop the current execution and the ThreadAbortException is thrown.

2) .NET framework will call catch “ThreadAbortException” and stop current execution and start executing the new page.

Now during the Step #1 Response.End will throw out a ThreadAbortException” to let .NET framework know that the current execution needs to be stopped and the execution of new should begin.

Asp.net framework catches the Redirect method's exception, aborts the thread and use a new thread for execution of to be redirected page.



Solution :- The way to get over this problem is to specify Response.Redirect(URL,false) , this will tell .NET framework not to stop the execution of the current thread and hence the error will be resolved.

ThreadAbortException” is a special kind of an exception even if you catch it in a catch block even then it will be raised again at the end of the catch block. When this exception is raised, the runtime executes all the finally blocks before killing the thread.

Visual Studio .NET has detected that the specified Web server is not running ASP.NET version 1.1. You will be unable to run ASP.NET Web applications or services


“Visual Studio .NET has detected that the specified Web server is not running ASP.NET version 1.1. You will be unable to run ASP.NET Web applications or services“

Got this error when i tried to create a new web project on my computer in my new company
Here is the solution i followed :-

  • Open Visual Studio Command prompt.

  • Type “aspnet_regiis -i“ and press enter.


Here is the output :-

c:\>aspnet_regiis -i
Start installing ASP.NET (1.1.4322.0).
Finished installing ASP.NET (1.1.4322.0).


Thats it now try creating a new web project it will work.

UPDATE :

Steps to reach the VS Command Prompt

1) Click Start.
2) Programs/All Programs.
3) Microsoft Visual Studio .Net 2003.
4) Visual Studio .Net Tools
5) Visula Studio .Net 2003 command Prompt.



Server versions of OS

For the Server versions of OS the above step might not work Try the following

To resolve this problem, change the status of ASP.NET 1.1 to Allowed in the Web Service Extension list in IIS 6.0. To do this, follow these steps:






















1.Click Start, point to Programs, and then click Control Panel.
2.Double-click Administrative Tools, and then double-click Internet Information Services (IIS).
3.Click Web Service Extensions.
4.In the details pane, click ASP.NET v1.1.4322 in the Web Service Extension list.
5.Click Allowed to change the status from Prohibited to Allowed.

NOTE:- There is an issue in running ASP.NET over sharepoint portal server some settings need to be made for the 2 to run.
Copyright © Shounak S. Pandit. Powered by Blogger.

Ads