Inversion Of Control(IOC) Design Pattern

Loose coupling is one of the critical elements in object-oriented software development. It allows you to change the implementations of two related objects without affecting the other object. Inversion of Control (IoC) is one approach you can use to achieve loose coupling between several interacting components in an application.

Popular Java IOC/DI Containers:

  • Spring Framework : A substantially large framework which offers a number of other capabilities apart from Dependency Injection.
  • PicoContainer : A fairly small tightly focused DI container framework.
  • HiveMind : Another DI container framework.
  • XWork : Primarily a command pattern framework which very effectively leverages Dependency Injection. While it is an independent framework in its own right, it is often used in conjunction with Webwork

Popular .Net IOC/DI Containers:

ref:

Inversion of Control Containers and the Dependency Injection pattern(Martin Fowler) - http://martinfowler.com/articles/injection.html






Inversion Of Control(Java Boutique) - http://javaboutique.internet.com/tutorials/loose/

Cloud Computing

Cloud computing is the delivery of computing as a service rather than a product, whereby shared resources, software, and information are provided to computers and other devices as a metered service over a network (typically the Internet).

As a metaphor for the Internet, "the cloud" is a familiar cliché, but when combined with "computing," the meaning gets bigger and fuzzier. Some analysts and vendors define cloud computing narrowly as an updated version of utility computing: basically virtual servers available over the Internet. Others go very broad, arguing anything you consume outside the firewall is "in the cloud," including conventional outsourcing.

Java EE 7 as a Cloud Integrator:

Java Business Integration(JBI) standardizes a way of assembling and binding the components making up an application. JBI defines a container that can host components. Two kinds of components can be plugged into a JBI environment:

  • Service engines provide logic in the environment, such as XSL (Extensible Stylesheet Language) transformation or BPEL (Business Process Execution Language) orchestration.
  • Binding components are sort of "connectors" to external services or applications. They allow communication with various protocols, such as SOAP, REST, Java Message Service, or ebXML.

JBI is built on top of state-of-the-art SOA standards: service definitions are described in WSDL (Web Services Description Language) and components exchange XML messages in a document-oriented-model way.

Together with consuming APIs for REST-based Services and JBI, Java EE 7 can be positioned as a cloud integrator platform. However, we need to see the final specification on the exact options for cloud integration in Java EE 7.

Java EE 7 as a Cloud Provider:

While the options for a cloud consumer and integrator do exist in Java EE in different forms in the earlier versions, the new add-ons to position Java EE 7 as a cloud provider are a major boost to the platform. The following are the expected major features in relation to Java EE 7 as a cloud provider.

  • The Java EE platform architecture to take into account the operational impact of the cloud, more specifically by defining new roles that arise in that model, such as a PaaS administrator.
  • The Java EE platform may also establish a set of constraints that applications that wish to take advantage of PaaS-specific features, such as multi-tenancy, may have to obey and provide a way for applications to identify themselves as designed for cloud environments.
  • All resource manager-related APIs, such as JPA, JDBC and JMS, will be updated to enable multi-tenancy. The programming model may be refined as well, for example, by introducing connectionless versions of the major APIs.
  • Java EE will define a descriptor for application metadata to enable developers to describe certain characteristics of their applications that are essential for the purpose of running them in a PaaS environment. These may include being multi tenancy-enabled, resources sharing, quality of service information, dependencies between applications.

HTML 5

HTML5 was thrown around by the likes of Apple and Google. This is the next evolution of HTML, or Hyper Text Markup Language, which forms the backbone of almost every site on the Internet.

HTML 4 has been tweaked, stretched and augmented beyond its initial scope to bring high levels of interactivity and multimedia to Web sites. Plugins like Flash, Silverlight and Java have added media integration to the Web, but not without some cost. In search of a "better user experience" and battery life, Apple has simply dropped support for some of these plugins entirely on mobile devices, leaving much of the media-heavy Internet inaccessible on iPads and iPhones. HTML5 adds many new features, and streamlines functionality in order to render these processor-intensive add-ons unnecessary for many common functions.

Assuming content providers sign on (and many are), this means you won't have to worry about installing yet another plugin just to listen to a song embedded in a blog or watch a video on YouTube. Similarly, this is a big deal for platforms that either don't support Flash (e.g., iPhone and iPad), or have well documented problems with it (e.g., Linux). It will be a particular boon to those smartphones for which supporting Flash has proven problematic.

