Saturday, October 27, 2007

10 Status Code Definitions

Value State
0 Uninitialized
1 Loading
2 Loaded
3 Interactive
4 Complete

Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response.

10.1 Informational 1xx
This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.

A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.

Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a

proxy adds a "Expect: 100-continue" field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).)

10.1.1 100 Continue
The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.

10.1.2 101 Switching Protocols

The server understands and is willing to comply with the client's request, via the Upgrade message header field (section 14.42), for a change in the application protocol being used on this connection. The server will switch protocols to those defined by the response's Upgrade header field immediately after the empty line which terminates the 101 response.

The protocol SHOULD be switched only when it is advantageous to do so. For example, switching to a newer version of HTTP is advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features.

10.2 Successful 2xx
This class of status code indicates that the client's request was successfully received, understood, and accepted.

10.2.1 200 OK
The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:

GET an entity corresponding to the requested resource is sent in the response;

HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body;

POST an entity describing or containing the result of the action;

TRACE an entity containing the request message as received by the end server.

10.2.2 201 Created
The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.

A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.

10.2.3 202 Accepted
The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.

10.2.4 203 Non-Authoritative Information
The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).

10.2.5 204 No Content
The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view.

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.

10.2.6 205 Reset Content
The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.

10.2.7 206 Partial Content
The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional.

The response MUST include the following header fields:

- Either a Content-Range header field (section 14.16) indicating
the range included with this response, or a multipart/byteranges
Content-Type including Content-Range fields for each part. If a
Content-Length header field is present in the response, its
value MUST match the actual number of OCTETs transmitted in the
- Date
- ETag and/or Content-Location, if the header would have been sent
in a 200 response to the same request
- Expires, Cache-Control, and/or Vary, if the field-value might
differ from that sent in any previous response for the same
If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request.

A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified headers do not match exactly, see 13.5.4.

A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses.

10.3 Redirection 3xx
This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.

Note: previous versions of this specification recommended a
maximum of five redirections. Content developers should be aware
that there might be clients that implement such a fixed
10.3.1 300 Multiple Choices
The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of

the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field; user agents MAY use the Location field value for automatic redirection. This response is cacheable unless indicated otherwise.

10.3.2 301 Moved Permanently
The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.

The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: When automatically redirecting a POST request after
receiving a 301 status code, some existing HTTP/1.0 user agents
will erroneously change it into a GET request.

10.3.3 302 Found
The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.

10.3.4 303 See Other
The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

Note: Many pre-HTTP/1.1 user agents do not understand the 303
status. When interoperability with such clients is a concern, the
302 status code may be used instead, since most user agents react
to a 302 response as described here for 303.

10.3.5 304 Not Modified
If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

The response MUST include the following header fields:

- Date, unless its omission is required by section 14.18.1
If a clockless origin server obeys these rules, and proxies and clients add their own Date to any response received without one (as already specified by [RFC 2068], section 14.19), caches will operate correctly.

- ETag and/or Content-Location, if the header would have been sent
in a 200 response to the same request
- Expires, Cache-Control, and/or Vary, if the field-value might
differ from that sent in any previous response for the same

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers.

If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response and repeat the request without the conditional.

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.

10.3.6 305 Use Proxy
The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.

Note: RFC 2068 was not clear that 305 was intended to redirect a
single request, and to be generated by origin servers only. Not
observing these limitations has significant security consequences.

10.3.7 306 (Unused)
The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.

10.3.8 307 Temporary Redirect

The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI.

If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

10.4 Client Error 4xx
The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user.

If the client is sending data, a server implementation using TCP SHOULD be careful to ensure that the client acknowledges receipt of the packet(s) containing the response, before the server closes the input connection. If the client continues sending data to the server after the close, the server's TCP stack will send a reset packet to the client, which may erase the client's unacknowledged input buffers before they can be read and interpreted by the HTTP application.

10.4.1 400 Bad Request
The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

10.4.2 401 Unauthorized
The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43].

10.4.3 402 Payment Required
This code is reserved for future use.

10.4.4 403 Forbidden

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.

10.4.5 404 Not Found
The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

10.4.6 405 Method Not Allowed
The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

10.4.7 406 Not Acceptable

The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query the user for a decision on further actions.

10.4.8 407 Proxy Authentication Required
This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43].

10.4.9 408 Request Timeout
The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.

10.4.10 409 Conflict
The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough

information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.

10.4.11 410 Gone
The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.

The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.

10.4.12 411 Length Required
The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.

10.4.13 412 Precondition Failed
The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.

10.4.14 413 Request Entity Too Large
The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.

10.4.15 414 Request-URI Too Long
The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

10.4.16 415 Unsupported Media Type
The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.

10.4.17 416 Requested Range Not Satisfiable
A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.

10.4.18 417 Expectation Failed
The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.

10.5 Server Error 5xx
Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. User agents SHOULD display any included entity to the user. These response codes are applicable to any request method.

10.5.1 500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.

10.5.2 501 Not Implemented
The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.

10.5.3 502 Bad Gateway
The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

10.5.4 503 Service Unavailable

The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.

Note: The existence of the 503 status code does not imply that a
server must use it when becoming overloaded. Some servers may wish
to simply refuse the connection.

10.5.5 504 Gateway Timeout
The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.

Note: Note to implementors: some deployed proxies are known to
return 400 or 500 when DNS lookups time out.

10.5.6 505 HTTP Version Not Supported
The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.

6 Response

Response = Status-Line ; Section 6.1
*(( general-header ; Section 4.5
| response-header ; Section 6.2
| entity-header ) CRLF) ; Section 7.1
[ message-body ] ; Section 7.2

- 1xx: Informational - Request received, continuing process
- 2xx: Success - The action was successfully received,
understood, and accepted
- 3xx: Redirection - Further action must be taken in order to
complete the request
- 4xx: Client Error - The request contains bad syntax or cannot
be fulfilled
- 5xx: Server Error - The server failed to fulfill an apparently
valid request

