2008/05/27

[Programming] 我的 if else 跟別人不一樣...

因為我認為

if (condition)
{
}

如果隔很遠才看到 else
會發生意外
所以我的 else 一定跟 "}" 要接在一起
沒有人可以把他們分開

說的是,我的 code style :

if (condition)
{
# do sth
} else
{
# do sth
}


不過同事說, else 接在 "}" 後面,會讓他忽視掉 else 的存在。
靠,正好跟我相反....

[軟體] Firefox 3.0 很糟

不只是這邊有很糟的使用經驗回報,我也在體驗過 Firefox 3.0 b5 之後,放棄了 b5 (因為不明原因的常常 crash , 不管是在 Linux 還是在 Windows XP 上面都一樣)

然而最近的 3.0 rc1 釋出之後,我又跑去試了 rc1 ,結果比之前更加嚴重,令人沮喪。 crash 發生的頻率讓人不禁懷疑這個版本的釋出,是否有經過了足夠的 debug 測試。

[Linux][軟體] Git-svn 使用簡單介紹

這個 git 版本控管軟體出來一段時間了,不過因為作者是 Linus Torvalds,所以一來說,他寫 code 的功力很好,所以軟體品質不錯,二來也是因為他的名氣的關係,所以這個軟體在 Linux 上面的支援很多(??) (Win32 的 git support 很少,不過可以參考一下)

這邊要來介紹的是 git 在 svn 上面的一個過渡應用(git-svn),以及在 git 和 svn 之間的比較:
首先說明,這個應用方式的好處在於:
1. 保留 svn 的優點, svn 有一堆 properties 給我用的很高興,像 keywords 、很簡單就可以設定好的 ignore list 、 executable 、 permission、 ownership -> 所以 repo 用的是 svn 。
2. 比 svk 快。 (svk transaction 式的通訊方式,做到一半掛點會從頭再來過,如果這個 commit 一次是上 Giga 的量,掛點時,我想你會很想哭,因為記憶體也吃很多, performance 還是一樣的爛。 Git 就好多了。)
3. 分散式的 repo ,所以你可以在 local commit 了,測試完成,才 "merge" 到 server 上面。(merge 是用 svk/svn 的用詞)

用法介紹:

在開始動作之前,我們先來搞個小動作,寫一些東西到 $HOME/.gitconfig
[user]
name = Anton Yu
email = xxxx@gmail.com
[color]
diff = auto
status = auto
branch = auto
[alias]
st = status
rb = svn rebase
ci = commit -a
co = checkout

這些東西包括了 alias, 個人的 email 還有 git 的 colordiff 等等設定。

$ mkdir gtalkbot 先找個地方來放 code
再找出 svn url 來,像是
https://gtalkbot.googlecode.com/svn/trunk/
執行:
$ git-svn init https://gtalkbot.googlecode.com/svn/trunk/ gtalkbot/
$ git-svn fetch


做完你就會發現你已經有一個 .git 的目錄在這裡了,不過跟 svn 不一樣的是,它並沒有每個子目錄都放 .git ,只有這個 root dir 放了一個 .git 而已,所以你可以很輕鬆的做到 (export) 的動作,而不需要特別的指令。

更新時,請下 git rb (就會自動執行 git svn rebase)
刪除檔案,請下 git-rm $file
新增檔案,請下 git-add $file
commit ,請下 git-svn ci
commit 到 svn 底下,請下 git-svn dcommit

不過 props 在 git 底下連 "svn:executable" 都失效。 所以不建議 svn 的使用者在沒有考慮周祥之前就轉移過來這個 SCM 管理平台。畢竟它的軟體生命才剛開始而已。
--
參考指令列表:
* 指令列表
* SVN 與 git 對照表

2008/05/26

[新聞] Skype 撤回了 GPL 在德國高等法院的上訴

Skype 違反 GPL 許可證的官司 在德國法庭判決 Skype 公司敗訴之後, Skype 繼續上訴到德國高等法院去。然而,因為 skype 無法提供足夠的證據證明自已沒有違反 GPL 之後,終於在 5/12 日,Skype 宣布撤回這次的上訴,並且願意與 FSF(自由軟體基金會) 達成和解。 (消息來源)

在這場官司裡面,值得注意的是 SMC 是台灣廠商。

順便一提: Harald Welte (Linux 核心開發人員, 德國工程師) 五月剛從台灣回來,對台灣民眾的印象也是很好。不過對台灣這邊對 GPL 的不了解,應該是感覺很~ 累,要多花力氣來教。 (? 這是還會再來台灣玩的意思嘛? 歡迎啊~)

--
參考連結:
German courts convicts skype for breaching GPL
Skype respongs o Euro GPL rebuke
与Skype的违约诉讼大战 GPL再次取得胜利

2008/05/20

[Linux] Linux 上面聽 Hinet 廣播

嗯,還是習慣在 Linux 上面工作。不過聽廣播的習慣不隨著 Hinet 改版而不能收聽的最好方式:
還是回歸到看網頁上的 Hinet Radio 選單。

Linux 使用者可能會抱怨 Firefox 不能聽之類的,不過晚上在使用 opera 9.5b2 做~ 某些事情的時候,發現它解析 hinet 的 swfobject 其實是 okay 的,所以可以直接下載 opera 9.5b2 就可以順利收聽 Hinet Radio 了。

當然,這不會是我心中的最佳方案。不過,總還是一個解決方案就是。

