顯示具有 IT 標籤的文章。 顯示所有文章
顯示具有 IT 標籤的文章。 顯示所有文章

2010年7月11日 星期日

Integrate vim and lxr

LXR is the Linux cross reference which a "a software toolset for indexing and presenting source code repositories" (from lxr web site). It's very useful when you develop large software system with big team. There always are apis you never know and don't know how to use it or data object you need to check what's it exactly provided. But it provide web base interface and I want use it in my vim.

There is another advantage for me to integrate lxr and vim. Our team rebuild the lxr database to refresh member's update automatically and I don't have to update index database like cscope by myself which I did it past two years.

The way I integrate vim and LXR is quite simple. I think maybe it's just too simple and I can't find any related information from internet. Anyway, I made it myself and it does help to me.

I integrate the vim and LXR by provide a utility which send http request to LXR web server, parser the http response, and translate to cscope's line-oriented output. Then, the vim can interactive with cscope by line-oriented mode. It's so simple that you can even use shell script to make it and I made it with python. Actually it's a cscope line-oriented mode enumerator for LXR. :-) The other benefit is emacs can use it too.

The MOST IMPORTANT THING is that prompt of cscope is ">> ". Note the last space character. It's part of prompt. The space take me one day to debug. I even read the vim and global source code. You can avoid the stupid bug if you read my blog. It's OK to skip all other part of this article when you note this. :-)

Then, not all cscope functions can map to LXR. For example, cscope can only search who call a function or everyone called by a function. But the LXR provide all reference only. My team use older version's LXR and it provide less information then latest.

The last thing is LXR can tell you a line of a source file reference to the keyword you search but no code segment. You have to check each result You can either send another http request to LXR web server to get code segment or grep source file according to the file path provided by search result. The code segment is very very helpful when you get large search result.

2010年6月7日 星期一

Add font without root in linux

My job is software development in Linux. Our company provide many servers for development. Of curse, I don't have root permission. But I want some great font for coding and that really help a lot. So I try to use font in my terminal without root permission.

Step:
1.put font file into .fonts in your home directory
2.run "fc-chace" update font cache. And you can check the font list with "fc-list"
3.set your application such gvim or terminal to the font you add.
That's all.

Linux Tutorial: Linux Fonts have detail information about fonts in linux.

2010年6月5日 星期六

Manul build Atheros AR8151 for ArchLinux

Well... This also take me couple hours. It shouldn't' be. So I need to note it for myself.

First, there is not build-in support for atheros AR8151 ethernet chip in archlinux. You need to build it by yourself.