Status-Code =
"100" ; Section 10.1.1: Continue
| "101" ; Section 10.1.2: Switching Protocols
| "200" ; Section 10.2.1: OK
| "201" ; Section 10.2.2: Created
| "202" ; Section 10.2.3: Accepted
| "203" ; Section 10.2.4: Non-Authoritative Information
| "204" ; Section 10.2.5: No Content
| "205" ; Section 10.2.6: Reset Content
| "206" ; Section 10.2.7: Partial Content
| "300" ; Section 10.3.1: Multiple Choices
| "301" ; Section 10.3.2: Moved Permanently
| "302" ; Section 10.3.3: Found
| "303" ; Section 10.3.4: See Other
| "304" ; Section 10.3.5: Not Modified
| "305" ; Section 10.3.6: Use Proxy
| "307" ; Section 10.3.8: Temporary Redirect
| "400" ; Section 10.4.1: Bad Request
| "401" ; Section 10.4.2: Unauthorized
| "402" ; Section 10.4.3: Payment Required
| "403" ; Section 10.4.4: Forbidden
| "404" ; Section 10.4.5: Not Found
| "405" ; Section 10.4.6: Method Not Allowed
| "406" ; Section 10.4.7: Not Acceptable
| "407" ; Section 10.4.8: Proxy Authentication Required
| "408" ; Section 10.4.9: Request Time-out
| "409" ; Section 10.4.10: Conflict
| "410" ; Section 10.4.11: Gone
| "411" ; Section 10.4.12: Length Required
| "412" ; Section 10.4.13: Precondition Failed
| "413" ; Section 10.4.14: Request Entity Too Large
| "414" ; Section 10.4.15: Request-URI Too Large
| "415" ; Section 10.4.16: Unsupported Media Type
| "416" ; Section 10.4.17: Requested range not satisfiable
| "417" ; Section 10.4.18: Expectation Failed
| "500" ; Section 10.5.1: Internal Server Error
| "501" ; Section 10.5.2: Not Implemented
| "502" ; Section 10.5.3: Bad Gateway
| "503" ; Section 10.5.4: Service Unavailable
| "504" ; Section 10.5.5: Gateway Time-out
| "505" ; Section 10.5.6: HTTP Version not supported
| extension-code
extension-code = 3DIGIT
Reason-Phrase = *

response-header = Accept-Ranges ; Section 14.5
| Age ; Section 14.6
| ETag ; Section 14.19
| Location ; Section 14.30
| Proxy-Authenticate ; Section 14.33
| Retry-After ; Section 14.37
| Server ; Section 14.38
| Vary ; Section 14.44
| WWW-Authenticate ; Section 14.47


Friday, October 26, 2007

Linux Losing Market Share to Windows Server

Experts say that migrations from Unix to Linux have slowed down because all the low-hanging fruit has now been picked.

Linux growth in the U.S. x86 server market has, over the past six quarters, started to falter and reverse its positive course relative to Windows Server and the market as a whole.
The annual rate at which Linux is growing in the x86 server space has fallen from around 53 percent in 2003, when Windows Server growth was in the mid-20 percent range, to a negative 4 percent growth in calendar year 2006, IDC Quarterly Server Tracker figures show.

Over the same time period, Windows has continued to report positive annual growth, outpacing the total growth rate in the x86 market by more than 4 percent in 2006, indicating that Linux has actually lost market share to Windows Server over this time.

The same holds true for worldwide Linux x86 server shipments, which dropped from the huge annual growth rate of about 45 percent is 2003 to growth of less than 10 percent in 2006, the IDC figures show.

One of the biggest reasons for this is that the migrations from Unix to Linux have slowed down markedly.
"We have seen the rate of migration from Unix slow over the past few quarters," IDC analyst Matt Eastwood told eWEEK. "In my view this is because much of the low-hanging fruit has been moved and the applications that remain on Unix are stickier because they are seen as business critical and more political candidates for migration overall." Special Report: Enterprise Wars: Linux vs. Windows

IDC analyst Al Gillen pointed out that the number of servers shipped does not perfectly equal the number of operating systems in the market. This is particularly the case with Linux where a substantial portion of the overall market opportunity comes from deployments aboard recycled servers, PCs and workstations deployed as servers, and Linux deployed as a guest operating system.

"This does not contradict any trending taking place on server hardware," Gillen said.

He added: "But we do need to remember that the Linux software ecosystem does not track exactly the same as does x86 hardware shipments."
Margaret Lewis, the director of commercial solutions for AMD in Austin, Texas, has also noticed the slowdown in Linux growth over the past few quarters.

In 2000, Windows comprised about half of the server operating system market, followed by Unix and Netware at about 17 percent each and Linux reaching towards 10 percent, she said, noting that today Windows owns about 70 percent, Linux about 20 percent, with Unix below 10 percent and Netware barely registering.

"Looking at these large operating system market swings, you could draw the conclusion that Linux has gotten the 'low-hanging fruit' in terms of migration," Lewis said.

"Without the larger pool of Unix and NetWare users who are ripe for migration, there is not quite the level of fuel. You could assume that Linux is now ready to settle down to a more regular growth curve representative of a more mature technology."

The fact that Windows has maintained a steady growth rate over this same time frame could be the result of companies expanding their Windows-based IT infrastructure to meet the demands of users who always want to be online, she said.

"Windows-based Web hosting sites are experiencing strong growth, the Exchange infrastructure is expanding to offer unified messaging and many small businesses are moving to a real server infrastructure for basic infrastructure instead of a network of desktops," Lewis said.

Bill Hilf, general manager of Windows Server marketing and platform strategy at Microsoft in Redmond, Wash., has also noticed these trends, and says that increased customer adoption of Windows Server 2003 in a broad range of enterprise scenarios is driving significant growth of that business.

"I spend a lot of time talking with both Linux and Windows customers and partners, and the feedback that I hear is that, in volume, Linux is primarily deployed in two workloads—high-performance computing and as Web servers," Hilf told eWEEK.

"It appears that Linux server growth is moderating considerably and, while it's certainly still a player, it's not being considered across the broad range of workloads that Windows Server is, from ERP to CRM to messaging and collaboration to core infrastructure like file and print," he said.


OLPC experiments with cow-powered laptops ... seriously

One Laptop Per Child Project is finalizing the design of a cow-powered generator that can be used as a low-cost energy source in Indian villages

The One Laptop Per Child Project (OLPC) is toying with a novel source of power for its low-cost XO laptops: cows.

"We plan to drive a dynamo (taken from an old Fiat) through a system of belts and pulleys using cows/cattle," wrote OLPC's Arjun Sarwal, in an e-mail dated Oct. 21 and posted to one of the group's discussion lists.

Sarwal and others are now finalizing the design of the cow-powered generator.

The goal is to develop a low-cost energy source that can be used in Indian villages. Working in a village close to Mumbai, Sarwal said the group considered using solar energy but sunlight near Mumbai was not "consistently strong." There was not enough wind or running water nearby to use these as sources of power, and the cost of running a gas-powered motor was too high.

"But the village had an abundance of cattle that were being used in the fields. So we decided to design something around that," Sarwal wrote in a subsequent e-mail.

The dynamo used in the system was taken from a Fiat car that is commonly used as taxis in Mumbai and therefore both cheap and readily available.

OLPC is close to putting its XO laptop into production, but has been beset by delays and rising costs. Originally intended to cost $100 each, the cost has since risen to nearly $200. And production is also moving slowly.

After a trial production run in August, OLPC had hoped to start mass production in late September or early October. That date has now slipped to Nov. 12, according to a Reuters report that quoted the group's chief technology officer, Mary Lou Jepsen.

The News From Reuters is here:

BOSTON (Reuters) - A non-profit group developing a low-cost laptop for poor children said that a production delay would cause a shortage of computers available in the United States and Canada as part of a holiday giving program.

The $188 string-pulley-charged XO laptop was scheduled to go into production at a Chinese factory in October, but it is now slated to begin by November 12, said Mary Lou Jepsen, chief technology officer for the One Laptop per Child Foundation.

