星期四, 12月 30, 2010

只有sata光碟機也可以用舊的autoxp執行ghost

比較早期的autoxp光碟片不支援sata光碟機開機, 但是現在新的電腦都漸漸改成用sata光碟機了, 那autoxp光碟片開機後便無法讀取到光碟片的ghost了, 也就只能當飛盤了.
要解決這個問題, 當然最根本的就是換比較新的autoxp光碟片, 但是這要有source阿, 不是每個人都有這種管道的. 在網路上找了一些方法, 覺得方法都很麻煩, 沒有一個連電腦白痴都會用的方法, 最後我想出了一個非常簡單的方法, 就是

拿一個usb disk把ghost copy到那上面去, 然後用autoxp光碟片重新開機, 這時候就可以輕鬆地切換到usb disk中去執行ghost了, 哈哈.

奇怪的skype IE plugin竟然與windows update功能相衝

拿到公司的新電腦後, 想說來執行一下windows update安裝一些patch, 結果竟然究一直卡在windows update首頁畫面不會動. 重開電腦再執行也是一樣, 在網路上找了半天也沒找到答案. 結果問題竟然是出在skype的IE plugin, 只要把它disable就好了. 真是奇怪.

星期五, 12月 24, 2010

在colinux使用pcap-bridge網路模式

如果在coLinux中要使用pcap-bridge網路模式, 最簡單的最法就是在colinux.conf檔中加入
eth0=pcap-bride

但是, 如果需要設定網路卡的mac address, 則記得要把實體對應的網路卡名稱也加入, 否則網路不會通, 例如:
eth0=pcap-bridge,"區域連線",00:FF:67:4F:30:00

不過, colinux.conf似乎對中文的支援不是很好, 有時候會抓不到區域連線.
所以如果可以的話, 還是把區域連線改成英文, 例如: LAN
所以colinux.conf的設定就要改成
eth0=pcap-bridge,"LAN",00:FF:67:4F:30:00

星期二, 12月 14, 2010

常用Linux開發環境設定

在~/.bash_profile中加入下列設定:

alias grep='/bin/grep -n --color --exclude="*\.svn*" --exclude=tags --exclude="*\.ccache*"'
alias screen='/usr/bin/screen -e^Pp -h 10000'
#export LANG=C

在~/.screenrc中加入下列設定:
shell -$SHELL  # run the login shell

設定git環境
git config --global user.name 使用者名稱
git config --global user.email 電子郵件
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.ui auto

在Linux建立vim程式開發環境

cscope 熱鍵
curl http://cscope.sourceforge.net/cscope_maps.vim > ~/.vim/plugin/cscope_maps.vim

啟動vim的 :Tlist功能
下載taglist_45.zip
cd ~/.vim
unzip taglist_45.zip

其他設定
將下列設定加到~/.vimrc檔案中

if has("autocmd")
  filetype plugin indent on
endif

if has("syntax")
  syntax on
endif

set viminfo='10,\"100,:20,%,n~/.viminfo

autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

set cursorline
set showmatch
set incsearch
set hlsearch
set number
set tabstop=4
set shiftwidth=4

另外,有關vim的熱鍵可以參考下列網址,還蠻詳細的喔!
http://www.lslnet.com/linux/f/docs1/i43/big5303074.htm

自己用doxygen產生API document

例如在samba source tree中, 執行下列命令

doxygen source/Doxygen

就可以看到dox/ 產生出API document

星期一, 1月 04, 2010

Keystoke causes android.process.acore to crash

After replacing the touchscreen device with a LCD and keyboard, I find android.process.acore will crash while trying to type with the keyboard. This bug also occurs when executing Contacts and dialer applications. According to the messages shown by logcat, this bug is resulted from failing to load resource required by Android.

android.process.acore_crash

According to this description, Android system cannot find the required resources for notouch device. So, we can fix this bug by copying each folder ending with -finger to the one ending with -notouch.

