公告版位
我是公告
Selected Category: 電腦筆記 (33)
- Oct 15 Thu 2009 23:25
MySQL 的 DRBD 與 MMM (1)
- Nov 11 Tue 2008 10:49
eeepc 試用報告~
我老爸在 eeepc 剛推出時就想要買一台 eeepc 來用,因為看中了他的便利性小巧方驗攜帶,不過因為家裡買電腦都是透過我來買,在我沒確定 OK 時是不會貿然買下去的,也感謝這次廠商提供了試用的機會,讓我和我爸能夠實際使用一次。
eeepc 真的很小巧,對女生來說幾乎可以塞進隨身的小包包中,而不用為了帶一台筆電出門而帶著一個沒質感的電腦包。而且 eeepc 的外表真的相當有質感,光亮的鋼琴面版一拿出來就會吸引到他人的目光,雖然說很容易就沾滿了指紋,需要再隨身攜帶擦拭布,不過戴眼鏡時不是也一樣很容易沾到油和指紋嗎?眼鏡都可以帶著眼鏡布擦拭了用 NB 不是一樣嗎?
eeepc 還附有 130 萬像素的 webcam 功能,很適合跟別人用 skype 視訊對談,如果沒戴鏡子的話,拿 eeepc 來代替鏡子整理儀容也不錯啊 XD ,不過要習慣左右會相反。另外他的 DOLBY 音響也真的是我用過的 NB 中音質最好的,之前我只要拿我的 NB 的喇叭來播音樂就一定會被人念說趕快關掉 XD。 以下附圖是 eeepc 的 webcam 畫面。

我和小豬在 eeepc 視訊前的合照!
我想 eeepc 也很適合給常常南北跑的學生或上班族使用,號稱八小時的續航力(不過這八小時是在使用文書處理或是上上網頁這種比較不耗 CPU 資源的動作,如果是播放XVid 影音大概就只能撐五六個小時了,只是對於從台南坐到台北就算是坐客運五六個小時也夠用了吧),在上客運前帶個兩三部電影,客運上一路向北的旅程就不會無聊了,而且使用 SSD 硬碟的 eeepc 完全不用 care 防振問題,客運就算遇到顛簸甩尾都不會影響到 eeepc 的運作。內建藍牙的 eeepc 也可以跟 3.5G 手機連結,只要有手機訊號的地方就可以上網。
不過 eeepc 也有些缺點,他的按鍵比較小(這點是無解的問題吧,尺寸小的 NB 鍵盤一定也會相對小,除非之後能推出折疊式鍵盤),尤其他的波浪鍵被移到了 ESC 和 F1 中間之後,感覺數字鍵向左平移了一格,造成數字常常容易打錯。觸碰板的操作也沒有相當順手,可能還需要一段時間來習慣吧。

用 eeepc 玩 Typing of the Dead ! 一個最適合用來測試鍵盤好用度的遊戲!
另外內建的 10G 硬碟在裝完 Windows 和 Office 之後也沒剩多少,額外再添購硬碟空間也是相當重要的吧,除非你想要在使用 eeepc 的過程中,體驗到空間規劃的重要性。
對於日常工作使用上 eeepc 也許比較不適合吧,尤其是手掌比較大的男生(也許對擁有纖細的手指的女生來說比較適合吧),不過對於通勤時尋找娛樂,或是隨身攜帶以備不時之需來講, eeepc 真的是不錯的選擇。
eeepc 真的很小巧,對女生來說幾乎可以塞進隨身的小包包中,而不用為了帶一台筆電出門而帶著一個沒質感的電腦包。而且 eeepc 的外表真的相當有質感,光亮的鋼琴面版一拿出來就會吸引到他人的目光,雖然說很容易就沾滿了指紋,需要再隨身攜帶擦拭布,不過戴眼鏡時不是也一樣很容易沾到油和指紋嗎?眼鏡都可以帶著眼鏡布擦拭了用 NB 不是一樣嗎?
eeepc 還附有 130 萬像素的 webcam 功能,很適合跟別人用 skype 視訊對談,如果沒戴鏡子的話,拿 eeepc 來代替鏡子整理儀容也不錯啊 XD ,不過要習慣左右會相反。另外他的 DOLBY 音響也真的是我用過的 NB 中音質最好的,之前我只要拿我的 NB 的喇叭來播音樂就一定會被人念說趕快關掉 XD。 以下附圖是 eeepc 的 webcam 畫面。

我和小豬在 eeepc 視訊前的合照!
我想 eeepc 也很適合給常常南北跑的學生或上班族使用,號稱八小時的續航力(不過這八小時是在使用文書處理或是上上網頁這種比較不耗 CPU 資源的動作,如果是播放XVid 影音大概就只能撐五六個小時了,只是對於從台南坐到台北就算是坐客運五六個小時也夠用了吧),在上客運前帶個兩三部電影,客運上一路向北的旅程就不會無聊了,而且使用 SSD 硬碟的 eeepc 完全不用 care 防振問題,客運就算遇到顛簸甩尾都不會影響到 eeepc 的運作。內建藍牙的 eeepc 也可以跟 3.5G 手機連結,只要有手機訊號的地方就可以上網。
不過 eeepc 也有些缺點,他的按鍵比較小(這點是無解的問題吧,尺寸小的 NB 鍵盤一定也會相對小,除非之後能推出折疊式鍵盤),尤其他的波浪鍵被移到了 ESC 和 F1 中間之後,感覺數字鍵向左平移了一格,造成數字常常容易打錯。觸碰板的操作也沒有相當順手,可能還需要一段時間來習慣吧。

