Archive for the ‘programming’ Category

TSP Problem

editprogrammingcommentsNo Comments »
July 22nd 2010

I have just run into what appears to be a very classic problem that has been studied a lot:

The Problem:

A list of addresses in a neighborhood that someone must visit and complete in a timely manner.

This is very much related to a problem called The traveling salesman problem (TSP) where an optimal walking order needs to be computed which result in the shortest distance traveled and/or shortest time taken.

After taking a look at different approach to this problem and taking look at a current javascript implementation at
http://www.gebweb.net/optimap/

It gave me hope that this problem can be solved with web implementations, however there were two problems with the above solution.

1. It restricted to 24 addresses (Which is fine because TSP originally is for larger area route planning, even between cities)
2. Only given 15 or less address did it return the optimal route

The solution:

Due to computational resources and restrictions in scripting languages, I have decided that the best and easiest way to solve this problem would be using the “Nearest Neighbor” approach.

This approach takes the closest location as the next location and repeat this process for route planning. Although this is not the most optimal way of solving the problem but it provides a couple of advantages:

1. Can always calculate straight line distance to the next address and then use google map API to calculate the direction
2. The step can be repeated and increment the current location to the next address which is just calculated.

The biggest problem with the approach so far is that in order to calculate the route (On the server side), we must specify a starting point. Some ideas include use one of the boundary corners as a starting point, or use the middle most point and walk in a circular fashion.

Will keep updated with some implementation soon.

Useful PHP class: ezSQL

editphp / programmingcommentsNo Comments »
November 23rd 2009

I first used this class 3 years ago, I found it still to be one of the best php class you can find on the web.

the ezSQL class enables you to use php to connect to many different databases including

  • MySQL
  • MSSQL
  • PostgreSQL

It provides many methods to retrieve single data value, data sets and rows of data.

I especially find the following method useful

// get n number of rows of result set based on your query
// can return a standard object, associate array or numeric (index) array
$db->get_results(string "query string", [OBJECT | ARRAY_N | ARRAY_A]);

// returns a single variable from database
// very useful for select count or other aggregate value SQL statements
$db->get_var(string "query string");

// execute a query without return, gives true/false if the query succeed or fails
// useful for create table, insert, update queries
$db->query(string "query string");

You can download it here

php func_get_args

editphp / programmingcommentsNo Comments »
September 22nd 2009

Recently looking in Drupal’s source code I found the func_get_args function. It is quite a powerful function for newer version of php

It basically takes in a random number of arguments and parses them in an argument array.

Basically, here’s what how it works

function foo_bar() {

$args = func_get_args;

for($i = 0; $i< count($args; $i++)
{
       echo $args[$i] . '< br/ > ';
}

foo_bar('monday', 'tuesday', 'wednesday');

The above function call will return

monday
tuesday
wednesday

It works very much like passing in an array as a parameter except it's less clunky.

function foo_bar($args = array())
{
     for($i = 0; $i < count($args); $i++)
     {
          echo $args[$i] . '< br/ > ';
     }

}

foo_bar(array('Monday', 'Tuesday', 'Wednesday'));

Adding javascript to specific node/url in drupal

editDrupal / Open source development / phpcomments1 Comment »
July 28th 2009

This was in one of the module I’ve written in Drupal and I thought it would be useful to share.

The Problem: I wanted to dynamically add javascript file to a specific url under Drupal. The benefit would been that I did not have to include the .js file for the whole site therefore optimize the performance of site. Not to mention that it by including the javascript file in a specific url, it will not interfere with other scripts, etc.

To review, the function to add javascript in drupal is

drupal_add_js() (http://api.drupal.org/api/function/drupal_add_js/)

However, this function will add a javascript file or script to the head section on all of the drupal path/urls, making it clunky.

The Solution:


// The function passes in a parameter which is the url you want to check
// It will return true if the url the user is browsing matches the url you are trying to
// act on
function module_name_helper_is_page($check_url)
{
	global $base_url;

	$page_url = module_name_helper_get_curl_url();

	if(!stristr($page_url, $check_url))
	{
		return FALSE;
	}
	else
	{
		return TRUE;
	}
}

/*
 * This function simply returns the current url of the web page
*/
function module_name_helper_get_curl_url()
{
	$pageURL = 'http';
	if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
	$pageURL .= "://";
	if ($_SERVER["SERVER_PORT"] != "80") {
	$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
	} else {
	$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
	}

	return $pageURL;
}

To put it into action, say we wanted to only add a javascript file to the user registration page, here would be what it looks like. (By the way, module_name stands for the module you are writing)

if(module_name_helper_is_page($base_url . 'user/register'))
{
     drupal_add_js(drupal_get_path('module', 'module_name') .'/yourjavascript.js', 'module', 'header');
}

Cheers!