Monday, August 29, 2011

Ruby Books

I have been working on ruby. Best book I have found is "Programmin Ruby" By Dave Thomas.

The language which has best documentation is "PHP" . The php manual is all what you need, I was searching something like that in ruby and 'Programming Ruby' is the gem.

Sadly I haven't found such documentation for Python.
http://docs.python.org/ is 'ok' to me but it has not been effective like 'php' or 'ruby' . 


Saturday, August 27, 2011

Ruby on Rails Apache passenger defaults to production environment

I have been playing with ROR. I had been experimenting with WebRick server that comes with rails but default.
I tried to test my app with apache passenger module/mod_rails.
Passenger will assume the environment as 'production'.
On the other hand when you use rake db:migrate command it works for the 'development' environment.

If you want to use passenger for testing/development enviroment use the
rake db:migrate RAILS_ENV=production command.

or set the RailsEnv in your .conf file or in a .htaccess file(If AllowOverride is  set ).
For details visit here.
http://www.modrails.com/documentation/Users%20guide%20Apache.html






Saturday, August 20, 2011

javascript IE compatibility

I was pulling my hair off today when Nothing seemed to work at IE. After Some careful debuggin got out of it.
'class' is reserved at IE, MIDORi will not validate the script.

Sunday, June 12, 2011

Godaddy

I have been using  GoDaddy for two months now. This is the time to make a review of their service.  What I like about GoDadday is domain name registration service. They will tempt you  to shop more by offering discount.  They have a fine dns manager, which I had used to configure appengine.

    I don't like the hosting service of godaddy, Sometimes the server was really slow especially the cpanel.  I have been using hostgator and I like their service.

Tuesday, May 31, 2011

Ubuntu Recovering Boot menu after installing Windows

For Ubuntu 9.10 or later:
If you have installed windows OS after installing ubuntu  and windows has deleted the mbr(Master Boot Record)  you can't see the ubuntu at your boot menu, Try this solution.

Boot  from a Ubuntu CD and select Try Ubuntu

First Step:  Just checking the Hard Disk


Open a Terminal,Type in:


sudo fdisk -l


If you are Using only one Hard Disk,  Your Boot record will be in that disk But if you are using two or more and mark the Hard Disk that you have selected to boot first from your Bios Settings.
If you are using one HD your device is - /dev/sda

we will continue assuming your device id is /dev/sda .

Second Step:
Now You have to mount the drive that your Ubuntu was installed previously.
Mount the drive By selecting it from the 'places' menu. It has been mounted at your /media folder(Live CD)
Check the folder name and copy the folder name. You can do it also By dragging any file/folder from the mounted drive.

Now at Terminal:

grub-install is suggested now rather than grub-setup

Try this first:

sudo grub-install --boot-directory=/media/FolderName/boot /dev/sda



Or try this:
sudo grub-setup -d /media/FolderName/boot/grub /dev/sda

Replace The 'FolderName' with the Folder you have found at your /media folder.

Third Step:


Restart Your machine and the boot menu should be there but you will be missing the windows boot menu entry there . So after logging in Open a Terminal and Type:


sudo update-grub

It's Done! It'll show you a message if it finds a boot record for the windows.

If you get any error you check the following link.


There is a detailed description  at http://help.ubuntu.com/community/Grub2

Monday, May 30, 2011

Simple Python HTML,XML DOM Parser

This parser is intended to be simple and easy to use. You can download a copy from github . The parser can detect the various forms of tags like id=lorem , id='lorem', id="lorem". I have been using this script for my current scraping project.


I had been using the python module minidom but it's no use for the malformed xml and html . So I wrote this script using only regular expression.

Usage:

