2007/12/31

[Linux][軟體] 在 Linux 燒光碟

在 Linux 上面燒光碟真的蠻... OX 的。我不由得先下了這樣的一個結論;為什麼呢?因為以下的理由:
1. 對燒錄軟體的不熟悉。
2. 對硬體支援的不熟悉。
3. 對工具程式的不熟悉。

蛤? 不熟啊?煮久就好了唄? (對不起... 冷掉了)
那我先來介紹一下,我常用的 Linux 燒錄軟體:
首先是:
NeroLinux 3
這個東西不錯用,在 Windows 上面就常用 Nero 了,在 Linux 上面使用的時候也沒有需要教學的問題。下面是我的 NeroLinux2 的截圖。 (聽說 NeroLinux3 出來了,不過我還沒有 download 也沒有 license ,所以就沒放上來了。)
不過我的 NeroLinux2 有硬體支援上的問題,常常燒出飛盤給我看~ 所以希望 NeroLinux3 沒有這個問題。


接著是 GnomeBaker
這個東西給我的第一印象就是好陽春的樣子。不過仔細看下去:資料光碟﹑音樂光碟﹑ DVD 跟 Burn Image 都可以支援,好像也沒有那麼差哦?拿來試燒我的 Ubuntu ISO ,果然一試就過關。陽春歸陽春,人家又沒有搞什麼有的沒有的大事業,可以燒資料備份就好了~



所以最後,我改用 GnomeBaker 來燒我的光碟了~
--
* 這篇文章其實是看了這篇文章之後想做個整理,後來發現沒時間寫了,所以就隨便寫寫,反正我推薦 gnomebaker 啦... (也沒耐心想解釋了...)
* Ubuntu 上的安裝方式很簡單,就是apt-get install gnomebaker 就結束了。

[軟體] 安息吧, Netscape

這邊來的消息,netscape 從 2008 Feb 1 之後就不再有更新及版本的支援了。

有空來,回顧一下維基上面的條目:
mosaic (最早的 netscape)
netscape

它也是我最早使用的瀏覽器。

2007/12/27

[軟體] opera 9.50 beta1 的列印問題

記錄一下, opera 9.50 beta1 的列印功能有問題,在 PrinterCustomName 沒填的時候 Left/Right Margin 都會跑到 500 去,結果就是印出來又浪費紙張又不能用。
按下面這樣改一下就好了:
[Printer]
UseCustomName=0
PrinterName=HP2200
PageOrder=0
NumCopies=1
Orientation=0
Scale=100
ColorMode=0
PageSize=A4
Top Margin=5
Bottom Margin=5
Left Margin=10
Right Margin=10
PrinterCustomName=/usr/bin/lpr

2007/12/21

[軟體] Subversion Keyword

嗯,實話是 svn 我一直沒有用到很完整的功能,在某些地方還是一直處於一知半解的情況。
像這個 svn:keywords 的屬性,我就沒有看懂英文版的手冊,所以之前試了幾次都不行,就沒有用上。
現在找到(簡)中文的手冊,按說明一下就 okay 了:


sample:
Here is the latest report from the front lines.
$LastChangedDate$
$Rev$
Cumulus clouds are appearing more frequently as summer approaches.

$ svn propset svn:keywords "Date Author" weather.txt
property 'svn:keywords' set on 'weather.txt'

2007/12/15

[軟體] Bug Tracking System

本來要用 bugzilla 來做 Bug Tracking System ,後來發現 bugzilla 用 perl 不好 maintain,這個也就算了,CPAN 相依有夠麻煩的,CPAN Email module 在多國語文處理上面在竟然沒辦法,這點就成了讓我放棄 bugzilla 的致命關鍵。

後來去找了 "Bug Tracker" 這個台灣人做的 php 的系統軟體,結果「有些流程」老闆在嫌,就是 report 的部份很陽春,在授權上面也沒有做的很好。後來老闆就給我講要不要試用 mantis 看看。

(= =!) 最好是嫌我啦... 都忙了好幾天 CPAN 的問題了,還做了 lang pack 出來說,哼哼。 滿懷不爽的當下,水瓶座的理智性格會跑出來說,要保持理智啊... 連試用都不想試就拒絕人家就不像你了咩...

這句 OS 把我完全堵死,所以又撐下去,跑去用 mantis ,「一試成主顧」。就是我這篇文章的主要用意。這個 mantis 好用啊~

該簡單的地方蠻簡單的,繁中的支援也很夠。 ♥推薦♥一下。
--
參考連結:
mantis 和 subversion 結合的作法

[軟體] Firefox 修改記錄

頭一個是 firefox 在 [F3] 找東西的時候會有很討厭的嗶嗶聲。

這邊 有找到解法。簡單的說,就是
pref("accessibility.typeaheadfind.enablesound",false); 就好了。

另外一個是 firefox 的 keyset 在 browser.xul 裡面 用 mainKeyset 處理時,有些 binding 是一定會有預設值的,與其 comment 起來,不如指定到一個 void 或無關的 command 去。

做個記錄,免得以後忘掉。

2007/12/11

[軟體] Bugzilla 中文化跟 utf8 的問題

1. 中文化(tw)的工作沒人要做。 3.1.2(+) 跟 3.1.2 不相容 (應該是 template 的問題)
bugzilla 的 template 沒弄好,連功能都不能用。真害。
2. utf8 的問題,目前只有 cvs 版本可以解決。

(所以我就先拿掉我那個爛到不行的語言包了)


--
update: 再度復活 XD

2007/12/10

[生活] 5000 公尺 24"31

晚上沒做什麼事情。好像就是一下子就過去了。
就是顧著打屁聊天,沒做什麼事,一下子就十點多了。
想起快半個月沒跑步,晚上又有點悶,就又去跑。
這次比上次狀況好,都沒有撞牆。

成績是 24"31 。
有進步,希望下次可以再快一點。

2007/12/05

[Programming] 快記 C 語言底下做 getopt

問題:
./command -x 1024 -y 768 -t 標題一 -m 訊息內容
像這樣的 command 執行,程式內部如何處理抓取值?

回答:
用 getopt 來做比較快。

最早以前自已都笨笨的還一個一個去比對,不知道有這個工具可以用。
後來才看到人家用這個來做,很方便。

今天想說做個筆記一下,免得下次要用又忘掉。
簡單的說
先 include header file
#include // getopt

定義 long_options
option long_options[] =
{
{"help", 0, 0, 0},
{"xoffset",1,0,0},
{"yoffset",1,0,0},
{"device",1,0,0},
{0, 0, 0, 0}
};


在 main function 裡頭再下:
while (1)
{
ch = getopt_long (argc, argv, "hx:y:d:",long_options, &option_index);
if (ch==-1)
break;
if (ch==0)
ch = option_index;

switch (ch) {
case 0:
case 'h':
default:
usage(progname);
exit(2);
break;

+---- 18 行: case 1:------------------------------------------------------------ }
} // end of while



值得注意的是 long_opions 裡頭是按陣列元素順序,所以 help 在 case 0 底下處理。
在 option_index 裡處理是就用 char 而已,所以留下 'h'。
ch = getopt_long (argc, argv, "hx:y:d:",long_options, &option_index);
這行說的是:
有hxyd四個 char 都可以使用,其中 xyd 後面都有接東西。

就是這麼簡單。

2007/11/27

[Linux][軟體] Grub

GRUB 2 (有空再回頭來翻譯)

GRUB 2 is derived from PUPA which was a research project to investigate the next generation of GRUB. GRUB 2 has been rewritten from scratch to clean up everything for modularity and portability. A mailing list and a wiki have been setup for discussing the development of GRUB 2.

GRUB 2 targets at the following goals:
* 支援 script 寫做,可以做到狀況處理,迴圈﹑變數﹑及函式等的功能。
* 圖型化模式
* 動態載入 module ,可以延伸 build 時所沒有的功能
* 支援更多不一樣的裝置(可攜性)
* 國際化 (支援非 ASCII 碼)
* Real memory management
* Modular, hierarchical, object-oriented framework for file systems, files, devices, drives, terminals, commands, partition tables and OS loaders.
* 跨平台安裝。
* 救援模式的支援。 (同時中止 Stage 1.5)
* Fix design mistakes in GRUB Legacy, which could not be solved for backward-compatibility, such as the way of numbering partitions.

Multiboot Specification

Multiboot Specification is a protocol between a boot loader and an OS kernel. Because this specification is generic, you can use the protocol in your own boot loader and/or in your own OS freely. Follow this link, for more details.

2007/11/23

[軟體] 重新介紹 Opera 瀏覽器

下載點: Opera 9.50beta 版。
(目前建議使用這個版本 9.50b ,因為 9.24 顯然不如 9.50b 的好用,雖然它是 stable ,不過 9.50b 安東在 Ubuntu Linux/Windows XP 底下都沒看到使用上的問題。)


