Search This Blog

Friday, December 18, 2009

Logger in JSP

Apply log4j within jsp.


Operating system used
Windows XP Home Edition Version 5.1 SP 2

Software prerequisites
Jakarta log tag library
Log4j 1.2.9


1. Download the Jakarta log tag library:

2. Extract this archive file, e.g.: C:\Tools\jakarta-taglibs-log-1.0

The archive contains the following files:


3. Download Log4j 1.2.9:

4. Extract this archive file, e.g.: C:\Tools\logging-log4j-1.2.9

The archive contains serveral files. The most important one is: C:\Tools\logging-log4j-1.2.9\dist\lib\log4j-1.2.9.jar

5. Install Tomcat. Follow guide "Installing Tomcat 4.1.31".

6. Create a simple a Tomcat web application called "demo":

* Create the following directories inside the Tomcat "webapps" directory:

C:\Tools\Tomcat 4.1\webapps\demo
C:\Tools\Tomcat 4.1\webapps\demo\WEB-INF
C:\Tools\Tomcat 4.1\webapps\demo\WEB-INF\classes
C:\Tools\Tomcat 4.1\webapps\demo\WEB-INF\lib

* Copy the tag library descriptor file "taglibs-log.tld" into WEB-INF.

* Copy the tag library JAR file "taglibs-log.jar" into WEB-INF/lib.

* Copy the log4j JAR file "log4j-1.2.9.jar" into WEB-INF/lib.

* Create a web.xml file in the WEB-INF directory:

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

Demonstration log4j usage in jsp


Note: You MUST add a element in the web.xml file:

* Create a file in the WEB-INF/classes directory:

# ***** Set root logger level to DEBUG and its two appenders to stdout and R.
log4j.rootLogger=debug, stdout, R

# ***** stdout is set to be a ConsoleAppender.
# ***** stdout uses PatternLayout.
log4j.appender.stdout.layout.ConversionPattern=%d [%c] %p - %m%n

# ***** R is set to be a RollingFileAppender.
# ***** Max file size is set to 100KB
# ***** Keep one backup file
# ***** R uses PatternLayout.
log4j.appender.R.layout.ConversionPattern=%d [%c] %p - %m%n

The location of the log file is set in:

* Create two jsp files in the C:\Tools\Tomcat 4.1\webapps\demo directory:

File 1: index.jsp

<%@ taglib uri="" prefix="log" %>

Demonstration log4j usage in jsp

Show DEBUG message.
Show INFO message.
Show WARN message.
Show ERROR message.
Show FATAL message.

Message embedded within the open and close tags.

Using category attribute.

The log messages are shown in the Tomcat console and in the
${catalina.home}/logs/demo.log file.

File 2: test.jsp

<%@ page import="org.apache.log4j.Logger" %>

Demonstration log4j usage in jsp

Logger log = Logger.getLogger("com.mobilefish.demo.test");
log.debug("Show DEBUG message");"Show INFO message");
log.warn("Show WARN message");
log.error("Show ERROR message");
log.fatal("Show FATAL message");

The log messages are shown in the Tomcat console and in the
${catalina.home}/logs/demo.log file.

7. (Re)start Tomcat.

8. Access the index.jsp file:


9. The following log messages are shown in the Tomcat console and in the ${catalina.home}/logs/demo.log file.

2006-06-03 17:28:43,379 [root] DEBUG - Show DEBUG message.
2006-06-03 17:28:43,409 [root] INFO - Show INFO message.
2006-06-03 17:28:43,409 [root] WARN - Show WARN message.
2006-06-03 17:28:43,409 [root] ERROR - Show ERROR message.
2006-06-03 17:28:43,419 [root] FATAL - Show FATAL message.
2006-06-03 17:28:43,419 [root] FATAL - Message embedded within the open and close tags.
2006-06-03 17:28:43,419 [root] FATAL - Message passed as an attribute to the tag
2006-06-03 17:28:43,419 [com.mobilefish.demo.index] FATAL - Using category attribute.

10. Access the test.jsp file:


11. The following log messages are shown in the Tomcat console and in the ${catalina.home}/logs/demo.log file.

2006-06-03 17:55:43,379 [] DEBUG - Show DEBUG message.
2006-06-03 17:55:43,409 [] INFO - Show INFO message.
2006-06-03 17:55:43,409 [] WARN - Show WARN message.
2006-06-03 17:55:43,409 [] ERROR - Show ERROR message.
2006-06-03 17:55:43,419 [] FATAL - Show FATAL message.

12. Change the root logger level to WARN in the file and restart Tomcat:

log4j.rootLogger=warn, stdout, R

When the index.jsp page is reloaded in your browser only the following messages are shown:

2006-06-03 17:48:43,409 [root] WARN - Show WARN message.
2006-06-03 17:48:43,409 [root] ERROR - Show ERROR message.
2006-06-03 17:48:43,419 [root] FATAL - Show FATAL message.
2006-06-03 17:48:43,419 [root] FATAL - Message embedded within the open and close tags.
2006-06-03 17:48:43,419 [root] FATAL - Message passed as an attribute to the tag
2006-06-03 17:48:43,419 [com.mobilefish.demo.index] FATAL - Using category attribute.

Monday, December 14, 2009

Different between jdk 1.1 to jdk 1.4 jdk 1.5 jdk 1.6

JDK 1.0 (january 23, 1996) oak
- Initial release

JDK 1.1 (february 19, 1997)
- Retooling of the AWT event model
- Inner classes added to the language
- JavaBeans

J2SE 1.2 (December 8, 1998)

This and subsequent releases through J2SE 5.0 were rebranded retrospectively Java 2 & version name "J2SE"
(Java 2 platform, Standard edition) replaced JDK to distinguish the base platform from
J2EE (java 2 platform, enterprise edition) and J2ME (java 2 platform, micro edition).

- Strictfp keyword
- Reflection
- Swing api integration into the core classes
- JVM equipped with a jit compiler
- Java plug-in
- Java IDL
- An IDL implementation for corba interoperability
- Collections Framework

J2SE 1.3 (may 8, 2000)

- Hotspot jvm included
- JavaSound
- JNDI included in core libraries
- Java platform debugger architecture (jpda)
- RMI was modified to support optional compatibility with corba

J2SE 1.4 (february 6, 2002)
- assert keyword
- Regular expressions
- Exception chaining (allows an exception to encapsulate original lower-level exception)
- Internet protocol version 6 (IPV6) support
- Non-blocking nio (new input/output)
- Logging API
- Image i/o api for reading and writing images in formats like jpeg and png
- Integrated XML parser and XSLT processor (JAXP)
- Integrated security and cryptography extensions (JCE, JSSE, JAAS)
- Java web start

J2SE 5.0 (september 30, 2004) tiger [originally numbered 1.5]
- Generics: provides compile-time (static) type safety for collections and eliminates the need for most typecasts (type conversion).
- Metadata: also called annotations; allows language constructs such as classes and methods to be tagged with additional data, which can then be processed by metadata-aware utilities.
- Autoboxing/unboxing: automatic conversions between primitive types (such as int) and primitive wrapper classes (such as integer).
- Enumerations: the enum keyword creates a typesafe, ordered list of values (such as day.monday, day.tuesday, etc.). Previously this could only be achieved by non-typesafe constant integers or manually constructed classes (typesafe enum pattern).
- Swing: new skinnable look and feel, called synth.
- Var args: the last parameter of a method can now be declared using a type name followed by three dots (e.g. Void drawtext(string... Lines)). In the calling code any number of parameters of that type can be used and they are then placed in an array to be passed to the method, or alternatively the calling code can pass an array of that type.
- Enhanced for each loop: the for loop syntax is extended with special syntax for iterating over each member of either an array or any iterable, such as the standard collection classesfix the previously broken semantics of the java memory model, which defines how threads interact through memory.
- Automatic stub generation for rmi objects.
- Static imports concurrency utilities in package java.util.concurrent.
- Scanner class for parsing data from various input streams and buffers.
- Assertions
- StringBuilder class (in java.lang package)
- Annotations

