New Technologies

  • Java
  • Javascript
  • DTML
  • Dot Net
  • ASP .Net
  • C# .Net
  • PHP
Your Ad Here

Thursday, August 13, 2009

How Can One Benefit From A Large Twitter Following?

Some of Twitter's 12.8 million active users will benefit handsomely for building a larger Follower's list, while other people will not.

It is pointed out by
@web2marketer, "It's not about how many Twitter followers you have...the only thing that matters is - are they listening?"

This is the key, of course.

Some people build huge lists of Followers, but don't say anything worthwhile or interesting. Some are only interested in building their Followers list for the sake of building Followers.

If no one wants to listen to what you have to say, it does not matter whether you have 1 Follower or 2.9 million Followers. If no one is "listening" to what you have to say, you will not make any money from your participation in Twitter.

On the other hand, if people are "listening" to what you have to say and "clicking" the links you tell them to click, then you have a good chance of earning real money as a result of your Twitter activities.

It has been said that the consumer needs to see or hear your name or your marketing message 7 times, before they will trust you enough to buy from you. Professionals in the direct marketíng industry suggest that 82% of all consumers (business people or otherwise) will buy your products or services on the second to the ninth exposure to your marketing message.

Twitter allows you to carry a continuous dialog with those most likely to buy what you are selling - through the Public Timeline of the people following you in Twitter. Once people have started to pay attention to what you tell them, and once they start absorbing your marketing message, then gaining your Followers trust is made easier. Once people are listening to you, you can earn their trust fairly quickly.

An idea presented by @contentmanager is that television has had 80+ years to perfect its advertising model. Television seems committed to the concept of 42 minutes of content to anchor 18 minutes of advertising. These numbers translate into
70% content to provide an anchor for its 30% advertising. In context, he says that the 70% content is designed to attract attention and win trust, and then the 30% advertising is designed to earn profíts and cover the costs of building content.

Understand That It Is A Numbers Game

As a successful Twitter marketer, your first goal is always to attract Followers (an audience). Your second goal is to win the trust of your Followers (your viewing audience). Only after you have earned the trust of your Followers should you endeavor to advertise to your Twitter Followers list (to earn revenue). If you have earned the trust of your Twitter Followers, revenue is certain to follow.

But, as with anything in business, it is a numbers game. A certain percentage of the number of people exposed to your Twitter profile will become Followers. A certain percentage of those people following you, will actually read what you have to say. A certain percentage of those people will click your links. And if that link leads to a page where you can earn revenue, only a certain percentage of people will buy your pitch.

For most people, the only certainty is that they need to grow their audience, and in the case of the Twitter community, they need to grow their list of Twitter Followers. In the numbers game, if you can build up your audience, you can boost your revenue. It is as simple as that.

Understanding The Value Of The Twitter Community

In March of 2008, Twitter was estimated to have one million active users, according to Michael Arrington of TechCrunch. But amazingly, over the course of the following year, Twitter was able to expand its user base by 32-37 times, according to which news source you trust for your data.

On July 30th 2009, the
Philadelphia Enquirer reported that Twitter had "increased its user base by 37-fold to more than 32 million users worldwide, 18-20 million of whom reside in the United States".

Now, the naysayers are fond of pointing out that Twitter's attrition rate is quite large, with 60% of new users disappearing after signing up for the service. But if the Philadelphia Enquirer's estimation is correct that "only 40 percent of first-timers become habitual visitors", then the remaining 12.8 million users still make a viable and vibrant Twitter community.

Each individual user inside the Twitter community is capable of building his or her own community of Followers.

As Ashton Kutcher has taught us, building a Follower list is fairly straight forward - when people are interested in you and what you have to say, they will follow you on Twitter to see what you have to say.

To date, nearly 3 million Twitter users have decided that they care enough about Kutcher's life to follow his personal tweets. Of course, I am sure it helps that he occasionally
posts pictures of his wife, Demi Moore, in his tweets. Not only did Kutcher share a shot of his Demi's derriere, he also proved that rich people have ugly furniture too.

How to Build a Profitable Twitter Profile

Twitter is one of the fastest growing marketplaces on the Internet. The reason why so many people like Twitter is because it is actually the perfect communication tool for people who don't understand and don't want to learn about Internet technology and the technological geek-speak that goes along with it.

A few years back, I asked someone for his dad's email address. The son replied telling me that you just email his name. The son was clueless that there was an actual email address behind the shortcut for his dad's name. He did not understand email, and he did not care that he did not understand it. He was able to use it in a manner that was easy for him, and that is all that really mattered.

What makes Twitter so popular to the masses is that one does not have to be tech-savvy to use the service. The new user simply needs to locate the profile of the person he or she wants to follow, and then the user simply clicks "Follow". From that day forward, anytime the person "Followed" posts (tweets) new information to his or her micro-blog, Followers will be notified about the message in the Twitter Timeline.


The only thing that is really difficult about Twitter is that new people seldom understand that they must "Follow" someone, before they start to receive messages from others. But once someone has chosen to follow a few people, they get the idea behind Twitter very quickly.

With its' system of 140 character micro-posts (referred to as "tweets"), users are able to communicate information to other users. Sometimes the tweeted info is a random comment, but often the tweets mean something to somebody.

For the average consumer, they can log into Twitter to update grandma about the lives of the grandchildren and to provide links to family pictures.

