I Made Krisna's Times My Way to Write the Times

27May/100

Removing ‘index.php’ from CodeIgniter URL

CodeIgniter is the one of most famous PHP Framework now. But if we're using CodeIgniter, by default the URL will be shown as http://localhost/index.php/welcome. Some people doesn't like this way to accessing a website, the index.php suffix in the URL.

Here is some step that can make us accessing the website using http://localhost/welcome. But we're also still accessing the url ith index.php suffix. Before, i will list my system so if we're using different system it may cause different solution.

  1. Apache 2.2.14
  2. PHP 5.2.12

STEP one : create .htaccess file

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#‘system’ can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn’t true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#This last condition enables access to the images and css folders, and the robots.txt file
#Submitted by Michael Radlmaier (mradlmaier)
RewriteCond $1 !^(index\.php|images|robots\.txt|css)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
# If we don’t have mod_rewrite installed, all 404’s
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
</IfModule>

STEP two : edit CodeIgniter Configuration

$config['index_page'] = "index.php";

TO

$config['index_page'] = "";

That's all. Go and try that....

Source and References

  1. http://arifn.web.id/blog/2009/02/06/codeigniter-removing-indexphp.html
27May/102

Binary Search Tree Java Source Code

Binary Search Tree is a kind of Binary Tree. Let's start with Tree. Tree is a data structure model which looks like a reversed tree, the root placed on top of the tree and the leaf placed on the bottom of the tree. The model will be looks like pyramid shape. Binary Tree is a tree which every leaves / nodes just have maximum two child leaves, that's why we call it binary (base 2). Binary Search Tree... this kind of binary tree that have the position of leaves "sorted". All of elements on the left of a leaf must be smaller than the leaf and all of elements on the right of a leaf must be bigger than the leaf. What about same value? that's up to you to place it where.

Let's look this example from wikipedia, "F" is the root of the tree. "B" is a left child of "F". "G" is a right child of "F". "B" is a parent of "A". "B" also a parent of "D".

Binary Search Tree

Creating Binary Search Tree can't use the Node which is used for Linked List, Stack, and Queue. Honestly, the Node can be used but the context will be different because the pointer to other Node we will named child. I also give additional pointer, "parent" for pointing the parent of the Node. Let's see the implementation on Java Programming Language.

public class BinaryTreeNode {

    public BinaryTreeNode parent;
    public BinaryTreeNode leftChild;
    public BinaryTreeNode rightChild;

    private String info;

    public BinaryTreeNode(String info){
        this.parent = null;
        this.leftChild = null;
        this.rightChild = null;
        this.info = info;
    }

    public String getInfo(){
        return this.info;
    }

    public void setInfo(String info){
        this.info = info;
    }

}

Then after we have the Nodes we can construct the Binary Search Tree. Which the most important method is inserting Nodes. If the tree root is null (the tree is new) we just make the node as root. But if the tree is not empty, we must track or find the right place of that node. The concepts is to find an empty place that meet the rules of binary search tree.

  1. If the value of the new node less than current node
    1. If the left child of current node is not empty, move current node to left child
    2. else, the left child of current node is new node
  2. If the value of the new node equal or more than current node
    1. If the right child of current node is not empty, move the current node to right child
    2. else, the right child of current node is new node
public class BinarySearchTree {

    private BinaryTreeNode root;

    public BinarySearchTree(){
        this.root = null;
    }

    public void insertNode(BinaryTreeNode node){
        if (this.root == null){
            this.root = node;
        }
        else{
            trackPosition(node, this.root);
        }
    }

    private void trackPosition(BinaryTreeNode node, BinaryTreeNode start){
        String sInfo = start.getInfo();
        if (sInfo.compareTo(node.getInfo()) > 0){
            if (start.leftChild == null){
                start.leftChild = node;
                node.parent = start;
            }
            else{
                trackPosition(node, start.leftChild);
            }
        }
        else{
            if (start.rightChild == null){
                start.rightChild = node;
                node.parent = start;
            }
            else{
                trackPosition(node, start.rightChild);
            }
        }
    }

}
27May/100

CodeIgniter Code Completion NetBeans IDE

Sorry, but this post no longer works because of the references sites has been closed

CodeIgniter

CodeIgniter, this is one of PHP Framework that can make our job to do PHP Programming easier. You can get that CodeIgniter framework here [Download CodeIgniter]. At this written, the latest version of CodeIgniter was 1.7.2

The problem is if we're using CodeIgniter or other PHP Framework, the IDE like Dreamweaver or NetBeans cannot use their main features, Code Completion. What is Code Completion? That's the feature which can help us to show the functions or variable that can be used. Example if we just use native PHP on Dreamweaver, we just write "mysql_" then there's must be shown the functions which use "mysql_" prefix.