--
更新:
PCMan 的 Hinedo看起來是不錯的解決方案。

2008/05/18

[Linux] Ubuntu LCD 亮度問題

唔,這個問題在我在新的 Asus X80L 筆電灌 Ubuntu 時發生了,情況是,每次開機 LCD 的亮度都會變得很暗,都還要另外按 FN + F6 來調整 LCD 亮度。

Ubuntu 中文論壇 上面有看到類似的問題。但很可惜,沒有答案。

所以再用英文去尋找,果然給我找到了一些線索:
1. 可能是 hal 的問題
2. 也有可能跟 kernel 有關?

不管怎樣,這不是我想花時間的地方。
所以我用 2 的方法,在 /etc/rc.local 加上一行
echo -n 8 > /proc/acpi/video/VGA/LCDD/brightness

應該這樣重開機就好了。

[Linux] SSH Key 更換作業...

Rex的 blog 這邊有寫到 "該換 ssh keys 了" 。

Debian 的通報在這邊
簡單的說就是:

SSH Key 出了很嚴重的安全問題。這個安全問題會讓 ssh 的 key 可以猜測得到。為此,我們必須更換 ssh host key 跟 private key 的部份。

host key 的部份是
rm /etc/ssh/ssh_host*
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""


private key 的部份更換跟一開始製作 private key 是一樣的。
Tsung 的部落格上還有記錄。
為了使用SSH加密傳輸且不需要輸入密碼

1.#cd /root/.ssh (進入到/root/.ssh/ 目錄下)
2.#ssh-keygen -d (產生ssh的公鑰和私鑰)
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): (產生到何處.按Enter 就可以了)
Enter passphrase (empty for no passphrase): (要不要設定passwd.避免問我們按Enter 就可以了)
Enter same passphrase again: (再按一次Enter)
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.

此時目錄下會產生公鑰id_dsa.pub和私鑰id_dsa
現在要把id_dsa.pub丟到192.168.0.2 並且更名為 authorized_keys

3.#scp id_dsa.pub 192.168.0.2:/root/.ssh/authorized_keys
root@192.168.0.2's password:
id_dsa.pub 100% |*****************************| 613 00:00

試試看 ssh 到server 應該就不用輸入密碼了
4.#ssh 192.168.0.2
#exit (記得離開)

--
參考連結:
Manually unpacking a tar ball of Debian on NSLU2
該換 ssh keys 了
Debian.org 的安全通報

2008/05/15

[Programming] True or False ??

因為觀念不好,所以在實作的時候常常會有很迷惑的時候。
譬如說,像 TRUE 跟 FALSE 是什麼情況,這應該是很簡單的常識。
但是,我卻常常搞錯。

在我的認知裡頭, 0 is false.
1 is true.
或著說 above 1 的都是 true;
不知道是哪個地方來的,所以這篇要厘清一下,不然以後會再發生。
很簡單的實作:
test = 1;
if (!test)
{
printf("1 is false\n");
} else
{
printf("1 is true\n");
}


./test
NULL is false
-1 is true
0 is false
1 is true


--
我想起來了...
// SHELL 裡面常用 0 代表 SUCCESS, 1 以上都是 ERROR_CODE 。

2008/05/12

[Linux] VMWare Server 在 Ubuntu 8.04 上面跑不起來

/tmp/vmware-config0/vmmon-only/linux/driver.c:1659: error: ‘struct mm_struct’ has no member named ‘dumpable’
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] Error 1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-16-generic'
make: *** [vmmon.ko] Error 2
make: Leaving directory `/tmp/vmware-config0/vmmon-only'
Unable to build the vmmon module.

看起來像是 VMWare 2.6.24 還沒支援到的關係。
去 google 底下找 vmware server ubuntu 8.04 就找到了答案
感謝前人種樹,讓我這個後人可以乘涼。
先做wget http://vmkernelnewbies.googlegroups.com/web/vmware-any-any-update-116.tgz
tar -zxf vmware-any-any-update-116.tgz
cd vmware-any-any-update-116

sudo ./runme.pl
sudo vmware-config.pl

最後是:
cp /lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1
這樣應該就可以了。

不過 http://vmkernelnewbies.googlegroups.com/web/vmware-any-any-update-116.tgz這個網址並不是一直都可以抓得到的,不確定問題點。所以怕以後抓不到,先做一個備份點

2008/05/02

[Linux] Bash 的回傳值好奇怪喔...

這邊,好像很多標準嗎?
在寫 script 的時候參考 xinted 的 script 看到了:
test -x "$DAEMON" || exit 0
*)
echo "Usage: /etc/init.d/xinetd {start|stop|reload|force-reload|restart}"
exit 1
;;

# [略]
esac

exit 0

真奇怪,如果沒有 daemon binary 存在時, return 0
如果執行參數不符合預期 return 1
如果都做完了 return 0

第一個,沒有 daemon 在的時候還有這個 script 應該是有問題才對啊.. 怎麼會 return 0 呢?我的習慣在 bash 底下是有錯誤就 return 1 以上的值,沒有錯誤才 return 0。

嘖... 反而是這種很簡單的事情在思考...

[Windows] 好用的小工具: AutoHotKey

做為一個 Linux 的愛好者,轉移到 Windows 上面的時候,往往難以適應 Windows 調整快捷鍵的方式,所以 google 了一下,結果發現很多人愛用的 "Auto Hot key"。不多說,就來給一個範例說明如何使用 Auto Hot key 來...