星期四, 9月 06, 2007

好用又免費的燒錄軟體 - InfraRecorder

CD或是DVD已經成為我們日常生活中不可或缺的資料備份媒體, 大部分的人也大概都有燒錄器. 一搬來說, 現在買燒錄器時都會附上一套燒錄程式, 而且幾乎都是鼎鼎大名的Nero, 可是我的Sony VAIO SZ 38就是沒有給我隨機附贈Nero, 而我很不想安裝沒有版權的軟體, 所以只好又得google一下, 看看網路上有哪些不錯的免費軟體可以使用囉.

還好, 皇天不負苦心人(當然再加上google的大力幫忙), 終於讓我找到了一個還不錯的燒錄軟體可以用, 那就是InfraRecorder.

這套軟體的使用介面相當簡單好用, 而且又同時支援燒錄CD與DVD, 更讚的是, 還是open source. 真是俗又大碗! 推薦大家可以多多使用.

相關連結:
InfraRecorder
Nero
Sony VAIO SZ 38

星期日, 8月 26, 2007

推薦好用又免費的錄音以及編輯軟體Audicity

曾經使用過許多錄音軟體, 雖然用起來都還不錯, 可是很多錄音軟體
(例如: Windows內建的錄音程式)的錄音格式無法儲存成mp3格式, 所以通常都會佔用很大的硬碟空間. 雖然現在硬碟很便宜, 空間又大, 可是檔案大畢竟就是不容易備份, 而且有些錄音軟體還都有錄音時間限制, 用起來實在是非常不方便. 在這裡跟大家推薦一個好用, 免費又open source的錄音軟體, Audacity.

推薦這套軟體有一個很重要的原因, 因為Audicity是可以同時在Windows以及Linux上執行的軟體, 甚至是MAC OS X(我沒有MAC, 所以沒試過). 這一直是我找尋軟體一個很重要的因素之一, 畢竟大部分都的user是很懶的, 都希望學會一招後就"行騙"天下.

另外, Audicity還可以直接以mp3格式儲存錄音內容, 減少錄音檔案所佔用的硬碟空間. 不過, Audicity預設是沒有這個功能, 要再安裝MP3 encoder才可以有這個功能. 還好這個步驟非常簡單, 只要下載MP3 encoder外掛即可:

  1. 首先先至http://lame.buanzo.com.ar/下載libmp3lame-win-3.97.zip這個檔案.
  2. 將下載的libmp3lame-win-3.97.zip解開
  3. 接著就可以使用Audicity進行錄音的動作
  4. 錄音完畢後, 選擇檔案->匯出為MP3, 將檔案轉存成MP3
  5. 這時候會出現視窗請你告訴Audicity所要使用的LAME MP3 Encorder檔案在哪裡
  6. 選擇Yes, 並找出在步驟2所解開的lame_enc.dll即可

最後, 除了前面所介紹的錄音功能之外, Audicity還可以對錄音檔案進行編輯的動作, 不過這部分小弟不太需要用到, 所以沒有用過, 無法為各位介紹囉, 真是不好意思.
相關連結:

好用又免費的虛擬桌面工具

你是不是常常因為開啟了一大堆程式, 而必須在一大堆視窗中找尋某個你要用的程式呢? 當你的"事業"越作越大, 視窗越開越多時, 這時候虛擬桌面就可以幫助你將你所開啟的視窗分類, 每次只顯示出相關的視窗, 其他與目前工作無關的視窗就可以暫時隱藏起來.

在Linux上虛擬桌面幾乎是每個desktop manager都一定會提供的功能, 可是在Windows上則沒有了. 其實再Windows上也是有一堆好用又免費的虛擬桌面軟體可以用的, 在這裡我跟大家推薦一個我自己覺得用起來還不錯的虛擬桌面軟體dexpot.

dexpot這套虛擬桌面軟體允許你最多有20個虛擬桌面, 相信這對大部分的使用者來說都已經夠用了. 而且每個虛擬桌面可以設定個別的密碼保護, 避免別人偷偷切換你的虛擬桌面, 偷看你在做什麼. 每個虛擬桌面也可以各自設立桌布, 讓你可以在處理不同事情, 根據事情的特性使用不同的桌布. 還有, 還可以設定hot key, 快速切換桌面, 以免做壞事被抓包喔.


