google code-beautifer

星期日, 10月 21, 2007

用Emacs 開發C 程式

Version 1.1

(Oct 21: 1.0版)
(Nov.12 1.1版: xcscope 的深入討論獨立出來自成一節)

最近被學校猛操 C 程式開發,我覺得開發C 除錯的時間要比lisp長很多,非得找方便的開發除錯環境來幫忙不可。理論上我可以用eclispe或anjuta 這種大傢伙來開發,但我一邊開發除錯還要一邊作別的事,那些不是很方便。最好的選擇還是找能跟emacs 搭配的工具。

目前在emacs上裝了
ecb
xcscope
xrefactory (xref-1.6.10)
覺得工作起來順手多了。這三個各司其職:
ecb 比較接近快速的瀏覽 source code 整體本身
靜態的呼叫範圍相關問題用xcscope查
跟編譯比較接近的相關問題用xref
三者都跟emacs 的source buffer 緊密結合

除了這三者外,還有一些其他的工具,其中cbrowser好像很久沒更新。SimpleCallTree 我弄不出來,作者勸我用比較正式的工具代替。

Code Crusader 5.2.1 是商業程式。demo有兩種,一種是限制使用時間,另一種是限制最多開啟5 個檔案跟5 個視窗但還要註冊。我不是很喜歡。

Doxymacs等於是Doxygen + {X}Emacs。我根本沒時間好好弄文件,就先擱著。

還有一些不熟的地方,等日後弄通了再整理出來。參見CategoryProgrammerUtils

ecb


結合gdb, outline-mode...這些說起來話長,先放一張圖片供參考。下面會再提到。可以看到在History 視窗裡某些檔案icon 從綠點變成橘點,表示下面這些檔更動過
hmm.cpp
Point.h
其他沒有綠點/橘點的檔案(如chineseNL.txtP),是其他正在編輯但不相干這個工作目錄的。但在目錄視窗裡可以看到Makefile 被動過,所以在這會從綠點變成橘點,但不是emacs 弄的,所以不出現在History 視窗。


xcscope


跟著cscope 有個 xcscope ,提供cscope 支援,可以讓搜尋變數的過程更簡便。附圖可以看到xcscope 把搜尋viterbi 這個符號的兩個結果同時在%cscope%裡顯示

關於xcsope 的深入討論獨立出來,參見第三部分:xcscope整合。

XreFactory


XreFactory(下面簡稱xref)是 www.xref-tech.com 的產品。其中 c/java 是免費使用。現在是1.6.10版。
C/C++ 版現在是2.0.13版,只有八天合法試用期,過了就該買license。
參見http://www.emacswiki.org/cgi-bin/emacs-en/XreFactory

xrefactory 可以列出沒有用到的變數。當編譯時出現問題時,假如選擇查看 log 檔,*xref-log* 視窗會列出有問題的行。如同 cscope,這時用鼠標移到其中想要跳過去查看的那一行,按滑鼠中鍵或左鍵,主程式視窗列表就會跳到對應的那一行。

XreFactory會在~/下產生 .xrefrc

每次建立一個新project 時會產生一個以
[子目錄]
開頭的區塊,裡面可以設定 編譯的選項。我自己是把 make debug 放進去,在
Makefile 註明 gcc -g 好產生符號表供dgb使用。

三者整合使用


這兩者分別控制獨立相對應的主程式列表視窗。

假如螢幕夠大,建議開兩個frame ,其中一個執行 ecb ,一個不要執行 ecb。因為 xref切frame成左右兩個視窗,建議在沒有執行 ecb的frame執行xref 動作。在有執行 ecb的frame 下切到*cscope* 的 buffer執行cscope 動作

寫好直接在 emacs主選單下選 compile。
編完直接在 emacs主選單下選 tool -> debugger(GDB)

以我手上這個程式為例,跑到最後出現
Program received signal SIGSEGV, Segmentation fault.
0x00002b4736238eab in fclose () from /lib64/libc.so.6
(gdb) where
#0 0x00002b4736238eab in fclose () from /lib64/libc.so.6
#1 0x00000000004016d6 in main (argc=1, argv=0x7fff74d3e1a8) at test.c:488
(gdb)
所以就知道程式死在第488行附近

星期六, 10月 20, 2007

GCC 最佳翻譯徵求懸賞

在我的"現代中央處理器的C 整數長度"blog 文刊出後,蒙 jserv 立即回應參考 "理解 64-bit Programming Model 一文後,才發現了zonble 之前竟然blog了 本日金句:LongLong Long is Too Long」這篇妙文。我決定來個最佳翻譯徵求懸賞,共襄盛舉:

請中文翻譯 mjhsieh 當初碰到這一段gcc 編譯錯誤:
"test.c:22: error: `long long long' is too long for GCC"

原則上要詩/技(geek)意雙全為佳。