Java SE 6 (december 11, 2006)
sun replaced the name "J2SE" with java se and dropped the ".0" from the version number.
Beta versions were released in february and june 2006, leading up to a final release that occurred on december 11, 2006.
The current revision is update 14 which was released in may 2009.

- Support for older win9x versions dropped.
- Scripting lang support: Generic API for integration with scripting languages, & built-in mozilla javascript rhino integration
- Dramatic performance improvements for the core platform, and swing.
- Improved web service support through JAX-WS JDBC 4.0 support
- Java compiler API: an API allowing a java program to select and invoke a java compiler programmatically.
- Upgrade of JAXB to version 2.0: including integration of a stax parser.
- Support for pluggable annotations
- Many GUI improvements, such as integration of swingworker in the API, table sorting and filtering, and true swing double-buffering (eliminating the gray-area effect).

Java se 6 update 10

A major enhancement in terms of end-user usability.
- Java Deployment Toolkit, a set of javascript functions to ease the deployment of applets and java web start applications.
- Java Kernel, a small installer including only the most commonly used jre classes. Enhanced updater.
- Enhanced versioning and pack200 support: server-side support is no longer required.
- Java quick starter, to improve cold start-up time.
- Improved performance of java2D graphics primitives on windows, using direct3D and hardware acceleration.
- A new Swing look and feel called NIMBUS and based on synth.
- Next-generation java plug-in: applets now run in a separate process and support many features of web start applications.

Java se 6 update 12
This release includes the highly anticipated 64-bit java plug-in (for 64-bit browsers only), windows server 2008 support,
and performance improvements of java and JAVAFX applications.

Friday, November 6, 2009

Differences between Spyware Adware Malware

Adwares are software applications that are supported by advertisements (Advertising Software). It automatically display advertisement when the software is running. It is one of the way a programmer can offer his application at a reduce cost or even for free. Most of the time, a license can be bought to remove the advertisement permanently.

Spywares are a progression from adwares. In order to provide the user of adwares with more targeted advertisements, various forms of statistics and information on user's activity on the system is tracked and sent to advertising companies. Sometimes these are done under the hood without user's knowledge and consent. Like spying on your habits and activities on your computer. Thus the term spying software.

Malware are malicious software that affects the normal functionality of your system. Sometimes, annoying pop up will appear out of no where to direct you to some sales sites. Sometimes emails spams will automatically be sent from your system. Adware and spyware progress to a malicious state if it start to affect the use of your system actively instead of just showing you passive advertisement.

Wednesday, October 7, 2009

Design Pattern

design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.

Design Pattern Types

creational design patterns are design patterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation. The basic form of object creation could result in design problems or added complexity to the design. Creational design patterns solve this problem by somehow controlling this object creation.

structural design patterns
are design patterns that ease the design by identifying a simple way to realize relationships between entities.

behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.

concurrency patterns
are those types of design patterns that deal with multi-threaded programming paradigm.

Tuesday, October 6, 2009


Ants Problem:
Keep the skin of cucumbers near the place or ant hole.

To get pure and clean ice:

Boil water first before freezing.

To make the mirror shine:
Clean with spirit

To remove chewing gum from clothes:
Keep the cloth in the freezer for an hour.

To whiten white clothes
Soak white clothes in hot water with a slice of lemon for 10 minutes 10

To give a shine to hair:

Add one teaspoon of vinegar to hair, then wash hair.

To get maximum juice out of lemons:
Soak lemons in hot water for one hour, and then juice them.

To avoid smell of cabbage while cooking:

Keep a piece of bread on the cabbage in the vessel while cooking.

To rid the smell of fish from your hands:

Wash your hands with a little apple vinegar.

To avoid tears while cutting onions:
Chew gum.

To boil potatoes quickly:
Skin one potato from one side only before boiling.

To boil eggs quickly:
Add salt to the water and boil.

To check freshness of fish:
Put it in a bowl of cold water. If the fish floats, it's fresh.

To check freshness of eggs:
Put the egg in water. If it becomes horizontal, it's fresh. If it becomes slanting, its 3-4 days old. If it becomes vertical, its 10 days old. If it floats, it's stale.

To remove ink from clothes:

Put toothpaste on the ink spots generously and let it dry completely, then wash.

To skin sweet potatoes quickly:

Soak in cold water immediately after boiling.

To get rid of mice or rats:
Sprinkle black pepper in places where you find mice or rats. They will run away.

To get rid of mosquitoes at night:
Keep leaves of mint near your bed or pillows and in around the room.

Tuesday, September 29, 2009

Best Sentance

Effective leadership is putting first things first. Effective management is discipline, carrying it out.

A cardinal principle of Total Quality escapes too many managers: you cannot continuously improve interdependent systems and processes until you progressively perfect interdependent, interpersonal relationships.

Every human has four endowments- self awareness, conscience, independent will and creative imagination. These give us the ultimate human freedom... The power to choose, to respond, to change.

In the last analysis, what we are communicates far more eloquently than anything we say or do.

It's a fact that more people watch television and get their information that way than read books. I find new technology and new ways of communication very exciting and would like to do more in this field.

Live out of your imagination, not your history.

Management is efficiency in climbing the ladder of success; leadership determines whether the ladder is leaning against the right wall.

Our character is basically a composite of our habits. Because they are consistent, often unconscious patterns, they constantly, daily, express our character.

Public behavior is merely private character writ large.

The key is not to prioritize what's on your schedule, but to schedule your priorities.

The main thing is to keep the main thing the main thing.

There are three constants in life... change, choice and principles.

We are not animals. We are not a product of what has happened to us in our past. We have the power of choice.

We are not human beings on a spiritual journey. We are spiritual beings on a human journey.

We are the creative force of our life, and through our own decisions rather than our conditions, if we carefully learn to do certain things, we can accomplish those goals.

How Google Search Works..

Google Architecture Overview


1. Parse the query.
2. Convert words into wordIDs.
3. Seek to the start of the doclist in the short barrel for every word.
4. Scan through the doclists until there is a document that matches all the search terms.
5. Compute the rank of that document for the query.
6. If we are in the short barrels and at the end of any doclist, seek to the start of the doclist in the full barrel for every word and go to step 4.
7. If we are not at the end of any doclist go to step 4.

Sort the documents that have matched by rank and return the top k.

Monday, September 21, 2009



Attitude makes a lot of difference. If you have a good attitude with required
skills, you are the winner. The following tips may help you.

 Be humble and polite to your co-workers and others.
 Do not criticize anyone. That is not your job.

 Always be professional and do not take any thing personal.
 Be friendly with your opposite sex colleagues and do not get involved
in any sexual litigation

 Do not break the client dress code. It is not a good idea to go to the
office in jeans and sneakers even if they have a casual dress code.
 Light cologne is fine but do not use strong perfume.

 Do not talk loudly when you talk over the phone or to your colleagues.
Talk in a soft and clear voice.
 If you have any dental problems, make a dental appointment with your
dentist. If dental problems go unchecked, they lead to embarrassing
situations involving bad breath. Have breath mints, chewing gum or
peanuts in your desk. Check your breath before talking to your
colleagues personally.

 Wear fresh and neat clothes.
 Always be punctual.

 Complete your assigned task within the time frame. Do not postpone it.
 Do not talk about politics and religion in the office premises.

 If you are invited for a happy hour party or any party try to attend it at