筆者感受到的優點有:
1. 比較快!!! (Firefox 已經比 IE 快了, Opera 更快!!在 Linux Desktop 上面感受更棒!!)
2. 內建廣告阻擋 (Firefox 的 Adblock-plus 不錯用,不過內建的比較快! IE 就讓它隨歷史風乾吧...)
3. 顯示設定 (Firefox 做字型大小的設定時是做字體的變動而已,很容易造成排版上的問題,字體一變更大小, Firefox 就整個亂掉了,這樣還是很『難看』啊... Opera 就整個放大,雖然要動到水平捲動,不過至少版面沒問題,你還可以很快的找到你想要的東西。)
4. 同步內建 (Firefox 要安裝 foxmarks 這個套件, opera 9.50b 內建同步化功能(需和 opera 官網相連),這點讓 opera 動作的又快又好。 (foxmarks 會拖累 firefox)
5. 快捷鍵操作方便。 (在 rss reader 上面快捷鍵補足了一些缺點)
6. 快速撥號選單介面清楚。 (還有縮圖功能也讓網站選擇可以即看即知的情況。)
7. 支援 BitTorrent 下載。 (在文字編碼處理上面沒有問題耶~)
8. Widget 功能擴充 (氣象的功能不錯用,雖然是雞肋)
9. Java VM 跟 plugin 與 mozilla/firefox 相容。 (相容優點)
10. emome 認證可以用。 (這是中華電信讓人 Orz 到不行的『優點』)
11. 內建筆記功能 (可惜也沒有在同步選項)

缺點是:
1. Ajax/JS 版本和 Firefox/IE 不同,網站相容性很差。(不過 9.50b 有改善,至少 Gmail/ Google Docs 有相容到)
2. 沒有 Firefox 的 RSS/Atom 即時書籤(這個 firefox 的功能安小東超喜歡的...)
3. RSS 處理明顯不如 Firefox (不過新聞訂閱用郵件方式處理的功能,也不見得是『差』,應該說它有它的想法,安小東覺得不必言之過早。)
4. 同步沒有包括新聞訂閱﹑筆記的部份。 (foxamarks 只要是書籤都可以同步)
5. 『中文字型名稱』處理有問題。 (只在 Linux 上面)
6. 和 SCIM 衝突。 (建議 Ubuntu user 改用別的輸入法, ex: gcin/oxim。)
7. QT_IM_MODULE 無效。 (請用 XIM 方式以 daemon 運行輸入法,並加上 XIM 需要的 XMODIFIERS 變數)
8. Close software (這點讓我沒辦法拿它當 box 的玩具,只能再看看 api 怎麼玩...)

目前看起來還是優點多於缺點,安小東已經使用一個多禮拜了,應該沒有問題的話都會繼續用下去。
--
我的 .xinput.d/zh_TW 內容:
export XIM=oxim
export XIM_PROGRAM=/usr/bin/oxim
export XIM_ARGS=""
export GTK_IM_MODULE=oxim # GTK_IM_MODULE 不需要用 xim 會比較有效率。
export QT_IM_MODULE=xim


在 .bashrc 裡面就下:
source $HOME/.xinput.d/zh_TW
就好。

2007/11/21

[Linux][軟體] mplayer 的 cursor 不會自已消失

解法應該是在 xorg.conf 的 screen section 加上
Option "sw_cursor"

當然,另外一個 option 也是存在的
Option "hw_cursor"


不知道為什麼會有這種問題。
--
參考連結:
滑鼠靈敏度問題
滑鼠移動速度問題
Option "Resolution" "400"

xset m 35/5
xset m 25/5
xset m 15/5
xset m 10/5
xset m 5/5

2007/11/20

[Linux] Kernel 有問題耶....

測試版本: Ubuntu 2.6.22-14-generic #1 SMP
測試項目:
USB storage device 快速插拔其中一支,(永遠保持還有一支以上插著)
結果會是

/dev/sda /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
/dev/sda /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
/dev/sda /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
ls: /dev/sdc: 沒有此一檔案或目錄
/dev/sda /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh
/dev/sda /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh


就是其中有短暫的 device node 全部消失的情況。

好慘... 這個是 linux kernel 的問題?

[Linux][軟體] mplayer 播 flv 檔案(stream 方式)有問題

出自這裡

patch是:
Index: libmpdemux/demux_lavf.c
===================================================================
--- libmpdemux/demux_lavf.c (revision 23739)
+++ libmpdemux/demux_lavf.c (working copy)
@@ -142,6 +142,8 @@
pos += stream->end_pos;
else if(whence == SEEK_SET)
pos += stream->start_pos;
+ else if(whence == AVSEEK_SIZE)
+ return stream->end_pos;
else
return -1;

[Linux] bootmisc

以下是打混的記錄:

每次登入 ubuntu 都會跑:
Linux antontw 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686

這種 鳥東西出來,當然,可以修改 /var/run/motd -> /etc/motd 來達成這個需求,不過下次開機卻會跑回來。 (有時會,有時不會)

這是為什麼呢?

原因在 /etc/init.d/bootmisc.sh 這個 script 裡頭做的事情:
uname -snrvm > /var/run/motd
[ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd


這樣,就用 sysvconfig 把這個 script disable 掉或直接修改 /etc/init.d/bootmisc.sh 把這一行 comment 起來,就可以了。

2007/11/15

[Linux][軟體] Firefox/Opera UTF8 多國語文處理有問題

// 先自首:我的蝦米表格 (= =!) 還在準備,已經把我家裡那台 notebook 丟上線來處理了。

不過今天不是來談 UNLiu 的問題的。
今天來談的是 Linux 平台在 firefox / opera 上面看 utf8 的中文字裡頭,有些字集的處理有嚴重的問題。

firefox 上面打出 𤒍 (4 bytes)這個字時,如果按 backspace 刪除這個字,你的 textarea 會立刻變成一片空白。(就跟 textarea 全空的是一樣的外觀)然後接著打任何字都不會顯示出來,但是如果 ctrl + a 再 cut & paste 就又跑出來了。

如果是在 opera 上面,則會留下一個問號。 (如圖)


opera 上面比較好,除了問號以外,並不會有任何後遺症。

看起來應該是在處理 4 bytes 的 utf8 char 時有問題。

[Linux][軟體] opera 字型設定補充

上次批評過 opera 不好用嗎? 之後,因為 opera 的看圖(羞)效能遠比 firefox 好太多,所以又持續在 opera 這個瀏覽器上作了不少 survey 的工夫。

因為就算把 工具->功能設定->進階->字型 底下的字型全都設成標楷體


也還是會看到:

1. google 的相關網頁還是用 "宋體" 或 "細明體" 的外觀。如下:


不清楚那是什麼原因,
以下是調整過 "個人樣式表" 後 blogspot 的外觀:


以下是我的個人樣式表,簡單的說,就是不管什麼 tag ,都把字體設到 cwTeXYen (吳老師的顏楷)
這是為了跳過中文字型名稱無法使用的一個選擇。


a,body,table,tr,th,td,div,input,span,div,b {
font-family: "cwTeXYen" !important;
text-decoration: none;
}


所以現在我的 opera 是勉強可以接受的了。
(當然 rss/atom 訂閱我還是受不了,所以會用 google reader 來補強,但是這個字型外觀又設定不到...)
(果然有一好沒兩好。)

2007/11/12

[軟體][Linux] Opera 不好用嗎?

Opera 9.2 剛推出 Stable 不久就跑去下載了。當然,因為新出來的關係,所以有很多地方有問題, 像:

1. 輸入法不能用
2. 字型取代不好看
3. Gmail 不能用

前面的 1. 2. 我都已經解決了:

1. 把 scim-qt 或 QT_IM_MODULE 設好就可以了。

update:
呃... 這邊經我驗證,只要設好 QT_IM_MODULE 就可以。然而,跟 scim 或 qt_immodule 沒有關係的是, opera 還不吃 qt immodule 的樣子。所以,所有的 QT_IM_MODULE 請 export 成 xim。

意即:
1. 請 export QT_IM_MODULE="xim"
2. 請在 opera 運行前,執行 scim -d 或 oxim 或 gcin 等其它 ime 。

2. 下載 opera 的 language pack 之後再來調整會比較快。(不過中文字型名稱是亂碼的問題沒有解決),另外修改 個人樣式表,加入像下面的樣式,可以解決一些 default 字型上的問題。
a,body,td,div {
font-family: "cwTeXYen" !important;
text-decoration: none;
}


不過第三個問題 Gmail 的部份,試過下載 9.50beta + basic html view 也不行。
3. 無解。

update:
我非常困惑了...
因為在家裡的確是不行的,同樣的版本﹑ language pack。
在公司卻 okay 了。 (雖然看起來 js 的部份還是有很嚴重的問題)


不過基本上
1. opera 在IE only 的網站上相容性比較好
2. opera 速度比 firefox 快

光這兩點今天晚上讓我動心很多次。

然, Gmail 是我的民生必須品,字型的部份我看久一點就受不了。
所以,我還是把 opera 重新打入冷宮。

update:
如果 Gmail okay 的話,其實我會重新考慮 opera。

--
相關連結:
opera mini: http://www.operamini.com/
opera linux download
opera linux 中文輸入法無法使用的問題 (不完全啦,不過這個解答是可以用的)(當然 ctrl + space 的 shortcut 記得要拿掉)
Opera Linux 中文字型名稱無法顯示

2007/11/08

[Programming] C++ 語言學習參考連結

我對"席佳佳"的在這一個多月以來的興趣一直在成長中。晚上作夢還會夢到她(誤)。

不過今天要在作書籤的摘要的頁面不是別的網站,正是維基百科全書上的說明:
C++剛開始推廣時作出「在這12年裡,C++使用者人數大約每七個月半增加一倍」的結論,並成為許多C++相關文件必引的一段話。然而,時至今日新語言層出不窮,使用者人數已不太可能以如此速度增長。

分析機構EvansData定期對開發人員展開調查,其調查結果與Stroustrup提出的C++正在擴張的說法相違背。EvansData的資料顯示,以C++為工具的開發人員在整個開發界所佔的比例由1998年春天的76%下降至2004年秋的46%。

Forrester最新的調查顯示,C++、微軟VisualBasic和Java是眾多公司產品體系的首選語言。對100家公司的調查顯示,C/C++、VisualBasic和Java在產品體系中的使用比例分別是59%、61%和66%。


這個頁面裡還有很多像是 c99 STL 等等名詞的解釋也都是我想做筆記的 :) (我太沒常識了...)。

[軟體][Linux] 能播放 DVD Menu 的 DVD player

在 Linux 上面最好用的影片播放軟體應該算是 mplayer了,不過這個軟體不能處理 DVD Menu 的這個缺點直到今天都還沒有補強上去,讓很多 DVD 影片的愛好者感到不便。

雖然我之前有寫過 DVD ISO 在 Linux 上面怎麼看的文章,不過要看個 DVD 要搞成這樣,說實話,還蠻累的。

所以就找了一下,感謝 Wilson 提供的資訊,在 Ogle 這個軟體上面看到 DVD Menu 的應用了。 (Ubuntu 使用者可以用 apt-get install ogle 直接下載)看起來還蠻不錯的,也有 gui 可以用。

--
註:之前的 DVD ISO 應用時少補一點『如何找出 sid 』
我的解法是: 用 mplayer -identify DVD.iso 先去看一下 sid 有哪些,再去試。通常我手上的繁中會在 128, 129

--
更新 (2007-11-21):
1. 謝謝下面回應的朋友, VLC 是可以播 DVD Menu 的。
2. VLC 不能播 real media 的討論在這裡,簡單的說, VLC 開發小組認為 VLC 不能使用跟 mplayer 一樣的方式去用動態連結 dll 支援 realmedia 的格式。他們認為這是違反 GPL 的規範,這點在 GPL 的認知上有不同的意見,所以 mplayer 雖然也是 GPL ,但是 VLC 開發小組不肯做,而 mplayer 做了。(也許未來會有問題, VLC 堅持自已的原則,在還沒有判例情況下,這應該是值得嘉許的。)

2007/11/07

[Linux] SecurityFS

話說,雖然根據 spec 上說, 2.6.14 就開始包含 securityfs 進來了,不過我還是等到 Ubuntu 7.10 release 了才知道這個 fs type 的存在。而 lwm 上的簡介:

Some observers might well believe that the kernel has accumulated plenty of special-purpose virtual filesystems. Even so, 2.6.14 will include yet another one: securityfs. This filesystem is meant to be used by security modules, some of which were otherwise creating their own filesystems; it should be mounted on /sys/kernel/security. Securityfs thus looks, from user space, like part of sysfs, but it is a distinct entity.


哼... 看完了我還是不知道它在說什麼:

譯作:
有些人可能觀察到了 kernel 裡面已經累積了好些不同用途的 virtual fs 進來了。即便如此,在 2.6.14 還是會再加進來另外一個新的成員: "securityfs". 這個 fs 是用來做某些安全模組的使用;像是一些會另外開他們自已的 fs 的安全模組。 securityfs 會在 /sys/kernel/security 上面 mount 。 securityfs 顧名思義,有點像是 sysfs 一樣,在 user space 裡,不過他確實是一個獨立的整體.

靠... 這段一點都沒提到『為什麼一定要用到 securityfs 』,或著 securityfs 會確切用在哪些模組上面。不過 lwm 那個討論串後面接了一大堆討論... (= =) 好煩... 這顯然不是真正拿來查詢的地方。

[Linux] Bash_completion

tpxc 這位對岸的同學的 blog 裡頭看到的:
如何添加 flv 到 kaffeine 的 bash 補全呢?

sudo vi /etc/bash_completion

編輯 /etc/bash_completion,使用哪個編輯器不要緊,只要能搜索『kaffeine『就行了。

更改的內容用粗體表示

complete -f -X '!*.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|VOB|bin|dat|vcd|ps|pes|fli|flv|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp3|MP3|ogg|OGG|ogm|OGM|mp4|MP4|wav|WAV|asx|ASX|mng|MNG|srt)』 xine aaxine fbxine kaffeine

重啟終端,現在 kaffeine 的 bash 補全支持 .flv了。


他的 blog 裡頭有蠻多 bash script example 的。可以參考。 (有些地方可能要修一點點而已)

[軟體][Linux] Xmms 選單亂碼問題

其實是看到大陸那邊的論壇上有解法才知道的。

台灣這邊就:
ln -s /etc/gtk/gtkrc.zh_TW /etc/gtk/gtkrc.zh_TW.utf-8

就可以解決了。

真是不曉得之前為什麼要抓 xmms 的 source 下來檢查這麼麻煩...

2007/11/06

[軟體] Samba 有安全問題??

昨天跟 Wilson 在玩 samba 的時候才發現 samba server 對 symbolic link 的處理在 windows 跟 linux 上面不大一樣。

就是 linux mount samba 進來, symbolic link 就還是 symbolic link ,windows 上就直接變成實體檔案了。

所以我們玩了一個把戲,在 Linux 上面 ln -s / ./ 再到 Windows 上面去檢查...

呃... 果然是很危險的把戲。

不過今天早上 Wilson 又跟我 update 了一項訊息:
echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled

這樣在 Linux 上面就可以直接做到跟 Windows 一樣的效果

嘿嘿嘿... 不過 samba 還是很危險

2007/11/01

[軟體] Pidgin 2.2.2 還是有問題啊...?

:~/Community/pidgin-2.2.2$ pidgin
pidgin: symbol lookup error: pidgin: undefined symbol: purple_core_ensure_single_instance


嗯,看起來又是有東西沒弄好。最近 pidgin 的穩定度有蠻大改進的空間。

先搞 amsn 出來好了。

2007/10/30

[Programming] GCC: Stack Smashing Detected!

一整個疑惑中,今天在抓我寫的 osd 的程式的 bug 的時候,發現執行時會回應:
*** stack smashing detected ***: ./gtkosd terminated
已經終止

這種訊息出來。

去查這個訊息的原因,在 starryalley 的 blog 底下看到可以加上 -fno-stack-protector 就可以看到出問題的行數。

然而... 我一加上去,我的程式就很正常的運作了。

="=?a) 這是怎麼回事?

2007/10/29

[Programming] 記憶體配置檢查工具

之前有看過 Fred 的 blog ,有看到一篇寫(malloc)檢查的工具,剛剛遇到問題才想到要去找,找了半天沒找到。(殘念)註1

不過 wilson 這時給我一個dmalloc 的介紹,好像還蠻有用的。 嘿嘿。

後來 google 了半天才找到這段 bbs 上的文章:
daddy (daddy) said:
嗯...何不先試試MALLOC_CHECK_和MALLOC_TRACE?

在執行程式前, 先export MALLOC_CHECK=1, 就會啟動glibc memory management的debug
機制,任何會segmentation fault的地方都會被glibc擋下來, 並秀出error的部分。
MALLOC_TRACE則是用來追memory leak的,會把heap usage log到指定的file。
這二個玩意兒的詳細用法請參閱GNU C library manual。
當然啦, 前提是你們用的是glibc不是uclibc :p



原文手冊在這裡
簡中也有相關的說明:

設置環境變量MALLOC_CHECK_。
若將MALLOC_CHECK_設置為0,則在檢查到錯誤時不作任何提示;
若將MALLOC_CHECK_設置為1,則在檢查到錯誤時打印一條信息到標準錯誤輸出(stderr);
若將MALLOC_CHECK_設置為0,則在檢查到錯誤時直接調用abort()中止程序;

--
註1: 這個時候才會覺得黑米其實蠻好用的。因為我的書籤都亂放。(foxmarks+google+黑米)不過這不是重點啦

2007/10/23

[Linux] 字型不要裝太多....

說實話,我是一個很貪心的人。先前在做 UNLiu 字碼對應表的時候,裝了蠻多有的沒有的字型,像什麼 lao (老撾文) Thai (泰文) 全都裝了上來。這樣在做對應表的時候才不致於看不出來字碼的長像。

然而 這些如果是在 xxxx.ttf 檔,用 /usr/local/share/fonts/ 之類的資料夾裝在一塊兒,然後下一個 fc-cache f 就算了。偏偏又不是這麼簡單就可以的。

apt 底下的 ttf 包裝在 post inst 之後會做 fc-cache regenerate 的動作,所以在網路昇級一堆 ttf 的包裝的時候,你就會看得到一些「奇景」:

正在設定 ttf-oriya-fonts (1:0.5.0-0ubuntu1) ...
正在安裝新版本的設定檔案 /etc/defoma/hints/ttf-oriya-fonts.hints ...
No CIDSupplement specified for Dotum-Regular, defaulting to 0.
No CIDSupplement specified for Batang-Regular, defaulting to 0.
No CIDSupplement specified for KochiMincho-Regular, defaulting to 0.
No CIDSupplement specified for KochiGothic-Regular, defaulting to 0.
No CIDSupplement specified for KochiGothic-Regular-JaH, defaulting to 0.
No CIDSupplement specified for Headline-Regular, defaulting to 0.
No CIDSupplement specified for Gulim-Regular, defaulting to 0.
No CIDSupplement specified for KochiMincho-Regular-JaH, defaulting to 0.
Regenerating fonts cache... done.

正在設定 ttf-punjabi-fonts (1:0.5.0-0ubuntu1) ...
正在安裝新版本的設定檔案 /etc/defoma/hints/ttf-punjabi-fonts.hints ...
Regenerating fonts cache... done.

正在設定 ttf-tamil-fonts (1:0.5.0-0ubuntu1) ...
正在安裝新版本的設定檔案 /etc/defoma/hints/ttf-tamil-fonts.hints ...
Regenerating fonts cache... done.


有幾個 ttf 包,就做幾次 fc-cache -f

問題是這個 fc-cache 的更新動作,每次至少要花上一兩分鐘才罷休...
而且愈多 ttf , re-generate 的動作就愈久。

林老師勒... 不能一次解完所有的 ttf 檔案,再來重做 fc 的 cache 一次就好了嘛?

更.... 我裝了 20 個... (是要等到什麼時候啊?)

2007/10/22

[Linux] ubuntu 7.10 正式推出

Linux toy 有報導過了 Ubuntu 7.10 正式推出的新聞。 也寫得蠻清楚的相關的細目,包括官綱上面有提到的更新的方式

不過我還是蠻愛翻譯一下的,畢竟還是中文比較順眼:
(註: 以下圖片直接從官網連過來)
1. Ubuntu Dekstop 的更新方式:


  1. 點擊 update manager

  2. 按下 check 做更新 package.list 的動作

  3. 如果有更新沒做,請按下 install update (安裝更新) 把一些還沒有更新的套件先更新完

  4. 如果有新的 distro 更新可以做,會像這樣提示訊息出來:


  5. 剩下的,根據營幕上的指示做完更新就可以


2.Ubuntu Server 版本更新方式(其實所有的版本應該都可以按這個方式做更新就可以):

  1. 先做 sudo apt-get install update-manager-core
  2. (更新 update-manager-core 這個套件
  3. 接著做 sudo do-release-upgrade



3. 從 CD/DVD 上面做更新

  1. 下 alternative cD 的 iso 下來,把它燒成光碟 (慢速燒比較保險)

  2. 先把光碟放進去

  3. 在BIOS 選 Boot From CDROM /開機後選 " upgrade from CDROM " 的選項

  4. 根據營幕上的指示操作

  5. 進來後,可以下到 console 的部份執行:

    • gksu "sh /cdrom/cdromupgrade"

      或在 Alt+F2 下 kdesu "sh /cdrom/cdromupgrade"



不過更新完之後,我的像 oxim/fvwm-crystal 之類的很多改過的東西都不能用了...
記得先備份一下。

[軟體] Better Gmail

六月介紹過 Better Gmail 這個軟體,原本的特點就不錯了。

現在附上一個新的功能,讓你可以在不用點進去的情況下,就直接看到信件內文:


作法是在 INBOX 的信件標題上面按右鍵就可以。

應該還有些功能沒完成,譬如繁中的翻譯就很差.... SentMail 還沒 okay 之類的。

不過還可以接受就是,在這裡下載安裝,它是 Firefox 的 extension 。

2007/10/21

[軟體] windows 字型美化軟體

DK 那邊看到的。簡單的說,就是會讓你的字體有真的清楚的感覺。 (像在 Linux/MacOS 上面的 anti-alias 的感覺。)

然後,可以使用王漢宗的粗黑體繁 字體來代替新細明體 (不過有漏字)
有正版 微軟正黑體 授權的也可以用這個來代替。

GDI ++ 下載點在這裡
正黑體別找我要,王老師的字體到沒什麼問題。

更新:
Vista 上的 GDI

2007/10/12

[軟體][Linux] BT Download Client

ctorrent是很好用的 Linux 上的 BT Download 客戶端軟體。不過它有一些軟體上的問題沒解決,這邊是另外一個開源軟體的義士寫出來的 ctorrent-dnh 軟體。 看起來應該比 ctorrent 好用很多。

2007/10/08

[Linux] Ubuntu 上的 fc-cache write failed 問題

解法在這裡 ,其實我只是想做個 bookmark ,但是懶得上 hemidemi 而已。

順便加加它的 pagerank 也好? :)

2007/10/07

[軟體] Inkscape 0.45.1 有問題 (2)

上次有提到 inkscape 中文字體的使用有問題之後,今天又發現一個很明顯的 bug: 快捷鍵有問題。

版本: inkscape200707281318.package (就是我上次用的 autopackage 的版本)
狀況形容: F1~F4 都沒有問題,輪到 shift + F6 畫點就有問題...

剛剛試 inkscape200709061136.package 也是不行的。

不知道是怎麼回事,不過記得我公司用的 subversion 的版本是沒有這個問題的... 所以等一下再來試試看 subversion 的版本好了。

--
附上連結:
autopackage
svn:
svn co https://inkscape.svn.sourceforge.net/svnroot/inkscape/inkscape/trunk inkscape

[Security][軟體介紹] Firefox Master Password Recovery

firefox 是蠻多人愛用的一款瀏覽器軟體。它相對於 IE 而言,很安全也很好用,所以有蠻多人會使用它的 password manager 來管理存在 firefox 裡面的一些密碼。

然而根據這個軟體的介紹,這些密碼是可以透過暴力破解(就是寫個程式一個接一個試密碼)來達成目的。

好吧... 天底下本來就沒有絕對安全的事情,就當做如果你忘記了 firefox 的 master password 還有個軟體可以幫你找回密碼好了。 XD

--
照我說,自已的電腦(Desktop)還是小心點,別讓別人碰觸,以免橫生意外。

[Security][軟體介紹] SSHatter

譯稿:

SSHatter 是一個 SSH 暴力解密碼的軟體,它使用了多重執行緒的概念在這個軟體裡面,所以可以大幅減少解開密碼所需要的時間。並且由於軟體是用 perl script 所譔寫,所以可以在多個作業平台運行無誤。

原文參照


// 沒有用 firewall , iptables 擋的機器一直都要小心的注意...被破只是時間問題而已。

[Programming] 推薦"建立良好的程式寫作風格"文章

Fred 最近換了 blog 寫作的地盤,所以我有機會去回顧他以前寫的文章。 我大概算是這半年才開始當他的 blog 讀者的。由於自已不是本科出身,所以在一些很基本的東西上面會很需要人家指導。

他的建立良好的寫程式風格這篇文章裡有提到一些程式寫作上的參考連結: Linux 核心程式寫作建議

Linus Torvalds and other kernel programmers have written a short document that details some of the kernel programming rules. // 這篇文章主要是 Linus Torvalds 跟其它的 key programmer 寫下來的規則。
像是"{} " 的擺放方式﹑ TAB 的使用﹑命名方式﹑function 的使用等等,這些在 code 的易讀性上面都會造成一些問題。而易讀性正是決定你的 code 能否由下一個 programmer 使用,或著說, reuse 的可能性的一個關鍵點。

十分建議初學者,還有像我這樣的半調子再回頭去閱讀。

2007/10/02

[軟體][Linux] 鍵盤側錄程式 LKL

lkl是 Linux 上面做鍵盤側錄的程式。
用起來蠻方便的。不過就是 keymap 裡面有一個小 bug . (space 的地方是 '' 不是 ' ')
ascii[0] 是 0 不是 32 ,所以要小修一點點而已。

之所以找這個東西是因為需要重作按鍵音的部份,做程式碼的參考。
跟什麼壞事沒有關係。

更新:
補上actkbd這個軟體好像比 lkl 還好用一點。要做按鍵音更方便了點。
(不過 performance 沒有想像中的好)

[軟體] Pidgin 接連推更新

pidgin 是 Linux Desktop 上的 msn/gtalk/yahoo IM 軟體的代表。不過自從改了名字之後,更新和版次就開始一直跳個不停。這個星期又看到官方首頁上面有寫著:
2.2.1 is out. It fixes a crash that can be triggered remotely on MSN in 2.2.0. If you are using 2.2.0, you should upgrade immediately. See our security advisory for details.


中譯如下…
2.2.1 出了了,它修正了 msn 在 2.2.0 裡面可能會因為遠端導致 crash 的情況。如果你是使用 2.2.0 的使用者,我們建議你即刻更新。

嗯...還是不要這麼密集比較好吧?

2007/09/30

[Programming] libjingle

libjingle 裡面有幾個範例蠻好用的,像是 call 可以拿來打 gtalk 的語音。
pcp 可以傳送檔案。

雖然不算是很完整的功能,不過至少現在 pidgin 都沒辦法傳送檔案的時候,拿這個來傳也不賴。

另外晚上拿 pcp 改了一個雛型出來,希望可以取代 gtalkbot 的一部份,讓這個東西重新回到線上。

UPDATE:
pidgin 傳送檔案的方式不一樣,所以會變成:
error code="501" type="cancel"
feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"


嗯…總而言之,得想辦法。
(好像改 pidgin 會比較好?)

2007/09/27

[軟體] 做壞事是科技進步最大的原動力

(17:50:21) anton: 嗯 我想玩 gtalk 的服務啊~
(17:50:44) anton: 因為覺得 msn protocol 封閉的,所以不好改 不好看 不好查。
(17:51:08) anton: gtalk 用的是 XMPP/jabber ,這個是開放的協定,所以很好查。
(17:51:40) anton: 就是拿它來做一些簡單的應用,像是你傳一個訊息過去:
給我林志玲的照片
(17:51:56) anton: 然後它就給你一張林志玲的照片,這樣。
(17:52:33) anton: 我覺得這種服務,有最大的洞,就是只有 google 才知道你從哪個 ip 位置上來。
(17:52:57) anton: 且因為是 gtalk ,所以可以加上 proxy ,就更難防。
(17:53:25) anton: 這種 file sharing 的服務,很容易鑽到法律的漏洞。
(17:53:47) anton: 又是 1對1的情況 ,所以連有沒有「公開」這件事情都很難查。
(17:54:05) anton: (做壞事,永遠是最大的原動力。)

[Programming] libjingle

由於 class.jabber.php 有些問題不明確,所以興起了改用 libjingle 的想法。只是沒想到官網上的 tarball 也有些已知問題沒有解決。幸好在討論區裡面有一位 Brad 把問題說了個大概
簡單的說就是 patch 一下就好:
Index: talk/base/stringutils.h
===================================================================
--- talk/base/stringutils.h (revision 7)
+++ talk/base/stringutils.h (working copy)
@@ -269,7 +269,8 @@
template<>
struct Traits {
typedef std::string string;
- inline static const char* Traits::empty_str() { return ""; }
+ // inline static const char* Traits::empty_str() { return ""; }
+ inline static const char* empty_str() { return ""; }
};

///////////////////////////////////////////////////////////////////////////////
Index: talk/base/base64.h
===================================================================
--- talk/base/base64.h (revision 7)
+++ talk/base/base64.h (working copy)
@@ -23,8 +23,8 @@
static std::string decode(const std::string & data);
static std::string encodeFromArray(const char * data, size_t len);
private:
- static const std::string Base64::Base64Table;
- static const std::string::size_type Base64::DecodeTable[];
+ static const std::string Base64Table;
+ static const std::string::size_type DecodeTable[];
};

} // namespace talk_base
Index: talk/base/unixfilesystem.cc
===================================================================
--- talk/base/unixfilesystem.cc (revision 7)
+++ talk/base/unixfilesystem.cc (working copy)
@@ -111,6 +111,7 @@
if (create)
CreateFolder(pathname);
}
+ return true;
}