Thanks to Rakibul Hasan, my references of this post. We now can solve the problems, we can use code completion for CodeIgniter on NetBeans. How?

  1. Download the CodeIgniter PHP Framework
  2. Extract it on your Webserver so that you can run it a http://localhost/YOUR_CI
  3. Open your CodeIgniter project with NetBeans
    1. Click File >> New Project >> Choose PHP >> PHP Application with Existing Source
    2. Choose your CodeIgniter folder, example [C:\xampp\htdocs\ci] >> Next
    3. Choose your server type, leave it if you work locally
    4. Finish
  4. Check your CodeIgniter folder example [C:\xampp\htdocs\ci], there must be 'nbproject' folder
  5. Download the files from here [CodeIgniter Code Completion for Netbeans]
  6. Extract the .zip files anywhere
  7. Copy that files to 'nbproject'
  8. Close your NetBeans and Open it again... Finish, check it out!

On my experience, that code completion only works at Controllers and Models, not working at Views. For more information and question you can go to my references site.

Source and References :

  1. http://rhasan.com/blog/2009/09/codeigniter-auto-complete-with-netbeans/
  2. CodeIgniter.com
27May/100

Inheritance Vs Object Composition Java Source Code

Let's start with what is Inheritance and what is Object Composition.

Inheritance is giving the characteristic of an object to the new object which inherited from the first object, as example is a man inherit eyes, hands, head, etc from human. In other way, we can say that inheritance is expanding or extending the parent object by the child object. Inheritance usually said "IS A", man is a human. We see the implementation later...

Object Composition is inserting the whole object to the new object which created to contain the first object, as example is a computer contain of processor, RAM, Motherboard, etc. In other way, we can say that object composition is creating a new object from other objects. Object Composition usually said "HAVE A", computer have a processor.

Then which is better, Inheritance or Object Composition? Both of them have some characteristic that give advantage to us. With inheritance, we can inserting the derived objects to their base object where Object composition cannot do that (this can be solve by Object class). But Object Composition can construct a new object from many objects where inheritance just allow one object to be inherited (this can be solve by interface).

Okay let's see the implementation example. First we must define the base class...

public class RoboCore {

    private int coreID;

    public void setCoreID(int ID){
        this.coreID = ID;
    }

    public int getCoreID(){
        return this.coreID;
    }

    public void sayCoreID(){
        System.out.println(this.coreID);
    }

}

Then here is the code of inherit the base class

public class InheritedCoreRobo extends RoboCore{

    private String roboName;

    public InheritedCoreRobo(String Name, int CoreID){
        this.setCoreID(CoreID);
        this.roboName = Name;
    }

    @Override
    public void sayCoreID(){
        System.out.println("Core ID ["+getCoreID()+
                "] Inherited to "+this.roboName);
    }

    public void sayRoboName(){
        System.out.println("My Name is "+this.roboName);
    }

}

And here is the code for composing from base class

public class ComposedCoreRobo {

    private String roboName;
    RoboCore core;

    public ComposedCoreRobo(String Name, int ID){
        this.roboName = Name;
        this.core = new RoboCore();
        this.core.setCoreID(ID);
    }

    public void sayCoreID(){
        System.out.println("Core ID ["+this.core.getCoreID()+
                "] Composed to "+this.roboName);
    }

    public void sayRoboName(){
        System.out.println("My Name is "+this.roboName);
    }

}

I'll also give you an example main source code for testing the code above.

    public static void main(String[] args) {

        InheritedCoreRobo ICRobo = new InheritedCoreRobo("ICRobo", 101);
        ComposedCoreRobo CCRobo = new ComposedCoreRobo("CCRobo", 777);

        System.out.println("Inheritance Robot");
        ICRobo.sayRoboName();
        ICRobo.sayCoreID();

        System.out.println("\nObject Composition Robot");
        CCRobo.sayRoboName();
        CCRobo.sayCoreID();

    }

The output result is....

Inheritance Robot
My Name is ICRobo
Core ID [101] Inherited to ICRobo
Object Composition Robot
My Name is CCRobo
Core ID [777] Composed to CCRobo

The example above is show that inheritance can construct the object without creating any base object first. So we can imagine the inheritance is the RoboCore is extended by other stuffs to build a InheriteCoreRobo, but on Object Composition, we can imagine the ComposedCoreRobo which has slot for RoboCore is inserted with RoboCore object.

Back to above, inheritance "is a", InheritedCoreRobo is RoboCore because the original version of InheritedCoreRobo just a RoboCore but with some modification and adding some stuff, it become InheritedCoreRobo. object composition "has a" because the ComposedCoreRobo is a stand-alone object which has a place for inserting RoboCore so we can say ComposedCoreRobo have a RoboCore.

24May/100

