Why SEO doesn’t work?

Many webmasters face the problem that their SEO campaigns don’t deliver the expected results. Why are your campaigns under performing? What can you do to make sure that search engine optimization works for you?
There can be several reasons why your SEO isn’t a success:

Wrong Goals
If your website doesn’t have many high rankings yet then you cannot expect that Google will display your site on the first result page for keywords such as “mp3” or other very competitive one-word keywords.

You have to start with more targeted key phrases first. Optimize your pages for many different keywords with lower competition. The more high rankings your website has for keywords with lower competition, the more likely it is that your website will also get high rankings for more competitive keywords that belong to the same topic.

It’s like running a marathon. You have to run smaller distances first before you can run the full 26 miles and 385 yards.

Don’t Take SEO Seriously
Search engine optimization isn’t set-and-forget. It takes some time to make things happen. Search engine optimization is an investment into your company and it should be treated like that.

If all you do to ‘promote’ your website is to submit it to search engines then you won’t be successful. You have to invest time and effort into the optimization of your site. Tools can help you to save a lot of this time and effort but you still have to work with your site.

Focus Wrong Elements
Some webmasters are obsessed with the length of the title tag. Others submit their website every few days to search engines. Other webmasters insist that a particular part of their website links must use the rel=nofollow attribute.

You don’t have to chase the latest search engine optimization trend. These trend topics usually make the difference between position 8 and position 9. If your website isn’t listed on the first result page at all, you have to get the basics right.

The most important factors that will get your website on Google’s first result page are optimized web pages with good content with a tool and good back links with the IBP link improver.

Wrong Keywords
This is an extremely common mistake that many webmasters make. If you choose the wrong keywords, you will waste a lot of time and money.

The best keywords for your website are not the keywords with the biggest search volume. The best keywords also aren’t the keywords that will boost your ego and it’s also not the “obvious” keywords that will work best for SEO.

The best keywords for SEO are the keywords that deliver targeted visitors who will buy. It does not matter if a keyword has thousands of searches. If none of the visitors who find your site through that keyword will buy, then this keyword won’t do you any good.

Wrong Links
To get high rankings on Google, your website must have good back links. Automatic links from link building schemes don’t work. Actually, that kind of links can even get you in trouble with Google.

You must get the right kind of back links to succeed. Use professional link management tools and consider purchasing text links from a quality site.

Search engine optimization can contribute greatly to the success of your website. It’s important that you do the right things in the right order and that you focus on the right elements. If you can tick all boxes in the checklist, your website is ready to get top 10 rankings on Google for your most important keywords.

The On Demand Global Workforce - oDesk

Reset Webmin Password for ubuntu

I found this problem at the first time when webmin installed. Also this happens to everyone at one time or another. You go on vacation and when you come back, you forget all of the passwords on your computer.

I failed logging in several times and then Webmin blocked my IP. Getting localhost blocked isn’t a good thing to see. So I searched the Internet for a way to reset the password and I found this procedure:

1. Login to your computer as root. Type on browser address bar https://localhost:10000/
2. If you are running a Debian distribution (ubuntu), enter the following command:
/usr/share/webmin/changepass.pl /etc/webmin username password
3. Login to Webmin with your reset password.
4. eNjoY!

Adding custom columns/fields to Joomla article

Today we will learn how to add more columns/fields to Joomla *_content table. At first we should have to add a column in *_content table.
Run in for instance phpMyAdmin.
ALTER TABLE `jos_content` ADD `test` VARCHAR( 255 ) NOT NULL

Edit administrator/components/com_content/models/article.xml add:

In the first params section for instance below the access entry. Add var $test = null; to libraries/joomla/database/table/content.php
Now add $form->set('test', $row->test); to editContent() in administrator/components/com_content/controller.php
The result is that you now have a new field called test that can be used in various ways to display a separate text that is not a part of the article.

Really Easy Field validation with Prototype

Here’s a form validation script that is very easy to use.

Really Easy Field validation with Prototype


The basic method is to attach to the form’s onsubmit event, read out all the form elements’ classes and perform validation if required. If a field fails validation, reveal field validation advice and prevent the form from submitting.

Include the javascript libraries:

You write elements like this:

passing the validation requirements in the class attribute.

You then activate validation by passing the form or form’s id attribute like this:>