2.extract tar ball to somewhere.
3.make sure you have related package like gcc, make, kernel header.
4.The driver from atheros default take /lib/modules/$(BUILD_KERNEL)/build for kernel header and I change to /usr/src/linux-$(BUILD_KERNEL) by change the order of KSP variable in src/Makefile
5.Refer to readme file in tar ball, I found I don't have version.h in header path and do "make include/linux/version.h" in linux source tree.
6.I use kernel 2.6.33 and it seems have a change which not use utsrelease.h file. But the driver makefile need it. I manually add a utsrelease.h in /usr/src/$(KERNEL_VERSION)/include/linux with content "#define UTS_RELEASE 2.6.33-ARCH"
7.build driver with "make" and "make install" to install it (don't forget install as root)
8.You should get a driver as kernel module in /lib/modules//kernel/drivers/net/atl1e/atl1e.ko. The readme file of tar ball show it as arl1e.ko but I get alt1e.ko. I don't know why but it don't matter. It's the driver for AS8151.
9.load the driver by "modprobe atl1e" and check it with "lsmod | grep atl1e"
10.Finish to build driver. You can test it by "ifconfig ethx

Then the AR5181 ethernet chip works. And don't forget to add it to MODULE of /etc/rc.conf or config modprobe for next boot.

archlinux and kdemod

I try to change to use ArchLinux. Documents of ArchLinx web are very helpful. I just follow the instruction and install it in my new laptop. Well...Almost. Actually I have problem in start kdemode. It told "kstartupconfig4 miss or fail......" and the result I google for it is that's related to gcc version. But I had installed newest gcc and it still have problem. If you are looking for step by step instruction, go to ArchLiux's website.

I give up to install kdemod and remove it in the end. But I found the pacman package system is very impressive. I note that the disk size usage before install and after remove are almost the same. That means pacman did remove kdemod and its dependency package clearly. Again, It's very impressive.

But the ArchLinux default deriver for my atheros AR928x seems have same problem with unbuntu 10.04. The network speed is terrible and I have no such problem in windows 7. It take almost two hours to download kdemod and I don't want do it again. I don't know how to fix it yet. But I was tired with it.

So I use awesome now and it just works fine. I will install kde (kdemod? No. Thanks.) after I fix network issue. Now... Time to bed.

[update 2010/06/07]
I don't know why the network interface doesn't slow after I install kde although I know it's not related to kde. Anyway, ArchLinux is very impressive and I like it. GoodBye~ Ubuntu.

2010年4月21日 星期三

個人使用的Tiddlywiki server版設定

因為現在改用Chrome不用firefox,所以在tiddlywiki存檔需要另外設定。基本上最方便的方式就是安裝jre,再配合一個存檔的jar就可以了。但是公司的電腦沒有開admin的權限,我也不想再請IT只為了這個裝jre,所以改試試看Tiddlywiki有什麼其他的方法。

目標是能從server上開啟Tiddlywiki再回存,因為是個人使用所以,權限比較不重要,利用firewall或server設定成只能local access就可以。也因為只是個人使用,所以希望是lightweight server。

Tiddily有一些server版,但是都需要mysql。加了mysql怎樣都lightweight不起來。所以後來使用了最方便的upload plugin。

所以結果是Tiddlywiki的upload plugin+store.php+php+mongoose web server。
Mongoose 是我所以找到能support php裡最lightweight的web server,只有56k的大小。也有ACL的功能,不需動firewall。
走cgi的php只需要php-cgi.exe+php5ts.dll+php.ini也很簡單,約5mb。

但是一開始還是有些不方便的地方。
第一個問題是會有個cmd的視窗,這可以從網路上找到利用com啟動可以達成,連vb的script也有,所以搞定。
第二個問題是upload plugin的upload需要密碼,每次都要重打,滿煩人的。這可以修改配合使用的store.php,或著是在Tiddlywiki裡設成預設參數Peristent Option。就不需要一直填密碼。

這樣就可以像在只用local file一樣,直接開,改完直接存。除了Tiddlywiki以外的檔案總共只要幾mb,不管是備份或是放到flash disk都很方便。這樣還有另外一個好處是自己的Tiddlywiki想用那個版本都沒問題,自行升級也沒問題,不受server限制,直接把Tiddlywiki拿來另外用也沒問題。

雖然不是最完美的solution,但是對我來說是最好的solution。

2010年3月23日 星期二

個人對Mercurial和Git的不同感想

在熟悉了Git後,又找了點時間學了Mercurial。之前準備要學習Git時,就找了很多資料。Mercurial和Git的各種比較當然更是不能少,所以對Mercurial也很有興趣。

Mercurial和Git實際儲存的方式很類似,所以熟悉了Git再看來Mercurial覺得很多觀念都很容易理解。不過有趣的是,因為Mercurial和Git使用了類似的資料儲存,我們可以說Mercurial和Git是用不同的觀點來操作同一份資料,因些產了大異其趣的兩種VCS(這裡說大異其趣也是有點誇大,因為對使用觀念還是很相近)。網路上Google這個Git和Mercurial分析(中文版)雖然有點舊,但還是很不錯。

就我的觀點來說,其實Mercurial其實比較算是VCS。Git連History可以改的功能讓我不太能接受,但是rebase又實在很實用。在我熟悉了Git之後,覺得Git其實比較像是Revision Exchange System,很多的功能都是為了讓contributer能夠很方便的把update送給maintainer,而maintainer也能最方便的把contributer的update merge進maintainer的source。也為了如此Git幾乎把把有的能力都開放給user,但也就是開放的太多太強大,也很容易讓user把repository搞壞。Pro Git裡也強調己經publish的commit最好不好再change或刪除,包含有些功能的本質就是rewrite commit。

其實單就功能性和理念上來說,我是比較喜歡Mercurial的一些特點,包括commit history不能改變,比較平緩的學習曲線,使用跨平台的Python,user容易寫自己的extension,還有對http的高度整合。

但是以我現在的使用環境,最需要的是local branch、history rewrite、rebase。所以我現在使用Git。還有另一個理由是我沒有root的權限,只要把Git build在家目錄裡就可以,相對來說較方便。

Git讓我覺得最不方便的就是在架設server的部分,Mercurial在server部分功能也相對比較方便。也剛我現在只是個人使用,沒使用到server的部分,但是在可預的未來還是需要的。

其實以Mercurial和Git底層的高度相似度,應該不太有因為架構上的差異而有一種能提供而另一種無法做到的功能。我想多半是因為理念的不同而不提供(或是認為不應該提供)。能互相參考,把好用的功能互相補強,當然是最好不過。最好是還可而互通,像對svn一樣的支援就最好不過了。不過我想這應該是我想太多了。:)