ref:

HTML5 Triumphant: Silverlight, Flash Discontinuing - http://www.technologyreview.com/blog/mimssbits/27328/


Unicode in Windows

UNICODE

• Real problem with localizations has always been manipulating different character sets.

• The problem is that some languages and writing systems have so many symbols that one byte,which offer no more than 256 different symbols at the best,is just not enough .

•UNICODE offers a simple and consistent way of representing strings.

•All characters in a Unicode string are 16 bit value(2 bytes).

•Because Unicode represents each character with 16 bit value, more than
65,000 characters are available, making it possible to encode all the characters that make up written languages throughout the world.

Advantages of Unicode

• It enables easy data exchange between the languages

• It allows you to distribute a single binary .exe or DLL file that supports all languages.

• It improves the efficiency of your application.

Writing Unicode Source Code

• It is possible to write single source code file so that it can be compiled with or without using Unicode-you need only to define two macros UNICODE and _UNICODE to make the change and recompile.

• To take advantage to Unicode character strings,some data types have been defined.The standard C header file,String.h,has been modified to define a data type named wchar_t ,which is the data type of Unicode character:

typedef unsigned short wchar_t;

•The standard C run time string functions,such as strcpy,strchr and strcat operate only on ANSI strings only,so they developed an equivalent Unicode functions begin with wcs(wide character strings) such as wcscpy,wcschr and wcscat.

•To set up dual compatibility (ANSI and Unicode) include TChar.h file instead of String.h.

•TChar.h exists for the sole purpose of helping us to create ANSI/Unicode generic source code files.It consists of a set of macros that you should use in your source code instead of making direct calls to either the str or wcs functions.

•If you define _UNICODE when you compile your source code ,the macro reference to wcs set of functions,otherwise to str set of functions.

•TChar.h include some additional macros.

•To define an array of string characters that is ANSI/Unicode ,usefollowing TCHAR datatype:

If _UNICODE defined,TCHAR is declared as( for UNICODE )

typedef wchar_t TCHAR;

If _UNICODE notdefined,TCHARis declared as(for ANSI)

typedef char TCHAR;

eg: We can create allocate a string of characters as follows:

TCHAR szString[100];
•By Default Microsoft C++ compiler compiles all strings as though theywere ANSIstrings,not Unicode strings.So to create pointer to strings we have to specify ‘L’ before the literal strings which informs the compiler that the string should be compiled as a Unicode string.

Create Pointers to Strings:

TCHAR *szError= L”Error”

•We need another macro that selectively adds the uppercase L before a literal String._TEXT macro also defined in TChar,h file.

If _UNICODE is defined ,_TEXT is defined as

#define _TEXT(x) L ## x

If _UNICODE is not defined ,_TEXT is defined as

#define _TEXT(x) x

So to create Pointers to Strings rewrite the above line:

TCHAR *szError = _TEXT(“Error”);

_TEXT can also be used for literal characters like:

