gamedesignteam

MOBILE GAMES, IPHONE APPLICATIONS, COMPUTER GAMES, GAME DEVELOPMENT TRAINING , http://www.gamedesignteam.com

  • game design team

    We have emerged as the leading online community for game development of all levels. Our expertise encases all facets for writing PC , Mobile and Online of 2D and 3D Gaming programming and applications development, for instance by using the latest 3D engines, scripting languages and animation techniques, our experienced and qualified team deals with all kind of requirements, whether it be a beginner's choice or an expert gaming action. Most importantly, we endeavor to offer compelling solution and eminent support to our growing community of prospective players and customers.

HTC says confident can defend against Apple suit

Posted by virtualinfocom On 10:44 PM 0 comments

Cellphone developer HTC Corp said it is confident it can fight off a recent technology patent infringement lawsuit from iPhone maker Apple Inc

and promised to issue a formal response in the next few weeks.

The comments released on Thursday follow a lawsuit from Apple earlier this month, accusing HTC of infringing on 20 iPhone related technology patents. HTC makes phones based on software from Apple's archrivals Google Inc and from Microsoft Corp.

Taiwan's HTC said it would use every means possible to fight off the suit.

"We feel confident in our innovation and our ability to defend ourselves in this case," Jason Mackenzie, vice president for HTC's U.S. business said in an interview.

Mackenzie declined to go into detail about how HTC will defend itself except to say the company would issue a formal response in the next few weeks.

"HTC strongly disagrees with Apple's actions. We plan to use all the legal tools we have at our disposal to both defend ourselves and set the record straight," Mackenzie said.

While Apple's lawsuit did not name Google as a defendant, the case was viewed by many analysts as a proxy for an attack on Google, whose operating system powers many phones made by HTC, including Nexus One, which Google sells directly.

Mackenzie declined comment on this aspect of the case and suggested directing such questions at Apple.

Apple's suit was filed with both the U.S. International Trade Commission and the U.S. District Court in Delaware on March 2, and seeks to prohibit HTC from selling, marketing or distributing infringing products in the United States.

The complaint filed with the International Trade Commission said infringing products include Nexus One, which was launched in January, and other HTC phones such as the Hero, Dream and myTouch -- which run on Google's Android mobile software.

The executive said product innovation was one of the cornerstones around with HTC was founded in 1997.

He said the company had been first to market new product categories, including its 2002 Pocket PC and a phone it introduced last year for WiMax, an emerging high-speed wireless technology.

HTC issued a statement from its Chief Executive Peter Chou listing the company's history of innovation.

"From day one, HTC has focused on creating cutting-edge innovations that deliver unique value for people looking for a smartphone," Chou said.

"In 1999 we started designing the XDA and T-Mobile Pocket PC Phone Edition, our first touch-screen smart phones, and they both shipped in 2002 with more than 50 additional HTC smart phone models shipping since then."

The weekly strip, known for its geeky humor (the family owns an iFruit PC, for example), took a swipe at Apple and its decision not to support Flash on the iPad.

In last Sunday's comic, author Bill Amend depicts a Steve Jobs lookalike promising a series of superheroes that the iPad will save them.

The first three panels show Steve telling Superman, Spider-Man, and the Hulk that the iPad is "the future of comics." But in the fourth panel, he tells the Flash, "Sorry, Flash, you're out of luck."
alt
In the final panel, we see that the previous four were the work of the youngest kid in the family, whose brother expresses doubt that this strip will ever appear on the iPad.

The strip closes with the youngest kid saying, "I'm sure Apple has a sense of humor about this stuff…right? Right? Right???"

Object C Introduction

Posted by virtualinfocom On 2:56 AM 0 comments

What Is Objective-C?
Objective-C is an object-oriented language: it supports hierarchies of substitutable types, message-passing between objects, and code reuse through inheritance. Objective-C adds these features to the familiar C programming language.

Because Objective-C is an extension of C, many properties of an Objective-C program depend on the underlying C development tools. Among these properties are:

· The size of scalar variables such as integers and floating-point numbers

· Allowed placement of scoped declarations

· Implicit type conversion and promotion

· Storage of string literals

· Preprocessor macro expansion

· Compiler warning levels

· Code optimization

· Include and link search paths

For more information about these topics, consult the documentation for your development platform and tools.

Objective-C differs from C++, another object-oriented extension of C, by deferring decisions until runtime that C++ would make at compile time. Objective-C is distinguished by the following key features:

· Dynamic dispatch

· Dynamic typing

· Dynamic loading

1.2.1 Dynamic Dispatch
Object-oriented languages replace function calls with messages. The difference is that the same message may trigger different code at runtime, depending on the type of the message receiver. Objective-C decides dynamically—at runtime—what code will handle a message by searching the receiver's class and parent classes. (The Objective-C runtime caches the search results for better performance.) By contrast, a C++ compiler constructs a dispatch table statically—at compile time.

Because the simple linear search for a receiver used by Objective-C mirrors the way we think about inheritance, it's easy to understand how an Objective-C program works. Dynamic dispatch can handle changes in the inheritance hierarchy at runtime. A dynamic message-sending model is also more natural for distributed objects than a table-based model.

1.2.2 Dynamic Typing
Because message-sending is dynamic, Objective-C lets you send messages to objects whose type has not been declared. The Objective-C environment determines dynamically—at runtime—the class of the message receiver and calls the appropriate code. By comparison, C++ requires the type of the receiver to be declared statically—at compile time—in order to consult dispatch tables.

Static typing allows the compiler to detect some program errors, but type checking is undecidable—that is, no algorithm can infallibly distinguish between programs that have type errors and those that do not. A compiler must either miss some errors or prohibit some safe operations. Of course, in practice compilers follow the latter course, so some programs that would run correctly will not compile. Dynamic typing admits designs whose correctness is not evident to the compiler.

Objective-C lets you use static type checking where you want it, but dynamic typing where you need it. This represents a move away from the question of What is the receiver's type at compile time? to What messages does an object respond to at runtime? Since programs run only at runtime, this is a more useful perspective.

1.2.3 Dynamic Loading
Because the process of method dispatch is simple and uniform, it's easy to defer until runtime the linking of separately-compiled code modules. Objective-C programs can be factored into components that have minimal interdependency; these components can be loaded as needed by a running program. This makes it easier to deliver code, as well as content, over a network; design applications or systems that are distributed; or write an application that can be extended by third-party plug-ins.

1.2.4 Which Objective-C?
If you are programming in a Unix environment, you probably already have an Objective-C compiler: the gcc compiler, which is part of many Unix installations and is available under the terms of the GNU Public License. Because of the wide availability of this compiler for many software and hardware platforms, this handbook documents the features of the language compiled by Version 3.1 of gcc.

Apple Computer has also adopted gcc as the compiler for its OS X platform, which is based on a Unix variant called Darwin. Darwin provides its own Objective-C runtime, and a class library called Cocoa. This handbook notes the differences between the Darwin and GNU runtime environments, and documents the root classes supplied by both GNU and Cocoa.

There is also a class library called GNUstep, distributed under the terms of the GNU Lesser (Library) Public License. GNUstep is an outgrowth of the same code that gave rise to Cocoa, and is largely compatible with Cocoa. Discussions in this book of Cocoa features such as the NSObject root class will apply equally to the GNUstep version.

1.2.5 How Do I Get Started?
Here is a minimal Objective-C program. If you can successfully compile and run it, your Objective-C installation is working correctly.

#import
int main(int argc, char * argv[ ]) {
Object* obj = [Object new];
return 0;
}
To build this program from a shell prompt, save it in a file named myProg.m and issue the following commands. (Your platform may require a different threading library, which is specified in the last parameter. If you are using an integrated development environment, follow its documentation for building a program.)

gcc -c myProg.m
gcc -o myProg myProg.o -lobjc -lpthread
When this little program succeeds in compiling, you are ready to start learning the language and writing Objective-C programs.


Elements of the Language
Objective-C extends the C language with the following concepts and constructs:

· Objects (instances of classes)

· Classes

· Inheritance and subtyping

· Fields

· Methods and method calls (or messages)

· Categories

· Protocols

· Declarations (extended from C to include class and protocol types)

· Predefined types, constants, and variables

· Compiler and preprocessor directives

The following sections will describe these aspects of Objective-C.

1.3.1 Objects
Objects are the compound values—data and operations—at the heart of object-oriented programming. They are generalizations of simple structured types found in C and many other languages. Like C structs, objects have components—data fields—that maintain state. For example, a Book object might have fields to specify the author and publisher. In addition, objects interact through message passing, which provides an alternative to the function calls of a procedural language.

Objective-C objects have these attributes:

Class

An object type. An object whose type is MyClass is said to be an instance of MyClass.

Fields

Data members of an object. An object has its own copies of the fields declared by its class or its ancestor classes.


Fields are also referred to as "instance variables." I prefer the term "fields" for several reasons: "instance variables" is redundant since there are no class variables, it is ambiguous since it could mean variables that are instances, just "variables" would be more ambiguous, and "fields" is shorter. (An alternative term is "ivars.")




Methods

Functions provided by an object. An object responds to methods declared by its class or ancestor classes.


A few special objects (class objects) acquire their fields and methods differently. Section 1.9 describes class objects.




Objective-C objects are implemented so that:

· They exist in dynamically allocated memory.

· They can't be declared on the stack or passed by value to other scopes.

· They are referred to only by pointers.

When someone says of an Objective-C variable: "c is an instance of C", you should understand that to mean that c is a pointer to an object of type C.

1.3.2 Classes
Classes are types in Objective-C. The interface of a class specifies the structure of its instances; the implementation provides its code. The interface and implementation of a class are separate, usually in different files. Categories add to an existing class without subclassing it; they also have separate interface and implementation. Protocols are pure interface declarations.

Classes declare the following attributes:

Parent class

The class whose methods and fields will be inherited by the new class being declared.

Class name

The name of the class being declared.

Fields

Data members of each instance of the class.

Instance methods

Functions associated with instances of the class.

Class methods

Functions associated with the class itself.

Because Objective-C makes calling class methods syntactically identical to calling instance methods, classes themselves behave much like objects. Section 1.9 discusses class objects.