new Validation(‘form-id’); // OR new Validation(document.forms[0]);


It has a number of tests built-in but is extensible to include your custom validation checks.

The validator also avoids validating fields that are hidden or children of elements hidden by the CSS property display:none. This way you can give a field the class of ‘required’ but it’s only validated if it is visible on the form. The demo illustrates what I am talking about


Here’s the list of classes available to add to your field elements:

  • required (not blank)
  • validate-number (a valid number)
  • validate-digits (digits only)
  • validate-alpha (letters only)
  • validate-alphanum (only letters and numbers)
  • validate-date (a valid date value)
  • validate-email (a valid email address)
  • validate-url (a valid URL)
  • validate-date-au (a date formatted as; dd/mm/yyyy)
  • validate-currency-dollar (a valid dollar value)
  • validate-selection (first option e.g. ‘Select one…’ is not selected option)
  • validate-one-required (At least one textbox/radio element must be selected in a group – see below*)

*To use the validate-one-required validator you must first add the class name to only one checkbox/radio button in the group (last one is probably best) and then place all the input elements within a parent element, for example a div element. That way the library can find all the checkboxes/radio buttons to check and place the validation advice element at the bottom of the parent element to make it appear after the group of checkboxes/radio buttons.

When the validation object is initialised you can pass the option {stopOnFirst : true} to enable the stop on first validation failure behaiour. The demo above has this set to false which is the default. If set to true only the first validation failure advice will be displayed when the form is submitted instead of all at once.

new Validation(‘form-id’,{stopOnFirst:true});

You can also pass the option {immediate : true} to enable field valiation when leaving each field. That is on the onblur event for all the form elements.

By default the library will add an event listener to the form’s onsubmit event and stop the event if the validation fails. If you pass the option {onSubmit : false} it wont do that. This way you can call the validate function manually within your own javascript.

By default the library will focus on the first field that contains an error. If you pass the option {focusOnError : false} it wont do that.

You can also pass the option {useTitles : true} to make the field validators use the form elements’ title attribute value as the error advice message.

You can set callbacks by using the options {onFormValidate : yourFunction, onElementValidate : yourFunction}.

onFormValidate is called after form validation takes place and takes two arguments: the validation result (true or false) and a reference to the form. OnElementValidate is called after each form element is validated and also takes 2 arguments: the validation result (true or false) and a reference to the form element.

Instead of using the error message in the validator you can create your own validation advice page element. Now when the script is creating the advice element it first looks for an element with an id matching ‘advice-‘ + validation-class-name + ‘-‘ + element.id and if not found then one matching ‘advice-‘ + element.id . If your form element does not have an id attribute then match the name attribute. If it finds an element it will make that one appear. See the ‘Donation’ field in the demo for an example. If you make a custom validation advice element make sure you set the style to display : none .

Also if you reference the effects.js file from Scriptaculous in your page head, it’ll use a fade-in effect for the validation advice.

CSS Hooks

As well as the validation css classes above, the validation library uses CSS classes to indicate validation status:

validation-failed and validation-passed

The validation advice element has a class of validation-advice and an id matching the following pattern

‘advice-‘ + validation-class-name + ‘-‘ + element.id

so if the field ‘ birthdate’ uses the ‘ validate-date’ validation class then the validation advice element will have an id of ‘ advice-validate-date-birthdate’.

Select random value from MySQL database table.

The simplest way of selecting random rows from the MySQL database is to use “ORDER BY RAND()” clause in the query.

Solution 1 [SQL QUERY]


This query select 4 random value every refresh?

The problem with this method is that it is very slow. The reason for it being so slow is that MySQL creates a temporary table with all the result rows and assigns each one of them a random sorting index. The results are then sorted and returned.

There are several workarounds to speed things up.

The basic idea is to get a random number and then select a specific row using this number.

In the case that all the rows have unique ids we will just have to pick a random number between the smallest and the biggest id and then select the row with id that equals that number. To make this method work when ids are not evenly distributed we will have to use “>=” operator instead of “=” in the last query.

To get the minimum and maximum id values in the entire table we will use MAX() and MIN() aggregate functions. These functions will return minimum and maximum value in the specified group. The group in our case is all the values of `id` column in our table.

Solution 2 [PHP]

$range_result = mysql_query( ” SELECT MAX(`id`) AS max_id , MIN(`id`) AS min_id FROM `table` “);