If(szError[0] == _TEXT(‘U’) { …………}

•_UNICODE is used for C run time header file.

•UNICODE macro is used for Windows header files.

•Usually we need to define both above macros when compiling a source code module.

•In Windows : WCHAR –used as Unicode character. PWSTR---Pointer to a Unicode string. PCWSTR--- Pointer to a constant Unicode String.

•There are different windows functions defined in WinUser.h such as :

#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif //UNICODE

•In ShlWApi.h file we have windows OS string Functions like StrCat,StrChr,StrCmp----with both Unicode and ANSI versions like
StrCatW and StrCatA.

•Windows Function to determine whether the text file is ANSI or Unicode characters we use the function

DWORD IsTextUnicode(CONST PVOID pvBuffer, int cb ,PINT pResult);

pvBuffer --- address of a buffer that we want to test.void because we don’t know it is ANSI or UNICODE.

Cb----- specifies the number of bytes pvBuffer points to.Again,u don’t know what’s in the buffer,cb is count of bytes rather than a count of characters.

pResult----address of an integer that u must initialize before calling IsTextUnicode.We can Intialize this integer to indicate which tests u want IsTextUnicode to perform.We can also pass NULL for this parameter to perform every test it can.
TRUE is returned if buffer contains Unicode text, otherwise FALSE is returned.

•Translating Strings between Unicode and ANSI
The windows Function MultiByteToWideChar converts multibyte to character string to wide character string.

The windows function WideCharToMultiByte converts a wide character string to its multibyte string equivalent .

Design Patterns

Design Patterns represent solutions to problems what arise when developing software within a particular context.

Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.

Patterns help you learn from other's successes, instead of your own failures.

Three categories of Design Patterns:
  1. Creational Patterns: deal with initializing and configuring classes and objects
  2. Structural Patterns: deal with decoupling the interface and implementation of classes and objects
  3. Behavioral Patterns: deal with dynamic interactions among societies of classes and objects

Creational Patterns:

Abstract Factory: Creates an instance of several families of classes
resource 1
resource 2

Builder: Separates object construction from its representation
resource 1
resource 2

Factory Method: Creates an instance of several derived classes
resource 1
resource 2

Prototype: A fully initialized instance to be copied or cloned
resource 1
resource 2

Singleton: A class of which only a single instance can exist
resource 1
resource 2

Structural Patterns:

Adapter: Match interfaces of different classes
resource 1
resource 2


Bridge: Separates an object’s interface from its implementation
resource 1
resource 2

Composite: A tree structure of simple and composite objects
resource 1
resource 2


Decorator: Add responsibilities to objects dynamically
resource 1
resorce 2

Façade: A single class that represents an entire subsystem
resource 1
resource 2

Flyweight: A fine-grained instance used for efficient sharing
resource 1
resource 2

Proxy: An object representing another object
resource 1
resource 2

Behavioral Patterns:

Chain of Responsibility: A way of passing a request between a chain of objects
resource 1
resource 2

Command: Encapsulate a command request as an object
resource 1
resource 2

Interpreter: A way to include language elements in a program
resource 1
resource 2

Iterator: Sequentially access the elements of a collection
resource 1
resource 2

Mediator: Defines simplified communication between classes
resource 1
resource 2

Memento: Capture and restore an object's internal state
resource 1

Observer: A way of notifying change to a number of classes
resource 1
resource 2

State: Alter an object's behavior when its state changes
resource 1
resource 2

Strategy: Encapsulates an algorithm inside a class
resource 1
resource 2

Template Method: Defer the exact steps of an algorithm to a subclass
resource 1
resource 2

Visitor: Defines a new operation to a class without change
resource 1
resource 2

ref:

Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (also known as Gang of Four)

Huston Design Patterns - http://www.vincehuston.org/dp/

Thinking in Patterns with Java, by Bruce Eckel

Thinking in Patterns with C++, by Bruce Eckel



Java Fundamentals

Basic Programming Concepts in Java:

▪Encoding Sets.
Java supports the Unicode character encoding set and program element names are not restricted to ASCII (American Standard Code for Information Interchange) characters. Text can be written using characters in practically any human language in use today.

▪Primitives.
Java is an OOP language and Java programs deal with objects most of the time. However, there are also non-object elements that represent numbers and simple values such as true and false. These simple non-object programming elements are called primitives.

▪Variables.
Variables are place holders whose contents can change. There are many types of variables.

▪Constants.
Place holders whose values cannot be changed.

▪Literals.
Literals are representations of data values that are understood by the Java compiler.

▪Primitive conversion.
Changing the type of a primitive to another type.

▪Operators.
Operators are notations indicating that certain operations are to be performed.

ASCII & Unicode:

-ASCII character set supports Latin Letters.Each character is represented by 8 bits.However all
not every language uses Latin letters.Chinese,Japanese,Thai are examples of languages which use different character set.8 bit is not enough to represent all the characters in the character set.

-Unicode Character set supports all characters in all languages in the world into one single character set.

-Initially Unicode character was represented by 16 bits, which were enough to store 65000 different characters.6500 were enough to encoding most of the characters in major languages in the world.However the Unicode consortium as extended it to 32 bit.

-While Unicode provides enough space for all character used in all languages,storing and transmitting the Unicode text is not as efficient as ASCII characters.

-Character encoding can make it more efficient to store and transmit the Unicode text. And, there are many types of character encoding's available today.

-The Unicode Consortium endorses three of them:

▪UTF-8.
This is popular for HTML and for protocols whereby Unicode characters are transformed into a variable length encoding of bytes. It has the advantages that the Unicode characters corresponding to the familiar ASCII set have the same byte values as ASCII, and that Unicode characters transformed into UTF-8 can be used with much existing software. Most browsers support the UTF-8 character encoding.

▪UTF-16.
In this character encoding, all the more commonly used characters fit into a single 16- bit code unit, and other less often used characters are accessible via pairs of 16-bit code units.

▪UTF-32.
This character encoding uses 32 bits for every single character. This is clearly not a choice for Internet applications. At least, not at present.

-ASCII characters still play a dominant role in software programming.

-Java too uses ASCII for almost all input elements, except comments, identifiers,
and the contents of characters and strings. For the latter, Java supports Unicode characters.

Primitives:

There are eight primitive types in Java, each with a specific format and size.
1. byte
- Byte length integer ( 8 bits )
-range is from -128 (-27) to 127 (27-1)
2.short
- Short integer (16 bits)
- range is from -32,768 (-215) to 32,767 (-215-1)
3.int
-Integer (32 bits)
- range is from -2,147,483,648 (-231) to 2,147,483,647 (-231-1)
4.float
-Single-precision floating point (32-bit IEEE 7541)
- range is from Smallest positive nonzero: 14e-45 Largest positive nonzero: 3.4028234e38
5.double
-Double-precision floating point (64-bit IEEE 754)
- range is from Smallest positive nonzero: 4.9e-324
Largest positive nonzero: 1.7976931348623157e308
6.char
- A Unicode character
7.boolean
- A boolean value true or false

Variables:

-Variables are data placeholders. Java is a strongly typed language, therefore every variable must have a declared type.
- There are two data types in Java:
▪ reference types. A variable of reference type provides a reference to an object.
▪primitive types. A variable of primitive type holds a primitive.

-In addition to the data type, a Java variable also has a name or an identifier.

-There are a few ground rules in choosing identifiers.
1. An identifier is an unlimited-length sequence of Java letters and Java digits. An identifier must begin with a Java letter.
2. An identifier must not be a Java keyword a boolean literal, or the null literal.
3. It must be unique within its scope.

- Identifier should not start with a number and should not include signs like +
ex : 4a is Invalid.
kite+ride is Invalid

-In Java names are case sensitive. c1 and C1 are two different identifier.

Sun’s Naming Convention for Variables:

Variable names should be short yet meaningful. They should be in mixed case with a lowercase first letter. Subsequent words start with capital letters. Variable names should not start with underscore _ or dollar sign $ characters.
For example, here are some examples of variable names that are in compliance with Sun’s code conventions: userName,countNumber,firstTimeLogin.

Constants:
In Java constants are variables whose values, once assigned, cannot be changed. You declare a constant by using the keyword final. By convention, constant names are all in upper case with words separated by underscores.

-Here are examples of constants or final variables.
final int ROW_COUNT = 50;
final boolean ALLOW_USER_ACCESS = true;

Literals:
Literals of primitive types have four subtypes:

integer literals, floating-point literals, character literals, and boolean literals.

Integer Literals:

-Integer literals may be written in decimal (base 10, something we are used to), hexadecimal (base 16), or octal (base 8).
Example: int x = 10;

-Hexadecimal integers are written by using the prefixes 0x or 0X. For example, the hexadecimal number 9E is written as 0X9E or 0x9E.

-Octal integers are written by prefixing the numbers with 0. For instance, the following is an octal number 567:
0567

-To assign a value to a long, suffix the number with the letter L or l.

-Longs, ints, shorts, and bytes can also be expressed in binaries by prefixing
the binaries with 0B or 0b. For instance:
byte twelve = 0B1100; // = 12

-If an integer literal is too long, starting from Java 7 you can use underscores to separate digits in integer literals.
ex:int million = 1_000_000;

Floating-Point Literals:

To express float literals, you use one of the following formats.
Digits . [Digits] [ExponentPart] f_or_F
. Digits [ExponentPart] f_or_F
Digits ExponentPart f_or_F
Digits [ExponentPart] f_or_F

To write double literals, use one of these formats.
Digits . [Digits] [ExponentPart] [d_or_D]
. Digits [ExponentPart] [d_or_D]
Digits ExponentPart [d_or_D]
Digits [ExponentPart] [d_or_D]

Example:
0f
3.14f
9.0001e+12f
Here are examples of double literals:
2e1
8.
.5
0.0D
3.14
9e-9d
7e123D

Boolean Literals:
-The boolean type has two values, represented by literals true and false. For example, the following code declares a boolean variable includeSign and assigns it the value of true.
boolean includeSign = true;

Character Literals:
-A character literal is a Unicode character or an escape sequence enclosed in single quotes.

Primitive Conversions:
-When dealing with different data types, you often need to perform conversions.

Identity Conversion:
If both variables have the same type, the assignment will always succeed. Conversion from a type to the same type is called identity conversion.
Ex:
int a = 90;
int b = a;

The Widening Conversion:
-The widening primitive conversion occurs from a type to another type whose size is the same or larger than that of the first type, such as from int (32 bits) to long (64 bits).

- The widening conversion is permitted in the following cases:

▪byte to short, int, long, float, or double
▪ short to int, long, float, or double
▪ char to int, long, float, or double
▪ int to long, float, or double
▪ long to float or double
▪ float to double

-A conversion from an int or a long to a float may result in loss of precision.

-The widening primitive conversion occurs implicitly.

Example :
int a = 10;
long b = a; // widening conversion

The Narrowing Conversion

-The narrowing conversion occurs from a type to a different type that has a smaller size, such as from a long (64 bits) to an int (32 bits).

- In general, the narrowing primitive conversion can occur in these cases:

▪ short to byte or char
▪ char to byte or short
▪ int to byte, short, or char
▪ long to byte, short, or char
▪ float to byte, short, char, int, or long
▪double to byte, short, char, int, long, or float

-Unlike the widening primitive conversion, the narrowing primitive conversion must be explicit. You need to specify the target type in parentheses.
For example, here is a narrowing conversion from long to int.

long a = 10;
int b = (int) a; // narrowing conversion

Example :
long a = 9876543210L;
int b = (int) a; // the value of b is now 1286608618

-A narrowing conversion that results in information loss introduces a defect in your program.


Operators:

In Java, there are six categories of operators.
▪Unary operators
▪Arithmetic operators
▪Relational and conditional operators
▪Shift and logical operators
▪Assignment operators
▪Other operators

Bitwise Complement Operator ~

-The operand of this operator must be an integer primitive or a variable of an integer primitive type. The result is the bitwise complement of the operand.

-we need to convert the operand to a binary number and reverse all the bits

For example:
int j = 2;
int k = ~j; // k = -3; j = 2

Shift Operators

-A shift operator takes two operands whose type must be convertible to an
integer primitive. The left-hand operand is the value to be shifted, the right-
hand operand indicates the shift distance.

- There are three types of shift
▪ the left shift operator <<
▪ the right shift operator >>
▪ the unsigned right shift operator >>>

The Left Shift Operator <<

-The left shift operator bit-shifts a number to the left, padding the right bits with 0. The value of n << s is n left-shifted s bit positions. This is the same as multiplication by two to the power of s.

For example, left-shifting an int whose value is 1 with a shift distance of 3 (1 << 3) results in 8

-Another rule is this. If the left-hand operand is an int, only the first five bits of the shift distance will be used. In other words, the shift distance must be within the range 0 and 31. If you pass an number greater than 31, only the first five bits will be used. This is to say, if x is an int, x << 32 is the same as x << 0; x << 33 is the same as x << 1.

-If the left-hand operand is a long, only the first six bits of the shift distance will be used. In other words, the shift distance actually used is within the range 0 and 63.

The Right Shift Operator >>

-The right shift operator >> bit-shifts the left-hand operand to the right. The value of n >> s is n right-shifted s bit positions. The resulting value is n/2s.
As an example, 16 >> 1 is equal to 8

The Unsigned Right Shift Operator >>>

-The value of n >>> s depends on whether n is positive or negative. For a positive n, the value is the same as n >> s.

-If n is negative, the value depends on the type of n. If n is an int, the value is (n>>s)+(2<<~s). If n is a long, the value is (n>>s)+(2L<<~s).

Promotion:
-For unary operators, if the type of the operand is byte, short, or char, the outcome is promoted to int.

-For binary operators, the promotion rules are as follows.
▪ If any of the operands is of type byte or short, then both operands will be converted to int and the outcome will be an int.
▪ If any of the operands is of type double, then the other operand is converted to double and the outcome will be a double.
▪ If any of the operands is of type float, then the other operand is converted to float and the outcome will be a float.
▪ If any of the operands is of type long, then the other operand is converted to long and the outcome will be a long.

ref:




Java Book:Java™: A Beginner's Tutorial-Budi Kurniawan

JQuery Javascript Library

jQuery is free, open source software, dual-licensed under the MIT License or the GNU General Public License, Version 2.

jQuery's syntax is designed to make it easier to navigate a document, select DOM elements, create animations, handle events, and develop Ajax applications.

jQuery also provides capabilities for developers to create plug-ins on top of the JavaScript library. This enables developers to create abstractions for low-level interaction and animation, advanced effects and high-level, theme-able widgets.

The modular approach to the jQuery framework allows the creation of powerful and dynamic web pages and web applications.


ref:



SMART Goals

S.M.A.R.T. is an acronym for the 5 steps of specific, measurable, achievable, relevant, and time-based goals.

The acronym SMART has a number of slightly different variations, which can be used to provide a more comprehensive definition for goal setting:

S - specific, significant, stretching

M - measurable, meaningful, motivational

A - agreed upon, attainable, achievable, acceptable, action-oriented

R - realistic, relevant, reasonable, rewarding, results-oriented

T - time-based, timely, tangible, trackable

This provides a broader definition that will help you to be successful in both your business and personal life.

Specific:

To set a specific goal you must answer the six “W” questions:

*Who: Who is involved?

*What: What do I want to accomplish?

*Where: Identify a location.

*When: Establish a time frame.

*Which: Identify requirements and constraints.

*Why: Specific reasons, purpose or benefits of accomplishing the goal.


ref:


Porting C/C++ Applications

Software programs are often made to run on systems that are completely different from the system in which the program is coded or developed. This process of adapting software across systems is known as porting.

ref:

Porting C++ Code from Windows to Unix -



Porting from Unix to Windows -



Sun Solaris to Compaq Tru64 UNIX Porting Guide - http://www.tru64unix.compaq.com/docs/porting/HTML/solaris.html

Porting Unix/Linux Applications to Mac OS - http://www.krsaborio.net/apple/research/acrobat/0206.pdf


Developing and Porting C and C++ Applications on AIX - http://www.redbooks.ibm.com/redbooks/pdfs/sg245674.pdf

Porting Unix Applications to AS/400 - http://www.common.be/pdffiles/F00p03Common.pdf

Porting IRIX Applications to Tru64 - http://h30097.www3.hp.com/docs/porting/IRIX.pdf

Android NDK(Develop native apps on Android) -


Total Quality Management(TQM)

Total quality management or TQM is an integrative philosophy of management for continuously improving the quality of products and processes. At its core, Total Quality Management (TQM) is a management approach to long-term success through customer satisfaction.

Principles Of TQM:
1- Be Customer focused: Whatever you do for quality improvement, remember that ONLY customers determine the level of quality. Whatever you do to foster quality improvement, training employees, integrating quality into processes management, ONLY customers determine whether your efforts were worthwhile.
2-Insure Total Employee Involvement: You must remove fear from work place, then empower employee... you provide the proper environment.
3- Process Centered: Fundamental part of TQM is to focus on process thinking.
4- Integrated system: All employee must know the business mission and vision. An integrated business system may be modeled by MBNQA or ISO 9000
5- Strategic and systematic approach: Strategic plan must integrate quality as core component.
6- Continual Improvement: Using analytical, quality tools, and creative thinking to become more efficient and effective.
7- Fact Based Decision Making: Decision making must be ONLY on data, not personal or situational thinking.
8- Communication: Communication strategy, method and timeliness must be well defined.

How to motivate the team members more than money

  1. Be generous with praise. Everyone wants it and it’s one of the easiest things to give. Plus, praise from the CEO goes a lot farther than you might think. Praise every improvement that you see your team members make. Once you’re comfortable delivering praise one-on-one to an employee, try praising them in front of others.
  2. Get rid of the managers. Projects without project managers? That doesn’t seem right! Try it. Removing the project lead or supervisor and empowering your staff to work together as a team rather then everyone reporting to one individual can do wonders. Think about it. What’s worse than letting your supervisor down? Letting your team down! Allowing people to work together as a team, on an equal level with their co-workers, will often produce better projects faster. People will come in early, stay late, and devote more of their energy to solving problems.
  3. Make your ideas theirs. People hate being told what to do. Instead of telling people what you want done; ask them in a way that will make them feel like they came up with the idea. “I’d like you to do it this way” turns into “Do you think it’s a good idea if we do it this way?”
  4. Never criticize or correct. No one, and I mean no one, wants to hear that they did something wrong. If you’re looking for a de-motivator, this is it. Try an indirect approach to get people to improve, learn from their mistakes, and fix them. Ask, “Was that the best way to approach the problem? Why not? Have any ideas on what you could have done differently?” Then you’re having a conversation and talking through solutions, not pointing a finger.
  5. Make everyone a leader. Highlight your top performers’ strengths and let them know that because of their excellence, you want them to be the example for others. You’ll set the bar high and they’ll be motivated to live up to their reputation as a leader.
  6. Take an employee to lunch once a week. Surprise them. Don’t make an announcement that you’re establishing a new policy. Literally walk up to one of your employees, and invite them to lunch with you. It’s an easy way to remind them that you notice and appreciate their work.
  7. Give recognition and small rewards. These two things come in many forms: Give a shout out to someone in a company meeting for what she has accomplished. Run contests or internal games and keep track of the results on a whiteboard that everyone can see. Tangible awards that don’t break the bank can work too. Try things like dinner, trophies, spa services, and plaques.
  8. Throw company parties. Doing things as a group can go a long way. Have a company picnic. Organize birthday parties. Hold a happy hour. Don’t just wait until the holidays to do a company activity; organize events throughout the year to remind your staff that you’re all in it together.
  9. Share the rewards—and the pain. When your company does well, celebrate. This is the best time to let everyone know that you’re thankful for their hard work. Go out of your way to show how far you will go when people help your company succeed. If there are disappointments, share those too. If you expect high performance, your team deserves to know where the company stands. Be honest and transparent.

Agile Project Management

Agile Project Management is an iterative method of determining requirements for engineering development projects in a highly flexible and interactive manner. Several software methods derive from agile, including scrum and extreme programming.

ref:

Blending of Traditional & Agile methods - http://www.pmforum.org/library/tips/2007/PDFs/Hass-5-07.pdf


http://ccpace.com/Resources/documents/AgileProjectManagement.pdf

Java Books

Books

1. "Thinking in Java , 3rd Edition" by Bruce Eckle - http://www.mindview.net/Books/TIJ/

2."'J2EE Web Services: The Ultimate Guide" by Richard Monson-Haefel -http://books.google.com/books?id=NNqmolbaApQC&pg=PA1&dq=j2ee&sig=ACfU3U3-RDn6uGY8QZ6DjYPT_Fb_dSPiKA#PPA885,M1

3. "J2EE Design Patterns" by William Crawford, Jonathan Kaplan -
http://books.google.com/books?id=N_cEwmcSauUC&printsec=frontcover&dq=j2ee&sig=ACfU3U0cgVRY8TUXpZc8TH31xU_4Z_XgRA

4. "Core J2ee Patterns: Best Practices and Design Strategies" by Deepak Alur, John Crupi -
http://books.google.com/books?id=1dx34EMVyi8C&printsec=frontcover&dq=j2ee&sig=ACfU3U34F4XCp2YQSIge-EQHvjjJqQcU9w#PPA11,M1

5. "J2EE and JAX: developing Web applications and Web services" by Michael Yawn -
http://books.google.com/books?id=SK0Im1uI3jsC&printsec=frontcover&dq=j2ee&lr=&sig=ACfU3U3gToC6jT-YLbNQ5WRzKgL7hlmNcQ

6. "Sun Certified Enterprise Architect for J2EE Study Guide (exam 310-051)" by Paul R. Allen, Joseph J. Bambara -
http://books.google.com/books?id=GJRKjnwYJcgC&printsec=frontcover&dq=j2ee&lr=&sig=ACfU3U3qAxMyrwvi8V26J7QYGiwp1vZkDA

7. "Sun Certified Enterprise Architect for J2EE technology study guide" by Mark Cade, Simon Roberts -
http://books.google.com/books?id=qczD49Yc9OoC&pg=PA11&dq=j2ee&sig=ACfU3U3fiZUtuhg0RHFnbFJEz5ZXu8-dlQ#PPP1,M1

8. "Core Web Programming" by Marty Hall and Larry Brown

9. "CodeNotes for J2EE: EJB, JDBC, JSP, and Servlets" by Gregory Brill

Links

1. Open Source Software in Java - http://java-source.net/

2. Open Source Testing Tools in Java -
http://java-source.net/open-source/testing-tools

3. Java/J2EE IDEs Overview -
http://www.devx.com/Java/Article/34009

4. J2EE Interview Questions -
http://www.geekinterview.com/Interview-Questions/J2EE

5. J2EE Overview -
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Overview.html

6. J2EE Overview -
http://www.comptechdoc.org/docs/kanti/ejb/j2eeoverview.html

7. .NET vs J2EE -
http://www.oreillynet.com/pub/a/oreilly/java/news/farley_0800.html

8. Java Desktop GUI -
http://www.javaworld.com/javaworld/jw-04-2004/jw-0426-swtjface.html

9. Java Content Repository(JCR) API -
http://en.wikipedia.org/wiki/Content_repository_API_for_Java

10. Mule -
http://www.mulesource.com/products/mule.php

http://www.theserverside.com/tt/articles/article.tss?track=NL-461&ad=645256&l=COISWithMuleandJCR&asrc=EM_NLN_3809631&uid=3048354

11. JSON -
http://www.subbu.org/weblogs/main/2006/08/json_vs_xml_1.html

12. Ruby Blog :
http://ola-bini.blogspot.com/2008/06/fractal-programming.html

13. Java Interview Questions -
http://www.indijava.in/community/faq/java_interview_questions

14. Runtime Code Generation with JVM & CLR -
http://www.itu.dk/~sestoft/rtcg/rtcg.pdf

15. JVM vs CLR memory allocation - http://benpryor.com/blog/2006/05/04/jvm-vs-clr-memory-allocation/

16. Javascript Engines : WebMonkey(in C) , Rhino(In Java) - http://www.mozillazine.org/

17. Runtime Code Generation with JVM & CLR - http://www.itu.dk/~sestoft/rtcg/rtcg.pdf

18. JVM vs CLR memory allocation - http://benpryor.com/blog/2006/05/04/jvm-vs-clr-memory-allocation/

Virtualization

Virtualization, in computing, is the creation of a virtual (rather than actual) version of something, such as a hardware platform, operating system, a storage device or network resources.
Virtualization can be viewed as part of an overall trend in enterprise IT that includes autonomic computing, a scenario in which the IT environment will be able to manage itself based on perceived activity, and utility computing, in which computer processing power is seen as a utility that clients can pay for only as needed. The usual goal of virtualization is to centralize administrative tasks while improving scalability and work loads
Virtualization is the creation of a virtual (rather than actual) version of something, such as an operating system, a server, a storage device or network resources.
You probably know a little about virtualization if you have ever divided your hard drive into different partitions. A partition is the logical division of a hard disk drive to create, in effect, two separate hard drives.
Operating system virtualization is the use of software to allow a piece of hardware to run multiple operating system images at the same time. The technology got its start on mainframes decades ago, allowing administrators to avoid wasting expensive processing power.
There are three areas of IT where virtualization is making headroads,
  • Network virtualization is a method of combining the available resources in a network by splitting up the available bandwidth into channels, each of which is independent from the others, and each of which can be assigned (or reassigned) to a particular server or device in real time. The idea is that virtualization disguises the true complexity of the network by separating it into manageable parts, much like your partitioned hard drive makes it easier to manage your files.
  • Storage virtualization is the pooling of physical storage from multiple network storage devices into what appears to be a single storage device that is managed from a central console. Storage virtualization is commonly used in storage area networks (SANs).
  • Server virtualization is the masking of server resources (including the number and identity of individual physical servers, processors, and operating systems) from server users. The intention is to spare the user from having to understand and manage complicated details of server resources while increasing resource sharing and utilization and maintaining the capacity to expand later.