"We had some last-minute bugs. We've resolved them," she said in a recent interview, adding that the group expected to produce 100,000 laptops this year.

An October launch would have given the group time to produce and ship tens of thousands of laptops to Peru and Uruguay, the first two countries to order the laptops.

It would now be tough to get those laptops to South America by December, in time for kids to use them over their summer vacation, and also meet orders for the foundation's Give 1 Get 1 scheme for people in the United States and Canada, she said.

For $400, Give 1 Get 1 provides buyers with a laptop of their own plus a second machine to a poor child overseas.

The laptop features a string-pulley to charge its battery, a keyboard that switches between languages, a digital video camera, wireless connectivity and Linux open-source operating software tailored for remote regions.

The display switches from color to black-and-white for viewing in direct sunlight -- a feature unavailable in laptops at least 10 times more expensive.

It needs just 2 watts of power compared with a typical laptop's 30 to 40 watts, and does away with hard drives, relying instead on flash memory and 4 USB ports to add memory devices. The group is experimenting with a device that uses cows to generate power to charge its battery.

The fourth quarter is the busiest time of the year at computer plants in China, which produce the bulk of PCs from companies such as Hewlett-Packard Co (HPQ.N: Quote, Profile, Research), Dell Inc (DELL.O: Quote, Profile, Research) and Apple Inc (AAPL.O: Quote, Profile, Research).

Jepsen said some laptop customers in the United States and Canada would be able to get their PCs before the holidays, but they would be shipped on a first-come, first-served basis.

"Order early," she said.

The foundation will accept orders on its Web site,, from November 12.

Perspective: Facebook Is Now 5th Most Valuable U.S. Internet Company

Yesterday came news that Microsoft invested $240 million into Facebook, valuing the company at $15 billion.

How much is $15 billion? It’s hard to understand how much money that really is. But this evening a friend helped put it into perspective in a conversation about the deal: among the pure-play U.S. Internet companies, only Google, eBay, Yahoo and Amazon have larger market capitalizations. Their annual revenues range from $6 - $11 billion/year. IAC, Salesforce, and all the rest trail significantly.

Big Internet properties like MSN/, AOL and MySpace can’t be directly compared because they are part of larger corporations. Still, its easy to imagine that Facebook, at $15 billion, is perhaps worth more than AOL and MSN/ Is it worth more than MySpace, which was acquired for a mere $580 million in 2005? The total value of parent company News Corp., with $30 billion or so in annual revenue, is just $70 billion.

Of course, Facebook is not being valued by the public markets like the others. And it may be some time before there is any updated valuation for the company. They are now positioned with a huge war chest of cash (the actual amount raised is likely above $240 million; rumors of a hedge fund or other financial partner who put in additional cash are already swirling) and a massive stock valuation. They can make acquisitions of key technology and talent without spending much. And they can go for years as a private company on that cash. Even with the 700 employees the company expects to have next year, they shouldn’t spend more than $50 million or so per year to run the company.

Eight daily steps to a more secure network

In today’s connected world, hacking is a 24/7 business. Whether approaching it as a job or a hobby, hackers don’t punch a clock.

While many companies don’t have the budget for 24/7 security managers, that doesn’t mean you should just give up on security. If your security staff, or your one security staff member, is on a 9-to-5 schedule, your network can still remain secure in the 16 hours in-between — you just need to focus activities to provide maximum coverage for the network.

Develop a methodical, comprehensive task list that provides the most efficient means of securing your network. To jump-start your planning, here are eight simple tasks you should make sure to check off every day.
In the morning

After arriving at work, get some coffee, check your e-mail, and do the following:

1. Verify the current connections: There’s nothing like catching malicious behavior while it’s occurring. Inspect all the connections going through your firewall — both in and out. Look for anomalies and investigate them; this could include outbound FTP or inbound Telnet/SSH sessions. You’re looking for things that aren’t normal.
2. Look at network traffic statistics: How much activity took place while you weren’t there? What type of traffic was it, and what was the destination and source?
3. Look at your antivirus logs: Did a virus hit your e-mail system last night? Are the antivirus signatures up to date?
4. Read the security logs on your domain servers: Did the system lock out any accounts last night? Pay special attention to any accounts with administrator access. Verify that lockouts were human error — and not part of a breach attempt.
5. Check for new security patches: Determine whether any of your vendors released patches for any software in your baseline. (If you don’t have a baseline, I highly recommend developing one.) If a new patch is available, read the release notes thoroughly. Then, make a decision or recommendation whether to implement it now or wait for scheduled system downtime.

In the afternoon

When you arrive back from lunch, there’s still a lot left to do:

1. Meet and brief: Managers like to know what’s going on, so don’t wait for them to ask — tell them. Meet and brief on anything that occurred during the evening and the actions you’ve taken so far. This is also a good time to pitch new ideas, such as tools that could help you defend the network or staff training.
2. Check more logs: Take an in-depth look at IDS and firewall logs. Who on the Internet is knocking on your door? What are they looking for? Who on the inside of your network is doing something they shouldn’t be? If you find unauthorized and/or illegal activity, report it immediately, and take action to stop it.
3. Turn knowledge into action: Now that you know what went on while you weren’t there, develop an action plan to prevent the behavior in the future. Do you need to adjust your firewall rules? Is your IDS catching and reporting the proper events? Do you need to archive logs to save space on your servers? Do you need to give a final briefing on any actions that occurred during the last 24 hours?

Final thoughts

A lot of companies don’t run 24/7 security operations, and sometimes you might find yourself as the only person providing security for a network. While it’s easy to get caught up in events and miss important items on your security checklist, you’ll never know what you’re missing if you don’t create a list in the first place. Network security shouldn’t be reactionary — don’t wait for events to drive you into action.

The above list isn’t complete, but it’s a starting point. Create your own security to-do list that’s specific to your organization’s needs, and keep your security on track.

courtesy @TechRepublic

Thursday, October 25, 2007

Virtual Machine Additions for Linux

Compatible with Virtual Server 2005 R2 SP1
Virtual Machine Additions for Linux are designed to improve the usability and interoperability of running qualified Linux operating systems as guests or virtual machines of Virtual Server 2005 R2 SP1.

Virtual Machine Additions for Linux are designed to improve the usability and interoperability of running qualified Linux operating systems as guests or virtual machines of Virtual Server 2005 R2 SP1.

Now with support for SuSE Linux Enterprise Server 10

Microsoft is committed to testing and supporting many third-party operating systems for use as guest operating systems on Virtual Server 2005 R2 SP1 virtual machines. To help make sure that you have a favorable experience when you run third-party guest operating systems in Virtual Server 2005, Microsoft Product Support Services (PSS) has created a product support model for these third-party guest operating systems. This support model is consistent with the support model that is used for Virtual Server 2005 R2 SP1. Product support for the Virtual Machine Additions will be provided through the normal support channels available for Virtual Server 2005 R2 SP1.