Copy the spp.py in your working directory and import the package.

 Instantiate the parser class by providing the url  or xml|html string

 To Get the 'id' attribute of the 'style' tag
 1.spp.parser('http://www.google.com').getByTag('style').item(0).attr('id')

 To get the attribute of a node whose id is 'csi'

 2.spp.parser('http://www.google.com').getById('csi).attr('style')

 # doc is the html or xml string you want to parse

 3.spp.parser(doc).getById('test').attr('href')

 To get the src of an image which is the 4th image of the document
 4.spp.parser(doc).getBytag('img').item(4).attr('src')

 To get the content of a node which has no child
 5.spp.parser(doc).getById('test').innerText()

There are some nice parsing tools for python available.
  1. Beautiful Soup
  2. lxml

Saturday, May 28, 2011

PHP regex lookaround assertion: lookbehind and lookahead

Regular Expression is a mighty beast, if you can tame it Regex will be a great leverage to solve your Problems.

A Real World Example:

Regex assertion is to check if any string matches following or the preceding characters. Suppose we want to check if there is any '.mp3'or '.mp4' string in our text but we only want the value 'mp3'or 'mp4'

One solution is:

$text = 'demo.mp3, shakira.mp4,lorum ipsum';

if(preg_match_all('/\.mp3|\.mp4/', $text,$matches)):

foreach($matches as $key => $match){
$matches[$key] =  str_replace('.', '' ,$matches[$key]);
}

endif;
var_dump($matches);

But this is ugly, we can use the lookbehind assertion to make the code simple:

preg_match_all('/(?<=.)mp3|mp4/', $text,$matches);
var_dump($matches); 
 
Let's Go Back: Check The Basic: 
 What are the lookahead and lookbehind assertions? and what are the syntax?

Assertions Only check that from the current position if a string matches the following or preceding characters, It does not consume any character. 'lorum(?=ipsum)' matches 'lorum' from the text 'lorumipsum'. Note that it's not matching 'lorumipsum', it's just checking if 'ipsum' are the next characters after 'lorum'.

LookAhead Syntax:
Positive lookahead: (?=)
Negative lookahead: (?!)

LookAhead Assertion Checks if following characters matches(positive lookahead) or does not(negative lookahead) from the current position.

positive Lookahead:
The following example matches 'lorum' first then checks that if 'ipsum' is next, If the checking is successful then function returns a successful match.

preg_match('/lorum(?=ipsum)/','lorumipsum', $match);
var_dump($match); 
 
Negative Lookahead: The following example matches 'lorum' first then checks that if 'test' is not next, If the checking is successful then function returns a successful match.

preg_match('/lorum(?!test)/','lorumipsum', $match);
var_dump($match); 
 
Look Behind Syntax:
Positive lookbehind:(?<=)
Negative lookbehind:(?<!)

positive Lookbehind:
This example matches 'ipsum' first then checks that if 'lorum' is previous, If the checking is successful then function returns a successful match.


preg_match('/(?<=lorum)ipsum/','lorumipsum', $match);
var_dump($match); 
 
 ******
One important thing to remember: Regex engine searches from left to right but in this case as there is nothing too match before our assertion it matces ipsum first to determine the current position. Suppose we would build our regex expression by  '^(?<=lorum)ipsum' then the regex engine would match the start of the line first. Then it would determine whether 'lorum' matches previous which would obviously fail as there is no character preceding 'lorum'.



Negative LookBehind: 
The following example matches 'ipsum' first then checks that if 'hello' is not previous, If the checking is successful then function returns a successful match.

preg_match('/(?<!hello)ipsum/','lorumipsum', $match);
var_dump($match); 

Monday, May 16, 2011

JavaScript Rolling Animation Using marginTop

In My previous Post I wrote about how You can get a rolling animtaion using javascript scrollTop property. As the "scrollTop" is not a W3C recommendation we will use 'marginTop' of the style object to make a better solution.

****
*****
Javacript Rolling Animation Example Using margin

*******
*********
*******
*******
*********
*******
***
Free Javascript scripts



We will set a negative value to the css margin-top property using a recursive function. This will move the div upwards gradually.Here is the sample Code.

d = document.getElementById('cat');

h = 0;

ab = function(){
 if(h == -150){
  h = 0;
  }
 h--;
 d.style.marginTop = h+"px";
 setTimeout('ab();', 10);
 }
 
ab();

Easy and pretty simple huh? This is just the basic, You can make awesome animations/sliding effects. This is compatible in all modern browsers. If you need more info, post a comment and I'll try to help.

Sunday, May 15, 2011

JavaScript Scrolling Animation Using scrollTop

Using only the scrollTop and scrollHeight property it is possible to create a nice scrolling effect.scrollTop and scrollHeight aren't W3C recommendation but these properties exist in all the modern browsers. I have checked it in Chromium,Firefox,IE and Midori the following script works perfectly. Let's see the effect.

Javacript Scrolling Animation Using scrollTop property
****
*****
*******
*********
*******
***
****
*****
*******
*********
*******
***
Javacript Scrolling Animation Using scrollTop property




The code is pretty simple. For achieving the animation effect out our div should be overflown.

a = document.getElementById('scroll');
c = 0;
b = function()
{
 if(200+a.scrollTop == a.scrollHeight)
 {
  a.scrollTop = 0;
  c = 0;
 };
 c++;
 a.scrollTop = c;
 setTimeout('b()',10)
}
b();

Need Explanation?

scrollTop(integer) property shows that how far you have scrolled from the top. You can also set a value to scrollTop which will scroll automatically to a value specified.

we have a recursive function that sets the scrollTop property. If we reach at the bottom of our element that's when if(200+a.scrollTop==a.scrollHeight) we reset the scrollTop property.

Here is a tutorial about How you can achieve the same animation using margin.

If You need more explanation, Let me Know.

Sunday, May 8, 2011

PHP Declaring Object before Defining Class

A quiz for you. is the following code snippet valid?
    $obj = new hello(); 

    class hello{

        function __construct(){
        echo 'PHP ';
        }
      }

    

What about the following one?


     hello();

     function hello(){
           echo 'PHP ';
     }


what about the next? assuming test.php contains the hello function.

     hello();

    include test.php;


Unlike C/C++/Python The first two snippets are correct. But the third one will generate error. When you call a function or make an instance of a class the compiler searches in the same file for the definion.

Saturday, May 7, 2011

Django Installation with XAMPP for Linux-(LAMPP)

I use Ubuntu and XAMPP for my development works. My Xampp location is /opt/lampp.
This post is about Mysql Database connection problem in Django.

First Make sure you've installed the python-mysqldb package.

sudo apt-get install python-mysqldb

Then if you get the following error

_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")'

That means that mysqld can't find you mysql library location. You have to add the library path manually. /etch/ld/so/conf file maintains the extra library locations so add your library here.


sudo gedit /etc/ld.so.conf

Add your mysql library path here. In my case

/opt/lampp/lib/mysql

Now update your config by

sudo ldconfig

And that's it now you can test it by running server


Alternative:

You can also create a .conf file in the /etc/ld.so.conf.d directory and write your location in that file as the ld.co.conf file loads all the files from the directory.

Friday, May 6, 2011

WordPress thickbox for Generated Images Solution

If you want to use Thickbox for the generated images you may get garbage values if you're using a url like http://test.com/image.php?coords=1,2,3 or http://test.com/image/ . The problem occurs when thickbox detects the url not as image. If you open the wp-includes/js/thickbox/thickbox.js file you will get a line

var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;

Image formats or urls other than the above ones will show garbage value. The solution is to edit the thickbox.js file. Do not edit the default file. Make a copy of the file and place it at your theme directory. Another Option is to obtain thickbox.js from the jQuery thickbox page. This is better than copying the WordPress included one. I will explain it a bit later. Now first add the thickbox.js file in you theme. In your functions.php file use the following code.



add_action('wp_print_scripts' , 'add_custom_thickbox');

function add_custom_thickbox(){
wp_enqueue_script('thickbox_edit' , get_bloginfo('stylesheet_directory')
 . '/thickbox.js' , 'jquery' , ' ' , true);
}


Don't forget to add the thickbox css. Now edit the thickbox.js file around Line no 72. If your url contains .php :

Replace the line
var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;

with
var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp|\.php$/;

Then in the line 75

Replace the line
if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif'
|| urlType == '.bmp'' )

with
if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif'
|| urlType == '.bmp' || urlType == '.php' )