$range_row = mysql_fetch_object( $range_result );

$random = mt_rand( $range_row->min_id , $range_row->max_id );

$result = mysql_query( ” SELECT * FROM `table` WHERE `id` >= $random LIMIT 0,1 “);

As we mentioned this method is limited to tables with unique id for each row. What to do if it’s not the case?

The solution is to use the MySQL LIMIT clause. LIMIT accepts two arguments. The first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1).

To calculate the offset to the first row we will generate a random number between 0 and 1 using MySQL’s RAND() function. Then we will multiply this number by number of records in the table, which we will get using COUNT() function. Since LIMIT arguments must be integers and not float values we will round the resulting number using FLOOR() function. FLOOR() is an arithmetic function that calculates the largest integer value that is smaller than or equal to the expression. The resulting code will look like this:

Solution 3 [PHP]

$offset_result = mysql_query( ” SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` “);

$offset_row = mysql_fetch_object( $offset_result );

$offset = $offset_row->offset;

$result = mysql_query( ” SELECT * FROM `table` LIMIT $offset, 1 ” );

In MySQL 4.1 and later we can combine two previous methods using subquery like so:

Solution 4 [SQL]

SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;

This solution has the same weakness as the solution 2 e.g. it only works for tables with unique ids.

Remember the reason we started looked for alternative ways of selecting random rows? Speed! So how do these methods compare in terms of execution times. I am not going to go into specifics of hardware and software configuration or give precise numbers. The approximate results are:

  • The slowest method is solution 1. Let’s say that it took 100% of time to execute.
  • Solution 2 took 79%.
  • Solution 3 – 13%.
  • Solution 4 – 16%.

The winner is solution 3.

Future Web Technologies

What can we expect from the next few years on the Web? Now we are happy into the current aera of the Web, commonly referred to as Web 2.0. Features of this phase of the Web include search, social networks, online media (music, video, etc), content aggregation and syndication (RSS), mashups (APIs), and much more. Currently the Web is still mostly accessed via a PC, but we are starting to see more Web excitement from mobile devices (e.g. iPhone) and television sets (e.g. XBox Live 360). I described here some of them in bellow.

When will the Semantic Web arrive? Some companies are actively trying to implement the Semantic Web. Semantic Web has been The Next Big Thing for a long time now. Indeed it’s become almost mythical, like Moby Dick. In a nutshell, the Semantic Web is about machines talking to machines. It’s about making the Web more ‘intelligent’ computers “analyzing all the data on the Web ‚the content, links, and transactions between people and computers.” So we are getting close, but we are probably a few years off still before the big promise of the Semantic Web is fulfilled.

Mobile Web is another Next Big Thing on slow boil. It’s already big in parts of Asia and Europe. In few years time there will be many more location-aware services available via mobile devices; such as getting personalized shopping offers as you walk through your local mall, or getting map directions while driving your car, or hooking up with your friends on a Friday night. But one of the main issues with Mobile Web has always been usability. So some mobile companies will probably be seen in few years time as the breakthrough Mobile Web device.

Major web sites are going to be transformed into web services – and will effectively expose their information to the world. Such transformations are never smooth – e.g. scalability is a big issue and legal aspects are never simple. But it is not a question of if web sites become web services, but when and how. Some web sites will offer their information via a REST API. The net effect will be that unstructured information will give way to structured information – paving the road to more intelligent computing.

This kind of technology has commercial applications today, as companies like Intelliseek are trying to provide users with business intelligence over the Web, including mining corporate Web sites for competitive intelligence information, such as lists of customer names. Some serious computer scientists, although cautious about the promise of the Semantic Web, are ultimately optimistic that it will be everything developers are hoping for — an online source for all of the knowledge that humanity has created in science, business and the arts.

References website

Everybody welcome to new Yahoo! Groups

Hi friends I am S.M. Saidur Rahman (Rana). Moderator of ‘cakephpexperts’ and ‘joomla_experts’ group at Yahoo! Groups, a free, easy-to-use email group service. Everybody welcome those both groups. I am inviting all to join those groups.

Join ‘cakephpexperts’ and ‘joomla_experts’ groups and made easy your programming life.
Click on the lines bellow to join groups.

Click to join cakephpexperts

Click to join joomla_experts