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

27May/100

CAM, TS, SCR, DVDRip, etc Video Types

Hi, when i'm going to choose some videos to download, there is some label that shown in various files, such as "CAM", "TS", "SCR", and "DVDRip". What is it? Does it mean something? I'm curious about that and start searching about this topic. Finally i found it! that's the type of videos from what or how the videos created. Let me expain about those types with my own word from combining from many sources and references.

  1. CAM
    CAM is a rip from digital video camera. Usually the videos was recorded on movie theatres with tripod or something but because that's recording on movie theatre, there is a very small chance the record is clean. It may come with camera shake, shouting people or laughing, and a someone's shadow blocking the camera. The quality also very low the audio isn't clear because of much other sounds and the video is dark because recorded on movie theatre which is on dark condition when the movie playing.
  2. TS or TELESYNC
    TELESYNC is slight better than CAM, TS also use digital camera for recording the video or movies but the TS video commonly use other audio source, it maybe directly taken from the original output so TS will be better at audio quality than CAM because there are smaller chance to get audio noise.
  3. TC or TELECINE
    TELECINE is a rare method. TC will copy directly from movie reels and make it to video format. This form of video is rarely found when we want to download some video.
  4. SCR or SCREENER
    SCREENER is generated from the movie which was sent to someone or somewhere in order to get review or promotional reason. On SCREENER videos, we may find a running text or some text that prohibit the copying of this video or showing the copyright of the video. SCREENER usually transferred to VCD form or SVCD for better result.
  5. DVDscr or DVD-SCREENER
    Same as SCREENER but DVDscr is transferred to DVD form.
  6. DVDRip
    DVDRip is getting from the original release of DVD so the quality of the result is quite good. The original release of DVD is ripped by some software and transferred to video form and stored to hard disk. DVDRip also can be found with DivX or XviD name.

Source and References :

  1. http://uneasysilence.com/archive/2006/08/7331/
  2. http://en.wikipedia.org/wiki/Cam_(bootleg)
  3. http://en.wikipedia.org/wiki/Telesync
  4. http://en.wikipedia.org/wiki/Telecine
  5. http://en.wikipedia.org/wiki/Screener
  6. http://en.wikipedia.org/wiki/DVDRip
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

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;
    }
24May/100

DataGridView DataSource C# Source Code

How to fill DataGridView items on c# if we're connect using OleDbConnection?

We're gonna use DataSet for filling the DataGridView.. Here'is the example...

The information about variables and objects used is

  1. dataGridView1 --> DataGridView GUI Object from Toolbox
  2. Program.con --> OleDbConnection (using System.Data.OleDb)
  3. combo_produk_id --> ComboBox GUI Object from Toolbox
        private void Item_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = null;
            DataSet ds = new DataSet();

            Program.con.Open();

            OleDbCommand cmd = Program.con.CreateCommand();
            cmd.CommandText = "SELECT * FROM produk";

            OleDbDataReader reader = cmd.ExecuteReader();
            combo_produk_id.Items.Clear();
            while (reader.Read())
            {
                combo_produk_id.Items.Add(reader.GetValue(0));
            }

            Program.con.Close();

            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            adapter.Fill(ds);

            dataGridView1.DataSource = ds.Tables[0];

        }