Although the service has been available since 2006, the Internet marketing community was really slow to catch on to the value of the Twitter community. Most Internet marketers hadn't heard of Twitter until 2008. Even then, online marketers were slow to see any real value in the platform. But in 2009, Twitter finally hit its stride in getting the word out about its service, in large part due to the Ashton Kutcher vs. CNN Twitter Follower Challenge.

Ashton Kutcher (@aplusk) challenged CNN (@cnnbrk) to a race to one million Twitter Followers. On April 17th, 2009, Ashton became the first Twitter user to reach one million followers. CNN passed the mark a few hours later, but Ashton won the race fair and square.

Uploading Files with a Multipart POST

Uploading Files with a Multipart POST

11.9.1. Problem

You need to upload a file or a set of files with an HTTP multipart POST.

11.9.2. Solution

Create a MultipartPostMethod and add File objects as parameters using addParameter( ) and addPart( ). The MultipartPostMethod creates a request with a Content-Type header of multipart/form-data, and each part is separated by a boundary. The following example sends two files in an HTTP multipart POST:

               import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpException;

import org.apache.commons.httpclient.methods.MultipartPostMethod;

import org.apache.commons.httpclient.methods.multipart.FilePart;

HttpClient client = new HttpClient( );


// Create POST method

String weblintURL = "";

MultipartPostMethod method =

    new MultipartPostMethod( weblintURL );

File file = new File( "data", "test.txt" );

               File file2 = new File( "data", "sample.txt" );

               method.addParameter("test.txt", file );

               method.addPart( new FilePart( "sample.txt", file2, "text/plain",

"ISO-8859-1" ) );

// Execute and print response

client.executeMethod( method );

String response = method.getResponseBodyAsString( );

System.out.println( response );

method.releaseConnection( );

Two File objects are added to the MultipartPostMethod using two different methods. The first method, addParameter( ), adds a File object and sets the file name to test.txt. The second method, addPart(), adds a FilePart object to the MultipartPostMethod. Both files are sent in the request separated by a part boundary, and the script echoes the location and type of both files on the server:

<h3>Form input</h3>


sample.txt = /tmp/CGI14480.4 sample.txt {text/plain; charset=ISO-8859-1}