相關連結:
dexpot

星期五, 8月 24, 2007

利用gdb進行shared library的除錯

寫程式時, 遇到bug最常使用的除錯工具就是gdb了. gdb會利用ld.so這個dynamic linker/loader, 自動將我們的程式載入記憶體, 並且在執行過程中將程式所使用到的shared library載入. 然而, 如果我們要debug的是已經compile成shared library的function時, 這種on-demand loading的運作方式則會造成我們的不便, 因為我們無法預先設定breakpoint以便在程式呼叫到shared library中的function時, 將程式執行暫停.

因此, 如果要以gdb對已經compile成shared library的function進行除錯時, 可以採用下列方式來進行在shared library中的function的除錯工作:

  1. 首先, 當然是在編譯shared library時, 必須有debug information, 也就是compile時要加上-g的option
  2. 再來就是告訴ld.so, 在載入程式時,一併載入我們所要debug的shared library, 只要利用LD_PRELOAD環境變數即可. LD_PRELOAD是告訴ld.so, 在程式一開始載入時, 就順便一起載入LD_PRELOAD環境變數所指定的shared library.
  3. export LD_PRELOAD=要debug的shared library路徑
  4. 執行gdb進行程式除錯, 並且先隨便設定一個中斷點
  5. break main
  6. 輸入run讓gdb開始執行程式, 此時gdb應該會一下子就暫停程式的執行. 這時候就可以確定一下我們要debug的shared library是否已經載入
  7. info share

此時應該就可以找到我們在shell中利用LD_PRELOAD環境變數要求ld.so載入的shared library了. 接下來就可以設定shared library中的function為中斷點並且進行debug了.

星期三, 8月 22, 2007

好用又免費的電子字典

在閱讀英文文件時,我們常常需要電子字典來協助我們。想到電子字典軟體,相信大部分的人應該就會直接聯想到Dr. Eye譯點通這套軟體吧。這套軟體的功能非常強大,可以進行多國語言的翻譯、真人發音、整篇文章翻譯等等,實在是一套不可多得的軟體。而且,重點是,Dr. Eye每個月都會有新增的字庫可以加入,真是讓人有物超所值的感覺呢!
可是,De. Eye畢竟是一套商業軟體,是要花錢購買的。對於沒有此預算,可是又有此需求的人,那該怎麼辦?其實,有一套功能很接近Dr. Eye的免費軟體可以供大家使用,就是StarDict

StarDict是一套open source的軟體,而且又同時支援Windows與Linux作業系統,還可以自行新增字典字庫,實在是一套不錯的軟體。當然,除了基本字典查功能之外,StarDict也跟Dr. Eye一樣,支援即時翻譯,也就是滑鼠到哪就自動翻譯滑鼠所指的字。而且,從3.0版開始,更支援了全文翻譯的功能,強力推薦這套軟體。

相關連結:

星期二, 8月 21, 2007

免費產生pdf的工具

在日常生活中,pdf檔案格式出現的機率越來越多,不管在Windows或是Linux上,都已經有不錯的pdf reader讓我們閱讀pdf文件,例如:在Linux上的evince、xpdf以及Linux版的Acorbat reader,在Windows上有Adobe Acrobat reader、Foxit reader等。

可是,如果是要產生出pdf格式的文件,在Linux當然也有許多免費好用的工具可以使用。但是,在Windows上,以往大家可能都是使用Adobe Acrobat。可是這是一套商業軟體,要錢的,如果沒錢買的話,其實可以使用一些免費的軟體,也都不錯喔。

在這裡推薦一下CutePDF Writer。這是一套商業軟體,不過重點是,它是免費的,所以大家可以安心使用。而且不會在所產生的pdf檔案上,留下任何的watermark,是一套相當不錯的pdf產生工具。

相關連結:

檔案比較工具

