星期五, 10月 03, 2008

勉強別人,理所當然

原文出自商業周刊 第964期 P12 解讀商場何飛鵬 ~勉強別人,理所當然

一個部門主管向我抱怨: 何 先生,你不知道這件事多難執行,所有的部門都持觀望態度,因為會影響他們現有的工作,我無權命令他們,也不想勉強他們,公司可否暫停或中止這項計畫! 他的報怨早在我意料之中,因為他負責的這項工作確實困難,許多單位需要因而改變現有的工作流程,再加上原有工作已很煩憂,所有的人都期待能放棄這項工作。但基於許多原因,公司不能放棄。 我告訴這位主管:你是無權命令他們,但你推行的是公司的政策,理論上他們不樂意配合,可也不致於嚴詞拒絕。你要用各種方法,勉強他們一起配合,可是如果你不想『勉強』別人,那這件事肯定辦不成!
『勉強別人做事』,這可是我這輩子花了最多時間學習的事。
年輕的時候,最討厭別人逼迫我做什麼事,總覺得所有的事都應該『自動自發』才完美。因此長大後開始工作,我也『己所不欲,勿施於人』,討厭去勉強別人,儘可能不去勉強別人,也因而面臨了很長一段時間,一事無成,什麼事也做不了,讓別人覺得一點能力也沒有的尷尬狀況! 我慢慢發覺,幾乎沒有一件事是別人樂意去幫你的,每一個人都是在他人不斷的催促、不斷的說服、不斷的溝通、不斷的哀求之下,完成某一件事。 譬如:老師『勉強』學生讀書;父母『勉強』兒女用功;小孩『勉強』爸媽給零用錢;主管『勉強』部屬完成工作;業務員『勉強』客戶下單;政府『勉強』人民繳稅......。 
我驚覺,這是一個無處不『勉強』的世界,我更驚覺,人生的真相就是『勉強別人』,而成功的人,就是很會『勉強』別人的人,能力則是用『勉強別人』來衡量,不會勉強別人的人,就是沒有能力的人。 
『勉強』用各種不同的形式存在:
最粗魯而直接的勉強叫命令;
文雅、含蓄的勉強叫溝通;用道理去勉強叫說服;
詭詐的勉強叫欺騙;用好處去勉強叫引誘;
眩惑的勉強叫廣告;
不斷的勉強叫鍥而不捨。
勉強是一切事物的原動力,任何工作、任何任務,都需要不斷的勉強自己、勉強別人,才能夠完成! 
勉強自己的難度,尤勝於勉強別人。就像年輕時的我一般。我視勉強別人為罪惡,因此不勉強別人有理,勉強自己那就更違背原則,為何不讓自己快樂點,何需自我勉強? 
我終於認清真相,勉強原來是不可或缺的。學生因勉強而成長,營業人員因勉強而成就業績,工作者因勉強而績效非凡,主管因能勉強別人,而完成困難的任務,老闆因能勉強所有的人,而能獲利賺錢。 勉強伴隨著困難而來,因困難,故需勉強,不願勉強別人,其實是無能力勉強的託辭,學會勉強別人,是工作者認清事實,學習成長的開始。

星期六, 7月 26, 2008

利用powertop找出Linux耗電的原因

如果使用筆電跑Linux, 可能會發現其實電量好像用的有一點點兇. 不過, 有一個名為powertop的工具, 可以幫我們找出一台Linux筆電的耗電元兇.

用法很簡單, 先開一個root帳號的視窗, 然後執行powertop, 執行個幾秒鐘之後, powertop就會幫你找出耗電的原因, 以及會提供如何省電的建議方法.

參考資料:
PowerTOP: Saving Power in Linux
PowerTOP官方網站

星期五, 6月 27, 2008

找出程式出現segmentation fault的方法

寫程式出現segmentation fault是常有的事。如果這個bug是固定會出現的,那還算幸運,因為你已經知道發生segmentation fault的地方在哪哩,只要好好看source code應該就可以解決了。但是,如果segmentation fault是三不五時才出現,而且沒有一定的規則會使這個錯誤出現,那就很麻煩了。不過,我們其實可以利用signal handler的方式,攔截segmentation fault發生時的錯誤處理方式,就可以輕鬆的找到錯誤發生的那行程式碼了。

