Thursday, February 28, 2008

pdf工具

PDF Split and Merge

http://www.pdfsam.org/

在Ubuntu7.04安裝Dosbox 0.72

1. 到http://www.dosbox.com 下載 0.72版 for Fedora Core之RPM檔案

2. 用Alien轉換為deb
sudo alien dosbox.rpm

3. 安裝轉換完成之dosbox.deb

4. 安裝libsdl-net 1.2之套件(執行dosbox需要此套件)

5. 完成

PC透過藍芽連接6個Lego NXT控制器

藍芽接收器
Corega 超輕巧無線藍芽2.0接收器 CG-BTUSBE01
或是使用Broadcom藍芽晶片之接收器

1. 開啟"我的藍芽中心"->選單"Bluetooth"->Bluetooth組態->用戶端應用程式->新增COM序列埠

2. 重覆1.之動作,新增5個"Bluetooth序列埠"

3. 將6個NXT 控制器開機,並打開藍芽

4. 搜尋及配對6個NXT控制器

5. 在已配對之NXT裝置按右鍵->探尋可用服務->出現"Dev B"->按右鍵"連接"

6. 重覆5.之動作將6個NXT控制器連線

如果未使用程式進行NXT控制器連線,則已連線之NXT控制器將會出現陸續斷線的狀況,一旦有程式進行連接,則將可保持連線之狀態。

使用c#建立藍芽裝置連線

參考網址
http://www.codeproject.com/useritems/Bluetooth_connection_C_.asp

若是要連接Serial Port

將下列
private Guid service = BluetoothService.DialupNetworking;
改為
private Guid service = BluetoothService.SerialPort; 

Treo 650使用藍芽經PC上網(不需安裝任何軟體)

前提:windows 2000/xp 使用adsl/cable等使用網卡的上網方式

PC端 : IBM T43 (使用IBM之藍芽管理程式)

第一步:安裝好usb bt驅動和軟件,並且做好tt和usb bt的配對

palm 上:Preference--〉Communication--〉Bluetooth--〉Bluetooth:On--〉Device Name:(自定)--〉Discoverable:是--〉Dial-up Networking:(最好選是)--〉Setup Device--〉Trusted Devices-->Add Device--〉搜尋到之Device--〉加入到可信任設備列表--〉完成--〉完成

第二步:打開「我的電腦」——〉

「我 的藍芽中心」-->我的裝置--> 我的 網路連線 -->內容-->在"選擇要提供給遠端裝置的服務類型" 下拉框中選擇"允許其他裝置經由本電腦存取網際網路/區域網路" -->"設定網路介面卡組態"-->Internet Protocol(TCP/IP)--〉內容--〉「使用下列IP地址」--〉IP地址: 192.168.0.1--> 子網路遮罩:255.255.255.0--〉預設閘道:(不用填)--〉「使用下列DNS服務器地址」--〉首選DNS服務器: ISP之DNS IP--〉備用DNS服務器:(不用填)

第三步:「控制面板」-->「網路連線」--〉右擊本機上網的「區域網路1」--〉內 容--〉進階--〉網際網路連線共用--〉在「允許其它 網絡用戶透過這台電腦的網際網路連線來連線」前的方框內打勾(如果有多個家用網路連線,則需要在下拉框中選中「Bluetooth Network」)

PALM端:

第 一步:Preference-->Connection--〉New --〉Name:(自定)--〉Connect to:Local Network --> Via:Bluetooth--〉Device:Tap to Find(找到pc 的usb bt後,選擇該電腦)--〉Detail--〉Speed:115200bps--〉Flow Ctl:Automatic--〉OK --> OK --> Done

第二步:Preference--〉Network--〉New--〉Service:(自定)--〉 User Name:(不用填)--〉Password:(不用填)--〉FallBack:(你剛才新建的連接名 稱)--〉Detail --〉Idle timeout:Never--〉Advanced-->取消「Query DNS」和「IP Address:Automatic」方框中的勾--〉Primary DNS: ISP之DNS IP-->Secondary DNS:(不用填)--〉IP Address:192.168.0.2--〉Script--〉Delay: 1-->Send:CLIENT-->Wait For:CLIENTSERVER-->End--〉OK--〉OK--〉Connect

