2007年10月19日 星期五

整理的很好的自由設計工具列表

最近才看到這個列表,整理的相當好,相當豐富。對做網頁設計的人應該很有幫助。
Jas9 Taipei. » 自由設計工具補完計劃

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

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

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

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

Wink Homepage

2007年10月3日 星期三

可視覺化視窗設計的IDE - 拖拉做畫面

曾有朋友想要學習寫一些window ap,但是並非專業的程式設計人員,只是想自己寫幾個給自己用的工具程式。所以請我推薦一下他可以怎麼學習,學習什麼工具。既然只是業餘的程式設計,當然就不用推荐太heavy的工具或是要他從頭學起,畢竟他只需要寫幾個輔助性質的工具程式,真要他從基礎學起會嚇所有人。

其實我一直認為像這種真正可以對人的生活幫的上忙的程式才是最有用的工具程式。E化或自動化的目的是要減少人的負擔或是消弭因為人有些行為無法很精準帶來的困擾。

當然以light user來說,一樣重新學一種程式語言的話。我的推薦當然會是Java或C#為首選。如果有C/C++的基礎,那就採用C/C++即可。當然Visual basic也是一種選擇。因為以一般的user來說,大部分的程式設計語言都能滿足他們的一般性需求。所以重點就變成選擇一個學習門檻不要太高、有較多人討論、有豐富的函式庫以及另一個重點-可視覺化的設計視窗介面-的開發工具。這樣有問題時較容易和別人討論得到解答,也可以用豐富的函式庫協助他省下許多事。

有許多商業的開發工具像Borland的C++ Builder,Microsoft的Visual Studio, 都很優秀,也很便利。不過在價格上就比較不親和一點。所以我這裡就記錄一下個人知道的免費開發工具裡比較好用又有視覺化的設計適合light user。C#我比較不熟悉,所以就以Java和C/C++為主 了。

Java

Eclipse

Java的領域裡提到免費IDE第一個想到的就是Eclipse。雖然說Java本身就提供了視窗計設的package,但是為Eclipse所開發出來的SWT (Standard Widget Toolkit) 比Java內建的AWT或Swing更好用,效能也更好。SWT的最佳範例就是Eclipse本身,Eclipse就是使用SWT來開始他的視窗介面。基本的Eclipse並沒有包含可視覺化的設計視窗,但有其他免費及商業的Plug-in可用。而且Eclipse不只可用於Java,也可利用Plug-in擴充成為開發其他語言的IDE。

NetBeans
NetBeans是由Java的老大哥Sun所開放出來的免費IDE,本身就有視覺化的設計視窗介面。但是他是使用Java的Swing做為視窗介面元件和Eclipse不一樣。

C/C++
C/C++的視窗設計需要視窗函式庫。如果視窗函式庫還具有跨平台的能力,那設計出來的程式自然也就具有跨平台的能力了。這裡我只提C/C++具有跨平台的又具有視覺化的設計視窗的IDE。

wxDev-C++
wxDev-C++看名字就可以猜到跟Dev-C++跟wxWidgets應該有點關連。沒錯,wxDev-C++就是Dev-C++的擴充。加上一個form designer讓你可以用視覺化設計wxWidgets的dialog及frame。但是由於Dev-C++是由Delphi開發的,所以只有windows的版本可使用。wxWidgets是一套跨平台的函式庫。可以讓你的程式在不需大幅修改就能跨平台執行。wxWidgets不只提供了視窗的函式庫,連socket, xml, 甚至是OpenGL都有提供,是很好的跨平台solution。另外值得一提的是除了C/C++,配合一些binding ,wxWidgets也可以讓其他的語言使用,python, ruby, perl都能用。


Ultimate++
Ultimate++既是一個IDE也是一個視窗函式庫。支援標準的C++,設計理念也很新。但是因為比較年輕,所以相關的討論和文件相較之下比較少。也可以配合其他如GCC或是Visual C++的compiler使用。不過他的函式庫和IDE是整合在一起的,所以要用他的函式庫好像就只能使用他本身這個IDE了。


