Uncategorized

SQL JOIN Explained

Join in SQL  is again important topic in database. The good thing about this topic is that we all know about it but even after that we do mistake in explaining it. We know all the definitions, all types of join then also we are not clear about it . The reason I can say is instead of being application minded we restrict ourselves only to the content. If I think about the audience of this article I can assume that it is definitely going to help college students but its also beneficial to people who are working on database in MNCs.

Creating a JAX–WS Web Service Using IBM RAD and WebSphere 6.1

Creating a JAX –WS Web Service Using IBM RAD and WebSphere 6.1

I will discuss today creating a jax-ws web service using IBM RAD and websphere 6.1 .The theoretical parts I will cover in some other article. Today I am going to just show you all that how a jax-ws web service can be created using IBM RAD and websphere 6.1 and believe me if you are in learning phase then you will feel very happy to create web service of your own J. I will write in steps with the screen shots attached so that it will be easy for you.

You can download this article in pdf format from here.

Step 1:
          Create a new IBM RAD Workspace.
Step 2:
          Create a new Dynamic Java Project named “JAXServer”. We need to enable WebService Feature pack of WAS 6.1. Follow the below snapshot.

Enter the Project name as JAXServer.
In Configuration Click on Modify Button
Fig-1
  
 
Select WebSphere 6.1 Feature Pack for WebServices and then press Ok. And then Click on Next and Finish.

Fig-2

Step 3:         Create a new endpoint interface for defining our endpoint class. Right click in the src folder and add new interface and name it as “Calculator” in the com.pp package

Fig-3

Fig-4

 
 Step 4:
          Now we will define an interface for our calculator program. Write the below code in the Calculator interface.     

package com.pp;
 
import javax.jws.WebMethod;
import javax.jws.WebService;
 
@WebService
public interface Calculator {
 
          @WebMethod
          public int add(int var1, int var2);
}

 
Step 5:
          Now we should define an implementing class for our interface. We should  now create a class in the same package and name it as “CalculatorImpl”. This class will implement the Calculator interface and override the add method. The code that must be written inside CalculatorImpl class is given below.
 

package com.pp;
 
import javax.jws.WebService;
 
@WebService(endpointInterface=" com.pp.Calculator")
public class CalculatorImpl implements Calculator{
 
          public int add(int var1, int var2) {
                   return var1+var2;
          }
}

 
Now everything is explained via snapshot.
 
Step 6: Go to the Impl class and right click->WebServices->CreateWebService

 Fig-5
 
Service Implemtation class should show the name of Impl Class. Here CalculatorImpl

Fig-6
 
Check the Option Generate WSDL file into Project

 

 
Fig-7
 
Step 7: When you click finish Wsdl will be auto genarted and you webService will be deployed. Expand the Project JAXServer and look for wsdl in wsdl folder.
 

Fig-8
         
 Step 8:
          Now validate the wsdl and Test using WebService Explorer
Fig-9

Step 9:
          Now let us check the wsdl document that would have got generated. Type the below URL in the internet exlplorer.
This address is there in soap:address location in WSDL

http://localhost:9080/JAXServer/CalculatorImplService?wsdl

        
Step 10:
          You would get the wsdl file that would have been generated for our Calculator endpoint.

Fig-10

 
Step 11:
          So far we have created a service and published it. Next thing is that we must test with WebService Explorer. Right click on wsdl->WebServices->Test with WebServices Explorer

Fig-11

 
Click on the add link in under Operation

Fig-12
 
 
Enter the value of arg0 and arg1
For Ex : 4 and 5 I have entered
Fig-13

 
 
 You should see the result as 9

Fig-14
 
Now you Web Service is Up and running.
 
Step 12: Client Creation
          Create a new Dynamic Web project titled “JAXClient”.
Step 13:
          Now we need to create the various stubs required for accessing the service. The stubs can be auto generated. Create a package com.client and follow the diagram.
Right click on package com.client->New->Other
 Fig-15

Under Web Services Select Web Service Client. Click on Next

fig-16
 
Click on Browse Button of Service Definition and select the WSDL file of JAXServer Project.
Press Ok.

 fig-17
 
When you have pressed OK. You will see the below window. Verify The path and Configuration mentioned is correct or not.
Server : WebSphere Application Server 6.1
WebService Runtime: IBM webSphere JAX-WS