There is another edit, From the whole script remove all the properties and method related with 'thickboxL10n' . This variable has been injected by wodpress as a localization process. If your copy is from jquery website your thickbox.js will have no variable 'thickboxL10n'. So It's a better option to get thickbox from the jQuery website.

If you copy download jquery from jquery website:
Replace all the "$(" with "jQuery(" .


Now click on your image and it should work now. If You face any problem you can comment here, I will try to solve your problem.


Thursday, May 5, 2011

Firefox Setting Google As Default Search Engine using about:config

If Searching in the main address bar redirects you to a search engine other than Google, that means some firefox add-on is controlling your search options. You can check your add-on preferences for correcting it. There should be some option in a nice add-on but there are some add-ons which don't even ask!

So for Changing the settings type about:conifg in the address bar. about:config is a advanced settings section of firefox. If you're not sure what to do Don't change the default settings. This may make your browser unstable.


In the about:config page search for keyword.url. If you see the value of the term other than google.com click on the value to toggle vaules. when you have got google.com leave it there and test searching in your address bar and Google should be your default search enging now!

Some Facts:


You can see the mozilla book verse typing about:mozilla

For Chrome browser There is no about:config pag. But there are some about pages which you can see by typing about:about.

about:about is not supported in mozilla firefox 3.6