D/AndroidRuntime(  760): Shutting down VM
W/dalvikvm(  760): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
E/AndroidRuntime(  760): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  760): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.contacts/com.android.contacts.DialtactsActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f030005
E/AndroidRuntime(  760):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
E/AndroidRuntime(  760):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
E/AndroidRuntime(  760):        at android.app.ActivityThread.access$1800(ActivityThread.java:112)
E/AndroidRuntime(  760):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
E/AndroidRuntime(  760):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  760):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  760):        at android.app.ActivityThread.main(ActivityThread.java:3948)
E/AndroidRuntime(  760):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  760):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  760):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
E/AndroidRuntime(  760):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
E/AndroidRuntime(  760):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  760): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f030005
E/AndroidRuntime(  760):        at android.content.res.Resources.getValue(Resources.java:846)
E/AndroidRuntime(  760):        at android.content.res.Resources.loadXmlResourceParser(Resources.java:1796)
E/AndroidRuntime(  760):        at android.content.res.Resources.getLayout(Resources.java:685)
E/AndroidRuntime(  760):        at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
E/AndroidRuntime(  760):        at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime(  760):        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:309)
E/AndroidRuntime(  760):        at android.app.Activity.setContentView(Activity.java:1626)
E/AndroidRuntime(  760):        at com.android.contacts.DialtactsActivity.onCreate(DialtactsActivity.java:73)
E/AndroidRuntime(  760):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime(  760):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
E/AndroidRuntime(  760):        ... 11 more
I/Process (  556): Sending signal. PID: 760 SIG: 3
I/dalvikvm(  760): threadid=7: reacting to signal 3

References:
http://d.android.com/guide/topics/resources/index.html

Error in loading /system/usr/keychars/qwerty.kcm.bin

While typing on the keyboard, the home screen disappears shortly and logcat shows the following error messages:

This bug is resulted from failing to read /system/usr/keychars/qwerty.kcm.bin for wrong access permission. It can be fixed by adding the read access permission to this file by

chmod 644 /system/usr/keychars/qwerty.kcm.bin

E/KeyCharacterMap( 633): Can't find any keycharmaps (also tried /system/usr/keychars/qwerty.kcm.bin)
I/DEBUG ( 510): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 510): Build fingerprint: 'generic/generic/generic/:1.5/CUPCAKE/eng.jack_zhuang.20091119.140022:eng/test-keys'
I/DEBUG ( 510): pid: 633, tid: 633 >>> android.process.acore <<<
I/DEBUG ( 510): signal 11 (SIGSEGV), fault addr 00000000
I/DEBUG ( 510): r0 0000a9d0 r1 4001b588 r2 00000000 r3 41049c54
I/DEBUG ( 510): r4 be812550 r5 00000004 r6 ad32ea71 r7 41049c30
I/DEBUG ( 510): r8 be812530 r9 41049c28 10 41049c18 fp 00000000
I/DEBUG ( 510): ip ad32ea71 sp be812530 lr ad00e3b8 pc ad32ea70 cpsr a0000030
I/DEBUG ( 510): #00 pc 0002ea70 /system/lib/libandroid_runtime.so
I/DEBUG ( 510): #01 lr ad00e3b8 /system/lib/libdvm.so
I/DEBUG ( 510): stack:
I/DEBUG ( 510): be8124f0 00000001
I/DEBUG ( 510): be8124f4 41f84710 /data/dalvik-cache/system@framework@framework.jar@classes.dex
I/DEBUG ( 510): be8124f8 00000001
I/DEBUG ( 510): be8124fc ad048977 /system/lib/libdvm.so
I/DEBUG ( 510): be812500 00000328
I/DEBUG ( 510): be812504 4108a368 /dev/ashmem/dalvik-LinearAlloc (deleted)
I/DEBUG ( 510): be812508 be812560 [stack]
I/DEBUG ( 510): be81250c 0000000a
I/DEBUG ( 510): be812510 0000000f
I/DEBUG ( 510): be812514 ad063ba3 /system/lib/libdvm.so
I/DEBUG ( 510): be812518 00000004
I/DEBUG ( 510): be81251c ad05a705 /system/lib/libdvm.so
I/DEBUG ( 510): be812520 00000018
I/DEBUG ( 510): be812524 4108a368 /dev/ashmem/dalvik-LinearAlloc (deleted)
I/DEBUG ( 510): be812528 df002777
I/DEBUG ( 510): be81252c e3a070ad
I/DEBUG ( 510): #00 be812530 4108a368 /dev/ashmem/dalvik-LinearAlloc (deleted)
I/DEBUG ( 510): be812534 0000bc60 [heap]
I/DEBUG ( 510): be812538 ad32ea71 /system/lib/libandroid_runtime.so
I/DEBUG ( 510): be81253c 4001b588 /dev/ashmem/mspace/dalvik-heap/zygote/0 (deleted)
I/DEBUG ( 510): be812540 00001071
I/DEBUG ( 510): be812544 0000bc60 [heap]
I/DEBUG ( 510): be812548 be812550 [stack]
I/DEBUG ( 510): be81254c ad040a8d /system/lib/libdvm.so
I/DEBUG ( 510): be812550 41049c28
I/DEBUG ( 510): be812554 41fb2789 /data/dalvik-cache/system@framework@framework.jar@classes.dex
I/DEBUG ( 510): be812558 ad32ea71 /system/lib/libandroid_runtime.so
I/DEBUG ( 510): be81255c be8125c8 [stack]
I/DEBUG ( 510): be812560 be8125c8 [stack]
I/DEBUG ( 510): be812564 00000001
I/DEBUG ( 510): be812568 ad00e540 /system/lib/libdvm.so
I/DEBUG ( 510): be81256c 41ea7bdc /data/dalvik-cache/system@framework@framework.jar@classes.dex
I/DEBUG ( 510): be812570 41049c3c
I/DEBUG ( 510): be812574 be8125c0 [stack]
D/Zygote ( 512): Process 633 terminated by signal (11)