Fig-18
 
 
 Click on Finish. All the required files will be auto generated. See the below
snapshot
 
Fig-19
 
Step 14:
          Go to the class CalculatorImplService in com.client package
          The Client project uses WSDL . You need to change it the url.
          See the below snapshot.
          I have changed the URL to
          http://localhost:9080/JAXServer/CalculatorImplService/calculatorimplservice.wsdl
 
        

 Fig-20
Step 15:
          Now Remove the WebSphere Library from the Project.
          We Need only the WebSphere thin client jar for WebService Client.
          Follow the below steps
         Right Click on JAXClient->BuildPath->Configure Build Path
         
Fig-21
 
 
Under Libraries Tab -> Click on WebSphere Application Server 6.1. Click On Remove.
And Press OK.

Fig-22
 
When You do this all the class in client package will be marked with red sign. So we need to add thin client jar.
For me the location of thin client jaxws jar is
D:\Program Files\IBM\SDP\runtimes\base_v61\runtimes
So accordingly you need to add this
com.ibm.jaxws.thinclient_6.1.0.jar to the JAXClient by clicking on Add External Jars under Configure Build Path Option.
Fig-23

Step 16:
          we need to create a client program that invokes the server through the stub.
 
Step 17:
          Create a new Java class “Client” in the com.client package.
 
 
Step 18:
          Write the below code inside the Client class to invoke the stubs.
 

 
package com.client;
 
public class Client {
          public static void main(String[] args) {
                   CalculatorImplService service = new  CalculatorImplService();
                   Calculator calculator = service.getCalculatorImplPort();
                   int var1 = 20;
                   int var2 = 50;
                   int value = calculator.add(var1, var2);
                   System.out.println("my Web services program : ");       
                   System.out.println(value);
          }
}

 

 
Step 19:
          Execute the Client.java as java Application. You would get the following output in the console
Fig-24

Step 20:
          We have created a web service and deployed it successfully.
 
In the next article I am going to explain the theoretical details as well as how to create a secure web service and how any client can invoke it using certificates i.e public key.

You can view this article at SlideShare too!

HttpHandlers in .NET demystified

What is Http Handlers?
An ASP.NET HTTP handler is the process that runs in response to a request that is made to an ASP.NET Web application. The most common handler is an ASP.NET page handler that processes .aspx files. When users request an .aspx file, the request is processed by the page handler.

HTTP handlers are of two types:

  • Synchronous HTTP Handlers: These handlers process the HTTP request in a synchronous manner and will return only when processing of the request for which it is called is complete.
  • Asynchronous HTTP Handlers: These handlers process the HTTP request in an asynchronous manner. It allows the user to make remote server calls to start an external process. This greatly improves performance as these handlers do not wait for the completion of external processes.

Basics of Normalization with examples

Normalization Resolved
Normalization is one of the favorite topics of interviewee. It does not matter whether you have mentioned DBMS in your resume or not .This question is going to come and the funny part is that all of us know
  • what is normalization?
  • What are the different types of normalization?

So when this question on being asked the interviewer who have already prepared for it start with the history of normalization and end with the geography of normalization but when the next question for which they have not prepared i.e.  apply normalization in real case scenario.

Now here comes the real part of normalization and just because of not proper concepts, people end up confusing themselves. So the idea is to not only to get familiar with normalization but also how to apply it in real time scenario.

What is Normalization?
Database designed based on ER model may have some amount of inconsistency, ambiguity and redundancy. To resolve these issues some amount of refinement is required. This refinement process is called as Normalization. I know all of you are clear with the definition, let’s go with :

  • what is the need of normalization?
  • What are the problems we can face if we proceed without normalization?
  • What are the advantages of normalization?

Asking question to oneself is the best way to get familiar with all the concepts.

The need of Normalization
I am going to show you one simple E-R model database.

Student Details Course Details Result details
1001   Ram               11/09/1986 M4       Basic Maths                       7 11/11/2004       89           A
1002   Shyam           12/08/1987 M4       Basic Maths                       7 11/11/2004       78           B
1001   Ram               23/06/1987 H6                                                    4 11/11/2004       87           A
1003   Sita                16/07/1985 C3        Basic Chemistry                 11 11/11/2004       90           A
1004   Gita               24/09/1988 B3                                                     8 11/11/2004       78           B
1002   Shyam           23/06/1988 P3        Basic Physics                     13      11/11/2004       67           C
1005   Sunita           14/09/1987 P3        Basic Physics                      13 11/11/2004       78           B
1003   Sita                23/10/1987 B4                                                      5 11/11/2004       67           C
1005   Sunita           13/03/1990 H6                                                     4 11/11/2004       56           D
1004   Gita               21/08/1987 M4      Basic Maths                         7 11/11/2004       78           B
 