1.3.2.1 Declaring an interface
An interface names a class and declares its parent (if any), fields, and methods, without specifying any implementation. (You can't use C++-style inline methods, implemented in the header.) A header file can contain any number of interface declarations, but it is conventional to put each interface in a separate header file. By default, gcc expects the filename to end in .h.

Following is an example interface declaration. (Note that the line numbers are not part of the source code.)

1 #import "Graphic.h "
2
3 @class Point ;
4
5 @interface Circle : Graphic {
6 @protected // or @public or @private
7 float radius ;
8 Point * center ;
9 }
10 -(void )scaleBy :(float )factor ;
11 +(void )numCircles ;
12 @end
Line 1. The #import directive is like C's #include directive, except that the compiler ensures that no file is included more than once. You always need to import the declaration of your class's parent class (if any). You don't need to import any other Objective-C class declarations, but it may be convenient to import some umbrella header files as a matter of routine.

Line 3. You use the ec@class declaration when your class's fields, or the return values or parameters of your class's methods, are instances of another class. You can use separate @class declarations for distinct classes, or use a single declaration with the class names separated by commas.

A class declaration doesn't need any more information about any other class, so you don't need to import a header unless the header has other declarations (e.g., macros or globals) that your class declaration needs.

Line 5. Specify the name of your class and that of the parent class (if any). The name of your class will be visible to any code that includes the header file. All class names exist in the global namespace, along with global variable names and type names.

Line 6. Access keywords control compile-time checking of access to fields. You can repeat these as often as you want; a field has the access permission specified by the most recent preceding keyword. If there is no preceding keyword, access permission defaults to protected.

In brief, public fields are visible to all subclasses and all external code, protected fields are visible only to subclasses, and private fields are visible only in the class being declared. Section 1.3.4 gives exact rules.

Line 7. Declare fields in the same manner as you declare structure members in C. Fields can be of any C type, as well as of any class or other type (described in Section 1.3.9) added by Objective-C. Fields can have the same name as methods in the same class.

Fields are not shared between instances—that is, Objective-C does not support class variables. But you can get the same effect by declaring ordinary variables as static in the implementation file. (See the following Section 1.3.2.2 for an example.)

Line 8. You incorporate other objects only by pointer, not by value. Objective-C's predefined id, Class, and Protocol types are pointer types already.

Line 9. No semicolon after the closing brace.

Line 10. An instance method is marked with a - character. Instance methods operate on instances of the class. Method signatures use Objective-C's infix syntax, discussed later in Section 1.3.5.

You don't need to redeclare a method if you are inheriting it. It is conventional to redeclare a method if your class inherits and overrides it. Section 1.3.5.4 explains why you should declare a method in all other cases. (But not necessarily in the header file; see Section 1.3.5.5.) Methods can have the same name as fields of the same class, and instance methods can share names with class methods.

Line 11. A class method is marked with a + character. Class methods perform operations or return information about the class as a whole, and don't pertain to any instance of the class.

Line 12. No semicolon after the @end keyword.

1.3.2.2 Implementing a class
You implement a class by writing the code (i.e., the bodies) for each of the class's methods. A file can contain any number of class implementations, but it is conventional to put each implementation in a separate file. By default, gcc expects the filename to end in .m (for Objective-C) or .mm or .M (for Objective-C++). Even if a class has no methods, it must have an empty implementation.


If you don't provide a class implementation, the compiler will not emit support code for the class, and the linker will fail.




Here is a simple implementation for the class declared in the previous section:

1 #import "Circle.h "
2
3 static int count ;
4
5 @implementation Circle
6 // No field section.
7 +(void )numCircles { return count ; }
8 -(void )scaleBy :(float )factor { radius *= factor ;}
9 @end
Line 1. Always import the header file that declares your class. If your code uses other classes (e.g., it sends messages to them or their instances) you need to import the headers of those classes too. There is little point to using an @class declaration here—if you use another class in an implementation you will need its interface declaration.

Line 3. This is a pure C declaration, reserving space for a per-class variable. (In this example, it would be used to keep count of the number of objects created. That code is not shown.) It will be visible only in this implementation file.

Line 5. Specify the name of the class you are implementing.

Line 6. You can't add any more fields here, so there is no brace-delimited section corresponding to the one in the interface declaration.

Lines 7, 8. Define methods with the same signature syntax as in the header; follow each method definition with the code, in braces. For more information on writing the code, see Section 1.3.5.

Line 9. No semicolon after the @end keyword.

1.3.3 Inheritance and Subtyping
Inheritance and subtyping are the fundamental object-oriented features: inheritance lets you declare how one type differs from another, and subtyping lets you substitute one kind of object for another when their types are compatible.

A class's interface may declare that it is based on another class:

@interface MyClass : Parent
This is described by saying MyClass is a subclass of Parent, and has the following runtime effects:

· MyClass responds to any class method that Parent responds to.

· Instances of MyClass have all the fields that instances of Parent have.

· Instances of MyClass respond to any instance methods that instances of Parent respond to.

These effects are summarized by saying MyClass inherits Parent's fields and methods. These properties imply that inheritance is transitive: any subclass of MyClass also inherits from Parent.

Declaring a class and specifying a parent also has these effects at compile time:

· You can refer to inherited methods and fields.

· You can assign variables declared as MyClass to variables declared as Parent.

This is described by saying MyClass is a subtype of Parent. Subtyping is also transitive. For example, any subclass of MyClass is a subtype of Parent.

You can't redeclare fields in a subclass, either identically or with a different type. (Unlike C++, this holds even if the inherited field was declared private.)

A subclass can replace, or override , an inherited method with a different version. You do this by providing a new implementation for the method when you write the subclass. At runtime, instances of the subclass will execute the new code in the overriding method instead of the code of the inherited method. By definition, the overriding method has the same name as the inherited one; it must also have the same return and parameter types. (You can't overload methods as in C++.) You don't need to redeclare the overriding method, but it is conventional to do so.

1.3.4 Fields
Fields are data members of objects. Each object gets its own copy of the fields it inherits or declares.

Inside the methods of a class you can refer directly to fields of self, either declared in the class or (if they are not private) inherited:

@interface Circle : Graphic {
float radius ; // Protected field.
// etc.
@end

@implementation Circle
-(float )diameter {
return 2 * radius ; // No need to say self->radius.
}
@end
If an object other than self is statically typed, you can refer to its public fields with the dereference operator:

AClass* obj; // Static typing required.
obj->aField = 7; // Presuming aField is public.
1.3.4.1 Access modifiers
Access to an object's field depends on four things:

· The field's access permission (public, private, or protected)

· The class of the accessing code

· The class of the object

· The nature of the object: whether it is the receiver (self) or another variable (global, local, or method parameter)

There is no notion of read-only members in Objective-C: if you can read a field, you can also write to it.

You declare a field's access permission in its class's interface. Any of three access keywords—@public , @protected, and @private—may appear any number of times in an interface declaration and affects all fields declared after it until the next access keyword. (See the example in Section 1.3.2.) If there is no preceding keyword, a field has protected access.

Following are the keywords and their effects on access to an object's fields:

@public
A public field is visible to all code.

@protected
If the object is self, a protected field is visible.

If the object is not self, access depends on its class:

· If the object's class is the same as that of the receiver, the field is visible.

· If the object inherits from the receiver's class, the field is not visible. (You can get around this by casting the object to the receiver's class.)

· If the object has any other relation to the receiver's class, the field is not visible.

@private
If the object is self, a private field is visible.

If the object is not self:

· If the object's class is the same as that of the receiver, the field is visible.

· In all other cases, the field is not visible.

1.3.5 Methods
Methods are the functions associated with an object, and are used as interfaces for querying or changing the object's state, or for requesting it to perform some action.

Objective-C uses the terms "calling a method" and "sending a message" interchangeably. This is because method dispatch is less like dereferencing a function pointer and more like searching for a recipient and delivering a message. Most of the work of method lookup is done at runtime.

You send messages to objects using Objective-C's bracket syntax. Method names are associated with parameters using an infix syntax borrowed from Smalltalk. Objective-C provides directives for accessing the runtime dispatch mechanism directly.

1.3.5.1 Declaring a method
You declare a method in an interface or protocol by specifying who handles it (either the class or an instance of the class), its return type, its name, and its parameter types (if any). The name is broken up so that part of it precedes each parameter. The form of a declaration depends on the number of parameters, as described in the following sections.

1.3.5.1.1 No parameters
-(id)init;
This declaration can be broken down as follows:

-

Indicates an instance method; use a + for class methods.

(id)

Indicates that the return type is id. Specifying a return type is optional; the default return type is id.

init

The method's name.

1.3.5.1.2 One parameter
+(void )setVersion:(int )v ;
This declaration can be broken down as follows:

+

Indicates a class method.

(void)

Indicates that the return type is void.

setVersion:

The method name. This method name includes a colon, which indicates a parameter to follow.

(int)

Specifies that the parameter is an int. If you omit the parameter type, it defaults to id.

v

The parameter name. You need the name in both declaration and implementation, although it's only used in the implementation.

1.3.5.1.3 More than one parameter
-(id )perform:(SEL )sel with:(id )obj ;
This declaration can be broken down as follows:

-

Indicates an instance method.

(id)

Indicates that the return type is id.

perform:

The first part of the method name. This method name has two parts, one preceding each of the parameters. The full method name is perform:with:. Methods with more parameters follow the same pattern as shown here. The second, third, etc. parts of a method name don't need any textual characters, but the colons are required.

(SEL)

Specifies that the first parameter has the type SEL.

sel

The name of the first parameter.

with:

The second part of the method name.

(id)

Specifies that the second parameter has the type id.

obj

The name of the second parameter.

1.3.5.1.4 A variable number of parameters
-(id )error:(char *)format ,...;
This declaration can be broken down as follows:

-

Indicates an instance method.

(id)

Indicates that the return type is id.

error:

The entire method name. In this case, the second and subsequent parameters are not prefaced by extensions of the method name.

(char*)

Specifies the type of the first parameter.

format

The name of the first parameter.

...

Represents the variable-size parameter list. Ellipses like these can only appear at the end of a method declaration. In the method, access the list using the standard C variable-arguments interface.

1.3.5.2 Implementing a method
The body of a method appears in the implementation section of a class. The method starts with a declaration, identical to that of the interface section, and is followed by code surrounded by braces. For example:

-(void )scaleBy :(float )factor {
radius *= factor ;
}
Inside a method body, refer to fields the class declares or inherits with no qualification. Refer to fields of other objects using the dereference (->) operator.

Objective-C defines three special variables inside each method:

self

The receiver of the method call.

super

A reference to the inherited version of the method, if there is one.

_cmd

The selector—an integer that uniquely specifies the method.

Section 1.3.9 describes these special variables in more detail.

1.3.5.3 Calling a method
Every method call has a receiver—the object whose method you are calling—and a method name. You enclose a method call in brackets [ ] with the receiver first and the method name following. If the method takes parameters, they follow the corresponding colons in the components of the method name. Separate receiver and name components by spaces. For example:

[aCircle initWithCenter:aPoint andRadius:42];
If a method takes a variable number of parameters, separate them with commas:

[self error:"Expected %d but got %d ", i , j ];
A method call is an expression, so if the method returns a value you can assign it to a variable:

int theArea = [aCircle area ];
Method calls can be nested:

Circle* c1 = ... // whatever
Circle* c2 =
[[Circle alloc] initWithCenter:[c1 center]
andRadius:[c1 radius]];
1.3.5.4 Naming collisions
When the compiler encodes a method call, it needs to set up, then and there, room for the parameters and return value (if any). This is a nondynamic aspect of method calls. To encode the call properly, the compiler must know the parameter and return types.

If you leave the type of a receiver unknown (that is, declared as id) until runtime, the name of a method may be all the information the compiler has when it compiles the method call. The compiler will encode the method call based on previous uses of the same method:

· If the compiler has not yet seen any methods with the name used, it will assume the return type and parameters are all id (a pointer whose size is platform-dependent) and will issue a warning message. If you use variables of type other than id, the compiler will convert them according to standard C rules and they may not survive intact.

· If the compiler has seen exactly one method with the same name, it will emit code assuming the return and parameter types match those it saw.

· If the compiler has seen more than one method with the same name, and differing return or parameter types, it will not know how to encode the method call. It will choose one option and issue a warning message. As in the first case, type conversions may play havoc with your data values.

The compiler will not let you declare, in related classes, methods with the same name but different parameter types (no C++-style overloading), but you can do this in unrelated classes. To avoid forcing the compiler to guess your intentions, methods with the same name, even in different classes, should usually have the same signature.

You can relax this restriction if you know the receiver of the call will always be statically typed. But you may not have control over all future use of your method.

1.3.5.5 Private methods
Because the compiler needs to know parameter types to generate method calls, you should also not omit method declarations in an attempt to make them private. A better way to make a method private is to move the method declaration to its class's implementation file, where it will be visible to the code that uses it but not to any other part of your program.

The following example shows how to use a category (described at greater length in Section 1.3.6) to declare a method in an implementation file:

1 @interface Circle (PrivateMethods )
2 -(float )top ;
3 @end
4
5 @implementation Circle
6 // Public definitions as before.
7 ...
8 // Now implement the private methods.
9 -(float )top { return [center y ] - radius ; }
8 @end
Line 1. At the beginning of your class's implementation file, declare a category that extends the class.

Line 2. Methods declared here are just as much part of the class as the ones declared in the regular interface, but will be visible only in this file.

Line 5. Your class's implementation, in the usual fashion.

Line 6. Implement the methods declared in the header file. They can call the private methods (as well as other public methods, of course).

Line 8. Implement the private methods. They can call public and private methods.

1.3.5.6 Accessors
Accessors are methods for setting and returning an object's fields. Objective-C has several conventions for writing accessors:

· To return a variable, provide a method with the same name as the variable. You can do this because methods and fields have separate namespaces.

· To set a variable, provide a method with the same name as the variable that takes the new value as a parameter. For example, given a variable named radius, use radius:(float)r as the signature for your setter method. You can do this because the colon preceding the parameter is part of the methods' name, so radius: the setter will be differently named from the radius the getter.

Here is an example of how to write accessors for a simple field:

@implementation Circle
-(float )radius { return radius ; }
-(void )radius :(float )r { radius = r ; }
@end

Don't use "get" in the name of your accessors. By convention, methods whose names start with "get" take an address into which data will be copied.




If you are using reference counting, there are more design patterns you should follow when writing accessors. These are discussed in Section 1.12.2.

1.3.5.7 Message search paths
When you send an object a message (call one of its methods), the code that actually runs is determined by a search performed at runtime.

The dispatch of the method call proceeds as follows:

1. The runtime system examines the object at the actual time the message is sent and determines the object's class.

2. If that class has an instance method with the same name, the method executes.

3. If the class does not have such a method, the same search takes place in the parent class.

4. The search proceeds up the inheritance tree to the root class. If a method with a matching name is found, that method executes.

5. If there is no matching method but the receiver has a forwarding method, the runtime system calls the forwarding method. (See Section 1.11.) Default forwarding behavior is to exit the program.

6. If there are no forwarding methods, the program normally exits with an error. Section 1.9 describes how to change this.

Section 1.9 provides more details about method dispatch.

1.3.5.8 Special receivers
The receiver is the object to which you are sending a message. Its instance methods will be given the first chance to handle the call, followed by the instance methods of its ancestor classes.

Besides the typical case of sending a message to a named receiver, there are several special targets:

self

Refers to the object that is executing the current method. At runtime, the class of self may be the class in which the call to self appears, or it may be a subclass.

super

Refers to the inherited version of the method.

When you use the predefined variable super as the receiver, you are sending a message to self but instructing the runtime to start method lookup in the parent class of the class in which the send occurs.

This is not the same as starting in the parent class of the receiver—the class of super is determined at compile time. If this were done dynamically, the following code would cause an infinite loop:

1 @implementation C
2 -(void ) f { [super f ]; }
3 @end
4
5 // And elsewhere:
6 D * d = [D new];
7 // D inherits from C, does not override f.
8 [d f ]; // Executes in C's version.
Here, D is a subclass of C that does not override f. The call at line 8 would dispatch to line 2, but the call to super would be redirected to the parent class (C) of the receiver (D)—i.e., back to line 2.

Any class name

Refers to the class object that represents the named class. When you call a class method you are actually sending a message to a class object. (See Section 1.9.) If you don't have the class object on hand, this syntax lets you use the class's name as the receiver.

nil
It is not an error to send a message to nil (an uninitialized or cleared object). If the message has no return value (void), nothing will happen. If the message returns an object pointer, it will return nil. If the message returns a scalar value such as an int or float, it will return zero. If the message returns a struct, union, or other compound value, its return value is not specified and you should not depend on it. This behavior makes it easier to chain together method calls. For example:

id widget = [[[window child ] toolbar ] widget ];
If sending a message to nil caused a runtime error, you would have to check the result of each message. This property of nil should not tempt you to be lax with your runtime checking, but it may suffice to test only the end result of a chain of method calls.

1.3.5.9 Selectors
Objective-C methods are distinguished by their names, which are the concatenation of the component parts of the method name, including the colon characters. At compile time, each name is matched to a unique integer called the selector. The Objective-C type SEL represents a selector's type.

When a method call is compiled, it is distilled to its receiver, selector, and parameters. At runtime, the message is dispatched by matching the selector with a list maintained by the receiver's class object.

You can use selectors to make a runtime decision about what method to call—the Objective-C version of function or method pointers.

1 SEL mySel = @selector (center );
2 Point * p = [aCircle perform:mySel ];
Line 1. The compiler knows the mapping from selector names to SELs and will emit code assigning to mySel the value corresponding to the method name center.

Line 2. Using the selector, you can instruct the receiver to respond to the message as if it had been sent in the usual way. The effect is the same as executing the direct method call:

Point* p = [aCircle center];
Section 1.10 gives more information about the -perform: methods.

1.3.6 Categories
Objective-C provides the category construct for modifying an existing class "in place." This differs from writing a new subclass: with inheritance you can only create a new leaf in the inheritance tree; categories let you modify interior nodes in the tree.

With a category, the full declaration of a class can be spread out over multiple files and compiled at different times. This has several advantages:

· You can partition a class into groups of related methods and keep the groups separate.

· Different programmers can more easily work on different parts of the class.

· For diverse applications, you can provide only those parts of the class that are needed. This gives you finer-grained control over expressing dependencies without having to provide different versions of the class.

· You can add methods to classes from the operating system's library or from third-party sources without having to subclass them.

1.3.6.1 Declaring a category
Here is an example of declaring a category to add methods to the Circle class:

1 #import "Circle.h "
2
3 @interface Circle (Motion )
4 // No field section.
5 -(void )moveRight :(float )dx ;
6 -(void )moveUp :(float )dy ;
7 @end
Line 1. The declaration can be in the same header file as the declaration of the class it modifies, or in a separate file. If it is in a separate header file, you may need to include the header file of the modified class.

Line 3. Declare the name of the class you are modifying and the name of your category. In this example, Circle is the class name, and Motion is the category name. Category names have their own namespace, so a category can have the same name as a class or a protocol.

Line 4. There is no fields section in the category declaration, so you can't use a category to add fields to a class.

Lines 5, 6. Declare methods here as in a class interface.

Line 7. No semicolon after the @end keyword.

You can declare a category in a header or an implementation file. If the declaration is in a header file, its methods are full members of the modified class. Any code can use the new methods with the modified class (and its subclasses). If the declaration is in an implementation file, only code in that file can use the new methods, and their implementation must appear in that file. This is a way of making methods private.

If you declare in your category a method with the same name as one in the modified class, the new method overrides the old one. When such an overriding method sends messages to super, they go to the same method in the parent class (just as they would in the overridden version) and not to the overridden method itself. You can't send messages to the overridden version. You should simply avoid using categories to override methods.

If several categories that modify the same class all declare a method with the same name, the results are implementation dependent. In other words, don't do this. The gcc compiler does not warn you about this.

You don't have to implement all or even any of the methods you declare in a category. The compiler will warn you if you have an implementation section for your category and omit any methods. If you have no implementation at all for a category, this is called declaring an informal protocol. Section 1.3.7 discusses these further.

1.3.6.2 Implementing a category
You implement the methods of the category in an implementation file, like this:

1 #import "Motion.h "
2
3 @implementation Circle (Motion )
4 -(void )moveRight :(float )dx { ... }
5 -(void )moveUp :(float )dy { ... }
5 @end
Line 1. You need to include the declaration of the category you are implementing. If the declaration is in the same file as the implementation, you don't need this line.

Line 3. Specify the name of the modified class and the name of your category.

Line 4. Methods take the same form and have the same access to fields as in a regular class implementation.

Line 5. No semicolon after the @end keyword.

1.3.7 Protocols
Protocols are lists of method declarations that are not associated with a specific class declaration. Protocols let you express that unrelated classes share a common set of method declarations. (This facility inspired Java's interface construct.) Protocols let you do the following:

· Use static type checking where you want it

· Specify interfaces to other code

· Factor common features of your class hierarchy

Objective-C declarations can specify that an instance must support a protocol, instead of (or in addition to) conforming to a class. (See Section 1.3.8.)

1.3.7.1 Declaring a protocol
You declare a protocol in a header file like this:

1 @protocol AnotherProtocol ;
2
3 @protocol Printable
4 -(void )print ;
5 @end
Line 1. You need the forward protocol declaration if return or parameter types of methods in your protocol use the other protocol.

Protocol names have their own namespace, so a protocol can have the same name as a class or a category.

Line 3. If your protocol extends other protocols, name those in the protocol list. The list is a sequence of protocol names, separated by commas. If the list is empty, you can omit the angle brackets. You don't need to redeclare the methods of the listed protocols. When a class adopts the protocol you are declaring, it must implement all the methods declared in your protocol and all the other protocols in the list. (You can't write partially abstract classes as in C++, with some methods declared but not implemented.)

Line 4. You declare your methods here in the same form as in a class interface.

Line 5. No semicolon after the @end keyword.

1.3.7.2 Adopting a protocol
When you want your class to adopt (implement) one or more protocols, you declare it like this:

#import "Printable.h "
@interface Circle : Graphic
When you want your category to adopt a protocol you declare it like this:

#import "Printable.h "
@interface Circle (Motion )
The list of protocols, inside the angle brackets, consists of names separated by commas. You have to import the header files where the protocols are declared. Don't redeclare the protocol's methods in your interface; just define them in your implementation. You have to define all the methods of the protocol.

When you declare a field or variable, you can specify that it represents an instance whose class conforms to a specific protocol like this:

id obj ;
ClassName * obj ;
For more about this, see Section 1.3.8.

1.3.7.3 Checking for conformity to a protocol
At runtime, you can check if an object's class conforms to a protocol by using the -conformsTo: (from the root class Object) or +conformsToProtocol: (from NSObject) methods:

[obj conformsTo:@protocol (Printable )];
Like classes, protocols have special runtime structures associated with them called protocol objects. Section 1.9 describes these.

1.3.7.4 Informal protocols
You can get some of the functionality of a protocol by declaring but not implementing a category. Such a category is called an informal protocol . You can't declare that a class does or does not implement an informal protocol, so you can't use it for static type checking. You can use an informal protocol to specify a group of methods that all subclasses of the modified class may implement, but are not obliged to implement. This serves as something less than a full protocol but more than just textual documentation. If you need a protocol, you're better off using a formal protocol.

When a subclass implements an informal protocol, it doesn't refer to the original declaration, but declares in its interface which of the methods it will implement and defines the methods in its implementation in the usual way.

1.3.8 Declarations
You can declare Objective-C objects in many different ways. However, the way in which you declare an object has no effect on that object's runtime behavior. Rather, the way that you declare an object controls how the compiler checks your program for type safety.

1.3.8.1 Dynamic typing
Use the id type to declare a pointer to an unspecified kind of object. This is called dynamic typing. For example:

id obj ;
With this declaration, obj can be a pointer to an object of any type. An id has the following compile-time properties:

· You can send any kind of message to an id. (The compiler will warn you if the method name is unknown or ambiguous; see Section 1.3.5.4.) If at runtime the object does not have an appropriate method or delegate (see Section 1.11), a runtime error will occur (see Section 1.8).

· You can assign any other object to an id.

· You can assign an id to any object. The compiler will not remind you that this can be dangerous. Using an id in this way means you assume the risk of assigning an object to an incompatible variable.

1.3.8.2 Static typing
In Objective-C, any deviation from fully dynamic typing is called static typing. With static typing you instruct the compiler about the types of values you intend variables to have. All static typing is done within the inheritance relation: where a variable's class or protocol is declared, a value from a descendant class or protocol is always acceptable.

You can use static typing in three ways, shown in the following examples:

MyClass* obj

Declares obj to be an instance of MyClass or one of its descendants. This is called static typing. Declaring obj this way has the following compile-time effects:

· You can assign obj to any variable of type id.

· You can assign any variable of type id to obj.

· You can assign obj to any variable whose declared type is MyClass or one of its ancestors.

· You can assign to obj any variable whose declared type is MyClass or one of its descendants.

· The compiler will warn you if you assign obj or assign to it in a way not covered in the previous cases. A cast will quiet the compiler but will not prevent an incompatible assignment at runtime.

· You can send to obj any message that MyClass or one of its parent classes declares.

id < ProtocolList> obj

Does not constrain the class of obj, but declares that it conforms to the specified protocols. The protocol list consists of protocol names separated by commas. This declaration has the following compile-time effects:

· You can assign obj to an object that does not conform to the protocol.

· Assigning obj an object that is not declared to conform will trigger a compiler warning.

· Sending to obj a message not included in the protocol will trigger a compiler warning.

MyClass < ProtocolList>* obj

Declares that obj is an instance of MyClass or one of its descendants, and that it conforms to the listed protocols. The compile-time effects of this declaration are the combination of the effects of the preceding two styles of declaration.


Due to a compiler bug, gcc does not always correctly use the declared protocol for type checking.




1.3.8.3 Type qualifiers
Type qualifiers go before a C or Objective-C type in a method declaration, and modify that type. Supported qualifiers are:

in oneway
out bycopy
inout byref
These qualifiers can only be used in formal protocols and implementations, not in class or category declarations. They specify how parameters are to be passed when you are using remote messaging. Type qualifiers can be combined, although not all combinations make sense. They are discussed at greater length in Section 1.6 .

1.3.9 Predefined Types, Constants, and Variables
Objective-C adds the special type id, which is generic like a void* in C++, but which does not preclude you from sending messages. In addition, the Objective-C environment provides some C types, constants, and variables to support object-oriented programming.

1.3.9.1 Types
Along with class types that you define, Objective-C introduces these built-in types you can use when declaring variables:

id

A generic Objective-C object pointer type. You can send any message to the variables of this type without compiler warnings. (See Section 1.3.8.) At runtime the receiver may handle the message, delegate it, or explicitly ignore it. If it does none of these, a runtime exception occurs. (See Section 1.8.) Unspecified method return or parameter types default to id.

The name id is a C typedef for a pointer to a structure with one member: a field that points to a class object. Section 1.9 discusses this at greater length.

Class

A pure C type: a pointer to an Objective-C class structure. The runtime system contains a structure for each Objective-C class in your program's code. Calling the -class method of any object returns a value of this type.

MetaClass

Provided in the GNU runtime but not in Darwin, this is identical to Class. It's used for clarity when operating with metaclass objects.

Protocol

An Objective-C class. The runtime system contains an instance for each Objective-C protocol that is either adopted by a class in your program's code or referred to in an @protocol declaration directive. You can construct a Protocol instance from its name using the @protocol directive with a parameter.

BOOL

A logical type whose variables have two possible values: YES and NO. The name BOOL is a typedef for the C type char.

SEL

A unique specifier for a method selector. Often implemented as a pointer to the method's name, but you should treat it as an opaque handle. You can construct a selector from a method name using the @selector directive.

IMP

A pointer to the implementation of a method that returns an id. More precisely, an IMP is defined this way:

typedef id (*IMP)(id, SEL, ...)
The first two parameters are the receiver and selector values that are passed to any method; the remaining variable-length argument list holds the method's visible parameters.

You can construct an IMP from a message selector using methods of the root classes Object or NSObject. Calling a method through its IMP is considerably faster than using regular dispatch, but may not work correctly if the method does not return an id. Section 1.15 gives an example.

1.3.9.2 Constants
The following constants are all defined as preprocessor symbols:

nil

A value describing an uninitialized or invalid id. Defined to be zero.

Nil

A value describing an uninitialized or invalid Class variable. Defined to be zero.

YES

A value of BOOL type, describing a true state. Defined to be one.

NO

A value of BOOL type, describing a false state. Defined to be zero.

1.3.9.3 Variables
These are special variables, set up for you by the Objective-C runtime:

self

Inside an instance method, this variable refers to the receiver of the message that invoked the method.

super

Not really a variable, but it looks enough like one to be included in this list. Inside a method, if you send a message to super, method dispatch will start looking in the parent class of the method's class. That is, super represents the static parent, not the parent at runtime.

_cmd

A variable of type SEL, available inside any Objective-C method, and describing the selector of the method.

isa

This is a protected field of all Objective-C objects. You do have access to it, although it's better to get it from the class method:

Class C = obj->isa; // Discouraged.
Class C = [obj class]; // Better.
isa points to the class object representing the object's class.

Compiler and Preprocessor Directives
Compiler and preprocessor directives are special terms in your program that tell the compiler to perform some Objective-C-specific action. All compiler directives start with the character @, and preprocessor directives start with #.

1.4.1 Class Declarations and Definitions
The following compiler directives are used to begin or conclude the declaration and definition of Objective-C classes, categories, and protocols:

@interface

Begins the declaration of a class's or category's fields and methods.

@protocol

Begins the declaration of a protocol's methods.

@implementation

Begins the definition of a class's methods.

@end

Ends the declaration or definition of a class's, category's, or protocol's methods.

The use of these compiler directives is described in detail under Section 1.3, and especially in the subsections Section 1.3.2, Section 1.3.6, and Section 1.3.7.

1.4.2 Forward Declarations
The following compiler directives generate forward declarations, informing the compiler that a type exists:

@class ClassName

Forward declaration of a class.

@protocol ProtocolName

Forward declaration of a protocol.

Use forward declarations when an interface uses variables (fields or method parameters or return types) of a given type. Rather than import the header file for that type, you can simply forward reference it. For example:

@class Point ;
@interface Circle : Graphic {
Point * center ;
// etc.
}
@end
This is sufficient because the declaration of Circle does not use any details of Point. You could import the header for Point, but this makes any other class that imports Circle.h appear dependent also on Point.h, and can cause unnecessary (and slow) recompiling in large projects.

1.4.3 Expanding Directives
Expanding complier directives look like functions, but they are really instructions to the compiler, which expands them as described in the following list:

@encode ( typeName)

Takes a type specification and evaluates to the C string used by the runtime to succinctly describe that type.

@defs ( className)

Takes the name of an Objective-C class and evaluates to a sequence of type declarations that duplicate the field declarations of the class. This directive can appear only in a C structure declaration.

@protocol ( ProtocolName)

Evaluates to a pointer to an instance of the Protocol class. You need this because you can't get a protocol class instance by using the protocol name directly, as you can with a class object.

@selector ( MethodName)

Evaluates to a SEL representing the specified method.

@ "string"

A shorthand for creating a string literal that's an instance of a user-defined string class. Use this when you need a string object constant.

The directives @encode, @defs, and @"string" deserve some additional explanation.

1.4.3.1 Using @encode
The following example shows how @encode can be used to get the string that the Objective-C runtime uses to describe a type:

char * itype = @encode (int );
The result of this statement will be to define itype as the one-character string "i", which is the runtime representation of an int type.

The @encode directive can take any C or Objective-C type. The runtime uses the mapping between types and strings to encode the signatures of methods and associate them with selectors. You can use @encode to implement your own object storage and retrieval, or other tasks that need to describe the types of values.

Table 1-1 shows the results of applying @encode to C and Objective-C types.

Table 1-1. Types and their encodings
Type
@encode(type)

char
c

int
i

short
s

long
l

long long
q

unsigned char
C

unsigned int
I

unsigned short
S

unsigned long
L

unsigned long long
Q

float
f

double
d

void
v

char*
*

An object pointer
@

Class
#

SEL
:

An array of N elements of type
[Ntype]

A structure called name with elements t1, t2, etc.
{name=t1t2...}

A union
(type,...)

A bit field of size N
bN

A pointer to type
^type

Unknown type
?


The runtime system also uses encodings for type qualifiers, shown in Table 1-2, and you may encounter them in its representation of method signatures. However, you can't get those encodings with the @encode directive.

Table 1-2. Type qualifiers and their encodings
Qualifier
@encode(qualifier)

const
r

in
n

inout
N

out
o

bycopy
O

byref
R

oneway
V


1.4.3.2 Using @defs
The following example shows how @defs can be used to create a C structure with fields that match the fields in a class. In this example, both the order and type of the fields of MyStruct will match those in MyClass:

@interface MyClass : Object {
int i ;
}
@end

typedef struct {
@defs (MyClass )
} MyStruct ;
The typedef in this example is seen by the compiler as:

typedef struct {
id isa;
int i ;
} MyStruct ;
Having a structure that corresponds to a class lets you bypass the normal access restrictions on an Objective-C instance. In the following example, an instance of MyClass is cast to an instance of MyStruct. Once that's done, the protected field i can be accessed with impunity:

MyClass* c = [MyClass new];
MyStruct* s = (MyStruct*)c;
s->i = 42;
Obviously this is a facility you should use with restraint.

1.4.3.3 Using @"string"
The @"string" directive creates the Objective-C version of a string literal: one that you can pass to a method expecting a string object, or use to initialize or compare with another string object.

When you create a string with @"string", you get an instance of a class defined by the compiler option -fconstant-string-class. The instance is static: its contents are stored in your program's file, and the instance is created at runtime and kept around for the duration of program execution. You can't change its value, because it appears as an expression in your program, not as a variable

In the GNU runtime, the default string class is NXConstantString; for Darwin it is the Cocoa class NSConstantString.

1.4.4 Preprocessor Symbols
Objective-C adds one preprocessor directive and defines one symbol to the preprocessor before compiling:

#import fileName

Using #import has the same effect as the C directive #include, but will only include the file once.

_ _OBJC_ _

When gcc is compiling an Objective-C file, it defines this symbol for the preprocessor. If your code must compile as plain C as well as Objective-C, you can test to see if this symbol is defined:

#ifdef _ _OBJC_ _
// Objective-C code here
#endif

speed up mozila fire fox

Posted by virtualinfocom On 4:10 AM 0 comments

Mozilla Firefox, Speed it up!

Speed up Mozilla FireFox

--------------------------------------------------------------------------------

1. Type "about :config" in the adress field.
2. Set the value of network.http.pipelining to "true".
3. Set the value of network.http.pipelining.maxrequests to "100".
4. Set the value of network.http.proxy.pipelining to "true"
5. Set the value of nglayout.initialpaint.delay to "0" (not availible in newer versions)

Tip for shut down windows

Posted by virtualinfocom On 4:09 AM 0 comments

Try to open:

Run -> cmb -> shutdown -a

This prevent the shutdown.

create a new shortcut.. then write;
shutdown -s -t 0 = this is for shut down in 0 seconds (t = time s=shutdown)
shutdown -r -t 0 = same but this is for restart comp. in 0 seconds..
(only for windows xp)

tips and tricks - windows XP

Posted by virtualinfocom On 4:08 AM 0 comments

STOP NOISE IN COPYING AUDIO CD
When using 3rd party burning software (eg, Nero Burning Rom) to copy audio CD,some noise may be heard at the end of each track. To prevent this,try the following method:
1. Enter System Properties\device manager
2. Select IDE ATA/ATAPI controllers
3. Double click on thee CD writer IDE channel
4. Select advance setting
5. Change the transfer mode to 'PIO Only'
6. Restart Computer

DISABLING THE 'UNSIGNED DRIVER' DIALOGS
This option wll disable the screen wich keeps popping up when you try to install 'digitally unsigned drivers'. Normally you can choose to continue the install anyways, but I have had situations where you cannot continue the install.. very annoying.. This is how to fix it:
Click Start - Run
then type: gpedit.msc
then hit enter.
Browse the folder tree to the following location:
User Configuration - Administrative Templates - System
now right-click Code signing for Device drivers and select Properties.
On the Settings tab, either select
- enable, and then select ignore from the appearing listbox..
- or click the disable option. Click apply and Ok and your set!
Alternatively especially for XP Home users:
Open "System" properties (Windows key + pause or Right click 'My Computer' - properties or Control Panel - System).On the Hardware tab click the "Driver Signing" button. In the dialogue that comes up choose "Ignore" to install the new driver anyway.

DMA MODE ON IDE DEVICES VIEWS
Just like Windows 2000, Windows XP still fails to set the DMA mode correctly for the IDE device designated as the slaves on the primary IDE and secondary IDE channels. Most CD-ROMS are capable of supporting DMA mode, but the default in XP is still PIO. Setting it to DMA won't make your CD-ROM faster, but it will consume less CPU cycles. Here's how:
1. Open the Device Manager. One way to do that is to right click on "My Computer", select the Hardware tab, and Select Device Manager.
2. Expand "IDE ATA/ATAPI Controllers" and double-click on "Primary IDE Channel"
3. Under the "Advanced Settings" tab, check the "Device 1" setting. More than likely, your current transfer mode is set to PIO.
4. Set it to "DMA if available".
Repeat the step for the "Secondary IDE Channel" if you have devices attached to it. Reboot.

RESTORING MEDIA PLAYER
To restore Windows Media Player insert the the XP CD into the CD drive (if it autostarts click exit). Open a command window and type the following :
rundll32.exe setupapi,InstallHinfSection InstallWMP7 132 c:\windows\inf\wmp.inf

RESTORING ACCESS TO CD ROM'S
If you removed CD Burning software, or for some other mystical reason, can not longer access your CD ROM's, in most cases following registry keys needs to be deleted: Locate and delete the UpperFilters and LowerFilters values under the following key in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}

DELETING THE INDEX.DAT
Del "C:\Documents and Settings\aeon\Local Settings\Temporary Internet Files\Content.IE5\index.dat"

CONTROL PANEL ON THE DESKTOP.
On The Desktop, Right Click Your Mouse Then Choose "New | Folder". Name The Folder As "ControlPanel. {21EC2020-3AEA-1069-A2DD-08002B30309D}" Without The "Quote Things. And Now You Can Access The Control Panel More Faster Then Before.

CHANGING INTERNET EXPLORER ICON NAME.
Open Registry Editor Then Go To : "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID". You Can See A Few Key Below It.

Now Go To This Key {871C5380-42A0-1069-A2EA-08002B30309D}, Double Click At The Default Value On The Right, Enter Whatever Name You Like.

REMOVING USERNAME IN THE STARTMENU
Open Registry Editor Then Go To : "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer".
On The Right, Make A New Entry With Right Click On Your Mouse Then Choose "New | DWORD Value" Change The Entry's Name Into "NoUserNameInStartMenu", Double Click In The New Entry And Fill The "Value Data" With "1". Press OK, Exit From The Registry Editor. Restart Your Computer.

INTERNET EXPLORER LIGHTING-FAST STARTUP.
Isn't it annoying when you want to go to a new website, or any other site but your homepage, and you have to wait for your 'home' to load? This tweak tells Internet Explorer to simply 'run', without loading any webpages. (If you use a 'blank' page, that is still a page, and slows access. Notice the 'about:blank' in the address bar. The blank html page must still be loaded..). To load IE with 'nothing' [nothing is different than blank]:
1. Right-click on any shortcut you have to IE
[You should create a shortcut out of your desktop IE icon, and delete the original icon]
2. Click Properties
3. Add ' -nohome' [with a space before the dash] after the endquotes in the Target field.
4. Click OK
Fire up IE from your modified shortcut, and be amazed by how fast you are able to use IE!

INTERNET EXPLORER SPEED UP.
Edit your link to start Internet Explorer to have -nohome after it. For Example: "C:\Program Files\Internet Explorer\IEXPLORE.EXE" -nohome
This will load internet explorer very fast because it does not load a webpage while it is loading. If you want to go to your homepage after it is loaded, just click on the home button.

SPEED UP BROWSING WITH DNS CATCH.
when you connect to a web site your computer sends information back and forth, this is obvious. Some of this information deals with resolving the site name to an IP address, the stuff that tcp/ip really deals with, not words. This is DNS information and is used so that you will not need to ask for the site location each and every time you visit the site. Although WinXP and win2000 has a pretty efficient DNS cache, you can increase its overall performance by increasing its size. You can do this with the registry entries below:
************begin copy and paste***********
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters]
"CacheHashTableBucketSize"=dword:00000001
"CacheHashTableSize"=dword:00000180
"MaxCacheEntryTtlLimit"=dword:0000fa00
"MaxSOACacheEntryTtlLimit"=dword:0000012d
************end copy and paste***********
make a new text file and rename it to dnscache.reg. Then copy and paste the above into it and save it. Then merge it into the registry.

START IEXPLORER WITH EMPTY BLUE SCREEN.
Set your default page to about:mozilla and IE will show a nice blue screen upon startup.

SPEED UP DETAILED VIEW IN WINDOWS EXPLORER.
If you like to view your files in Windows Explorer using the "Details" view here is a tweak to speed up the listing of file attributes: Viewing files in Windows Explorer using the "Details" mode shows various attributes associated with each file shown. Some of these must be retrieved from the individual files when you click on the directory for viewing. For a directory with numerous and relatively large files (such as a folder in which one stores media, eg: *.mp3's, *.avi's etc.)

Windows Explorer lags as it reads through each one. Here's how to disable viewing of unwanted attributes and speed up file browsing:
1. Open Windows Explorer
2. Navigate to the folder which you wish to optimize.
3. In "Details" mode right click the bar at the top which displays the names of the attribute columns.
4. Uncheck any that are unwanted/unneeded.
Explorer will apply your preferences immediately, and longs lists of unnecessary attributes will not be displayed. Likewise, one may choose to display any information which is regarded as needed, getting more out of Explorer.

WEB PAGES SLOWS DOWN, FIX.
The tweak is simple. Beside the QoS and others around the Internet for the new XP OS, I found out that native drivers sometimes slow you down (cable and xDSL users). So if you have applied all tweaks and you are still having slow downs try reinstalling your NICs drivers. The difference is noticeable. My web pages now load almost instantly where they used to take even a minute!

FIX IE 6 SLOWDOWNS AND HANGS.
1. Open a command prompt window on the desktop (Start/Run/command).
2. Exit IE and Windows Explorer (iexplore.exe and explorer.exe, respectively, in Task Manager, i.e - Ctrl-Alt-Del/Task Manager/Processes/End Process for each).
3. Use the following command exactly from your command prompt window to delete the corrupt file:
C:\>del "%systemdrive%\Documents and Settings\%username%\Local
Settings\Temporary Internet Files\Content.IE5\index.dat"
4. Restart Windows Explorer with Task Manager (Ctrl-Alt-Del/Task Manager/Applications/New Task/Browse/C:\Windows\explorer.exe[or your path]) or Shutdown/Restart the computer from Task Manager.

SPEED UP WEB BROWSING.
Iv'e personally found a dramatic increase in web browsing after clearing the Windows XP DNS cache. To clear it type the following in a command prompt: ipconfig /flushdns.

ALLOW MORE THAN 2 SIMULTANEOUS DOWNLOADS ON IEXPLORER 6.
This is to increase the the number of max downloads to 10.
1. Start Registry Editor (Regedt32.exe).
2. Locate the following key in the registry:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
3. On the Edit menu, click Add Value , and then add the following registry values:
"MaxConnectionsPer1_0Server"=Dword:0000000a
"MaxConnectionsPerServer"=Dword:0000000a
4. Quit Registry Editor.

IPV6 INSTALLATION FOR WINDOWS XP.
This protocol is distined to replace the Internet Protocal Version 4 used by Internet Explorer it uses hexadecimal ip addresses instead of decimal example (decimal ip 62.98.231.67) (hexadecimal IP 2001:6b8:0:400::70c)
To install To install the IPv6 Protocol for Windows XP:
Log on to the computer running Windows XP with a user account that has local administrator privileges. Open a command prompt. From the Windows XP desktop, click Start, point to Programs, point to Accessories, and then click Command Prompt. At the command prompt, type: ipv6 install
For more information on IPv6, visit the site below:
CODE
http://www.microsoft.com/windowsxp/pro/techinfo/administration/ipv6/default.asp


ANOTHER WAY TO FIX IEXPLORER 6 SLOW PAGES LOADED.
Here's an easier way to get to index.dat file as addresse in another tweak submitted here.
1. click on Internet Explorer
2. go to to your root dir (usually C:)
3. open Documents and Settings folder
4. open "your username folder"
5. open UserData
6. **close IE if you have it open**
rename index.dat to index.old
logoff and log back on (don't need to restart) open up IE and go to a web page or site that always seemed to load slowly. It should load a lot more quickly now. NOTE. Always rename or backup .dat or other system files before deleting.

EASY WAY TO ADD THE ADMINISTRATOR USER TO THE WELCOME SCREEN.
Start the Registry Editor Go to:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ SpecialAccounts \ UserList \
Right-click an empty space in the right pane and select New > DWORD Value Name the new value Administrator. Double-click this new value, and enter 1 as it's Value data. Close the registry editor and restart.

DRIVE ICONS.
To set the icon of any drive (hard disk, cd rom or anything else) with a letter (C:\ etc.), run REGEDIT (Start -> Run -> regedit)
Navigate to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
If one doesn't already exist, create a new KEY called "DriveIcons". Under this key, create a new key with the letter of your drive. I.e. C for your C:\ drive.
To change the icon for that drive, create a key inside that one called DefaultIcon and set the path of (Default) to the location of your icon
eg C\DefaultIcon\ then (Default) = D:\Documents\C Drive Icon.ico
To change the name of that drive, create a key in the drive letter one (eg C\) called DefaultLabel and set the (Default) to what you want the drive to be called. This is useful if you want to assign a long name to the floppy drive.

CHANGING OEM REGISTRATIONS.
Have you used someone's new Hewlet Packard with their OEM version of Windows XP? You've seen that HP has their own icon in the Start Menu, underneath Run, that goes to their Help Site. Now, you can have your icon that does anything you want (website, program, etc) and says anything you want. Basically, you are "branding" Windows XP (Home or Pro), great for if you are a computer builder and sell them, or you just want to make Windows XP your own. It involves Regedit.
1. Start up Notepad and creat a new registry file (*.reg) and copy and paste the following into it:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}]
@="YOUR COMPANY NAME"
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@="YOUR ICON HERE"
00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,68,00,70,00,6c,00,69,00,\
6e,00,6b,00,2e,00,69,00,63,00,6f,00,00,00
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\InProcServer32]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,\
64,00,6f,00,63,00,76,00,77,00,2e,00,64,00,6c,00,6c,00,00,00
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\Instance]
"CLSID"="{3f454f0e-42ae-4d7c-8ea3-328250d6e272}"
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\Instance\InitPropertyBag]
"CLSID"="{13709620-C279-11CE-A49E-444553540000}"
"method"="ShellExecute"
"Command"="YOUR TITLE HERE"
"Param1"="YOUR FUNCTION HERE"
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\shellex]
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\shellex\ContextMenuHandlers]
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\shellex\ContextMenuHandlers\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}]
@=""
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\shellex\MayChangeDefaultMenu]
@=""
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}\ShellFolder]
"Attributes"=dword:00000000
2. Edit where it says YOUR ICON HERE to a path to an icon (ex. c:\\icon.ico), it must be 24x24 pixels and in *.ico format. Use double back slash for path names.
3. Edit both places where it says YOUR TITLE HERE to what you want it to say in the Start Menu (ex. Elranzer Homepage).
4. Edit where it says YOUR FUNCTION here to what you want it to do when you click it, it can be anything... your website, a local HTML document, a program, a Windows funtion, whatever your imagination can provide (ex. http://www.shareordie.com).
5. Save this file as brand.reg, double-click it to enterin your information, and refresh Explorer (log off/on) to see it in the Start Menu!! This works in both Home and Professional (and probably 64-Bit Professional) Editions!

ORIGINAL WALLPAPERS.
This is more of a fun tweak than it is useful. Go to run, type regedit press ok. when that comes up go to HKEY_CURRENT_USER>Control Panel>Desktop
Now find the orginalwallpaper, right click and select modify.In the text box type the path to the file you want to be your orginal desktop wallpaper.

DELETING My eBooks AND SPECIALS FOLDER IN MY DOCUMENTS.
Click Start, then Run and type: regsvr32 /u mydocs.dll
then delete them.

DISABLE WINDOWS PICTURE AND FAX VIEWER.
By default, Windows XP opens all picture files (gif,jpg,...) with the included Windows Picture and Fax Viewer no matter what other picture viewers you have installed. To disable the Windows Picture and Fax Viewer, unregister shimgvw.dll. This can be done from command prompt: regsvr32 /u shimgvw.dll

REMOVE PAST ITEMS ICONS IN TASKBAR.
Some times When you check your TasKbar properties or when you hide or unhide icons you can see old icons from Uninstalled or old programs you dont have anymore. This Tweak will help you how to get rid of this problem Thanks to leobull of Xperience.or How To clear the Past Items or Icons list in the TaskBar, perform the following steps:
1.Open Regedit Navigate to:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify
2.Delete the IconStreams and PastIconsStream values
3.Open Task Manager, click the Processes tab, click Explorer.exe , and then click End Process .
4.In Task Manager, click File , click New Task , type explorer , and then click OK .

LOCKING COMPUTERS.
To lock a computer in XP, as you probably know, you press "L" while holding down "Windows Logo" key on your keyboard. However, if you would like to lock a computer remotely, for example via "Remote Administrator", you don't have this ability. What you can do instead, is to create a shortcut on remote computer's desktop where Target %windir%\System32\rundll32.exe user32.dll,LockWorkStation Start In %windir%

ADMINISTRATOR IN WELCOME SCREEN.
When you install Windows XP an Administrator Account is created (you are asked to supply an administrator password), but the "Welcome Screen" does not give you the option to log on as Administrator unless you boot up in Safe Mode.
First you must ensure that the Administrator Account is enabled:
1 open Control Panel
2 open Administrative Tools
3 open Local Security Policy
4 expand Local Policies
5 click on Security Options
6 ensure that Accounts: Administrator account status is enabled Then follow the instructions from the "Win2000 Logon Screen Tweak" ie.
1 open Control Panel
2 open User Accounts
3 click Change the way users log on or log off
4 untick Use the Welcome Screen
5 click Apply Options
You will now be able to log on to Windows XP as Administrator in Normal Mode.

BUGFIXES.
This is a strange bug in Windows XP Pro but it can and does happen to everyone. When you open the My Computer screen and your Documents folder is missing but all the other users folders are there try this tweak.
STEP 1:
START > RUN > REGEDIT > HKEY_LOCAL_MACHINE / Software / Microsoft / Windows / Current Version / Explorer / DocFolderPaths
Once you click the DocFolderPaths folder you should see all the user's folders.
STEP 2:
Add a new string value
Value Name: your user name
Value Data: the path to your docs folder ( ex. C:\Documents and Settings\your docs folder )
Exit Registry editor and open my computer, your docs folder should now be visable.

MOUSE POINTERS.
It seems that even without pointer precision disabled, the mouse under XP is still influenced by an acceleration curve. This is especially noticeable in games. To

completely remove mouse acceleration from XP, you will need to go into the registry and adjust the SmoothmouseXYCurve values. Here is how its done.
1. Click Start button
2. Select Run
3. Type 'regedit' in the open textbox
4. Open the tree 'HKEY_CURRENT_USER', select control panel, then select mouse
5. Right clicking, modify the SmoothMouseXCurve and SmoothMouseYCurve hexidecimal values to the following:
SmoothMouseXCurve:
00,00,00,00,00,00,00,00
00,a0,00,00,00,00,00,00
00,40,01,00,00,00,00,00
00,80,02,00,00,00,00,00
00,00,05,00,00,00,00,00
SmoothMouseYCurve:
00,00,00,00,00,00,00,00
66,a6,02,00,00,00,00,00
cd,4c,05,00,00,00,00,00
a0,99,0a,00,00,00,00,00
38,33,15,00,00,00,00,00
If done correctly, you will notice you are holding a markedly more responsive mouse.

HIDDEN WINDOWS XP ICONS.
Windows XP Pro and Home contains icons for folders and files that cannot normally be seen, you can select to view hidden files from the folder options menu, but there are still some that remain hidden.
You can set windows to view these files as normal hidden files, so that when you use the view hidden files and folders toggle from the folder options menu that these will be turned on/off along with the normal hidden files.
These files are usually system files and should not be altered/deleted unless you really know what you are doing, if you don't yet still wish to change them I might suggest that you create back-ups of your system first.
I will personally accept no responsibility for any damage caused by using this tweak. To view the hidden files you need to open up regedit, if you are not sure how to do this, select run from the start menu and type in 'regedit' without the apostrophe's. In the regedit window, expand out the groups by clicking on the '+' next to the name in the left hand column of regedit, and navigate to the below address.
HKEY_CURRENT_USER \SOFTWARE \MICROSOFT \WINDOWS \CURRENTVERSION \EXPLORER \ADVANCED
when you have clicked the advanced folder on the left pane, look down the list at the titles in the right hand pane, one of those titles is 'ShowSuperHidden'
double click the title and in the window that appears set the value to equal 1 to show the super hidden files and 0 to hide them.

XP HOME ADVANCED FILE PERMISSIONS.
This is actually an addition to my previous post entitled "Get XP Pro file security with XP Home". In the aforementioned post I outlined how to access
*Advance file Permissions* on NTFS file systems for XP Home simply by booting into *Safe Mode*, rt-clicking any file or folder, and navigating to the *Security tab*. This gives the user the ability to allow or deny read, write, execute, read & write, display contents, full-control, iheritance, and take ownership permissions, with many more options available to apply to different users and groups stored on the computer. Well, you don't have to do this in *Safe Mode* (XP Home). Although it is a little less intuitive, you can simply go to your command prompt - Start>All Programs>Accessories>Command Prompt. Now type "cacls" in the window (without the quotes). This gives you the ability to add, remove or modify file permissions on files and folders through the command prompt. Type "cacls /?" for help on different options and variables. You do not need to be in safe mode to use this so it makes it a little quicker than using the safe mode security tab GUI. Remember - this only applies to NTFS. Here also is a very useful link to find a lot of extras and tweaks straight from the horse's mouth - the Microsoft Resource Center. You will find a lot of very useful web-based extra's here, most of them left unknowing to the general public - such as, "Online Crash Analysis" - a site that looks like Windows Update but you can upload your crash "dump logs" (when you get those system or application crash error reports). Microsoft will then analyze the log file and tell you some more info about WHY the system crashed (ie. faulty hardware/software/conflicts, etc).

FLASHGET :BYPASSING 8 MAX SIMULTANEOUS JOBS.
Users of Flash get will notice that the maximum number of file splits is 8. This number can be increased by the tweak below:
1. Run regedit.
2. Navigate to [HKEY_CURRENT_USER\Software\JetCar\JetCar\General\]
3. Right Click -> Add String Value.
4. Name as MaxSimJobs -> Set the value as what ever number you want.
After a restart you should be able to download with more file splits.

OUTLOOK EXPRESS WINDOWS TITLE TWEAKS.
Change the window title of Outlook Express to anything you want!
In regedt32 and navigate to HKEY_CURRENT_USER\Identities\{EE383506-901D-43C6-8E40-9A61901DF7CC}\Software\Microsoft\Outlook Express\5.0. Add a new string key called WindowTitle and make its value the desired window title. Then close the registry editor, and restart Outlook Express (if it's running.) Your new title now shows up in the title bar!

WINDOWS MEDIA PLAYER 9.
When installing WMP 9 it leaves a watersign on your desktop. You can easily remove this with: regedit:
HKey_Local_Machine\SOFTWARE\microsoft\system certificates\CA\certificates\FEE449EE0E3965A5246F00E87FDE2A065FD89D4
HKey_Local_Machine\software\microsoft\system certificates\ROOT\certificates\2BD63D28D7BCD0E251195AEB519243C13142EBC3
Remove both lines and restart computer.

CHANGING THE WINDOWS MEDIA PLAYER TITLEBAR.
This is a per-user tweak. Open RegEdit.
Browse to the following key:
HKEY_USERS\S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxxx-xxxx\Software\Policies\Microsoft\WindowsMediaPlayer
(the x's will vary from computer to computer , it's the key without the "_Classes" at the end) Create the following String, "TitleBar" , the value of this will now become the TitleBar of Windows Media Player.

AUTO DELETE TEMPORARY FOLDER.
First go into gpedit.msc
Next select -> Computer Configuration/Administrative Templates/Windows Components/Terminal Services/Temporary Folder
Then right click "Do Not Delete Temp Folder Upon Exit"
Go to properties and hit disable. Now next time Windows puts a temp file in that folder it will automatically delete it when its done! Note from Forum Admin: Remember, GPEDIT (Group Policy Editor) is only available in XP Pro.

CLEANUP STARTUP ITEMS IN MSCONFIG.
Do you ever uninstall programs and they are still listed under startup items in msconfig? Personally, I found myself with 30 such items from old installs. Microsoft leaves you no way to clean up this list, but have no fear, I have figured it out for you.
1. Open MSconfig and click on the startup items tab
2. Open Regedit and naviate to HKLM/Software/Microsoft/Sharedtools/MSconfig/startupreg
3. Compare the list of registry keys under startup reg with their counterparts in msconfig.
4. Delete the keys which are no longer valid.
5. Voila! You've cleaned up msconfig.

REMOVING SERVICES DEPENDENCIES.
This will allow you to disable a service or uninstall it from your system without effecting another service that depends on it. Here's how you do it
1. After you have set your services the way you want them and you have disabled/uninstalled something that another services depends on, run "regedit"
2. Under HKEY_LOCAL_MACHINE\System\find the service that will not function, do to another service being disabled/uninstall (found in ControlSet001\Services, ControlSet002\Services, and CurrentControlSet\Services)
3. Once you have found the service right-click on the string value, "DependOnService,"and modify
4. You should now see a list of services that it is dependent on. Simply delete the service that you have disabled/uninstalled
5. Restart your computer and your ready to go Disclaimer REMEMBER TO BACKUP YOU REGISTRY FIRST I'm not totaly sure if this will have any negative effects on your system. I used this method after uninstalling "Netbios over Tcpip" from my system completely, so that my Dhcp service would function and I have had NO negative effects on my system.

ANOTHER WAY TO DELETE HIDDEN DEVICES.
You can view and delete or modify hidden devices by:
1. Openning Device Manager. (I usually right-click on My Computer, select Properties, select the Hardware tab, then select Device Manager.)
2. Select View and check "Show hidden devices"
3. Hidden devices will appear below with the others and can be modified.

HOW TO GET "My Briefcase" IN WINDOWS XP.
go to C:\WINDOWS\system32\dllcache. look for a file named "syncapp".
double click it. an icon should appear on your desktop that says "My Briefcase". double click it. it will come up with this window that tells you how to use it.

TURN NUMLOCK ON AT LOGON.
NumLock does not toggle on by default (system-wide), even if you have it set in your PC's BIOS, because of XP's multi-user functionality. Guess Microsoft doesn't know everyone actually turns it on, which should be reason enough for what acts as "default"...
Anyway, you can hack the Windows Registry to change this behavior, or run a script at logon to turn NumLock on.
1. To enable NumLock through the Registry:
* Open Windows' Registry Editor (START > RUN, type "REGEDIT").
*. Navigate to HKEY_USERS\.Default\Control Panel\Keyboard.
*. Change the value for InitialKeyboardIndicators from 0 to 2.
2. To enable NumLock using a script, see this MS Knowledgebase article for complete instructions:
CODE
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;Q262625

Option 1 is the quicker method, but if you have more than one user on your system and one or more don't want NumLock on (stranger things have been known of), then option 2 is the way to go since it allows you to only attach the script to specific users.

FREE DISK SPACE BY DELETING RESTORE POINTS.
Start button-all programs-accessories-system tools-cleanup-more options. You will have the option of deleting your restore points.When your done creat one
restore point as a back up.

HOW TO REAL GET RID OF UNNECESSARY SOFTWARE
to uninstall things like msn messenger and other hidden installs thru add remove programs, do this: find sysoc.inf (you might have to enable "show hidden files" and "show hidden/protected system folders" in explorer) and open it in notepad replace all ",hide" with "," (both with out quotes) which is easiest to do with the replace all command under edit then in add/remove programs under add/remove windows compnents and whole new list of things to uninstall and add are now listed (such as internet explorer)

HAVING PROGRAMS RUN WHEN WINDOWS LOADS SLOWS DOWN YOUR STARTUP.
There are two ways do disable programs that may be in your startup (like icq, messanger,) The easiest is to do the following:
1. start --> run --> msconfig
2. Click on the "startup" tab (furthest right)\
3. Unclick any items you don't want to load when windows starts.
The second is by deleting registry entrys, this can be done the following way:
1. Start --> run --> regedit
2. Navigate to : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
3. Delete any entry's that you don't want to load up

TURN OFF INDEXING TO SPEED UP XP.
Windows XP keeps a record of all files on the hard disk so when you do a search on the hard drive it is faster. There is a downside to this and because the computer has to index all files, it will slow down normal file commands like open, close, etc. If you do not do a whole lot of searches on your hard drive then I suggest turnning this feature off:
1. Control Panel
2. Administrative Tools
3. Services
4. Disable Indexing Services

HALF LIFE AND WINDOWS XP.
1. How to recover from incompatible drivers
Before you install new drivers set a system restore point. Start>All programs>Accessories>system tools>system restore
After your new drivers don't work reset your computer. Press F8 repeatedly as soon as the BIOS screen disappears, and before the Windows XP screen appears. Select safe mode. Use system restore again to undo your mess.
2. Video Drivers
The NVidia drivers that come with XP do not allow you to run Half Life in OpenGL. Update to the newest drivers.
Despite the fact that they are not official drivers, 22.50 was the only set which worked
3. Sound Drivers
Use windows update to update Creative drivers.
4. Fixing screen flicker
Windows XP defaults to 60Hz for games. A fix is available here:
CODE
http://www.fileplanet.com/dl/dl.asp?/planetquake/ztn/nvreffix-setup.exe

Select "set: ev ery resolution to monitor's maximum supported rate"
5. Fixing lag
If you are having trouble with lag, try disabling the windows XP firewall. Go to control panel>network connections. Select connection, right click, properties, advanced, untick the firewall.
6. Mouse
You can improve your mouse smoothness for games.
Control panel>mouse>hardware>properties>advanced
Change the sample rate to a higher one, eg. 200

REGISTRY METHOD FOR REMOVING STARTUP ITEMS.
I prefer to use MSCONFIG selective startup to troubleshoot. To remove entries for good, open the registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN and HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN
Delete entries of unwanted startup daemons and tray procedures.

DISPLAY MESSAGE ON STARTUP.
Start regedit, if you are unfamiliar with regedit please see our FAQ.
Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Modify the key legalnoticecaption with what you want to name the window.
Modify the key legalnoticetext with what you want the window to say. Restart.

REMOVE THE DEFAULT IMAGE VIEWER IN WINDOWS ME/XP.
This tweak works in Windows Me/XP, I have not try it in Windows NT/2000 yet, because i don't have that OS, you can try it if you have.
*This tweak does not work in Windows 95/98
To remove the Windows default Image Viewer, first:
Click Start Menu
Select Run menu
Type "cmd", (for Windows Me, type "command")
Then type "regsvr32 /u shimgvw.dll" to unregister this dll. This will stop it from previewing any picture that it support, e.g. JPEG, Bitmap, GIF....
* Before perform this tweak, make sure that you have the alternative Image Viewer installed in you windows e.g. ACDsee, FireGraphics... because once you do this tweak without that application, you can't open and view your image anymore! So, to undo it, type "regsvr32 shimgvw.dll" in command prompt.

SPEED UP BOOT BY DISABLING UNUSED PORTS.
You may have tried many tweaks like modifying windowsXP start-up applications, prefetches, unload DLLs method,etc. And yes those methods do work for me.
I have just accidentally found out another way to give you an extra boost in windowsXP's boot performance. This is done by disabling your unused devices in
Device Manager. for example, if you don't have input devices that are connected to one of your USBs or COM ports, disabling them will give you an extra perfromance boost in booting. Go to Control Panel -> System -> Hardware tab -> device manager Disable devices that you don't use for your PC and then restart.

CLEAR UNWANTED ENTRIES FROM ADD/REMOVE PROGRAMS.
Run the Registry Editor (REGEDIT).
Open HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Uninstall Remove any unwanted keys under "Uninstall."

CLICKING * .AVI FILES ON EXPLORER CAUSING 100% CPU USAGE.
Well windows seem to have a REALLY big problem when it comes to reading AVI files. It seems that when you click on an AVI file in explorer, it'll try to read the entire AVI file to determine the width,height, etc. of the AVI file (this is displayed in the Properties window). Now the problem with Windows is that if you have a broken/not fully downloaded AVI file that doesnt contain this info, Windows will scan the entire AVI file trying to figure out all these properties which in the process will probably cause 100% CPU usage and heavy memory usage. To solve this problem all you have to do is the following:
1. Open up regedit
2. Goto HKEY_CLASSES_ROOT\SystemFileAssociations\.avi\shellex\PropertyHandler
3. Delete the "Default" value which should be "{87D62D94-71B3-4b9a-9489-5FE6850DC73E}"
Voila! Please not that this will no longer provide you with the windows properties displaying the AVI file information such as width, height, bitrate etc. But its a small price to pay for saving you resources.
NOTE: Please use caution when using regedit. Improper usage may cause windows to behave imcorrectly. Also, I cannot be held resposible. Backup your registry first.

CD ROM STOPS AUTOPLAYING/AUTORUN.
And the AutoPlay Tab has disappeared in My Computer, Devices With Removable Storage, Right Click on CDROM, Properties.
Solution: The service: "Shell Hardware Detection" has been set to Manual or Disabled. Go to Control Panel, Administrative Tools, Services. Return this service to "Automatic".

SHUTDOWN XP FASTER 1.
Like previous versions of windows, it takes long time to restart or shutdown windows xp when the "Exit Windows" sound is enabled. to solve this problem you
must disable this useless sound. click start button then go to settings -> control panel -> Sound,Speech and Audio devices -> Sounds and Audio Devices -> Sounds, then under program events and windows menu click on "Exit Windows" sub-menu and highlight it.now from sounds you can select,choose "none" and then click apply and ok. now you can see some improvements when shutting down your system.

SHUTDOWN XP FASTER 2.
Start Regedit.
Navigate to HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control.
Click on the "Control" Folder.
Select "WaitToKillServiceTimeout"
Right click on it and select Modify.
Set it a value lower than 2000 (Mine is set to 200).

EASIEST WAY TO DELETE PREFETCH.
1. Open notepad.exe, type del c:\windows\prefetch\*.* /q (without the quotes) & save as "delprefetch.bat" in c:\
2. From the Start menu, select "Run..." & type "gpedit.msc".
3. Double click "Windows Settings" under "Computer Configuration" and double click again on "Startup" in the right window.
4. In the new window, click "add", "Browse", locate your "delprefetch.bat" file & click "Open".
5. Click "OK", "Apply" & "OK" once again to exit.
6. Reboot your computer.

SPEED UP MENU DISPLAY.
When using the start menu the you will notice a delay between different tiers of the menu hierarchy. For the fastest computer experience possible I recommend changing this value to zero. This will allow the different tiers to appear instantly. Start Regedit. If you are unfamiliar with regedit please refer to our FAQ on how to get started.
Navigate to HKEY_CURRENT_USER\Control Panel\Desktop
Select MenuShowDelay from the list on the right.
Right on it and select Modify.
Change the value to 0.
Reboot your computer.

16 COLOUR ICONS.
If you select 16bit mode for graphics your icons will revert to using 8bit (16 color) icons. Yuck! Change the following registry setting to:
[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics] "Shell Icon BPP"="16" "Shell Icon Size"="32" Setting the BPP to 16bit will yield 65565 colors for icons.

DE-CRYPT ENCRYPTED FILES ON WINDOWS XP.
1. Login as Administrator
2. Go to Start/Run and type in cmd and click OK.
At the prompt type cipher /r:Eagent and press enter
This prompt will then display:
Please type in the password to protect your .PFX file:
Type in your Administrator password
Re-confirm your Administrator password
The prompt will then display
Your .CER file was created successfully.
Your .PFX file was created successfully.
The Eagent.cer and Eagent.pfx files will be saved in the current directory that is shown at the command prompt. Example: The command prompt displays
C:\Documents and Settings\admin> the two files are saved in the admin folder. (For security concerns, you should house the two files in your Administrator folder or on a floppy disk).
3. Go to Start/Run and type in certmgr.msc and click OK. This will launch the Certificates Manager. Navigate to Personal and right click on the folder and select All Tasks/Import. The Certificate Import Wizard will appear. Click Next. Browse to the C:\Documents and Settings\admin folder. In the Open dialog box, change the Files of Type (at the bottom) to personal Information Exchange (*.pfx,*.P12). Select the file Eagent.pfx and click Open. Click Next. Type in your Administrator password (leave the two checkboxes blank) and click Next. Make sure the Radio button is active for the first option (Automatically select the certificate store based on the type of certifcate). Click Next. Click Finish. (You'll receive a message that the import was successful). To confirm the import, close Certificates Manager and re-open it. Expand the Personal folder and you will see a new subfolder labeled Certificates. Expand that folder and you will see the new entry in the right side column. Close Certificate Manager.
4. Go to Start/Run and type in secpol.msc and click OK. This will launch the Local Security Policy. Expand the Public Key Policies folder and then right click on the Encrypted File System subfolder and select Add Data Recovery Agent... The Wizard will then display. Click Next. Click the Browse Folders... button. Browse to the C:\Documents and Settings\admin folder. Select the Eagent.cer file and click Open. (The wizard will display the status User_Unknown. That's ok). Click Next. Click Finish. You will see a new entry in the right side column. Close the Local Security Policy.
You, the Administrator are now configured as the default Recovery Agent for All Encrypted files on the Local Machine.
To Recover Encrypted files: Scenario #1
If you have completed the above steps BEFORE an existing user encrypted his/her files, you can log in to your Administrator account and navigate to the encrypted file(s). Double click on the file(s) to view the contents.
Scenario #2
If you have completed the above steps AFTER an existing user has already encrypted his/her files, you must login to the applicable User's User Account and then immediately logout. Next, login to your Administrator account and navigate to the encrypted file(s). Double click on the file(s) to view the contents.
*Warning Do not Delete or Rename a User's account from which will want to Recover the Encrypted Files. You will not be able to de-crypt the files using the steps outlined above.

DUMP FILES TWEAK & DISABLE DR.WATSON.
"Dump file. A dump file stores data from memory during a system crash and can be helpful when diagnosing problems, but like a swap file, it can also expose a lot of sensitive, unencrypted data. To prevent Windows from creating the file, go to Control Panel | System. Click on the Advanced tab and then the Settings button on the Startup and Recovery pane. Set the drop-down menu under Write debugging information to (none). "Similarly, the debugging program Dr. Watson saves information when applications crash. To disable it, go to:
HKEY_local_machine\software\Microsoft\WindowsNT\CurrentVersion\ AeDebug and set the Auto string to 0. Then use Windows Explorer to go to Documents and Settings\All Users\Shared Documents\DrWatson. Delete User.dmp and Drwtsn32.log, the insecure logs the program creates." Heed related advice from 'microsoft' regarding 'Disable Dr.Watson' first before the preceding Dr. Watson advice (go Google search.) Back up with System Restore, and go ahead. As cautious as I am, I have gladly applied these tweaks, and followed related microsot advice on Dr. Watson.

Precaution: Backups All Of Your Data Before Tweaking, Not All Of The Tips I've Mentioned Above Were Tested. I Don't Responsible For Any Damages. Happy Experiments