Virtual Machine Additions information
To improve the interoperability between virtual machines running Linux guest operating systems and Virtual Server 2005 R2, Virtual Machine Additions are available for Linux guest operating systems. You can install these Virtual Machine Additions components in your Linux guest operating systems to improve the following operating system capabilities:

* Guest and host synchronization for time synchronization, for heartbeat generation, and for coordinated shutdown operations
* Mouse driver
* Display driver
* SCSI hard disk emulation

Note: The SCSI hard disk Virtual Machine Additions component requires Virtual Server 2005 R2 Service Pack 1 (SP1).

Qualified Linux guests:

Enterprise distributions

* Red Hat Enterprise Linux 2.1 (update 7)
* Red Hat Enterprise Linux 3.0 (update 8)
* Red Hat Enterprise Linux 4.0 (update 4)
* Red Hat Enterprise Linux 5.0
* SuSE Linux Enterprise Server 9.0
* SuSE Linux Enterprise Server 10.0

Standard distributions

* Red Hat Linux 9.0
* SuSE Linux 9.3
* SuSE Linux 10.0
* SuSE Linux 10.1
* SuSE Linux 10.2

System Requirements

* Supported Operating Systems: Linux; Windows Server 2003; Windows Server 2003 R2 (32-Bit x86); Windows Server 2003 R2 Datacenter Edition (32-Bit x86); Windows Server 2003 R2 Datacenter x64 Edition; Windows Server 2003 R2 Enterprise Edition (32-Bit x86); Windows Server 2003 R2 Enterprise x64 Edition; Windows Server 2003 R2 Standard Edition (32-bit x86); Windows Server 2003 R2 Standard x64 Edition ; Windows Server 2003 R2 x64 editions

Refer to Virtual Server 2005 R2 SP1 download page for more information. and make sure that you'll then choose the exact downloadable item and click on the button named download.


you wanna download it?? click here

25 Skills Every Man Should Know: Your Ultimate DIY Guide

These days, you can outsource almost any job—but some things you need to know how to do yourself. Study our master list with step-by-step tips from the experts, and test your DIY aptitude each step of the way.

If you think you don't know these 25 things like me.. just click on the link you don't know and it'll will make you learn at least you can get the idea easily and after that you can also say i know the 25 necessary things that a man should know.

1. Patch A Radiator Hose
Steam hissing from a ruptured radiator hose? Here’s a relatively easy, temporary fix with duct tape.

2. Protect Your Computer
Viruses and spyware can unleash a host of evils upon your PC, ranging from annoying pop-ups to a zombie system takeover. Security expert John Pironti of the nonprofit security agency ISACA suggests a layered approach to safeguarding your computer.

Lock it down: “Go to the security section of your Control Panel and enable the firewall before your PC ever touches the Internet,” Pironti advises. Then install a virus protection program and set it to download virus signatures every week.