參考資料來源: Alexiao [分享] TT 藍芽無線上網以及同步(不需第三方軟件)

Treo 650安裝軟體

1.ZLauncher
取代原來陽春的Launcher

2.DateBk 6
取代原來陽春的行事曆

3.中國農民曆 1.5
好用的農民曆軟體

4.FingerAddress
使用通用拚音尋找聯絡人

5.iSilo
電子書閱讀軟體

6.ZDIC
字典軟體,有非常多的字典庫,可使用KDIC的字典庫,且解決音標顯示的問題

7.KeyguardTime+
讓Treo 650鍵盤鎖定時,可以顯示時間、日期

8.LED Off
控制Treo 650的LED顯示,可以讓LED燈不要一直閃

9.ListPro
自訂列表清單的好東西

10.Matirelire
免費的記帳軟體

11.mobileClock
好用的鬧鍾軟體,配合Pocket Tunes可以用MP3當鬧鍾鈴聲

12.PhoneDisconnect
用LED燈顯示未接來電及未讀訊息

13.Pocket Tunes
MP3播放軟體

14.Radio Control
定時開關手機功能軟體

15.Ringo
使用MP3作為手機鈴聲

16.SplashID
記錄使用者帳號、密碼的工具,還可以產生不同位數的密碼

17.ThoughtManager
以階層方式進行會議記錄與記錄自己想法的軟體

18.VolumeCare
控制Treo 650的喇叭音量

19.SugerMemo
背單字的軟體,可由ZDic將單字彙入

20.snapCalc5
可以在任何地方用快速鍵啟動的計算機,在使用其他程式時,可快速計算數字。

21.DA Launcher
啟動/管理DA的軟體,免費的

22.FieldPlus
可用五向鍵來選取字串
長按menu鍵為呼叫command bar的小軟體,免費

Ubuntu jPilot 與 Treo 650 同步設定

Ubuntu預設安裝的Gnome-Pilot(系統->偏好設定->Palm OS 裝置),我怎麼試都沒辦法與Treo 650同步,後來改用jPilot後,一切都正常了。

1. 由Synaptic套件管理安裝jPilot
2. 設定
------------------------------------------------------------
gksudo gedit /etc/udev/rules.d/10-custom.rules
加入
BUS=="usb", SYSFS{product}=="PalmOne Handheld*", KERNEL=="ttyUSB*", NAME{ignore_remove}=="treo", MODE=="666"
------------------------------------------------------------
gksudo gedit /etc/modules
加入
visor
------------------------------------------------------------
打開終端機,執行(因為visor模組似乎無法自動載入,所以就手動載入)
modprobe visor
------------------------------------------------------------
3.同步
3.1 按Treo 650之Hotsync按鈕
3.2 按jPilot之同步功能鈕

Treo 650 啟動DA程式

安裝DA Launcher以後發生一件慘事,DA Launcher要用Command bar才能呼叫
結果Treo 650預設並沒有任何方式可以用Command bar>"<
要另外安裝一個小程式Fieldplus,用長按menu鍵來叫出command bar
使用這兩個免費的小程式就可以快樂的使用DA啦^^

Monday, February 25, 2008

Ubuntu中Opera瀏灠器的中文字型顯示

Opera預設的中文顯示字型實在是醜到爆>"<
不管怎麼在設定選項中修改顯示字型都沒用,一樣用很醜的細明體顯示
後來找到一個Workround的方式 -- 加入使用者自訂樣式

1. 在/home/account name/.opera/styles/user目錄中,新增一個CSS檔案,檔名任取
CSS內容如下:

@charset "UTF-8";
*{
font-family:"LiHei Pro"!important;
}

我設定的是用Mac的儷黑體

存檔後,重新啟動Opera

2. 檢視->樣式,選擇你建立的那個CSS檔

Sunday, February 24, 2008

Linux動態函式庫解析

前言
用 MS Windows 一段時間的讀者,應該都聽過動態函式庫這個名詞。在 Windows 9X/ME 或是 Windows NT/2000 中,常見到的動態函式庫為副檔名 「DLL」 (Dynamic Loading Library)的檔案。

