<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AnandhanSubbiah.com &#187; Technical Articles</title>
	<atom:link href="http://anandhansubbiah.com/blog/category/technical-articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://anandhansubbiah.com/blog</link>
	<description>'Inspire and Innovate'</description>
	<lastBuildDate>Wed, 11 Jan 2012 03:30:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Software Estimation &#8211; Is it really hard ?</title>
		<link>http://anandhansubbiah.com/blog/software-estimation-is-it-really-hard/</link>
		<comments>http://anandhansubbiah.com/blog/software-estimation-is-it-really-hard/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 02:05:42 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[Programming concepts]]></category>
		<category><![CDATA[Software Estimate]]></category>
		<category><![CDATA[Technol]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=525</guid>
		<description><![CDATA[Yes, it is hard. 
Lot of folks do not understand why Software estimation is so hard. The problem is folks who don&#8217;t understand the difficulty in estimating software make it more harder. I would compare software estimation to using a camera. The objects are fuzzy to begin with and slowly they get into focus. it [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, it is hard. </p>
<p>Lot of folks do not understand why Software estimation is so hard. The problem is folks who don&#8217;t understand the difficulty in estimating software make it more harder. I would compare software estimation to using a camera. The objects are fuzzy to begin with and slowly they get into focus. it is a process which requires constant refinement. </p>
<p>The main issue around estimation is the inability of most customers to provide clear and concise requirements. Most times the requirements are too high level like &#8220;what does it cost to build a house ? &#8220;. Of course the characteristics of a house can vary dramatically even within a fixed budget. </p>
<blockquote><p>It is difficult to know whether you can build the product that the<br />
customer wants in the desired time frame until you have a detailed understanding<br />
of what the customer wants.</p></blockquote>
<p>Decision making is very important in software development. Every decision at every stage in a project has implications both on cost and time. Estimates become more precise towards the completion of the project but that does not help the customer a lot. The diagram below illustrates this concept.</p>
<p><img src="http://infinityonlinesolutions.com/softwareestimationportal.com/images/phasesofmilestone.jpg" alt="COCOMO" /></p>
<p>Most customers want more than what they can afford. There are three ways to complete a project in this case :<br />
1) Staff the project to accomplish the required features. This may not always work .<br />
2) Compromise the feature-set . In the case of a house a third bathroom may not be required after all !.<br />
3) Both customer and developers meet halfway. This is mostly the common scenario.</p>
<p>There is a thin line between software estimation and project control. It is always possible to deploy to a cost and budget as long as the customer is willing to be flexible , which means that the customer should be able to let go of some features to meet the deadline.</p>
<p>It is always a best practice to provide good feedback to your customer. I have felt that it is always better to tell the stakeholders that I will update the estimate at each stage of the project requirement specification , product design , software design etc.</p>
<blockquote><p>The reality is , the shortest actual schedule results from the most accurate, planned schedule</p></blockquote>
<p>If the estimate is too low,planning inefficiencies will drive up the actual cost of the project. If the estimate is too high, Parkinson’s law (that work expands to fill available time) will drive up the actual cost of the project.</p>
<p>The goal of estimation should be a convergence between your estimate and reality. The closer they are aligned the better it will be for the overall project. This also requires a lot of support from customers. They should be able to prevent scope creep so the developers are not held accountable to features they did not commit to delivering. The sad reality  I am yet to see a customer who is able to prevent scope creep !</p>
<p>At the end of the day it will be fair to say that software estimation is a process of constant refinement and the budget will normally drive this process along with precise requirements. Allowing for improper ( high or low) estimates will only delay the project.</p>
<p><strong>Reference :<br />
Rapid Development<br />
Steve Mcconnel</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fsoftware-estimation-is-it-really-hard%2F&amp;title=Software%20Estimation%20%26%238211%3B%20Is%20it%20really%20hard%20%3F" id="wpa2a_2"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/software-estimation-is-it-really-hard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RSS/ATOM/GDATA/JSON/REST &#8211; Demystified</title>
		<link>http://anandhansubbiah.com/blog/rssatomgdatajsonrest-demystified/</link>
		<comments>http://anandhansubbiah.com/blog/rssatomgdatajsonrest-demystified/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 15:56:37 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=451</guid>
		<description><![CDATA[Information distribution is a key issue for any business and the buzz words in the title of this blog are associated with this key concept.
RSS
 Really Simple Syndication is a popular mechanism for receiving and publishing content from websites.Syndication is when information is categorized and normalized in addition to being collected.
Here are some key aspects [...]]]></description>
			<content:encoded><![CDATA[<p>Information distribution is a key issue for any business and the buzz words in the title of this blog are associated with this key concept.</p>
<p><strong>RSS</strong></p>
<p> Really Simple Syndication is a popular mechanism for receiving and publishing content from websites.Syndication is when information is categorized and normalized in addition to being collected.</p>
<p>Here are some key aspects of RSS 2.0:</p>
<p>      <code>      The root element is &lt;rss&gt; (with the version="2.0" attribute).<br />
      The &lt;rss&gt; element must contain a single &lt;channel&gt; element, which represents the source of the feed.<br />
      A &lt;channel&gt; contains any number of &lt;item&gt; elements.<br />
      A &lt;channel&gt; is described by three mandatory elements (&lt;title&gt;, &lt;link&gt;, and &lt;description&gt;) contained within &lt;channel&gt;.<br />
      An &lt;item&gt; element is described by such optional elements, such as &lt;title&gt;, &lt;description&gt;, and &lt;link&gt;. An item must contain at least a &lt;title&gt; or &lt;description&gt; element.<br />
      The tags in RSS 2.0 are not placed in any XML namespaces to retain backward compatibility with 0.91–0.94.<br />
</code></p>
<p><strong>ATOM</strong></p>
<p>ATOM has more capabilities that it can be viewed as an exchange protocol based on HTTP. RSS is sufficient for publishing data but ATOM should be considered for replication and data exchange. ATOM can support editing and updating. Each and every <id> node must be both unique and permanent. That goes for the &#8220;id&#8221; of the feed itself and the &#8220;id&#8217;s&#8221; of each individual &#8220;entry&#8221; node. </p>
<p>Here are some key aspects of ATOM:</p>
<p>      <code>Atom-related XML namespace (http://www.w3.org/2005/Atom).<br />
      The &lt;subtitle&gt; element instead of &lt;description&gt; (in RSS) describes the feed.<br />
      The &lt;feed&gt; and &lt;entry&gt; elements must both include an &lt;updated&gt; element.<br />
      &lt;link rel="alternate" type="text/html" href="www.anandhansubiah.com"/&gt; indicates that the document is an "alternate" representation (that is, a feed) of the web page http://www.anandhansubiah.com/.<br />
    &lt;link rel="self" href="http://www.anandhansubbiah.com/blog/Atom1.0.xml"/&gt; indicates the location of this feed document.<br />
    The attribute type="html" in the &lt;summary&gt; elements indicates the use of entity-encoded HTML.</code></p>
<p><strong>Gdata </strong></p>
<p>The Google Data API can be considered to be an extension of RSS and ATOM. Query capability ,authentication , updates and optimistic concurrency is the key differentiators between these different technologies. Optimistic concurrency refers to the ability to prevent different process&#8217;s from updating the data at the same time.The authentication preferred by Google when using the GData protocol is known as Authentication for Installed Applications, a Google-specific authentication mechanism. Third-party front-end applications to a GData service should use an authentication mechanism known as Account Authentication Proxy for Web-based Applications. </p>
<p><strong>REST (Representational State Transfer)</strong></p>
<p>REST has nothing to do with RSS, Atom or Gdata as it has nothing to do with content publication.REST is a system design explicitly intended to reflect the structure of the web. RESTful systems, according to the first constraint, are based on the client-server model—that is, the user interface and the data store are divided.RESTful systems are also stateless so no server side sessions are allowed.The third constraint requires that responses from a server in a RESTful system must be flagged (implicitly or explicitly) as cacheable.</p>
<p>Resources are at the heart of the four requirements of the RESTful uniform interface: resource identification, resource manipulation via representations, self-descriptive messaging, and the use of hypermedia as the engine of application state.</p>
<p>REST and HTTP are often spoken of together, but it is important to note that nothing requires that REST be implemented only on systems that use HTTP.</p>
<p><strong>JSON</strong></p>
<p>JavaScript Object Notation (JSON) is essentially a format for specifying JavaScript objects so that they can easily be transported. You could think of it as a way of serializing JavaScript objects.JSON is slowly gaining ground on XML, although is not intended to replace it. As a notation, it is clearly less verbose than XML, requiring less markup to convey the same data structure. Less data being transmitted on the wire leads to better performance of the application.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Frssatomgdatajsonrest-demystified%2F&amp;title=RSS%2FATOM%2FGDATA%2FJSON%2FREST%20%26%238211%3B%20Demystified" id="wpa2a_4"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/rssatomgdatajsonrest-demystified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Session Management in Axis</title>
		<link>http://anandhansubbiah.com/blog/session-management-in-axis/</link>
		<comments>http://anandhansubbiah.com/blog/session-management-in-axis/#comments</comments>
		<pubDate>Wed, 20 May 2009 19:51:11 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technical Articles]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=437</guid>
		<description><![CDATA[There are different types of sessions, and the lifetime of the session may vary from one to another. Some sessions last for a few seconds while others last for the lifetime of the whole system. Axis2 architecture has been designed to support four types of sessions, and we observe that there are minor differences between [...]]]></description>
			<content:encoded><![CDATA[<p>There are different types of sessions, and the lifetime of the session may vary from one to another. Some sessions last for a few seconds while others last for the lifetime of the whole system. Axis2 architecture has been designed to support four types of sessions, and we observe that there are minor differences between one type and another. By considering the different types of use cases, Axis2 has the following four types of session scopes:</p>
<p>    <strong>1.Request</p>
<p>    2.SOAPSession</p>
<p>    3.Application</p>
<p>    4.Transport</strong></p>
<p>There are five types of contexts in the hierarchy, which have been listed below with a brief explanation:</p>
<p>    <strong>ConfigurationContext:</strong> This is the run-time representation of whole system. To start an Axis2 system, we need to have configuration context. The lifetime of configuration context will be the lifetime of the system. So, if we store some state (a property) it will last forever (until system shutdown).<br />
    <strong>ServiceGroupContext:</strong> In Axis2, we can deploy multiple services together as a service group. Then, the run-time representation of that is called ServiceGroupContext.<br />
   <strong> ServiceContext:</strong> This represents the run time of one service. The context lifetime will be the lifetime of the session. There can be one or many service contexts in the system, depending on the session scope of the corresponding service.<br />
    <strong>OperationContext:</strong> This context represents the lifetime of an MEP (Message Exchange Pattern). The lifetime of an operation context is, usually less than the lifetime of the ServiceContext.<br />
   <strong> MessageContext:</strong> The lifetime of an incoming message is represented by the message context. If two handlers in a given execution chain want to share data, then the best way to store them is in message context. One OperationContext may have one or more MessageContexts.</p>
<p><strong>Request Session Scope</strong></p>
<p>Request session scope is the default session scope in Axis2. When we deploy a service without knowing anything about session management, then our service will be deployed in request session scope. The lifetime of this session is limited to the method invocation lifetime, or request processing time. When we deploy a service in request scope, it simply means that we are not going to worry about the session management at all. So it is not like session management at all.</p>
<p><strong>SOAP Session Scope</strong></p>
<p>The idea of a SOAP session is to have a transport-independent way of managing session between two SOAP nodes, obviously between the client and the server. Here, Axis2 uses SOAP headers in order to manage the session. SOAP session scope has slightly longer lifetime as compared to a request session scope, and deploying a service in a SOAP session requires changing services.xml as well. Managing SOAP session requires both the client and the service to be aware of the sessions, that is, the client has to send the session-related data if it wants to access the same session, and the service has to validate the user using session-related data.</p>
<p><strong>Transport Session Scope</strong></p>
<p>In the case of Transport Session, Axis2 uses transport-related session management techniques to manage session. As an example, in the case of HTTP, it uses HTTP cookies to manage session. Then the lifetime of the session is controlled by the transport session and not by Axis2. What Axis2 does is store service context and ServiceGroupContext in the transport session object so that the service can access those contexts, as long as the session lives.</p>
<p>One of the key advantages that the Transport Session has over other sessions is that we can talk to multiple service groups within one transport session. In a SOAP session, we don&#8217;t have a way to communicate between two service groups, but with the transport session, we have that capability too. In this case, the number of service instances created depends on the number of transport sessions created.</p>
<p><strong>Application Scope</strong></p>
<p>Application scope has the longest lifetime as compared to all the others, and the lifetime of the application session is equal to the lifetime of the system. If we deploy a service in application scope, we will find that there is only one instance of the service implementation class. In addition to that, there will be only one ServiceContext for the deployed service. Considering the memory footprint, in the Axis2 world, it is better to deploy the service in application scope, if we don&#8217;t want to manage the session.</p>
<p><strong>Reference : Quickstart Apache Axis2<br />
by Deepal Jayasinghe</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fsession-management-in-axis%2F&amp;title=Session%20Management%20in%20Axis" id="wpa2a_6"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/session-management-in-axis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Essential HTTP Headers</title>
		<link>http://anandhansubbiah.com/blog/essential-http-headers/</link>
		<comments>http://anandhansubbiah.com/blog/essential-http-headers/#comments</comments>
		<pubDate>Wed, 13 May 2009 03:34:43 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[HTTP Headers]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=432</guid>
		<description><![CDATA[Age
Type: Response header
If the response entity-body does not come fresh from the server, the Age header is a measure of how long ago it left the server. This header is usually set by HTTP caches, so that the client knows it might be getting an old copy of a representation.
Cache-Control
Type: Request and response header
This header [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Age<br />
Type: Response header</strong></p>
<p>If the response entity-body does not come fresh from the server, the Age header is a measure of how long ago it left the server. This header is usually set by HTTP caches, so that the client knows it might be getting an old copy of a representation.</p>
<p><strong>Cache-Control<br />
Type: Request and response header</strong></p>
<p>This header contains a directive to any caches between the client and the server (including any caches on the client or server themselves). It spells out the rules for how the data should be cached and when it should be dumped.</p>
<p><strong>Content-Type<br />
Type: Response header</strong></p>
<p>Definitely the most famous response header. This header tells the client what kind of thing the entity-body is. On the human web, a web browser uses this to decide if it can display the entity-body inline, and which external program it must run if not. On the programmable web, a web service client usually uses this to decide which parser to apply to the entity-body.</p>
<p><strong>Date<br />
Type: Request and response header.<br />
</strong></p>
<p>As a request header, this represents the time on the client at the time the request was sent. As a response header, it represents the time on the server at the time the request was fulfilled. As a response header, Date is used by caches.</p>
<p><strong>ETag<br />
Type: Response header.</strong></p>
<p>The value of ETag is an opaque string designating a specific version of a representation. Whenever the representation changes, the ETag should also change.</p>
<p>Whenever possible, this header ought to be sent in response to GET requests. Clients can use the value of ETag in future conditional GET requests, as the value of If-None-Match. If the representation hasn&#8217;t changed, the ETag hasn&#8217;t changed either, and the server can save time and bandwidth by not sending the representation again.</p>
<p>The main driver of conditional GET requests is the simpler Last-Modified response header, and its request counterpart If-Modified-Since. The main purpose of ETag is to provide a second line of defense. If a representation changes twice in one second, it will take on only one value for Last-Modified-Since, but two different values for ETag.</p>
<p><strong>Expires<br />
Type: Response header</strong></p>
<p>This header tells the client, or a proxy between the server and client, that it may cache the response (not just the entity-body!) until a certain time. Even a conditional HTTP GET makes an HTTP connection and takes time and resources. By paying attention to Expires, a client can avoid the need to make any HTTP requests at all—at least for a while. </p>
<p>The client should take the value of Expires should as a rough guide, not as a promise that the entity-body won&#8217;t change until that time.</p>
<p><strong>If-Modified-Since<br />
Type: Request header</strong></p>
<p>This request header is the backbone of conditional HTTP GET. Its value is a previous value of the Last-Modified response header, obtained from a previous request to this URI. If the resource has changed since that last request, its new Last-Modified date is more recent than the one. That means that the condition If-Modified-Since is met, and the server sends the new entity-body. If the resource has not changed, the Last-Modified date is the same as it was, and the condition If-Modified-Since fails. The server sends a response code of 304 (&#8221;Not Modified&#8221;) and no entity-body. That is, conditional HTTP GET succeeds if this condition fails.</p>
<p>Since Last-Modified is only accurate to within one second, conditional HTTP GET can occasionally give the wrong result if it relies only on If-Modified-Since. This is the main reason why we also use ETag and If-None-Match.</p>
<p><strong>If-None-Match<br />
Type: Request header</strong></p>
<p>This header is also used in conditional HTTP GET. Its value is a previous value of the ETag response header, obtained from a previous request to this URI. If the ETag has changed since that last request, the condition If-None-Match succeeds and the server sends the new entity-body. If the ETag is the same as before, the condition fails, and the server sends a response code of 304 (&#8221;Not Modified&#8221;) with no entity-body.</p>
<p><strong>If-Unmodified-Since<br />
Type: Request header</strong></p>
<p>Normally a client uses the value of the response header Last-Modified as the value of the request header If-Modified-Since to perform a conditional GET request. This header also takes the value of Last-Modified, but it&#8217;s usually used for making HTTP actions other than GET into conditional actions.</p>
<p>Let&#8217;s say you and many other people are interested in modifying a particular resource. You fetch a representation, modify it, and send it back with a PUT request. But someone else has modified it in the meantime, and you either get a response code of 409 (&#8221;Conflict&#8221;), or you put the resource into a state you didn&#8217;t intend.</p>
<p>If you make your PUT request conditional on If-Not-Modified, then if someone else has changed the resource your request will always get a response code of 417 (&#8221;Precondition Failed&#8221;). You can refetch the representation and decide what to do with the new version that someone else modified.</p>
<p>This header can be used with GET, too; see the Range header for an example.</p>
<p><strong>Last-Modified<br />
Type: Response header</strong></p>
<p>This header makes conditional HTTP GET possible. It tells the client the last time the representation changed. The client can keep track of this date and use it in the If-Modified-Since header of a future request.</p>
<p>In web applications, Last-Modified is usually the current time, which makes conditional HTTP GET useless. Web services should try to do a little better, since web service clients often besiege their servers with requests for the same URIs over and over again.</p>
<p><strong>User-Agent<br />
Type: Request header</strong></p>
<p>This header lets the server know what kind of software is making the HTTP request. On the human web this is a string that identifies the brand of web browser. On the programmable web it usually identifies the HTTP library or client library that was used to write the client. It may identify a specific client program instead.</p>
<p>Soon after the human web became popular, servers started sniffing User-Agent to determine what kind of browser was on the other end. They then sent different representations based on the value of User-Agent. Elsewhere in this book I&#8217;ve voiced my opinion that it&#8217;s not a great idea to have request headers like Accept-Language be the only way a client can distinguish between different representations of the same resource. Sending different representations based on the value of User-Agent is an even worse idea. Not only has User-Agent sniffing perpetuated incompatibilities between web browsers, it&#8217;s led to an arms race inside the User-Agent header itself.</p>
<p>Almost every browser these days pretends to be Mozilla, because that was the internal code-name of the first web browser to become popular (Netscape Navigator). A browser that doesn&#8217;t pretend to be Mozilla may not get the representation it needs. Some pretend to be both Mozilla and MSIE, so they can trigger code for the current most popular web browser (Internet Explorer). A few browsers even allow the user to select the User-Agent for every request, to trick servers into sending the right representations.</p>
<p>Don&#8217;t let this happen to the programmable web. A web service should only use User-Agent to gather statistics and to deny access to poorly-programmed clients. It should not use User-Agent to tailor its representations to specific clients.</p>
<p><strong>Cookie<br />
Type: Request header</strong></p>
<p>This is probably the second-most-famous HTTP header, after Content-Type, but it&#8217;s not in the HTTP standard; it&#8217;s a Netscape extension.</p>
<p>A cookie is an agreement between the client and the server where the server gets to store some semipersistent state on the client side using the Set-Cookie header (see below). Once the client gets a cookie, it&#8217;s expected to return it with every subsequent HTTP request to that server, by setting the Cookie header once for each of its cookies. Since the data is sent invisibly in the HTTP headers with every request, it looks like the client and server are sharing state.</p>
<p>Cookies have a bad reputation in REST circles for two reasons. First, the &#8220;state&#8221; they contain is often just a session ID: a short alphanumeric key that ties into a much larger data structure on the server. This destroys the principle of statelessness. More subtly, once a client accepts a cookie it&#8217;s supposed to submit it with all subsequent requests for a certain time. The server is telling the client that it can no longer make the requests it made precookie. This also violates the principle of statelessness.</p>
<p>If you must use cookies, make sure you store all the state on the client side. Otherwise you&#8217;ll lose a lot of the scalability benefits of REST.</p>
<p><strong>Reference : RESTful Web Services<br />
by Leonard Richardson; Sam Ruby</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fessential-http-headers%2F&amp;title=Essential%20HTTP%20Headers" id="wpa2a_8"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/essential-http-headers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Essential HTTP Codes</title>
		<link>http://anandhansubbiah.com/blog/essential-http-codes/</link>
		<comments>http://anandhansubbiah.com/blog/essential-http-codes/#comments</comments>
		<pubDate>Tue, 12 May 2009 18:57:03 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[http codes]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[restful]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=427</guid>
		<description><![CDATA[200 (&#8221;OK&#8221;)
    Everything&#8217;s fine. The document in the entity-body, if any, is a representation of some resource.
400 (&#8221;Bad Request&#8221;)
    There&#8217;s a problem on the client side. The document in the entity-body, if any, is an error message. Hopefully the client can understand the error message and use it to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>200 (&#8221;OK&#8221;)</strong></p>
<p>    Everything&#8217;s fine. The document in the entity-body, if any, is a representation of some resource.</p>
<p><strong>400 (&#8221;Bad Request&#8221;)</strong></p>
<p>    There&#8217;s a problem on the client side. The document in the entity-body, if any, is an error message. Hopefully the client can understand the error message and use it to fix the problem.<br />
<strong><br />
500 (&#8221;Internal Server Error&#8221;)</strong></p>
<p>    There&#8217;s a problem on the server side. The document in the entity-body, if any, is an error message. The error message probably won&#8217;t do much good, since the client can&#8217;t fix a server problem.</p>
<p>There are four more error codes that are especially common in web services:</p>
<p><strong>301 (&#8221;Moved Permanently&#8221;)</strong></p>
<p>    Sent when the client triggers some action that causes the URI of a resource to change. Also sent if a client requests the old URI.</p>
<p><strong>404 (&#8221;Not Found&#8221;) and 410 (&#8221;Gone&#8221;)</strong></p>
<p>    Sent when the client requests a URI that doesn&#8217;t map to any resource. 404 is used when the server has no clue what the client is asking for. 410 is used when the server knows there used to be a resource there, but there isn&#8217;t anymore.</p>
<p><strong>409 (&#8221;Conflict&#8221;)</strong></p>
<p>    Sent when the client tries to perform an operation that would leave one or more resources in an inconsistent state.</p>
<p><strong>200 (&#8221;OK&#8221;)</strong></p>
<p>In most cases, this is the code the client hopes to see. It indicates that the server successfully carried out whatever action the client requested, and that no more specific code in the 2xx series is appropriate. My bookmarking service sends this code, along with a representation, when the client requests a list of bookmarks.</p>
<p>Entity-body: For GET requests, a representation of the resource the client requested. For other requests, a representation of the current state of the selected resource, or a description of the action just performed.</p>
<p><strong>201 (&#8221;Created&#8221;)</strong></p>
<p>The server sends this status code when it creates a new resource at the client&#8217;s request. My bookmarking service sends this code in response to a POST request that creates a new user account or bookmark.</p>
<p>Response headers: The Location header should contain the canonical URI to the new resource.</p>
<p>Entity-body: Should describe and link to the newly created resource. A representation of that resource is acceptable, if you use the Location header to tell the client where the resource actually lives.</p>
<p><strong>307 (&#8221;Temporary Redirect&#8221;)</strong></p>
<p>The request has not been processed, because the requested resource is not home: it&#8217;s located at some other URI. The client should resubmit the request to another URI.</p>
<p>For GET requests, where the only thing being requested is that the server send a representation, this status code is identical to 303 . A typical case where 307 is a good response to a GET is when the server wants to send a client to a mirror site. But for POST, PUT, and DELETE requests, where the server is expected to take some action in response to the request, this status code is significantly different from 303.</p>
<p>A 303 in response to a POST, PUT, or DELETE means that the operation has succeeded but that the response entity-body is not being sent along with this request. If the client wants the response entity-body, it needs to make a GET request to another URI.</p>
<p>A 307 in response to a POST, PUT, or DELETE means that the server has not even tried to perform the operation. The client needs to resubmit the entire request to the URI in the Location header.</p>
<p>An analogy may help. You go to a pharmacy with a prescription to be filled. A 303 is the pharmacist saying &#8220;We&#8217;ve filled your prescription. Go to the next window to pick up your medicine.&#8221; A 307 is the pharmacist saying &#8220;We can&#8217;t fill that prescription. Go to the pharmacy next door.&#8221;</p>
<p>Response headers: The Location header contains the URI to which the client should resubmit the request.</p>
<p>Entity-body: Should contain a hypertext document linking to the new URI, as with 301.</p>
<p><strong>400 (&#8221;Bad Request&#8221;)</strong></p>
<p>This is the generic client-side error status, used when no other 4xx error code is appropriate. It&#8217;s commonly used when the client submits a representation along with a PUT or POST request, and the representation is in the right format, but it doesn&#8217;t make any sense.</p>
<p>Entity-body: May contain a document describing why the server thinks there&#8217;s a client-side error.</p>
<p><strong>401 (&#8221;Unauthorized&#8221;)</strong></p>
<p>The client tried to operate on a protected resource without providing the proper authentication credentials. It may have provided the wrong credentials, or none at all. The credentials may be a username and password, an API key, or an authentication token—whatever the service in question is expecting. It&#8217;s common for a client to make a request for a URI and accept a 401 just so it knows what kind of credentials to send and in what format. In fact, the HTTP Digest mode of authentication depends on this behavior.</p>
<p>If the server doesn&#8217;t want to acknowledge the existence of the resource to unauthorized users, it may lie and send a 404 (&#8221;Not Found&#8221;) instead of a 401. The downside of this is that clients need to know, in advance, what kind of authentication the server expects for that resource: things like HTTP Digest won&#8217;t work.</p>
<p>Response headers: The WWW-Authenticate header describes what kind of authentication the server will accept.</p>
<p>Entity-body: A document describing the failure: why the credentials (if any were provided) were rejected, and what credentials would be accepted. If the end user can get credentials by signing up on a web site, or creating a &#8220;user account&#8221; resource, a link to the sign up URI is useful.</p>
<p><strong>Reference : RESTful Web Services<br />
by Leonard Richardson; Sam Ruby</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fessential-http-codes%2F&amp;title=Essential%20HTTP%20Codes" id="wpa2a_10"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/essential-http-codes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to help people succeed at work ?</title>
		<link>http://anandhansubbiah.com/blog/how-to-help-people-succeed-at-work/</link>
		<comments>http://anandhansubbiah.com/blog/how-to-help-people-succeed-at-work/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 17:43:43 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[concepts]]></category>
		<category><![CDATA[work life]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=407</guid>
		<description><![CDATA[This is a tricky question to me. I am an Engineering Director with mixed responsibilities. The primary focus is to make sure I meet the demands of  the business unit(s) and also to make sure that the folks who work for me are in a happy place.
The main question for any leader is 
&#8220;Are [...]]]></description>
			<content:encoded><![CDATA[<p>This is a tricky question to me. I am an Engineering Director with mixed responsibilities. The primary focus is to make sure I meet the demands of  the business unit(s) and also to make sure that the folks who work for me are in a happy place.</p>
<p>The main question for any leader is </p>
<p>&#8220;Are you going to mark people&#8217; papers or help them get an A ? &#8221;</p>
<p>People who feel good at themselves produce better results. This may sound like a trap but I think there is value in analyzing this. I wanted to rephrase it to suit the corporate world  &#8211; &#8221; People who produce good results feel better about themselves&#8221;. This essentially means that both people and results are important. Overemphasizing any one of these will cause problems. A good leader should be able to balance this out.If people are not performing well then they will not be be happy.</p>
<p>There are three Key things to to making people perform</p>
<p>1) Performance Planning<br />
2) Execution<br />
3) Performance Review.</p>
<p>This has to happen iteratively till we achieve success. An employee&#8217;s performance should not be measured by just one cycle but constant reminders on performance objectives and reviews will help people focus.Evaluation is the tricky part of these key initiatives.</p>
<p>Setting goals is also not an easy task. If you can&#8217;t measure a goal you won&#8217;t be able to manage it . So , Any goal which is not measurable should not be set.Subjective evaluation may be required sometime but it is not recommended.</p>
<p>There is a 80/20 rule. 80% of the performance is going to come from the 20% of the activities. It does not mean that the other activities are not relevant but they may not contribute directly to the performance objectives.</p>
<p>The most important fact to understand is that there is no best leadership style. There are so different issues in the market place that a variety of  skills are required to solve issues based on the situation. Another important aspect is nobody wants to fail even if they cannot succeed.</p>
<p>I would classify people into different categories</p>
<p>a) Low Competence / Experience , High Commitment.<br />
b) Low Competence , Low Commitment<br />
c) Moderate to High Competence , Variable Commitment<br />
d) High Competence , High Commitment</p>
<p>It is possible to derive value from every category except (b). The Skill level is different for each individual but if there is no commitment  they don&#8217;t deserve a place in the organization and they can have harmful effects on the team in general. It is the job of the leader to prioritize and assign the right tasks to the right people so there is maximum performance. For example a very good programmer may keep thinking only about improving the product and lose focus and derail the project. It is not that it is bad idea to try and improve the product but if the programmer is distracted from his core performance objective then it is a real problem. It is again the art of balancing if 90% of the focus is on programming and 10% is contributing to the product then there is a good chance of delivering on the performance objectives. It is the reverse for a product engineer . He has to focus 90% on improving the product and 10% of his time on other tasks.</p>
<p>Every single employee has a purpose in the team and a good sense of core responsibilities  is a key factor for the overall success. An average programmer can focus that much more harder on his/her core area of expertise and over achieve. Employees will keep switching between  (a) , (b) ,(c) and (d) depending on what they are assigned to do. If they are able to stay at (d) for a long period there is a good chance that they are moving up in the organization. If they are stuck at (b) then they can only pack their bags and go home.A good leader should help people stay at (d) most of the time if not all .</p>
<p>A leader should be able to direct , Coach , Support and delegate. A leader has to constantly switch between directive behavior and supportive behavior.</p>
<p><strong><br />
Inspired by : Helping People Win at Work: A Business Philosophy Called &#8220;Don&#8217;t Mark My Paper, Help Me Get an A&#8221;<br />
by Ken Blanchard; Garry Ridge</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fhow-to-help-people-succeed-at-work%2F&amp;title=How%20to%20help%20people%20succeed%20at%20work%20%3F" id="wpa2a_12"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/how-to-help-people-succeed-at-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TCP/IP Protocol Stack</title>
		<link>http://anandhansubbiah.com/blog/tcpip-protocol-stack/</link>
		<comments>http://anandhansubbiah.com/blog/tcpip-protocol-stack/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 15:51:40 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[TCP/IP]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=310</guid>
		<description><![CDATA[Application Layer
BOOTP: Bootstrap Protocol
DCAP: Data Link Switching Client Access Protocol
DHCP: Dynamic Host Configuration Protocol
DNS: Domain Name Systems
FTP: File Transfer Protocol
Finger: User Information Protocol
HTTP: Hypertext Transfer Protocol
S-HTTP: Secure Hypertext Transfer Protocol (S-HTTP)
IMAP &#038; IMAP4: Internet Message Access Protocol
IPDC: IP Device Control
IRCP (IRC): Internet Relay Chat Protocol
LDAP: Lightweighted Directory Access Protocol
MIME (S-MIME): Multipurpose Internet Mail Extensions (Secure [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Application Layer</strong><br />
BOOTP: Bootstrap Protocol<br />
DCAP: Data Link Switching Client Access Protocol<br />
DHCP: Dynamic Host Configuration Protocol<br />
DNS: Domain Name Systems<br />
FTP: File Transfer Protocol<br />
Finger: User Information Protocol<br />
HTTP: Hypertext Transfer Protocol<br />
S-HTTP: Secure Hypertext Transfer Protocol (S-HTTP)<br />
IMAP &#038; IMAP4: Internet Message Access Protocol<br />
IPDC: IP Device Control<br />
IRCP (IRC): Internet Relay Chat Protocol<br />
LDAP: Lightweighted Directory Access Protocol<br />
MIME (S-MIME): Multipurpose Internet Mail Extensions (Secure MIME)<br />
NAT: Network Address Translation<br />
NNTP: Network News Transfer Protocol<br />
NTP: Network Time Protocol<br />
POP &#038; POP3: Post Office Protocol (version 3)<br />
rlogin: Remote Login in Unix<br />
RMON: Remote Monitoring MIBs in SNMP<br />
SLP: Service Location Protocol<br />
SMTP: Simple Mail Transfer Protocol<br />
SNMP: Simple Network Management Protocol<br />
SNTP: Simple Network Time Protocol<br />
Syslog Protocol<br />
TELNET: TCP/IP Terminal Emulation Protocol<br />
TFTP: Trivial File Transfer Protocol<br />
URL: Uniform Resource Locator<br />
XMPP: Extensible Messaging and Presence Protocol<br />
X-Window: X Window or X Protocol or X System</p>
<p>   <strong> Presentation Layer LPP:</strong> Lightweight Presentation Protocol</p>
<p> <strong>   Session Layer RPC:</strong> Remote Procedure Call protocol</p>
<p>  <strong>  Transport Layer</strong></p>
<p>    ITOT: ISO Transport Over TCP/IP<br />
    RDP: Reliable Data Protocol<br />
    RUDP: Reliable UDP<br />
    TALI: Transport Adapter Layer Interface<br />
    TCP: Transmission Control Protocol<br />
    UDP: User Datagram Protocol<br />
    Van Jacobson: Compressed TCP</p>
<p>    <strong>Network Layer Routing</strong></p>
<p>    BGP/BGP-4: Border Gateway Protocol<br />
    EGP: Exterior Gateway Protocol<br />
    IP: Internet Protocol<br />
    IPv6: Internet Protocol version 6<br />
    ICMP/ICMPv6: Internet Control Message Protocol<br />
    IRDP: ICMP Router Discovery Protocol<br />
    Mobile IP: IP Mobility Support Protocol for IPv4 &#038; IPv6<br />
    NARP: NBMA Address Resolution Protocol<br />
    NHRP: Next Hop Resolution Protocol<br />
    OSPF: Open Shortest Path First<br />
    RIP (RIP2): Routing Information Protocol<br />
    RIPng: RIP for IPv6<br />
    RSVP: Resource ReSerVation Protocol<br />
    VRRP: Virtual Router Redundancy Protocol</p>
<p>    <strong>Multicast</strong></p>
<p>    BGMP: Border Gateway Multicast Protocol<br />
    DVMRP: Distance Vector Multicast Routing Protocol<br />
    IGMP: Internet Group Management Protocol<br />
    MARS: Multicast Address Resolution Server<br />
    MBGP: Multiprotocol BGP<br />
    MOSPF: Multicast OSPF<br />
    MSDP: Multicast Source Discovery Protocol<br />
    MZAP: Multicast-Scope Zone Announcement Protocol<br />
    PGM: Pragmatic General Multicast Protocol<br />
    PIM-DM: Protocol Independent Multicast &#8211; Dense Mode<br />
    PIM-SM: Protocol Independent Multicast &#8211; Sparse Mode</p>
<p>    <strong>MPLS Protocols</strong></p>
<p>    MPLS: Multi-Protocol Label Switching<br />
    CR-LDP: Constraint-Based Label Distribution Protocol<br />
    LDP: Label Distribution Protocol<br />
    RSVP-TE: Resource ReSerVation Protocol-Traffic Engineering<br />
    GMPLS: Generalized Multi-Protocol Lable Switching</p>
<p>    <strong>Data Link Layer</strong></p>
<p>    ARP and InARP: Address Resolution Protocol and Inverse ARP<br />
    IPCP and IPv6CP: IP Control Protocol and IPv6 Control Protocol<br />
    RARP: Reverse Address Resolution Protocol<br />
    SLIP: Serial Line IP</p>
<p>    Related protocol suites LAN, MAN, WAN, SAN, Security/VPN</p>
<p>   <strong> Sponsor Source IETF, DARPA, ISO</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Ftcpip-protocol-stack%2F&amp;title=TCP%2FIP%20Protocol%20Stack" id="wpa2a_14"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/tcpip-protocol-stack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OSI Network Architecture 7 Layers Model</title>
		<link>http://anandhansubbiah.com/blog/osi-network-architecture-7-layers-model/</link>
		<comments>http://anandhansubbiah.com/blog/osi-network-architecture-7-layers-model/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 15:48:47 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[OSI]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=308</guid>
		<description><![CDATA[Open Systems Interconnection (OSI) model is a reference model developed by ISO (International Organization for Standardization) in 1984, as a conceptual framework of standards for communication in the network across different equipment and applications by different vendors. It is now considered the primary architectural model for inter-computing and internetworking communications. Most of the network communication [...]]]></description>
			<content:encoded><![CDATA[<p>Open Systems Interconnection (OSI) model is a reference model developed by ISO (International Organization for Standardization) in 1984, as a conceptual framework of standards for communication in the network across different equipment and applications by different vendors. It is now considered the primary architectural model for inter-computing and internetworking communications. Most of the network communication protocols used today have a structure based on the OSI model. The OSI model defines the communications process into 7 layers, dividing the tasks involved with moving information between networked computers into seven smaller, more manageable task groups. A task or group of tasks is then assigned to each of the seven OSI layers. Each layer is reasonably self-contained so that the tasks assigned to each layer can be implemented independently. This enables the solutions offered by one layer to be updated without adversely affecting the other layers.</p>
<p>The OSI 7 layers model has clear characteristics at each layer. Basically, layers 7 through 4 deal with end-to-end communications between data source and destinations, while layers 3 to 1 deal with communications between network devices. On the other hand, the seven layers of the OSI model can be divided into two groups: upper layers (layers 7, 6 &#038; 5) and lower layers (layers 4, 3, 2, 1). The upper layers of the OSI model deal with application issues and generally are implemented only in software. The highest layer, the application layer, is closest to the end user. The lower layers of the OSI model handle data transport issues. The physical layer and the data link layer are implemented in hardware and software. The lowest layer, the physical layer, is closest to the physical network medium (the wires, for example) and is responsible for placing data on the medium.</p>
<p>The specific description for each layer is as follows:</p>
<p>Layer 7: Application Layer</p>
<p>    *      Defines interface to user processes for communication and data transfer in network<br />
    *      Provides standardized services such as virtual terminal, file and job transfer and operations </p>
<p>Layer 6: Presentation Layer</p>
<p>    *      Masks the differences of data formats between dissimilar systems<br />
    *      Specifies architecture-independent data transfer format<br />
    *      Encodes and decodes data; encrypts and decrypts data; compresses and decompresses data </p>
<p>Layer 5: Session Layer</p>
<p>    *      Manages user sessions and dialogues<br />
    *      Controls establishment and termination of logic links between users<br />
    *      Reports upper layer errors </p>
<p>Layer 4: Transport Layer</p>
<p>    *      Manages end-to-end message delivery in network<br />
    *      Provides reliable and sequential packet delivery through error recovery and flow control mechanisms<br />
    *      Provides connectionless-oriented packet delivery </p>
<p>Layer 3: Network Layer</p>
<p>    *      Determines how data are transferred between network devices<br />
    *      Routes packets according to unique network device addresses<br />
    *      Provides flow and congestion control to prevent network resource depletion </p>
<p>Layer 2: Data Link Layer</p>
<p>    *      Defines procedures for operating the communication links<br />
    *      Frames packets<br />
    *      Detects and corrects packets transmit errors </p>
<p>Layer 1: Physical Layer</p>
<p>    *      Defines physical means of sending data over network devices<br />
    *      Interfaces between network medium and devices<br />
    *      Defines optical, electrical and mechanical characteristics </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fosi-network-architecture-7-layers-model%2F&amp;title=OSI%20Network%20Architecture%207%20Layers%20Model" id="wpa2a_16"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/osi-network-architecture-7-layers-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista 64bit &#8211; Works for me</title>
		<link>http://anandhansubbiah.com/blog/vista-64bit-works-for-me/</link>
		<comments>http://anandhansubbiah.com/blog/vista-64bit-works-for-me/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 22:11:10 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Cool Products]]></category>
		<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[64 bit]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=292</guid>
		<description><![CDATA[There is a lot of bad press around vista. Things get worse when folks start reviewing the 64 bit version. I don&#8217;t think vista is all that bad for a typical windows user. I would consider myself to be a power user and I do use my computer for heavy duty video-editing and programming.
I had [...]]]></description>
			<content:encoded><![CDATA[<p>There is a lot of bad press around vista. Things get worse when folks start reviewing the 64 bit version. I don&#8217;t think vista is all that bad for a typical windows user. I would consider myself to be a power user and I do use my computer for heavy duty video-editing and programming.</p>
<p>I had a Windows XP box before. I had a Belkin print router  which was connected to two HP printers, Logitech web cam,HP Media Vault and Logitech Blue tooth speakers. </p>
<p>I purchased a 64 bit Vista Ultimate box from HP with 6 GB RAM. Every single device I had connected works without any issues now. Vista even downloaded drivers for most of those devices without any issues.The bluetooth Keyboard and mouse installed automagically when I had to struggle to make them work in my XP box. I installed iTunes( there is no integration with IPhone but it is not Microsoft&#8217;s fault), muvee auto producer, Eclipse and NetBeans. </p>
<p>I installed the 64 bit flavors of IE , Firefox(minefield) and ITunes and they are lightning fast.</p>
<p>My verdict is Vista has come a long way and if you get a pre-installed box from HP or Dell you might like Vista. </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fvista-64bit-works-for-me%2F&amp;title=Vista%2064bit%20%26%238211%3B%20Works%20for%20me" id="wpa2a_18"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/vista-64bit-works-for-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing your first Android Application.</title>
		<link>http://anandhansubbiah.com/blog/writing-your-first-android-application/</link>
		<comments>http://anandhansubbiah.com/blog/writing-your-first-android-application/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 00:47:22 +0000</pubDate>
		<dc:creator>Anandhan Subbiah</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technical Articles]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://anandhansubbiah.com/blog/?p=260</guid>
		<description><![CDATA[Setting Up Your Development Environment
Android applications, like most mobile phone applications, are developed in a host-target development environment. In other words, you develop your application on a host computer (where resources are abundant), and download it to a target mobile phone for testing and ultimate use.
To write your own Android mobile phone applications, you&#8217;ll first [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Setting Up Your Development Environment</strong></p>
<p>Android applications, like most mobile phone applications, are developed in a host-target development environment. In other words, you develop your application on a host computer (where resources are abundant), and download it to a target mobile phone for testing and ultimate use.</p>
<p>To write your own Android mobile phone applications, you&#8217;ll first need to collect the required tools and set up an appropriate development environment on your PC or Mac. </p>
<p>The Android SDK supports several different development environments. For this book we will focus on using Eclipse, because it is the best integrated with the SDK, and, hey, it&#8217;s free. No matter which operating system you are using, you will need essentially the same set of tools:</p>
<p>    * The Eclipse Integrated Development Environment<br />
    * Sun&#8217;s Java Development Kit (JDK)<br />
    * The Android Software Developer&#8217;s Kit (SDK)<br />
    *  A special Eclipse plug in: the Android Developer Tool (ADT)</p>
<p><strong> Creating an Android Development Environment</strong></p>
<p>The Android Software Development Kit supports Windows (XP and Vista), Linux (Ubuntu Dapper Drake), and Mac OS X (10.4.8 or later) as host development environments. Installation of the SDK is substantially the same for any of the operating systems, and most of this description applies equally to all of them. Where the procedure differs, we will clearly tell you what to do for each environment.</p>
<p>   1.Install Eclipse:<br />
   2.Check for Required Plugins<br />
   3.Install JDK: The Android SDK requires JDK version 5 or version 6.<br />
   4. Install Android SDK: This is where you&#8217;d start if you already have the right versions of Eclipse and the JDK loaded. The Android SDK is distributed through Google&#8217;s code site, http://code.google.com/android/download.html.<br />
  5. Update Environment Variables: To make it easier to launch the Android tools, add the tools directory to your path.<br />
  6. Install the Android Plugin (ADT):  https://dl-ssl.google.com/android/eclipse.</p>
<p><strong> Starting a New Android Application: HelloWorld</strong></p>
<p>Several components are needed to build an Android application. Fortunately, the Eclipse IDE with the Android plug-in automates a lot of the work needed to create and maintain these components. We will start by using the IDE to create a project for our application. Start up Eclipse and select &#8220;File -> New -> Project&#8230;&#8221; from the menu bar (be sure to select &#8220;Project&#8230;,&#8221; not &#8220;Java Project&#8221;).</p>
<p>Select &#8220;Android Project&#8221; and click &#8220;Next&#8221; to get the &#8220;New Android Project&#8221; dialog box.</p>
<p>We&#8217;ll use &#8220;HelloWorld&#8221; as the name for both the Project and the Application. You don&#8217;t need to change the button or checkbox selections, and we&#8217;ll use the package name com.oreilly.helloworld as shown.</p>
<p>Every Android application has to have at least one Activity (an executable that usually has a user interface), so let&#8217;s say we&#8217;re going to include an Activity called HelloWorldActivity, as shown in the dialog box. Click &#8220;Finish,&#8221; and the Android Development Kit does a number of things for you, to make your life easier as a developer. In [figure to come], I&#8217;ve expanded the tree in the Package Explorer window to show some of the files and directories that the ADK created.</p>
<p>The ADK created a HelloWorld directory in the default Eclipse workspace for your project. It also created subdirectories for your source files (.src), references to the Android Library, assets, resources (.res), and a manifest file (AndoidManifest.xml). In each of the subdirectories it created another level of subdirectories as appropriate. Let&#8217;s take a quick look at them:</p>
<p><strong>Sources (under .src)</strong></p>
<p>        * Contains a directory structure that corresponds to the package name you gave for your application: in this case, com.android.helloworld.<br />
        *Contains a Java template for the Activity you indicated was in the application (HelloWorldActivity) and a directory of resource references (R.java). We&#8217;ll come back to R.java later.</p>
<p><strong>Android Library</strong></p>
<p>    This is just what it says. If you like, you can expand the android.jar tree and see the names of the modules included in the library. This is where your application will go for Android library references.</p>
<p><strong>assets</strong></p>
<p>    Files you want to bundle with your application. We won&#8217;t have any for HelloWorld.</p>
<p><strong>Resources (under .res)</strong></p>
<p>        * Drawable resources are any images, bitmaps, etc. that you need for your application. For HelloWorld, the ADK has supplied us with the default Android icon, and that&#8217;s all we&#8217;ll need.<br />
        * Layout resources tell Android how to arrange items on the screen when the application runs. These resources are XML files that give you quite a bit of freedom in laying out the screen for different purposes. For HelloWorld, we&#8217;ll just use the defaults generated by the ADK<br />
        * Values are constants, strings, etc. available for use by your application. Keeping them outside the sources makes it easier to customize the application, such as adapting it for different languages.</p>
<p><strong>Manifest (AndroidManifest.xml)</strong></p>
<p>    This is another XML file that tells the Android build system what it needs to know to build and package your application so it can be installed on an Android phone or the emulator. This file has its own specialized editor, which we&#8217;ll describe as we get to more complicated applications.</p>
<p><strong>Double Click on HelloWorldActivity.java</strong><br />
Looking quickly at the template code that the ADK has provided for us, we can note several things:</p>
<p>    *The ADK has included the package reference we asked for, which is consistent with the directory structure it created.<br />
    *It has also created a (collapsed) set of imports for the library references it knows we need.<br />
    *It created a class definition for the Activity we said we wanted (HelloWorldActivity) including a method called OnCreate.</p>
<p>      For the moment, don&#8217;t worry about the parameter passed into OnCreate. The icicle Bundle is a way of passing data between activities and storing data between instantiations of the same Activity. We won&#8217;t need to use this for HelloWorld.<br />
    * One special line of code has been included in OnCreate:</p>
<p>      setContentView (R.layout.main);</p>
<p>      Remember that Android uses layouts to define screen layouts on the target, and that main.xml was the name of the default layout file that the ADK created for us under .res/layout. The R.java file is generated automatically and contains java references for each of the resources under .res. You will never need to edit the R.java file by hand— the ADK takes care of it as you add, change or delete resources.</p>
<p><strong>Double Click on main.xml</strong><br />
Again, let&#8217;s look at the key features of this template code:</p>
<p>    * Like any other XML file, this one starts with a reference to the XML version and encoding used.<br />
    * LinearLayout is one of the screen layout formats provided by the ADK. There are several others, which can be combined hierarchically to create very complex screen layouts. For our purposes, a simple linear layout is fine.</p>
<p>      Within the LinearLayout definition:<br />
          o The code:</p>
<p>            xmlns:android=&#8221;http://schemas.android.com/apk/res/android&#8221;</p>
<p>            identifies the XML schema being used.<br />
          o The code:</p>
<p>            android:orientation=&#8221;vertical&#8221;<br />
            android:layout_width=&#8221;fill_parent&#8221;<br />
            android:layout_height=&#8221;fill_parent&#8221;</p>
<p>            defines an orientation, width and height for the entire scope of the layout.<br />
    *TextView describes how to handle text within&#8230;. It resembles the text boxes you may have encountered when programming in other graphical environments.</p>
<p>      Within the TextView definition:<br />
          o The code:</p>
<p>            android:layout_width=&#8221;fill_parent&#8221;<br />
            android:layout_height=&#8221;wrap_content&#8221;</p>
<p>            a width and height for the TextView box.<br />
          o The code:</p>
<p>            android:text=&#8221;Hello World, HelloWorldActivity&#8221;</p>
<p>            provides some text to display in the TextView. By a stroke of luck, the ADK has already included text that is almost what we wanted to display anyway. Just to show them who&#8217;s boss, change the android:text line to say &#8220;Hello, Android!&#8221;, or something else equally clever:</p>
<p>            android:text=&#8221;Hello, Android!&#8221;</p>
<p>if you edit the file, save it either from the Eclipse File menu (File -> Save) or by clicking on the diskette icon in the menu bar.</p>
<p>Believe it or not, we&#8217;re done. We don&#8217;t have to write a single line of Java to create this application.</p>
<p>From the Eclipse menu bar, select Run -> Run. A &#8220;Run As&#8221; dialog box will pop up. Select &#8220;Android Application&#8221; from the list and you can see your first Android Application.</p>
<p><strong>Reference : Android Application Development, 1st Edition<br />
By: Rick Rogers</strong></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fanandhansubbiah.com%2Fblog%2Fwriting-your-first-android-application%2F&amp;title=Writing%20your%20first%20Android%20Application." id="wpa2a_20"><img src="http://anandhansubbiah.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://anandhansubbiah.com/blog/writing-your-first-android-application/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