KDevelop
KDevelop一開始是要給KDE(K Desktop Environment 可用於Unix-like系統上的桌面環境)一個比較好用的IDE。後來慢慢變成一個通用的IDE環境。如果使用KDevelop最直接就是配合QT這個視窗函式庫使用。QT也是一個相當完整又成熟的跨平台視窗函式庫,還得過許多大獎。QT甚至還有embedded版本。不過比較可惜是QT for windows不是免費的,不過仍是相當好的一個選擇。KDevelop不管在Linux或Windows都可使用,配合QT-Designer,就能有視覺化視窗介面設計能力。


另外有一些是只有做視覺化視窗介面設計,但並沒和開發環境整合在一起,對新手來說是比較麻煩一點,但順便紀錄一下。

Glade
Glade是gtk+的UI Designer,只能做UI的design,做完後存成xml。其他的任何language只要配合libglade這個library就能使用你的UI設計。

wxGlade
wxGlade由名字可猜得到可能是由Glade所啟發的Idea。事實上,wxGlade一樣是UI designer,也只能做UI design。但是wxGlade做出來的結果是使用wxWidgets,他能將你的設計轉化成程式碼,讓你的程式使用。特別要提的是wxGlade是用python+wxWidget寫的。

2007年9月27日 星期四

cakephp 使用感想

cakephp 是一個php的MVC framework,很像rails的感覺,感覺上就像是ROR的php版。不過因為php本身語法的關係,所以沒辦法像ruby這樣的簡潔,但是用來做prototype或是小系統倒是非常的方便。最近用cakephp做了兩個小系統,因為系統行為比較單純,對資料庫的操作也比較簡單,使用cakephp所提供的ActiveRecord就很方便,大部分的力氣都花在UI上。

不過cakephp的UI的部分不算好用。設計的觀念很好,但是用起來有點綁手綁腳,有些可以在直接在view裡做的資料轉換變成需要controller來配合才會好做。也許是我觀念還不好吧。總覺得應該要有更方便的做法讓view能更獨立,對controller提供的資料也能在呈現方式上做更靈活的改變,而不要淪為template,這樣比較像我覺的view該做的事。

cakephp 在效率上沒有想像的快。我用的是stable的1.1.x版,之前也看過和其他language的MVC framework比較,相較下cakephp的效率是略遜一籌。不過因為只是簡單的使用他提供的功能,沒特別注意資料庫存取的部分。可能會有重複讀取DB及讀取一些不必要資料的問題。我想rails的這種情況在cakphp應該也是會發生,rails如果呆呆的亂寫,可能會產生不必要的大量資料庫存取,大大影響整體效率。不過這不算是rails的問題,應該算是使用人的問題。

整體而言,cakephp 還滿方便好用的。如果在單純的中小型系統裡,用cakephp可以有很大的幫助。輕輕鬆鬆就可以做出具有良好架構的系統。加上cakephp的plug-in, helper也很容易擴充,雖然網路上的分享的擴充還不多,但自己寫也很容易。雖然不是很完美。但cakephp的確是使用php的朋友一個好選擇。

2007年7月25日 星期三

comiple sqlite3 for arm uclinux

比較新版點的Sqlite3的autoconfig檔本身就己經支援了cross compiler的偵測,基本上只要在configure裡下一點參數就可以。

可以參考 http://www.sqlite.org/cvstrac/wiki?p=HowToCompile 裡 Crosscompile linux x86 -> linux arm的說明。

不過help裡的說是以Sqlite 3.3.7,我測試結果到3.3.17好像都還ok,到了3.4.0因為使用了isnan,所以linking時需要加上math library。

先在sqlite下建立一個building用的目錄
這是我使用的configure command。