least for some time. That is the best place to know more about your

 Do not play music loudly.
 Be as easy going. Do not get the "tough guy" label.
 Attend meetings regularly.

 Be enthusiastic.
 Try to be helpful to your co-workers.
 Be a good listener. Do not interrupt when someone else is talking.

 Discuss but do not argue.
 Do not lose your credibility

Some tips on behaving in Office

Workplace etiquette involves more than just saying “please” and “thank
you.” When you come to work you, step into a place where being polite
involves a greater expanse of responsibility and thoughtfulness.
When considering different forms of concrete career advice such as how to
present projects to your boss or get ahead, never forget the basics of
working with others. The best career advice you may get will be how to
behave when working in small spaces such as offices. No one wants to
work with someone who cannot follow the unspoken rules of the

Read the following tips to ensure that you aren’t committing any of these
workplace no-no’s.
 Taking Long Breaks – Few things annoy coworkers or supervisors more
than someone who takes extra-long lunch or smoking breaks. If you can
avoid smoking at work altogether, you should. People who do not
smoke may become resentful of the extra time you take to indulge.
When you go out to lunch, make sure you take only the allotted time.
Stretching the time you spend away from your desk makes you look like
you avoid hard work, no matter how productive you are.

 Coming in Late, Leaving Early – No one likes someone who shirks his or
her duties. Even if you complete all of your tasks, you should stay at
work the required amount of time. Coworkers are quick to notice
someone who comes in late and leaves a little early. If you have trouble
getting to work on time, talk to your supervisor about your tardy bad
habit. Always put in at least as much time as the other people in your
workplace, if not more. Be on time and leave on time.

 Talking Loudly – It is not just what you say, it’s how you say it. Try to
keep your conversations between you and the person on the other
end. Everyone at work is trying to do the same thing you are – get his or
her job done. It is hard to concentrate when someone nearby continues
to disrupt the workplace atmosphere with loud conversations, both on
and off the phone. Monitor yourself and your voice. If you know that
you tend to be loud, make a concerted effort to keep it quiet.
 Making a Mess – Your desk should be kept as clean as possible, but
your personal workspace is minor compared to the shared spaces that
are reserved for use by everyone. When you use a conference room or
break area, always clean up after yourself. It is frustrating for those
around you to discover the remains of your salad on the table in the

 Leave Home at Home – Though everyone occasionally must deal with
personal emergencies at work, do your best to leave what is meant for
home at home. If you have children, do not permit them to call you
constantly at the office. Your coworkers will notice and it will likely bother
some of them because it shows that your concentration is not centered
on your tasks and that you take company time for personal issues. The
same rule goes for friends and adult family members. Finally, try to avoid
scheduling doctor appointments or paying bills while at work.

 Think Before you speak – This rule applies to many workplace etiquette
breaches. For example, do not complain about your supervisor in the
lunch area, where he or she may overhear. This faux pas could result in
uncomfortable situations. Similarly, do not gossip about coworkers.
Tensions could easily result. When it is time to talk to your boss about
your progress or evaluation, do so in an appropriate setting, such as a
closed office. You never want to blurt out something that you will regret in
front of the entire office.

 Control your Emotions – It seems that younger employees struggle with
this issue more often. Issues at work may arise from time to time that elicit
strong reactions from you or those around you. Minimize any emotional
response you may have at work. Remember that constructive criticism is
meant to help you and is not personal. Strong emotions may make you
appear out of control, which is an undesirable workplace trait.

 Edit your Email – Review the company email policy and adhere to it. Do
not forward email messages that you receive from friends and family to
coworkers. Never send religious or political emails to people in the office;
it could make people uncomfortable. Do not gossip about or discuss
other people in email, as emails can be sent accidentally to the wrong
person or be intercepted by management. If you do not want others to
read what you have to say, do not send it in an email. Email is a
powerful tool and should be respected, not abused.


At the workplace one really needs to mind one’s manners. Everyone
around you is noticing your every move and you don’t want to get the title
of the boorish one in office. There are unwritten laws in the office that one
must follow whether it is India or anywhere in the world.
First of all hold the door open for ladies and the boss or your older
colleagues. If you are walking past the door first ensure that you do not
leave the door because it will bang into the person coming in behind you.
If you have just joined the office, then follow the behavior of the others. Be
observant and follow what the others are doing.

Secondly, never ever ask personal questions. It is not the accepted thing
professionally. There are times when you might be tempted or out of habit
wanting to do so. But, hold yourself back from it or else you will be avoided
like the plague by your colleagues every time they see you around. You
don’t want to be clubbed the nosy parker.

Remember that people are proud of their names and identify them with it. If
you want to build up rapport try and address the person by their name.
Make it a point to take extra care and effort to pronounce their name
correctly. Try out handy little tricks to remember the person’s name.
Associate with some trait of the person and you will not forget the name the
next time you meet them. Also be careful of the title. Always, address ladies
with Ms. (pronounced as miss). If you are unsure of their marital status this
is a safe thing to do. Never use the first name and the title for instance if the
person’s name is Vivienne Smith, it is wrong to address her as Ms. Vivienne.
The right way is Ms. Smith or Vivienne if you know her well or she has
given you the permission to address her by her first name.

Whenever you encounter anyone be it in the corridor or office or the
elevator greet them with a pleasant and genuine smile. If you know your
colleagues then greet them with a customary good morning or hello.
Always ensure that you use these three words liberally. They are please,
thank you and sorry. Of course apologize only when you need to and not
again and again or else you will sound insincere.

Learn to use your voice discreetly, whether you are talking face to face or
over the phone. No one wants to hear your personal or professional
conversations and get disturbed. Keep your voice low and if you need to
speak loudly get up and move out.

Remember to wear a smile to work every day. It does not cost you
anything but will go on to enlighten the place and add cheer. Also try to
follow some eating etiquette while enjoying your food at office during your

If you are the last person to leave the room, switch off the lights and the air
conditioner and same with your workstation. Once you have finished for
the day make it a point to switch it off.

Thursday, September 17, 2009

Steps Ruby on Watir

step 1:

install ruby first : [ruby 186-27]

For ex:
you install in c:/ruby

place mouse pointer on my computer -> right click -> properties -> advance -> environment variables ->
select path [ edit ] add at last

step 2:
Open command prompt by click Start -> run -> cmd
cd c:\ruby

step 3:
type : "gem install watir" to install watir

c:\ruby> gem install watir

step 4:
create a file with extension .rb , for ex: sample.rb
save it in c:\ruby
go to that dir and type

step 5:
type to run ruby filename.rb

c:\ruby>ruby sample.rb

here is the sample code , open note pad and paste this code "red color text's" and save as sample.rb
which can run and type in text box and click search button

require 'watir'
require 'test/unit'

class TC_article_example < Test::Unit::TestCase
def test_search
browser =
browser.text_field(:name, "q").set("pickaxe")
browser.button(:value, "Google Search").click
assert(browser.text.include?("Programming Ruby: The Pragmatic Programmer's Guide"))

ex link

Tuesday, September 15, 2009

some interesting time management statistics

Emphasising the huge significance and opportunities in time management, a 2007 survey by the Proudfoot Consulting (Guardian 22 Oct 07) covering 2,500 businesses over four years and 38 countries, indicated that wasted time costs UK businesses £80bn per year, equivalent to 7% of GDP. The causes of wasted time - labour inefficiency in other words - were:

* inadequate workforce supervision (31%)
* poor management planning (30%)
* poor communication (18%)
* IT problems, low morale, and lack or mismatch of skills (21%)

Clearly organisations are vastly under-utilising their people, and could be doing a lot more to enable more efficient working.

These failings of organisation and leadership make it all the more important for individual people to think creatively about time management, and particularly to start making changes to improve time management at a personal individual level.

time management 'rocks in bucket' story

time management 'rocks in bucket' story

Use this time management story to show how planning is the key to time management.