星期二, 9月 01, 2009

指定Java Application使用的語言

開發Java程式時, 可以利用resource的方式, 將程式的訊息以及ui等設計成支援多國語言, 然後執行時加上-Duser.language=locale_name或-Duser.country=country_name就可以切換不同的語言介面.

完整的指令為

顯示英文介面:
java -Duser.language=en -jar test.jar或
java -Duser.country=us -jar test.jar

顯示中文介面:
java -Duser.language=zh -jar test.jar或
java -Duser.country=TW -jar test.jar

星期日, 8月 23, 2009

在Linux中檢視目前cpu的運作頻率

在Windows系統中我們可以很輕易地檢視目前cpu的運作頻率, 在Linux上也是可以輕易做到的. 只要執行下面的指令:

$ cat /proc/cpuinfo

不僅可以在cpu MHz看到目前的運作頻率, 還可以看到許多其他cpu的資訊.
如果不想看到那麼多雜七雜八的資訊, 可以搭配grep將所要檢查的資訊過慮出來, 例如:

$ grep -E 'GHz|MHz' /proc/cpuinfo

這樣就只會顯示cpu的最高工作頻率以及目前的工作頻率而已.

星期四, 8月 20, 2009

解決Tab mix plus與google toolbar最常造訪的網站功能相衝

Google toolbar有一個功能, 就是在開啟新分頁時會顯示最常造訪的網站清單. 可是這個功能在安裝了Tab mix plus附加元件之後, 就會被廢了武功, 完全跑不出來. 後來在網路上找到了解決辦法, 方法很簡單, 只要將chrome://google-toolbar/content/new-tab.html如下圖所示, 加到Tab mix plus選項->分頁->開啟分頁->新增分頁時自動載入設定中即可.


星期三, 8月 19, 2009

系統自動掛載ntfs partition

ntfs-3g所賜, 我們已經可以在Linux上掛載ntfs的檔案系統, 進行資料的讀寫動作. 雖然Linux系統UI已經做得很好, 只要用滑鼠點一下ntfs partition就會自動幫我們掛載到系統上, 可是總覺得如果可以如其他的ext3 partition一樣, 在開機後就自動掛載那不是更完美嗎? 既然有這個想法, 就要想辦法解決一下. 其實很簡單, 還是一樣利用/etc/fstab就可以輕鬆達到.

首先, 找出ntfs partition的UUID, 方法可以參考取得partition的UUID
再來就是編輯/etc/fstab這個檔案, 在檔案中加上
UUID=ntfs_partition_uuid mount_point ntfs-3g defaults 0 2
這樣就可以了.