而在 Linux 中,當然也有動態函式庫的機制存在。如此一來,所撰寫的程序便無需透過靜態連結(Static Link),而可以在編程時透過動態連結(Dynamic Link)產生我們所要的執行檔。

使用動態函式庫的好處有許多。首先,就是由於執行檔主要呼叫的函式都包含於動態函式庫中,所以檔案所佔的空間可以因而縮小。其次,當動態函式庫的函式內容有所改變時,呼叫該動態函式庫的程序,可以在最小修正甚至是不需重新編程的情況下,就可以叫用到新版本的函式庫服務。

對於發展 Embedded Linux 的業者來說,能夠儘可能減少應用程序執行環境所需空間的大小,便可以把日後成品所需的 Flash 容量降到最低,在整體成本以及所耗用的記憶體空間來說,都可以得到許多的好處,而在動態函式庫來著手所得到的效益也是相當可觀的,儘可能的刪去不必要的動 態函式庫,以及針對動態函式庫改寫來縮小或是透過工具刪去用不到的函式,都可以帶來許多的助益。

當然棉,動態函式庫的好處還不只這些,相信讀者們在文章中可以發現其它的妙用的。


檔案格式(ELF VS A.out)
首先,我們必須先確定目前所執行的 Linux Kernel 版本有開啟 ELF 與 A.out 執行檔案格式的支援(通常都會有)


Kernel support for a.out binaries (CONFIG_BINFMT_AOUT) [M/n/y/?]
Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?]



舉個例子來說,若要執行 a.out 格式的執行檔時,我們必須確認 CONFIG_BINFMT_AOUT 為 Y,也就是由 Kernel 直接支援 a.out 檔案格式,或者 CONFIG_BINFMT_AOUT 為 M,也就是不把 a.out 的檔案格式支援編入 Kernel 中,改以 Module 的形式存在,一旦 Kernel 需要執行 a.out 格式的程序時,在動態的載入該 Module,來啟動具備執行 a.out 執行檔的能力。不過 a.out 執行檔的格式,是 Unix 上使用了相當久的的檔案格式,ELF 是目前較新的的檔案格式。a.out 檔案格式共有三個 Section,分別為.text, .data, 及 .bss,並還包括了一個文字表(String Table)與符號表(Symbol Table)。與ELF 檔案格式比較起來,a.out 相形之下顯得較為缺乏彈性,ELF檔案格式允許多個節區的存在,執行檔可以根據需求提供應用程序執行環境的節區,並且 ELF 檔支援了 32-bit 與 64-bit 的執行環境。其實,兩者之間還有其它規格上的不同,有興趣的讀者也可以自行找一些相關的資料來比較即可瞭解。

再來呢,我們就來討論動態函式庫的檔案格式。我們都知道在 Linux中有 a.out 與 ELF 兩種檔案的格式,其中目前我們最常見的便是 ELF 檔案格式。在 Linux 的函式庫目錄中,我們常常可以見到 「*.so」 的檔案,例如:「/lib/libc.so.6」 或是 「/lib/ld-linux.so.2」。這些便是在 Linux中所常見到的動態函式庫檔案。由下圖我們可以看到動態函式庫 libc.so.6 的 ELF Header:


libc.so.6 的 ELF Header

e_ident ->EI_MAG0:7fh
->EI_MAG1:E
->EI_MAG2:L
->EI_MAG3:F
->EI_CLASS:32-bit objects
->EI_DATA:ELFDATA2LSB
->EI_VERSION:1h
->EI_PAD:0h
->EI_NIDENT:3h

e_type: ET_DYN (Shared Obj File)

e_machine:Intel 80386
e_version:Current version
e_entry:182a8h
e_phoff:34h
e_shoff:3bbf8ch
e_flags:0h
e_ehsize:34h
e_phentsize:20h
e_phnum:5h
e_shentsize:28h
e_shnum:40h
e_shstrndx:3dh



由圖中,我們可以注意到 e_type: ET_DYN,e_type 是在ELF 檔案的格式中,用來描述目前該檔的檔案型態,我們所舉的例子為 libc.so.6 這個動態函式庫的檔案,所以 e_type 的屬性為 Shared Obj File。

當然棉,我們若再拿一個ELF執行檔來比較也是不錯的,所以如下圖


ls 的 ELF Header