原理是這樣的,原本程式如果發生segmentation fault,作業系統在印出錯誤訊息之後就會將該程式結束。可是,這種處理方式對我們並沒有多大的幫助,因為該程式的process都已經從記憶體中一除了。所以,我們要做的就是,改變發生segmentation fault時處理process的方式。改變的方法就是利用signal()這個系統function。其使用方式很簡單,就是指定要攔截的signal以及處理該signal的handler就可以了。

在下面的程式碼中,我們寫了一個超級簡單的signal handler來代替原來系統預設的segmentation fault handler。就是寫一個無窮迴圈將程式停住,這樣我們就可以用gdb來看看到底是哪一行程式碼觸發segmentation fault了。

#include <signal.h>
#include <stdio.h>

void sighandler(int sig)
{
    while(1)
        ;
}

void error_func()
{
    char *msg = NULL;
    printf("%s\n", msg);  // 這裡會發生segmentation fault
}

int main()
{
    signal(SIGSEGV, sighandler);
    error_func();
    return 0;
}

glib的message logging utility

glib提供了一個message logging utility可以讓我們可以在程式執行時輸出一些訊息,顯示程式目前的狀況或是遇到的錯誤。跟printf比起來,glib提供的message logging utility更加多樣化,可以根據不同的執行狀況設定不同等級的訊息。以下列出一個簡單的範例:

#include <glib.h>

int main()
{
    g_debug("%s", "this is a debug message");
    g_log("mytest", G_LOG_LEVEL_CRITICAL, "%s", "This is a critical message");
    g_log("mytest", G_LOG_LEVEL_INFO, "%s", "This is an info message");
    g_log("mytest", G_LOG_LEVEL_DEBUG, "%s", "This is another debug message");
    g_log("mytest", G_LOG_LEVEL_ERROR, "%s", "This is an error message");
    return 0;
}

編譯時記得要加上glib的header file所在位置(用-I)以及library的所在位置(用-L),在我的系統上是以下列方式編譯的:

gcc -g -o test_glog test_glog.c -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -lglib-2.0

執行結果如下所示:

** (process:24480): DEBUG: this is a debug message

(process:24480): mytest-CRITICAL **: This is a critical message
mytest-INFO: This is an info message
(process:24480): mytest-DEBUG: This is another debug message

mytest-ERROR **: This is an error message
aborting...
已經終止 (core dumped)

星期三, 6月 25, 2008

強迫使用舊版本的Firefox擴充套件

更新完Firefox後,有時候會遇到套件不支援新版本Firefox的問題。如果不能用的套件剛好又是自己常常使用的套件,心情一定會大受影響。

其實有一個套件叫做Nightly Tester Tools可以幫我們解決這個問題,這個套件可以強迫使用舊版本的套建在新版本的Firefox上。一般來說,如果差異不大用這種方式應該都還可以撐一陣子,等到新的套件版本發行。當然如果新舊版本差異實在是太大,還是會出現套件運作不太正常的現象。

安裝完畢後,重新開啟Firefox就可以看到如下的視窗。其中有些套件前面會出現紅色驚嘆號,那就是原本不能使用的套件。

另外,在畫面的右下方出現了一個非常重要的按鈕Override all compatibility,這就是拯救我們的重要按鈕。

image

按下Override all compatibility之後,會出現Make Compatibile的視窗,如下所示。按下Force Install按鈕之後,就會來硬的了,硬把目前不相容的套件給安裝起來,再次重新開啟Firefox就大功告成了。

image

星期二, 6月 24, 2008

將網址轉成圖片的小工具

這陣子因為比較忙,所以已經有好久沒有寫部落格了。現在事情暫時告一段落了,心情比較輕鬆愉快,剛好今天找到一個不錯的小工具,就順便跟大家介紹一下,做一下業績囉。

利用url2jepg這個小工具,可以讓我們指定一個網址,並將該網址所包含的內容轉存為一張圖片,非常適合用來分享自己所看到的一些資訊。

url2jpeg

使用方式很簡單,只要在上圖上方的空白列中輸入網址,按下右邊Go按鈕後,視窗下方的空白處就會出現輸入網址的網頁內容,如下圖。

url2jpeg_url