例如: 我們的ntfs partition的uuid如果是4C54A5A254A58EF0, 並且要將該partition掛載到/media/VAIO目錄中
$ sudo mkdir /media/VAIO
$ sudo echo "UUID=4C54A5A254A58EF0 /media/VAIO ntfs-3g defaults 0 2" >> /etc/fstab
$ sudo mount -a

取得partition的uuid

現在Linux掛載partition常常使用UUID的方式來指定所要掛載的partition, 要取得partition的UUID有以下幾個方法:

1. 最簡單的方式是直接執行blkid, 會列出目前連接到系統上所有磁碟的partition UUID, 檔案系統以及label, 例如:
$ blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: UUID="4C54A5A254A58EF0" LABEL="VAIO" TYPE="ntfs"
/dev/sda5: UUID="4CFCC181FCC165B4" TYPE="ntfs"
/dev/sda6: UUID="a5050769-1c80-4e7c-8b7c-da810624d910" TYPE="ext3"
/dev/sda7: UUID="8c28803c-3390-46d7-bb90-fd9a83c0bff3" TYPE="swap"
/dev/sda8: UUID="95206ddf-7ffd-4ddb-8ced-631b5df70b26" TYPE="ext3"

2. 另外也可以執行sudo vol_id 也可以得到指定partition的相關資訊, 例如:
$ sudo vol_id /dev/sda1
ID_FS_USAGE=filesystem
ID_FS_TYPE=ntfs
ID_FS_VERSION=3.1
ID_FS_UUID=4CFCC181FCC165B4
ID_FS_UUID_ENC=4CFCC181FCC165B4
ID_FS_LABEL=
ID_FS_LABEL_ENC=

星期日, 8月 09, 2009

struct成員的記憶體位址alignmentt

一般來說, compiler編譯c程式時, 遇到struct時會對成員資料的位址進行alignment的動作, 以增加記憶體讀取的效率. 所以struct往往會佔有比所有資料成員大小和還要多的記憶體空間. 例如下列的struct data的記憶體大小為12.
struct data {
char num;
int size;
void *ptr;
};

如果因為特殊需要, 需要節省記憶體, 則可以在程式碼中需要進行pack memory的struct前後, 採用#pragma pack來告訴compiler是否要進行pack memory的動作, 例如下列的struct packed_data的記憶體大小則為9, 不是12.
#pragma pack(1)
struct packed_data {
char num;
int size;
void *ptr;
};
#pragma pack()

讓evince顯示中文

Ubuntu預設安裝的evince雖然可以讀取pdf檔案, 可是如果檔案內容包含中文的話, 中文字就會無法正常地顯示出來. 雖然Adobe PDF reader也很好用, 而且又是免費軟體, 但是總是有些缺點, 例如: 開啟速度較慢, 不是open source...

要解決evince無法顯示中文的問題, 只要安裝poppler-data套件後就解決囉.

星期六, 8月 08, 2009

修正VMware on Ubuntu 9.04無法使用方向鍵的問題


如果在Ubuntu 9.04中安裝VMware, 並且在VMWare發生方向鍵無法使用的情形, 只要在/etc/vmware/config檔案中加入
xkeymap.nokeycodeMap = true

VMware的虛擬機器啟動時會出現如下圖所示的提示訊息, 不用理會沒關係.



資料來源:
  • http://communities.vmware.com/message/1087494#1087494

星期六, 7月 25, 2009

切換ubuntu的預設輸入法

im-switch -s gin
用gcin當作預設輸入法

im-switch -s scim
用scim作為預設輸入法

星期三, 7月 22, 2009

用gstreamer下載mms檔案

gst-launch mmssrc location=mms://air.hihit.net/studio/090722baa.wma ! filesink location=test.wma

gstreamer真是個好東西阿

如果執行時出現ERROR: pipeline could not be constructed: no element "mmssrc", 那是因為預設mmssrc並沒有安裝mms相關的plugin, mmssrc在Gstreamer Bad Plugins中, 所以只要將它安裝起來就可以了. 安裝方式如下:

sudo apt-get install gstreamer0.10-plugins-bad

星期一, 5月 18, 2009

建立Android XML file

如果使用File->New->Android XML File會出現下列錯誤的話,

則可以改按工具列上的按鈕來建立,如下圖滑鼠指標停放處所示。