AR=arm-uclinux-elf-ar \
RANLIB=arm-uclinux-elf-ranlib \
OBJDUMP=arm-uclinux-elf-objdump \
AS=arm-uclinux-elf-as \
CC=arm-uclinux-elf-gcc \
LD=arm-uclinux-elf-ld \
NM=arm-uclinux-elf-nm \
STRIP=arm-uclinux-elf-strip \
CFLAGS="-lm -elf2flt -DSQLITE_DISABLE_LFS" \
../configure --disable-tcl --host=arm-uclinux-elf

因為我的corss commpiler不支援big file,所以我另外再加上disable big file support的參數。
我使用FLAT的,所以再加上-elf2flt產生flat的執行檔。


2007年7月13日 星期五

為什麼swt的browser對applet支援竟然有問題

為什麼swt的browser對applet支援竟然有問題,一開始沒先測試真是大錯特錯。怎麼樣都沒想到怎麼會對自家的東西支援有這麼大的問題。無言。

2007年5月23日 星期三

wubi還滿好用的

很早以前就知道了ubuntu,那時還感覺不過又是另一個distribution,雖然他主打友善親和力,但貓沒怎麼注意,後來猛然才發覺ubuntu己然形成另一個風潮,國內的mirror也很多。國內mirror多這個還滿吸引我的,可以不用我的小ADSL慢慢從國外update。ubuntu發展基礎的debian又是我很喜歡的distribution,才開始想用他,可是又不想再動我電腦上的windows partition,才看到了wubi,其實wubi的原理很簡單,利用windows原有的partition,將file system變成 windows下的檔案,所以不需要動原有的partition。這有點像一般virtual machine的virtual disk做法。直覺想到的就是效率問題,看網路上說只有小小的效率損失,才試用看看。

現在wubi使用心得,還真的沒什麼效率上的感覺,又不是virtual machine,對我來說,真是太理想啦。我甚至還在用來玩3d game,完全不用擔心啦。加上ubuntu真的很方便,windows下的檔案存取完全不用費心。唯一要小心的是用ntfs,還要是小心磁區分散的問題。不過現在一切都很滿意。

PS.ubuntu還真的很友善,我己經被ubuntu給引吸了。

reference:
ubuntu@taiwan
wubi

2007年5月16日 星期三

openvpn client 投機設定法

一直覺得openvpn雖然有gui的介面,還有許多寫好了的script,但是如果讓light user自己從頭操作,還要拿著自己建起來的的key來server做認證,這樣可能還是有不少的問題。所以我突發奇想,那我幫user全部做好可以嗎?於是我試著在server上直接產生key直接認證,再讓user拿著認證過的key及我己經設定完成的設定檔直接配合openvpn gui使用。還真的能用,這樣就方便很多了,只是這樣不知道有沒有什麼安全上的問題。至少我還沒想到,先這樣試試看。

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月15日 星期二

Javascript 開發工具 Aptana

在網路上爬時偶然看到的這個Javascript的IDE,看起來滿好用的感覺,能編寫(那是當然的)也能Debug,還能設中斷點看data content。不過這只是符合我所期待的IDE功能,最讓我眼睛為之一亮的是,他還和redrail結合,同時支援Rails。可得找個時間來玩玩了。

Office Site Aptana

2007年5月14日 星期一

終於也搞定了openvpn

終於也搞定了openvpn,以這麼多資源和相較之下容易多了的設定來說,我還要花這麼多時間真是汗顏啊。

Install Notes。

Server:
1.安裝 lzo
2.安裝 openvpn
3.copy設定範例
cp -r /usr/share/doc/openvpn-2.0.2/easy-rsa/ /etc/openvpn/
cp /usr/share/doc/openvpn-2.0.2/sample-config-files/server.conf /etc/openvpn/

4.設定CA環境 (var 在windows裡就是var.bat)
cd /etc/openvpn/easy-rsa/
export KEY_COUNTRY=TW
export KEY_PROVINCE=Taiwan
export KEY_CITY=Taipei
export KEY_ORG="PersonalVPN"
export KEY_EMAIL="jerry@google.xx"
. ./vars
./clean-all