之前看到Git支援svn,本來以為可以靠git svn完整支援,把git當svn client,現在發現實際使用上除了有點地方要小心以外,好像dcommit也還有一點不穩定。這樣讓使用起Git,也無法發揮Git的強大。
Mercurial目前對svn的支援度我還不清楚,不過我想我可以以Python當標杆,Python在等hgsubversion的完成度也要轉換到Mercurial。當Python轉到Mercurial後就意味著hbsubversion就到達一定的可用度了。

PS:Mercurial的default package也包括了一些很重要但預設是不開啟的extension,像rebase及能達到local branch的bookmark。這讓我更喜歡這種extension的設計,讓你在嚴謹管理中,也能有一些做例外的能力。而Git也正在討論對http的支援。大家都朝正面的道路前進。

--update 2011/0905
Git在1.7之後就支援smart http讓使用http push或pull時更有效率

Git的local branch果然好用

前一陣子將Pro Git讀完了,開始使用Git來輔助在公司的工作。Git的local branch真是好用。在公司使用公司的VCS,要達到一定的完整性和正確性後才能check in,在還沒check in前自己做不同測試也很不方便,老是要把檔案搬來搬去備份來備去,還要自己做merge。當要同時處理不同功能時就更辛苦了。改用Git後,這些事都方便很多。只是Git實在是也不算好學。網路上有許多的文章,很多人簡介,但是我覺那些對初學者來說其實還是不太夠。雖然最重要的部分都不會少,但是對初學者來說反而更霧裡看花。我一開始看也是先看別人的介紹,但是總覺無法擋掌握Git。最後還是看完了Pro Git之後才覺得真正知道如何使用。

所以現在就變成從公司的VCS check out到自己的local後再使用Git,在不同的local branch做不同的測試,甚至是同時做不同的功能。最後再最後的結果check in進公司。有點像git svn的做法,但是是手動版本。而且公司也不是用svn,git svn幫不上忙就是了。

而且有了Git的rebase和輕鬆merge能力,同時開的local branch最後很也容易就能和公司的VCS的最新版本接軌。除了有時會忘記現在build出來的binary到底是那個branch以外都很方便,我想就大概是太方便的後果吧。

2009年6月5日 星期五

What pity!! I can't use termit in my job

I found a good and lite terminal software called termit today. It seems good and support the all features I want ex: small size, tab support, and 256 colors. It need cmake and libvte and I found it does be small after download source code.

At first, I think I can compile in my local dir. cmake is quite simple to compile in my local dir and the linux server have libvte too. Then I found the libvte in AS3 is too old to termit and I though I can compile a static libvte for termit too. That's should not be a problem.

Then I check the depency of libvte from web. I must be crazy to compile a different version libvte and gtk+ in a machine which I am just a normal user. It's not only libvte too old but also all gtk+ library. I want a lite terminal tool and rebuild a gtk+ library. So I give up. Maybe another ssh client in windows is more suitable for me. It's so pity.

2009年5月27日 星期三

ssh tunnel

SSH support tunnel in three type:
1.dymanic
2.forward local port to remote address
3.forward remoteport to localhost address

1.dymanic tunnel just like kind of socket proxy.


一開始覺得2和3好像就是把話反過來說,有什麼不一樣,看了好一下子才懂不同之處。那是因為我一直以port mapping的想法去看他,你map給我跟我map給你最後還不是一樣通。不過真的了解之後,那還真的就是不一樣。

forward local port to remote address
=>簡單的想法是把你local的某一個port的request forward到另一個address (不必然是 ssh server,可能是任一台 ssh server能連上的address),所以你在ssh client上連到client的local port就會像是連到remote address一樣。
=>將本機上的某個 port 透過ssh server 對應到遠端主機所在的某個 port
data follow:
ssh client -> internet -> ssh server -> firewall -> ap server
The request to ssh client will forward to ap server through ssh server
Scenario:
You have a server in internet and you want a secured connection. You can open a tunnel to ssh server and all client in your side can access ap server through ssh client. The other benefit is only the ssh client need permission to access internet. But socket proxy will be better solution for permission control.

forward remote port to local address
=>將 SSH Server 上的某個 port 對應到本地主機上的某個 port
所以ssh server端(以及其他能連到ssh server)的人可以利用連到ssh server的某個port,連到client本地主機的某個port。
data follow:

ssh server -> internet -> nat -> ssh client
Use forward remote port to open a ssh tunnel from ssh client to ssh server. There will a listen port in ssh server to forward all request to ssh server specified port to ssh client. All machine in ssh server side can connect to ssh client through ssh server specified port.

Scenario:
You have ssh sever and you can controll it. The user in client is unable to configure network (or server or nat or dymanic ip). You can request client open a ssh connect to server with forward remote port to local address mode. Then you can send request to client intranet by tunnel.

2008年11月9日 星期日

Trac 越來越容易安裝了