Tuesday, May 3, 2011

JavaScript Find all Elements of an object

To find All functions and variables of a Javascript class or object you can use the following function. It's a silly little Function

function getObj(obj){ 

  var html = '';  

  for (var key in obj){

  html +=   (key + '  -- > '+ typeof obj[key]); 

  
}        

 return html;  

  }

You Can test the function here. Select a default Object and you will see the object elements. If You are using firefox you may seem nothing when you select the document object.






Tuesday, April 5, 2011

[SOLVED] WP-PageNavi, wp_pagenavi for custom query

WP-Pagenavi is a great plugin for paginating your WordPress Pages. Many people find it not working for custom queries like

get_posts, query_posts or for WP_Query. Today we'll solve the mystery.

Previously I edited the plugin to work for the custom queries but now the latest version has a built in feature to add your custom query object.

Suppose we make a custom query for getting some specific posts. The post ids are 1,5,8,9,10,34

$my_query = new WP_Query(
 array(
 'post_in' =>array(1,5,8,9,10,34)
 )

);

//If the total page number > 1 we will show the pagination

if($my_query->max_num_pages>1)
if(function_exists('wp_pagenavi'))
wp_pagenavi(array(
   'query' =>$my_query   
   ));

//note how  $my_query has been passed to wp_pagenavi  



You should set your posts_per_page to lower than the total page number to see the pagination. You should see the Pagination now but Wait Sailor, We are not done Yet!

You see that when you click on the second page you actually see the contents from the first page. So the solution is here.

Check your WordPress version before trying the solution


//Revised code to show posts from all pages

// page no from query

$paged = get_query_var ('paged'); 


// pass the paged value to the WP_Query

$my_query = new WP_Query( array(
 'post__in'  =>  array(1,5,8,9,10,34) ,
 'paged' => $paged
 
) );


//If the total page number > 1 we will show the pagination

if($my_query->max_num_pages>1)
if(function_exists('wp_pagenavi'))
wp_pagenavi(array(
   'query' =>$my_query   
   ));

//note how  $my_query has been passed to wp_pagenavi  



And you can use wp_pagenavi for get_posts,query_posts providing a paged value. If you're having any problem implementing, you can post your problem here. I will try to solve your problem.

Monday, March 28, 2011

wordpress cron wp_schedule_single event

In my previous post I wrote how to use
the wp_schedule_event. This post is about wp_schedule_single_event.

wp_schedule_single_event is for scheduling a single event but you can use it to execute a function more than once.

wp_schedule_single_event( $timestamp, $hook, $args = array())

$timestamp is the timestamp when we want to execute our function

$hook is the hookname(a string) that we will attach our function with.

$args is optional parameter WordPress uses to make a md5 hash string to make the schedule unique

If you want to execute your function 'my_cron_function' at the timestamp= 'timestamp' follow the code

add_action('my_hook','my_cron_func');

function my_cron_func(){
//do something here
} 

wp_schedule_single_event('timestamp', 'my_hook') 
you can use different timestamps with your hook 'my_hook' , but remember that
WordPress checks if an identical event is to be executed in 10 minutes, if so WordPress won't execute the current event.

if you use
wp_schedule_single_event(time(), 'my_hook')
wp_schedule_single_event(time()+20, 'my_hook');
WordPress will discard the second one because it's scheduled to execute to in 10 minutes of the previous identical one.
see the code the the wp-includes/cron.php

if ( $next && $next <= $timestamp + 600 )
  return;
