2009年7月5日 星期日

dblink of postgresql

現今在承接南部第一大鋼鐵廠的資訊系統工程後, 遭遇到必須連線至遠端的postgresql,
擷取所需的資料, 並不透過Tcp/Ip Socket進行訊息封包的傳送

便回想當初在第一家電子公司當小小MIS, 便曾使用過Oracle其一功能, 簡稱db link,
不必在ap上, 另外多建立一個資料庫連線, 可利用原資料庫連線擷取另遠端資料庫的功能

於是上網google, 果不其然postgresql也支援著類似的功能, 不愧是自由軟體界資料庫第一把交椅,
而安裝動作也很簡單, 整理如下所述:

## 安裝 (至存放原始安裝檔之路徑)
$> cd contrib/dblink
$> make
$> make install

## dblink相關函式安裝 (至postgresql安裝目錄之路徑)
## 此時會新增兩個檔案 pgsql/lib/dblink.so(函式庫) & pgsql/share/contrib/dblink.sql(語法安裝)
$> su - postgres
$> cat dblink.sql psql

參考網址: db link sql

2009年5月23日 星期六

Difference between Big Endian and Little Endian

Difference between Big Endian and Little Endian

原文釋意:
"Little Endian" means that the low-order byte of the number is stored in memory at the lowest address, and the high-order byte at the highest address. (The little end comes first address.)

"Big Endian" means that the high-order byte of the number is stored in memory at the lowest address, and the low-order byte at the highest address. (The big end comes first address.)

中文釋意:
為什麼叫『大頭』派?因為電腦把『大』的位數放在『前面』 (記憶體編號小的就是前面)。就好像我們寫十進制數字 123 的意思一百二十三 (100 + 20 + 3),也就是最大位--百位,寫在前面。
相反地,如果把『小』的位數放在『前面』,那就是『小頭』派了。如果有一個民族的文字,把 123 解釋成三百二十一 (1 + 20 + 300),那他們就是『小頭派』。

阿拉伯文的文字書寫,是從右向左橫寫,但是遇到數字的時候,卻是跟我們一樣從左向右寫。如果阿拉伯人讀文字與數字的時候,都是從右向左讀,則他們會先讀到數字的最小位。在這個意義之下,阿拉伯人是『小頭派』。

int i = 2562 + 2x256 + 3 = 00000000 00000001 00000010 00000011 位元排列方式 = 0 1 2 3 無號整數方式

CPU 一定會配給連續四個記憶體給 i,但是這四個記憶體,卻有兩種放置四個 byte 的可能順序。如果我們一律按照記憶體位址從小到大的順序來講,則四個記憶體放置的字元可能是先 00000000 然後 00000001 然後 00000010 最後 00000011

Lo-------------->Hi (Big Endian)
+-+-+-+-+-+-+-+-+-
00 01 02 03
+-+-+-+-+-+-+-+-+-
Hi<--------------Lo (Little Endian)

2009年4月22日 星期三

How to read .ini file by using glib

在Windows API中, 提供相當方便的函式庫, 可以簡單地讀取.ini檔案,
但在c++ standard library中, 卻不見著任何蹤跡,
雖說自己很喜歡coding, "蛋"不是這麼搞的啦!!

google search提供了一個相當不錯的工具 -- glib

不免俗地要介紹一下本文主角- glib 。

gnome是基於gtk+開發的一套桌面環境,gnome和KDE作為兩大最流行的桌面環境,在全世界廣泛使用。 只要是在Linux下工作的開發人員,對於gtk+一定不陌生。 而對於glib,這個gtk+下的無名英雄,其功能強大卻鮮為人知。

glib不是glibc,儘管兩者都是基於GPL的開源軟體。但這一字之差卻誤之千里,glibc是GNU實現的一套標準C的庫函數,而glib是gtk+的一套函數庫。
在linux平臺上,像其他任何軟體一樣,glib依賴於glibc。glib不是一個學院派的東西,也不是憑空想出來的,完全是在開發gtk+的過程中,慢慢總結和完善的結果。

如果你是一個工作3年以上的C語言程式師,現在讓你講講寫程式的苦惱,你可能有很多話要說,但如果你有時間研究一下glib,你會發現,很多苦惱已不再成其為苦惱,glib裏很多東西正是你期望已經久的。

gobject是glib的精粹,glib是用C實現的,但在很大程式是基於面向物件思想設計的,gobject是所有類的基類。signal在其中也是一大特色,signal與作業系統中的signal並不一樣,它是類似消息一樣的東西,讓消息在各個物件間傳遞,但儘量降低物件間的耦合。

1. setup the glib

$> ./configure
$> make
$> make install
2. include glib header files and library to compile
##顯示glib include的路徑
$> pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include

##顯示glib library的路徑
$> pkg-config --libs glib-2.0
-L/usr/lib -lm -lglib-.20

並在程式的標頭檔加入下列文字
#include "glib.h"

完成上述兩個簡單的步驟, 就可以親身去體會glib的強大之處囉!!