最近有需要又重新build了一個Trac。發現Trac整合完成後比以前又更容易安裝設定了。使用新的 template系統所以也不像以前還要自己去裝一些python的plugin。現在通通整合到easy_install裡去了。

唯一遇到的問題是本來想用Python2.6,但是easy_install和svn binding的binary都還沒update到2.6,也懶得全部自己來。所以又降回2.5。

今天重乾淨的系統開始
1.裝Python
2.裝easy_install
3.裝subversion python binding
4.用easy_install裝Trac : easy_install Trac (還真的是easy)
5.trac-admin initenv
6.init svn repos.: svnadmin create

練完收功~

2007年10月19日 星期五

免費又好用的電腦畫面錄製軟體-wink

在做教學文件時,常常遇到需要教導別人如何使用,應該有什麼結果出現。千言萬語不如一個畫面。能夠讓人家看到你的操作流程和畫面呈現在溝通上相當省事又有精確。

Wink就是這樣一個拯救大家的免費軟體。電腦畫面錄製軟體其實很多,連adobe也出了一個Captivate 的產品。不過那不是免費,所以對於一般的使用上,其實wink就很好用了。還可以把錄製的結果轉成flash或是exe檔。個人是比較喜歡用flash的方式輸,還有跨平台的好處。

wink本身操作相當方便,也很流暢。就使用過好幾次的經驗裡,對他相當的滿意。還可以錄音配合你的操作,有錄影的效果又比錄影方便許多。

Wink Homepage

2007年5月16日 星期三

DNS server "lame server resolving "問題

好久沒去看server的log,今天看了一下,發現出現了許多類似
May 13 04:04:29 server named[19046]: lame server resolving '240.7.50.200.in-addr.arpa' (in '7.50.200.in-addr.arpa'?): 66.231.171.4#53

查一下鳥哥的DNS server教學 LAME Server 的問題 才發現原來問題可能是在我對外查詢的DNS server設定。好像也是換了ISP之後才出現的問題。這樣的話那就不管啦,把log關掉,耳根子清靜一下。我真是個不專業的管理員 。:)

disable lame server log
in named.conf. add
logging {
category lame-servers { null; };
};

2007年5月11日 星期五

openvpn 大烏龍

之前設定 openvpn的client時,遇到一個問題,openvpn server一直無法sing request給 client,所有的步驟也都沒問題。一直沒仔細看,後來才發現原來我從server copy時,連"xx"的雙引號也copy過去,在 client竟把"當成是設定的一部分,這樣ca就不一樣了,當然無法簽發認證。真是暈倒,白花了一整晚的時間。

2007年5月10日 星期四

終於搞定PPTP VPN了

其實PPTP的server和 client早就設定好了,只是一直覺得windows上的routing table很奇怪,心裡的懷疑終於證實了。client在 client的 network所使用的ip subnetwork不能和server端的一樣,不然windows當然無法設定那些ip的routing是在local,那些ip的routing要經由vpn出去。

不過PPTP沒有加密,還是有安全上的考慮。如果能想辦法讓openvpn的client設定簡化到一般user能使用的程式,我就把pptp換掉。雖然說openvpn己經比IPSec容易設定的多了,但對light user來說,還是有點難度。

By the way, windows的pptp client可以選擇要求加密,那linux的server端要怎麼設定呢?不知道Poptop的pptpd有沒有支援。

雖然都是照著manual設定的,還是順便記錄一下好了

PPTP Server
Enviroment Linux2.6 CentOS4.x
1.安裝 ppp server

2.安裝pptpd

3.安裝lzo

要和windows client配合,需要MPPE
4.安裝dkms

5.安裝mppe dkms driver kernel_ppp_mppe
(pppd, pptpd, dkms, mppe 都可從poptop的project裡 download)

6.檢查kernel module是否正常載入
modprobe ppp-compress-18 && echo success
show出success就表示己正常載入

7.修改/etc/pptpd.conf
ppp用的可以是server同一subnetwok domain,也可以不一樣,如果不一同domain需注意routing設定。最重要的是client的subnetwork domain不要和server的一樣,真的沒辦法時,可能要手動調整 client的routing table,以確保packet會正確的走到vpn的通道

8.在/etc/ppp/chap-secrets設定登入帳號。如果不想和己有的帳號系統配合使用,可以考慮再加裝FreeRADIUS。

9.設定開機載入kernel module
在 modprobe.conf裡加入
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-18 ppp_mppe
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
alias net-pf-47 ip_gre
如果你的pptp使用的ip subnetwork跟server local的不一樣,當然也別忘enable IP forwarding。
10.
如果有firewall也別忘了打開firewall
PPTP使用TCP 1723 及 IP Protocol GRE(47)


Windows Client
windows 2000以上己內建PPTP client的支援,可直接使用 windows的client