5.建立root CA
./build-ca
Generating a 1024 bit RSA private key
......++++++
................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TW]:
State or Province Name (full name) [Taiwan]:
Locality Name (eg, city) [Taipei]:
Organization Name (eg, company) [PersonalVPN]:
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:CA
Email Address [njerry@google.xx]:

6.建立server key及crt
./build-key-server ovpnsrv1
Generating a 1024 bit RSA private key
............................++++++
....++++++
writing new private key to 'ovpnsrv1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TW]:
State or Province Name (full name) [Taiwan]:
Locality Name (eg, city) [Taipei]:
Organization Name (eg, company) [PersonalVPN]:
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server's hostname) []:ovpnsrv1
Email Address [jerry@google.xx]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'TW'
stateOrProvinceName :PRINTABLE:'Taiwan'
localityName :PRINTABLE:'Taipei'
organizationName :PRINTABLE:'PersonalVPN'
organizationalUnitName:PRINTABLE:'test'
commonName :PRINTABLE:'ovpnsrv1'
emailAddress :IA5STRING:'jerry@google.xx'
Certificate is to be certified until Sep 7 20:36:58 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

7.建立Diffie Hellman
./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..................................+............................................
..+............................................................................
...................+....................................+......................

8.安裝 server 所需的 CA 文件
cp keys/ca.crt ../
cp keys/dh1024.pem ../
cp keys/ovpnsrv1.key ../

9.修改server設定檔
cd ../
vi server.conf
dev tap
;dev tun
ca ca.crt
cert ovpnsrv1.crt
key ovpnsrv1.key # This file should be kept secret
cp keys/ovpnsrv1.crt ../

10.啟動 server
service openvpn restart
chkconfig openvpn on



Client
試試看prebuild key能不能簡化install,待續。


參考資料
http://www.study-area.org/tips/openvpn.html

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年3月22日 星期四

Virtual Machine的最新選擇 VirtualBox

現有的virtual mahcine領域中己經有許多很不錯的產品,除了商業的VMWare以外,MS的Virtual PC也轉為免費使用。open source也有聲勢浩大的XEN(不過需要修改kernel)和qemu。qemu還能模擬x86以外的cpu。

現在最新的生力軍是原來由德國的軟體公司InnoTek 所開發的VirtualBox。在前一陣子也開放轉為GPL的open source軟體。再加上不錯的效能,值得試一試。另外一個吸引我的是他也支援Linux能在Linux下使用,挺不錯的。

其實我比較在意的是模擬的效能,一般的模擬功能對我而己都己經足夠,模擬的效能才會影響我的使用。VritualBox看起來不像VMware那麼的吃資源(VMWare越做越大越好,也越來越吃資源),網路一般的風評也說效能很不錯。當然還是有人覺得差距不大的。要找個機會來試試看。

VirtualBox Home http://www.virtualbox.org

PS. 連網址都變成.org了呢。

2007年3月19日 星期一

serialVersionUID的警告

開始使用更新的Eclipse後,發現老是會出現serialVersionUID的warring,由warring的內容來看他跟seriable有關,只是以前怎麼好像沒遇過,查了一下才發現。

原來是不同的JVM的serialize實作不必然相同,所以這個serialVersionUID真的就是serail Version 的UID,可以用來表明serialize的版本,如果你將一個instance serialize後,在deserialize時就會檢查serialVersionUID是不是一樣,不一樣的話就不會deserialize ,就能控制相容性的問題。
如果你沒有自己定義serialVersionUID的話,JVM(?)會依據class計算出不一樣的serialVersionUID,下次你在class裡新增member的話,serialVersionUID 不一樣就不能做
deserialize 。
如果你自訂serialVersionUID,就能控制serialVersionUID,class能相容從舊的serialize storage再deserialize,而新增的member就會變初始預設值。在runtime時可由java.io.ObjectStreamClass取得serialVersionUID值。
如果不知道取什麼值 JDK有個tool
serialver.exe可以幫你產生值。

2007年3月12日 星期一

runtime compile JasperRport jxml report template