Start with a bucket, some big rocks enough to fill it, some small stones, some sand and water.

Put the big rocks in the bucket - is it full?

Put the small stones in around the big rocks - is it full?

Put the sand in and give it a shake - is it full?

Put the water in. Now it's full.

The point is: unless you put the big rocks in first, you won't get them in at all.

In other words: Plan time-slots for your big issues before anything else, or the inevitable sand and water issues will fill up your days and you won't fit the big issues in (a big issue doesn't necessarily have to be a work task - it could be your child's sports-day, or a holiday).

The fisherman story- change management

Friends, When I train for change management, I sometimes employ the following story to illustrate the fallacy of having change for change sake and differences in perception to change. I have found it to facilitate an enjoyable learning experience among the participants.... Here's the story:

A management consultant, on holiday in a African fishing village, watched a little fishing boat dock at the quayside. Noting the quality of the fish, the consultant asked the fisherman how long it had taken to catch them.

"Not very long." answered the fisherman.

"Then, why didn't you stay out longer and catch more?" asked the consultant.

The fisherman explained that his small catch was sufficient to meet his needs and those of his family.

The consultant asked, "But what do you do with the rest of your time?"

"I sleep late, fish a little, play with my children, have an afternoon's rest under a coconut tree. In the evenings, I go into the community hall to see my friends, have a few beers, play the drums, and sing a few songs..... I have a full and happy life." replied the fisherman.

The consultant ventured, "I have an MBA from Harvard and I can help you...... You should start by fishing longer every day. You can then sell the extra fish you catch. With the extra revenue, you can buy a bigger boat. With the extra money the larger boat will bring, you can buy a second one and a third one and so on until you have a large fleet. Instead of selling your fish to a middleman, you can negotiate directly with the processing plants and maybe even open your own plant. You can then leave this little village and move to a city here or maybe even in the United Kingdom, from where you can direct your huge enterprise."

"How long would that take?" asked the fisherman.

"Oh, ten, maybe twenty years." replied the consultant.

"And after that?" asked the fisherman.

"After that? That's when it gets really interesting," answered the consultant, laughing, "When your business gets really big, you can start selling shares in your company and make millions!"

"Millions? Really? And after that?" pressed the fisherman.

"After that you'll be able to retire, move out to a small village by the sea, sleep in late every day, spend time with your family, go fishing, take afternoon naps under a coconut tree, and spend relaxing evenings havings drinks with friends..."

" That's what i,m doing right now", said the fisherman and went his way.

Tuesday, April 14, 2009

Tomcat Version Advantages 4.x 5.x 6.x

Tomcat 4.x

* Released 2001
* implements the Servlet 2.3 and JSP 1.2 specifications
* servlet container redesigned as Catalina
* JSP engine redesigned as Jasper
* Coyote HTTP connector
* Java Management Extensions (JMX), JSP and Struts-based administrations

Tomcat 5.x

* implements the Servlet 2.4 and JSP 2.0 specifications
* reduced garbage collection, improved performance and scalability
* native Windows and Unix wrappers for platform integration
* faster JSP parsing

Tomcat 6.x

* implements the Servlet 2.5 and JSP 2.1 specifications
* support for Unified Expression Language 2.1
* designed to run on Java SE 5.0 and later
* support for Comet through the CometProcessor interface
* is not packaged with an admin console as in past releases

Wednesday, March 25, 2009

Web Service in Java Sample

Go to web-inf\src :

use cp.bat to set classpath.
download the same jar and paste into ur lib folder..

set AXIS_HOME=C:\Tomcat5.0\webapps\axis



just paste into tomcat\webapps

(((( ex 1: ))))

1) create a java program and rename it as filename.jws
2) copy that filename.jws into tomcat\webapps\axis (project-root)
3) re/start tomcat

client run steps:
java CalcClient add 5 5

(((( ex 2: ))))
1) create a java program ""
2) set classpath and compile and place that .class into WEB-INF\classes folder
3) create a deploy.wsdd and undeploy.wsdd file and store into your area
4) run this wsdd cmd into cmd promt (( Note : tomcat server must be in run when u exectue this cmd )))

C:\Tomcat5.0\webapps\axis\WEB-INF\src> java org.apache.axis.client.AdminClient deploy.wsdd

5) restart the tomcat
6) check : http://localhost:8080/axis/servlet/AxisServlet

7) then run client... (change endpoint to point ur myservice)

