2009年2月23日 星期一

心痛的感覺

很喜歡一個女生,有氣質又漂亮,只是似乎很不好追,幾次短暫的接觸,態度很冷的,令我直打哆嗦,大概是對我沒意思吧!心碎!!長這麼大,很少有這種感覺說,心頭酸酸的,想提起勇氣,又不想再經歷這種感覺,真是矛盾。

換個方式好了,我個性直來直往的,大概嚇到人家了吧!用書面方式好了,避免去嚇人,希望有用,也省得再次體驗在冷凍庫的感覺,避免失落感再次浮現心中,這種感覺很難過的。

不過,雖然很想再嚐試,但總是不能付諸行動說,這也很難過說,老天!怎麼辦?人生的十字路口,這需要用心經營的,不跨出去就不會有結果,哪怕只有過程,我都會覺得很快樂說,但是第一步很重要。

不管了,等一下先去打球,晚上再慢慢從長計議。

晚上再把要改寫的程式用workbench畫出來,規畫程式的架構,希望把不好的感覺淡化,這是我喜歡做的事,希望有效,思考程式的流程也可以讓我專注,忘掉這些,如果沒辦法,就只好轉移追求目標了,希望這種事不要發生。

2009年2月18日 星期三

clone virtualbox的磁碟系統檔

在virtual box中建立的ubuntu映像檔,使用VBoxManage命令可以建立另一個相同的映像檔,就不用重灌另一套ubuntu,在virtual box中如果要建立多個server同時運行的環境,就非常簡單了,只要用VBoxManage命令拷貝多個ubuntu映像檔就可以很方便的建立多個server,以便進行整個系統的實做。

為了進行mysql replication的實做,我用virtual box的VBoxManage命令,另外烤貝了一份ubuntu映像檔,但烤貝的映像檔,網卡都動不了,後來使用dmesg|grep eth命令,發現系統竟然要我改設定檔的網卡代號,真神奇,原來映像檔的網卡代號是eth0,eth1,烤貝出來的映像檔,網路卡號就必須是eth2,eth3,不然網卡不會動,這真神奇。

網卡設定好後,測試網路沒問題後,設定mysql的master及slave,實際上機跑起來,一切順暢,slave上都可以自動接收master的資料,這以後要做自動化的備份就比較方便了,不用手動做這些備份的煩人動作。

再來,就要測試innodb database engine的各種狀況及dead lock的處理,一切沒問題後再寫程式,程式上線不能出問題,innodb的部份要小心測試,不然到時出錯,麻煩就大了。

2009年2月9日 星期一

php編輯器比較

目前我正在使用的php編輯器有兩套,一套是eclipse pdt,另一套是netbeans ide,這二套編輯器都是開放源碼軟體,不用付費就可以使用。eclipse pdt可以在www.zend.com的網站上下載使用,netbeans ide可以在www.netbeans.org網站上下載。

這兩套軟體的操作概念都非常類似,所有相關的程式碼、檔案、圖片等等資源匯聚成一個專案,再針對專案撰寫程式,或進行設定。在進行程式碼撰寫前,必須先建立一個專案,專案其實就是一個目錄,將所有的程式碼、檔案等等資料放在這個專案裡(目錄),以便進行專案的設定或管理。

eclipse除了專案的概念外,他與netbeans還有一個不同點,eclipse有workspace的觀念,workspace其實也是一個目錄,所有的專案都必須放在這個workspace下,不然eclipse就會找不到相關的專案,如果放專案的位置與目前的workspace不同,就必須切換workspace的位置,才能使用專案。netbeans就沒有workspace的觀念,設定專案時,就必須指定專案的目錄位置,專案可以散落在各個不同的目錄。

eclipse的檔案管理能力比較強悍,程式碼自動補齊的功能也比較完善,在eclipse中,可以直接匯入或匯出檔案,但在netbeans中就沒有這個功能,必須用檔案總管進行拷貝的動作,如果在eclipse中直接拷貝檔案是會出問題的,一定要用內建的檔案匯入匯出功能,eclipse會追蹤這些檔案訊息,如果直接拷貝,eclipse就無法追蹤了。

eclipse的畫面比起netbeans,真是漂亮太多了,我不太喜歡使用netbeans,畫面感覺比較粗糙,沒那麼有質感,這二套軟體的鍵盤快速鍵,不太相同,轉換編輯器時會有一段適應期。

eclipse的php檔案內如果含有html碼,如view檔案,這類php檔就會有排版用的html碼,eclipse的自動重排功能沒有辦法把html排得很整齊,他會把html和php程式碼混在一起,不重排還好,一重排簡直慘不忍睹,netbeans這方面的功能就好太多了。

這二套編輯器都要花一段時間適應,操作上各有千秋,不過我比較喜歡使用eclipse,eclipse有免安裝的版本,下載後直接解壓縮後就能用了,netbeans就一定要安裝,不過安裝的速度很快,一直按下一步就好了,這二套軟體都是跨平台的,目前我家裡的作業系統是ubuntu,上班的地方是xp,這樣就不會有跨平台的問題了,這大概就是開放源碼的好處吧!轉移作業系統比較方便。

2009年1月27日 星期二

佇列

佇列是先進先出的資料結構,先塞進來的資料就必須先取出。