std::string UnixFilesystem::TempFilenameI(const Pathname &dir, const std::string &prefix) {
Index: talk/xmpp/xmppclient.h
===================================================================
--- talk/xmpp/xmppclient.h (revision 7)
+++ talk/xmpp/xmppclient.h (working copy)
@@ -138,7 +138,7 @@
}
}

- std::string XmppClient::GetStateName(int state) const {
+ std::string GetStateName(int state) const {
switch (state) {
case STATE_PRE_XMPP_LOGIN: return "PRE_XMPP_LOGIN";
case STATE_START_XMPP_LOGIN: return "START_XMPP_LOGIN";
Index: talk/p2p/base/sessionmanager.h
===================================================================
--- talk/p2p/base/sessionmanager.h (revision 7)
+++ talk/p2p/base/sessionmanager.h (working copy)
@@ -156,7 +156,7 @@

// Creates and returns an error message from the given components. The
// caller is responsible for deleting this.
- buzz::XmlElement* SessionManager::CreateErrorMessage(
+ buzz::XmlElement* CreateErrorMessage(
const buzz::XmlElement* stanza,
const buzz::QName& name,
const std::string& type,


晚點 compile 沒問題的話,再來實做 libjingle 的可能性。

// 再註: libortp 要用 0.7.1 的版本才行。
// 只能用這個版本的。

2007/09/26

[Linux][WM] Fvwm-crystal 修改

Fvwm-crystal 我不介紹了,這個應該大家都知道很好用。截圖可以看一下這邊官網的截圖,簡單一句話,就是美啊~

不過呢,今天要來做筆記的是:快速鍵

除了 CTRL/ALT + F4~F12 被我改掉 (我只留下前三個 workspace)之外
ALT+F4 被我改回去用成 Close (關閉 AP)
還要加上 CTRL+ALT+t 給了 gnome-terminal
CTRL+ALT+d 給了所有 AP 縮到 Desktop
key d A CM All (!Fvwm* !panel !Xmms*) Iconify
CTRL+ALT+k 給了 xscreensaver-command -lock
CTRL+△/▽ 給了調整音量 (自已寫的 vol 調整程式)
右下角的 ACPI-Bat 改成了 desktop 的圖式,這樣點擊的時候,就會變成 all iconify 。
之外

fvwm-crystal 的預設快速鍵為:

Key minus A $[Mod1] Raise
Key minus A $[Mod2] Lower
Key equal A $[Mod1] Maximize
Key equal A $[Mod2] Fullscreen
Key BackSpace A $[Mod1] Window-Iconify
Key BackSpace A $[Mod2] Close

Mouse 1 T $[Mod] Window-Raise-RaiseMove
Mouse 2 T $[Mod] Window-Shade-Resize
Mouse 3 T $[Mod] Window-Lower-Move

Mouse 1 WT $[Mod1] Window-Raise-RaiseMove
Mouse 1 WT $[Mod1]2 Window-Raise-RaiseMove
Mouse 2 WT $[Mod1] Window-Resize-Opaque SE
Mouse 2 WT $[Mod1]2 Window-Resize-Opaque SE
Mouse 3 WT $[Mod1] Window-Lower-Move
Mouse 3 WT $[Mod1]2 Window-Lower-Move


這裡可以看得到我修改過後的 script 。

2007/09/21

[Blogger][初學者] 最新回應的使用方法

工具在這裡: http://jinyaolin.blogspot.com/2007/08/blogger8242007.html



把自已的資料填一填之後,按下產生 (Generate) 就會跑一堆 script 在底下出來。
把那些 script 全選,複製,貼到:


圖上的 HTML/Script 的元素裡面就可以。如果沒有可以自已在上面"加入網頁元素" 點下去,選 HTML/Script 的元素就可以了。

2007/09/12

[Google] YouTube 影片下載

Youtube 最近有改了版的樣子,所以一些網站像 VideoDownloader 都不能用了。不過還好 PTT 上面的 jwg2 網友提供了:
flvretriever這個好地方。

簡單的說,你只需把 youtube 的網址丟進去,就可以得到你想要的 flv 下載。

我選用這個網站的原因,當然也是因為它提供了(書籤式)的一鍵下載

你可以把它提供的
javascript:(function(){window.open('http://kej.tw/flvretriever/bookmarklet.php?videoUrl='+encodeURIComponent(location.href)+'&autostart=yes','gootube', 'toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=0, resizable=1, width=650, height=320')})();
這串加到你的書籤裡面,在 Youtube 瀏覽的同時看到想要抓下來的影片,就來點擊這個書籤,就可以順利取得 flv 的影片檔案。

另外 split 也提供了一些資訊:
vixy.net和medaiconvert.com也都還不能使用..

不過Movavi和Zamzar倒是運作正常..

你可以試試看用這兩個網站幫你抓(還可以順便轉檔唷!):

Movavi:
http://online.movavi.com/

Zamzar:
http://www.zamzar.com/url/

2007/09/08

[軟體] firefox forecast 繁體中文版

firefox 的 forecast 套件沒有繁中的翻譯,姑且不討論為什麼以前有,現在沒有,是什麼緣故,不過好心的網友 Polarman 倒是為我們重新製作了 forecast 的繁體中文版,讓我們不必忍受簡中版的翻譯。

當然,這篇不是新聞,我只是發現 google 還不是很好找,所以加點 pagerank 的分數而已。

有安裝 Forecastfox 這個 add-ons 的人,最近可能和我一樣煩腦,
因為最新版0.9.5.2 不含繁體中文版,只能用舊版,或是忍受簡體中文版,
為了解決這個問題,花了幾個晚上,參考之前的版本,
試著翻譯 Forecastfox 0.9.5.2的繁體中文版 ,
總算完成了,

http://tinyurl.com/2xv7co

大家試用看看...

好像無法上傳xpi檔, 所以放在其他地方,
初來乍到,如有違版規,請告知,會立刻更正...

2007/09/04

[Linux][Vim] vimrc 設定介紹

vim 是我在 linux 上面唯一習慣使用的文字編輯器。有時會用上 leadpad/gedit 來輔助,不過那通常是因為 copy/paste 的機制在 Xwindow 底下還常常會混亂的緣故,並不是 vim 的問題。

不過最近遇上了一個問題,是 vim 在開 phtml 的時候常常會發生斷 tag 有問題的情況。這點對我來說很困擾。我的 phtml 基本上都跟 php 是一樣的內容,只不過 php 通常是 action script , phtml 通常是靜態的 html + 部份可以更動的 php script。

看了 GD's Blog 上這篇文章之後,就知道怎麼解決我的問題了。
au BufRead *.phtml set filetype=php

簡單的說,這個解決可以不用動到 vim 的 syntax 設定,影響的範園也只會在使用者的部份,感覺還蠻不錯的。
順便一提,我用的 colorscheme 是 elflord ,這比 desert 要順眼一點。

2007/08/29

[Linux] 問題記錄

WARNING: terminal is not fully functional

每次要 man 東西的時候就會跑出來,現在看 LinuxQuestion 上的解釋 ,好像說是
apt-get install ncurses-term
就可以解決。

[Programming] 自動偵測編碼

有參考到 Tsung 的 blog 裡頭寫到的 php.net 上的 function ,不過顯然還不大行:
$str ="中文測試";
echo mb_detect_encoding($str)."\n";
$str = iconv("utf8","big5","中文測試");
echo mb_detect_encoding($str)."\n";
echo $str."\n";

執行下去你就知道了... 對我們而言,偵測最重要的就是分出 utf8 跟 big5 的差別。
但是連這麼單純的字串都分辨不出來,就不用提後面的部份了。
所以 php 應該先淘汱掉(?) *註

然後 Ticore提到另外兩個工具,結果他已經寫了出來。

用Google一找,找到兩個
分別是 Chinese Encoding Guesser 與 Mozilla charset detector
後者就是 Mozilla 在用的編碼檢測 Java 版

試用的結果 前者效果似乎不錯
但是它只會得到一個偵測結果
而 Mozilla 版的效果欠佳
尤其是 Big5 編碼偵測結果幾乎都錯
難怪 Mozilla、Firefox 瀏覽器自動偵測效果不好.....

不過它的特色是幾乎涵蓋大部分編碼種類
而且猜測的結果不只一個
也可以預設猜測的語言種類

這兩種都可以針對位元陣列、檔案或者是一個URL來作偵測

不過 Java 的部份我不熟,所以先行跳過。

Jserv之前也有提過一個 pcmanx 的 addon:

我初步將 NSPR (Mozilla Runtime) 一類的包袱去掉,並且用 G++ 的 -fno-rtti、-fno-exceptions,以及 -nostdinc++ compilation flags 來編譯 ,如果將 -lstdc++ 換成 -lsupc++,還可進一步得到 C-only library,目標是作成一個 add-on,讓 [PCManX] 可透過 dlopen 來操控內部實做,初步完成自動偵測文件編碼與測試程式,名為 [charset-detector] (bzip2 tarball)。


不過在 make 的時候出了問題:
nsSBCSGroupProber.cpp:(.text+0x18f): undefined reference to `free'
/usr/bin/ld: .libs/chardetect.so: hidden symbol `free' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
make: *** [chardetect.la] Error 1


看起來是 linker 在 libstdc++ 上找不到 free ?
不過不懂為什麼,所以還是沒得用。

最後用到 python-chardet
>>> import urllib
>>> rawdata = urllib.urlopen('http://yahoo.co.jp/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'encoding': 'EUC-JP', 'confidence': 0.99}

import glob
from charset.universaldetector import UniversalDetector

detector = UniversalDetector()
for filename in glob.glob('*.xml'):
print filename.ljust(60),
detector.reset()
for line in file(filename, 'rb'):
detector.feed(line)
if detector.done: break
detector.close()
print detector.result


不過,這個工具還是有問題....
我丟 Big5 進去,它會回 ASCII....

所以這部份還是很麻煩....

--
更新:
參看過這篇之後,把 encoding_list 再修了一下順序:
function detectCharset($str){
$encoding_list = 'ASCII, BIG5, EUC-CN, UTF-8';
return mb_detect_encoding($str, $encoding_list);
}
$str ="中文測試";
echo detectCharset($str)."\n";
$str = iconv("utf8","big5","中文測試");
echo detectCharset($str)."\n";

現在測試出來的結果應該是這個最能滿足,暫時先用這個看看...

2007/08/26

[Linux][初學者] Windows 加灌 ubuntu 記錄

由於小猴子要出國,所以為了省錢,我提議跟小猴子的 Notebook 交換,把我的 Notebook 給她。如果她出國之後還是有問題,再買台 notebook 過去給她。當然接著問題就來了,我的筆電換做小猴子用的比較簡單,把 Ubuntu Linux 裡面的資料備份下來,接著把 Linux 跟 grub 砍掉就好了。整台電腦就是小猴子熟悉的 Windows 。不過,我的需求就沒那麼容易滿足了。我需要的是 Windows/ Linux 並存的筆電。

所以我的計畫應該是:
1. 用 LiveCD 開,用 gparted resize partition
2. 灌 Ubuntu Linux
3. 把之前的資料從隨身碟裡再拿出來,灌回去。

結果執行的時候,先是遇到了 LiveCD 無法使用,試過 ubuntu linux 7.04 , 6.10, 6.04 都無法開啟 graphic mode。再用 B2D 2005(同樣無法使用)。去翻了一下 ubuntu 官網的說明,改用 alternative CD 來做 text mode 的安裝才解決。接著在 mount 隨身碟時發現到我的 home data 沒有保留下來(小猴子帶回屏東了 ... 囧)

沒辦法,只好從公司那邊 scp 回來。 (狡免有三窟咩,我怎麼可能把重要的資料只放一邊?)
一開 Xwindow ,進來的是 gnome 的 splash 畫面。(幹…好慢)看起來 Gnome 是不能接受的了。
只好先不管個人資料的部份,先把 fvwm-crystal 的資料先 scp 回來。(因為 fvwm-crystal 官版的 script 有很多我不能接受。 ◀ 像是 alt + F4 不是 close/destroy window ,我在 .fvwm-crystal/preference/Startup 裡面又不能用 Key 指定,還有 AllToDesktop 跟 WindowList 的 button 等等)

等到我把 WM 搞定,隨即發現,我的很多 service 在浪費我這台筆電上面很有限的資源:
像是 cupsys 其實平常沒在用,可以關掉。bluetooth 我根本沒在用,也關掉。
wacom 有在想要買板子來玩玩,但是還沒入手,也不用開。關了七八個 service 之後就發現到我的 dm (display/login manager)開著也是一種浪費。我的 notebook 只有我一個人在用,不需要用到 daemon 來管理我的帳號。

所以用 google 找了一下文章(AutoLogin to Xwindow

簡單的說,就是讓開機(boot)完,自動 su 成 anton 就 startx 。這樣的做法有安全上的顧慮,不過一來自已家裡應該還 ok 。二來 fvwm 允許你在啟用後執行自已喜歡的 script ,我們可以在那個時候啟用 screensaver lock 或著是 xtrlock 之類的程序來給 Xwindow 上鎖。

不過這邊文章討論到 /etc/inittab 在 ubuntu 裡面不存在的事情。這是因為 ubuntu 已經把 sysvinit 從系統裡面用 upstart 取代了。本來想把 sysvinit 灌回來,後來發現這樣 /dev/initctl 會出問題,所以後來還是放棄。

X: user not authenticated 的問題上面也可以看這篇文章的解決方式。
就是
vi /etc/X11/Xwrapper.config
# 把 allowed_users=console 改成 allowed_users=anybody


startx -- :1

另外由於 im-switch 是在 /etc/X11/Xsession.d/ 底下啟用。所以 startx 的時候沒有引用到這個部份的功能,所以必須在 .xinitrc 裡頭追加
source $HOME/.xinput.d/zh_TW,這樣才能讓輸入法正常使用。

這些東西做完,我還有 pcmanx 跟 pidgin 要重新 compile , firefox 裡面的 extension 跟 plugin 都要重新安裝。還有一堆密碼要追加回來。

噁... (結論是: 重灌好累。)

2007/08/24

[Programming] 用 PHP 畫條碼


之前對 PHP 的概念一直沒有很好,只是把它當作一個方便的工具而已。
後來有好朋友 johnney 用了 php 上的 套件工具 (Pear) ,就覺得 .... (PHP 已經肥大了,還用到這麼肥的套件,一整個反感。)

今天為了找畫 barcode 的 php script才發現 pear 自已發展出了一套 package manager ,你可以 list/search/upgrade/install/remove 等等對你的 pear module 作管理的動作。 pear 總還是有頭腦的。

拉回來講 php 畫 barcode 怎麼畫?
很麻煩嗎?答案是:如果用 pear 其實很簡單:
require_once("Image/Barcode.php");
$bc = new Image_Barcode;
Image_Barcode::draw('1234', 'int25', 'png');


才三行?

西底~ 就是這麼簡單的三行結束。

2007/08/22

[Linux] 衝 IP 事件記錄

話說系上有一台 windows 2000 跟 linux 撞在一起了。
為了這台機器,學姐幫我跟計中那邊的負責人要求讓 gateway 只讓我的 "00:0D:61:51:56:A7" 這台 mac address 的機器通過。
不過還是有問題,因為系辦跟這台機器在同一個 LAN 底下,所以系辦還是常常看不到這台機器。
為此,我又只好寫一個 script 再來發 broadcast 給底下的機器。

(我自已的 linux 機器會比較好辦點,就
arp -v -s x.x.x.x 00:0D:61:51:56:A7就可以把往 x.x.x.x 的封包通通指定往 mac 為 00:0D:61:51:56:A7 的機器去。

好煩,學姐怎麼會忘了要註冊這個 ip 啊...
現在補註冊了還一堆事留給我擦... 囧

2007/08/16

[Linux] Pidgin 2.1.0 Bug Found!

這幾天看到 pidgin出了 2.1.0 的版本,很高興的跑去下載來用。
雖然 Ubuntu 要自已下 source 來 compile ,不過還算 okay 。 (反正習慣了...)

不過一起來就 crash 還 dump 一堆東西出來是怎麼回事?
乾脆再 ./configure --enable-debug 來看一下 debug verbose 的訊息好了,結果還是:

Thread 1 (Thread -1222191408 (LWP 17824)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb754b3d1 in select () from /lib/tls/i686/cmov/libc.so.6
#2 0xb76d14a0 in g_spawn_sync () from /usr/lib/libglib-2.0.so.0
#3 0xb76d186c in g_spawn_command_line_sync () from /usr/lib/libglib-2.0.so.0
#4 0xb6e5c732 in ?? () from /usr/lib/libmono.so.0
#5 0xbfeb9970 in ?? ()
#6 0xbfeb9958 in ?? ()
#7 0xbfeb9954 in ?? ()
#8 0xbfeb9950 in ?? ()
#9 0x00000000 in ?? ()
#0 0xffffe410 in __kernel_vsyscall ()


=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================

已經終止

真是奇怪... 去 google 了 pidgin 2.1.0 的版本 bug report ,好像都沒人回應這種鳥問題。

只好自已來找一下,結果才發現 pidgin 已經把 log 跟 config 都放到 .purple 裡面了,原本 .gaim 裡的 msn/gtalk log 都還留在那裡。
嗯…也是啦,都換了名字了,早該換用別的位置了。 (不過為什麼是用 libtool (libpurple)的名字,而不是用軟體名(pidgin)呢?
pidgin 的開發團隊還有別的計畫要共用哦?

嗯,這是題外話,接下來我用 pidgin -n 不啟用任何 account 的設定來檢查 pidgin 是否是因為 config 的關係才不能啟用,
結果果然看到正常的 window ,然後再比對發生問題的地方,馬上就猜到是 Gmail Notification 的問題了。

結論:
ubuntu/pidgin 2.1.0 請先 disable Gmail Notification 的功能。(新郵件通知☑ <--- 不要勾)

以上記錄。
--
後記,本來想再上去 pidgin 官網發 feedback ,結果又不巧遇到 pidgin 網站掛點:


好吧,我沉默就是。

2007/07/31

[Linux] Inkscape 中文有問題!


版本 0.45-0ubuntu4 做過 sf.net 上的版本測試: 0.45~ 0.43 全部不行。
一直追溯到 0.42 才能用。

測試方法:
1. 畫一個 text label 內容為 "中文測試"

字體設定為"標楷體"

2. 清除自定字體,只剩下 firefly new sung 和 bkai00mp.ttf 及 bsmi00lp.ttf ,重複上面的測試。

結論:
目前的 inkscape 0.45 版在 Ubunutu 7.04 feisty 上使用有問題。

更新:
晚上在 inkscape 官網的 autopackage 裡面找看有沒有能用的版本,非常幸運的,目前最新的版本是可以用的。
這樣我就不用委屈去用舊版的 inkscape 了。

感謝辛苦的開發人員。

再更新:
subversion 裡面的版本經測試也是可以正常使用的:
svn co https://inkscape.svn.sourceforge.net/svnroot/inkscape/inkscape/trunk inkscape
// 我的插圖都是用 inkscape 畫的。

再再更新:
inkscape 最新版本也解決了快捷鍵的問題。

2007/07/30

[蝦米] 不正式的 UNLiu 表格發表

關於 UNLiu 表格的內容:

1. 最早整理是用 nosee 表格,目前由於該表格授權上有問題,故已將該部份剔除。 anton 未盡察查審核的責任,以致引發爭議或對表格「整理者」的困擾,特此向 nosee 表格的著作權擁有人及整理者道歉。

2. 本表格係由輸入法工具整理而成,在工作的部份可以參考本 blog 文章:製作自已的輸入法

3. 本表格目前暫停下載服務,未來將重新編審常用字的部份提供使用,敬請稍候。

4. 表格的填寫過程將透明公開以昭公信,歡迎指教。

感謝 ileadU 及 funny2005 上的團隊合作造就新的蝦米表格的生命。
目前這份表格的條目數量直逼 10 萬筆。(因為 這個表格還在修增中)

以上表格,感謝名單如下:
常用字﹑次常用字區:
antontw (追補)

funny2005 團隊協助 extA , extB 的部份:
千古罪人 小定 開天闢地 克萊德 kcwu 杏林學子 觀察者 □□□□ □□□
兵燹 等人的鼎力相助! (上面□是:kurasaki ichigo)

另外因為工作進度的關係,所以之前的時程作了點調整,
等暑假過後,才會是 UNLiu 表格由我手上發出的最後一個版次。
不過在這之前,我也只會再在 UTF8 符號表像 音符﹑西洋棋之類的符號上做工。XD
剩下的都是配合 ileadU 那邊的工作。 (真是辛苦他了)

註一:
參考( http://patentog.tipo.gov.tw/tipo/twpat.htm 輸入「劉重次」三個字查詢。 )

公告專利權消滅案件
專利權號數 I035347
專利申請案號 076103932
公告卷號 32
期數 12
申請名稱 漢字數理碼輸入法暨其鍵盤裝置
申請人 劉重次
消滅日期 0921111
消滅原因 未依限繳費(專利權當然消滅)
公告層圖檔頁碼 30

參考連結:
1. UNLiu 的表格製作進度 http://antontw.blogspot.com/2008/11/unliu.html

2007/07/23

[Programming] Xlib 抓 Window Status

Status st;
XWindowAttributes xtt;
st = XGetWindowAttributes(gui->display,gui->keyboard_win->window,&xtt);
if (xtt.map_state==0)
return False;
else
return True;


// 0 是 isunmaped, 2 是 isviewable

2007/07/20

[Programming] 用 Perl 抓 BBS 文章 (bbsget)

今天才發現的工具 bbsget
使用說明:
bbsget [ -d ] bbsname board login[:password] [ recno... ]

範例:
% ./bbsget elixus melix
抓 elixus 站台上的 melix 板最新的一篇文章。

--

嗯,這比 PHPTelnet 好用多了。
不過... 要重溫習一下 perl 了。

2007/07/12

[Programming] 用 PHP 抓取 BBS

用 PHP 抓 BBS 的文章,大概不好抓,除了轉信板的文章之外,好處理的方式可以說幾乎沒有。不過並不是從此絕望了, PHP 有提供 socket 的部份可以應用,以下一個範例:
Class sock
{
var $socket;
var $port;
var $address;

function Connect()
{
return socket_connect($this->socket, $this->address, $this->port);
}

function ReadMsg()
{
$out=socket_read($this->socket, 1024,PHP_BINARY_READ);
$out=iconv("big5","utf8",$out);
return $ans;
}
function SendMsg($msg)
{
$timeout = 30;
socket_write($this->socket, $msg, strlen($msg));
$ans="";
while (1)
{
$out=socket_read($this->socket, 1024,PHP_BINARY_READ);
if ($out=="") $timeout --;
echo ".";
$out=iconv("big5","utf8",$out);
$ans.=$out;
if ($timeout<=0) { echo "break\n"; break; }
if(socket_last_error($this->socket) == 104) echo "Connection closed";
}
return $ans;
}
function Close()
{
return socket_close($this->socket);
}
}

$s = new sock();
$s->port = getservbyname('telnet', 'tcp');
$s->address = gethostbyname('ptt.cc');
$s->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = $s->Connect();
$response = $s->SendMsg("antontw\r\n\r\n");
echo "'".strlen($response)."'\n";
flush();
$result = $s->Close();
?>


然而,我試了幾次,這個範例還不是很好用,直到發現有人開發了 PHP Telnet 這個物件, 似乎又重新打開了希望。

這個物件在測試 SayYa的時候沒有什麼大問題,不過在測試 PTT的時候發生了一些狀況,看起來還是有很多地方要注意。

以下是應用的範例:
require_once "PHPTelnet.php";
function arraytostring($array, $depth = 0)
{
if (!is_array($array)) return $array;
if($depth > 0)
$tab = implode('', array_fill(0, $depth, "\t"));
$text.="array(\n";
$count=count($array);
foreach ($array as $key=>$value)
{
$x++;
if (is_array($value))
{
if(substr($text,-1,1)==')') $text .= ',';
$text.=$tab."\t".'"'.$key.'"'." => ".arraytostring($value, $depth+1);
continue;
}
$text.=$tab."\t"."\"$key\" => \"$value\"";
if ($count!=$x) $text.=",\n";
}
$text.="\n".$tab.")\n";
if(substr($text, -4, 4)=='),),')$text.='))';
return $text;
}
//$out = iconv("big5","utf8",$arr[$i]);

$telnet = new PHPTelnet();
$telnet->show_connect_error=0;
$result = $telnet->Connect('ptt.cc','antontw','密碼!');
if ($result==0) echo "開始下命令\n"; else echo "有錯誤\n";

$telnet->DoCommand('q', $result);
$ans = arraytostring($result);
$ans = iconv("big5","utf8",$ans);
echo $ans;

echo "\n正常退出\n";
$telnet->Disconnect();
?>

2007/07/05

[Linux] Sound Device Programming

先丟參考網址:
http://www.oreilly.de/catalog/multilinux/excerpt/ch14-01.htm

oreilly 線上書籍。

http://www.linuxjournal.com/article/6735
linux journal libasound

http://www.linux.com/articles/113775
幾乎所有的 api/ lib 都介紹到了

Win32
http://www.codeguru.com/cpp/g-m/multimedia/article.php/c1575/

上面的參考資料什麼都好,就是少了 mute 的說明。
mute 以前在 OSS 底下的時候可方便了, 三行解決:

int mute;
ioctl (mixer_fd, SOUND_MIXER_READ_MUTE, &mute);
return mute;


不過現在到了改用 asound ,哇勒真的是麻煩到一整個不行:
// 以下是怕我自已忘掉怎麼做的 sample code ,parse_sample_id 的部份可以參考 amixer.c
// 那段更是長到不行

int
main() {
snd_mixer_selem_channel_id_t chn;
int err;
int psw;
static snd_mixer_t *handle = NULL;
snd_mixer_elem_t *elem;
snd_mixer_selem_id_t *sid;
snd_mixer_selem_id_alloca(&sid);
if (parse_simple_id("PCM", sid)) {
printf("error\n");
return 1;
}
snd_mixer_open(&handle, 0);
if (err = snd_mixer_attach(handle, card) < 0) {
error("Mixer attach %s error: %s", card, snd_strerror(err));
snd_mixer_close(handle);
handle = NULL; return err;
}
if ((err = snd_mixer_selem_register(handle, smixer_level > 0 ? &smixer_options : NULL, NULL)) < 0) {
error("Mixer register error: %s", snd_strerror(err));
snd_mixer_close(handle);
handle = NULL;
return err;
}
snd_mixer_load(handle);
elem = snd_mixer_find_selem(handle, sid);
if (!elem) { printf("No ELEM!!!!sid='%d'\n",sid); return err; }
printf("Simple mixer control '%s',%i\n",
snd_mixer_selem_id_get_name(sid),
snd_mixer_selem_id_get_index(sid)
);
chn = 0;
snd_mixer_selem_get_playback_switch(elem, chn, &psw);
printf(" [%s]\n", psw ? "on" : "off");

snd_mixer_close(handle);

return 0;
}

2007/07/04

[Linux] Linux 上的台股看盤軟體

嗯... 其實是沒有! ☔ :<

不過如果就這樣放棄,就不足以稱作一個有勇有謀的 Linuxer 了。
所以藉由 wine 的幫助,我們可以很輕鬆的在 Linux 上面再安裝一些 win32 的看盤軟體來操作。以下是實行畫面 (因為某些原因,所以作者看盤只能偷偷看 .... XD)



以下是建議的安裝流程,雖然是用 wine 來跑,但是官方的 ii wine-0.9.39~winehq0~ubuntu~6.10-1
跑的讓人很火大,所以筆者用了暗步,把 ie4linux (ie6) 先裝起來,再來在裡頭跑 日盛 HTS 的看盤/下單軟體,就可以了。

更新:

實際的動作其實很簡單~
$ export WINEPREFIX="/home/anton/.ies4linux/ie6"
$ wine HTS_Plaitumn.exe

這樣就可以了。

2007/07/03

[Linux] 輸入法的設定

// 我習慣先說一大堆再來實作,所以不看的人,請按 END

其實現在的 (至少fc5以後), ubuntu 6.10 以後都已經實做了 im-switch, 所以 exportXMODIFIERS 跟 GTK_IM_MODULE 的做法有時反而造成負擔。

im-switch 的做法是:
建立 ~/.xinput.d/ 在底下依據 locale (如 zh_TW, zh_CN 建立備份及目前使用的輸入法) 的目錄,用這個目錄來存輸入法設定的資料。 如此,可以在同一個 wm 底下開一個日文 console 時用日文輸入法 (ex: kinput),開繁中用 gcin/oxim/scim, 開簡中用 scim/拼音 等等,不必強求一個輸入法要滿足各種語言上的功能需求。


im-swicth 使用說明:
1. 列出目前可以使用的輸入法及預設設定:

im-switch -l
// 預設使用
=======================================================
The configuration "/home/anton/.xinput.d/zh_TW" is defined as a link pointing
tooxim
This private configuration supersedes the system wide default.
// 系統預設使用
=======================================================
The system wide default is pointed by "/etc/alternatives/xinput-zh_TW" .
xinput-zh_TW - status is auto.
link currently points to scim-chewing
scim-chewing - priority 50
scim - priority 50
scim-immodule - priority 0
Current `best' version is scim-chewing.

// 可用列表
=======================================================
The available input method configuration files are:
default none oxim scim scim-chewing scim-immodule scim_xim th-xim

設定方式:


im-switch [-v][-z ll_CC] -s inputmethodname

例如:

$ im-switch -s scim-immodule (將使用 scim 的 immodule 輸入法)
(default 設到目前使用的 locale)
$ im-switch -z zh_CN -s oxim (將 oxim 設到 zh_CN 時使用的輸入法)


以上,所以在沒有 export 前文提到的 XMODIFIERS 跟 GTK/QT_IM_MODULE 時,用 im-switch 是沒有太大的問題的,但是如果有在 .bashrc 底下做時,開新的 console 就要小心一下。

2007/06/28

[Linux] grub-reboot 有問題 (Ubuntu Feisty 7.04)

好吧ㄧ這問題很蠢,不過呢,我花了很多時間去嘗試。

為什麼呢? 因為 man grub, grub-reboot 和 google "grub" "grub-reboot" 一直都沒有解答,只有一堆抱怨:

抱怨一
抱怨二 [Cooker] [Bug 1648] [grub] Reboot command doesn't work with dm
抱怨三 摩托學園

好吧,都沒有人發現怎麼解決問題。

直到我抓了 grub 的 source code 下來看了一下...
疑…? 有 savedefault 的選項啊... 也有 --once 啊....

然後回到 grub menu 試了一下…

結果證明:

grub> savedefault --default=1
這樣是不行的
得下:
grub> savedefault 1
另外 --once 得下
grub> savedefault 1 --once
才行。

grub-reboot 因為是個 shell script,所以簡單的修改一下就可以動了。

嗯…結論:
2009-06-06 更新:
Ubuntu 9.04 測試 grub-reboot okay.

[Linux] OXIM 介紹兼 Ubuntu 7.04 成功安裝實錄

介紹看這裡 ,作者螢火飛寫的很清楚,我就不用再錦上添花了。
僅列出它的優點:
1. 系統匣(System Tray)快速設定,不用再找來找去。
2. GTK 游標跟隨﹑介面精簡美觀。
3. 可輸入 CNS11643 全字庫的字 (這應該是 table 的 feature)
4. 打簡出繁﹑打繁出簡 (僅指新酷音引擎)不限輸入法
5. 符號輸入表
6. 美觀的螢幕小鍵盤 *
7. 提供 xcin 簡單的外觀
8. 簡易的輸入法安裝方式 (網路跟本機都可以,只需點點點Click*3就可以完成一個新的輸入法的安裝)
9. UI 外觀快速設定

Okay,上面都是它的優點。
缺點在哪裡呢?

1. 網頁上面只有 cvs oz裂 tarball 下載
2. FreeDesktop 只提供 rpm 下載

嗯... 這些都不算太麻煩:
在 Ubuntu 上面碰到最大的麻煩應該是在 configure 檢查的時候就跑出來的問題:
checking for qmake... not found!
checking for uic... not found!
checking for moc... not found!
checking for qinputcontextplugin.h... not found!
configure: error: Can't find QT build tools! Plese set with-qt-dir="Your QT install root PATH"


官方 的說法 應該是:
要編譯新版的 oxim 您必須安裝 qt 的開發套件,一般而言,都是叫做qt-devel-x.y.z 的套件名稱。


不過顯然不是這麼簡單就可以解決。 (不然我幹嘛寫這篇?)

來看一下 configure.ac 怎麼寫的:
echo "$as_me:$LINENO: checking for qinputcontextplugin.h" >&5
echo $ECHO_N "checking for qinputcontextplugin.h... $ECHO_C" >&6
if test -f ${qt_dir}/include/qinputcontextplugin.h ; then


嗯,好,這樣應該就知道原因了:
就是 Automake 檢查沒想到跟 fc/redhat 上的檔案結構不一樣,所以死也檢查不到它需要的 qmake/uic/qt*.h 檔

解法: (不想改人家的 code)
1. 下載這個包,解到你的 /usr/include/qt3_dir ,再 ./configure --with-qt-dir=/usr/include/qt3_dir 就解決了。
2. mkdir /usr/include/qt3_dir/include -p
再 cd /usr/include/qt3_dir/include ; lndir /usr/include/qt3/ .
再 ln -s /usr/share/qt3/bin /usr/include/qt3_dir/ 就好了

另外, configure 時指定的 $prefix 在 make install 時也失效了。
所以.... 需要的人再找一下。

--

後記,我這篇不是在抱怨,只是留個註記,希望有需要的新手 google 時能 google 得到這篇,這樣就不用像我一樣花時間到處找問題。另外 oxim 還是相當適合台灣人使用的 Linux 輸入法。

2007/06/21

[Firefox] 語系轉換工具 Locale Switch

Locale Switch 的作者網頁在這裡
中文說明可以參考這裡:

有了 QLS 的話!你會發現在 Fx 的選單工具列的「工具」項目下,多出了一個「 Quick Locale Switcher 」的項目,裡面便有許多語系可供你切換了。(要切換前,你須要先下載語言包,後面會告訴你該到哪找。)

覺得 QLS 的選單中可選的語系太多讓你眼花的話,可以在 Fx 的選單工具列的「工具 → 擴充套件」中,找到「 Quick Locale Switcher 」的項目進行設定,或是在「工具 → Quick Locale Switcher 」中,也有個選項的項目可供你進行設定。
只要在『選擇你想要表示在選單中的項目。』的設定中勾選所需顯示的再按『套用』就好。
(你也可以在此設定選單中進行設定,讓你所自製的語言包也顯示在 QLS 選單中。)

在切換語系時,會問你是否要立刻重新啟動瀏覽器,各位可以視個人需求來處理。


另外 ff 1.5 的使用者可以參考lancetw 這裡

目前我的版本是 1.5.0.6,往後出新版本時請自行下載合適的版本安裝。
到這裡下載 zh-TW.xpi。

不過他的 zh-TW.xpi 我沒辦法用,應該是因為 firefox 版本的關係,所以我下載了他的 xpi 再根據 ff 官版的 zhTW.jar 替換過來使用。

這裡可以下載我改過 firefox 2.0.0.4 合用的 zh_TW.xpi

todo:
接著來做義大利文的給小朋友?

2007/06/15

[Google] Google 好色

繼學長﹑學姐﹑不可以等 18 禁的關鍵字之後,早上又發現了"岳母"也是 18 禁的關鍵字。



嗯,Google 好色。

2007/06/09

[Gmail] Better Gmail Firefox 延伸套件介紹

這篇應該算是翻譯文章,不過還是在這裡做一下最近看到一些文章的心得(不喜歡指明道姓,這樣擺明想挑戰):
我覺得火狐狸就像是一個大玩具上面可以放很多適合自已玩的積木,所以如果你懶,可以少放一點積木,當然沒問題,但是如果你放了一大堆東西,又說這個玩具放了一大堆之後很難玩,我覺得這似乎很…難說得過去。又譬如電腦系統裝了一大堆垃圾,自然跑得慢,這是再簡單不過的道理;但是如果你要因為自已裝了一大堆垃圾就說這個操作系統爛我就覺得這是白爛。

良心的建議:火狐狸還是裝十個左右的延伸套件就應該差不多了,如果超過,你應該先檢討一下,是不是有久久不用的延伸套件在那裡一直占用著這個軟體的效能。

今天要來介紹的套件是 Better Gmail,它的特點如下:
* 在 Gmail 裡用等寬字型(這點在 BBS-like 的文章裡蠻有用的)
* 用快捷鍵 Ctrl + Shift + T 縮網址
* 把 Google 行事曆也放做資料夾其中之一
* 自動在 email address 前面加上 Gmail 的寫信連結
* 較大的附件圖檔,這樣一看就知道別人寄到你的 Gmail 裡的附件是圖還是 pdf 還是什麼其它的。
* 三個 Gmail 的佈景主題: SuperClean, AirSkin, Revisited
* 保存你搜尋過的郵件的搜尋條件設定
* 還有一堆有的沒有的巨集指令

值得一用吧?

2007/06/08

[FVWM] 小密訣 AllToDesktop

自從用了 fvwm-crystal 這個 fvwm 的 branch 之後,一直有一個東西很困擾我,就是:
桌面的左下角沒有類似 Windows 的 [Dekstop] 按鈕 (快捷鍵是: CTRL + ALT + d 或 Windows + D)
不過今天試一下 Fvwm 的快捷鍵設定,其實還蠻方便的:
不像我之前說的那麼複雜,果然還是可以在使用者偏好 目錄底下設定就解決了:

key F A CM Fullscreen
# 全營幕
key d A CM All (!Fvwm* !panel) Iconify
# 就等同 windows 的 desktop 按鈕
Key t A CM Exec gnome-terminal
# 跑 term 出來
Key k A CM Exec xscreensaver-command -lock
# 鎖 screen
key Up A C Exec /home/anton/bin/vol 2+
# 加音量
key Down A C Exec /home/anton/bin/vol 2-
# 減音量
key F4 A M Close
# 這個是我的習慣 ,不過失效中

2007/06/06

[Linux] PCManX for Firefox plugin 更新

這裡下載

補說明:

這個 extension 不用 root 權安裝,不用修改設定。
只會影響單一使用者。
理論上有裝 pcmanx 的話,裝完 xpi, 重開 firefox 就可以使用。
不過在 plugin.so 的部份因為平台差異(?)的關係,
所以可能(?)拿到別台機器上面就不能用。
我的環境是 Ubuntu 6.10 Firefox 2.0.0.3

2007/05/29

[ffmpeg] 從 Youtube 上面抓影片下來轉成 mp3

這個,先說明在 Linux 上面比較好做。
不過 ffmpeg 也有 Windows 版的。

簡單的說,用這篇提到的 Youtube Downloader (其實就是 video downloader 的簡單化動作)下載影片下來。

理論上會得到一個 flv 檔。
接著就下:
ffmpeg -i video.flv -f mp3 test.mp3


就行,如果有需要可以用 -ss (從何時開始) + -t (延續多久)來剪掉部份的聲音。

ffmpeg -i get_video -f mp3 test.mp3 -t 157
就是只剪 157 秒的聲音下來。

以上簡單記要。

[Firefox] 快速工具列


一開始是從 zonble 大神那裡看到這種玩法:
簡單的說,就是直接點工具列上的按鈕,就可以呼叫某些網頁,讓它們幫你做翻譯﹑縮網址等等工作。因為一個 click 就完成,所以感覺起來就像是自已的功能鍵一樣。

這裡下載
使用方式是:
1. 右鍵下載下來。
2. 解壓縮
3. 檔案功能表 -> 書籤 -> 檔案 -> 匯入

再把這個資料夾拉到你的快捷工具列上就可以。

目前有:

1. 翻譯功能:
中翻義﹑義翻中﹑日文﹑法 ... etc 太多了懶得寫。
2. 縮網址 tinyurl , 0rz, orz
3. Youtube download (代替 videodownload 那個 extension)

[Bash] 怎麼判斷一個字串輸入是否為數值?

怎麼測試一個 string input 進來是不是整數?
這裡提供兩個方法:

1. 用 sed

2. 用
is_num() {
 [ "$1" -eq 0 ] 2>/dev/null
 if [ $? -ge 2 ]; then
  echo "$1 不是整數"
 else
  echo "$1 是整數"
 fi
}

不過後來找到一個更好的
echo $a | grep -Eq '^-*[0-9]+$' && echo 'bingo!'


這招不錯推。

2007/05/25

[Linux] 簡單的 port forward 工具

嗯.. iptables 功能很強大大家都知道。

不過 rules 不是那麼好設定。

且沒有 root 權什麼都不能做。

所以有 redir 這個小工具(加起來不到 50k)的幫忙,這種簡單的 port forwarding 設定就可以不用用到 iptables 這隻牛刀了。

以下是簡單的範例:

$ redir --lport 10022 --caddr=192.168.0.10 --cport=22


把 localhost 的 10022 port 轉向到 192.168.0.10 的 port 22 上面。
另外還可以加上 bandwidth 等等設定在裡頭。

嘖嘖嘖,只能說 Linux 真是好物啊~

--
註: Ubuntu 上面只要 apt-get install redir 就可以安裝了。

2007/05/24

[Linux] 圖解 Screen 教學 [一] 基本應用篇說明

Linux Journal有篇文章也有介紹 Screen 。
多好用呢?

我一開是為了離線工作,還有爛爛的網路才學這個東西的,但是其實它的功能不僅僅如此:

1. 提供離線繼續工作。
2. 多視窗(Window)工作
3. 營幕切割(Region Split)讓你可以不用切換來切換去。
4. 編碼自動轉換

上面的功能可能要自已真的去用才有深刻的體會,本篇只先來介紹怎麼使用,另外附上筆者目前在用的 .screenrc 跟 .bashrc 裡頭的修改,有需要的人請自行下載回去,放在自已的家目錄裡頭,就可以有跟筆者一模一樣方便的 screen 環境可以使用:
1. 先開一個 terminal 像是 gnome-terminal (用 pietty/putty 連進來也算)
2. 打 screen 開始使用,接著會出現 screen 的版權頁。

按 space 就可以繼續
3. default 沒有設定的話, screen 只會為你先開一個 window
接下來如果要再開新的 window 就要按
Ctrl + a 再按 c
就可以 Create 一個新的視窗。


4. 如果要在視窗之間切換可以用

Ctrl + a 再 n #就可以跳到 下一個(Next)視窗


如果是上一個視窗,可以用

Ctrl + a 再 p #就可以跳到上一個(Previous)視窗

5. 如果嫌麻煩可以按

Ctrl + a 再 " #就可以得到視窗列表

如果嫌慢,就把視窗號碼記住,用

Ctrl+a 數字 [0-9] #來做視窗跳躍



6. 如果還沒做完一樣工作,像是一邊還在 wget http://xxx.edu.tw/pub/linux/xxx.iso
現在想離線,但是又想讓這個工作做完怎辦?

當然你可以先給個 break ,再用 wget -b -c http://xxx.edu.tw/pub/linux/xxx.iso 解決,
但是如果你用 screen ,我就會建議直接

Ctrl + a 再 d #意思是 detach 。

下次連線進來再

screen -R session-name # Resume session
就可以。
如果不知道 session name ,可以用

screen -list

列表出來。


接著要介紹 region 的用法:
在修改 某個程式時,一邊還要再 refer 到 header include 的檔案,這種情況大家都遇過吧?
這時應該很希望可以切出兩個 display ,一邊看一個。 (哎呀... xorg 可以做雙營幕,好像比這個好多了.. 但是不是每個人都很有錢,可以配雙營幕。)
所以只好按下

Ctrl + a 再 S #(大寫的 S)


就會像上面那樣把營幕切成兩半 (按愈多切愈多)

接著要使用這個 region 就得按

Ctrl + a 再 tab #先把 focus 跳到下一個視窗
,再按

Ctrl + a 再 c #(建立) 新視窗,或著 號碼跳選其它視窗。



--
附錄 一:
screen 查詢快捷鍵:

Ctrl + a 再按 ?



附錄二:
我的 screenrc

wget http://anton.tw.googlepages.com/screenrc -O ~/.screenrc


附錄三:
screen 自動使用目前在跑的程式當作 title 需修改 .bashrc 的部份

export PS1='\033k\033\\\\${debian_chroot:+($debian_chroot)}\u@\[\033[01;34m\]\h\[\033[00m\]:\w$ '


附錄三:

Ctrl + a 再 Q #可以關閉所有的 region
Ctrl + a 再 X #可以關閉目前的 region


updated: 2007-11-06 更新 PS1 的部份,有些 TERM 上面表現的很難看。

2007/05/23

[CUPS] 如何在 CUPS 新增印表機?

CUPS是 Linux 上面一個很好用的印表機管理系統。
但是很多情況下其實是蠻無奈的方案,因為和 Windows 上的印表機表現相比, Linux 上的印表機常常是又慢又沒什麼功能;這時 CUPS 的表現就成為"最後一個浮在水面上的救命稻草"。

意即:如果還不行... 就認了吧?

CUPS 預設運行在 http://localhost:631/ ,你應該需要先安裝 cups 相關的套件。
除此之外,如果是 HP 的印表機,建議安裝:

hpijs
hplip
hplip-data


1. 第一步: 連上系統,在 firefox URL bar 打下 http://localhost:631/



你會看到在 Administration 點進來右上角有 "New Printers Found:"
底下就 是目前發現到有新的印表機可以選擇加入;如果不在裡面,請記得先確認印表機電源有打開。 XD

2. 第二步: Add Printer 新增一台印表機:



上面這張圖除了 Name 需要特別記住,其它的 location (地點) 跟 description (說明) 都不是很要緊。

3. 第三步: 選擇裝置:

這裡就是看你用 usb 還是用網路印表機,點下去就有清單,如果是用 usb 的,但是沒列出來,最好確定一下你的印表機有辦法讓 linux 抓到,再不行,也只能找 printer server 來裝。


4. 讓印表機可以運作:

這裡建議是用印表機的牌子,像 HP 就用 HP 的。
如果後面找不到型號才來用 "RAW"。 RAW 最大的缺點當然是「慢」。
另外如果牌子很少,沒什麼選擇,應該是少裝了一些套件,像:

cupsys-driver-gimpprint
cupsys-driver-gutenprint
之類的,不是很肯定…錯了,請再跟我糾正一下,感謝。

5. 選擇適當的驅動程式:

如果前面選了 HP 這裡就會列出型號出來,有裝
cupsys-driver-gimpprint
才有 gimp print 的支援。

如果是用 RAW mode ,當然就只有 RAW queue 可以選了。

下一步,就是建立完成了。
其實循序下來還蠻簡單的。


另外,通常我們建好 printer , cups daemon 有在跑, firefox/ooo 就可以很直覺的在 print 選單裡面看到印表機可以選。

如果在文字模式底下,是用

$ lpq
HP2200 is ready
no entries
來檢視目前印表機的狀態。


$ lpstat -a
HP2200 accepting requests since 西元2006年12月13日 (週三) 10時14分02秒
Ricoh350 accepting requests since 西元2007年04月24日 (週二) 10時42分09秒
來檢視目前印表工作的


lpr < xxx.ps
直接送 ps 到 printer 列印。

另外要附註的是,因為某些原因,在部份的 debian 版本上面的
lpq or lpr 不是 CUPS 的 ap ,所以建議 cups 命令有問題時也檢查一下:

$ dpkg -S `which lpr`
cupsys-bsd
如果是 cupsys-bsd 才是本文所提的。

[StarDict] 字典格式

最近又想搞 stardict 的程式出來,所以翻了 SayYa 上面自已以前寫的舊文:

嗯,這個內容是從 stardict/src/tools/DICTFILE_FORMAT 得來的,
由個人加以翻譯、潤飾跟簡化,所以如果有不對的地方,請指正。

stardict 有三種檔案:

1. a.ifo

2. a.idx

3. a.dict

ifo 放這本字典的 information
idx 放 wordlist 的 index
dict放 wordlist 拉過來的 word data

如果你看到 idx.gz 或 dict.gz 那是因為 stardict 可以接受壓縮格式的關係。


.ifo 裡面放
StarDict's dict ifo file
version=2.4.2
[options]

注意 version 的部份, 2.4.2 的 stardict 會去偵測 dict 是不是 for 2.4.2
的版本,如果不是就會拒絕存取。/* 按: 似乎到了 2.4.3 就不是這樣 */

有用的選項表列如下:
bookname= //required
wordcount= //required
idxfilesize= //required
author=
email=
website=
description=
date=
sametypesequence= //非常重要

wordcount 是每筆 word 記錄的總和,必須是正確的,不然會出問題。
說明中提到,為避免不斷的 realloc 降低軟體效能,
所以加入的 idxfilesize 是 idx (解壓縮後)的大小。

sametypesequence 可麻煩了,
你可以在 dict 中放入很多筆 wav 檔案記錄,
然後在 sametypesequence=W 接著,
dict file 在處理時就會忽略 'W' 這個字元。

再另外一個常見的情況做為例子:
你可以設做:
sametypesequence=tm
這樣每個字在 dict 檔裡的處理就會忽略掉 't' 和 'm' 字元,
此外,以 '\0' 和 'm' 結尾的輸入也會被當作每個記錄的結尾。


.idx 是生字清單

它會依序存放在這個檔案裡頭,每筆記錄應作下列格式:

word_str; (utf8 charset 並且以 '\0' 做結尾。)
word_data_offset;
word_data_size;

[Freemind] 0.90 beta 9



LinuxToy提到 Freemind 已經 release 到 0.90 beta 9 了。一直都有在用這個心智工具的我當然不會放過再去看看的機會。

更新的內容摘要:
* 全新的圖案
* 編輯環境的加強
* 加強屬性功能
* 導入/導出部份的加強
* 日程圖

完全不了解什麼是 FreeMind ,或只想看一下「心智圖長什麼樣」的人,可以先看一下這裡

--
安裝嫌麻煩嗎?
FreeMind 的官網上面有提到 debian/Ubuntu 系列的安裝方式

deb http://eric.lavar.de/comp/linux/debian/ version/
deb-src http://eric.lavar.de/comp/linux/debian/ version/

version 的部份可以用 "unstable" 或 "experimental"
不要忘記最後的 "/"

接著下 apt-get install freemind 的就可以。

2007/05/21

[linux] 用 mplayer 抓影片長度

這招要感謝同事山姆的貢獻:

$command = "mplayer -identify b.mpg -endpos 1 2>/dev/null -ao null -vo null |grep ID_LENGTH|cut -d \"=\" -f 2";

exec($command, $out);
echo strftime("%H:%M:%S\n",$out[0]);


這樣上傳的影片就不用再靠使用者點 plugin 了~

[Windows] 免費的防毒軟體

avast是一款免費的防毒軟體。

它提供免費的家庭版(包括病毒碼跟防毒程式),每 16 個月需要 renew 一次註冊碼,

但是註冊碼的需求只是一個信箱地址,所以感覺還不錯,也比 google 和 norton 的那個版本好。

(話說 google download 上面的 norton 好像已經消失了?)

在上週發生的事情之後,我把老爸的 windows 換了這款防毒軟體。

果然如我所料,四天過去了,還是什麼事情都沒有。

2007/05/13

[Linux] DVD Movie ISO 在 Linux 上怎麼看?

唔... 這個問題在 Windows 上面的話,我會想說從 daemon tool 或 nero/酒精軟體著手。
也就是先 mount iso 起來,再用 realone 或 mediaplayer 來播之類的。

在 Linux 上面怎辦?

這樣?

$ mount xxx.iso -o loop mount_point ?


Uh... 絕對不是。

答案是:

mplayer dvd:///media/usbdisk/movie1/XXXX.ISO

如果有播放字幕的需要,請記得在 ~/.mplayer/config 加上

subcp=cp950
unicode=yes


及在 mplayer 參數多加一個 -sid n 來指定語系。

--
更新:
補一點『如何找出 sid 』
我的解法是: 用 mplayer -identify DVD.iso 先去看一下 sid 有哪些,再去

[Linux] 中文語音方案

Linux 上面的中文語音一直沒有很好的解決方案。靠著 gcin 作者 Edward Liu 提供的開發程式一組男聲,總算有了一個好的開始。

另外,小弟想起 festival這款語音合成軟體。因為這個東西跟目前的男聲檔可以當作一個很簡單的語音合成工具
裡面現在有 pho.tab.src 這個用來 parsing 中文的注音檔。另外也需要 php 跟 sox 的支援。

不過總算是可以勉強唸唸中文了 :D
使用方法:

speak "中文測試"

[Linux] ntfs-3g 顯示中文

ntfs-3g是 Linux 上面用來解決 ntfs 檔案系統的讀寫問題方案。是的,它是 GPL 的授權,所以任何人都可以免費使用它。

安裝的部份可以參考「阿駕零零壹」上的說明:

# sudo apt-get install ntfs-3g
# sudo mount -t ntfs-3g /dev/sda1 /media/disk -o locale=zh_TW.utf8,silent,umask=0
fstab 書寫
# /dev/sda1 /media/disk ntfs-3g silent,umask=0,locale=zh_TW.utf8


至於阿駕提出的「如何讓 removable storage device 」可以自動掛載的方法,應該可以參考:huangjiahua 上面所提出來的方法,簡單的說,就是修改 Hal 底下的 policy 。

2007/05/05

[Firefox] 神奇的玩意兒, Windows 也適用。

真的假的,這麼神奇?
多神奇自已來看一下。

簡單的說:
1. 如果你是一個 mozilla/firefox 工程師。
2. 如果你對 firefox 開發有興趣。
3. 如果你常寫 html/js 苦於沒有合適的 debug 工具。 (firebug當然也是一推。)
4. 無聊到沒時間打發。

那你可以試試看這個新玩意兒

讓你可以用 telnet 的方式連進你的 firefox/mozilla 協助處理網頁/browser 內部的行為。

[tomboy] make 時有問題

** (/usr/lib/mono/2.0/gmcs.exe:23261): WARNING **: The following assembly refere
nced from /usr/lib/mono/gac/gdk-sharp/2.10.0.0__35e10195dab3c99f/gdk-sharp.dll c
ould not be loaded:
Assembly: Mono.Cairo (assemblyref_index=2)
Version: 1.0.5000.0
Public Key: 0738eb9f132ed756
The assembly was not found in the Global Assembly Cache, a path listed in the MO
NO_PATH environment variable, or in the location of the executing assembly (/usr
/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0).


上面這一段很多人在 make 時出錯都沒注意到。
tomboy 的相依套件裡也不會提到這點。

簡單的說,這個問題是可以理解的。
但是不能不做個 note 提醒一下。

anyway,

apt-get install libmono-cairo2.0-cil

就可以了。

2007/05/01

[Google Notebook]

我(目前)沒有用 google notebook 的習慣,所以當它問我要不要安裝它的延伸套件的時候,我猶豫了一下,不過還是裝來看看。

總之,這裡有張縮圖:


感覺起來比以前好用。但是我現在都是用 tomboy+ rsync來 做個人筆記的工作。所以也沒什麼感想可以 po 啦,只是想說,現在已經愈來愈趨向是 firefox + xpi + google service 了。

2007/04/30

[GTALK] 為什麼沒有傳送檔案的選項?

這兩天又搞起了支援 gtalk 機器人新功能的開發,結果在group底下看到這篇提問,才想起來:「對喔?為什麼我的 windows 底下的 gtalk 選單裡頭,沒有傳送檔案的選項?」可是明明在 gaim 的 xmpp console 底下可以很清楚的看到 中文和英文的 protocol 並沒有任何差別,我自已用 gaim 也可以很輕鬆的把檔案傳給 windows 上的 gtalk 使用者。

摘要:
1. gaim 可以很輕鬆的傳送檔案 (有 win32 版本,想要用的人,推薦這款軟體)
2. protocol 本來就無差別

那麼,結論就是: google 工程師很懶。



2007/04/27

[TWRADIO] Linux 收音機


svn co https://OpenSVN.csie.org/twradio/trunk twradio
make
./twradio
# 只相依 mplayer


這是之前 pcman 寫的 hinet_radio 的程式。
因為 hinet 有些變動,所以我有再修改 access url 的部份。

另外也更新了 list ,讓我自已常聽的新聞網的部份加進去。

2007/04/26

[FVWM] Key Bind 說明

我先假設這篇文章是寫給像我一樣笨看不懂 fvwmrc 官方說明文件 的人。

因為如果你要看得懂上面的文件,你需要了解幾樣東西:
  1. xmodmap
  2. Xorg.conf
  3. /usr/include/X11/keysymdef.h
  4. fvwmrc key binding section
官方的說明在 key bind 的部份是這麼寫的:
BUILT-IN KEY AND MOUSE BINDINGS The following commands are built-in to fvwm: Key Help R A Popup MenuFvwmRoot Key F1 R A Popup MenuFvwmRoot Key Tab A M WindowList Root c c NoDeskSort Key Escape A MC EscapeFunc Mouse 1 R A Menu MenuFvwmRoot Mouse 1 T A FuncFvwmRaiseLowerX Move Mouse 1 FS A FuncFvwmRaiseLowerX Resize Mouse 2 FST A FuncFvwmRaiseLowerX Move AddToFunc FuncFvwmRaiseLowerX + I Raise + M $0 + D Lower The Help and F1 keys invoke a built-in menu that fvwm creates. This is primarily for new users that have not created their own configuration file. Either key on the root (background) window pops up an menu to help you get started. The Tab key pressed anywhere with the Meta key (same as the Alt key on PC keyboards) held down pop-ups a window list. Mouse button 1 on the title-bar or side frame can move, raise or lower a window. Mouse button 1 on the window corners can resize, raise or lower a window. You can override or remove these bindings. To remove the window list binding, use this: Key Tab A M -
很簡單的給你例子: Key KeyName A M FunctionName 如果你要做一堆東西,就用 Function 串這些動作。 如果你要移除這個 Key Bind ,請用 Key KeyName A M - 就可以。 嗯,問題來了: Q: KeyName List 在哪裡? Q: A M 是什麼東西? 第一個答案,在 comment 裡面有寫到:
SelectOnRelease takes an optional key name as an argument. If the given key is released in a menu using this style, the current menu item is selected. This is intended for Alt-Tab WindowList navigation. The key name is a standard X11 key name as defined in /usr/include/X11/keysymdef.h, (without the XK_ prefix), or the keysym database /usr/X11R6/lib/X11/XKeysymDB. To disable this behavior, omit the key name.
簡單的說,"請參考 /usr/include/X11/keysymdef.h" ,但是相信我,如果你去那裡看就能看得懂,那你真是個天才!!! 正解(?)應該是請參考 xmodmap ,用 xmodmap -pk 顯示目前 X 使用的 xmodmap list 來加入 keyname ,並且這個 keyname 應該符合 /usr/include/X11/keysymdef.h 的定義。 另外在 A M 的定義上面: A 且當它是 And 的意思。(心虛) M 是 Modifiers 的意思: # Here you can easily change modifier keys: # N - no modifier (none pressed) # A - any modifier (0 or more) # S - Shift key (Shift_L) # M - Meta or Alt key (Alt_L) # C - Control key (Control_L) # 4 - Windows left key (Super_L)

[Pidgin] 改名風波

Gaim 的改名風波還沒結束,光是網址的部份就要花很多力氣,像是 http://www.gaim.im/ 改作 http://www.pidgin.im/ ,到 sourceforge 上面重新註冊一個新的,一大堆說明文件﹑技術發展文件統統都要改。

這些力氣都花下去之後,接著程式碼裡面的部份也要改 "libgaim" 不能用了, 那個 icon 會不會被人家告,我不確定,但是長得這麼像…呃,最好還是改一下比較好吧?

順便提醒一下,因為長久以來我都是用 svn 版的 gaim ,今天早上 update 時才發現 svn url 已經變了:

svn co https://svn.sourceforge.net/svnroot/pidgin/trunk pidgin


還在用的同學要注意一下。

5/5 Update: 5/1 有去 pidgin 看了一下,結果好像都改用 monotone 來做版本管理了。svn 裡也有秀出來停用的告示。

[GoogleMap] 推出台灣地圖集

看起來中文顯示的部份沒有多大的問題,不過在索引的部份還是有很大的問題,像是找「板橋」結果只有東京板橋區,找新莊﹑三重就不用說了。

下圖我找的是「三峽」結果是完全沒找到。

可三峽還是堂堂一個台北縣的"鄉鎮"級都市。



另外也有 ptt的鄉民提到:
hybrid 模式底下有扭曲的情況,找屏東市,結果 location 定位在大同高中。

嗯... 問題看起來是不少,不過總比 urmap一家獨大的好。

[Screenrc] 不錯參考的 screenrc




caption always "%{= bk} %{= bY} [%n]%t @ %H %{-} %= %{= bR} %l %{-} | %{= KG} %Y-%m-%d %{-} "
hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %0c:%s "


每天工作的 blog 上面看到的。

雖然 ctrl + a , N 可以提示你目前的 window number ,
雖然 ctrl + a , " 可以出現 window list,
總是不如 window 直接告訴你它是 Nth 個 window 來得乾脆。

所以這段 screenrc 就被我吸收掉了。

update:
增加了截圖,修改了顏色的部份,因為我還是喜歡 caption 的地方表現的像是一條 toolbar 。

[Blogger] blogger.com 授權方式改變了嗎?

早上一來看其它人的 blog ,看到篇文章還不錯,想來做個 note 記錄一下,結果一登入 blogger 就看到這個畫面:



哇勒?這是怎麼回事? blogger 要改用 apache auth 的方式了嗎?
還是我的 gmail account 可以進到 blogger 的管理後台?

(以上全是想像)

不管,反正先做個 note ,blogger 有趣的地方還很多吧?

2007/04/25

[ASVN] svn 權限保留問題的解決方案

最近在搞 svn 的部份,想把整個系統丟進 svn 裡面來玩。
一來可以解決版本控管的部份,二來誰改了什麼東西會比較清楚。
不過 svn 沒辦法保留權限, check out 之後,統統都是原來那個使用者的 ownership ,且 permission 的部份也都變成 mask 的值。

所以去 svn 官版有看到: asvn 的解決可能。

簡單的說 asvn 的使用方法是:

1. 把 asvn 丟到 /usr/local/bin 底下去
2. 修改 asvn 裡面 SVN 的路徑,預設是指到 /usr/local/bin/svn
3. alias svn='asvn'
4. 其它的 import , ci , up 都比照 svn 的用法。
它只是做 svn 的 shell 而已。

[Programming] XFakeKey

參考這裡的文章,調整了一點點,讓 XFakeKey 可以再隨意調用出自已想要的 keycode :

#include
#include

#include
#include

// A full list of available codes can be found in /usr/include/X11/keysymdef.h

// Function to create a keyboard event
XKeyEvent createKeyEvent(Display *display, Window &win,
Window &winRoot, bool press,
int keycode, int modifiers)
{
XKeyEvent event;

event.display = display;
event.window = win;
event.root = winRoot;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
event.keycode = XKeysymToKeycode(display, keycode);
event.state = modifiers;
if(press)
event.type = KeyPress;
else
event.type = KeyRelease;

return event;
}

main(int argc, char *argv[])
{
int keycode;
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;

keycode = atoi(argv[1]);
if (keycode>65535||keycode<=0) return -1;
// Get the root window for the current display.
Window winRoot = XDefaultRootWindow(display);

// Find the window which has the current keyboard focus.
Window winFocus;
int revert;
XGetInputFocus(display, &winFocus, &revert);

// Send a fake key press event to the window.
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, true, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Send a fake key release event to the window.
event = createKeyEvent(display, winFocus, winRoot, false, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Done.
XCloseDisplay(display);
return 0;
}


// 其實是因為 fvwm 的關係,所以想要用 key 綁音效的效果出來,但是 fvwm 的 FvwmFakeKey 有限制,所以還是自已來做 FakeKey 比較快。

2007/04/18

[Linux] Fvwm-crystal

LinuxToy 上面介紹的樣式還蠻好看的。

在Ubuntu 底下很簡單的下 apt-get install fvwm-crystal 就可以了。

不過接著下來有點中文方面的問題,因為預設的字體不是中文。

不過還好,這個只要調整字型設定就可以。

麻煩的是:

1. 快捷鍵的設定
2. autostart 的設定

還好拜 google 的方便,蠻快就找到答案了:

這裡有提到:
修改 File: ~/.fvwm-crystal/preferences/Startup
加入

#Launch ivman
+ I Test (x ivman) Exec pidof ivman || exec ivman

就可以了。

然而!這是的。

或著說已經不合時宜了,因為 fvwm-crystal 大概想再改回 fvwm 的主流,所以它的 rc 已經都指回去 ~/.fvwm 了。
所以應該是下面:

AddToFunc InitFunction
+ I Exec exec /usr/local/bin/gaim
+ I Exec exec xmodmap -e "pointer = 3 2 1"
+ I Exec exec /usr/bin/xfce-mcs-manager


嗯,至少我能動啦,我讓 滑鼠左右互換了,同時調用 xfce 的 setting manager 出來玩,免得 gtk 的程式變得很難看。

中文的部份感謝國父(d2207197)的說明

設字型像這樣設...
XFT
代碼:

*FvwmIconMan-Windows: Font "xft:AR PL ShanHeiSun Uni:pixelsize=12:encoding=iso10646-1"

或用 XLFD
代碼:

*FvwmIconMan-Windows: Font "-arphic-ar pl shanheisun uni mbe-medium-r-normal--12-*-iso10646-1"

就解決了

快捷鍵的部份可以再修改

fvwm 底下的 components/bindings

或呼叫 xbindkeys 出來玩。

--
* 0419 更新: 字型的部份我修改的部份直接打包成一個檔案了,可以用 root 在 /usr/share/fvwm-crystal/ 底下解開就行。。

[Linux] sshfs

西底... 今天再來介紹這個 sshfs 跟 fuser 的應用:

參考文章在這裡

Mounting a remote filesystem with sshfs allows you to do anything on the files, just like local files. Because it is an SSH connection, it is secure (encrypted, two-way authenticated), and it works with almost any ssh server.


簡單的說呢,每次都要 ssh 上去某個站點改來改去的,多麻煩。
如果可以用 mount 的方式,把 server 上面的某個目錄當作是我的 public_html 目錄,
加上 ssh 金鑰的方式,豈不是很好?

架設需求如下:
1. 可以 ssh 登入的帳號
2. fuser (如果要讓使用者自已可以 mount 的話)
3. sshfs

[Linux] Subversion 工具 hooks

西底~ 我又來騙篇數了。

這次來介紹的是「每天工作」這位先生的網誌裡頭有關 subversion hooks 的工具說明。

在 subversion repository 目錄裡面有 conf, dav, db, hooks, locks 等目錄。其中 hooks 目錄就是用來存放 hooks 的地方。總共有 5 種 hook:

* start-commit: 在 commit 開始之前執行,常用來檢查使用者是否有權執行動作。
* pre-commit: 在 transaction 完成而未真正 commit 之前執行,常用來檢查 commit 動作的有效性。可以在這個地方對 commit 時的 log 訊息進行要求。
* post-commit: 在 transaction 完成而 commit 結束,建立了新的 revision 之後執行,常用來寄送 e-mail 通知訊息。
* pre-revprop-change: subversion 的 revision property 並不會存入 repository,這個 hook 可以在 revision property 變更之前作一些處理,譬如把更新的資訊存到外部的紀錄檔裡面。
* post-revprop-change: 用途與 pre-revprop-change 類似,但會在revision property 變更之後執行。

詳情可以進去看一下。

我的困擾在於版本不合:

官版的最新版本是:
http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/mailer/mailer.py

上面的 pytho script 沒辦法正常在 FC4 上面運作。
所以我只得另外再找。

嗯 果然是來騙篇數的。

2007/04/17

[Linux] Squashfs 壓縮型的檔案系統

Fred說:
SquashFS是一個即時解壓縮的檔案系統,如同Cloop、CramFS一般。只是,SquashFS的壓縮比更高、速度更快,又不像CramFS有單一檔案大小或整體檔案系統大小的限制,在LiveCD的應用上非常有用。


最近找到他的網誌,裡面蠻多有趣的東西,所以開始一篇一篇(吃)看了起來,其實 2006 年 5 月的這篇文章引起了我的注意,因為有段時間沒注意 LiveCD 的技術了,想不到又多了這個 squashfs 可以拿來玩。

不過當然,實證是很重要的:
這裡有人寫了評比,我摘一小段下來:
5.1 Ubuntu liveCD compression results

ext3 uncompressed size 1.4 GB
ISO9660 uncompressed size 1.3 GB
Zisofs compressed size 589.81 MB
Cloop compressed size 471.89 MB
Squashfs2.0 compressed size 448.58 MB
Squashfs2.1 compressed size 448.58 MB

5.2 Damn Small Linux liveCD compression results

ext3 uncompressed size 126 MB
CRAMFS compressed size 52.19 MB
Squashfs2.0 compressed size 46.52 MB
Squashfs2.1 compressed size 46.52 MB


夭壽哦,給人家壓那種東西壓到剩原來的 30~40 % 大小耶。
且通常 LiveCD 上面這種空間非常要求的東西,有這個幫忙真是不賴。

不過這頁後面有一小段沒看懂....:
Yes, an intelligent algorithm decides that if the underlying compression
algorithm used produces no results, it just marks the block as
uncompressed and stores it as such. ZLIB does this if the block gets
bigger. LZMA might not; but higher level intrinsics (block headers)
could handle that easy (as you said).


study area 上面也有提到 :
現在要算squashfs + lzma 最棒了.
squashfs default use gzip, but you can try to patch it to use lzma,
of course you have to change mksquashfs to use lzma too.

siyou.


看起來是 lzma 最小了,不過不知道在「即時讀取」的時候會不會慢到?

--
順道提一下:

squashfs 在 去年的時候還沒進到 kernel 2.6 裡面,但是現在 Ubuntu 6.10 的 kernel 已經到了 2.6.17-50-generic ,所以就直接下 modprobe squashfs 就可以用了。

工具方面要另外安裝 "squashfs-tools"

FC 的部份也是一樣,在我的 FC5 (還沒打算更新到 FC6)上面
2.6.20-1.2307.fc5 已經有了,所以一樣裝上 squashfs-tools 就可以用了。

操作大致上是:
1. mksquashfs /home/anton/三國志/ dir.sqsh
把三國志(是陳壽寫的文言本啦)文檔壓成 dir.sqsh 檔

2. mount /home/anton/html dir.sqsh -o loop
用 loop device 掛載 dir.sqsh 上來。

這樣就可以了,夠簡單吧?

[Windows] 好用的小工具: AutoHotKey

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