參考資料
http://kiwi.csie.chu.edu.tw/blog/archives/14
http://poptop.sourceforge.net/dox/

2007年1月11日 星期四

Windows下的免費比較工具 WinMerge

在Unix系統下面要比較檔案有diff這個強大的功具,在windows下也有很多方便的檔案比較工具。個人使用覺得最方便最順手的就是WinMerge這個Open Source的檔案比較工具。WinMerge除了有方便的操作界面以外, 也有syntax highlighting,支援DOS, UNIX, MAC檔案格式,也支援Unicode,還是免費軟體。我把WinMerge放在隨身碟帶著走,不需安裝直接就可以使用,到那裡都有順手的工具可以使用。不過他還是會把一些設定寫到registry裡,到新電腦時又變成預設的設定,必需再設定一下個人慣用的使用設定。

Winmerge首頁




More Winmerge ScreenShots

2007年1月10日 星期三

免費的C++ IDE

C++是種歷史悠久,發展完整的程式語言。發展到現在除了有很多不同的 compiler可以使用以外,還有很多人發展出各種IDE工具還讓人免費使用,再加上現今免費軟體的風潮之下,許多原本要付費買的商業軟體也都推出了免費版本讓人使用。這些免費的軟體很多都功能強大又穩定,比起商業軟體是毫不遜色,也有的是商業軟體的精簡版,在熟悉使用方式後,能很快速的轉用進階的版本。

Dev-C++
是一個功能完整又小巧的IDE,預設就配合Mingw的compiler及GDB為debuger,也可以配合Cygwin和其他gcc base的 compiler使用。另有Dev-Pascal 給pascal的版本。由於他的功能完整又小巧,我都會推薦給初學C++的朋友,讓他們在初步的學習時能先專注在C++語言本身上面,而不用為了學習環境傷腦筋。另有擴充版本wxDev-C++可以配合wxWidgets開發視窗介面系統,還有視覺化的拖拉可設計視窗介面。

Code::Blocks
是一個open source的IDE,同時還具有跨平台的特性,有Linux和windows上的版本。也可以配合Cygwin或Mingw使用。

Anjuta C/C++
Anjuta is a versatile IDE for C and C++, written for GTK/GNOME. 還可以直接開GTK/GNOME的application,但目前只有Linux下的版本。

KDevelop
The KDevelop-Project was founded in 1998 to build up an easy to use IDE (Integrated Development Environment) for KDE. 除了C++以外也支援其他的程式語言。目前在Linux和Windows都可使用。

Microsoft Visual C++ 2005 Express Edition
Microsoft的VC++是老牌的開發工具了,己經在使用的人也很多,2005 Express最重要的特色當然也少不了MS現在主推的.NET平台。不過基本上還是Visual Studio 2005的精簡版。重頭戲當然是希望你最後轉而使用他們的Visual Studio。

Eclipse+cdt
Eclipse在java的領域裡可說是聲望第一名的IDE工具。連Borland在JBuilder的業務也受到它的影響。不過Eclipse打從一開始就不只是要發展成一個Java的IDE,他要發展的可是一個可擴充的開發平台。所以你也可以在Eclipse上開發C/C++。不過預設的Eclipse並沒有C/C++的開發套件,必須另外下載一個叫CDT(C/C++ Development Tooling)的擴充套件。除了可以配合gcc當compiler以外,也可配合其他的compiler,還能不停的加入各種擴充套件來支援其他功能讓他不單純只是C++的IDE。最棒的是Eclipse由java開發而成,所以也可以在Windows, Linux, FreeBSD, 或Solaris等各種平台上使用。不過你可能需要一台配備稍為好一點的機器才能流暢的使用Eclipse,除此之外就沒什麼可挑剔的了。
Update:現在的Eclipse提供了幾種不同的預設套件的版本,有給java開發者,c\c++開發者,web開發者。不過基本上就是就不同的套件的需先安裝而己,還是可以再自行安裝其他的套件變身成多功能IDE。

Turbo C++
是的,Turbo系列回來了。許多資深點的程式設計師可能都聽過, 甚至用Turbo C++。我在程式設計的早期時第一個使用的IDE也是TurboC++,直到現在還是讓我相當懷念。除了當時第一次接觸到這麼好用的IDE時的震撼之外,它簡單又輕巧。一直到現在,我覺得都還不輸給多年後發展出來的各種IDE. 所有Turbo系列被分成兩個版本explorer版和Professional版。exploreer版可免費取得,並付費升級到Professional版。Turbo系列除了Turbo C++以外,還有Turbo Delphi, Turbo Delphi for .Net, Turbo C#。



2007年1月9日 星期二

Windows 上的X-Server : Xming