class Queue{
private $head=0,$tail=0;
private $max=100;
private $data=array();
private $error;

public function pop(){
if($this->head != $this->tail){
$this->head++;
if($this->head >$this->max){
$this->head = $this->head -$this->max - 1;
}
$data = $this->data[$this->head];
unset($this->data[$this->head]);
return $data;
}
}

public function push($data){
$original=$this->tail;
$this->tail++;
if($this->tail >$this->max){
$this->tail = $this->tail - $this->max -1;
}

if($this->tail == $this->head){
$this->error='佇列已滿';
$this->tail=$original;
return false;
}else{
$this->data[$this->tail]=$data;
return true;
}
}

public function showQueue(){
foreach($this->data as $key=>$value){
echo $key.'=>'.$value."\n";
}
}

}

$queue=new Queue();

for($i=0;$i<=2000;$i++){
$queue->push($i);
}

for($i=0;$i<39;$i++){
$queue->pop();
}

for($i=0;$i<100;$i++){
$queue->push($i);
}


$queue->showQueue();


程式碼解說:
Queue::pop() 取出資料
Queue::push() 塞進資料
Queue::showQueue() 列出佇列內的所有資料

2009年1月25日 星期日

更改innodb預設的資料庫存放位置

ubuntu上預設存放innodb資料庫的位置是/va/lib/mysql,這真不是一個存放資料的好位置,如果作業系統是32位元的,單一檔案的上限是2G,最好是使用整個分割區當做innodb資料庫的存放位置,這樣就沒有2G的限制,因為這是分割區,而且效率會比較好。

試了幾個方式都試不出來,花了一整天,真是煩人,不過用google上網找資料,二分鐘內就解決了,感謝google,用起來真方便說,參考網走如下:
http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

整個步驟如下:
1.開啟/etc/apparmor.d/usr.sbin.mysqld
2.將/目錄名稱/ r,及目錄名稱/** rwk,加入以/va/lib/mysql開頭的指令行下面
3./etc/init.d/apparmor reload
4./etc/init.d/mysql restart

這樣就可以將innodb的資料存放到不同位置,而不會產生錯誤訊息,使mysql無法啟動

2009年1月24日 星期六

看山又是山

最近把Zend Framework的文件下載後,列印出來,讀讀這些paper,Zend Framework每個物件的用法雖然不同,但背後的運作邏輯卻是相通的,這是一種思考方式的轉變,將程式設計的方式由程序導向的方式轉變為以物件導向的方式進行思考,將傳統程式設計模式以直接解決問題的思考方式,轉變為以設計出架構,將問題分類為不同的階層及架構後,再設計出適當的物件,擺在不同的架構及階層中,再將問題解決。

這種設計方式,站在程式計設師的角度來說,可是一點都不直覺,以設計電腦來做說明,為了讓電腦完成運算的功能,如果以傳統程序導向方式的思考方式,CPU、記憶體、硬碟這些東西,是完成運算的功能,就會把他們全部兜在一起,結果一台電腦中,所有的功能(CPU運算、記憶體的記憶功能、硬碟的儲存功能)就會全部混在一起,而不是分拆成不同的物件,程序導向只要單線思考,以完成功程式的功能即可,物件導向的思考方式就不同,必須將電腦折成CPU、記憶體、硬碟等物件,還要考慮這些物件怎麼連接,如何組合這些物件一起運作,除了要完成必要的功能,還要設計出一套能夠運作的架構,如CPU怎麼與主機板連接,怎麼與記憶體做協同運算。

物件導向的思維邏輯,在於建立一套問題解決的架構,讓經驗可以被重複應用,而不是重複相同的程式編碼作業,就像電腦的設計一樣,將CPU、記憶體、硬碟分拆成不同的元件後,這套元件化的設計階層架構就可以被重複使用,不論CPU的速度是怎麼加快,記憶體的容量如何增長,電腦元件組合的階層架構還是不變的,這就是物件導向的思維方式,從實務經驗建立問題解決的架構。

剛接觸物件導向時,由於只接觸概念部份,認為這真是直覺的方式,只要把程式分拆成一個個的元件,就可以完成程式設計,是非常容易的,就像初學畫的人要畫山一樣,只不過是畫一座山嘛!畫出那座山就好了,這應該就是看山是山的階段。

等到實際撰寫程式碼,這跟傳統程式導向的方式大不相同,變得很複雜,為什麼不直接把功能做出來就好了,為什麼繞了一大圈解決問題,這就跟學畫當中的人心境相同,不過是畫一座山嘛!為什麼還有那麼多的畫法及理論。這是看山不是山的階段,滿腦子想的都是一些技巧及注意事項。

比較熟悉物件導向的思考方式及程式撰寫風格後,會發現世界是那麼的美好,一個個的元件排列組合後就能完成各種程式的功能,這種方式比起傳統的開發方式,架構的彈性及威力不能相比。這就類似技巧比較成熟的畫家,要畫山時,只會想到山的美好,會想表現出山在自己心中的感覺,這就是看山又是山的階段吧!

2009年1月23日 星期五

virtual box灌ubuntu server出問題

環境
作業系統:ubuntu desktop
軟體:virtual box

問題
在ubuntu desktop上的virtual box上安裝完ubuntu server後,重新開機,會出現下面這行錯誤:

this kernel requires the following features not present on your CPU

用google找了一下,十分鐘內就找到解決辦法了

網址:
http://ubuntuforums.org/showthread.php?t=905497

解法:
1.開啟vitual box
2.點選 機器->設定值->一般->進階
3.enable PAE/NX 打勾
4.重新啟動即ok