最近接手別人的JasperReport tool,在客戶那一直發現有compiling的問題
runtime exception出現 net.sf.jasperreports.engine.JRException: Error compiling report java source files : m_1173545492049_398184.java 但在自己的電腦上就是沒這個問題,一直查不出來。後來才發現,JasperReport的template如果使用xml格式的話,他需重新compile,會有個暫存檔,也會用到javac程式。而之前的同事教導客戶安裝JRE就可,沒有JDK。難怪在我的開發環境上一直沒問題。真是啞巴吃黃蓮啊。

2007年3月5日 星期一

Object-RMDB Data Mapper- iBATIS

What is iBATIS?


The iBATIS Data Mapper framework makes it easier to use a database with Java and .NET applications. iBATIS couples objects with stored procedures or SQL statements using a XML descriptor. Simplicity is the biggest advantage of the iBATIS Data Mapper over object relational mapping tools.

本來是在看spring的jpetstore時,發現他使用這個ORM,感覺很不錯。其實嚴格來說iBATIS不算是ORM。不過有些狀況之下,直接使用SQL還是有其需要性,這時候iBATIS就很好用。

目前iBATIS己經加入apache project有java版 .NET版及ruby/rails版。

Embedded zero-configuration SQL database - SQLite

SQLite是個用c所寫成的SQL database engine。本身的size很小,也不太吃資源,還能支援Transactions呢。這真是embedded system的好朋友。database本身的資料是放在一個單一檔案裡。這樣我在team work時就可以很簡單的發給大家同樣的defaulot enviroment。而且SQLite本身可看你的程式結合在一起,無需另外的task。在有些時候這樣還滿好用的。在小型系統,研發時期和prototype使用都非常方便。基本上他是c寫成的,C/C++使用的API當然沒問題,網路上也有很多JDBC的driver,使用java開發的朋友也能夠開心使用。SQLite database最大可到2TB,但我想我有2TB的資料時我應該就不會使用他了吧。目前用起來唯一覺得還能再更好的就是data type支援的有限,雖然現有基本的都還夠用,不過有時就是會需要基本以外的data type。sqlite2和sqlite3的api不相容,所以使用上要注意一下版本的問題。除非有需要,否則就直接使用SQLite3,各種功能也比較完整。

SQLite office site

Lightweight 100% Java SQL Database Engine - HSQLDB

最近才發現有一個由純Java所寫成的輕量級資料庫。可單機使用,也有server模式。真是太棒了。
HSQLDB本身輕巧快速(當然是指資料庫內容不大時),對SQL的支援也很不會,配合JDBC/hibernate都能使用。HSQLDB很適合拿來當設計初期,或是研發時期所使用,做prototype階段的demo 版本也很合適。HSQLDB發展了好一段時間,目前感覺穩定性沒太大的問題,當然也可能是我使用的還不夠多還沒遇到問題。

要再加強一下信心的話,OpenOffice 2.0裡也使用了 HSQLDB 1.8.0,這樣應該能大大提升信心指數了吧。

HSQLDB office site

2007年1月11日 星期四

Ruby裡的Symbol

剛理解了ruby裡的symbol object。先記下來。

Ruby裡的Symbol是一種object,這種object包含了一個字串和一個數字(ruby內部使用的)。用字串前加一個":"來表示ex :foo。有三種方法產生symbol- :foo或:"foo"或 foo.to_sym,用foo.to_sym時foo必需是個string。

如 :foo 是一個Symbol的boject,裡面包含了"foo"的字串,及一個ruby內部使用的數字。
>:foo.to_s
=> "foo"
>symbol1 = :foo
=> :foo
>symbol1.to_s
=> "foo"
>:foo.class
=> Symbol
:foo是一種 Symbol的object,這個symbol的字串內容是"foo",而 symbol1也是。