接著點選螢幕右邊的Capture bitmap按鈕後,畫面左邊會有一些變化。按下Save image之後就可以將畫面輕鬆地存起來了,而且所存的畫面可以超過整個螢幕一次所能看見的內容,絕對比PrintScreen好用多了。

以下這張就是用url2jpeg所存下的雅虎奇摩首頁喔。

url2jpeg_demo

對了,url2jpeg是還是一個open source的project喔,對寫類似小工具有興趣的人可以下載程式碼好好研讀一下喔。

星期日, 5月 25, 2008

備份在blogger上的部落格文章

雖然使用了google出品的blogger來作為自己的部落格平台,理論上應該是只要在有網路的地方應該都可以存取的到自己的部落格內容,不會遇到系統維修等等的down time。可是總覺得如果可以將自己寫的東西也放一放在自己的電腦上,以便可以在沒有網路的時候可以稍微查一下自己寫的一些東西,不知道會有多好。後來在網路上找了一下下,當然也是用google找的,終於讓我找到了一個不錯的工具,叫做Blogger Backup

這個工具是一個open source的工具,是以VB.Net所寫的,如果有興趣的人可以自己下載source code來研究一下。接下來就稍微介紹一下如何使用它來備份部落格了。

首先先至http://www.codeplex.com/bloggerbackup下載安裝檔並安裝到你的電腦上。

安裝完畢後,會在開始功能表出現Blogger Backup Utility,執行後就可以看到下面的視窗。

image

如下圖所示,選擇Available blogs旁的下拉式選單,會出現[Add/Update/Remove Blogs],就給他用力的點下去。

image

此時會出現下面的視窗用來設定部落格的帳號以及密碼等相關設定。

image

在Blogger user ID以及Blogger password分別填入你的帳號及密碼後,按下Log into Blogger and Get Blogs,就會試著以你剛剛所輸入的內容連線到你的部落格了。稍微等一下子,如果帳號密碼沒有問題,就可以看到上方的空白處出現部落格的相關資訊了,如下圖所示:

image

按下OK後,回到前一個視窗,這時候在Available blogs下拉式選單旁就可以看到你所要備份的部落格名稱了。點選該部落格,就可以看到如下圖所示的相關資訊。

image

先在Save posts to folder那選一下要存放文章的目錄,最後,按下Backup Posts就可以將部落格的文章以XML的格式備份到剛剛所選擇的目錄中了。不過,目前好像只能針對文章中的文字進行備份,至於圖片好像就沒有辦法也順便抓回來囉。

星期三, 5月 21, 2008

不安裝MS JVM也可以安裝Visual Studio 6.0

在Windows XP上安裝Visual Studio 6.0時,通常都會出現下列這個畫面,要求你先安裝Microsoft Virtual Machine for Java,重開機後才可以繼續安裝Visual Studio 6.0。

image

可是微軟已經不再Microsoft Visual Machine for Java,所以實在是不太想裝這個老舊的軟體在自己的電腦上。在網路上google了一下想找看看有沒有解決方法,結果運氣還不錯,一下子就找到了答案了,而且方法非常簡單,就是"騙",也就是騙Visual Studio 6.0安裝程式已經安裝了Microsoft Virtual Machine for Java在自己的機器上就可以順利安裝了。

接下來就簡單介紹一下如何騙。

  1. 開個dos視窗(就是黑黑的那個囉)
  2. cd \windows
  3. echo "" > msjava.dll

好了,就這麼簡單,已經可以安裝Visual Studio 6.0了。安裝完畢後,記得再把msjava.dll殺掉就可以了。

參考資料:

Installing VB6 without Java

星期二, 5月 20, 2008

lazy Susan

呵呵, 不要誤會! 這不是在罵叫蘇珊的女生很懶惰喔! 這是新學到的英語單字.

lazy Susan指的是我們在吃"辦桌"時, 放在大圓桌中間, 用來方便我們夾菜的那個放菜的旋轉盤囉.

基本上, 西方人比較習慣在吃飯的時候, 互相幫對方傳遞所需要的菜, 但是我們則是比較自助式, 習慣用旋轉盤將自己想要吃的菜轉過來囉, 當然有時候也是小朋友吃飯時打發無聊的玩具啦!

聽完數位生活產業分析演講心得筆記