Unbounded Knapsack Java Source Code

Hi there, now in this time i'll try to explain about solving Unbounded Knapsack Problem (UKP) with Dynamic Programming (DP) Method. What is Knapsack Problem? The basic problem is how to choose combination of items from a set of items given to get the maximum value with the knapsack weight or volume restriction. For example, we want to go camping in the mountain, we must bring some stuff like clothes, foods, and drugs. But we just have the limited bag (knapsack) capacity so we must choose the combination of those items which can give us the most benefit.

What's the different with bounded knapsack? We also call the bounded knapsack with 0-1 knapsack or binary knapsack. Unbounded knapsack is 0-1 knapsack too, but in the UKP we can take more than one items from the same kind. Example, we bring 2 clothes, 5 foods, and 3 drugs. Not in 0-1 knapsack problem, we just can bring 1 items of the same kind.

How the Dynamic Programming Works? The DP method work with the idea "the optimum value of if this item a put on this knapsack is the optimum value of knapsack weight without this item plus value of this item" little confusing? yes i think so. in other word we can say if i reach this weight with this item, then the maximum value is the previous items was added in knapsack plus the new items value. Example : If we want to reach knapsack weight 5 with adding items with weight 2 then the optimum value is : "the optimum value of knapsack with weight 3 plus the value of item with weight 2".

f(s) = Value(i) + f(s - Weight(i))

So, we can arrange the dynamic table increasingly from most lightweight knapsack optimum value. from weight=0 which must be 0 (zero) valued because nothing can get in on that knapsack capacity, until knapsack weight=maximumweight. With this method we never calculate again the optimum value of previous knapsack before which needed to calculate the present optimum value.

Okay the implementation, first we need some variables and arrays to store the information

    private static int   maxWeight = 0; //maximum weight of knapsack
    private static int[] w;             //weight of each item
    private static int[] v;             //value of each item
    private static int[] a;             //maximum value each knapsack
    private static int[] l;             //last item added each knapsack

And of course getting the user input

    private static boolean getData(){
        System.out.print("Input Maximum Knapsack Weight : ");
            maxWeight = new Scanner(System.in).nextInt();

        System.out.print("Input the weight of each item (separate by space) : ");
            String[] temp = new Scanner(System.in).nextLine().split(" ");
            w = new int[temp.length];
            for (int i=0;i<temp.length;i++) w[i] = Integer.valueOf(temp[i]);

        System.out.print("Input the value of each item (separate by space) : ");
            temp = new Scanner(System.in).nextLine().split(" ");
            v = new int[temp.length];
            for (int i=0;i<temp.length;i++) v[i] = Integer.valueOf(temp[i]);

        if (w.length != v.length){
            System.err.println("Number of weight and value data not match!");
            return false;
        }
        return true;
    }

Then we can get in to the method, the unbounded knapsack

    private static void fillUnboundedKnapsack()
    {
        int   n = w.length;         //number of items

        /**
         * Initializing table
         * table a with default value =  0
         * table l with default value = -1
         */
        a = new int[maxWeight+1];
        l = new int[maxWeight+1];

        setAllArrayValueTo(a,  0);
        setAllArrayValueTo(l, -1);

        /**
         * Unbounded Knapsack Step
         */
        for (int i=1;i<a.length;i++)
        {
            for (int j=0;j<n;j++)
            {
                if (w[j] <= i &&
                        (v[j] + a[i - w[j]]) > a[i])
                {
                    a[i] = v[j] + a[i - w[j]];
                    l[i] = j;
                }
            }
        }
    }

How can we know the items combination from only the sequence code above? Check this out...

    private static int[] trackCombination()
    {
        int[] combination = new int[w.length];

        int postTracker = l.length-1;
        int itemTracker = l[postTracker];

        /**
         * Tracking back the combination
         */
        while (itemTracker != -1 && postTracker > 0)
        {
            combination[itemTracker]++;
            postTracker = postTracker - w[itemTracker];
            itemTracker = l[postTracker];
        }

        return combination;
    }

And finally the main method which cover it all....

    public static void main(String[] args)
    {
        if (!getData()) return;             //getting data from user
        fillUnboundedKnapsack();            //run the algorithm
        int[] optimal = trackCombination(); //seek for items combination

        /* Just an Output Step */
        System.out.println("Maximum Value : " + a[a.length-1]);
        System.out.print("Combination : ");
        for (int i=0;i<optimal.length;i++){
            System.out.print(optimal[i] + " ");
        }
        System.out.println();
    }

Almost forgot... maybe you ask about the setAllArrayValueTo() method, it just a complementary method to set all array values to the second parameter. The code just like..

    private static void setAllArrayValueTo(int[] array, int value){
        for (int i=0;i<array.length;i++) array[i] = value;
    }