symbol的兩大特色是不可改變的及唯一的。也就是說:foo一定是包含"foo"這個字串,不能也不會改變。整個ruby裡也只會有一個:foo的object。
>symbol2 = :foo
=> :foo
>:foo.object_id
=> 231138
>symbol1.object_id
=> 231138
>symbol2.object_id
=> 231138
symbol1和symbol2的也都是symbol的object,但是由object id可知symbol1和symbol2和:foo都是同一個object。不管你怎麼使用就是只會有一個:foo。如果是string就不一樣了。
>str1="foo"
=> "foo"
>str2="foo"
=> "foo"
>str1.object_id
=> 23518020
>str2.object_id
=> 23518030
str1和str2是兩個不同的object。

symbol的主要用途有兩個,一個是節省記憶體的使用,另一個增進效率。
由於symbol在系統裡只會有一個,所以只用掉一次的
記憶體空間,又因為他不會改變,所以你在那裡使用都不用擔心symbol的內容是否還一樣。這樣可以節省很多記憶體的使用,同樣的字串使用的越多次,改用symbol所節省記憶體的效益就越明顯。

另一個是symbol裡有一個ruby內部使用的數字,當你使用foo.action時,ruby需要比對字串去找到action這個method,如果用symbol就可以比對symbol的數字,這可以有效的提升效率。所以ruby會將你的foo.acion轉換成為foo.send(:action)以提升效率。

而symbol的比較也會比字串的比較有效率,symbol只需比較是不是同一個object即可(還記得嗎?symbol的字串是不會改變的)。

而將symbol用來做enumerations也是很常見的用法,如:RED, :BLUE, :GREEN。

好用的C++函式庫

SGI STL
C++裡好用的函式庫首推STL,這是個超級強大的library,後來的程式語言的設計也深受其影響。不過STL有好幾種版本可以使用。SGI版本的STL是被廣為使用的版本。gcc就是採用這個版本的STL。

STLport

以SGI STL為基礎發展出來具有高度移植性的STL library。Borland C++ Builder 6也包函了一份STLport。授權相當自由,非GPL授權,商業使用也可以放心使用。

Boost
很有機會被收進C++標準程式庫的一個library。裡面包函了各種好用的library,也是很熱門的C++函式庫。授權自由,非GPL授權,商業使用也可以放心使用。

將verilog轉為容易閱讀的html格式

有些工具可以讓我們將verilog的程式轉換成成容易閱讀的html格式。

v2html
是一個由perl所寫成的轉換程式,可以將verilog的程式碼轉成容易閱讀的html格式。但不只是單純的html格式,轉出來可以像javadoc或doxygen一樣有syntax highlighting,找到functions, tasks, defines, parameters的定義,還能做出設計的hierarchical view,以及決對不可少的Alphabetical Indexes。

vlog2html
由Comit Systems 公司的Venkateswarlu Talapaneni 所設計的另一個將 Verilog轉換到到閱讀的html程式。同樣也是由perl所寫成的。

有這些工具就可以在沒有任何tool幫助時,更輕鬆的閱讀verilog程式。

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日 星期三

Plone驚魂記-任何動作前先備份果然是鐵一般的守則

毫無備份的情況下,順手點了Plone裡各個需要upgrage Product。只因為看到他說可升級,當然還有一點點許久未升級的愧疚感,就順手點下去,結果是一場惡夢的開始。雖然一開始還是可以顯示出畫面及資料,但是卻無法做任何的新增文件,嚇出一身冷汗。幸好將ATReferenceBrowserWidget重新install就可以解決。不過卻因為有一些之前就有的bug我不知道,還一直以為是我升級的後遺症,害我try了一整個星期又是新版又是舊版交叉的測試。

不過才突然發現,使用Plone對各種Product對相互之間的相容性問題要這麼的小心,也開始覺得Plone的升級將會是個令人困擾的問題,也許是因為我實在是不夠熟Plone,能正常run就不理他。不知道他的free cms會不會也有這樣困擾。這也是目前open source的最令人困境的問題吧,如果他們沒有consultant服務的話,就只能自己得多花心思在migration上。

任何動作前先備份果然是鐵一般的守則,也許我該把他升級成"鑽石一般的守則"。

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的人可能要多等等了。