X-Server就是在X window下畫面顯示的部分。由於X window的架構的關係,你可以在某一台主機上執行X window的軟體(X Client),但是在另一台的主機上顯示及操作(X Server)。所以只要你有一個X window的X-Server,你就可以在遠端執行該軟體而在自己的電腦上操作使用。像我個人就在主機執行需要強大運算能力的軟體,但是在notebook上的windows操作,還可以同時做其他的事情也比較不會拖累主機的執行效能。

在windows上這樣的X-Server軟體其實很多,也有很多功能強大的商業軟體如 Hummingbird Exceed或是X-win32。先前是使用X-win32,也很滿意,後來發現有Xming後就改用Xming。

Xming其實是X window的windows porting版本,不過它相當的小巧穩定,效率也很不錯,還是GPL的開放軟體。雖然設定界面上還是不如商業軟體,但也不至於造成使用上的困擾。就我個人所需要的功能來說都己足夠,於是就漸漸從X-Win32改到Xming來。還可以推荐給朋友使用而不用擔心授權的問題。網路上也己經有很多人的說明,不會用的朋友就請他自己搜尋,真是輕鬆愉快。個人使用到現在,只有在Solaris上中文有些怪怪的,應該是我設定的問題,不過沒有很常用就算了。

其實Cygwin/X也裡面也包含了X-Server,如果己經使用Cygwin/X的朋友就不需要再另外安裝Xming。如果你只是單純的需要X-Server的話,那使用Xming遠比安裝Cygwin/X小巧方便多了。

http://freedesktop.org/wiki/Xming
http://sourceforge.net/projects/xming

相關軟體

Hummingbird Exceed
功能強大的商業軟體,但個人認為因為功能過於強大,整體而言有點太過肥大。

StarNet X-Win32
功能強大的商業軟體,在發現Xming前是個人的最愛,功能完整又小巧簡潔,設定界面好用。價格也不算太貴。

Cygwin/X
Cygwin是一套在windows環境下提供 Linux-like環境的軟體。Cygwin/X也是X window的windows版porting。但是Xming和Cygwin並無直接的關係。

2007年1月3日 星期三

Project Management Software

在專案的開發過程中,常常需要多人的合作參與才能完成較大型的工具。但是老話"人多好辦事"常常都不準,個人經驗中最常發生的倒是"人多口雜",一堆人就一堆意見,永遠無法有共識。遇到自我意識較強烈的或是容易拖拖拉拉的人整個專案就在無止境delay中慢慢走向滅亡。正面點來說,一群人合作時,如果有能增進溝通的工具,甚至在人無法時常面對面溝通時有另外的交流管道,對專案的幫忙很大。

所有就有所謂的專案管理工具的產生,來拯救苦海裡的專案。這類的產品中當然是也有許多的商業軟體,以下介紹的是個人有使用過或參考過的,不一定是最好的,也因為個人因素,所以了解比較多的還是在Open Source的部分。

MS Project
近年來最常聽到的專案管理工具中,MS Project應該算的上其中一員。在個人所知裡,的確也有很多人使用它。MS Project本身的功能當然沒話說,以MS一貫的習慣,總是會在軟體裡放進十倍於你用得到的功能。想想在word裡我曾用過的功能應該只有百分之一吧。所以我倒沒懷疑過他的功能問題,至少我用得到會用的看過的,都在裡面了。還可以配合Project server支援多人共同使用。這可是很重要的功能喔,如果每一次的進度規劃改變還要mail來mail去,那真的就是只有遜這個字可形容了。甚至還聽過一個笑話要學好Project畫出一堆沒人遵守的圖表就是要升官的第一步。不過我個人是沒使用Project server。因為在M$中我少了$,所無緣一試。

OpenWorkBench
OpenWorkBench是一套Open Source的project scheduling工具。功能相當完整,完全不輸給MS Project,還能匯入微軟Project 格式的檔案,使用上也滿好使用的,有同事認為這是最佳的MS Project替代品,算是對MS Project極具威脅力的軟體。事實上也有許多大型公司開始使用OpenWorkBench。之前似乎有公司支援多人共用的server,我想那應該類似Project server吧。
不過後來就沒特別注意後續發展,如果真的有完備的功能的話,OpenWorkBench就成為超殺手級軟體了吧。不過有點可惜的是只有windows版本,如果他有windows以外的版本的話,那應該真能稱王了吧。

eGroupWare

eGroupWare是由php所開發的系統,事實上我個人覺得他比較像多人協同開發的溝通工具,提供了許多社群合作功能像是行事曆、通訊錄、事件紀錄簿、fudforum(討論區)、專案管理、messenger(訊息傳遞)、sitemgr(介面排版)、polls(投票)、headlines(好站連結)這些東西。
但在專案管理感覺比較弱一點。所以他們的網站說明是"eGroupWare is a free enterprise ready groupware software."。其實他提供的功能相當多,相當完整。eGroupWare除了可經由他原來提供的web界面使用以外,還可以整合使用一些像Kontact, Evolution, Outlook的client軟體。當然,他也是跨平台的,在Linux, Mac, Windows都能使用。

