Archive for the ‘php’ Category

Test drive your PHP code

Monday, March 30th, 2009

Lately I’ve ventured fully submerged into the world of Test driven development (TDD).

This might start out a bit scary, especially if you have only heard about it, but never done it yourself. There is a couple of good reads on the net, so you might want to start out by familiarising yourself with this exciting way of doing things.

Have a look at http://en.wikipedia.org/wiki/Test-driven_development or Google it.

What is test driven development?

Test driven development (TDD) is more a change in coding philosophy than anything else. Some of us might say: “…yip, I’ve written a couple of unit tests when I had some spare time at the end of my project.”

To be honest, this is a bit of the wrong way round method of doing things, kind of like building a house by putting on the roof first. I think Martin Fowler describes it best when he pointed out these three components.

  • Write a test for the next bit of functionality you want to add.
  • Write the functional code until the test passes.
  • Refactor both new and old code to make it well structured.

TDD is a branch of Agile development which was based upon the first stages of extreme programming, but has really become a coding methodology that changed the way in which a lot of projects are being done.
(more…)

the down-low on mobile device detection

Thursday, February 19th, 2009

so - you say you want to detect which mobile devices hit your site? - in the past, this has been a bit of an issue, but lately - with really nice projects available out there such as WURFL or DeviceAtlas, you are able to concentrate harder on other issues, instead of having to write a complete library of your own.

so for this, i’ve decided on DeviceAtlas.  just head on over to DeviceAtlas and open a developers account - you will get a one year developer’s license to play around to see how cool it is.

after registering - click on the downloads link - then go to the php example and download the source files.  after de-tar-and-un-zipping the file, just extract the contents.  at the moment all we are really interested in, is the Mobi/Mtld/DA directory and its contents - also create a json directory and drop the Sample.json file inside.

dump everything into a web directory somewhere. :-)

(more…)

game theory pattern code example

Tuesday, February 17th, 2009

so i finally took the time to write some code to better articulate my thoughts on ‘game theory pattern’.

/*
* Abstract Unifier class to select objects from different sources.
*/
 
abstract class childObjectUnifier
{
    protected $currentObjectLocation;    
 
    public function __construct()
    {
        $this->currentObjectLocation = get_class($this);
    }
 
    public function getData()
    {
        switch ($this->currentObjectLocation)
        {
             case 'currentServerLoginObject':
                    return $this->currentServerLoginFunction();
                    break;
 
             case 'remoteServerLoginObject':
                    return $this->remoteServerLoginFunction();
                    break;
 
             default:
                    die('Current user load not available');
        }
    }
}
 
/*
* Login Object which exists on the current server.
* This object could still be hit on the current server if the current user load is not high.
* Better utilizes the current server.
*/
 
class currentServerLoginObject extends childObjectUnifier
{
    public function currentServerLoginFunction()
    {
         return 'Some function on the current server';
    }
}
 
/*
* This login object could exist remotely, for e.g. a restfull/soap/xml-rpc service
* which could be hit if the current server load is climbing.
* Could possibly use a dedicated 'login' server if user load is exceedingly high on current machine.
*/
 
class remoteServerLoginObject extends childObjectUnifier
{
    public function remoteServerLoginFunction()
    {
        return 'Some function on the remote server';
    }
}
 
/*
* The game theory pattern which decides which objects to instantiate based on logical
* decisions made by solid data.
* In this example the current user load.
*/
 
class GameTheoryPattern
{
    public $currentObject;
 
    function __construct($iCurrentUserLoad)
    {
        $this->currentObject = $this->baseObjectUponStrategicData($iCurrentUserLoad);
    }
 
    private function baseObjectUponStrategicData($iCurrentUserLoad)
    {
         switch ($iCurrentUserLoad)
         {
             case $iCurrentUserLoad < 1000:
                    return new currentServerLoginObject();
                    break;
 
             case $iCurrentUserLoad >= 1000 :
                    return new remoteServerLoginObject();
                    break;
 
             default:
                    die('Current user load not available');
        }
    }
}
 
//GetCurrentUserLoad
$iCurrentUserLoad = 1000;
 
//Create Login Object based on the Game Theory Pattern
$oLogin = new GameTheoryPattern($iCurrentUserLoad);
 
//Call an function from the unifier class
echo $oLogin->currentObject->getData();
 
?>

It should be pretty self explanatory - due to the high level comments :-)

feel free to add suggestions or comments - since i’m pretty sure there could be a better way, but for now, just to convey the message it should be sufficient.

crossing the mvc divide, kohana and zend style

Friday, January 23rd, 2009

so, i’ve been pretty much a zend framework addict, ever since i coded my first bootstrap.  thinking back to that countless hours trying to understand the beast that is zf, ahhh, what fond memories…  and lately i’ve also been playing around a bit with kohana, which is another web based mvc framework, but definitely a bit more lightweight and easier to use than others.

there is however a bit of an issue with web based mvc frameworks, and in my opinion a large freaking elephant that no one seems to talk about.  how can i call a controller from within a view and assign an action to it - and is it correct to do so?

and before the quiet whispers start, i’d like to note that this does not necessarily go against mvc principles.  if you think about it - the whole point of mvc is to seperate business logic, application logic and the view (presentation logic) - and i’ve confirmed this with a couple of conversations with other developers.  but on the other hand, if you feel that i have overstepped a boundary - please do let me know if there is a better, or more correct way of doing this.

(more…)