我會找幾位自由軟體社群中對文藝有涉獵的朋友作評判,有可能的話還會請一位
詩畫俱佳的藝術家前輩作評判。比賽截止日期暫定 2008 詩人節,我記得我手頭
上還有一本全新鹿橋寫的"人子"躺在某處箱子裡。要是找不到的話,至少會有一本 Linux的書作為獎品。

願意加碼提供獎品,或有其他促進更大參與層面主意的朋友,也請不吝賜教。



我先拋磚引玉:

測試點兮二二行, 編譯錯誤兮信息:
"長兮長兮長整兮、過長兮於姬兮兮"

(註: 行也可讀成 "行"走的音)

星期五, 10月 19, 2007

現代中央處理器的C 整數長度

最近要寫一些C程式處理大筆資料,有點擔心會整數溢位。
寫了個C程式試了下,發現很有意思的事

在AMD CPU 32bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

AMD 64bit Athlon gcc 4.1.2 傳回
bytes: char:1, int:4, long:8, unsign:4, unsign long:8, long long: 8

Sun Ultra sprac III (64 bit CPU) gcc 3.4.4 傳回
bytes: char:1, int:4, long:4, unsign:4, unsign long:4, long long: 8

看起來Sun 這版gcc 還停在 32 bit

其實一般應用 32 bit signed 整數(-2,147,483,648 到 2,147,483,647)已經蠻夠了。要省空間就用 short int 或 char


short int (2)
-32,768 to 32,767
(K& R 說是 -32,767)

unsigned int (4)
0 to 4,294,967,295

int (4)
-2,147,483,648 to 2,147,483,647
(K& R 說是 -2,147,483,647)

char (1)
256 character values

float (4)
1.2e-38 to 3.4e38

double (8)
2.2e-308 to 1.8e308

星期日, 7月 01, 2007

歷史文件: (翻譯)標準與社群的未來

以下是我2003 在軟體自由協會的論壇上發表的舊文,由於該協會經營不善,造成重要歷史資料遺失。只好在個人部落格重建部分內容,作為臺灣自由軟體發展歷史的見證。

---------- Forwarded message ----------
Date: Fri, 6 Jun 2003 06:33:28 -0500 (CDT)
From: 我的舊信箱
To: slat-talk@softwareliberty.org
Subject: (翻譯)標準與社群的未來

看到 幽靈 在 LinuxFab 談到Oopenoffice.org 1.3beta English version
Taiwan 被改成 China(Taiwan)而China 沒變成China(Mainland)
忍不住要回一下
http://www.linuxfab.com/indexForumData.php?FID=69 *註1

想要和大家討論一下該怎麼走

每次碰到這種事 有人就會反應 台灣沒參與開發自由軟體 所以使不上力
這也許是事實 但我們要如何做 以後才使得上力 是我更關心的問題

這不是嘴巴叫叫 熱心的hackers 就自動會冒出來
在阿貓阿狗也能變成熱心的hackers前 有好一段路 需要熱心的大家來打底

我想到現有的一件事是 建立標準草稿目錄 各式各樣的標準目錄

為何要標準: 可以交換回收用於其他類似的地方
如kde 的中文化選單 .po file? 可以給 gnome參考用
假如其他團體需要寄排版格式文書 Slat推薦哪幾種 pdf?, sxw?