dotproject
由php所開發的專案管理系統。也是web界面的管理系統,和eGroupWare相較,dotproject比較專注在專案管理的部分,所以就專案管理來說,個人覺得dotproject的功能是較完備也較順手的。曾經使用過一陣子,不過由於導入的問題,最後逐漸荒廢,個人也因此較少注意dotproject的發展,相當可惜。但是覺得eGroupWare有一點可以讓dotproject學習的就是增加一點client的整合,讓使用者也可以配合一些即有的client軟體使用。雖然他本來的web界面就很好用了,如果能再加入原來大家就習慣的使用軟體的整合,相信在導入上應該會更有利。dotproject還是個人在多人專案管理系統裡的首選。

XPlanner
是基於Extreme Programming流程的專案管理系統,如果專案採用XP的開發流程的話,XPlanner是相當方便的。而且XPlanner十分簡潔,沒有過多花俏的界面及功能,簡單明瞭。也是我很喜歡的風格。XPlanner也是java base的系統。

hipergate
hipergate也是一個Open source的web based系統。不過他其實是"Open Source CRM and GroupWare",裡面包含了一點專案管理的功能。我也還沒實際使用過。

Bug Tracking System

Bug-Tracking System或稱Defect Tracking System就是在系統的開發過程中,用來記錄並追蹤系統的bug。好處是可以在開發的過程,記錄下曾經遇到的問題,有計劃的管理及追蹤後續處理。更可以在日後變成一份開發記錄,許多重複或類似的問題都可以有處理參考,而且現在的系統多半也都會加入QA的概念,有人提出bug或是patch都可由另外的人去確認。不過我一直覺得這是防範搗蛋鬼的成份比較大。

功能強大的bug tracking system還可以延伸擴充和其他的scm系統配合使用,交叉分析。所以這類的tracking system不只商業產品眾多,連open souce或freeware都是百家爭嗚。

但可別以為這種系統只能做技術性的支援,有的人還可以拿來做績效的指標,也有人拿來當進度追蹤使用,在CRM上也可以有一定程度的幫助。

在這麼多的tracking system裡,以下紹介的是個人比較喜歡或是使用過的。因為個人因素,所以多半是偏向open source或是對open source大方可免費提供的產品

--Update2010/07/12:
要加強強調的是customized fields的能力會影響到導入團隊之後的實用性。如果你的團隊所需要的資訊無法加入issue system裡,勢必需要另外記錄管理,除了增加負擔外,也很容易讓issue management流於形式。最後的必然結果就是系統的記錄和現況不同步,光想就知道這有多痛苦。還可能會讓你覺不要這種系統日子還會好過點,但事實是沒有任何的記錄和追縱的issue只有上帝知道結果會怎麼樣。(好吧,也許你的績效也可以反應出這些結果)

BugZilla
BugZilla是很具知名,使用度也很高的bug tracking system。由名字就可猜想他跟mozilla大概有一定的關係。Bugzilla的前身是跟著mozilla.org所release出來的產品,也是Mozilla現在使用的bug tracking system。現行版本的Bugzilla是由perl所寫的,所以想要使用必需在有perl的環境下。perl是很流行的環境,在Unix base或Windows都很容易取得。所以在環境安裝上並不會有什麼問題,只是他需要一些perl的Module。雖然perl本身有CPAN的方便安裝,不過很多還是需要從CPAN download下來後再自行compile。在Unix base的系統上問題比較小,因為他們通常都會有compiler,但是在windows不一定都會有。Bugzilla後來為了在windows上的安裝方便也有做了一些加強,也用PPM取代CPAN,甚至還把需要的ppm module放在他們的測試站上。都做到這種程度了,實是在沒話說了。但很可惜的是在這些努力出現之前,我就改採用別的bug tracking system,單純只是因為個人對perl不熟悉,覺得這些module的upgrade有點麻煩。不過Bugzilla所提供的功能非常完整,該有的一個都不缺,穩定度也不錯,是很出色的bug tracking system。還有許許多的的Addon可配合使用。很多知名機構如Linux KernelApache Project、連NASA也都有使用