Executing the function more than once using wp_schedule_single_event! if you use some dynamic value in the $timestamp you can make this execute more than once. for example If you use this code
wp_schedule_single_event(time()+60, 'my_hook')
when you first activate the plugin the code schedules to execute the function 1min after the current time if any visitor visits the page if you use
wp_schedule_single_event(time(), 'my_hook')
it will execute the function immediately. If you refresh your page in one minute WordPress won't execute the cron job as WordPress has set the default time interval between two cron jobs to 1 minute look for the code the wp-includes/cron.php
/*
 don't run if another process is currently running it or more
 than once every 60 sec.
*/
 if ( $flag + 60 > $local_time )
  return;
so if you want any cron job to execute maximum time you can use
wp_schedule_single_event(time(), 'my_hook');
another way to do this is to use
wp_schedule_event(time(),'every_minute','my_hook');
you have make the 'every_minute' schedule yourself see the example Here

Thursday, March 24, 2011

Synchronizing Firefox and emacs

I am loving Emacs. Actually I am writing from emacs now. Synchronizing between firefox and emacs has been a piece of cake due to the "It's all text/textarea firefox add-on".

You can download the addon from here

After installing this addon go the Tools>add-ons>It's all Text! preference. In the 'editor textfield' add the emacs location. You can add any text editor executable location here.
You can add a shortuct key for opening emacs.It will save you some clicks.


how it works
The credits goes the addon. when there is a textarea in the webpage you will see a edit button created by the firefox add-on. You can open emacs by clicking on that button or you can choose in which mode you want to edit by right-clicking.

when emacs has opened up write something and save(C-xC-s) the text and see how the text has been imported the the webpage textarea automatically. You can also visualize how this code will look when you're writing by (C-cC-v)

Monday, March 21, 2011

WordPress cron explained

cron is a job scheduler in the unix-like operating systems that can be very helpful to automate tasks. . Webhosts provide cron service to execute scripts periodically.

 It is encouraged to use the webhost cron service in most of the cases because WordPress cron is actually a psudo cron service. You might want to use the functions of WordPress in your script. In that Case  you will have to load the wp-load.php file and the core WordPress functions, database classes will be available for your script.

require_once('wp-load.php');

If your host doesn't support cron, WordPress cron will be handy. You will need the WordPress cron functionalities for your plugins or for automating other tasks like auto-generating posts, sending mails, messages to users. So let's digg into the WordPress cron.

I mentioned before that WordPress cron is a "psudo cron", that means that it won't always execute the script at the real time you want. The cron job is triggered when somebody visits your website. That means if you have scheduled a function to be executed at 8am and if nobody visits your website at 8am the execution will be triggered suppost at 8:10 am when somebody has hit your site.

WordPress cron doesn't make your website slow!

May be you are thinking what if the cron-script takes a long time to be executed, will the visitors have to wait until the script is  executed. Nope! How can that be possible? If you look at the wp-cron.php file you will find a line

ignore_user_abort(true);

It's a php.ini configuration that sets that if you stop loading the site/script the script won't stop executing.

If you look at the wp-includes/cron.php file you'll find a line like this

wp_remote_post( $cron_url, 
array('timeout' => 0.01,
 'blocking' => false, 
 'sslverify' => apply_filters('https_local_ssl_verify', true)) );
 

That means WordPress will wait only 0.01 second for triggering the execution then it will abort but as you have set ignore_user_abort to true the script will be executing.This functionality is a huge advantage to execute large scripts in the WordPress cron.

Now we know the basics of WordPress cron but how will we implement this  beast?

Let's point out the most used cron WordPress functions:



wp_schedule_event($timestamp, $recurrence, $hook, $args);

Here $timestamp indicates the first time we want to execute the script. 

$recurrence is the interval between the two execution.
$hook is the hook or tag with with we attach our cron functions, $args are some optional parameters 

Let's make a plugin using the function.

<?php
/*
Plugin Name: cron-robot
Plugin URI: http://sabirul-mostofa.blogspot.com
Author: Sabirul Mostofa
Version: 0.1
*/


//adding the function to our  hook 'practice_cron_job'

add_action('practice_cron_jobs','practice_cron_func');

//calling the cron function 