In first look the above table is looking so arranged and well in format but if we try to find out what exactly this table is saying to us , we can easily figure out the various anomalies in this table . Ok let me help you guys in finding out the same.
  1. Insert Anomaly: We cannot insert prospective course which does not have any registered student or we cannot insert student details that is yet to register for any course.
  2. Update Anomaly: if we want to update the course M4’s name we need to do this operation three times. Similarly we may have to update student 1003’s name twice if it changes.
  3. Delete Anomaly: if we want to delete a course M4 , in addition to M4 occurs details , other critical details of student also will be deleted. This kind of deletion is harmful to business. Moreover, M4 appears thrice in above table and needs to be deleted thrice.
  4. Duplicate Data: Course M4’s data is stored thrice and student 1002’s data stored twice .This redundancy will increase as the number of course offerings increases.
Process of normalization:
Before getting to know the normalization techniques in detail, let us define a few building blocks which are used to define normal form.
  1. Determinant : Attribute X can be defined as determinant if it uniquely defines the value Y in a given relationship or entity .To qualify as determinant attribute need NOT be a key attribute .Usually dependency of attribute is represented as X->Y ,which means attribute X decides attribute Y.
Example: In RESULT relation, Marks attribute may decide the grade attribute .This is represented as Marks->grade and read as Marks decides Grade.
Marks -> Grade
In the result relation, Marks attribute is not a key attribute .Hence it can be concluded that key attributes are determinants but not all the determinants are key attributes.
 
  1. Functional Dependency: Yes functional dependency has definition but let’s not care about that. Let’s try to understand the concept by example. Consider the following relation :