當我們需要比對兩個檔案的內容時,在Linux上,常常第一個想到的就是diff這個文字模式的工具。這個雖然牌子老、信用好,但是缺乏了圖形化介面總是比較不那麼方便。其實,我們可以有許多其他的選擇,例如:tkdiff、fldiff。


tkdiff是diff的圖形化front-end,其本質上仍然是使用diff進行檔案比比對的動作,只是幫diff包了一個漂亮的圖形外觀。除此之外,tkdiff還可以進行檔案merge的動作。還有一點值得特別強調一下,就是tkdiff不只可以對一般檔案進行比比對,也可以對source control system中的檔案進行比對動作。
tkdiff的使用方法很簡單,可以只輸入tkdif進入interactive模式,直接選取要比對的檔案,或是在命令列直接輸入要比較即可。

fldiff也是一個圖形化的檔案比對工具,其基本功能跟tkdiff差不多,都是可以比較一般的檔案以及source control system中的檔案。不過fldiff比tkdiff多了一個目錄內容比對功能,就是可以指定兩個目錄,然後針對目錄中相同名稱的檔案進行內容比對的功能。

tkdiff有已經編譯好的Windows版本,fldiff需要自己編譯。


相關連結:

星期日, 8月 19, 2007

在Ubuntu中安裝Adobe Reader

Linux中雖然有許多pdf viewer,例如:evince、xpdf等,可是對於Windows的慣用者,應該還是習慣使用Adobe Reader。所以,接下來就稍微介紹一下如何在Ubuntu上安裝Adobe Reader:

1. 先加入金鑰
wget -q http://medibuntu.sos-sts.com/repo/medibuntu-key.gpg -O- | sudo apt-key add -

2. 在/etc/apt/sources.list中加入repository
## Medibuntu - Ubuntu 7.04 "feisty fawn"
## Please report any bug on https://launchpad.net/products/medibuntu/+bugs
deb http://medibuntu.sos-sts.com/repo/ feisty free non-free
deb-src http://medibuntu.sos-sts.com/repo/ feisty free non-free

3. 安裝套件acroread

參考連結:

在Ubuntu中安裝Microsoft字型

使用Linux作為使用環境,第一的遇到的問題即是中文字型問題。我們在使用Linux作為工作環境時,常常覺得Firefox的中文字型不夠漂亮,甚至有一點點模糊的感覺,用起來就是不像在Windows中那麼的舒服。雖然最近大量使用Ubuntu,覺得Ubuntu已經做的很好了,也讓我漸漸地減少使用Windows的時間了,但是總覺得還是不夠,字型看起來就是不夠清楚好看。

其實,我們可以有很多方法可以美化Ubuntu的桌面環境。以下我介紹一個最簡單的方法。

1. 先在/etc/apt/sources.list中,啟用multiverse repository
2. 利用Synaptic套件管理程式,安裝msttcorefonts以及ttf-xfree86-nonfree兩個套件
3. 重新開啟應用程式或是重新開啟X Windows

你就可以發現,你的桌面環境的字型變得比較好看了喔。

ps. Windows和Linux都是我喜愛的作業系統,也都覺得很不錯,各有優缺點。只是覺得微軟的產品如果可以再便宜一點,那就更好了。

相關連結:
RestrictedFormat/Microsoft Fonts

星期六, 8月 18, 2007

IMMS: 自動找出喜愛聽的音樂

在Linux中,BMP或是XMMS都是不錯的音樂播放程式,除了使用介面簡單、酷似Winamp之外,另外,還有一個不錯的功能可用,那就是自動播放你所喜愛的音樂。

Intelligent Multimedia Management System (IMMS)就是一個可以根據你聽音樂的習慣,自動將你的音樂分出喜愛以及不喜愛部份,然後根據此分類結果自動地調整播放的內容,完全不需要使用者進行任何額外的設定動作來分出喜愛與不喜愛的部份。其運作原理很簡單,完全是根據聽音樂時的正常反應。什麼是聽音樂時的正常反應?那就是,遇到不喜歡聽的歌就跳過的這個動作。IMMS會紀錄你在收聽音樂的過程中,跳過了哪些音樂,這些音樂的喜好程度分數就會逐漸降低,所以一段時間後,自然就會有你對每首音樂的喜好程度分類。