e_ident ->EI_MAG0:7fh
->EI_MAG1:E
->EI_MAG2:L
->EI_MAG3:F
->EI_CLASS:32-bit objects
->EI_DATA:ELFDATA2LSB
->EI_VERSION:1h
->EI_PAD:0h
->EI_NIDENT:2h

e_type: ET_EXEC (Executable file)

e_machine:Intel 80386
e_version:Current version
e_entry:8049130h
e_phoff:34h
e_shoff:bea4h
e_flags:0h
e_ehsize:34h
e_phentsize:20h
e_phnum:6h
e_shentsize:28h
e_shnum:1ah
e_shstrndx:19h



我們可以注意到 e_type: ET_EXEC,這就是 ELF 檔中對於執行檔所定義的檔案屬性。


動態連結 VS 靜態聯結
在 Linux 中,執行檔我們可以編程成靜態聯結以及動態連結,以下我們舉一個簡短的程序作為例子:


#include
int main()
{
printf("ntest");
}



若我們執行 :


[root@hlchou /root]# gcc test.c -o test



所產生出來的執行檔 test,預設為使用動態函式庫,所以我們可以用以下的指令 :


[root@hlchou /root]# ldd test
libc.so.6 => /lib/libc.so.6 (0x40016000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)



來得知目前該執行檔共用了哪些動態函式庫,以我們所舉的 test 執行檔來說,共用了兩個動態函式庫,分別為 libc.so.6 與 ld-linux.so.2。我們還可以透過下面的 file 指令,來得知該執行檔的相關屬性,如下


[root@hlchou /root]# file test
test: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (use
s shared libs), not stripped



not stripped 表示這個執行檔還沒有透過 strip 指令來把執行時用不到的符號、以及相關除錯的資訊刪除,舉個例子來說,目前這個test 執行檔大小約為 11694 bytes


[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 11694 Oct 24 02:31 test



經過strip後,則變為 3004 bytes


[root@hlchou /root]# strip test
[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 3004 Oct 24 02:48 test



不過讀者必須注意到一點,經過 strip 過的執行檔,就無法透過其它的除錯軟件從裡面取得函式在編程時所附的相關資訊,這些資訊對我們在除錯軟件時,可以提供不少的幫助,各位在應用上請自行注意。

相對於編程出來使用動態函式庫的執行檔 test,我們也可以做出靜態聯結的執行檔 test


[root@hlchou /root]# gcc -static test.c -o test



透過指令 ldd,我們可以確定執行檔 test 並沒有使用到動態函式庫


[root@hlchou /root]# ldd test
not a dynamic executable



再透過指令 file,可以注意到 test 目前為 statically linked,且亦尚未經過 strip


[root@hlchou /root]# file test
test: ELF 32-bit LSB executable, Intel 80386, version 1, statically linked, not stripped



相信大夥都會好奇,使用靜態聯結,且又沒有經過 strip 刪去不必要的符號的執行檔的大小會是多少,透過 ls -l來看,我們發現大小變成 932358 bytes 比起靜態聯結的執行檔大了相當多


[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 932258 Oct 24 02:51 test



若再經過 strip,則檔案大小變為 215364 bytes


[root@hlchou /root]# strip test
[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 215364 Oct 24 02:55 test



與使用動態函式庫的執行檔 test 比較起來,大了約 70倍 (215364/3004)。因此,整體來說,在使用的環境中使用動態函式庫並且經過 strip 處理的話,可以讓整體的空間較為精簡。許多執行檔都會用到同一組的函式庫,像 libc 中的函式是每個執行檔都會使用到的,若是使用動態函式庫,則可以儘量減少同樣的函式庫內容重複存在系統中,進而達到節省空間的目的。

筆者一年前曾寫過一個可以用來刪去動態函式庫中不必要函式的工具,針對這個只用到了 printf 的程序來產生新的 libc.so 的話,我們可以得到一個精簡過的 libc.so 大小約為 219068 bytes


[root@hlchoua lib]# ls -l libc.so*
-rwxr-xr-x 1 root root 219068 Nov 2 04:47 libc.so
lrwxrwxrwx 1 root root 7 Nov 1 03:40 libc.so.6 -> libc.so



與靜態聯結的執行檔大小