昨天聽了有關數位生活產業分析的演講, 根據演講者的演講內容, 認為目前看的到比較可能的數位生活應用不外乎就是三個方面, 家庭娛樂應用, 家庭資通訊應用以及家庭安控應用. 其中又以家庭娛樂這個方面被視為是最有潛力的未來應用. 為了達到未來數為生活的夢想, 目前已經幾個有關數位生活科技相關的聯盟成立, 如: ECHONET (Energy Conservation and Homecare Network), OSGi (Open Service Gateway initiative), DLNA (Digital Living Network Alliance), CELF (Consumer Electronic Linux Forum), IGRS (Intelligent Grouping and Resource Sharing).

目前數位生活應用發展的趨勢, 基本上是朝向居家, 工作, 以及行動三方面服務的匯整, 因為我們目前的生活型態不外呼就是這幾個大範圍. 所以如何將這三種每天生活必有的活動加以整合, 是目前大家積極努力的方向.

另外, 演講中還提到IPTV. IPTV是希望化被動為主動, 化主動為互動, 改變目前消費大眾收看電視的習慣. IPTV是由電信業者所提出的一個應用, 當然其目的就是為了可以從使用者身上再多收一些費用. IPTV基本上就是想利用現在每個家庭都已經有的網路連線, 除了拿來講電話以及資料的傳輸應用之外, 再加上影音相關的服務, 強調使用者可以主動控制以及互動性, 達到一線三用的目的, 也就是所謂的triple play.

星期日, 5月 18, 2008

讓Visual Studio 2005編譯出來的程式可以拿到沒有安裝VS2005的電腦上執行的方法

使用Visual Studio 2005所開啟Win32專案 或是Win32主控台控制專案,如果把所編譯的執行檔拿到沒有安裝.Net framework的電腦上去執行,不管是debug或是release組態的執行檔,都會出現應用程式設定不正確的錯誤訊息:

e1

本來還以為是Visual Studio 2005不支援編譯native code,可是又覺得怪怪的。經過一番研究之後,終於發現其實問題是出在專案的組態設定而已。

在Visual Studo 2005中建立Win32專案或是Win32主控台控制專案,在專案屬性設定視窗中的組態屬性->C/C++->程式碼產生設定頁,有一個設定是設定程式執行時程式庫的連結方式,在Debug組態預設是/MDd,image

而Release組態則預設是/MD。

image

要解決這個問題就是只要將Debug組態的/MDd改成/MTd,Release組態的/MD改成/MT,問題就迎刃而解了。 因為改成/MTd或是/MT的程式碼產生方式,會將程式所需要的MSVCRxx.dll改以static linking的方式編譯,非以dynamic linking的方式,所以程式執行時並不需要去找相關的dll檔案。

不過這樣做,會使執行檔的檔案大小變大一些些喔。

星期五, 4月 25, 2008

為你的Linux網路加速

昨天在網路上意外看到一篇文章(忘記出處了),主要是說明如何以簡單的幾個步驟改善Linux的網路存取效能的方法。不知道是不是心理作用,試過之後真的也覺得速度好像變快了一些,至少用Firefox看網頁時網頁內容抓取好像是有比較快一點,不會像之前打完網址之後就等了一會兒網頁內容才會出來。好啦!現在就來說一下如何做囉!

其實動作很簡單,根據看到的那篇文章的說明,造成網路速度不快的主要原因是ipv6。所以只要把Linux kernel中有關ipv6的模組以及Firefox的ipv6支援關掉就可以了。

  • 關掉Linux kernel的ipv6模組
如果你在command line下/sbin/lsmod | grep ipv6 有輸出結果的話,代表系統已經載入了ipv6相關的Linux kernel。你可以編輯/etc/modprobe.d/blacklist這個檔案,在檔案中加入blacklist ipv6後存檔,然後中心開機後就可以關掉Linux kernel對ipv6的支援了。
  • 關掉Firefox的ipv6支援
在網址列輸入about:config,然後搜尋ipv6。將搜尋到的network.dns.disableIPv6改成true就可以關掉Firefox對ipv6的支援了。

星期二, 4月 22, 2008

安裝wireshark出現npf.sys無法寫入的解決辦法