參考來源::
GLib Reference Manual
Wiki GLib

2009年4月14日 星期二

指標的指標 (pointer to pointer)

int **iptr;
上面是宣告了一個指標指向另一int的指標, 很饒舌對吧!簡單說, 就是指標的指標 (pointer to pointer)

何以需要這樣的用法?在網路上拜讀了某位前輩的文章的範例, 突然間茅塞頓開...



int gint = 0;
void changePtr (int *pInt)
{
pInt = &gint;
}
void main ()
{
int local_int = 1;
int *localPtr = &local_int;
changePtr (localPtr);
printf ("%d\n", *localPtr);
}



上述例子, 印出來的數值仍為1, 因為changePtr的pInt是localPtr的複本, 對pInt做變更, 其實並不會影響到localPtr本身

使用call by pointer (or address)來傳遞參數, 被呼叫的函式只是複製pointer的值過去罷了!
所以當我們想在函式內改變外來的pointer的值(非pointer所指向的變數), 且函式外部能使用其改變的pointer的值, 此刻就是call by pointer to pointer登場的最佳機會!

下述例子, 印出來的數值變為gint的0, changePtr()的pInt是&localPtr的複本, 對其做任何變更, 並不會去影響到localPtr本身, 但在changePtr(), 我們是對pInt所指向的內容(就是localPtr)做變更, 由原本存放local_int的address, 變更為存放gind的address




int gint = 0;
void changePtr (int **pInt)
{
*pInt = &gint;
}
void main ()
{
int local_int = 1;
int *localPtr = &local_int;
changePtr (&localPtr);
printf ("%d\n", *localPtr);
}

2009年3月22日 星期日

如何在vim支援doxygen彩色語法

若在vim中, 可以支援doxygen的 彩色語法, 一定可以大大增加可讀性
沒想到, 這是真的, 這下子在註解時, 更可以把doxygen發揮到極限

其實步驟非常簡單:
  1. 於home directory下, 建立.vim/after/syntax的目錄
  2. 下載doxygen.zip (v1.15)
  3. 解壓縮上述檔案, 將doxygen.vim & doxygen.txt複製至~/.vim/after/syntax
  4. 針對每一個想到支援doxygen syntax coloring的檔案類型, 建立soft link
$> cd ~/.vim/after/syntax
ln -s doxygen.vim c.vim
ln -s doxygen.vim cpp.vim
ln -s doxygen.vim java.vim

參考來源:
Doxygen syntax coloring in vim

2009年3月14日 星期六

What is Twitter??

Twitter是在中山大學學分班課程中, 黃慶祥教授提及的名詞,
只是想不到全班30來人的資訊人, 知道這個名詞的人竟是小熊兩三隻,
想當然爾我是隻小狗, 而不是小熊!!

查了一下譯典通, Twitter = 吱吱喳喳 = 三姑六婆 = 閒話家常

google search 該字詞, 文字解釋不少, 但我喜歡以下這段影片以生動的情境描述,
Twitter可以在你我的日常生活中, 扮演著什麼樣的功能角色??







影片中, 一開場就說了句很關鍵的話, "What are you doing?" (你在做什麼呢??)
在日常生活中, 只是一句很直覺的關心語句, 但在網路上卻無法很直覺地回答朋友們,
又或者是, 想輕鬆簡單地分享一則資訊, 例如"今日的天空很湛藍",
也許有人會說, 透過e-mail、blog、msn...等等, 但這會不會太小題大作了呢??
我收e-mail最不喜愛看到一些無關要緊的信件,
而blog也不希望記錄下這毫無參考價值的訊息,
在msn要告訴大家, 就得一個一個開啟視窗, 一個一個地訊息傳送..
哇..這麼簡單的小事, 卻要歷經這麼繁瑣的過程, 這會不會本末倒置了!!

Twitter就是可以讓你輕易分享你的生活小事給周遭的朋友知道,
在一個頁面上, 就可以分享交流彼此朋友的生活點滴, 而且每則消息不超過140個字,
例如"我在高雄明誠星巴克享受午后咖啡時光", 透過Twitter分享,
你的朋友隨即可以知悉你最新的動態、心情、作息,
或許他也正巧在左營附近, 就可以順道前往與你共享一杯咖啡的悠閑時光

參考資料

2009年3月13日 星期五

How to format date and time by using C lib

在Linux中, 如何有效快速地格式化時間為字串格式呢??
原來有個系統函式可以簡易地達到這樣的目的,

size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

s : 存放日期時間轉換為字串格式的buffer
max : 上述s的最大長度
format : 格式化符號
tm : 日期時間結構

example:

int main () {
char msg[256];
time_t now;
struct tm *timestr;

time (&now);
timestr = localtime (&now);
strftime (msg, sizeof(msg),"%Y%m%d%H%M%S", timestr);
printf ("the datetime is %s \n", msg);
}

則會輸出以下字串
the datetime is 20090315093045


出乎意料地簡單吧!!