用 eeepc 玩 Typing of the Dead ! 一個最適合用來測試鍵盤好用度的遊戲!
另外內建的 10G 硬碟在裝完 Windows 和 Office 之後也沒剩多少,額外再添購硬碟空間也是相當重要的吧,除非你想要在使用 eeepc 的過程中,體驗到空間規劃的重要性。
對於日常工作使用上 eeepc 也許比較不適合吧,尤其是手掌比較大的男生(也許對擁有纖細的手指的女生來說比較適合吧),不過對於通勤時尋找娛樂,或是隨身攜帶以備不時之需來講, eeepc 真的是不錯的選擇。
- Jul 19 Sat 2008 17:56
下個月 Gmail Contacts 要支援 SyncML 了
SyncML 是一個現在大部分新手機都支援的功能
而下個月起在 GMail Contacts 要支援這功能了
到時候可以直接用上網手機跟 GMail 同步聯絡人資料了
以後要管理手機通訊錄就更方便了!!!
消息來源:Gmail and Google Calendar to Add Offline Support
希望之後也會出現 Google Calendar 的 SyncML 支援
可以直接即時更新手機裡面的通訊錄功能~
之前是有個網站叫 GooSync 有提供這功能,問題是你必需要把 Google Calendar 的權限開給他,讓他把你的 Calendar 資料抓下來才能夠使用
感覺隱私都在他手上很不舒服 (不過隱私在Google那邊好像也差不多的樣子)
如果 Google 能夠自己推出 SyncML 功能就太好了!
而下個月起在 GMail Contacts 要支援這功能了
到時候可以直接用上網手機跟 GMail 同步聯絡人資料了
以後要管理手機通訊錄就更方便了!!!
消息來源:Gmail and Google Calendar to Add Offline Support
希望之後也會出現 Google Calendar 的 SyncML 支援
可以直接即時更新手機裡面的通訊錄功能~
之前是有個網站叫 GooSync 有提供這功能,問題是你必需要把 Google Calendar 的權限開給他,讓他把你的 Calendar 資料抓下來才能夠使用
感覺隱私都在他手上很不舒服 (不過隱私在Google那邊好像也差不多的樣子)
如果 Google 能夠自己推出 SyncML 功能就太好了!
- Jun 26 Thu 2008 09:06
PHP 的 interface
來點技術性文章
證明我腦子還是行的吧
PHP 有一些 interface ,在寫 class 時非常好用,只是在 php.net 裡面很難找到哪裡有寫
我來列舉一下
interface Iterator {
public function rewind( );
public function current( );
public function key( );
public function next( );
public function valid( );
}
implements Iterator 的 class 可以被直接拿來 foreach ( $obj as $key => $value ) { ... } 使用
相當於
for ( $obj->rewind( ); $obj->valid( ); $obj->next( ) ) {
$key = $obj->key( );
$value = $obj->current( );
}
===========================
interface IteratorAggregate {
public function getIterator( );
}
implements IteratorAggregate 的 class 也可以直接拿來 foreach ($obj as $key => $value) { ... } 使用
相當於
foreach ($obj->getIterator( ) as $key => $value ) { ... }
===========================
interface Countable {
public function count( );
}
implements Countable 的 class 可以直接拿來 count( $obj ); ,相當於 $obj->count( );
===========================
interface SeekableIterator {
public function rewind( );
public function current( );
public function key( );
public function next( );
public function valid( );
public function seek( $pos );
}
implements SeekableIterator 的 class 除了可以被直接拿來 foreach ( $obj as $key => $value ) { ... } 使用 以外,還可以用 $obj->seek($pos) 去取得他的值
(不能用 $obj[$pos] 去取喔,要用 $obj[$pos] 必需要 implements ArrayAccess)
===========================
interface ArrayAccess {
offsetExists ($offset)
offsetGet ($offset)
offsetSet ($offset, $value)
offsetUnset ($offset)
}
implements ArrayAccess 的 class 可以被當作 Array 使用
Ex: isset( $obj[$i] ) ==> $obj->offsetExists($i);
$a = $obj[$i] ====> $a = $obj->offsetGet($i);
$obj[$i] = $value; ===> $obj->offsetSet($i, $value);
$obj[ ] = $value ===> $obj->offsetSet(NULL, $value);
unset($obj[$i]) ==> $obj->offsetUnset($i);
如果想要 count($obj) 就要再 implements Countable
==========================
interface Serializable {
public function serialize( );
public function unserialize( $serialized )
}
implements Serializable 的 class 你可以去 serialize 他
$word = serialize( $obj ); ==> $word = $obj->serialize( );
另外,他會自動把你的 ->serialize( ) 傳出來的 serialize 文字外面再包一層
C:X:"你的Class Name":XX: { 你的 Serialize 內容 }
所以你直接 unserialize( 這個字串 ); 他就會知道要去呼叫哪一個 class 的 unserialize
證明我腦子還是行的吧
PHP 有一些 interface ,在寫 class 時非常好用,只是在 php.net 裡面很難找到哪裡有寫
我來列舉一下
interface Iterator {
public function rewind( );
public function current( );
public function key( );
public function next( );
public function valid( );
}
implements Iterator 的 class 可以被直接拿來 foreach ( $obj as $key => $value ) { ... } 使用
相當於
for ( $obj->rewind( ); $obj->valid( ); $obj->next( ) ) {
$key = $obj->key( );
$value = $obj->current( );
}
===========================
interface IteratorAggregate {
public function getIterator( );
}
implements IteratorAggregate 的 class 也可以直接拿來 foreach ($obj as $key => $value) { ... } 使用
相當於
foreach ($obj->getIterator( ) as $key => $value ) { ... }
===========================
interface Countable {
public function count( );
}
implements Countable 的 class 可以直接拿來 count( $obj ); ,相當於 $obj->count( );
===========================
interface SeekableIterator {
public function rewind( );
public function current( );
public function key( );
public function next( );
public function valid( );
public function seek( $pos );
}
implements SeekableIterator 的 class 除了可以被直接拿來 foreach ( $obj as $key => $value ) { ... } 使用 以外,還可以用 $obj->seek($pos) 去取得他的值
(不能用 $obj[$pos] 去取喔,要用 $obj[$pos] 必需要 implements ArrayAccess)
===========================
interface ArrayAccess {
offsetExists ($offset)
offsetGet ($offset)
offsetSet ($offset, $value)
offsetUnset ($offset)
}
implements ArrayAccess 的 class 可以被當作 Array 使用
Ex: isset( $obj[$i] ) ==> $obj->offsetExists($i);
$a = $obj[$i] ====> $a = $obj->offsetGet($i);
$obj[$i] = $value; ===> $obj->offsetSet($i, $value);
$obj[ ] = $value ===> $obj->offsetSet(NULL, $value);
unset($obj[$i]) ==> $obj->offsetUnset($i);
如果想要 count($obj) 就要再 implements Countable
==========================
interface Serializable {
public function serialize( );
public function unserialize( $serialized )
}
implements Serializable 的 class 你可以去 serialize 他
$word = serialize( $obj ); ==> $word = $obj->serialize( );
另外,他會自動把你的 ->serialize( ) 傳出來的 serialize 文字外面再包一層
C:X:"你的Class Name":XX: { 你的 Serialize 內容 }
所以你直接 unserialize( 這個字串 ); 他就會知道要去呼叫哪一個 class 的 unserialize
- May 16 Fri 2008 16:49
php 沒有 __equals Q_Q
在 java 有個函式是 equals
功用是可以 overloading == 這個 operater 的意義
因為有時候兩個 object 是用不同方式產生的,但是他們代表的是相同的東西
如果直接對兩個 object 用 == 做,會回傳 false ,原因是 reference 不同
overload equals 的話就可以讓 java 用你所自訂的方法判斷到底是不是相同的東西
最近寫 PHP 寫很多...
也開始在寫 PHP 的 OOP
也遇到了需要 overload equals 的需求
PHP 裡面習慣上這種功能應該會放在 Magic Methods 裡面
像是 __construct, __destruct, __toString, __get, __set, __isset ...
我就想找有沒有 __equals 這個東西
結果找到一篇 php.net 上面的回應
http://bugs.php.net/bug.php?id=25772
只是都已經 2004 年了,當初這樣說不代表現在也是如此吧?
另外我在 php.net 上面對於 Comparing objects 裡面
看到他寫 $object1 == $object2 的實作方式是檢查裡面所有的 variable 是否相同,並且是否是同一個 instance..
真是超沒效率的方法啊
就有人說下面這程式會造成 php 當掉
ronnywang@ronny [/tmp] [16:56/W10] cat test.php
<?php
class Foo {
public $x;
}
$a = new Foo();
$b = new Foo();
$a->x = $b;
$b->x = $a;
print_r($a == $b);
ronnywang@ronny [/tmp] [16:56/W10] php test.php
PHP Fatal error: Nesting level too deep - recursive dependency? in /tmp/test.php on line 10
因為他會 recursive 去檢查是不是每個 variable 都一樣...
這樣子 PHP 太遜了啦...
萬一我程式寫法是
class 人類{
public $配偶;
}
$a = new 人類();
$b = new 人類();
$a->配偶 = $b;
$b->配偶 = $a;
print_r($a == $b);
這樣子觀念完全沒有問題的程式在 PHP 就會 Fatal error 了
PHP 趕快增加 __equals 吧!
功用是可以 overloading == 這個 operater 的意義
因為有時候兩個 object 是用不同方式產生的,但是他們代表的是相同的東西
如果直接對兩個 object 用 == 做,會回傳 false ,原因是 reference 不同
overload equals 的話就可以讓 java 用你所自訂的方法判斷到底是不是相同的東西
最近寫 PHP 寫很多...
也開始在寫 PHP 的 OOP
也遇到了需要 overload equals 的需求
PHP 裡面習慣上這種功能應該會放在 Magic Methods 裡面
像是 __construct, __destruct, __toString, __get, __set, __isset ...
我就想找有沒有 __equals 這個東西
結果找到一篇 php.net 上面的回應
http://bugs.php.net/bug.php?id=25772
[15 Apr 2004 3:29am UTC] derick@php.net
不知道來自 derick@php.net 算不算官方回應啊 @_@只是都已經 2004 年了,當初這樣說不代表現在也是如此吧?
另外我在 php.net 上面對於 Comparing objects 裡面
看到他寫 $object1 == $object2 的實作方式是檢查裡面所有的 variable 是否相同,並且是否是同一個 instance..
真是超沒效率的方法啊
就有人說下面這程式會造成 php 當掉
ronnywang@ronny [/tmp] [16:56/W10] cat test.php
<?php
class Foo {
public $x;
}
$a = new Foo();
$b = new Foo();
$a->x = $b;
$b->x = $a;
print_r($a == $b);
ronnywang@ronny [/tmp] [16:56/W10] php test.php
PHP Fatal error: Nesting level too deep - recursive dependency? in /tmp/test.php on line 10
因為他會 recursive 去檢查是不是每個 variable 都一樣...
這樣子 PHP 太遜了啦...
萬一我程式寫法是
class 人類{
public $配偶;
}
$a = new 人類();
$b = new 人類();
$a->配偶 = $b;
$b->配偶 = $a;
print_r($a == $b);
這樣子觀念完全沒有問題的程式在 PHP 就會 Fatal error 了
PHP 趕快增加 __equals 吧!
- Apr 14 Mon 2008 09:26
MSN Library
之前寫了篇文章評比了幾個之前用過的 MSN library ,沒有一個完全符合我的需求
不是不支援個人頭像,不支援個人訊息,甚至還有不支援更改暱稱的...
抱持著求人不如求己的心態
我看了幾個在講 MSN protocol 的網頁,終於自己刻出一隻可以
「更改個人頭像」、「變更個人訊息」、「傳送接收檔案」的 MSN library...
傳送接收檔案也可以使用 P2P 傳檔,不需要透過 MSN server 浪費一段時間
不過目前還在繼續改進中,等到之後穩定下來後我就 open source 出來吧!
不是不支援個人頭像,不支援個人訊息,甚至還有不支援更改暱稱的...
抱持著求人不如求己的心態
我看了幾個在講 MSN protocol 的網頁,終於自己刻出一隻可以
「更改個人頭像」、「變更個人訊息」、「傳送接收檔案」的 MSN library...
傳送接收檔案也可以使用 P2P 傳檔,不需要透過 MSN server 浪費一段時間
不過目前還在繼續改進中,等到之後穩定下來後我就 open source 出來吧!
- Mar 21 Fri 2008 23:07
電腦機殼前面板耳機問題
上個月買了台新電腦,主機板是 MSI K9VGM-V
大致上沒什麼問題,但是有一個煩惱我很久的問題
就是機殼前面板的耳機孔插耳機沒聲音
我以為自己接線接錯,把機殼拆開來也沒發現有接錯
之後 Google 找了一下, MSI 的用戶討論區是教到瑞昱高傳音裡面
把「停用前面板連接孔偵測功能」關掉
的確前面耳機孔就有聲音了
但是我插上耳機時,喇叭還是會有聲音
這樣還滿沒意義的
我會想要插耳機的時候就是希望喇叭能靜音,拔掉耳機時喇叭就自動會有聲音
如果一定會兩個都有聲音,那我就沒有插耳機的意義了
雖然也有可以用設定的方法讓後面喇叭不發出聲音,只有前面耳機會發出
但是每次都要一直重新設定很麻煩
我一直都以為是主機板的 bug ,每天在等出新的 BIOS 解決這問題
不過今天終於找到答案了
我的主機板的音效晶片使用的是 HD Audio 的標準,機殼是舊的 AC'97
雖然說 AC'97 的線還是可以接在 HD Audio 上面
但是就失去了偵測前面板的功能,變成只能同時發出聲音
因此不換機殼這問題應該無解(電機系的人說不定會自己重新接線吧 XD)
所以如果要買新電腦的人,如果你有想要在機殼前面插上耳機喇叭就會靜音的功能
就注意一下機殼的前置音效規格是不是跟主機板一樣吧!
確認一下機殼是否有 HD Audio 的線
(不過我也不知道要怎麼確認就是了,
賣機殼的好像也不會標示前置音效插孔是 AC'97 還是 HD Audio 的
買之前問老闆看看吧...)
大致上沒什麼問題,但是有一個煩惱我很久的問題
就是機殼前面板的耳機孔插耳機沒聲音
我以為自己接線接錯,把機殼拆開來也沒發現有接錯
之後 Google 找了一下, MSI 的用戶討論區是教到瑞昱高傳音裡面
把「停用前面板連接孔偵測功能」關掉
的確前面耳機孔就有聲音了
但是我插上耳機時,喇叭還是會有聲音
這樣還滿沒意義的
我會想要插耳機的時候就是希望喇叭能靜音,拔掉耳機時喇叭就自動會有聲音
如果一定會兩個都有聲音,那我就沒有插耳機的意義了
雖然也有可以用設定的方法讓後面喇叭不發出聲音,只有前面耳機會發出
但是每次都要一直重新設定很麻煩
我一直都以為是主機板的 bug ,每天在等出新的 BIOS 解決這問題
不過今天終於找到答案了
我的主機板的音效晶片使用的是 HD Audio 的標準,機殼是舊的 AC'97
雖然說 AC'97 的線還是可以接在 HD Audio 上面
但是就失去了偵測前面板的功能,變成只能同時發出聲音
因此不換機殼這問題應該無解(電機系的人說不定會自己重新接線吧 XD)
所以如果要買新電腦的人,如果你有想要在機殼前面插上耳機喇叭就會靜音的功能
就注意一下機殼的前置音效規格是不是跟主機板一樣吧!
確認一下機殼是否有 HD Audio 的線
(不過我也不知道要怎麼確認就是了,
賣機殼的好像也不會標示前置音效插孔是 AC'97 還是 HD Audio 的
買之前問老闆看看吧...)
- Jan 23 Wed 2008 09:13
MSN Library
之前想寫個 MSN 機器人,結果花了兩天的研究時間之後宣告放棄
因為現在看到的 MSN Library 功能都有些不足
看來有空自己刻應該會比較好一點吧 XD 畢竟 MSN 都已經公開 Protocol 了....
我先介紹一下我用過的 MSN Library ,讓有興趣的人可以研究看看吧
1. libmsn
這在 Freebsd ports 裡面有,在 /usr/ports/net-im/libmsn ,功能在當時還算滿完整的
是用 C 寫的 library ,像是以前的 centericq 就是用 libmsn
不過從 2005 年到現在很久沒更新了,很多功能像是 「個人訊息」、「P2P傳檔案」、「顯示圖片」、「離線訊息」 等功能都已經不支援了
他只支援到 MSNP8 而已 (現在已經到 MSNP15了)
2. libpurple
Pidgin 是一套功能很完整的 GUI 的 MSN 程式,而且到現在持續都有在更新中,他有將其中 MSN Library 分離出來,名字就叫做 libpurple
libpurple 是用 C 寫的,也有人包成其他語言的 Library 來用,像是 Ruby 的 rupurple, php 的 phpurple
功能雖然很完整,但是還是有缺少一些功能,像是他傳檔案只支援透過 Server 傳檔,還不支援 P2P 傳檔,所以速度較慢一點
最重要缺少的一點功能是,他不支援更改暱稱 (其實有更改暱稱的函式,但是這函式只能用 gtk 去呼叫,沒辦法在 console 下呼叫...)
另外在 Freebsd ports 裡面的版本預設是不支援「個人訊息」(就是可以輸入心情的那一串)
在編譯前要去改 configure 裡面,把 enable_msnp14=no 改成 enable_msnp14=yes 才行
這邊是寫死在 configure 裡面的,所以沒法透過 Makefile 那邊加參數修改
編完後除了可以抓和修改個人訊息以外,也可以編輯聽音樂資料
(只是不能改暱稱這點真的是很大的問題....)
另外他雖然有支援離線訊息,但是離線訊息好像有時候會造成 core dumped
這邊用的版本是 2.4.0 ,以後有新版有沒有解決這些問題就不確定了。
3. pymsn
這是用 python 寫的,不同於上面兩者這是一個熱血人寫的,而且他的目標還滿大的,
目前顯示圖示、個人訊息、離線訊息功能都有,甚至自訂表情符號都可以加入
他的目標是要把 P2P 傳檔都寫進去
只是這套目前有個很大的問題,就是在遇到你被人家加好友時,他會自動加進來,完全沒有選擇拒絕的餘地
這點對 MSN 機器人來說算是很大的問題吧
使用版本是 3.1
之前花了滿多天試這幾套,最後結果是宣告放棄
不過現在 MSN 已經公開 Protocol 了,如果要直接用 MSN Protocol 來寫想要的功能應該也不難
以後有多點空閒時間再自己寫好了
因為現在看到的 MSN Library 功能都有些不足
看來有空自己刻應該會比較好一點吧 XD 畢竟 MSN 都已經公開 Protocol 了....
我先介紹一下我用過的 MSN Library ,讓有興趣的人可以研究看看吧
1. libmsn
這在 Freebsd ports 裡面有,在 /usr/ports/net-im/libmsn ,功能在當時還算滿完整的
是用 C 寫的 library ,像是以前的 centericq 就是用 libmsn
不過從 2005 年到現在很久沒更新了,很多功能像是 「個人訊息」、「P2P傳檔案」、「顯示圖片」、「離線訊息」 等功能都已經不支援了
他只支援到 MSNP8 而已 (現在已經到 MSNP15了)
2. libpurple
Pidgin 是一套功能很完整的 GUI 的 MSN 程式,而且到現在持續都有在更新中,他有將其中 MSN Library 分離出來,名字就叫做 libpurple
libpurple 是用 C 寫的,也有人包成其他語言的 Library 來用,像是 Ruby 的 rupurple, php 的 phpurple
功能雖然很完整,但是還是有缺少一些功能,像是他傳檔案只支援透過 Server 傳檔,還不支援 P2P 傳檔,所以速度較慢一點
最重要缺少的一點功能是,他不支援更改暱稱 (其實有更改暱稱的函式,但是這函式只能用 gtk 去呼叫,沒辦法在 console 下呼叫...)
另外在 Freebsd ports 裡面的版本預設是不支援「個人訊息」(就是可以輸入心情的那一串)
在編譯前要去改 configure 裡面,把 enable_msnp14=no 改成 enable_msnp14=yes 才行
這邊是寫死在 configure 裡面的,所以沒法透過 Makefile 那邊加參數修改
編完後除了可以抓和修改個人訊息以外,也可以編輯聽音樂資料
(只是不能改暱稱這點真的是很大的問題....)
另外他雖然有支援離線訊息,但是離線訊息好像有時候會造成 core dumped
這邊用的版本是 2.4.0 ,以後有新版有沒有解決這些問題就不確定了。
3. pymsn
這是用 python 寫的,不同於上面兩者這是一個熱血人寫的,而且他的目標還滿大的,
目前顯示圖示、個人訊息、離線訊息功能都有,甚至自訂表情符號都可以加入
他的目標是要把 P2P 傳檔都寫進去
只是這套目前有個很大的問題,就是在遇到你被人家加好友時,他會自動加進來,完全沒有選擇拒絕的餘地
這點對 MSN 機器人來說算是很大的問題吧
使用版本是 3.1
之前花了滿多天試這幾套,最後結果是宣告放棄
不過現在 MSN 已經公開 Protocol 了,如果要直接用 MSN Protocol 來寫想要的功能應該也不難
以後有多點空閒時間再自己寫好了
- Oct 24 Tue 2006 17:21
Booker.tw
http://booker.tw/
這是我做的書櫃網站...
構想是來自 del.ic.ious
也就是把自己擁有的書都登記進去
然後可以看到這本書有哪些人擁有
這些人又擁有哪些書
現在網站 beta 中
歡迎大家試用給給意見 :)
個人書櫃位置 http://booker.tw/shelf/ronnywang
這是我做的書櫃網站...
構想是來自 del.ic.ious
也就是把自己擁有的書都登記進去
然後可以看到這本書有哪些人擁有
這些人又擁有哪些書
現在網站 beta 中
歡迎大家試用給給意見 :)
個人書櫃位置 http://booker.tw/shelf/ronnywang
- Sep 22 Fri 2006 15:46
cyrus-imapd 2.2.13 的權限問題
cyrus-imapd 其中有一個 c 權限
在 document 中寫的是 create - The user may create new sub-mailboxes of the mailbox, or delete or rename the current mailbox.
可是我有個 mailbox 沒有 c 權限
竟然還可以建 sub-mailbox
然後因為建出來的會延續他的 parent-mailbox 的權限
所以建出來的 sub-mailbox 就沒辦法自砍...
這樣很鳥...
正在 Google 中其他人怎麼解決這問題
不過我總覺得改 code 好像會比較快..我已經找到有問題的 code 大概在哪裡
---
update:
不是 bug..
是有一個 implicit_owner_rights 這個要設成 l
(預設是 lca, 這個 option 是設定 user 在自己的 mailbox 下最基本的權限, 原先的 lca 表示他在自己家一定會有 lookup, create, acl 權限...現在改成 l 就表示在自己家裡就不一定會有 create 這權限了,這個 options 在 example 的 imapd.conf 沒有寫 Orz)
看了半天 code 才找到這個 option Orz
在 document 中寫的是 create - The user may create new sub-mailboxes of the mailbox, or delete or rename the current mailbox.
可是我有個 mailbox 沒有 c 權限
竟然還可以建 sub-mailbox
然後因為建出來的會延續他的 parent-mailbox 的權限
所以建出來的 sub-mailbox 就沒辦法自砍...
這樣很鳥...
正在 Google 中其他人怎麼解決這問題
不過我總覺得改 code 好像會比較快..我已經找到有問題的 code 大概在哪裡
---
update:
不是 bug..
是有一個 implicit_owner_rights 這個要設成 l
(預設是 lca, 這個 option 是設定 user 在自己的 mailbox 下最基本的權限, 原先的 lca 表示他在自己家一定會有 lookup, create, acl 權限...現在改成 l 就表示在自己家裡就不一定會有 create 這權限了,這個 options 在 example 的 imapd.conf 沒有寫 Orz)
看了半天 code 才找到這個 option Orz
- Sep 21 Thu 2006 19:53
postfix 的 case fold
postfix 2.2.x 會將 recipient 全部改成小寫
像是 fooBAR@foo.com.tw 會自動被換成 foobar@foo.com.tw
這在大多情況是不會有影響的
但是在使用 foo+BAR@foo.com.tw 這種寫法時
想要丟進 foo 這個使用者的 BAR 信件夾時
就會因為被轉成 foo+bar 因為找不到 bar 這資料夾而把信件搞丟
這兩天看了一堆 postfix document,也 Google 了很多討論
都找不到解決的方法
有看到有人的解決方法是... imap 那邊資料夾不要用大寫字 =.=
結果今天把 postfix 升到 2.3
一切問題都解決了 Orz
===
好久沒寫 Blog 了,這次這事情讓我忙這麼久我非寫不可啊 XD
像是 fooBAR@foo.com.tw 會自動被換成 foobar@foo.com.tw
這在大多情況是不會有影響的
但是在使用 foo+BAR@foo.com.tw 這種寫法時
想要丟進 foo 這個使用者的 BAR 信件夾時
就會因為被轉成 foo+bar 因為找不到 bar 這資料夾而把信件搞丟
這兩天看了一堆 postfix document,也 Google 了很多討論
都找不到解決的方法
有看到有人的解決方法是... imap 那邊資料夾不要用大寫字 =.=
結果今天把 postfix 升到 2.3
一切問題都解決了 Orz
===
好久沒寫 Blog 了,這次這事情讓我忙這麼久我非寫不可啊 XD
- Apr 11 Tue 2006 16:27
perl build error
有時候編 perl 會失敗..錯誤訊息如下
===> Building for perl-5.8.8
`sh cflags "optimize='-O2 -pipe -march=opteron'" toke.o` -fpic toke.c
CCCMD = cc -DPERL_CORE -c -DAPPLLIB_EXP="/usr/local/lib/perl5/5.8.8/BSDPAN" -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -O2 -pipe -march=opteron -Wall
toke.c: In function `S_scan_formline':
toke.c:10596: error: invalid operands to binary +
toke.c:10596: error: invalid lvalue in unary `&'
toke.c:10596: error: invalid lvalue in unary `&'
*** Error code 1
Stop in /usr/ports/lang/perl5.8/work/perl-5.8.8.
*** Error code 1
Stop in /usr/ports/lang/perl5.8.
結果這 bug 出現的原因有點鳥
原因是因為跑這程式的人家目錄下有一隻叫 test 的程式
造成用 ports 安裝 perl 時會先去跑那程式而出問題
所以遇到這問題就看你自己家裡有沒有 test 這程式..有的話表示 ports 跑到你家去跑你那隻不知道幹嘛的 test 了......
===> Building for perl-5.8.8
`sh cflags "optimize='-O2 -pipe -march=opteron'" toke.o` -fpic toke.c
CCCMD = cc -DPERL_CORE -c -DAPPLLIB_EXP="/usr/local/lib/perl5/5.8.8/BSDPAN" -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -O2 -pipe -march=opteron -Wall
toke.c: In function `S_scan_formline':
toke.c:10596: error: invalid operands to binary +
toke.c:10596: error: invalid lvalue in unary `&'
toke.c:10596: error: invalid lvalue in unary `&'
*** Error code 1
Stop in /usr/ports/lang/perl5.8/work/perl-5.8.8.
*** Error code 1
Stop in /usr/ports/lang/perl5.8.
結果這 bug 出現的原因有點鳥
原因是因為跑這程式的人家目錄下有一隻叫 test 的程式
造成用 ports 安裝 perl 時會先去跑那程式而出問題
所以遇到這問題就看你自己家裡有沒有 test 這程式..有的話表示 ports 跑到你家去跑你那隻不知道幹嘛的 test 了......
- Apr 10 Mon 2006 13:34
用自然人憑證加密上網
去年辦了一張自然人憑證後,除了上網無聊看看戶籍謄本以外,都沒有用到別的用途,總覺得只是再錢包裡面多一張沒用的卡而已。又沒辦法像捐血榮譽卡或是器官捐贈卡當作好人卡現給別人看,昨天晚上花了一個晚上研究怎麼用讀卡機加密用自然人憑證上網。只是好像沒有什麼實質用處的感覺。
我把步驟大概貼一下吧。
Client 部分:
1. 到 內政部憑證管理中心下載檔案 下載 SafeSign
SafeSign 的功能是把讀卡機裡面的 Smart Card 的加解密功能匯入到瀏覽器中(比較奇怪的是,現在只有Firefox 裡面有增加我的自然人憑證,IE一直都沒看到 @@)
安裝完後重開機之後,Firefox 應該就會多一個 PKCS#11 的憑證,這個就是自然人憑證裡面的
2. 接下來要把內政部的憑證匯入到瀏覽器中。這樣子 Client 端的設定就完成了。
Server端:
Server 端這邊是以 apache + mod_ssl 設定法,如果不設定的話 Client 端還是可以用自然人憑證加密上網,只是 Server 端就分不清楚 Client 是用自然人憑證還是用瀏覽器自己產生的憑證加密的了, Server 設定完後就可以認出 Client 是誰了。
1. 先把 MOICA憑證和GRCA憑證下載到自己電腦中,不過他的格式apache mod_ssl 不支援,所以要用 openssl 轉檔,轉檔指令如下
* openssl x509 -in MOICA.cer -inform d -out MOICA.crt
* openssl x509 -in GRCA.cer -inform d -out GRCA.crt
轉換成 pem 的格式。
MOICA 是內政部自然人憑證的 CA,GRCA 是政府憑證管理中心的 CA,也是 Root CA
2. 把 上面兩個 MOICA.crt 和 GRCA.crt 加到 /usr/local/etc/apache2/certs 並在 apache 的設定檔加入
* SSLCACertificatePath /usr/local/etc/apache2/certs/
並重跑 apache
3. 可以用 openssl s_client -connect [你的ip]:443 連進去看你的機器現在認得哪些 CA
裡面有一段
Acceptable client certificate CA names
/C=TW/O=Government Root Certification Authority
/C=TW/O=\xE8\xA1\x8C\xE6\x94\xBF\xE9\x99\xA2/OU=\xE5\x85\xA7\xE6\x94\xBF\xE9\x83\xA8\xE6\x86\x91\xE8\xAD\x89\xE7\xAE\xA1\xE7\x90\x86\xE4\xB8\xAD\xE5\xBF\x83
如果有這一段就表示你的 CA 已經裝好了,這樣 Server 部分也完成了。
之後只要用自然人憑證加密上網,就會看到 SSL_CLIENT_VERIFY 這個環境變數變成 SUCCESS
然後 SSL_CLIENT_S_DN_CN 這環境變數是使用者的本名 (像我是"王向榮")
SSL_CLIENT_S_DN 是 /C=TW/CN=王向榮/serialNumber=xxxxxxxxxx
(SSL_CLIENT_S_DN 就可以拿來做身份的判定)
其他相關的變數( SSL_CLIENT_* )都可以從 phpinfo() 裡面看到。
( 不過只用本名和卡內的序號做判定感覺還是有點不夠,如果能再把身份證讀出來就好了,不過自然人憑證中能直接讀出來的身份證字號只有四位而已,而且放身份證的那欄位 mod_ssl 好像讀不到。)
之後就把我自己電腦裡面的一些 service 的都改成用自然人憑證登入不用輸入密碼吧~
我把步驟大概貼一下吧。
Client 部分:
1. 到 內政部憑證管理中心下載檔案 下載 SafeSign
SafeSign 的功能是把讀卡機裡面的 Smart Card 的加解密功能匯入到瀏覽器中(比較奇怪的是,現在只有Firefox 裡面有增加我的自然人憑證,IE一直都沒看到 @@)
安裝完後重開機之後,Firefox 應該就會多一個 PKCS#11 的憑證,這個就是自然人憑證裡面的
2. 接下來要把內政部的憑證匯入到瀏覽器中。這樣子 Client 端的設定就完成了。
Server端:
Server 端這邊是以 apache + mod_ssl 設定法,如果不設定的話 Client 端還是可以用自然人憑證加密上網,只是 Server 端就分不清楚 Client 是用自然人憑證還是用瀏覽器自己產生的憑證加密的了, Server 設定完後就可以認出 Client 是誰了。
1. 先把 MOICA憑證和GRCA憑證下載到自己電腦中,不過他的格式apache mod_ssl 不支援,所以要用 openssl 轉檔,轉檔指令如下
* openssl x509 -in MOICA.cer -inform d -out MOICA.crt
* openssl x509 -in GRCA.cer -inform d -out GRCA.crt
轉換成 pem 的格式。
MOICA 是內政部自然人憑證的 CA,GRCA 是政府憑證管理中心的 CA,也是 Root CA
2. 把 上面兩個 MOICA.crt 和 GRCA.crt 加到 /usr/local/etc/apache2/certs 並在 apache 的設定檔加入
* SSLCACertificatePath /usr/local/etc/apache2/certs/
並重跑 apache
3. 可以用 openssl s_client -connect [你的ip]:443 連進去看你的機器現在認得哪些 CA
裡面有一段
Acceptable client certificate CA names
/C=TW/O=Government Root Certification Authority
/C=TW/O=\xE8\xA1\x8C\xE6\x94\xBF\xE9\x99\xA2/OU=\xE5\x85\xA7\xE6\x94\xBF\xE9\x83\xA8\xE6\x86\x91\xE8\xAD\x89\xE7\xAE\xA1\xE7\x90\x86\xE4\xB8\xAD\xE5\xBF\x83
如果有這一段就表示你的 CA 已經裝好了,這樣 Server 部分也完成了。
之後只要用自然人憑證加密上網,就會看到 SSL_CLIENT_VERIFY 這個環境變數變成 SUCCESS
然後 SSL_CLIENT_S_DN_CN 這環境變數是使用者的本名 (像我是"王向榮")
SSL_CLIENT_S_DN 是 /C=TW/CN=王向榮/serialNumber=xxxxxxxxxx
(SSL_CLIENT_S_DN 就可以拿來做身份的判定)
其他相關的變數( SSL_CLIENT_* )都可以從 phpinfo() 裡面看到。
( 不過只用本名和卡內的序號做判定感覺還是有點不夠,如果能再把身份證讀出來就好了,不過自然人憑證中能直接讀出來的身份證字號只有四位而已,而且放身份證的那欄位 mod_ssl 好像讀不到。)
之後就把我自己電腦裡面的一些 service 的都改成用自然人憑證登入不用輸入密碼吧~
- Feb 25 Sat 2006 17:00
cyrus_imapd 的 pop3d…orz
剛剛在架 D2 的 imapd..因為老大有計畫要將 D2 升到一人 2G
如果用原來的 tpop3d 一定會慢到不行而且也撐不上去
所以一定要換成 imapd...
結果剛在 starbucks 裡面怎麼試都沒法試成功 cyrus_imapd 裡面的 pop3
明明同一組帳密在 imap 登入順利
在 pop3 卻一直說密碼錯誤....
試了兩三個小時都找不到原因,..
結果剛剛終於找到了 0rz...
原來是 cyrus_imapd 裡面 pop3 用的 pam 檔名是 /etc/pam.d/pop 而不是 /etc/pam.d/pop3
吐血啊啊啊啊啊啊啊
如果用原來的 tpop3d 一定會慢到不行而且也撐不上去
所以一定要換成 imapd...
結果剛在 starbucks 裡面怎麼試都沒法試成功 cyrus_imapd 裡面的 pop3
明明同一組帳密在 imap 登入順利
在 pop3 卻一直說密碼錯誤....
試了兩三個小時都找不到原因,..
結果剛剛終於找到了 0rz...
原來是 cyrus_imapd 裡面 pop3 用的 pam 檔名是 /etc/pam.d/pop 而不是 /etc/pam.d/pop3
吐血啊啊啊啊啊啊啊
- Sep 15 Thu 2005 10:10
如何不顯示 PHP 的錯誤訊息或警告訊息
昨天有人問我這問題,他說他在 Google 上找很久都沒找到。所以我就把這問題貼在 blog 上面,看看能不能幫助後人在搜尋時能夠更方便找到。
有些php函式出問題時會在最前面顯示 Warning 的訊息,如何讓這訊息不顯示出來呢?
只要在函式前面加上 @ 就可以了。
例如 mysql_connect( ) 函式,在對方 mysql 主機連不到時會顯示
Warning: mysql_connect(): Can't connect to MySQL server on '[主機位置]' (4) in [php路徑] on line 1
如果不想要讓他顯示出來的話,在呼叫 mysql_connect( ) 就用 @mysql_connect( ) 就可以了。
有些php函式出問題時會在最前面顯示 Warning 的訊息,如何讓這訊息不顯示出來呢?
只要在函式前面加上 @ 就可以了。
例如 mysql_connect( ) 函式,在對方 mysql 主機連不到時會顯示
Warning: mysql_connect(): Can't connect to MySQL server on '[主機位置]' (4) in [php路徑] on line 1
如果不想要讓他顯示出來的話,在呼叫 mysql_connect( ) 就用 @mysql_connect( ) 就可以了。
生活資訊(3)