安裝完IMMS之後,在BMP Preferences->Plugins->General頁面中,將IMMS enable的選項打勾即可。

使用IMMS一開始要有一點耐心,必須給它一點時間讓他認識你的音樂喜好,之後就可以根據你的喜自動選出喜歡的音樂播放了。



參考網址:

在Linux中聽mp3的好用工具

在Windows中,有Winamp、Windows media player等不錯的軟體可以播放mp3,換到Linux下則可考慮用Beep Media Player (BMP)來播放。

BMP是以XMMS為基礎所開發出來的,其外觀很像Winamp,使用起來非常簡單。不過,初次使用時有一個問題,就是播放清單無法顯示在Windows中抓到的檔案,會出現一大堆問號之類莫名其妙的字。此問題的原因主要是因為在Linux下,BMP採用的預設編碼是UTF-8,可是我們在Windows下抓到的檔案,中文檔名是採用Big5編碼,所以播放清單才會出現亂碼。所以只要告訴BMP將雲本屬於Big5的檔名轉換成UTF-8即可。設定步驟說明如下:

1. 打開BMP Preferences設定頁面
2. 在左邊的Categoreis中選擇Plugins
3. 在右邊的Media頁面選取MPEG Audio Plugin
4. 按下下方的偏好設定按鈕
5. 在出現的MPEG Audio Plugin Configuration視窗中,選取Title頁面
6. 將Convert non-UTF8 ID3 tags to UTF8打勾
7. 在ID3 encoding中輸入Big5

套用設定後就大功告成了

詳細解決方法可以參考http://wiki.ubuntu.org.tw/index.php/HowtoMusic


其他參考:

星期五, 8月 17, 2007

samba使用tdb database file儲存重要資訊

在samba中,使用到許多tdb的檔案儲存系統的一些重要資訊或是runtime資訊。這些檔案會方在兩個地方,可以透過下列方法知道兩個放置tdb database file的位置,首先是samba的一些機密資訊:

smbd -b |grep PRIVATE_DIR

這些tdb database file最好定期備份,以便在系統運作出現錯誤時可以進行回復,samba套件提供了一個工具[wiki:tdbbackup tdbbackup]可以幫助我們備份這些檔案。這些檔案在samba的文件稱為presistent TDB file。

另外,samba在執行時期的資訊放在:

smbd -b|grep LOCKDIR

這些檔案在samba文件稱為temporary TDB file。