REPORT(Student#,Course#,CourseName,IName,Room#,Marks,Grade)
Where:
  • Student#-Student Number
  • Course#-Course Number
  • CourseName -CourseName
  • IName- Name of the instructor who delivered the course
  • Room#-Room number which is assigned to respective instructor
  • Marks- Scored in Course Course# by student Student #
  • Grade –Obtained by student Student# in course Course #
  • Student#,Course#  together (called composite attribute) defines EXACTLY ONE value of marks .This can be symbolically represented as
                                Student#Course# Marks
This type of dependency is called functional dependency. In above example Marks is functionally dependent on Student#Course#.
Other Functional dependencies in above examples are:
  • Course# -> CourseName
  • Course#-> IName(Assuming one course is taught by one and only one instructor )
  • IName -> Room# (Assuming each instructor has his /her own and non shared room)
  • Marks ->Grade
Formally we can define functional dependency as: In a given relation R, X and Y are attributes. Attribute Y is functional dependent on attribute X if each value of X determines exactly one value of Y. This is represented as :

                X->Y
However X may be composite in nature.
 
  1. Full functional dependency: In above example Marks is fully functional dependent on student#Course#  and not on the sub set of Student#Course# .This means marks cannot be determined either by student # or Course# alone .It can be determined by using Student# and Course# together. Hence Marks is fully functional dependent on student#course#.
CourseName is not fully functionally dependent on student#course# because one of the subset course# determines the course name and Student# does not having role in deciding Course name .Hence CourseName is not fully functional dependent on student #Course#.
               
Student#
                  Marks
Course#
Formal Definition of full functional dependency : In a given relation R ,X and Y are attributes. Y is fully functionally dependent on attribute X only if it is not functionally dependent on sub-set of X.However X may be composite in nature.
 
  1. Partial Dependency: In the above relationship CourseName,IName,Room# are partially dependent on composite attribute Student#Course# because Course# alone can defines the coursename, IName,Room#.
Room#
IName
CourseName
Course#
Student#
Formal Definition of Partial dependency: In a given relation R, X and Y are attributes .Attribute Y is partially dependent on the attribute X only if it is dependent on subset attribute X .However X may be composite in nature.
 
  1. Transitive Dependency:  In above example , Room# depends on IName and in turn depends on Course# .Here Room# transitively depends on Course#.
IName
Room#
Course#              
Similarly Grade depends on Marks,in turn Marks depends on Student#Course#  hence Grade
Fully transitively depends on Student#Course#.
 
  1. Key attributes : In a given relationship R ,if the attribute X uniquely defines all other attributes ,then the attribute X is a key attribute which is nothing but the candidate key.
Ex: Student#Course# together is a composite key attribute which determines all attributes in relationship REPORT(student#,Course#,CourseName,IName,Room#,Marks,Grade)uniquely.Hence Student# and Course# are key attributes.
 
Types of Normal Forms
  1. First Normal Form(1NF)
A relation R is said to be in first normal form (1NF) if and only if all the attributes of the relation R are atomic in nature 
Student Details Course Details Result details
1001   Ram               11/09/1986 M4       Basic Maths                       7 11/11/2004       89           A
1002   Shyam           12/08/1987 M4       Basic Maths                       7 11/11/2004       78           B
1001   Ram               23/06/1987 H6                                                    4 11/11/2004       87           A
1003   Sita                16/07/1985 C3        Basic Chemistry                 11 11/11/2004       90           A
1004   Gita               24/09/1988 B3                                                     8 11/11/2004       78           B
1002   Shyam           23/06/1988 P3        Basic Physics                     13      11/11/2004       67           C
1005   Sunita           14/09/1987 P3        Basic Physics                      13 11/11/2004       78           B
1003   Sita                23/10/1987 B4                                                      5 11/11/2004       67           C
1005   Sunita           13/03/1990 H6                                                     4 11/11/2004       56           D
1004   Gita               21/08/1987 M4      Basic Maths                         7 11/11/2004       78           B
 
Table shown above Student Details ,Course Details and Result Details can be further divided. Student Details attribute is divided into Student#(Student Number) , Student Name and date of birth. Course Details is divided into Course# ,Course Name,Prerequisites and duration. Similarly  Results attribute is divided into DateOfexam,Marks and Grade.
 
  1. Second Normal Form (2NF)
A relation is said to be in Second Normal Form if and only If :
  • It is in the first normal form ,and
  • No partial dependency exists between non-key attributes and key attributes.
           
Let us re-visit 1NF table structure.
  • Student# is key attribute for Student ,
  • Course# is key attribute for Course
  • Student#Course#  together form the composite key attributes for result relationship.
  • Other attributes are non-key attributes.
To make this table 2NF compliant, we have to remove all the partial dependencies.
  • StudentName and DateOfBirth depends only on student#.
  • CourseName,PreRequisite and DurationInDays depends only on Course#
  • DateOfExam depends only on Course#.
To remove this partial dependency we need to split Student_Course_Result table into four separate tables ,STUDENT ,COURSE,RESULT and EXAM_DATE tables as shown in figure.

STUDENT TABLE

Student # Student Name DateofBirth
1001 Ram Some value
1002 Shyam Some value
1003 Sita Some value
1004 Geeta Some value
1005 Sunita Some value
 
COURSE TABLE
Course# CourseName Duration of days
C3 Bio Chemistry 3
B3 Botany 8
P3 Nuclear Physics 1
M4 Applied Mathematics 4
H6 American History 5
B4 Zoology 9

RESULT TABLE
Student# Course# Marks Grade
1001 M4 89 A
1002 M4 78 B
1001 H6 87 A
1003 C3 90 A
1004 B3 78 B
1002 P3 67 C
1005 P3 78 B
1003 B4 67 C
1005 H6 56 D
1004 M4 78 B
 
EXAM DATE Table
Course# DateOfExam
M4 Some value
H6 Some value
C3 Some value
B3 Some value
P3 Some value
B4 Some value
 
  • In the first table (STUDENT) ,the key attribute is Student# and all other non-key attributes, StudentName and DateOfBirth are fully functionally dependant on the key attribute.
  • In the Second Table (COURSE) , Course# is the key attribute and all the non-key attributes, CourseName, DurationInDays are fully functional dependant on the key attribute.
  • In third table (RESULT) Student#Course# together are key attributes and all other non key attributes, Marks  and Grade are fully functional dependant on the key attributes.
  • In the fourth Table (EXAM DATE) Course# is the key attribute and the non key attribute ,DateOfExam is fully functionally dependant on the key attribute.
At first look it appears like all our anomalies are taken away ! Now we are storing Student 1003 and M4 record only once. We can insert prospective students and courses at our will. We will update only once if we need to change any data in STUDENT,COURSE tables. We can get rid of any course or student details by deleting just one row.

Let us analyze the RESULT Table

Student# Course# Marks Grade
1001 M4 89 A
1002 M4 78 B
1001 H6 87 A
1003 C3 90 A
1004 B3 78 B
1002 P3 67 C
1005 P3 78 B
1003 B4 67 C
1005 H6 56 D
1004 M4 78 B
 
We already concluded that :
  • All attributes are atomic in nature
  • No partial dependency exists between the key attributes and non-key attributes
  • RESULT table is in 2NF
 
Assume, at present, as per the university evaluation policy,
  • Students who score more than or equal to 80 marks are awarded with “A” grade
  • Students who score more than or equal to 70 marks up till 79 are awarded with “B” grade
  • Students who score more than or equal to 60 marks up till 69 are awarded with “C” grade
  • Students who score more than or equal to 50 marks up till 59 are awarded with “D” grade
 
The University management which is committed to improve the quality of education ,wants to change the existing grading system to a new grading system .In the present RESULT table structure ,
  • We don’t have an option to introduce new grades like A+ ,B- and E
  • We need to do multiple updates on the existing record to bring them to new grading definition
  • We will not be able to take away “D” grade if we want to.
  • 2NF does not take care of all the anomalies and inconsistencies.
 
  1. Third Normal Form (3NF)
A relation R is said to be in 3NF if and only if
  • It is in 2NF
  • No transitive dependency exists between non-key attributes and key attributes.
In the above RESULT table Student# and Course# are the key attributes. All other attributes, except grade are non-partially , non – transitively dependant on key attributes. The grade attribute is dependant on “Marks “ and in turn “Marks” is dependent on Student#Course#. To bring the table in 3NF we need to take off this transitive dependency.
 
Student# Course# Marks
1001 M4 89
1002 M4 78
1001 H6 87
1003 C3 90
1004 B3 78
1002 P3 67
1005 P3 78
1003 B4 67
1005 H6 56
1004 M4 78
 
UpperBound LowerBound Grade
100 95 A+
94 90 A
89 85 B+
84 80 B
79 75 B-
74 70 C
69 65 C-
 
After Normalizing tables to 3NF , we got rid of all the anomalies and inconsistencies. Now we can add new grade systems, update the existing one and delete the unwanted ones.
Hence the Third Normal form is the most optimal normal form and 99% of the databases which require efficiency in
  • INSERT
  • UPDATE
  • DELETE
Operations are designed in this normal form.
 
Hope this article will be useful to engineering students and to interviewer too!

You can download the pdf format of this article from here

You can view this article at our slideshare page too:

 

Minimal introduction to .NET Technology

.NET LogoBefore I Should start writing about .net technology. I want to share my personal experience with .net. When I used to hear  .net in my college days , I had the feeling that may be its something different  that is why it is not in our syllabus .I knew C , C++ ,java  in college and studied these as best I can .

But I was “Zero” when it comes to .net with the supporting language as C#. The story of .net started in my life after joining Infosys and now I find this quite interesting and easy .So I feel so many guys like me who used to give most of their time  peeping sexy gals profile on facebook in college rather  than want to know about  new technology. So this article is going to help those guys .

The first question what is .net? Is it a language?  Is it a technology? Ok If I can find what is .net? Then what is C# .net? what is Vb .net ? what is ASP.net ? What is ADO.NET ? ohh so much of .NET lets go and sleep .So let’s try to understand all the terms  one by one so that if next time if someone will ask do you know .net then you can fool him or her  for 20-25 minutes :P.


WHAT IS DOT.NET ?
The  .NET Framework (pronounced dot net ) is a software Framework that runs primarily on Micorsoft windows  .It includes a large library and provides language interoperability across several programming  languages  .Now in layman terms it’s the most easiest framework I have encountered to work on .Everything is Drag and drop here and you can create a full – fledged Web application or Windows application in one night .Let’s talk about the various properties of .NET. There are so many new features introduced in .NET but I am going to discuss only those which are interesting and helpful in doing practical’s later .
 
  1. Interoperability:  Language interoperability is the ability of code to interact with code that is written using different programming language .Language interoperability can help maximize code reuse and, therefore, improve the efficiency of the development process. It is achieved by the use of CTS (common type system) .Inside CTS the mapping is there for different data types .For ex.  Declaring and defining an integer variable in different programming language is different.
  2. CLR (Common Language Routine Engine ) : The CLR is the execution engine of the .NET Framework. All  .NET programs execute under the supervision of the CLR , guaranteeing certain properties and behaviours in the area of memory management, security , and exception handling .
  3. BCL (Base class library ) :The base class library (BCL), part of the framework class library (FCL) , is a library of functionality available to all languages using the .NET framework .The BCL provides classes that encapsulate a number of common functions , including file reading and writing , graphic rendering , database interaction , XML document manipulation and So on .
  4. CA (Code Access Security) : Code Access Security is based on evidence that is associated with a specific assembly   
Current version of .net framework is 4.5 released on 29th feb 2012 . Requirements are Microsoft visual studio 2011 and windows 8 . I am using .net framework 3.5 with Microsoft visual studio 2008 on Windows Xp .The framework 4.0 was introduced on 12th april 2010 compatible with visual studio 2010 and window 7.

Now after knowing that .net framework is basically used to create web application. Then a Java user can question why should I go for .Net when whatever work .Net is doing that can be done in java. So let’s discuss few points that you can give to that Java guy to realise him or her the importance of .Net . So let’s concentrate on few points that when should we go for .NET ?

  1. If the application is window specific then use .NET.
  2. .Net is language independent so if the team has multiple expertise C#,Vb,C++, developers can still work on the same project with different skill sets.
  3. The important thing is IDE , its very simple to use and deployment is very simple .
One of the cons of .net over java is that java is a free source. Also if you are using linux then use Java.

What is C# .Net ?
When the language used to develop the application in .net Framework is C# then we say it as C# .net .The mother of language C# is C++ not C . The equation goes  as mentioned below :
C —————>        C++  ——————>  C# ( the two ++ of C++ is again sandwiched by two ++ and formed #)
And I feel C# is very powerful language. I will show its power in detail in my coming articles .

What is Vb.Net ?
When the language used to develop the application in .net  Framework is Visual basic we say it as vb.Net. Vb.net is also object oriented but if I have to chose between C# and vb then I will chose C# because of a simple reason that I like the coding style and it is quite familiar otherwise performance wise there is no such difference between these two languages.

What is ASP.NET ?
ASP is abbreviated as Active Server Pages. ASP .Net is a web application framework developed and marketed by Microsoft to allow programmers to build a dynamic  websites , web applications and web services. It was released in January 2002 with Microsoft .net framework  version 1.0  and is the successor of Microsoft active server pages. Here we can use any of the language between C# or Vb based on our comfort level with a particular language.
Features :

1.Pages : ASP.NET Web pages, known officially as Web Forms,[8] are the main building block for application development. Web forms are contained in files with an ".aspx" extension; these files typically contain static (X)HTML markup, as well as markup defining server-side Web Controls and User Controls where the developers place all the required static and dynamic content for the Web page. Additionally, dynamic code which runs on the server can be placed in a page within a block <% — dynamic code — %>, which is similar to other Web development technologies such as PHP, JSP, and ASP. With ASP.NET Framework 2.0, Microsoft introduced a new code-behind model which allows static text to remain on the .aspx page, while dynamic code remains in an .aspx.vb or .aspx.cs or .aspx.fs file (depending on the programming language used)

2. Directives : A directive is special instructions on how ASP.NET should process the page. The most common directive is <%@ Page %> which can specify many attributes used by the ASP.NET page parser and compiler.

What is ADO.Net ?
Ado stands for ActiveX data object. ADO.NET is a set of computer software components that programmers can use to access data and data services. It is a part of the base class library that is included with the Microsoft .NET Framework. It is commonly used by programmers to access and modify data stored in relational database systems, though it can also access data in non-relational sources.
ADO.NET is conceptually divided into consumers and data providers. The consumers are the applications that need access to the data, and the providers are the software components that implement the interface and thereby provides the data to the consumer.

I hope you all are clear with the definitions of all the basic terms related to .Net.

Prashant Prakash
Microsoft Technology Analyst in 3.5 framework