if(!wp_next_scheduled('practice_cron_jobs'))
wp_schedule_event(time(),'hourly','practice_cron_jobs');


 // a function to add a option in the options table

function practice_cron_func(){
if($a=get_option('practice_cron'))
update_option('practice_cron',$a.'+');
else
add_option('practice_cron','init_value');

}

//for clearing the sceduled tasks

register_deactivation_hook(__FILE__,'deactivate_cron_hook');

function deactivate_cron_hook(){
wp_clear_scheduled_hook('practice_cron_jobs');
}
?>


what this plugin does
This plugin runs the function 'practice_cron_func' once in a hour. you
can make your own time intervals. see below in the 'what is hourly?' section.

what does the wp_next_scheduled() do?
It will take a hook as a parameter and will return the timestamp of the cron hook's next execution time 

you can add these lines in the above plugin to test:

echo wp_next_scheduled('practice_cron_jobs');
exit;

remove these lines after testing!



Why I am adding

if(!wp_next_scheduled('practice_cron_jobs'))
This is just to make sure that you are not making the same cron job again because when you are scheduling a event by
wp_schedule_event(time(),'hourly','practice_cron_jobs');
it will  schedule another event attached to the hook.


what is 'hourly'?

If you look at the function the second parameter is the time intervalbetween the executions. 'hourly' is the WordPress defined time interval. WordPress has three defined values that you can use they are
  • hourly
  • daily
  • twicedaily

You can add your defined values like 'every_minute', 'twice_a_hour' etc. This can be done by hooking a function to 'cron_schedules'. Follow the following procedure.

add_filter('cron_schedules','cron_minute');

function cron_minute($cron_schedules){
   
     $cron_schedules['every_minute'] = array(
      'interval'=> 60,
      'display'=>  __('every minute')
  );

    return $cron_schedules;
   
    } 
    
    

# Take a note that WordPress won't run cron jobs more than once a minute. see here for further details.

if we want to clear all the schedueled hooked with 'practice_cron_jobs'
use this code
wp_clear_scheduled_hook('practice_cron_jobs') ;
It will delete the cron tasks from the wp_options table

you can view the scheduled tasks attached to our defined hook by


wp_get_schedule('practice_cron_jobs');

When you deactivate plugin clear the scheduled hook which will free many scheduled events.

Use this code:


register_deactivation_hook(__FILE__,'deactivate_cron_hook');

function deactivate_cron_hook(){
wp_clear_scheduled_hook('practice_cron_jobs');

}


Recently I have been working on iappsy.com I have used cron to autogenerate the posts and it's working perfectly.

Limitations: It won't execute more than once if time limit is exceeded. For example if you have scheduled a task to do every hour and if a visior comes after 10 hours you can expect there will be 10 executions but actually it doesn't happen It'll execute only once.

WordPress won't execute cron jobs more than once a minute. see here for more details.

Monday, February 7, 2011

Eclipse Xdebug installation With XAMPP LINUX

Eclipse is a great open-source and free tool to manage your programming projects.

I have been using eclipse for my java and php projects. Xdebug is an awesome debugging tool you can use with eclipse to debug your php code.

I assume you are using xampp linux and you have set the server at /opt/lampp location.

Requiremnts:
eclipse classic/eclipse for php developers installation 3.6.1.

At first we shall install xdebug as an extension of php
1. Download the source code from http://www.xdebug.org/
2.unzip the tar file and move in to the directory.

Now we will use the phpize utility in your /opt/lampp/bin/phpize location
if it shows error like "segmentation fault", Run in the terminal sudo apt-get install php-dev

Xdebug website has an amazing insturction page. check it here
http://www.xdebug.org/docs/install

Don't forget to check the following wizard:
http://www.xdebug.org/find-binary.php

 After following the instruction you will have installed xdebug which you can check by the phpinfo();

Configuration at Eclipse:

Go to window>preferences>php

Set you php executable path first (e.g. /opt/lampp/bin/php)
Then configure the debug section. Select the php debugger as Xdebug.

You are almost done!

*********
Now Go to Run>Debug configuration
make sure you have selected xdebug. Now you're ready to bite the bugs .Hope this helps. Enjoy!





About Me

Web Developer From Dhaka, Bangladesh.