以下分別列出presistent TDB file以及temporary TDB file的名稱與功能:
  • Presistent TDB file
    • account_policy: Samba/NT account policy settings, includes password expiration settings.
    • group_mapping: apping table from Windows groups/SID to UNIX groups.
    • ntdrivers: Stores per-printer installed driver information.
    • ntforms: Stores per-printer installed forms information.
    • ntprinters: Stores the per-printer devmode configuration settings.
    • passdb: Exists only when the tdbsam passwd backend is used. This file stores the SambaSAMAccount information. Note: This file requires that user POSIX account information is availble from either the /etc/passwd file, or from an alternative system source.
    • registry: Read-only Samba database of a Windows registry skeleton that provides support for exporting various database tables via the winreg RPCs.
    • secrets: This file stores the Workgroup/Domain/Machine SID, the LDAP directory update password, and a further collection of critical environmental data that is necessary for Samba to operate correctly. This file contains very sensitive information that must be protected. It is stored in the PRIVARE_DIR directory.
    • share_info: Stores per-share ACL information
    • winbindd_idmap: Winbindd's local IDMAP database.
  • Temporal TDB file
    • brlock: Byte-range locking information. 不需要備份
    • connections: A temporary cache for current connection information used to enforce max connections. 不需要備份
    • eventlog/*tdb: Records of eventlog entries. In most circumstances this is just a cache of system logs. 不需要備份
    • gencache: Generic caching database for dead WINS servers and trusted domain data. 不需要備份
    • login_cache: A temporary cache for login information, in particular bad password attempts. 不需要備份
    • messages: Temporary storage of messages being processed by smbd. 不需要備份
    • netsamlogon_cache: Caches user net_info_3 structure data from net_samlogon requests (as a domain member). 不需要備份
    • perfmon/*.tdb: Performance counter information. 不需要備份
    • printing/*.tdb: Cached output from lpq command created on a per-print-service basis. 不需要備份
    • schannel_store: A confidential file, stored in the PRIVATE_DIR, containing crytographic connection information so that clients that have temporarily disconnected can reconnect without needing to renegotiate the connection setup process. 不需要備份
    • sessionid: Temporary cache for miscellaneous session information and for utmp handling. 不需要備份
    • unexpected: Stores packets received for which no process is actively listening. 不需要備份
    • winbindd_cache: Cache of Identity information received from an NT4 domain or from ADS. Includes user lists, etc. 需要備份

星期日, 8月 12, 2007

好用的寫程式工具

在寫程式的時候常常需要作兩個檔案之間的比較,有一些商業軟體提供了相當不錯的功能,例如:UltraEdit。可是這些軟體通常需要花費不少的銀兩,對於可憐又貧窮的我,實在是無法負擔這些額外的支出,在這裡要跟大家推薦一下一些好用的免費軟體。

首先是程式編輯器。我個人比較現在常用的是Notepad++以及PSPad兩套軟體。這兩套軟體提供了大部分UltraEdit中的功能,而且都提供了中文使用介面。不過,PSPad有提供檔案比較功能,但是Notepad++好像沒有提供檔案比較的功能,這對於常常必須在檔案之間比較內容實在很不方便。所以就上網google一下,果然發現了一個好用、免費還open source的檔案比較工具,那就是WinMerge。

WinMerge是一個open source project,其除了提供了檔案比較的功能,也同樣有中文使用介面。

參考網址:
1. UltraEdit http://www.ultraedit.com/
2. Notepad++ http://notepad-plus.sourceforge.net/tw/site.htm
3. PsPad http://www.pspad.com/
4. WinMerge http://winmerge.org/

星期六, 8月 11, 2007

好書推薦 1

OO設計入門書
Craig Larman, Applying UML and Patterns, 2nd Ed., Prentice-Hall, 2001.
UML與樣式徹底研究 台灣培生教育

MDA(Model Driven Architecture)
MDA Explained: The Model Driven Architecture Practice and Promise

星期四, 8月 09, 2007

trace samba source code 心得筆記 6

在smb.conf設定檔中,可以分成多個service。每個service可以擁有各自的設定。其中有一個設定稱為vfs objects,此設定是用來套用stackable VFS功能到該service上。
所謂的stackable VFS功能指的是在進行檔案存取時,samba額外對該service進行的處理動作,這是在samba的第3版之後才加入的新功能。你可以在一個service上套用多個vfs modules,samba混根據smb.conf設定檔案所列出的先後順序,依序套用所列的vfs module。在samba套件中也有幾個vfs objects可以使用,這些module放在samba安裝目錄下的lib目錄中(/usr/lib/samba/vfs或是/usr/local/samba/lib/vfs):

audit
這個vfs module可以將存取檔案的紀錄寫到syslog中,

default_quota
default_quota可以設定user或是group的quota。

extd_audit
這個module原則上與audit一樣,除了將檔案存取紀錄寫到syslog中,還會寫一份到samba本身的log檔。

recycle
這個module是模擬Windows上的資源回收筒的功能,也就是刪除sambaer server上的檔案時,samba會將你刪除的檔案搬移到一個隱藏目錄中,預設是.recycle目錄,不過也可以透過repository選項設定要當作資源回收筒的路徑。

有些vfs module可能很簡單,有些則有選項可供設定。其設定的語法是以
module: option = value
的格式來指定所要設定的選項,例如指定資源回收筒的路徑為/tmp:

[myshare]
vfs objects = recycle
recycle: repository = /tmp

如果選項的設定值不只一個,而是有多個所形成的list,則每個設定值之間用應逗號隔開。例如:
[myshare]
vfs objects = access_control
access_control: allow_host = pc1
access_control: deny_host = pc2, pc3

當你自行開發vfs module時,samba已經有提供處理上述vfs module選項的相關function。在 loadparm.c檔案中,有許多有關選項處理的function。其中

const char *lp_parm_const_string(int snum, const char *type, const char *option, const char *def)
以及
const char **lp_parm_string_list(int snum, const char *type, const char *option, const char **def)

是兩個可以用來得到service的選項設定值或設定列表的function。其中,
snum是連線id,可以透過SNUM(conn)取得。
type就是vfs module的名稱,例如:recycle, access_control。
option是指定要讀取的選項名稱,例如:repository, allow_host, deny_host。
def是預設值,也就是在smb.conf中沒有針對該選項進行設定時,vfs module預設要採用的設定值。

而lp_parm_const_string()與lp_parm_string_list()兩個差別在於,不管設定值的個數有幾個,t_string()會將所有選項(包含分隔選項的逗號)當作一個字串傳回,而lp_parm_string_list()則會將每個選項以一個字串儲存,所以會傳回一個字串陣列。例如:
lp_parm_const_string(SNUM(conn), "access_control", "allow_host", NULL) => "pc1"
lp_parm_const_string(SNUM(conn), "access_control", "deny_host", NULL) => "pc2, pc3"
lp_parm_string_list(SNUM(conn), "access_control", "allow_host", NULL) => {"pc1"}
lp_parm_tring_list(SNUM(conn), "access_control", "deny_host", NULL) => {"pc2", "pc3"}

星期三, 8月 08, 2007

trace samba source code 心得筆記 5

samba 的設定檔smb.conf基本上可以分成幾個部份,每個部份都是由中括號[]為開頭,負責定義一個samba所提供的service,例如:[global]、[printers]、[homes]等等。
其中[global]這個service是比較特殊的,其定義了套用於整個samba server的種種設定。由於samb a server的設定選項非常繁多,所以如果沒有寫在smb.conf檔案中,則該選項會採用samba的預設值。

要看目前samba的系統設定,可以輸入

testparm

觀看系統設定概要。
若要得到完整的系統設定,可以輸入

testparm -v

smb.conf所使用的設定格式也很簡單,採用以 = 隔開的key/value pair方式。若在一行設定前面加上 ; 的話,則samba server會將這一行視為註解。
以下為一簡單的設定檔範例:

[global]
netbios name = mypc
workgroup = mygroup

[homes]
read only = No
browseable = No
create mask = 0600
directory mask = 0700


[usb_storage]
path = /media/disk
admin users = jacky
write list = jacky
read only = No

星期二, 8月 07, 2007

trace samba source code 心得筆記 4

用windows client在測試與samba server連線時,發現windows會將之前的資訊cache起來,所以如果是DFS referral則不會再重新發TRANSACT2_GET_DFS_REFERRAL請求,跟samba server要檔案真正所在位置的資訊,而是直接利用其cache的資訊對檔案真正所在的samba server發出request。

trace samba source code 心得筆記 3

在smaba source code中有許多debug message可供除錯時使用,並且將debug message分成0~10等級
在samba設定檔smb.conf中,有一個log level選項,主要是用來控制debug message的列印等級。其設定方式為

log level = n

n即為samba執行時的global debug等級。
此外,samba執行時的等級可以根據不同的class給予不同的等級,方便我們進行除錯。其設定方式也是透過log level的選項,

log level = global_level class1:class_level1 class2:class_level2 ...

如此,DEBUG()就可以根據global debug level以及class debug level,決定是否要輸出debug訊息。

目前在samba 3.0.24版中,根據debug.h檔案所列共有下列幾種:
TDB、PRINTDRIVERS、LANMAN、SMB、RPC_PARSE、RPC_SRV、RPC_CLI、PASSDB、SAM、AUTH、WINBIND、VFS、IDMAP、QUOTA、ACLS、LOCKING、MSDFS、DMAPI。

但是,根據實測結果,目前PRINTDRIVERS、LANMAN、SMB、SAM並不支援class level debugging。

trace samba source code 心得筆記 2

要追蹤samba的程式流程或是要找出錯誤發生的原因,可以利用

smbd -i -dn > debug.txt

將samba以interactive模式執行,如此smaba只會有一個process而不會額外fork出其他process。並且將執行過程的debug訊息導到debug.txt檔案,n的數值為0到10,數值越大debug訊息越詳細。

trace samba source cdoe 心得筆記 1

解開samba source code package後,在examples/VFS目錄中,有提供三個檔案
configure.in
install-sh
makefile.in
方便programmer開發自己的samba VFS module。
只要系統安裝了autoconf package後,並將上述三個檔案以及所開發的samba VFS module的原始程式放在同一個目錄,接著在command line輸入autoconf,系統就會自動產生出相對應的configure script。
接下來只要再輸入

./configure --with-samba-source=samba source code所在目錄路徑

例如:./configure --with-samba-source=/home/zhuang/samba-3.0.24/source
就可以自動產生出編譯samba VFS module的Makefile了。

自動掛載網路芳鄰的目錄

在Linux中,要自動掛載網路芳鄰的目錄,可以利用/etc/fstab來達到此功能。
在/etc/fstab檔案中,設定一下要掛載的網路芳鄰的路徑、掛載點以及一些帳號密碼等就可以了。格式為:

網路芳鄰路徑 本機掛載點 smbfs 帳號密碼及權限設定

可參考下例:

//pc1/movie /media/movie smbfs credentials=/etc/credentials.txt,iocharset=utf8,codepage=cp950,rw,uid=1000,gid=1000

第一部份:
//pc1/movie就是在網路芳鄰裡,電腦名稱為pc1所分享出來的目錄movie

第二部分:
/media/movie就是要將目錄掛載到此路徑,方便之後使用

第三部分:
smbfs就是用來怪在網路芳鄰的檔案系統名稱

第四部分:
這部分的設定會因為所分享的電腦設定不同而有所不同。但大致上需要
credentials是設定連線到pc1所需的帳號密碼資訊是存放在檔案/etc/credentials.txt中,檔案內容格式為
username=使用者名稱
password=密碼

接下來的iocharset以及codepage則是分別設定在Linux上以及Windows上所使用的語言設定。這部分則必須根據電腦所使用的設定跟著改變,以免檔案名稱呈現亂碼。

最後的rw,uid-1000,gid=1000則是將掛載進來的目錄設定為可讀寫,並且將掛載點的使用者與群組設定為某個使用者與群組(在這裡均為1000)。

星期一, 4月 30, 2007

如何讓一般使用者也可以利用fuse掛載檔案系統

由於有越來越多的file system是以fuse來完成,
以root的權限,完成下列幾個步驟:
  1. chmod 4755 /usr/bin/fusermount
  2. /sbin/modprobe fuse
  3. chmod o+rw /dev/fuse
如此一來,不具root權限的user也可以利用fuse,自行mount檔案系統了。

如果user要umount檔案系統,因為其不具有root的權限,所以無法執行umount,同樣需利用fuse所提供的fusermount這個utility來執行卸載的動作。也就是執行

/usr/bin/fusermount -u mount_point

星期二, 4月 24, 2007

max file size == 2GB

一般來說,在Linux系統上,當我們要建立一個大型檔案時,檔案最大可以等於2的31次方-1,也就是大約等於2GB這麼大。會是這個size原因是因為當你在操作檔案時,系統用來管理目前檔案存取位置的off_t是一個32位元的整數。

如果要打破file size最大2GB的限制,那就要在open file時,加上O_LARGEFILE的flag,並且改用off64_t表示資料在檔案中的位移值。另外,在compile時加上-D _GNU_SOURCE,這樣就可以建造出超過2GB的檔案了。

附上一個簡單的範例供大家參考一下。此範例的目的主是要建立一個檔案大小大約3GB的檔案。


#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>

int main()
{
int fd;
off64_t file_size;

fd=open("test.dd",O_LARGEFILE|O_CREAT|O_RDWR,0666);
if(fd==-1)
{
perror("open");
exit(1);
}
file_size=1024;
file_size*=1024*1024*3;
if(lseek64(fd,file_size-1,SEEK_SET)==-1)
{
perror("lseek");
close(fd);
}
write(fd," ",1);
close(fd);

return 0;
}

星期五, 4月 20, 2007

APR == Apache Portable Runtime 簡介

APR 是Apache Portable Runtime的縮寫。APR本來主要目的在於將Apache系統中與作業系統相關的實作部分獨立出來,另外提供一與OS無關的應用程式介面(API,Application Programming Interface)供程式設計者使用,也就是模擬出一個虛擬的OS介面,其主要針對Thread、Process、Directories等功能進行虛擬化。如此一來,可以在不需大量變動原始程式碼即可輕易達到將Apache軟體移植至其他的作業系統上。如果要將所開發的程式移植到新的作業系統上,程式設計者只要在新的作業系統上實作APR所提供的的介面,就可以達到將開發的程式輕易地移植到其他 作業系統 上。

由APR的全名就可以知道,APR原本是屬於Apache的一部份,但是自從Apache 1.3版之後已經被獨立成為一個單獨的project,當然除了Apache之外,也有許多軟體是以APR為基礎或是使用APR進行開發,達到 platform independent。著名的軟體專案包括:Subversion等等。

APR大致上可以分了兩個部分,分別為APR Core與APR Util。APR Core包含了最基本的portable functions,Apr Util則包含其他不屬於Core但也必須是portable的functions。以下針對APR Core與APR Util分別描述所提供的功能。

APR Core提供了以下功能:
  • Reading and writing files
  • Character set conversion
  • Network communications with sockets
  • Time management used for Internet type conversions
  • String manipulation like C++ including neural order management
  • UNIX password management routines
  • Table management routines
  • UUID Internet generation
  • Filename canonicalization
  • Random data generation
  • Global lock management
  • Threads and process management
  • Dynamic library loading routines
  • Memory mapped and shared memory

APR Util提供了以下的功能:

參考資料

簡介 pkg-config 的功能與用法

我們在開發 c 程式時常常會用到許多系統已安裝 library 所提供的 function,加速程式的開發。而我們必須針對所使用到的 function 進行 prototype 宣告,因此,我們必須在程式中將含有這些 library 所提供的 function 的 prototype 宣告的 header file 加到程式中,並且在編譯程式時加上額外的設定告訴編譯器該去系統中的何處找尋所要使用的 header file 以及所使用的 library file被安裝在何處。而這往往也是一開始讓程式設計者最頭痛的地方。還好,在 linux 系統上有一個非常好用的工具 pkg-config 可以讓我們查詢 library 的 header file 以及 library 本身所在位置,以及在編譯程式時該使用的編譯參數為何。

pkg-config 命令是可以用來讀取安裝在 linux 系統上的 library 相關資訊。這個程式主要讀取系統中位於 /usr/lib/pkgconfig 目錄或是環境變數 PKG_CONFIG_PATH 所設定的路徑中的負檔名為 .pc 的檔案,這些檔案包含系統安裝的 library 的相關資訊,包括:安裝的目錄、程式編譯的參數等等。

使用方法很簡單
  • pkg-config --cflags library-name-with-version 就可以得到編譯程式時,pre-processing 動作必須加上的參數設定。例如:我在自己的電腦上下pkg-config --cflags glib-2.0,其結果為-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include。
  • pkg-config --libs library-name-with-version就可以得到 linking 時所必須傳給編譯器的參數。執行 pkg-config --libs glib-2.0 得到-L/lib -lglib-2.0。
另外,我們還可以利用 pkg-config 來簡化 Makefile 的撰寫。在Makefile中,原來寫在編譯器之後的參數,改成 pkg-config --cflags --libs library-name-with-version 即可。例如:
將Makefile中的這一行
gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -L/lib -lglib-2.0 program.c
替換成
gcc pkg-config --cflags --libs glib-2.0 program.c