Clean it up: Once a week, do a full virus scan with a program like Symantec’s Norton AntiVirus (, McAfee VirusScan ( or AVG Anti-Virus ( Pironti also says you should run a free spyware checker, such as SpyBot-S&D ( or CCleaner (

3. Rescue a Boater Who Has Capsized
When you come upon a capsized boat, approach with caution: The cause of the accident or debris in the water could render you a victim as well. Before attempting to rescue a boater in the water, phone or radio the police or Coast Guard, then approach the victim by putting the bow into the current and the wind; swing the bow toward him and, when you get close, put the engine in neutral to minimize danger from the propellers. If the swimmer is conscious, tie a rope at the middle and stern of your boat and put it in the water; the victim can use the loop as a step. If the victim is unconscious, position him at the stern and maneuver him so he faces away from the boat, arms in the air. Grab his wrists and bob him up and down; on the third bob, use the momentum to pull him into the boat. Elevate his legs and cover him with a blanket—this will help treat him if he’s in shock. Stay at the scene until help arrives.

4. Frame a Wall
It’s the basic partition—an interior, non-load-bearing wall with a door opening. Here’s how to frame it, so you can divide your basement into a really useful storage area and a totally indulgent man space—say, a big-screen sports den.

Hold the base and top plates together with their ends aligned, then measure 15 1/4 in. from the end farthest from the door opening. Draw a line across the edge of the plates and mark an X right of the line. From here, mark a series of lines—one for each stud—spaced 16 in. apart, with an X to the right of each. Mark the plates to indicate a door opening.

Separate the plates and nail studs to the right of each line. Use two common 16d nails driven through the plate at the top and bottom of each stud.

Single-frame door openings require four pieces of lumber. Measure your door; then make the opening 2 in. higher and wider. To remove the sill plate in the opening, use an eight-point crosscut saw to cut almost through. (Protect the floor with masking tape.) Knock out the piece with a hammer and clean it up with a chisel.

5. Retouch Digital Photos
Some shots are too flawed to fix with a click on autocorrect. Here’s how to perform surgery on digital images with nearly any photo-editing software.

Color temperature: If the color adjustment can’t fix unnatural colors, such as a sickly green from fluorescent lights, and there’s no time to tweak the red, green and blue levels, there’s a last resort: Declare yourself an artist and switch the image’s mode to black and white.

Cropping: Even a small spot of deep black or bright color can throw off a program’s ability to balance an image’s light or color levels. Crop out unwanted elements before making image-wide adjustments.

Lighting: Too much flash? Reduce the brightness and increase the contrast. For poorly lit images, do the opposite, boosting the brightness and reducing the contrast. To avoid gray, hazy images, make sure the photo’s black elements are still black and the whites still white.

Red-eye: If your software doesn’t have a red-eye reduction feature, zoom in on the offending eyes until you can see individual pixels. Select the desaturation tool and dab at the red portion of each eye. This drains the color, turning reds into grays, while retaining highlights so the irises don’t look artificial. The results probably won’t be pretty, but boring gray beats demonic red.

6. Back Up a Trailer
If you’re doing this without a spotter, put your left hand at six o’clock on the steering wheel, and drape your right hand over the seatback. As you back up, move your steering hand in the direction you want the trailer to go.

7. Build a Campfire

To find dry fuel, look for standing deadwood and broken branches stuck in tree limbs, says Tom Laskowski, director of Midwest Native Skills Institute. Place the material next to your cheek; if it feels cool, it’s too wet to burn efficiently. To fuel a 1-hour fire, gather two large fistfuls of tinder—such as cattail down and crushed pine needles—and about 30 twigs, 20 pencil-size sticks and 10 wrist-thick pieces. Form a tepee with three 6-in.-tall sticks and place smaller sticks on the floor as a platform for the tinder. Lean the smallest sticks on the tepee, leaving a doorway to face the wind. Place the next size of sticks on top; repeat twice. Pack the tepee with the tinder and light it. Slowly add the 10 largest sticks in a star pattern.

8. Fix a Dead Outlet

If the lamp goes out, but the bulb’s not fried, it’s time to check the outlet. Once you turn off the breaker, here’s how to fix the usual suspects.

Detached wire: Cut the damaged wire 1/8 in. from the end, strip 1/2 in. of insulation; reattach by bending the wire clockwise under the terminal screw and tighten.

Loose push-in connection: Reattach the loose wire on the back of the outlet under the appropriate terminal screw.

Loose splice: Remove the wire connector and replace it with a pro-quality Ideal 341 or 3M Super Tan. Hold the stripped wires so their ends are even and tighten the new connector.

9. Navigate With a Map and Compass
Though GPS may seem ubiquitous, it doesn’t work everywhere. Mountains and dense tree cover can knock out sat signals—and batteries can die. Here’s how to roam the backcountry with a compass and topo map.

Orient the map by aligning its magnetic north (MN) indicator with your compass’s reading of MN.

Pencil the MN line across the map, then anchor the map in this north-facing position; instead of turning the map as you head toward your destination, pivot around it as if switching seats at a table.

Draw a line between where you are and where you want to go. Once you turn toward the destination, the line of travel should be perpendicular to your chest.

Fold the map parallel to your line of travel, leaving a 2-in. margin on the side that you hold. Place the map between thumb and index finger and begin “thumbing the map”—use your thumb to check off terrain features as you travel so you can look away from the map without losing your bearings.

10. Use a Torque Wrench
Using a torque wrench the wrong way leads to incorrectly tightened fasteners, which can spell trouble for your machinery. To do it right, first screw the fasteners on by hand. Some are torqued dry, some lightly oiled—check your shop manual. Next, pick a wrench— a beam-type is less expensive, but the click-type can be easier to use. To use a beam wrench, first make sure it zeros; bend the pointer if necessary. Turn the wrench steadily, holding the plastic handle so it floats on the pivot to the beam to avoid influencing the readings with your hands. With a click wrench, twist the handle until you see the desired torque in the indicator window. Tighten the wrench until you feel the mechanism click, but no farther. With both wrenches, tighten all fasteners gradually, starting in the middle of the assembly and working in a widening spiral. Begin with one-third of the final torque; return to the first fastener and tighten all to two-thirds of the final torque. Repeat, in sequence, to the final torque.

11. Sharpen a Knife
A knife may be the most elemental of all human tools—but only if it’s sharp. Hone it the way your grandfather did, with a steady hand and a combination stone that has a coarse side and a fine side. The trick is to hold the blade at the correct angle. According to Bob Montagno, an expert sharpener and plant manager at Norton Pike (the first American sharpening-stone maker), most European blades have a 22- to 25-degree blade. “That’s about the angle of a book of matches,” Montagno says. “Japanese knives and fillet knives are 12 to 15 degrees.”

First, lubricate the coarse side of the stone with mineral oil or water; then push the blade across in a sweeping motion, like you’re cutting a thin slice off the stone. “Flip the knife and work the other side until a slight burr forms along the edge,” Montagno says. “Switch to the fine side of the stone, lift the blade to a slightly higher angle and hone off the burr to create a razor-sharp micro bevel.”

12. Perform CPR
Most people have an idea of how to perform cardio­pulmonary resuscitation (CPR) on a person whose heart has stopped, but you may not have taken a course in years. Here’s a refresher that will help you prolong signs of life until medics arrive.

Phone for help, then look and listen for the victim’s breathing. Open the airway by tilting the head back and lifting the chin so the teeth almost touch.

Pinch both nostrils closed; bend your head over his face and fully cover his mouth with yours. Give two full rescue breaths, making sure to breathe deeply.

Place your dominant hand on the middle of the victim’s chest. Put your other hand on top and interlock your fingers. Straighten your arms and begin compressing the chest 112 to 2 in. with the heels of your hands. Continue the compression/breathing cycle, compressing 30 times and then breathing twice, until the person starts breathing or help arrives.

13. Fillet a Fish
Set the scene with a flat surface and an appropriate knife—any long, thin, flexible and sharp blade will do, but for larger fish you might need a stiffer blade. Make your first cut behind the pectoral fin or gill cover, angling the tip of the knife slightly toward the head.

14. Maneuver a Car Out of a Skid
Although there isn’t much you can do when your car is pirouetting out of control, you can maneuver out of two basic types of skids before things get messy.

When the front tires slip, you’re understeering or plowing (A). This occurs when a motorist takes a turn too fast, at too sharp an angle or uses the brake or throttle excessively. The tires lose grip and the car’s momentum pushes it straight instead of through the curve. When you lose traction up front, steering has no effect; so slow down by gently reducing throttle. The tires will eventually grip and pull you in the direction you want to go.

Rear-wheel slippage is called oversteering or fishtailing (B). It happens during cornering when your rear wheels exceed the limit of their lateral traction before the front tires do, causing the rear of the vehicle to head toward the outside of the corner or front of the car. For rear-wheel slippage, you need to apply “CPR”—correction, pause and recovery. Correct by steering into the direction of the skid. Pause to let the unsprung weight of the car settle and the tires grip. Recover by steering the car straight; make your movements slow but sure.

15. Get a Car Unstuck
When you’re stuck, don’t gun the engine to get out—the tires will only dig in deeper. Instead, straighten the steering wheel, then dig out as much sand, snow or mud from around the front or rear of the tires as you can, depending on the direction you want to go. Place a floor mat snugly under a portion of each drive wheel (if your vehicle is 4wd, position a mat under each wheel). Ease the vehicle onto the mats. If there’s a passenger, have him push the vehicle in the direction you want to go. Repeat the procedure as needed, slowly progressing in the direction of travel until the vehicle is free.

16. Back Up Data
Don’t put off backing up your files until it’s too late. Bombproof backup: Install an external hard drive the same size as your primary hard drive or larger. When your computer is new make a drive image with a utility such as R-Drive (, then schedule regular backups using the external drive’s software. Multiple computers? Save money with a single network-attached storage drive, which backs up all of your PCs over the network. Online solution: If you have a small number of files, consider online storage solutions like and

17. Paint a Room
Good paint jobs start before the first can of paint is opened.

Prepare the room by removing all hardware (door latchsets, receptacle and switch plates). Don’t just fill small holes in the plaster or drywall; enlarge them first so the compound can be pushed in place, and wet the hole to slow drying. Sand rough spots, wash dirty areas, then prime.

Paint the ceiling, then the walls. Use a 212-in. brush to cut in the finish color at all corners and against the trim. Switch to a roller, apply paint in a W pattern and fill it in. After you dip the roller in the paint tray, 70 percent of the paint comes off on the first downstroke; avoid splatters by starting at least 9 in. from the corner. Apply two coats.

Finish by painting the woodwork and trim with a gloss or semigloss paint. It’s safest to mask off the walls beforehand, although pros often skip this step. If you do mask, use a tape designed for the purpose so the adhesive doesn’t pull the paint from the wall. Once the final coat dries, reinstall hardware.

18. Mix Concrete
If you’re going to use more than a cubic yard of concrete—a 9 x 9-ft. pad, 4 in. thick—call a Redi-Mix vendor. But for smaller jobs like a deck landing or fencepost footings, you can do it yourself with a hoe, shovel and wheel-barrow. Rule of thumb: A bag of portland cement makes about one- sixth of a cubic yard—or about a 44-in. square, 4 in. thick.

Mix 2 1/2 shovels of sand and 2 1/2 of gravel to each shovel of cement. (Exact proportions vary with the size of the aggregate—aka sand and gravel.)

Shovel the aggregate and cement into a wheelbarrow. Mix in water cautiously; a drier mix makes stronger concrete. When the mixture is gray/green, form a handful into a 3-in. ball. Toss it from one hand to the other. Too dry, and it will crumble; if it splatters, it’s too wet. Correct the consistency with the appropriate ingredient. Don’t let the concrete dry for more than an hour between loads.

Cure the poured concrete by keeping it moist for three to seven days—cover it with plastic or sprinkle water on it so the surface stays damp.

19. Clean a Bolt-Action Rifle
A. Make sure the rifle is not loaded.

B. Lay the rifle in a gun vise or cradle that will hold it securely during cleaning.

C. Remove the bolt and insert a bore guide in the action to protect it from being dinged by the cleaning rod. If the rifle has a scope, keep the scope covers on.

D. Spray foaming cleaner down the bore; let it stand for 10 to 15 minutes.

E. Screw a pointed jag that matches the rifle’s caliber on the end of the cleaning rod. Soak a cloth cleaning patch in a bore cleaner or solvent, then place it on the jag. Push the patch all the way through the bore from the action end. Always clean your rifle in only one direction—from the action to the muzzle. Never scrub back and forth. When the patch exits the muzzle, unscrew it, carefully draw the rod back out and screw on a fresh patch. Repeat at least twice.

F. Attach a bore brush to the cleaning rod and push it down the barrel three times to push grime and dirt out of the rifling grooves.

G. Replace the jag and run dry patches down the bore until they come out clean.

H. Spray a cleaner/lubricant on a cloth and wipe down the bolt body, bolt face and the interior of the receiver. Before you replace the bolt, look through the barrel from the action end to be sure that it is clear of obstructions.

20. Change Oil and Filter
Every 3000 miles you can commune with your car when you change the oil. Warm the engine to stir up any sediment in the crankcase, then raise the car on stands or ramps. Put a pan under the drain and re-move the plug; let it drain for 10 minutes. Remove the filter, and let it drain into the pan; make sure the O-ring comes off. Use your finger to coat the new filter’s O-ring with a little oil. If the angle of the new filter allows, prefill it with oil and screw it on. Tighten a three-quarter turn after the gasket touches. Reinstall the drain plug with a new crush washer or seal. Add all but the last quart of oil, start the engine and check for leaks. Turn off the car, let it sit for a few minutes, then check the oil level. Top off to the fill mark.

21. Hook Up an HDTV
Hi-def televisions have the potential to produce some staggeringly bad images if hooked up incorrectly. In the era of digital television, resolution is quantifiable, but high-res has to be coaxed into its glory through a combination of the proper cables, components and source material. The top prize: A breathtakingly crisp 1080p (1920 x 1080 pixels) widescreen picture and multichannel sound. You can’t always get picture perfection, but by following this chart you can hook up components the right way—ensuring that your set is squeezing the most resolution possible out of any video source.

Note the TV’s maximum resolution, then check the chart for the maximum resolution of each source. When connecting these components to the TV, use the cable that matches the resolution you’re dealing with. If your TV’s resolution is less than the source’s, or you’re using a cable that downgrades the signal, you won’t get the best picture. For example, if you have a 1080p TV, and a Blu-ray player (also 1080p), but you use a component cable to connect them, the best you’ll get is 1080i. HDMI is almost always the best choice, since it handles video as well as audio. Finally, don’t buy into pricey HDMI cables. The price increases for extra-long cables, but otherwise, go for the cheapest ones. Your TV won’t know the difference ... because there isn’t any.

22. Bleed Brakes
When the brake pedal starts to feel spongy, it’s time to bleed your brakes. Make sure all four bleeder bolts at the wheels turn readily, then use a turkey baster to suck old brake fluid out of the reservoir. Clean the reservoir and fill to the brim with fresh fluid. Put a small hose on the bleeder to route the fluid into a container. Have an assistant depress the brake pedal. Open the bolt farthest away from the master cylinder a quarter-turn, then close it. Ask the helper to slowly lift his foot off the pedal, then depress it again, repeating until fresh fluid comes through the hose. Top off the reservoir regularly. Repeat the process at the other three corners, then do all four corners again. ABS pumps may require bleeding as well; check the manual.

23. Paddle a Canoe
For flat-water cruising, the sternman’s J-stroke is key: It keeps the canoe tracking in a straight line. Reach forward so the “catch”—the start of the blade’s pull through the water—is well in front of your knees. At midstroke, the blade should be vertical and fully immersed. The upper arm extends diagonally across your body as though delivering a cross-punch and finishes on the outside of the gunwale (top edge of the canoe). The motion delivers power through a lever action; use the shaft hand initially as a fulcrum, then pull back on the shaft. The second half of the stroke traces the hook of the letter “J.” When you draw the blade out of the water, the power face (the side pulling against the water) is parallel to the canoe, with the thumb of your top hand pointing down. Your paddle is acting as a part-time rudder.

24. Fix a Bike Flat
Glass, nails, thorns—when a sharp object takes the air out of your cycling plans, here’s what to do. Once you remove the wheel, force the deflated tire off the rim, starting opposite the valve, then separate tire and tube. If the leak is a large tear, throw the tube out. To locate a pinhole leak, inflate the tube and feel for escaping air. If necessary, dunk the tube in water and look for bubbles. Apply a patch from the kit you always bring along when biking. The repair should last the life of the tire. Before remounting the tire, wipe the inside of it clean with a dry cloth to remove any sharp objects that might puncture the tube. Then work the lip of the tire onto half of the rim. Tuck the tube inside the tire, and insert the valve into its rim hole. Pump some air into the tube to reduce its chances of getting pinched between rim and tire. Then work the tire onto the rest of the rim, starting at the valve. Split the wheel into quarters. Work one-quarter down either side from the valve. Then repeat the process on the other half of the tire. This final step may require two bike levers.

25. Extend Your Wireless Network

You’ve got a laptop that, ideally, you’d like to use anywhere in your house. But the strength of your wireless Internet fades between floors and behind thick walls. If moving the access point to the center of your home and eliminating all interior walls isn’t an option, increase the range of your Wi-Fi by upgrading your equipment. Standard 802.11b and g access points can distribute a computer network to a radius of 130 to 300 ft. But you can squeeze 30 to 80 more feet of range by using an 802.11g access point with MIMO (multiple input, multiple output) technology, or up to 150 extra feet of coverage with an 802.11n access point.

If you don’t want to replace your equipment, stretch the network through your electrical wiring. Powerline networking hubs (available from Netgear and Linksys) transmit your Internet connection from one outlet to any other in your house. Use them to move your access point to an ideal spot, or to set up a second hot spot for more coverage.

So, Now you are a expert male i think, isn't it?? How are you feeling man??
cheers Aurobindo


Update: Facebook chooses Microsoft over Google

Microsoft will purchase a $240 million minority stake in Facebook as well as become its exclusive third-party ad platform

Facebook will sell a $240 million minority stake to Microsoft, which as part of the deal will also expand the advertising services it provides to the social networking phenom, the companies said Wednesday in a statement.

The size of the ownership stake Microsoft will take during Facebook's next round of financing puts Facebook's valuation at a whopping $15 billion. Google had reportedly been courting Facebook as well.

In addition to the ownership piece, Microsoft will also extend its existing agreement to provide banner ads to Facebook in the U.S. With this deal, Microsoft will become Facebook's exclusive third-party ad platform as well as provide Facebook ads internationally.

"This is about placing a big bet on the future of Facebook and positioning Microsoft possibly for an outright acquisition later, as well as keeping Facebook away from Google," said analyst Greg Sterling from Sterling Market Intelligence.

During a conference call after the announcement, Owen Van Natta, Facebook's vice president of operations and chief revenue officer, didn't acknowledge Google was one of the company's suitors.

He said Facebook chose Microsoft because of its reputation as one of the world's top technology providers. "We were fortunate to have a lot of folks who wanted to partner with us around advertising," he said.

Kevin Johnson, president of Microsoft's Platforms and Services Division, called the deal a "big vote of confidence" for Microsoft's advertising strategy.

However, he said advertising is just one area of convergence for the companies, though he declined to mention specifically in what other areas of technology or business the two companies will collaborate.

Facebook will likely devote the cash influx from its next financing round to bankroll the torrid growth it is expecting in the coming 12 months in usage and headcount.

"This is clearly good for Facebook as they get a big pile of cash to expand, and Microsoft has given them the valuation they were looking for," Sterling said. "So Facebook gets a big chunk of money and a massive valuation."

With about 300 employees now, Facebook expects to have about 700 a year from now, its CEO and co-founder Mark Zuckerberg said last week at the Web 2.0 Summit.

Meanwhile, the site is growing its usage at breakneck speed with about 250,000 new users registering every day.

Founded in 2004, it currently has about 49 million active users today, up from 12 million in December. Over half of its active members return to the site daily. Some 59 percent of its users are outside the U.S.

Earlier Wednesday, The Wall Street Journal and The New York Post reported that Facebook was in the final stages of making a decision on whether to do this deal with Microsoft or Google.

For Microsoft, which hasn't attained as strong a position in online advertising as it had hoped, and lags behind Google, landing this deal could be a major win, as long as Facebook proves to be as attractive an advertising vehicle as expected.

Microsoft and Facebook signed their original advertising deal in August 2006 and months later extended that agreement through 2011.

The Journal reported later on Wednesday that Facebook expects a profit of about $30 million this year on revenue of $150 million.

Google and Yahoo provide ads for Facebook rival MySpace.

Since News Corp. bagged MySpace in 2005 and Google bought YouTube last year, "for Microsoft, this was a must-win," said Allen Weiner, a Gartner analyst. "They needed to do whatever it took."

With this deal, Microsoft sends a clear message that it is serious about its intention to be a major online advertising platform player, Weiner said.

Still, questions remain about social networking sites' full potential for advertising as most of their content is largely unregulated and created by millions of individuals, resulting often in material that is vulgar and objectionable.

"There is some merit to those questions about social networking sites as viable advertising vehicles," Weiner said.

However, these sites will probably evolve and look very differently in five years, when, in addition to their core social networking functions, they'll also likely be platforms for delivering media content to its members, Weiner said.

Facebook plans to share more ideas for revving up its advertising business on Nov. 6, at an event in New York to which it has invited what it calls "its closest advertisers."

"As part of [the event], Facebook executives will discuss new approaches for advertising online," a Facebook spokeswoman said. "We are not sharing any further details."

Facebook, MySpace, and others are also under close scrutiny from law enforcement agencies in the U.S. and abroad because sexual predators use social-networking sites to stalk and victimize people, in particular minors.

According to Hitwise, was the ninth most visited site in the U.S. during the week ended October 20. Within the social networking category, received 15 percent of U.S. visits during that week, placing second behind leader MySpace, which got 76 percent of visits, according to Hitwise.


The programming paradigm needs an update

The way I view programming is different than it was a week ago due to various factors. First, I have spent a lot of time lately with my head buried in the .NET documentation, and something in the back of my mind said, “If C# is so much more efficient than VB.NET, why do all of the code samples appear to be the same length and look virtually identical?” Then, I reread an e-mail from someone telling me that XYZ language was awesome because it needed dramatically less source lines of code (SLOC) to do the same thing as more mainstream languages. And, I have still been multithreading the same dumb little piece of code. Finally, I read a post by Mark Miller about Emacs and Lisp.

It is all coming together for me now, the conscious understanding of what I really dislike about programming. I got into programming because I like solving problems, but solving problems is really only a small fraction of the work. The rest of it is giving exact, precise details as to how to perform the tasks that solve the problems. It is like painting the Sistine Chapel by putting a seven-year-old boy on a scaffold and dictating to him every stroke you want him to make. It is ridiculous.

This highlights the real problem in the programming industry: Everything we slap on top of the development process is more garbage on top of a rotting foundation. Let’s take a closer look at what we do here, folks, and examine how much the programming paradigm has (or has not) changed.

Then (i.e., 10 -20 years ago)
A programmer sits down and analyzes the process of the work. Using a stencil and a pencil, he lays out a workflow on graph paper. The programmer sits down, fires up his trusty text editor (if he is lucky, it supports autoindent), and creates one or more text files containing source code. He then compiles the source code (or tries to run it through an interpreter) to check for syntactical correctness. Once it compiles or interprets correctly, he runs it with test cases to verify logical correctness and to check for run-time bugs. Any bugs are logged to a text file; or maybe he has a debugger or crash dump analyzer to find out what went wrong. This continues until the program is considered complete.

A programmer sits down and analyzes the process of the work. Using a flowcharting tool or maybe a UML editor, he lays out a workflow. The programmer sits down, fires up his trusty IDE (if he is lucky, it supports version control), and creates one or more text files containing the source code. Some of this code may be auto-generated, such as data objects based on the database schema or some basic code from the UML. Half of this generated code will need to be discarded unless the project is very basic, but at least it is a start. The IDE will handle the basics of getting a form to display regardless of whether it is a desktop app or a Web app. The programmer then compiles the source code (or tries to run it through an interpreter) to check for syntactical correctness. Once it compiles or interprets correctly, he runs it with test cases to verify logical correctness and to check for run-time bugs. Any bugs are logged to a text file; or maybe he has a debugger or crash dump analyzer to find out what went wrong. This continues until the program is considered complete.

Wow… we’ve traded in vi for Visual Studio and a bunch of print statements for [F11]. At the end of the day, nothing has really changed except for the tools, which are barely keeping pace with the increasing complexity of developing software. We are stuck, and we are stuck badly.

The Lisp advocates like to say, “Lisp would have taken over if only we had better/different hardware!” Now we have the hardware, and Lisp is still not taking over. I assert that we need to go far beyond something like Lisp at this point; we need to get into an entirely new type of language. A great example of this is multithreading.

IT pros usually say two things about bringing multithreading work mainstream: Compilers need to get a lot smarter before this can happen, and we cannot make the compilers smart enough for this to happen well. If this seems like an irresolvable contradiction, it isn’t. The problem is not the compilers — it’s our paradigms.

If you’ve spent a fair amount of time with multithreading, you know that it will never become a commonplace technique until the compiler can handle most of it automatically. The fact is that it’s tricky for most programmers to keep the details of a system where concurrency is an issue — and debugging these systems is a pure terror.

Smarter compilers are the answer, but there is a truth amongst the compiler folks that compilers will never get that smart. Why? Because properly translating a serial operation into a parallel one requires understanding the code’s intentions and not just the step-by-step how to guide that the source code models. I can read your code and (provided it is clear enough) understand probably 80% of your intentions up front and possibly figure out an additional 10% or 15% of your code with time. The other 5% or 10% will be a mystery until I ask you.

Read the comments on this post from Chad Perrin about Python and Ruby; these people are trying to optimize a trivial chunk of code. What is even more interesting is the point Chad makes over and over again in his responses (he posts as apotheon): Maybe the intention of the code was to produce that onscreen counter that is eliminated in most of the optimizations. Or maybe, despite it being slower due to the concatenation of immutable strings, there was a knock off effect of that as well. Who knows? The intentions cannot be made through code without having ridiculously verbose comments in the code or having an exacting product spec available.

Perl appears to understand intentions, but it is a trick. Perl was simply designed to make certain assumptions based on the way most programmers usually think in the absence of logical code. If your intentions do not square with Perl’s assumptions, it either will not run, or it will not run properly. If you do not believe me, try abusing Perl a little with a record format that specifies the tilde as a record separator instead of newline. Perl’s assumptions fly out the window unless you set the record separation string in your code; and, at that point, you are no longer actually using the assumptions — you are giving it precise directions.

I am all for self-documenting code. I like to think that no one reading my code had to struggle to figure out what it does. But aside from design specs and/or pages of inline comments, there is no way for someone reading it to know why I wrote the code that I did. It is like being in the Army. They usually don’t tell you why you need to march down a road, they just tell you to do it.

Programmers are in a bind. Without a way for the compiler to know the design specifications, the compiler cannot truly optimize something as complex as a parallel operation beyond really obvious optimizations. There are no hard and fast rules to making a serial operation parallel; it is a black art that involves a lot of trial and error even for frequent practitioners. In order for the compiler be able to understand those design specifications, it would require an entirely different type of language and compiler. Assertations and other “design by contract” items are not even the tip of the iceberg — they are the seagull sitting on the iceberg in terms of resolving the issue. If the compiler is smart enough to understand the design document, why even bother writing the code? UML-to-code tools generally try to do this, but they do not go far enough. At best, these tools can translate a process into code that literally expresses that process; there is no understanding of intention.

There are a few major schools of programming languages — object oriented, procedural, functional, and imperative — all of which have their strengths and weaknesses. Functional and imperative languages come the closest to what I am talking about. SQL is a great example. You tell it what you want not how to get what you want. The details of the “how” are up to the database engine. As a result, databases are optimized in such a way that they run a lot faster than what 99.9% of programmers could get the same stuff to run (not to mention redundancy, transactions, etc.) despite their rather general purpose nature. Even SQL shows a lot of weakness; while it is an imperative language, it is extremely domain specific. As soon as you want to manipulate that data, you land yourself in the world of procedural code either within a stored procedure or your application.

Most applications (and every library) become a miniature domain specific language (DSL) unto itself — not syntactically (although some, such as regex libraries, reach that status), but in terminology, subject matter, and so on. The problem you are most likely trying to address has absolutely nothing to do with the language you are using and everything to do with a specific, nonprogramming problem.

A great example of the disconnect between code and the problem it addresses is the subject of loops. I bet over 50% of the loops out there go over an entire data collection and do not exit without hitting every single element in the collection. The logic we are implementing is something like “find all of the items in the collection that meet condition XYZ” or “do operation F to all items in the collection.” So why are we working with languages that do not deal with set theory?

Programmers end up implementing the same thing over and over again (i.e., a function or object or whatever in a library that takes that big set as the input) and implementing a filter command that returns a smaller, filtered set, or an “ExecuteOnAll” method that takes a pointer to a function as the argument.

When the language folks try to make it easier on us, the result is stuff like LINQ, the welding of a DSL to a framework or language to compensate for that language or framework’s shortcomings in a particular problem domain.

The only way LINQ could get implemented is if the languages that support it have closures, which are “the thing” in a functional language like Lisp; closures are even important in Perl. But programmers have been working in Java and Java-like languages for the last five - 10 years (depending on how much of an early adopter you were), and a lot of folks missed Perl entirely, either sticking with VB and then the .NET languages or starting with C/C++ (or Pascal) and going to Java and/or .NET. The only exposure most programmers ever had to a truly dynamic language is JavaScript (aka ECMAScript). (By dynamic language, I mean a language that can edit itself or implement or re-implement functionality at run-time. JavaScript, with its support for eval(), has it and so does Perl. In functional languages like Lisp, this is all the language really can do.) In reality, JavaScript is not that bad; in fact, I like it quite a bit. I am just not a huge fan of the environment and object model programmers are used to seeing it in (the browser DOM).

Most of the programmers I have dealt with have little (if any) experience with a dynamic language. The result is that they don’t have the ability to think the way you need to about a dynamic language. These programmers stumble around blind; they intuitively know that they aren’t working to their potential, but they have no idea where to start. (Why else would there be the huge market for code generators and other gadgets to improve productivity by reducing typing?)

I do not believe that Lisp and its ilk are the answer; they are too difficult for most programmers to read through and understand, and the entire code is a back reference to itself. Procedural languages have also proven hard to maintain. Object-oriented languages are the easiest to maintain — at the expense of being insanely verbose, which is another reason for the code generators. Imperative languages are almost always going to be little more than DSLs.
Where do we go from here?

I want to see programmers headed towards intentional languages. I have no idea what they would look like, but the source code would have to be a lot more than the usual text file and would need to be able to express relationships within the data format, like XML or a database do. The programming paradigm needs to be able to quickly reduce any business problem to an algorithm so that the real work can go into writing the algorithm and then, at the last minute, translating the results to the domain’s data structures again. The programming paradigm would look like a mix of a lot of different ideas, but syntax and punctuation would have to be fairly irrelevant.

What are your thoughts about the programming paradigm? What direction do you think it needs to take?