Showing posts from 2011

Design Pattern : behavioural

Chain of responsibilityThe purpose for this is for high cohesion. This means, to increase the reusability.This can be visualized with the specialization in manufacturing world. Each function performs specialized task, and chained together to perform a bigger task.These functions can be reused in other scope since they are doing specialized and simpler task.CommandThis is to encapsulate requests.Thus, for a program to call any command, it has the similar interface.InterpreterThis will translate the context passed by client and perform necessary task on it.IteratorThis to enable to parse through the whole data structure.MediatorAs a middle man between 2 sub-program to enable low coupling, or for decoupling purpose.MomentoThis is to capture the state of the class and stored in another objectGood for undo to restore the object to its previous stateObserverIt’s for event driven.As listener, or “don’t call me, I’ll call you” (After reading the online notes, I am not convinced by what was to…

Design Pattern : structural

CompositeIt looks like tree structure, the end node is called leaf.All the node has uniform interface, thus they can be used/called via uniform operation/data structureAdaptorThis is using another class to encapsulate the class to be accessed. Thus the caller will see/use the same interface regardless on how the class to be assessed being implemented.proxyThis is acting as a middle man to handle the client requests and sever response.FaçadeThis is using an interface to reduce the complexity.It packages the objects and methodsDecoratorThis is for dynamically to add new responsibility / variation on the methodsIt will hold the base class pointer, and the real implementation on the child class or actual object.BridgeThis is acting like multi-purpose adapter.It serves for multi-platform.FlyweightIt handles the pool of resources that are shared by the clients.Private Class Data This is to put the private and readonly data into a class, and being initialized by construtor.

Design Pattern : creation

Singletonthis is basically suitable for single instance through out the can contains the static variables used by the program.the benefits for this versus global variable is for data encapsulation purpose. You can have accessor and modifier functions as a guarding to set or read the variable.FactoryThe factory is a class to hold and control the creation of the class objects.The object class held by factory is the base class, thus any of the child class object can be instantiated, and transparent in the main program.Abstract FactorySimilar to Factory type, but the factory is an abstract class.This is good for multi-platform support, where the right factory will be instantiated based on the platform.BuilderThis is to hide the complexity of the object by the builder.The program can have multiple builder with same operation but different methods.There is a “directory” to call the right builder to call for operation to produce “product”.PrototypeUsing abstract class to forc…

OO concept and software development practices

I attended a 5-day Design Pattern class last year, and the summary that I published then, was the initial thought of this k-db site. I am revising them and put them here. :)

Day 1 : OO concept and software development practices
OO concept revised.Normally these are discussed :inheritancecompositionencapsulationpolymorphismDiscussed in class :abstractionencapsulationgeneralizationspecializationType of errorscompilationsyntaxcontextuallinkingruntimelogicalExample to show the best way to code to avoid error :if (x == 0)if (0 == x) <– using this coding style, missing a "=" in the condition statement will alarm error during compilation.Why it is a good practice to use static for variable declaration?for information people won’t use extern to access to it in other file, to ensure the value is not overwritten by unknown.error prone during linking.Software quality measurement :reusability : code, function, user experience (dialogue box/interface), software pattern can be …

CDB - constant database

This is my official 3rd web job, and I got to learn a new database, CDB.

I tested freecdb in UBuntu.

To install
sudo apt-get install freecdb
To create a database file (native) :
cdbmake <db file name> <temporary file name> < <record file name>
* remember to have the record file to have a new line at the end of the file to indicate end of record.

<record file name> format :
+<key length>,<value length>:<key>-><value>
Test the database :
cdbtest < <database file name>
To dump database :
cdbdump < <database file name>
To get a record :
echo `cdbget <key> < <database file name>`
To print out database statistic
cdbstats < test.cdb
For more details on cdb :

This database is good for simple database design, and data is populated during creation. As its name represent, the database should be static after creation, and used for data retrieval purpose. Thus, you don't see any update/i…

Object oriented concept

Have been kept this post in draft for quite some times. Not sure when I'll start with my next topic. So, I decided to post this first.

Here's the first chapter, object oriented concept.

Let’s go through an example before explore the object oriented jargons.

Say, there is a book shelf. We have some books, a pen holder, pens, pencils, sharpener in the book shelf as illustrated below.

These objects are related to each other in some ways. The bookshelf contains books, pens, pencils, pen holder and sharpener. The sharpener is used to sharpen the pencil. The pen holder holds the pens and pencils. There is variety of books in the bookshelf.

How is this related to object oriented concept?


A class is a collection of objects that has something in common. Say, we have a class of book. All books are classified in the class of book.


Object is something real that exists. It is classified with other objects that share some common attributes into class. We can have Mind Maps by To…

Code coverage in Perl

To get code coverage percentage :

/usr/perl -MDevel::Cover <perl scripts> <arguments>

The code coverage database will be stored at a directory called :


It will report out how many percentage hit per run. If you would like to view the total percentage hit result, you'll need to use another command :


This will report out the overall hit result. However, somehow I can’t' find which line of my perl scripts has not been hit to put more test for my test suite.

Example output :

----------------------------------- ------ ------ ------ ------ ------ ------ File stmt branch cond sub time total ----------------------------------- ------ ------ ------ ------ ------ ------ 90.9 50.0 n/a 100.0 100.0 85.7 Total 90.9 50.0 n/a 100.0 100.0 85.7 ----------------------------------- ------ ------ ------ ------ ------ ------

Another way of doing this, but this doesn't report the hit in percentage, but list out how many hits on each "effective"…

Enable syntax highlight in vi

Open a file, then type the following commands :

:syntax on :set syntax=verilog
The syntax files are the .vim files, you can use locate to look for it.

Example :

locate verilog.vim
In the directory, you'll see the list of syntax that your vi is supporting.

To make the syntax turn on by default to the language that you preferred, you can edit this file :

vi ~/.vimrc
Put these lines into the .vimrc file.

syntax on set syntax=verilog
Thanks to YZ shared this tips with me December last year. :)

Convert string format to date format in MySQL

I was lazy to do conversion from a source to MySQL database record, thus it is in original format, stored as string. E.g : Aug 23 2010 07:00PM

Later, after a long while, I was requested to sort the query output from MySQL database, sort by the date! It is too late to do conversion, and repopulate the table, so... I found this : str_to_date.

str_to_date(`date_str`, '%b %d %Y %h:%i%p')

Example usage :

SELECT str_to_date ('Aug 23 2010 07:00PM', '%b %d %Y %h:%i%p') as date
It will return you this :

2010-08-23 19:00:00
Then you can sort the date accordingly. :)

ORDER BY str_to_date(`date_str`, '%b %d %Y %h:%i%p')

For the specifier, you can refer to

Path comparison check in Perl

Problem statement : Checking 2 paths if they are from the same path.

In UNIX, we sometimes have softlinks to path. This has caused the path checking using pattern mathching is insufficient.

After much workarounds in my codes, finally, I found this. I just get the absolute path from the 2 given paths, then make comparison.

use Cwd 'abs_path'; if (abs_path($path1) eq abs_path($path2)) { ... ... }