為何要目錄: 事情太多了 必須分工 目錄是合作的依據: (權威管理's idea in library science)
如CCCII <-> unicode 3.1 mapping table list
.po 中文化項目也有上萬個 誰在進行linux哪部分文件翻譯?
沒有目錄 要合作在短期完成 如同靠天吃飯
為何要草稿: 事情不可能一次作到好 有個草稿可以逐次修正 (Prototype's idea in Software Engnering

我在藝術家與科學家間遊蕩 發現社群還有好大一段路要走 (不管台灣美國都一樣) 事情很多 其實閒置人力也不太少 麻煩是如何糾集大家(而且背景都不同)

hackers 通常只是會寫程式 不表示他們也擅長作其他苦工 其他人就該盡量和hackers 溝通需要幫忙的地方 讓hackers 就不用分太多精神在其他地方 但hackers 也最好花多點耐性解釋 技術上需要一般人幫忙的地方

UH linux 使用者協會 和Slat一樣 在網路上談純技術的時間遠少於談其他的時間 但我想在初期是正常的 因為有太多的事是有關於從技術上出發改造社會

我自己也在參與社群工作 目前在帶領 中國文學電子圖書館計畫(cell.cs.uh.edu) 有很多事也是在惶恐中作中學 網站該怎麼管? 設立論壇該用什麼軟體?
如何建立機制呈現管理標準草稿目錄讓義工分工?有太多的未知 (休士頓大學 linux 使用者協會BSD+php nuke春天被hack, slat 論壇之前被spam,... )
每一弱勢團體除各自專業的問題外 都有電腦技術上的疑慮 我衷心希望有一天 Slat 不但可以走出自己的一條路 也能有個網頁告訴其他團體在電腦技術上該怎麼作 網際網路的時代 弱勢團體在爭取特定的自由平等前 有賴軟體自由來構建凝聚族群

除了AI programming外 我也不太會寫程式 技術層面上的考量 還請開發程式的前輩指教

在公布標準草稿目錄後 就可以推動政策執行 一是法案面上 一是提供工具來促進 比如說邀集媒體定期來監督政府對的軟體自由努力 甚至白皮書支持願意替軟體自由背書的候選人
之前洪朝貴教授提的資訊分享障礙網站主意很好(只是名稱有再討論的必要)
有很多人必定樂於回報 ( 老問題 技術上如何作個bugzilla回報機制讓大眾參與?)
可以從政府機關網站開始監督 (記得順便向媒體公布該首長的大名)
在學校裡要是要求博碩士論文提供開放軟體的Style sheet,如 Tex 或 Openoffice.org
有一些人應該會投奔自由吧 慢慢就會像滾雪球般

有些人也許有疑慮Salt 與政治的參與 我想軟體自由不可能自外於政治經濟
重點在 為軟體自由參與政治經濟 而非為政治經濟參與軟體自由 許多人在 COSA
的OSS與Microsoft的立場表明的很清楚 不用我多說

大家辛苦了 一點拙見希望能拋磚引玉


-----------------------------------------------------
*註1

我在美國待了一陣子可以瞭解(但不諒解)為何會有這種錯
我建議大家(Slat)寫一個網頁供外國開發者參考比較有權威

如以地理國家分
Taiwan (big5,euc-tw,CCCII...)
China (gb2312,...)
Hongkong (big5-hkcs,...)
以主權國家分
ROC (big5,...)
PRC (GB,...)
PRC (Hongkong) (,..)
以地域分
China (Mainland) (big5,..)
China (Taiwan) (GB,..)
China (Hongkong) (,...)

細節可以再討論(獨派人士可能對第三項有意見)
但我的基本原則是兩岸的命名要對等 不能單向包括

星期四, 6月 28, 2007

Krusader

基本上 Krusader 就是跟以前DOS下的 Norton Commander ,後來Windows 上的
Total Commander, Linux 文字模式下的Midnight Commander 是一樣的雙排瀏覽檔案管理器。功能極為強大。Krusader 是qt 寫的圖形介面,我一般是在gnome桌面環境下搭配Nautius 跟emacs-gtk 來處理日常絕大部分的工作。檔案可以直接在彼此之間拉來拉去。其實這三者單獨都夠強大到單獨取代其他兩者去執行一些事,不過搭配使用更能讓我優游於從各種不同的工作方式角度來完成日常工作。

Krusader 支援多重分頁,管理多重目錄很方便,也支持網路上的目錄,舉凡sftp,ftp,samba...都可以用,管理網路檔案一如當地檔案。此外有兩個幾乎是殺手級的功能:一是把某個檔從RPM 一堆檔裡抓出來,一是把一個大檔自動切成小檔。

抽取式儲存裝置的考量:


不要在剛插入usb 儲存裝置就立即起動Krusader,那可能會把Krusader弄掛掉。等Gnome 桌面的Nautius正確辨認(跳出該儲存裝置的視窗)完後再啟動Krusader。

Krusader支援多重分頁,而且關掉後下次起動時還會記得上次分頁裡開啟處理的目錄路徑,不過要是分頁裡開啟處理的目錄路徑是usb 儲存裝置,最好先插入再啟動Krusader。不然他會抱怨找不到該路徑。

外掛程式


因為krusader 是為KDE 量身打造,有些設定用KDE公用程式對gnome 的使用者不便,要自己指定替代的公用程式,我有找到一些替代程式


  • General


    • kdesu
    • gksu
    • kget
    • gwget
    • kmail
    • 這個在下面選項會再出現,我還不知道如何用firefox 或evolution 去取代文字列的用法
    • krename
    • gwenrename,或是renameutils
    • locate

    • updatedb


  • Packers


    • dpkg

    • rar
    • 在http://www.rarlab.com/download.htm上有40天試用版
    • kmail

    • unace
    • 有免費版在http://www.winace.com/files/linunace25.tgz下載



桌面拖拉檔案的相容性


Krusader跟Nautius 也是可以直接拉檔案到gnome-terminal 或Emacs-gtk 下去處理。操作非常直覺。gnome-commander 跟Krusader互拉檔案也可以。不過我從 nautius 的檔案視窗裡拉照片到jUploadr不成問題,但不知為何就是無法從krusader 裡把照片拉過去。看來jUploader 對Krusader(或者是所有的qt程式)相容性不好。我發了bug 報告在
http://sourceforge.net/tracker/index.php?func=detail&aid=1626334&group_id=127771&atid=709422

其他的競爭者


Gnome-commander 已經相當接近Krusader 的成熟度,而且在使用介面上更直覺清爽,唯一沒有辦法說服我的地方是還沒支援多重分頁,目錄同步跟sftp 這三個重要的功能。不過我相信應該不久就會出現。

延伸閱讀


在Linux跟flickr間傳輸(照片)檔案