Mantis
Mantis是另一套open source的bug tracking system,比起Bugzilla算是比較年輕一點。使用php開發,可配合MySQL, MS SQL, and PostgreSQL。PHP和perl一樣都是可跨平台的script language,所以在各種平台都可使用。安裝上也較Bugzilla簡便,就像是一般的php web system一樣,設定一下database、系統相關資訊就可以了。功能也是相當完整,有簡單的圖表統計。這是我目前正在使用的系統,之所以轉換到Maintis來最大的因素還是因為設定簡便,php也比較熟悉,在系統的維護和升級上都比較有把握。還有一個小小優點就是畫面色彩比較豐富感覺比較漂亮一點,不過也有同事覺得色彩太多有點眼花。現在也是很多人用的系統,還有人做Bugzilla及GNAT轉移到Mantis的工具。也有MantisConnect可以和其他一些如Eclipse的工具整合。


Trac
trac是由python所開發的系統,雖說是bug tracking system,但也提供了與版本控制系統整合(雖然只支援subversion,不過subversion是我的最愛)及wiki的功能,算是一個麻雀雖小五臟俱全的整合性開發環境了。個人認為最大的吸引力是直接將ticket system與subversion整合,光這個功能就讓我口水直流,還可以當subversion的web界面,實是在非常理想的整合性開發環境。trac的操作介面很棒連老牌的RT也有trac的theme。trac也設計的系統整合的功能,能夠利用連結與其他的系統整合,又是一項讓我流口水的功能。所以有很多軟體專案也都使用trac,還有提供trac的hosting service,算是相當熱門。要不是目前在使用的系統己有許多資料,還真想再跳到trac來,這樣就把好幾個系統合成一個。不過還是有些地方希望能更好,像localization(雖然我個人覺得無所謂),還有summary的功能在計畫在Milestone 1.0才有。多重專案規劃在Milestone 2.0。目前多重專案可先利用apache的virtual host解決。

RT: Request Tracker
RT可算是最老牌的ticketing system之一了。RT也是使用Perl開發的系統,所以也具有很高的平台移植性。而且RT其實是比較general的ticket system,所以不只可用來當bug tracking system,還可以用來當其他事務的ticket system。功能完整,又深具歷史,使用者也很多,還有書本。

Scarab
Scarab是使用Java開發,使用了application server。在安裝上,只要有java環境就很方便安裝。他甚至還附了application sever在release裡面。只要啟動就直接可以用了(這當然所有的東西都在預設的設定下執行)。Scarab算是個很有彈性的issue tracking system,本身的模組化也做的很好,基本的tracking功能當然也都具備。也利用xml提供了Import/Export interface,可以從別的bug tracking system轉移資料。個人使用經驗不多,不知是否因為和一般的系統界面差異較大,
試用過之後還是不太會使用。

JIRA
JIRA基本上是商業軟體,不過他有提供Non-Profit & Open Source Licenses可以免費使用。
不過他的Non-Profit的定義有他自己的定義,連政府或學術單位都不算在裡面。對Open Source也可免費使用,照他的說法是他用許多好用的Open Source工具,他們的開發者也有很多Open Source的社群,所以要回饋給Open Source。至於跟商業版使用的有何差異就不清楚了。整體的感覺滿不錯,許多比較進階的功能也都具備。畢竟是商業軟體要夠好夠強大才能在許多的軟體裡維持競爭力。不過我也沒太多的使用經驗就是了。

track+
JIRA也是商業軟體,也是java base的開發系統。和JIRA類似的,他們讓教育單位,Open Source和慈善團體,可以免費使用他們的系統,不過人數只能在5人以內。在流程規劃上有他下過功夫的地方。

--Update 2010/07/12
Redmine在某種程度上來說,可以說是Trac的ROR版本。不過這當然是因為他和Trac一樣都是整合式的issue tracking system,但是他比Trac晚開始。從功能上來說我覺得比Trac還多還完整。這當然是個不令人意外的結果。如果是我來開始我當然也會把自己覺得Trac還未提供,但是又很需要(實用?)的功能通通加進去。不巧的是他加進去的功能又很合我的意,像及早支援multiple project,提供了time tracking的能力(但是還可以再更好,這樣我就不需要dotProject了),還有在issue tracking 提供更好的customized能力。這些都是我在使用Trac時覺得很需要的部分。特別是issue tracking的customized fields,那是我最滿意Mantis的部分。這部分做的好在我心中就能大大加分。因為每個團隊或是公司都會有自己的不同需求及使用習慣,要能夠方便的修改系統來配合人使用,這樣對團隊才能真正有幫助而不流於形式。所以我給redmine高評價。另外值得一提的是ruby本身也是使用redmine當他的issue tracking system,所redmine比較不會在短期內就荒廢無人後續,也己經在一定量的使用者使用下証明他的成熟度。目前我覺得最可惜的是還不能配合ruby1.9使用,ruby1.9相對於1.8有很大的改進,而從redmine的開發網站來看也不像是其短期內的目標,雖然己有人提出了patch,但是狀況不明,想使用ruby1.9的人可能要多等等了。