test.txt = /tmp/CGI14480.2 test.txt {application/octet-stream;



11.9.3. Discussion

Adding a part as a FilePart object allows you to specify the Multipurpose Internet Main Extensions (MIME) type and the character set of the part. In this example, the sample.txt file is added with a text/plain MIME type and an ISO-8859-1 character set. If a File is added to the method using addParameter( ) or setParameter( ), it is sent with the default application/octet-stream type and the default ISO-8859-1 character set.

When HttpClient executes the MultipartPostMethod created in the previous example, the following request is sent to the server. The Content-Type header is multipart/form-data, and an arbitrary boundary is created to delineate multiple parts being sent in the request:

POST /cgi-bin/cgi.tcl/echo.cgi HTTP/1.1

User-Agent: Jakarta Commons-HttpClient/3.0final


Content-Length: 498

Content-Type: multipart/form-data; boundary=----------------31415926535



Content-Disposition: form-data; name=test.txt; filename=test.txt

Content-Type: application/octet-stream; charset=ISO-8859-1

Content-Transfer-Encoding: binary

This is a test.


Content-Disposition: form-data; name=sample.txt; filename=sample.txt

Content-Type: text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: binary

This is a sample


Each part contains a Content-Disposition header to name the part and a Content-Type header to classify the part with a MIME type and character set.


Monday, August 3, 2009

Online subscription to RSS feeds using Google Reader.

we can subscribe and manage to RSS feeds using Google feature Google Reader.
In this the trends is very useful feature.
and we can categorise and share with other friends.
Post images in Tweeter

How do I create a Twitpic account?
If you have a Twitter account then you already have a Twitpic account, just login to Twitpic with your Twitter username and password and you are all set.

If you don't have a Twitter account you can sign up for one for free at
How do I delete a photo?
1. Login to Twitpic
2. Click the "Home" link at the top of the page, this will take you to your photo stream
3. Click the trash can icon () next to the photo you wish to delete
How do I delete a comment on my photo?
1. Login to Twitpic
2. Navigate to the photo with the comment you wish to delete
3. Click the trash can icon () next to the comment you wish to delete
How do I delete a tag on my photo?
1. Login to Twitpic
2. Navigate to the photo with the tag you wish to delete
3. Click the trash can icon () next to the tag you wish to delete

Sunday, June 21, 2009

MySQL Crash Recovery

MySQL Crash Recovery
MySQL is known for its stability but as any other application it has bugs so it may crash sometime. Also operation system may be flawed, hardware has problems or simply power can go down which all mean similar things – MySQL Shutdown is unexpected and there could be various inconsistences. And this is not only problem as we’ll see.
MySQL has angel process mysqld_safe which will restart MySQL Server in most cases. It is great, unless you have run into some bug which causes it to crash again – such crashes qucikly following one another are kind of worse because they explore many less tested code paths in MySQL and so problem potential is larger.
So lets look at the problem which happen during the crash which might need to take care of or which may seriously affect MySQL Performance.
MyISAM Corruption - If you’re writing to MyISAM tables there is very large chance of them becoming corrupted during the crash. Note corruption may be hidden and do not expose itself instantly – you may notice wrong query results days after crash. Sometimes corrupted tables may be reason for further crashes or hangs, and corruption may spread itself further in the table. You probably do not want any of these so it is very good idea to run MySQL with myisam_recover option which will make sure all improperly closed MyISAM tables are checked first time it is accessed. This option is however rather painful to use with web applications – users may issue different queries which may trigger check/repair running for many tables at onces, which typically make system extremely slow and also can use up all allowed connections or run out of memory ( myisam_sort_buffer_size is normally set pretty lage). If this becomes the problem I use tiny script which moves out all MyISAM tables out of MySQL database directory, checks them with MyISAMchk and moves them back to running server. This looks scary but it works great – until table is checked and ready application gets error rather than stalling forever which allows application to become partially functional as soon as possible. This hack is needed only in some cases – in most cases using Innodb for tables which you need to be recovered fast is better solution.
Innodb Recovery – Unless you have some hardware problems (99%) or found new Innodb bug (1%) Innodb recovery should be automatic and bring your database to consistent state. Depending on innodb_flush_lot_at_trx_commit setting you may lose few last committed transactions but it is it. It is Performance of this process which may cause the problems. As I already wrote innodb_log_file_size and innodb_buffer_pool_size affect recovery time significantly as well as your workload. I should also mention if you have innodb_file_per_table=1 your recovery speed will depend on number of Innodb tables you have, as well as many other operations, so beware.
Binary log corruption - Binary log may become corrupted and out of sync with database content. This will sometimes break replication but if you’re just planning on using binary log for point in time recovery it can go unnoticed. sync_binlog Is helping by syncing binary log, but at performance penalty. If using Innodb you also might with to use innodb-safe-binlog option in MySQL 4.1 so your Innodb log and binary log are synchronized. In MySQL 5.0 XA is taking care of this synchronization.
.frm Corruption – Few people know MySQL is not really ACID even with Innodb tables, at least not for DDL statements.
There is a chance of failing for example during CREATE statement with table created in Innodb dictionary but .frm not created or not completely written. Partially written .frm files or .frm being unsync with internal Innodb dictionary may cause MySQL to fail with wierd error messages. In MySQL 4.1 sync_frm option was added which reduces this problem as time window when it can happen is much less. Still if failure happens just during writting .frm file nasty things may happen, not to mention such potentially multiple operation DDL statements as RENAME TABLE – these are most vulnerable. corruption - If slave happens to crash you can also have relay logs corruption and being corrupted. Not to mention MyISAM tables can contain partially completed statements as well as some of updates totally lost. The safe approach it to reclone the slaves if they crash or you can take the risks and try to continue. Sometimes you might be able to manually find appropriate position even if file is out of sync but I would not be basing my failure handling scenarios.
Cold Start – If you restart MySQL server its caches (key_buffer, innodb_buffer_pool, query_cache,table_cache) are cleaned, so may be OS caches. This may reduce performance dramatically. So if you’re bringing server back after crash you might want to populate caches. For MyISAM key_cache this can be done by using LOAD INDEX INTO CACHE statement, for other storage engines it can be done by issuing large index scan queries. Full table scan queries allow to preload table data ether in storage engine caches or in OS cache. You can save these into .sql file and use –init-file to make sure it is run on startup. The other approach is to prime server with real servers (ie clone queries from other slave) before putting traffic to it.
In case application is not highly available so there is only one server you might with to start serving only some users initially (returning error to others) and gradually increase the load as server warms up. This may sound strange but makes a lot of sense as not only waiting for pages which never load is more frustrating for users than getting honest “try again later” message, but also – warmup takes longer time on extreme load.
Innodb statistics - Unlike MyISAM Innodb does not store index cardinality in tables, instead it computes them on first table access after startup. This may take significant time if you have very large number of tables (Some users have hundreds of thousands of tables per database host). This one is pretty much part of cold start problems but I wanted to point out it separately. To warmup this data you might run select 1 from _table_ limit 1 for each table or any other statement – it is table open which is important.
There are other problems which you may experience related to MySQL Crash Recovery – Restoring data from backup, corrupted Innodb tablespace recovery etc but I should write about them some other time.

Reference by :


Understanding MySQL Query Cache for PHP Developers

Problem Statement:

Many PHP developers using MySQL have unclear understanding of the MySQL query cache. So we decided to write a series of introductory articles to get everyone on the same page. This article is the first installment of the series and here we will introduce the basics of query cache in MySQL. Note that unlike a typical book chapter, this article will be of low-fat flavor — less theory and more actionables — of an introduction to query caching for MySQL.

What is a MySQL query cache?

It turns out that MySQL has a built-in query cache that can cache a specific type of queries — SELECT statements — to speed up delivery of the result sets. The cache can increase performance for many instances but can also hurt performance if not used wisely.

What can be cached in the MySQL query cache?

Only SELECT statements can be cached. This does not include prepared SELECT statements. Query caching only works for SELECT statements that are fully qualified and returns same result every time. This means you cannot use non deterministic functions that return data depending on situation. For example:

// Following SELECT query can be cached

$stmt = "SELECT * FROM user WHERE active = 1";


// Following SELECT query cannot be cached

$stmt = "SELECT * FROM user where signup_date >= NOW()";


// Following SELECT query cannot be cached

$stmt = "SELECT count(*) FROM user";

Here are the requirements a query must meet to take advantage of the query cache:

  • Only exact queries are serviced from the cache — must match the stored query in exact detail.
  • Queries with placeholders — such as the ones for prepared statements — are not cached in query cache
  • Queries with user defined functions or non-deterministic functions cannot be cached
  • Any table changes (such as issuing of an ALTER statement) will remove the queries from the cache for that table

Introduction to query cache parameters

The more you understand the query caching parameters, the better you are going to be at tuning the query cache to your advantage. First find out what are the global query caching parameters that you can fiddle with using the following query at the mysql command-line prompt.

mysql> show global  variables like '%query_cache%';

A sample output is shown below:


| Variable_name                | Value     |


| have_query_cache             | YES       |

| query_cache_limit            | 1048576   |

| query_cache_min_res_unit     | 4096      |

| query_cache_size             | 536870912 |

| query_cache_type             | ON        |

| query_cache_wlock_invalidate | OFF       |


6 rows in set (0.00 sec)

The purpose of these parameters are described briefly as:

  • have_query_cache - size of query cache in bytes
  • query_cache_limit - the maximum size of result set (default: 1048576 bytes or 1 MB). If your query returns result set that is greater than the limit set here, it will NOT BE CACHED
  • query_cache_min_res_unit - the smallest block size allocated by query cache. Default is 4KB
  • query_cache_size - the total memory available to query cache
  • query_cache_type - when set to ON or 1, query caching is on for all applicable queries, when set to OFF (0) query caching is turned off and when set to DEMAND or 2, caching is on for queries with SQL_CACHE directive in the query
  • query_cache_wlock_invalidate-causes the query cache to invalidate any query in the cache if a write lock is executed against the table(s) it uses

Whats your query cache status right now?

To find out whats going on with your query cache, run the following command from the MySQL command-line prompt:

mysql> show status like '%qc%';

Here is a sample result:


| Variable_name           | Value     |


| Qcache_free_blocks      | 978       |

| Qcache_free_memory      | 527371984 |

| Qcache_hits             | 645545    |

| Qcache_inserts          | 130796    |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 417579    |

| Qcache_queries_in_cache | 4973      |

| Qcache_total_blocks     | 11167     |


8 rows in set (0.00 sec)

Here are some brief explanations of these status metrics:

  • Qcache_free_blocks - number of memory blocks marked as free, which indicates memory fragmentation
  • Qcache_free_memory - total amount of memory free for query cache
  • Qcache_hits - number of times query result was found in the query cache
  • Qcache_inserts - number of times queries were written to the query cache
  • Qcache_not_cached - number of queries removed from cache due to low cache memory
  • Qcache_queries_in_cache - number of queries that could not be cached
  • Qcache_total_block - total number of blocsk in query cache

Calculating query cache hits vs misses

Here is the formula for calculating hit ratio for query cache:

$totalSelectQueryCount = $comSelect + $qcacheHits

$percentHits           = ($qcacheHits * 100)/ $totalSelectQueryCount

What the above formula does is adds up all the SELECT queries in the system using two MySQL global variables: com_select and qcache_hits.

To set $comSelect, run show global status like '%com_select%' query. For example:

mysql> show global status like '%com_select%';


| Variable_name | Value   |


| Com_select    | 1739663 |


To set $qcacheHits, run show status like '%qcache_hit%'. For example:

mysql> show  status like '%qcache_hit%';


| Variable_name | Value    |


| Qcache_hits   | 20786961 |


With the above sample number, the percent hit is 92.28% which is great.

Managing query cache

To manipulate your query cache, you can use the following MySQL statements from the MySQL command-line:

To remove all the queries from your query cache, run:


To defragment the query cache memory, run:



Tuesday, June 16, 2009

8 Popular Open Source Forums

The list below is a collection of 8 popular Open Source Forum software.

·       - phpBB is one of the most popular forum softwares. With phpBB you can customize with mods and you can stylize your forum. For a fully Modded phpBB forum with about 500 different mods that all have been fully tested click here.

·       - Vanilla is a lightweight open source forum that was developed by Mark O’Sullivan using PHP and MySQL. Vanilla comes loaded with extensions, and you can customize the forum with your own add-ons.

·       - YetAnotherForum.NET is a Open Source forum or bulletin board for web sites running ASP.NET. YetAnotherForum.NET is fully coded in C# ASP.Net and uses Microsoft SQL Server. It comes with all the standard forum features and even WYSIWYG editors.

·       - YaBB is an Open Source forum system (bulletin board, message board) written in Perl. This system is the first and most popular open-source perl forum software and it runs very fast.

·       - IceBB is an open-source forum solution powered by PHP and MySQL. IceBB is written with the prototype and scriptaculous frameworks and the code output is very clean. IceBB has mostly all the same features as some of the paid forums but it even has an RSS feed.

·       - WP-Forum is a simple discussion forum plugin for WordPress. It has three themes that you can choose from and is a simple solution if you have a WordPress powered site.

·       - miniBB is an open source message board script written in PHP. miniBB is a lightweight and compact alternative to phpBB. With miniBB you can customize the software with add-ons and it is Search Engine Optimized.

·       - SMF is a free professional grade forum software that actually isn’t open source. SMF has loads of features with a great community and tons of free modifications.

If you know of any more Open Source Forums then please comment below. Thanks!!!

Popularity: 100%

Wednesday, May 6, 2009

Why Lower case table names are not possible in windows for MySql

·  lower_case_table_names

If set to 1, table names are stored in lowercase on disk and table name comparisons are not case sensitive. If set to 2 table names are stored as given but compared in lowercase. This option also applies to database names and table aliases. See Section 9.2.2, “Identifier Case Sensitivity”.

If you are using InnoDB tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase.

You should not set this variable to 0 if you are running MySQL on a system that does not have case-sensitive filenames (such as Windows or Mac OS X). If this variable is not set at startup and the filesystem on which the data directory is located does not have case-sensitive filenames, MySQL automatically sets lower_case_table_names to 2.


Friday, May 1, 2009

One Bedroom Flat....


As the dream of most parents I had acquired a degree in Software Engineer and joined a company based in USA , the land of braves and opportunity. When I arrived in the USA, it was as if a dream had come true.

Here at last I was in the place where I want to be. I decided I would be staying in this country for about Five years in which time I would have earned enough money to settle down in India

My father was a government employee and after his retirement, the only asset he could acquire was a decent one bedroom flat.

I wanted to do some thing more than him. I started feeling homesick and lonely as the time passed. I used to call home and speak to my parents every week using cheap international phone cards. Two years passed, two years of Burgers at McDonald's and pizzas and discos and 2 years watching the foreign exchange rate getting happy whenever the Rupee value went down.

Finally I decided to get married. Told my parents that I have only 10 days of holidays and everything must be done within these 10 days. I got my ticket booked in the cheapest flight. Was jubilant and was actually enjoying hopping for gifts for all my friends back home. If I miss anyone then there will be talks. After reaching home I spent home one week going through all the photographs of girls and as the time was getting shorter I was forced to select one candidate.

In-laws told me,to my surprise, that I would have to get married in 2-3 days, as I will not get anymore holidays. After the marriage, it was time to return to USA , after giving some money to my parents and telling the neighbors to look after them, we returned to USA

My wife enjoyed this country for about two months and then she started feeling lonely. The frequency of calling India increased to twice in a week sometimes 3 times a week. Our savings started diminishing. After two more years we started to have kids. Two lovely kids, a boy and a girl, were gifted to us by the almighty. Every time I spoke to my parents, they asked me to come to India so that they can see their grand-children.

Every year I decide to go to India. But part work part monetary conditions prevented it. Years went by and visiting India was a distant dream. Then suddenly one day I got a message that my parents were seriously sick. I tried but I couldn't get any holidays and thus could not go to India The next message I got was my parents had passed away and as there was no one to do the last rights the society members had done whatever they could. I was depressed. My parents had passed away without seeing their grand children.

After couple more years passed away, much to my children's dislike and my wife's joy we returned to India to settle down. I started to look for a suitable property, but to my dismay my savings were short and the property prices had gone up during all these years. I had to return to the USA

My wife refused to come back with me and my children refused to stay in India. My 2 children and I returned to USA after promising my wife I would be back for good after two years.

Time passed by, my daughter decided to get married to an American and my son was happy living in USA I decided that had enough and wound-up every thing and returned to India. I had just enough money to buy a decent 02 bedroom flat in a well-developed locality.

Now I am 60 years old and the only time I go out of the flat is for the routine visit to the nearby temple. My faithful wife has also left me and gone to the holy abode.

Sometimes I wondered was it worth all this? My father, even after staying in India, had a house to his name and I too have the same nothing more.

I lost my parents and children for just ONE EXTRA BEDROOM .

Looking out from the window I see a lot of children dancing. This damned cable TV has spoiled our new generation and these children are losing their values and culture because of it. I get occasional cards from my children asking I am alright. Well at least they remember me.

Now perhaps after I die it will be the neighbors again who will be performing my last rights, God Bless them. But the question still remains 'was all this worth it?'

I am still searching for an answer...... ......... .!!!!

By an Indian SE who was in US.

missing scroll bar in IE6


first remove any position: relative; from css and try


Does Your Web Site Suck?

149 Mortal Sins That Will Send Your Site to Web Design Hell

 “Does my web site suck?”

Of all the e-mail questions I receive, this one amazes me the most. Perhaps my amazement is because I’m a left-brain kind of guy. When I look in the mirror I see a balding, overweight, post-middle-age, white guy. I don’t look in the mirror and see Tom Cruise — I’m a lot taller.

If I weren’t logical, there’s a simple way for me to figure out if there’s a resemblance. I could ask people. After embarrassing myself, I might figure out that I don’t look like Tom.

It would hurt my ego far less to sit in the privacy of my home and go through a checklist of Tom’s attributes and see if I matched them.

  1. Do I have a full head of dark hair?
  2. Am I thin and fit?
  3. Do I have a killer smile?
  4. Do women come up to me and go, “Oooh. Tom”?
  5. When excited, do I jump up on sofas?

A one out of five score does not qualify me as Tom Cruise. (I said “Yes” to #5).

It’s the same with critiquing web sites. It’s far easier and less painful to sit down in the privacy of your office and go through and fill out two checklists.

My two web design checklists make critiques simple.

Checklist #1 is so simple, a brain-dead senior-level executive can use it to figure out if their web site sucks. How is this possible? I’m going to give you the answer to every question.

The answer sheet: If you check the box for any of the questions, your web site sucks. Period.

There is a one problem, though. It takes a good deal of knowledge to fill out the checklist. You have to know how your site is constructed and you have to have a good understanding of web design. If you don’t know what a MARQUEE tag does or that your site’s content came from a Microsoft Word document and was converted to HTML, it will be difficult to completely fill out the checklist.

The mistakes in Checklist #1 are fatal. I’m not sure how many of the mistakes in Checklist #2 you can make before you kill your web site.


Yes, fails to pass the checklist. The site’s design has always sucked.

Checklist 1:

First Impression / Big Picture

We’ve designed our site to meet our organization’s needs (more sales/contributions) rather than meeting the needs of our visitors.

Our site tries to tell you how wonderful we are as a company, but not how we’re going to solve your problems.

It takes longer than four seconds for the man from Mars to understand what our site is about.

The man from Mars cannot quickly find the focal point of the home page.

The man from Mars cannot quickly find the focal point of the current page.

Our site doesn’t make us look like credible professionals.

Our site doesn’t make visitors feel they can trust us.

Our home page — or any page — takes more than four seconds to load.

Quickly scanning the page doesn’t tell our visitors much about its purpose.

We don ‘t put design elements where our visitors expect them.

We have not eliminated unnecessary design items.

We don’t know which design items are not necessary.

Our site breaks when visited with the Javascript turned off.

Our site breaks because of back-end coding errors.

We say “Welcome to…” on our home page.

Our site is Flash-based (and this is what our site looks like to people without Flash.)

Our site’s navigation is Flash-based.

Our site uses a splash page (unless it’s a liquor, porn, gambling, adult, tobacco, or a multi-lingual / multinational site).

Our site makes visitors register before they can enter.

Our site uses two or more splash pages.

Our site’s TITLE tag is something like “New Document”, “Index” and not the name of your company or other search-engine friendly terms.

Our site has a sound file automatically play in the background when a web page loads, but we’re not a record label or musician

I don’t know if our site looks the same in the major browsers.

Our site doesn’t look the same in different browsers.

The important content does not fit in the first screen.

Our pages have too much/too little white space.

Our site uses pop-up windows.

Our site forces visitors to install weird plugins.

Our site has “Download latest browser” text or buttons.

Our site prominently displays what hardware and software was used to create the site.

Our site’s design was “borrowed” from another site.

Our site doesn’t provide clear instructions on how to perform tasks like ordering, filling out forms, etc.

Our site disables a visitors right-click mouse button because we’re crazy enough to think we have content worth stealing and that our visitors are too stupid to figure out how to bypass our code.

Our site is based on a template that’s bloated with ugly code, is difficult to maintain, and is, quite frankly, broken.

We don’t identify PDF files with an icon.

We don’t analyze our log files.

We never conduct user testing.

Text and Links

Our site mixes and matches text sizes on the page.

Our site mixes text colors on the page.

Our site’s text requires people to have special (unusual) fonts on their computers to correctly view our text.

Visitors can’t read our text because it’s too small.


Our site uses scrolling, blinking, fading, or moving text.

The color contrast analyzer says there isn’t enough contrast between text/links and the background.

AccessColor says there isn’t enough contrast between our stylesheet and our page.

Our site uses centered text on more than just headlines.

We use justified text.

We use browser-specific tags like <MARQUEE>.

We use font faces that are not appropriate for our audience — like Comic Sans on a senior citizen site.

Our site has text in the status bar — moving Javascript text.

We have too much/too little text on a page.

Our site uses underlined text. (Only links should be underlined.)

Our site has sideways text.

Visited links don’t change color.

Our links are not clearly labeled.

Our site has too many links in one area.

Our site has too many links.

Our site has lots of dead links.

Our site has lots of dead links and/or no 404 pages.

Our site has lots of complex URLs.

Our site has links consisting of 10-20 words.

Our links are not informative.

Graphics, Video, Audio

Our logo does not look like it was professionally made.

Our logo is a bad scan of a business card.

Logo is not above the fold. (Yes, this does happen.)

Logo is not on the top of every page and clicking it doesn’t lead to the home page.

If your site has banner ads (especially near the top of the page), keep graphics away from them. People tend to ignore ads and they’ll ignore your graphics.

Our site uses cheap clip art instead of high-quality web graphics.

Our site uses divider bars.

Our site uses large (file-size) graphics.

Our site uses graphics that detract from the page.

Our site automatically loads movies instead of using YouTube’s method of only showing movies when people click.

Our site uses a trailing cursor.

Our site uses IE page transitions.

Our site uses “Under Construction” graphics.

Our site doesn’t physically reduce graphics using Photoshop (or other program). Instead, we take a 1200 x 800 pixel photo and manually changing the width and height attributes of the IMG tag to a smaller size.

Our site uses graphics for text.

Our site has an ugly color scheme (red and green, for example).

Our sites’ symbols are not logical. Our shopping cart symbol doesn’t look like a shopping cart.

Instead of calling it a shopping cart, we call it a basket or other silly term.

Our site uses animations gratuitously.

Our site uses animated GIFs.

Our site uses 3-D graphics.

Our site uses gradient images.

Our site uses beveled images.

Our site uses images with shadows.

Our site has flashing graphics that might cause seizures.

Our site uses a background graphic that repeats itself on large-screen monitors.

Our background graphic doesn’t contrast well against the text, making it hard to read.

Our graphics don’t have ALT= attribute text filled in and doesn’t use “” for graphics that are empty.

Our site’s graphics are confusing — they look like ads.

Our site uses moving graphics — falling snowflakes, flying birds — stupidly rendered by DHTML.

Our site doesn’t use color to convey meaning — red text signifies “this is important.”

No one has spent the time figuring out if our color scheme alienates our international users.

Our site has multiple colored areas on the page.

Our site has blocks of ugly colors next to each other (red next to green).

Each page on our site is one big imagemap.

Our site has graphics that suffer from the “halo effect” — dithering that leaves an ugly halo around the image.


We created our site’s navigational system to meet our needs, not our visitors’ needs.

We understand how our site’s navigation works so everybody else probably understands how it works.

We have a page or a popup explains how our navigation works.

A site’s navigation should tell you where you are, where you’re going to go, and how to get back to the home page. Our site’s navigation doesn’t.

Our site uses Mystery Meat Navigation.

Our site uses Flash navigation.

A man from Mars could not quickly understand our site’s navigation.

Although people don’t want to learn a new navigational system, we’ve created our own anyway.

Our site uses JavaScript for navigation and it doesn’t degrade naturally for visitors who come with JavaScript turned off.

Our site uses sideways navigation.

We use stupid terms like “stuff” for our navigational links or “Beginning” for “Home.”

Our site doesn’t have shortcuts on the main page to the popular content.

Our site’s navigation is not in the top screen.

Instead of being predictable, our site’s navigation is inconsistent.

Instead of being predictable, our site’s navigational placement is inconsistent from page to page.

Our site’s content is not divided into logical categories and subcategories.

The names of the categories and subcategories are not clear and mutually exclusive on our site.

Our links aren’t clearly labeled and don’t tell you where you’ll end up.

Our links aren’t clearly labeled, don’t tell you where you’ll end up, and say “Click Here.” (May not be suitable for work NSFW.)

Some/all of our pages require visitors to scroll horizontally.

Our site uses Java navigation.

Navigation graphics are not the same size and/or color.

On our site, you may have to click four or more times to get to the information you want.

We keep people from signing up for expensive conferences.


We don’t know what content is popular.

Our content is not organized to meet our visitors’ needs.

Our content is not broken down into logical categories.

The content is not understandable by humans and is full of marketing-speak, or jargon, or unexplained acronyms.

The content is not engaging, or relevant, or accurate, or fair and impartial.

I don’t know if our content is appropriate for our audience.

The content really isn’t appropriate for our audience.

We don’t identify non-HTML documents like PowerPoint or Excel.

Our site’s content is not written for the web, but for print media (or other media) and we just transferred it to the web.

Our site’s content is written at a higher or lower readability level than our visitors’ knowledge level.

Our pages are too long. We forget that people skim.

Our site doesn’t have Heroin Content.

Some of our site’s content — graphics and/or text — is considered offensive.

Some of our content — graphics and/or text is considered racially or politically incorrect.

Some of our content — graphics and/or text — is considered offensive to international audiences.

We didn’t hire editor to proofread spelling, grammar, capitalization and content.

We haven’t checked to see we’ve eliminated all “Lorem ipsum” text or other placeholder text and graphics from site — especially from document titles.

Our site uses content that our visitors don’t need to know.

Our site may contain sensitive information the public and/or competitors shouldn’t see.

Our site has a mission statement or a link to a mission statement on the front page (non-profit’s are exempt).

Our site has sections that are under construction and the public can access them.

Our site has different looks on different pages or sections.

Our site doesn’t have a privacy or legal statement page.

Our site’s content came from Microsoft Word, Powerpoint, etc., documents and then converted to HTML.

Our site has outdated calendar information.

Our site has too many words on a line, making it hard to read.

Our site has too few words on a line, making it frustrating to read.

Checklist 2

“How long can you French kiss before it’s a mortal sin?” or “How many web design mistakes can I make before our site sucks?”

82 Potential Mortal Sins

You have to be born into the Roman Catholic church to truly appreciate the first question — pre-Vatican II Catholics will understand it best. Back in eighth grade one of my male classmates at St. Andrew’s School asked, in all seriousness, the above question. The question has stayed with me for forty years. The answer escapes me.

Non-Catholics will still appreciate the question. Basically, it’s the same question they ask Google’s Matt Cutts (except they don’t phrase it as honestly): “How many stupid tricks can I pull trying to get my site to the top of Google’s rankings before you punish my site?”

The mistakes in Checklist 1 are fatal. I’m not sure how many of the mistakes in Checklist 2 you can make before you kill your web site.

Special Note: Search Engine Optimization

One of the areas I skipped is Search Engine Optimization and web design — mostly because many factors aren’t design related. One of the best sites for all things search related is WebmasterWorld and a good friend of mind informed me they recently had an incredibly fascinating discussion entitled “25 Signals of Crap.”

While many items mentioned are found on my two checklists, they frame them in the context of Google and advertising. You really need to read this forum discussion.

Checklist 2:

Our site isn’t accessible to visitors with physical disabilities.

Our site doesn’t use white or off-white color for background.

Our site doesn’t use black text.

Our site uses Frames.

Our site uses the wrong doctype.

Our site doesn’t use CSS.

Our site uses CSS, but it’s inline CSS.

Our sites logo is not at top left corner.

Our site has no search engine.

Our search engine is not at top-right of page.

Our site’s search engine box isn’t long enough for visitors to see what they’re typing.

Our site has a search engine, but not on every page.

Underlined text is not link text.

Our site uses invalid HTML attributes (marginwidth, etc.).

Our site uses graphics as links.

We haven’t validated our site’s HTML code.

We haven’t validated our site’s CSS.

We haven’t checked to see if our site’s links are broken.

Our site uses deprecated markup (like the CENTER tag).

Our site doesn’t use a style switcher.

We haven’t checked to see how our site looks in grayscale.

We haven’t checked our site using the Firefox plugin “Web Developer”.

We haven’t checked our site using the “The Web Page Analyzer”.

Our site uses the CSS hover attribute on text.

We don’t optimize our site’s CSS or HTML files.

Our site’s accounting figures don’t line up on the decimal point.

Our site’s logo is disproportionate for top screen.

Corporate logo is not at top left of screen.

Logo links to home page on sub-pages.

There are links to the home page on every page — but the home page.

Putting dates on material that’s not updated regularly.

Our site’s content is full of jargon.

Our site’s content is full of acronyms.

Our site’s use of abbreviations is inconsistent.

We don’t use a consistent tone throughout. We switch back and forth from colloquial to clinical etc.

Our font sizes are fixed and can’t be resized.

We put more than one idea in a paragraph.

Not declaring a background color.

Our site uses unencoded ampersands.

Our site is <span> and/or <div> happy.

Hit counters.

Contact information is not available.

Our site doesn’t provide multiple methods to be contacted. (Contact Us form, phone number, address, e-mail, etc.)

We use dates and times on a site that’s not about dates and times.

Our site has pictures of boring white executives.

Our site has pictures of boring white executives — and if you click the picture, you get to see them up close and personal.

Some of our pictures are not recent — we have a 20 year-old photo of some employees.

Our site uses JPG when it should use GIF images and vice-versa.

We use SVG file format because we can.

We over-optimize our images.

Our site has graphics that look like a link, but aren’t.

We don’t check to see if scanned images are scanned on dirty scanners.

Check on an outside machine if all your sites’ graphics actually load.

There’s no reason for a globe image. We get that you’re global.

Our site uses an ugly background image.

We use Dynamic HTML navigation.

We don’t have a site map.

We have a site map, but it’s graphics based.

Our site uses liquid design.

Our site uses fixed-width design. (You can’t win. Liquid is wrong on wide-screen monitors because you have line lengths that are hard to read — and vice versa.)

We use table borders on content other than accounting-type data.


Our text is full of superlatives like “This product will solve every problem you have.”

Our paragraphs have too much text. (We’re a web of scanners.)

Our site bolds a lot of text.

Our site italicizes a lot of text.

Our site’s font sizes are fixed and can’t be resized.

Our site uses three or more font faces on a page.

We don’t have a CSS file for printing pages.

We don’t use logical file names for documents or graphics.

Our site uses graphics that don’t enhance the page.

Our graphics and text don’t match up.

Some of our documents run across multiple pages, but we don’t give the option to see it all on one page.

Back button doesn’t go back because we’ve disabled it.

Our site doesn’t provide a feedback mechanism.

Our forms mix up checkboxes and radio buttons.

Our site has pull-down (drop list) menus.

We don’t use bullets to organize information.

We don’t manually spell check TITLE, ALT tags, etc. (spell checkers don’t check these).

Our content is not timely.

Our content is not updated frequently.

Our site doesn’t separate style from content.

OK, My Web Site Sucks. What Do I Do Now?

The answer to this question is the same one as the joke about the guy who goes to the doctor’s office and says “It hurts when I raise my arm.” The doctor replies, “Don’t raise your arm.”

When I’m training or giving a speech, I tell the audience, “The most important thing you can do to improve your web site is eliminate unnecessary design items.”

Everything you’ve checked isn’t necessary. Eliminate these mistakes and you’re on your way to an improved web site.

Elimnation isn’t the whole solution. If you eliminated the mistakes on certain web sites, there wouldn’t be much left.

If you didn’t check your sites against the online programs in the introduction, here they are again. Use them as a start to fix your site.

After You Complete the Checklists

While validating/checking your site against the following tools won’t guarantee your site isn’t ineffective, you won’t have to answer certain questions with a check mark.

Check your page’s HTML at Fix your mistakes — or as many as you can.

Check your page’s/site’s CSS at Fix your mistakes — or as many as you can.

Check your links at Fix your mistakes.

Check your images for accessibility issues at Fix your mistakes.

Check your content for readability at Make sure your content is not too “smart” for your audience.

Check to see if your text and background colors have sufficient contrast at Fix your colors.

Check to see if your CSS’s text and background colors have sufficient contrast at Fix your colors.

Check to see how your page looks to the colorblind at

Check your site on for the first 5 keywords you use to describe your site.

Check your page’s content accessibility using Cynthia Says at

Check your page’s performance and web page speed at

Check that your page/site looks the same in over 80 different browser combinations at BrowserCam

Addendum: The Problem With Checklists

There are a lot of checklists about good and bad web design and the problem with them is simple — they’re vague. Two examples from a checklist touting a $10,000 seminar on improving your web site were:

Is essential content available where needed?
Is the text legible?

Your natural reaction is going to be either “Yes” or “No” because they’re vaguely phrased. If I asked you “Is your site’s text right justified and if it is, then your site sucks,” you could definitively answer the question and know where you stand. I’ve also just saved you $10,000.

I hope these two checklists will the be-all and end-all of web design checklists.

Hey! You May Not Have to Fill Out The Checklist!

If your site is for:

  • a movie
  • a movie company
  • a musical band
  • a record label
  • an art site
  • an experimental site
  • a game company
  • an individual game
  • a personal web site

…then you can skip these checklists because your site isn’t real. By “real” I mean your site conveys information or is selling products. You have a site where people are held accountable.

What Wasn’t Covered

Click to enlarge

Planning your web site, determining your target audience, the composition of your target audience, your goals for having a web site, budgeting the money, hiring the people to create/run the site, etc.I’m not covering any of the pre-planning that should occur before you start your site or start a makeover.

Note 1

There are very few e-commerce and search engine optimization entries. I feel these subjects deserve their own checklist. Obviously, almost anything you do to straighten out your site’s design will help with optimization. I’m also fairly light on forms, probably because I’ve created so few.


Your Ad Here