public class Calculator {
public int add(int i1, int i2)
return i1 + i2;

public int subtract(int i1, int i2)
return i1 - i2;

set AXIS_HOME=C:\Tomcat5.0\webapps\axis
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar;%AXIS_LIB%\servlet-api.jar;
set classpath=".;%AXISCLASSPATH%";




//package samples.userguide.example2 ;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;

import javax.xml.rpc.ParameterMode;

public class CalcClient
public static void main(String [] args) throws Exception {
Options options = new Options(args);

//this is for filename.jws
String endpoint = "http://localhost:" + options.getPort() + "/axis/Calculator.jws";

//this is for service after create C:\Tomcat5.0\webapps\axis\WEB-INF\src> java org.apache.axis.client.AdminClient deploy.wsdd
//String endpoint = "http://localhost:8080/axis/services/MyService";

args = options.getRemainingArgs();

if (args == null || args.length != 3) {
System.err.println("Usage: CalcClient arg1 arg2");

String method = args[0];
if (!(method.equals("add") || method.equals("subtract"))) {
System.err.println("Usage: CalcClient arg1 arg2");

Integer i1 = new Integer(args[1]);
Integer i2 = new Integer(args[2]);

Service service = new Service();
Call call = (Call) service.createCall();

call.setTargetEndpointAddress( new );
call.setOperationName( method );
call.addParameter( "op1", XMLType.XSD_INT, ParameterMode.IN );
call.addParameter( "op2", XMLType.XSD_INT, ParameterMode.IN );
call.setReturnType( XMLType.XSD_INT );

Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });

System.out.println("Got result : " + ret);


Tuesday, March 24, 2009

Tight coupling versus loose coupling

Most large, complex systems are built as small collections of large subsystems instead of as large collections of small, independent subsystems. This is because of the potential for increased performance, security, economy, or some other key property that you can't get by decoupling the system into relatively independent, small elements. The tight coupling characteristics of large-scale systems generally result from optimizing the overall design and from minimizing redundancies and inefficiencies among the system's components. This results in closer coupling among the system's components and large numbers of critical interdependencies.

One disadvantage of tight coupling among a system's components is that failures within the individual components tend to disable the entire system. Loosely coupled Web services are seen as a better alternative; a Web service failure doesn't disable the entire system, provided a failover Web service server is in place.

You can change details in loosely coupled Web services as long as those changes don't affect the functionality of the called Web services. The tight-coupled systems can be difficult to maintain, because changes in one system subcomponent usually require the other subcomponent to adapt immediately.

Loosely coupled Web services require substantial redundancies unlike tight coupling between clients and service, which minimizes redundancies. The listening Web service and the requesting Web service might not trust each other. This means security and trust standards must be added to get both the listener and requester to trust each other. On the other hand, tightly calling and called coupled systems assume that both have the knowledge of what each requires to trust one another.

Monday, March 23, 2009

My exercise like Aghori

I did this with in 2 days of practice, just reverse fill ups and sitting like aghori..

See that Video (see my exercise)

SQL injection

SQL injection is a code injection technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and thereby unexpectedly executed. It is an instance of a more general class of vulnerabilities that can occur whenever one programming or scripting language is embedded inside another. SQL injection attacks are also known as SQL insertion attacks.[1]

Forms of SQL injection vulnerabilities

[edit] Incorrectly filtered escape characters

This form of SQL injection occurs when user input is not filtered for escape characters and is then passed into a SQL statement. This results in the potential manipulation of the statements performed on the database by the end user of the application.

The following line of code illustrates this vulnerability:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

This SQL code is designed to pull up the records of the specified username from its table of users. However, if the "userName" variable is crafted in a specific way by a malicious user, the SQL statement may do more than the code author intended. For example, setting the "userName" variable as

a' or 't'='t

renders this SQL statement by the parent language:

SELECT * FROM users WHERE name = 'a' OR 't'='t';

If this code were to be used in an authentication procedure then this example could be used to force the selection of a valid username because the evaluation of 't'='t' is always true.

While most SQL Server implementations allow multiple statements to be executed with one call, some SQL APIs such as php's mysql_query do not allow this for security reasons. This prevents hackers from injecting entirely separate queries, but doesn't stop them from modifying queries. The following value of "userName" in the statement below would cause the deletion of the "users" table as well as the selection of all data from the "data" table (in essence revealing the information of every user):

a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '%

This input renders the final SQL statement as follows:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';

[edit] Incorrect type handling

This form of SQL injection occurs when a user supplied field is not strongly typed or is not checked for type constraints. This could take place when a numeric field is to be used in a SQL statement, but the programmer makes no checks to validate that the user supplied input is numeric. For example:

statement := "SELECT * FROM data WHERE id = " + a_variable + ";"

It is clear from this statement that the author intended a_variable to be a number correlating to the "id" field. However, if it is in fact a string then the end user may manipulate the statement as they choose, thereby bypassing the need for escape characters. For example, setting a_variable to

1;DROP TABLE users

will drop (delete) the "users" table from the database, since the SQL would be rendered as follows:


[edit] Magic String

The magic string is a simple string of SQL used primarily at login pages. The magic string is


When used at a login page, you will be logged in as the user on top of the SQL table.

[edit] Vulnerabilities inside the database server

Sometimes vulnerabilities can exist within the database server software itself, as was the case with the MySQL server's mysql_real_escape_string() function[2]. This would allow an attacker to perform a successful SQL injection attack based on bad Unicode characters even if the user's input is being escaped.

[edit] Blind SQL Injection

Blind SQL Injection is used when a web application is vulnerable to SQL injection but the results of the injection are not visible to the attacker. The page with the vulnerability may not be one that displays data but will display differently depending on the results of a logical statement injected into the legitimate SQL statement called for that page. This type of attack can become time-intensive because a new statement must be crafted for each bit recovered. There are several tools that can automate these attacks once the location of the vulnerability and the target information has been established.[3]

[edit] Conditional Responses

One type of blind SQL injection forces the database to evaluate a logical statement on an ordinary application screen.

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1

will result in a normal page while

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2

will likely give a different result if the page is vulnerable to a SQL injection. An injection like this will prove that a blind SQL injection is possible, leaving the attacker to devise statements that evaluate to true or false depending on the contents of a field in another table.[4]

[edit] Conditional Errors

This type of blind SQL injection causes a SQL error by forcing the database to evaluate a statement that causes an error if the WHERE statement is true. For example,

SELECT 1/0 FROM users WHERE username='Ralph'

the division by zero will only be evaluated and result in an error if user Ralph exists.

[edit] Time Delays

Time Delays are a type of blind SQL injection that cause the SQL engine to execute a long running query or a time delay statement depending on the logic injected. The attacker can then measure the time the page takes to load to determine if the injected statement is true.

[edit] Preventing SQL Injection

To protect against SQL injection, user input must not directly be embedded in SQL statements. Instead, parameterized statements must be used (preferred), or user input must be carefully escaped or filtered.

[edit] Using Parameterized Statements

In some programming languages such as Java and .NET parameterized statements can be used that work with parameters (sometimes called placeholders or bind variables) instead of embedding user input in the statement. In many cases, the SQL statement is fixed. The user input is then assigned (bound) to a parameter. This is an example using Java and the JDBC API:

PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?");
prep.setString(1, username);
prep.setString(2, password);

Similarly, in C#:

using (SqlCommand myCommand = new SqlCommand("SELECT * FROM USERS WHERE USERNAME=@username AND PASSWORD=HASHBYTES('SHA1', @password)", myConnection))
myCommand.Parameters.AddWithValue("@username", user);
myCommand.Parameters.AddWithValue("@password", pass);

SqlDataReader myReader = myCommand.ExecuteReader())

In PHP version 5 and above, you have multiple choices for using parameterized statements. The easiest is to use the PDO[5] database layer:

$db = new PDO('pgsql:dbname=database');
$stmt = $db->prepare("SELECT priv FROM testUsers WHERE username=:username AND password=:password");
$stmt->bindParam(':username', $user);
$stmt->bindParam(':password', $pass);

Alternatively, you could use a vendor-specific method. For example in MySQL 4.1 and above with the mysqli[6] extension. Example[7]:

$db = new mysqli("localhost", "user", "pass", "database");
$stmt = $db -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");
$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();

In ColdFusion, the CFQUERYPARAM statement is useful in conjunction with the CFQUERY statement to nullify the effect of SQL code passed within the CFQUERYPARAM value as part of the SQL clause.[8] [9]. An example is below.


[edit] Enforcing the Use of Parameterized Statements

There are two ways to ensure an application is not vulnerable to SQL injection: using code reviews (which is a manual process), and enforcing the use of parameterized statements. Enforcing the use of parameterized statements means that SQL statements with embedded user input are rejected at runtime. Currently only the H2 Database Engine supports this feature.

[edit] Using Escaping

A straight-forward, though error-prone way to prevent injections is to escape dangerous characters. One of the reasons for it being error prone is that it is a type of blacklist which is less robust than a whitelist. For instance, every occurrence of a single quote (') in a parameter must be replaced by two single quotes ('') to form a valid SQL string literal. In PHP, for example, it is usual to escape parameters using the function mysql_real_escape_string before sending the SQL query:

$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",

Here is an example of a custom escaping based sql injection filter. It doesn't rely on built in escaping functions:

$title = $_POST['title']; // user input from site
$description = $_POST['description']; // user input from site

// define the cleaner

$dirtystuff = array("\"", "\\", "/", "*", "'", "=", "-", "#", ";", "<", ">", "+", "%");

// clean user input (if it finds any of the values above, it will replace it with whatever is in the quotes - in this example, it replaces the value with nothing)

$title = str_replace($dirtystuff, "", $title); // works!
$description = str_replace($dirtystuff, "", $description); // works!

// input: I\ "like/ green<** veg'et=a-bles> ;and< pizza**
// output: I like green vegetables and pizza

// input: a';DROP TABLE users; SELECT * FROM data WHERE name LIKE '%
// output: aDROP TABLE users SELECT FROM data WHERE name LIKE


This sort of escaping is error-prone as it relies on the programmer to escape every parameter. Also, if the escape function (either custom or built-in in the language) fails to handle a special character correctly, an injection is still possible.

A copy taken from WIKI

Thursday, March 5, 2009

sample dismissal or termination of employment letter

This is a general example of a termination letter. UK employers should refer to the process outlined on the dispute resolution summary page which is law effective from 1st October 2004, and also to the samples of disciplinary action and dismissal hearings letters templates below.

name, address, date, reference

Dear Mr/Ms/etc .........

Further to our meeting of (date) I (regretfully) confirm that your employment with us is terminated with effect from (date)/with immediate effect.

As stated at our meeting the reason(s) for terminating your employment with us is/are as follows:

* (Employer must clearly state reasons - transgressions and relevant policies if applicable)
* (Employer must clearly state previous warnings, informal, formal, written etc., and circumstances and person's response and subsequent behaviour/performance for each warning.)

(Clearly state requirements regarding return of documentation, equipment, car, submission of final expenses claims, and any other leaving administration issues.)

(Clearly state actual leaving date, requirement or otherwise to serve period of notice, holiday pay, and other pay and pension details.)

(Clearly state the position regarding the employee's right of appeal, and state the appeal process and timescales.)

(Optional sign-off, for example: Thank you for your past efforts and all the best for your future endeavours.)

Yours, etc.

name and position

(Optionally and recommended: attach, at the foot of the letter refer to, a copy of your written disciplinary process, and also attach and refer to copies of written/printed evidence gathered during the employee's case. This enables employees to understand clearly the case against them, and also the process and their rights during the disciplinary process, which are central to the principles of the employment dispute regulations.)

(Optional section at foot of letter, requiring person to sign, confirming receipt of the letter and any attachment(s), by way of returning a signed copy of this letter.)

Tuesday, February 24, 2009

Hosting more than a .NET remoting singleton server in the same process

I had the need of having three different singleton remoting object in the same process.
This post explains how I solved out the trick.

I have a windows application exposing via remoting three singleton objects, let' call them "S_a", "S_b" and "S_Main" .

"S_a" and "S_b" are instantiated by remote client applications.
"S_Main" object is instantiated by "S_a" and "S_b".
"S_a", "S_b" and "S_Main" resides on the same process, as I told before.
"S_a" and "S_b" are WellKnownServiceTypes.
"S_Main" is to be both a WellKnownServiceType (this is inside the server-application code where a port is open in listening mode) and a WellKnownClientType when configuring "S_a" and "S_b" for its instantiation (i.e inside "S_a" and "S_b" class definition there will be a point in which we say that "S_Main" is not a local object and is to be instantiated via remoting at a certain URL).

Triing to configure remoting in this way, leads to the generation of the Exception:
"Remoting configuration failed with the exception System.Runtime.Remoting.RemotingException"

"Attempt to redirect activation for type" [...]
"This is not allowed since either a well-known service type has already
been registered with that type or that type has been registered has a
activated service type"

The solution is to have the three singletons in three different appdomains hosted in the same windows process.

First thing to setup is to have three assemblies every one exposing a method which will configure remoting server-side for a single singleton. The classes inside these assemblies must inherit MarshalByRefObject.
In this way instantiating these three classes and calling the method on them, will open three ports in listening mode.

Every assembly is to be loaded in a different appdomain. In this way, inside the "S_A_AppDomain" (and also in "S_B_AppDomain") the "S_Main" object is configured as a WellKnownClientType, while in the S_Main_AppDomain it is configured as a WellKnownServiceType.
AppDomains provide proper isolation.

An Appdomain is created in this way:

Dim domaininfo As New AppDomainSetup
domaininfo.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory

dim S_A_Domain As AppDomain = _
AppDomain.CreateDomain("S_A_RemotingServer", Nothing, domaininfo)
Here is the code used to load an assembly (ex: "Assembly.dll") inside the appdomain, instantiate the class (ex: "namespace.classname", which will reside in the newly created appdomain) and invoke the method that will configure remoting server-side (ex: "ActivateServer") :

Dim ann As [Assembly] = [Assembly].LoadFrom("Assembly.dll")

'Load the assembly in the appdomain
Dim a As [Assembly] = S_A_Domain.Load(ann.FullName)

'Create an instance (on the new appdomain)
Dim obj As Object = S_A_Domain.CreateInstanceAndUnwrap(ann.FullName, "namespace.classname")

'Get the type to use.
Dim myType As Type = a.GetType("namespace.classname")
'Get the method to call.
Dim mymethod As MethodInfo = myType.GetMethod("ActivateServer")

'Execute the method.
mymethod.Invoke(obj, Nothing)

The method is invoked in the instance of the class which resides in the separate appdomain, configuring remoting.

Events between .NET Remoting wellknown objects

Suppose we have two Wellknown singleton remoting objects.
the former is instantiated by the latter, and sends events to it.

Let's call S_A and S_B the two wellknown remoting objects.
These object reside on two different appdomains. S_B is instantiated by S_A.
S_B is the source of events, and S_A has to receive them.
Note that S_A is a wellknown on his turn.

After S_B is instantiated in S_A, an exception is thrown:

Wellknown objects cannot marshal themselves in their constructor, or perform
any action that would cause themselves to be marshalled (such as passing the
this pointer as a parameter to a remote method)

The error happens at runtime, either when a handler is added for an S_B event or as soon as S_B is instantiated.

To understand why this happens, a first resume of how events works is useful.
Events are simple to use. What happens behind the curtains, is that a function is called on the target (the object handling the event -S_A-) by the sender of the event (S_B).

Since we are talking about wellknown server objects, what happens when S_B sends an event to S_A, is:
the remoting server (S_B) becomes a client of S_A (in fact S_B is calling a function on S_A) .

The exception is thrown because the wellknown object S_B is a SERVER fof S_A, so it is not allowed to use it as also as CLIENT. This is not allowed by remoting. It is allowed elsewhere.

Create a new class (C_C). Inside this class instantiate the wellknown S_B and receive his events here. S_A will instantiate C_C and receive events from it. C_C can become a client of S_A without problem since it is not a wellknown object.

Wednesday, February 4, 2009

History of Computer with rare photos

Computer Science Lab

An Illustrated History of Computers

Part 1


John Kopplin © 2002

The first computers were people! That is, electronic computers
(and the earlier mechanical computers) were given this name because they
performed the work that had previously been assigned to people.
"Computer" was originally a job title: it was used to describe
those human beings (predominantly women) whose job it was to perform the
repetitive calculations required to
compute such things as navigational tables, tide charts, and planetary
positions for astronomical almanacs. Imagine you had a job where hour after
hour, day after day, you were to do nothing but compute multiplications.
Boredom would quickly set in, leading to carelessness, leading to mistakes. And
even on your best days you wouldn't be producing answers very fast. Therefore,
inventors have been searching for hundreds of years for a way to mechanize
(that is, find a mechanism that can perform) this task.

This picture shows what were known as "counting tables" [photo courtesy IBM]

A typical computer operation back when computers were people.

The abacus was an early aid for mathematical computations. Its only
value is that it aids the memory of the human performing the calculation. A skilled
abacus operator can work on addition and subtraction problems at the speed of a
person equipped with a hand calculator (multiplication and division are
slower). The abacus is often wrongly attributed to China. In fact, the oldest
surviving abacus was used in 300 B.C. by the Babylonians. The abacus is still
in use today, principally in the far east. A modern abacus consists of rings that
slide over rods, but the older one pictured below dates from the time when
pebbles were used for counting (the word "calculus" comes from the
Latin word for pebble).

A very old abacus

A more modern abacus. Note how the abacus is really just a representation
of the human fingers: the 5 lower rings on each rod represent the 5 fingers
and the 2 upper rings represent the 2 hands.

In 1617 an eccentric (some say mad) Scotsman named John Napier invented
logarithms, which are a technology that allows multiplication
to be performed via addition. The magic ingredient is the logarithm of each
operand, which was originally obtained from a printed table. But Napier also
invented an alternative to tables, where the logarithm values were carved on
ivory sticks which are now called Napier's Bones.

An original set of Napier's Bones [photo courtesy IBM]

A more modern set of Napier's Bones

Napier's invention led directly to the slide rule, first built
in England in 1632 and still in use in the 1960's by the NASA engineers of
the Mercury, Gemini, and Apollo programs which landed men on the moon.

A slide rule

Leonardo da Vinci (1452-1519) made drawings of gear-driven calculating machines
but apparently never built any.

A Leonardo da Vinci drawing showing gears arranged for computing

The first gear-driven calculating machine to actually be built was
probably the calculating clock, so named by its inventor, the
German professor Wilhelm Schickard in 1623. This device got little publicity
because Schickard died soon afterward in the bubonic plague.

Schickard's Calculating Clock

In 1642 Blaise Pascal, at age 19, invented the Pascaline as an
aid for his father who was a tax collector. Pascal built 50 of this gear-driven
one-function calculator (it could only add) but couldn't sell many because of their
exorbitant cost and because they really weren't that accurate (at that time it
was not possible to fabricate gears with the required precision). Up until the
present age when car dashboards went digital, the odometer portion of a car's
speedometer used the very same mechanism as the Pascaline to increment the next
wheel after each full revolution of the prior wheel. Pascal was a child
prodigy. At the age of 12, he was discovered doing his version of Euclid's
thirty-second proposition on the kitchen floor. Pascal went on to invent
probability theory, the hydraulic press, and the syringe. Shown below is an
8 digit version of the Pascaline, and two views of a 6 digit version:

Pascal's Pascaline [photo © 2002 IEEE]

A 6 digit model for those who couldn't afford the 8 digit model

A Pascaline opened up so you can observe the gears and
cylinders which rotated to display the numerical result

Click on the "Next" hyperlink below to read about the punched card system
that was developed for looms for later applied to the U.S. census
and then to computers...

Computer Science Lab Next

History of Computer

8-Bit Operating Systems (Armory.Com)

Classic 8-bit Computers


A Brief History of Computers and Networks (GoldenInk.Com)

A Chronology of Computer History (Cyberstreet.Com)

A Chronology of Personal Computers (kpolsson -

A Few Quotes from Silicon Valley History

A Journey Through the History of Information Technology

Photos: History of Computing Information

Artificial Intelligence, History of

A Timeline of Computer and Internet History


The Abacus  ( Good pictures, overview, brief history, definition, counting boards, bibliography, and links for further study)



Howard Hathaway Aiken and the Mark I

Howard Aiken: Makin' A Computer Wonder

Howard Hathaway Aiken, Computer Pioneer

Howard Aiken's Harvard Mark I

ALTAIR Computer

Altair 8800 (Wikipedia)

Introduction The Revolution Begins (David Bunnell)

The Altair 8800 and Ed Roberts

Altair History (

Early History of the Personal Computer (by Thayer Watkins at San Jose State University)

Brief History of the Altair (

The Virtual Altair Museum"

Ed Roberts Interview (

What Good is a Computer Without Software? (

How the Personal Computer Was Born (

Looking Back on Nearly Three Decades of Personal Computing (by Forrest M. Mims III)

Ed Roberts and the MITS Altair

How the Altair Began (by Stan Veit, the Computer Editor of Popular Electronics Magazine)

Chronology of Personal Computers 1975

Open Letter to Hobbyists from Bill Gates, February 3, 1976

PDF copy of An Open Letter To Hobbyists

Ramblings From Ed Roberts, March 1976



The Analytical Engine, Table of Contents

Analytical Engine/Babbage


Apple Computer history (

Steve Jobs Information Page

Making the Macintosh (

The Apple Museum (

Books on Apple History

MacPicks (Mac News, Reviews, E-zines)


ARPA, Forerunner of ARPANET and the Internet

ARPA: The Early Days of ARPA, Forerunner of the Internet


The John Vincent Atanasoff Virtual Archive

Iowa State University Department of Computer Science, birthplace of the electronic digital computer.

Atanasoff Biography (Hien Chris Do)

Washington Post Obituary

Secret of a Genius: Drive Fast and Don't Look Back
(This is an article about John Atanasoff.)

Inventors of the Modern Computer
This article from the Minining Company discusses the Atanasoff-Berry Computer,
John Vincent Atanasoff, and Clifford Berry.


Reconstruction of the Atanasoff-Berry Computer
(Article from Ames Lab)

ABC Public Showings: November 1996 and October 1997



Pioneers: Charles Babbage
Charles Babbage Biographical Notes

The Babbage Pges: Biography

Babbage's Analytical Engine

Charles Babbage Institute (U. of Minn.)

Charles Babbage - Bibliographical notes

Picture of Charles Babbage (


Biography of John Backus  Leader of the team that
developed Fortran programming language

John Backus, Recipient of Alan M. Turing Award



Gordon Bell Microsoft Bay Area Research Center; worked on design of PDP-6 at DEC, an antecedent of the PDP-10, one of the first mPs and the first time-sharing computer.

MyLifeBits Project: Vannevar Bush's 1945 Memex Vision Fulfilled


George Boole - Genius of Lincoln (Roger Parsons)

The Calculus of Logic by George Boole (

Papers by George Boole ( - University Library County Cork, Ireland)

George Boole Invents Boolean Algebra

George Boole, Biographical Notes (

BRICKLIN, DANIEL (Co-Creator of VisiCalc)

Daniel Bricklin, First Spreadsheet,VisiCalc

Daniel Bricklin's Web Page

Daniel Bricklin Biography, Long Form


BUNNELL, DAVID (Altair, MITS, PC Mag., PC World, MacWorld)

The Third Culture: David Bunnell (

Prosumer Media

Upside Tech Magazine's Downside (S.F. Chronicle)



As We May Think (by permission of
Article of 1945 by Vannevar Bush

Vannevar Bush Biographical Notes (

Vannevar Bush (


Ada Byron (, contributed by Dr. Betty Toole)

Ada's Notes Contributed by Dr. Betty Toole, Yale.Edu

The Birth of the Computer Revolution

Pictures of Lady Augusta Ada Byron, Countess of Lovelace


Calculator Reference, Research Page

Chronology of Computer History (

Chronology of Personal Computers (Ken Polsson)

Computing Science, History of

Computers: From the Past to the Present

C++ Programming Language

History of the C++ Programming Language (

History of C++ (


Timeline History of Calculators


CERF, VINTON G. Co-inventor of TCP/IP Protocol for the Internet

ICANN Biographical Notes about Vinton G. Cerf

Vint's Personal Home Page Read about the first 35 years of the "Internet"

How the Internet Came to Be as told by Vinton Cerf

Vinton G. Cerf (

Vinton G. Cerf (Wikipedia page)

Vinton Cerf on the future of e-mail (ComputerWorld: 2001 article)

From Inventing the Enterprise: Vinton G. Cerf (


CODD, EDGAR F. Database Pioneer, Key Theorist of Databases

Edgar Codd, Database Pioneer, Dead at 79 (

Edgar Codd, Key Theorist of Databases Dies at 79 in Florida


The Colossus Rebuild Project (

The Colossus Rebuild Project (

Lorenz Ciphers and the Colossus

1940-1944 The Colossus

Colossus Electronic Programmable (to a limited extent) Computer

Colossus Computer


Computer Conservation Society

Computer Conservation Society


DIJKSTRA, EDSGER WYBE Mathematician, Computer Scientist,
  Shortest Path Algorithm, Computer Programmer, Educator

Biographical Notes: Edsger W. Dijkstra (

Edsger Dijkstra, The shortest-path algorithm

Dijkstra's Algorith (

E. W. Dijkstra Archive (

Dijkstra's Algorith (

GoTo Statement Considered Harmful by Edsger Dijkstra, 1968;
   Article began the structured programming movement.

How Do We Tell Truths that Might Hurt? by Edsger Dijkstra, 1975:
  On old problems in programming

Edsger Dijkstra on universities

Edsger Dijkstra:RIP (death notice)



Mona Lisa, Digital Image from 1965

A Brief History of Digital Imaging



J. Presper Eckert Interview

The Eckert/ENIAC Collection



AUGMENTING HUMAN INTELLECT: A Conceptual Framework A summary report prepared by Douglas C. Englebart for the Air Force Office of Scientific Research, October 1962.

Original Computer Mouse Patent

Computer Mouse Demo (video info.)

Facts About the Invention of the Computer Mouse

The Computer Mouse

The Mousesite - a resource for exploring the history of human computer interaction beginning with the pioneering work of Douglas Engelbart and his colleagues at Stanford Research Institute in the 1960s.


The ENIAC Story (

A Report on the ENAIC (

ENAIC - The Army Sponsored Revolution (

John W. Mauchly and the Development of the ENIAC Computer (

The Eniac (

ENIAC Computer Invention (

Jean Bartik, The First ENIAC Programmer



Networking With Ethernet (



Fibonnaci Numbers

Fibonnaci Numbers Definition

Fibonnaci Numbers and the Golden Section

-F, G-

First, Second, Third, and Fourth Generation Computers
Features of each generation are discussed.


Google.Com's Computer History Links

Great Microprocessors of the Past and Present

Greatest Engineering Achievements of the 20th Century


An Open Letter To Hobbyists, by Bill Gates

Bill Gate's Web Page at Microsoft

Bill Gates: Biog. notes and p;icture

The "Unofficial" Bill Gates page

Focus Magazine's Interview with Bill Gates

Bill and Melinda Gates Foundation

An Open Letter to Hobbyists - by Bill Gates, 1976 (

William H. Gates III Before Microsoft

Bill Gates Wealth Index


Roanoke Times Article about Jack Good, a memeber of the team that broke the ENIGMA code during WWII

Irving John (Jack) Good Cryptologist, statistician


Al Gore's Support of the Internet
    by Robert E. Kahn and Vinton G. Cerf

Gore to Get Lifetime Award for Internet

Gore Never Did Claim That He Invented the Internet

GOSLING, JAMES wrote the Java programming language
From Inventing the Enterprise: James Gosling (

James Gosling, On the Java Road

Java - James Gosling (


Graphical User Interface

Graphical User Interface

History of the Graphical User Interface

Graphical User Interface, GUI (

Mac OS X

Aqua Human Interface Guidelines (

GUI Gallery

The History of Graphical User Interfaces


Historic Computer Images (

History of Computers Article by

History of Computer Viruses and Attacks (

History of Computing (
A compiled directory of categorical links.

History of Computing: Virtual Museum of Computing (VMoC)
This site is a virtual museum which includes an eclectic collection of WWW hyperlinks connected with the history of computing and on-line computer-based exhibits.

History of the Internet (Roads and Crossroads of Internet History (Gregory Gromov's site)

History of the Web Beginning at CERN


Grace Hopper

The Wit and Wisdom of Grace Hopper

Inventing the Enterprise: Grace Murray Hopper (


Hewlett-Packard, History -- Founding Fathers

The Making of Hewlitt-Packard

Dave Packard's 11 Simple Rules


IEEE Annals of the History of Computing

Internet History: Roads and Crossroads of Internet History (Gregory Gromov)


IBM Vintage Personal Computers


IEEE/ISTO Industry Standards and Technology Organization

IEEE Computer Society Home Portal

IEEE Computer Society History of Computing

IEEE Annals of Computer History

IEEE 802.11b - Wireless Ethernet Article by Al Petrick, Vice Chairman of the IEEE 802.11 Standards Committee

Internet Explorer

The History of Internet Explorer



Jacquard's Web: How a Hand Loom Led to the Birth of the Information Age
 by James Essinger. Read about this book at

Jacquard Loom

The Jacquard Loom (

Jacquard's Punched Card

Industrial Revolution: Timeline of Textile Machinery

Biographical Note on Joseph-Marie Jacquard

Biography of Joseph-Marie Jacquard


Steve Paul Jobs Bio.


KAHN, ROBERT E (co-inventor of TCP/IP Technology for Internet)

Robert E. Kahn Biographical Notes

Robert E. Kahn Awarded National Medal of Technology




Leonard Kleinrock Biography: The Birth of the Internet (
Leonard Kleinrock was the inventor of the Internet technology known as packet-switching.

Leonard Kleinrock's home page



Gottfried Wilhelm Leibnitz (1646-1716)


Man-Computer Symbiosis by J.C.R. Licklider (PDF file,

The Computer as a Communication Device (PDF file,

by J.C.R. Licklider and Robert Taylor (of ARPA)

JCR Licklider (

J.C.R. Licklider Biography (

J.C.R. Licklider (

Six degrees of J.C.R. Licklider traces computer evolution (St.Louis Post Dispatch/

J.C.R. Licklider in Memoriam (

The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal (book, by M. Mitchell Waldrop -- see book site)


Mind Machine Museum (



John W. Mauchly and the Development of the ENIAC Computer


From Inventing the Enterprise: Robert M. Metcalf (

Ethernet (

Ethernet PDF Paper: IEEE 802.3



(See also: Englebart, Douglas)

The Mouse Site



Project Xanadu
The original hypertext project...

Ted Nelson home page


Notes About Kristen Nygaard





Past Notable Women of Computing and Mathematics

PC Computers, Pre-IBM

Pioneers (Wired Magazine's List of Pioneers of Computing)

Pioneers of Computing


Blaise Pascal Quotes to Inspire You

Blaise Pascal Biography

PDP Computers

What is a PDP? (Ken Olson/DEC)

PDP-8 (

PDP-11 History (




Dennis Ritchie Home Page

Interview with Dennis M. Ritchie

Dennis M. Ritchie timeline

Dennis M. Ritchie: From Inventing the Enterprise


Shareware, History of

Silicon Valley History (

Smithsonian Institute's Computer History Collection


Shortest Path Algorith

See Dijkstra, Edsger


George R. Stibitz, Computer Inventor (1904-1995)

George R. Stibitz in Inventors Hall of Fame

George R. Stibitz Curriculum Vitae

George R. Stibitz, Biography

George R. Stibitz, 1904-1995



System R (

System R led to the introduction of the SQL language


Tech. History (

The Charles Babbage Institute
This is located at the University of Minnesota
Many computer subjects including the history of computers...

The Evolution of the Computer

The History of Shareware

The IEEE Annals of the History of Computing

The Revolutionaries

The Smithsonian Computer History and Information Technology

Timeline: The History of Computers (

Well done! Events influencing the history and development of computing.

Tools for Thought (Howard Rheingold)



The Alan Turing Home Page

Alan Mathison Turing (1912-1954)

Alan Turing and COLOSSUS



Univac Memories (

Book: The Unsung Heroes of the PC Age


Virtual Museum of Computing

Viruses: History of Computer Viruses

Wearable Computing at

What was the first computer and who built it?"

Wired Magazine:Browse by Person
This is a list not to be missed. Enjoy.


John Lewis von Neumann (1903-1957)

John von Neumann

(Click on hardware in the background of this next reference)

von Neumann Digital Computer



Dr. An Wang (Magnetic Core Memory) (

An Wang, Hall of Fame Inventor Profile

Book: Dr. an Wang Computer Pioneer

The Doctor and His Calculators

About Wang

An Wang: The Core of the Computer Era

Wang system photos

Photo 1968 Wang Calculator

Wang 363E Calculator

Wang BASIC vs. Microsoft BASIC



Maurice Vincent Wilkes (

Maurice Vincent Wilkes, Brief Biography


Niklaus Wirth (

Niklaus Wirth was the inventor of Pascal, and other languages.


Steven Wozniak Bio. (

Official Website of the "WOZ"

Apple Computer history



Project Xanadu
The original hypertext project...

Xanadu Australia: Problem Definition

Xanadu Secrets Become Udanax Open-Source (1999)

Marc Steigler's 1989 Article Published in the February 1990 Edition of Unix Review is about Hypertext Publishing





Konrad Zuse
(Use the search engine at this next site to put in the name of Konrad Zuse, in order to navigate to this topic.)

A photograph of Konrad Zuse

Konrad Zuse's Z3 Computer

Konrad Zuse And His Computers

Hit Counter

View My Stats