今天聽同事說他要安裝wireshark可是會出現npf.sys無法寫入的問題,覺得很奇怪,自己電腦上就有裝wireshark阿。所以就把之前安裝的給移除掉再重裝一次。嘿嘿,還真的會出現無法寫入npf.sys的錯誤訊息。
可是npf.sys是用來捉取網路封包必要的驅動程式,不安裝是絕對不行的。習慣當黑手的我本著不服輸的精神,在網路上google了十幾分鐘,就是找不到解決方法。
竟然google不到,那就自己想辦法解決了囉。試了一些方法之後,突然靈機一動,想說如果遇到無法移除檔案時都會進保護模式去移除檔案,那是不是可以如法炮製,進保護模式去安裝winpcap試試看。
嘿嘿!果然,這個方法是行的通的。只要開機時按F8進保護模式後,經過漫長的開機過程後,在進行winpcap的安裝,果然就解決了無法寫入npf.sys的問題了。
這個問題應該是趨勢科技出的office scan覺得這個安裝動作是病毒的行為擋掉的,因為我自己的電腦安裝wireshark沒有出現這樣的問題,雖然也有安裝防毒軟體avast antivirus。

星期一, 4月 21, 2008

編譯程式碼出現的錯誤

今天抓了beagle的source code並且試著要在ubuntu上進行編譯,結果竟然在下./configure時出現了

configure: error: C compiler cannot create executables

後來在網路上稍微找了一下,發現竟然是因為ubuntu預設的安裝是用來作為一般使用,所以很多用來開發程式所需要的套件就都沒有安裝,就如在寫c程式時需要include一些header file就都沒有安裝,所以造成configure在檢查系統時發現gcc並無法成功編譯出我們要的執行檔。所以只要將該安裝的套件安裝一下就可以解決這個問題了。

之前已經有安裝gcc了,現在只缺header file,所以執行

apt-get install libc6-dev

就可以解決了

星期四, 4月 17, 2008

讓Office 2003可以讀取Office 2007的檔案

如果要讓Office 2003讀取Office 2007所編輯的Word、Excelc或是Powerpoint檔案,你只要安裝微軟所出的Microsoft Office Word、Excel 及 PowerPoint 2007 檔案格式相容性套件就可以輕鬆解決這個問題了。安裝步驟很簡單:

首先你可以直接以Office 2003開啟該檔案,此時會出現如下的畫面



你只要按下確定按鈕就會連到該套件所在的網頁了,如下圖所示。



如過出現的是英文畫面不需要緊張,只要在紅色圈圈所標示的地方,改選成Chinese(Traditional)就可以切換到中文畫面了,如下圖所示。



按下下載按鈕就可以下載安裝套件了。下載完畢後,執行該檔案安裝成功後就大功告成了。

當然你可以直接到Microsoft Office Word、Excel 及 PowerPoint 2007 檔案格式相容性套件的網頁下載安裝檔回來直接安裝就可以了。

星期六, 4月 12, 2008

解決當compiz開啟時tsclient無法從全螢幕切換回來的問題

在Linux上有許多與Windows具有相同功能的軟體, 其中tsclient就是其中一個. tsclient的功能就等於Windows上的遠端桌面連線軟體, 不過在Linux中一般稱為終端伺服器用戶端. 其不止功能相似, 從下圖你會發現連畫面都很相似, 相信使用起來應該很簡單才是.




可是這個軟體如果在你啟動Compiz這個桌面特效軟體之後, 在全螢幕執行下將會出現無法以Ctrl-Alt-Enter切換回Linux桌面的問題, 變得只能一直待在遠端桌面的全螢幕畫面中. 當然我們可以使用kill process的方式來將tsclient砍掉就可以再度回到Linux桌面了, 可是這樣畢竟比較麻煩. 所以根本的解決辦法就是改一下Compiz這套軟體的設定.

首先, 先打開Advanced Desktop Effects Settings視窗 (如果沒有安裝的, 就先用Synpaics安裝compizconfig-setting-manager套件),
點選Advanced Search, 然後尋找legacy. 應該會找到Workarounds這個項目.
然後選取Wordarounds, 這時會出現Legacy Fullscreen support選項.
將Legacy Fullscreen support選項取消掉就大功告成了.



下一次再使用tsclient時, 就可以用Ctrl-Alt-Enter在全螢幕以及視窗模式之間做切換的動作了.

星期二, 4月 01, 2008

Windows Device Driver學習筆記1

咦!? 才剛剛才寫完開疆計, 怎麼馬上就有學習筆記可以寫了!! 根本是在裝肖維!!

呵呵! 其實就趁自己對這個題目還很熱(台語), 趕緊寫下我的第一篇學習筆記囉. 這樣萬一以後又半途而廢了, 總不會什麼成果都沒有留下來. (叩! 不準在半途而廢了!)

好啦! 不多說廢話了, 趕緊開始Windows驅動程式學習的第一步了.

要學習驅動程式設計, 除了找些文件或是相關書籍來看之外, 最重要的就是建立一個可以讓你撰寫驅動程式的環境了. 而要撰寫Windows驅動程式, 當然是直接拿微軟官方所出的驅動程式開發套件 (Driver Development Kit)來用囉. 一般來說, 要進行驅動程式的開發需要用到兩台電腦, 一台是用來進行開發驅動程式以及除錯用的, 另外一台則是用來安裝以及執行所開發的驅動程式. 需要兩台的原因很簡單, 因為新開發的驅動程式還不是很穩定 (應該不會有這麼神的人寫完程式都不會有bug的吧), 再加上驅動程式是與作業系統緊密結合, 所以只要一出錯很容易就會造成系統當機, 如果嚴重一點還有可能會使得整台電腦都無法在開機, 必須重新安裝作業系統. 因此為了避免資料因為開發驅動程式而損毀, 一般還是建議使用兩台電腦來開發比較好.

接下來就是要進行DDK的安裝程序

  1. 在要開發驅動程式的電腦上執行DDK的setup.exe, 相信這個步驟對大部分的Windows使用者應該很簡單吧. 這裡唯一要注意的是, 安裝的目錄名稱不要出現有空白, 不然會有些問題.
  2. 安裝debugger. 在Windows DDK中有一個debuggers的目錄, 在裡面你可以找到debugger的安裝檔案, 裡面有32-bit以及64-bit的版本, 根據你所要開發的作業系統版本來選擇你所要安裝的debugger.
  3. 安裝完畢後, 再進行DDK安裝的驗證, 看看有沒有正確安裝好DDK. 步驟很簡單, 選擇一個build environment, 在所選擇的build environment的命列環境執行build -cZ, 這時候會將步驟一已經安裝的範例驅動程式進行編譯的動作. 如果可以正確編譯, 代表DDK已經有安裝成功了.

好了, 看完以上的介紹, 趕快行動吧!!

Windows Device Driver學習開疆計

一直以來, 都很想學習撰寫Windows驅動程式. 雖然對C語言應該還算熟悉, 但是卻一直都是侷限在Linux上面寫一些程式, 在Winodws上頂多就是唸研究所時寫些Console程式, 跑跑自己的論文數據, 所以Windows programming能力幾乎等於零. 這期間曾經有過幾次想要開始學習在Windows上學習程式設計, 可是總會被其他因素打斷(大部分的原因是因為懶惰啦)! 所以也就一直一事無成.

這一次, 我希望可以把Windows device driver程式設計真正地學好, 不管中途愈到任何因素, 不管learning curve也多險峻, 再加上辦公室我的座位旁便坐著一位具有這個能力的好學弟, 一定要趁換工作之前的這段時間, 好好地偷師, 把自己的這個能力給培養起來囉.

星期二, 3月 25, 2008

利用valgrind對用fuse所出的檔案系統進行memory leak除錯

如之前的文章說過,valgrind可以幫助程式設計者快速找出程式中會造成memory leak的部分。但是,如果你用fuse來進行user-level的檔案系統開發,並想利用valgrind來找出程式中memory leak的部分,馬上你就會發現一個問題,就是程式跑一下子後就會自動結束了。這時候你應該會看到螢幕上出現以下的錯誤訊息:

fuse: bad mount point `/mnt/storage': Transport endpoint is not connected

其實這不算是個錯誤,造成這個現象的主要原因是fuse的runtime librry會呼叫mount,進行檔案系統掛載的動作。但是因為mount這支程式本身是privileged program,必須要有root權限才可以執行此程式進行檔案系統掛載的動作,因此才會出現上面錯誤。

解決此問題最簡單的方式,就是將mount程式的setuid bit取消掉,也就是執行

chmod -s /bin/mount

如此一來,就可以使用valgrind來對用fuse所寫的檔案系統進行memory leak除錯的工作了。

當然,將mount的setuid bit取消掉會造成系統安全有疑慮。不過,也沒關係啦,只要記得在進行完debug的動作後,恢復mount程式的權限就可以了。

FUSE (Filesystem in Userspace)

這裡所指的FUSE是Filesystem in Userspace,可不是保險絲。
一般來說,檔案系統的開發是需要寫kernel-level module的,但是kernel-level programming比較困難,不容易debug,而且只要一不小心很可能會造成整個系統當機。FUSE則是用來解決這個問題的一個Linux kernel標準module。
FUSE是一套允許使用者自行建立在Linux上執行的檔案系統的開發套件,這個套件包含了kernel module以及系統相關的library。其中kernel module是用來與Linux kernel的VFS的介面銜接,VFS使得應用程式可以不需要理會所使用的檔案系統為何,就可以在各式各樣的檔案系統上進行檔案存取的動作,因為VFS會根據mount point資訊以及應用程式所要存取的路徑來決定應該將request轉到那個檔案系統模組進行處理。換句話說,有了FUSE的幫忙,我們就可以輕鬆的在user level進行檔案系統功能的開發,可以應用以往在user level 所學的工具以及programming資源來進行檔案系統的開發,實在是一個不錯的開發工具。

星期一, 3月 10, 2008

第一次覺得Sony的維修客服還不錯

自己的Sony VAIO SZ38電池一直怪怪的,問題超多的。
電池充滿後,放著不用一兩天後開機,發現電量只剩下一點點,用不到一個小時就沒電了。
每次充電電源都會顯示從0%一直慢慢增加至50%,然後神奇的事情就會發生。電池的容量就會在到達50%之後開始往下掉,漸漸地減少至0%。第一次發現這個狀況時還被嚇了一跳,以為是自己電源線沒接好差點就將自己辛辛苦苦寫的東西就這麼泡湯了。後來經過幾次的測試,發現雖然電池的電量往下掉,但是只要減少至0%,接下來就會顯示充電完成了,簡直舊式莫名其妙。

因為之前送修Sony的經驗不是很好,覺得不止服務態度不好,連問題都沒解決,還得跑好幾趟覺得很煩,所以這個現象拖延了很久一直都沒有去處理。後來在Mobile01的網站上面看到有網友在討論VAIO SZ系列的電池的問題,都是有關Sony SZ系列的電池設計不良導致電腦會找不到電池或是類似的問題,很多人說他們送修後運氣不錯,再加上還在保固期內,Sony都換一顆新的電池給他們。因此我也就抱著姑且一試的心裡將我的電池送修。
想不到,這次送修的感覺還不錯,不知道是不是被投訴多了,服務人員的態度比以前好多了,呵呵!
更想不到的是,經過幾天的等待,Sony竟然也換了一顆新的電池給我耶,或許是因為我還在保固期內,不過就是覺得很爽。再加上服務態度還不錯,總算是讓我對Sony恢復了一些好印象。

星期五, 3月 07, 2008

我復活了

我又復活了!!

已經好久沒有更新blog了,想想真是有點不好意思。
本來寫blog是希望透過書寫的方式,紀錄一下自己的一些讀書心得,順便可以幫助自己回覆記憶(呵呵,人老了總是會忘東忘西的)。可是,去年年中開始趕計畫進度之後就越來越懶了,懶到連email也都很少看了,怎麼可能會有功夫寫blog!

雖然這段時間曾經有想過要再開始寫寫blog,不管多寡,總是有寫比沒寫好。可是日子久了,就越來越覺得不好意思了,甚至曾經有個念頭想說乾脆放棄這個blog,再另起爐灶好了,反正我寫也沒幾個人看過我的blog,而且網路上孤兒blog到處都是,畢竟很多人對寫blog這玩意都只是跟流行,退燒了就再也不會造碰了。但是,又覺得自己不是一個會退縮的人,怎麼可以就這樣把辛苦經營的blog給放棄掉(呵!好像也沒寫幾篇阿!)。所以囉,還是決定繼續在原來的blog繼續努力,希望有一天可以像Mr. 6一樣,成為網路上人氣超旺的部落客。

嗯!為了慶祝這個重要的日子,就把今天訂為復活節吧!!哈哈!!