跳到主要內容

文章

目前顯示的是 三月, 2006的文章

PMD

PMD是一個Code檢查器,找出可能之潛在問題。並能與許多IDE整合,提供進一步的建議。
PMD scans Java source code and looks for potential problems like:Possible bugs - empty try/catch/finally/switch statementsDead code - unused local variables, parameters and private methodsSuboptimal code - wasteful String/StringBuffer usageOvercomplicated expressions - unnecessary if statements, for loops that could be while loopsDuplicate code - copied/pasted code means copied/pasted bugs同性質的還有許多,但PMD是我用起來最習慣的,與Eclipse整合也很好。
CheckStyle就用得不習慣。

BlueJ

BlueJ 是由澳洲墨爾本 Monash 大學的 BlueJ 小組所設計及開發,其目的在發展一套適合用來教導初學者學習物件導向概念的IDE工具。BlueJ的特性包含有:
◎ 完整的整合式開發環境
◎ 圖形化顯示類別架構圖形化類別架構編輯介面。
◎ 內建編輯器、編譯器、虛擬機器及除錯器。
◎ 可互動式的產生物件與操作

可以當做小巧的IDE用,目前也有一些extension,但並不能當完整的IDE用;目前最新消息是和NetBeans合作,NetBeans IDE / BlueJ Edition預計在五月底會出現beta版。

wxWidgets

若 要跨平台,又要用C++,其實沒多少選擇。看到CodeWarrior用它自己的framework,就感覺很沒力,我不想要另一個MFC。在十年前有看 到一個叫wxWindows的framework,當時就有些人在用,後來微軟認為這名稱太像Windows,就請他們改名,現在叫wxWidgets

知名 GUI lib 簡評裏PCMan提到 GTK+是純C,QT寫的不是標準 C++,wxWidgets在 Windows 上
執行速度並不輸 MFC,與其學 MFC,不如學 wxWidgets。朋友強者Randy用的是OpenGLSDL,對我而言太低階,看來似乎是用wxWidgets比較適合我。

這裏有一些工具,大多數還是Windows版,有一些本身就是用wxWidgets寫成,應該可以port到OSX上。

傳聞中,Borland要改用wxWidgets取代Kylix的QT,但看來是無疾而終。希望Eclipse的CDT能夠引進wxWidgets的GUI Designer,畢竟wxWidgets這個UI framework是目前我找到移植性最好,速度快的,希望能像Eclipse一樣成為Killer framework。

好久沒看C++

今天想起昨天看到約耳談軟體,C ++的程式設計師比起Java和C#值錢多了,就拿起C++程式語言第三版增訂版。一個很重要的變動,現在的C++建議在include時省略".h", 明天得看看VC 8產生的code有沒有照這個標準。另外新增像dynamic_cast,以及仍沒有finally,沒有object類別,這些都是六年前我該會的東 西,可惜當時的compiler還沒完全支援

同事的VC6已經玩得很強, 弄出許多變態的特效,讓我很想寫Mac的程式,但我又不會Objective-C,想拿wxWidgets來試試,下載mac版wxMac- 2.6.3.tar.gz檔用XCode來編,共有932個source file,編譯將近1小時才搞定。用命令列去跑,大約只花了半個小時,Build還是不要靠IDE比較快。

Eclipse C++的IDE仍然太慢,RAM吃太多,做refactoring時很慢...
個人覺得XCode對C++而言,還是不夠好,比不上對Objective-C的支援度。
可能花$99美金去買CodeWarrior Development Studio for Mac OS比較實在,今天佷晚了,明天下載一個試用版來玩玩吧。

Data Mining

前兩天去參加微軟的Data Mining短期課程,有80%都是Statistics,我唯一比較熟的是Neural Network和Linear Regression。大部份都是大學教授在講理論,所以算頗有深度;參與的學生似乎以中階主管居多,而且大部份都有Data Mining經驗。

雖然我對微軟不太滿意,但SQL2005的Data Mining做得真好用,實在厲害!不過bug也不少,April就要出SP1,真是MS風格呀!

上課心得:
1. SpamAssassin用的Bayes是蠻爛的方法,錯誤率頗高。
2. Data Mining不求精準,只求增加判斷率,能賺錢就好。
3. 資料採礦是需要許多背景知識、Domain Know How與經驗。
4. 其實微軟的軟體真的不算貴,唔,讓我想起當年的Unix工作站和PC的價差。(現在我用的Mac Mini市價13500,A牌的PC要20000,變成Unix工作站比Win PC便宜)

更新到 Java 5

雖然Java 5出現快兩年,但我最近都在用C#,所以也就對新功能比較沒接觸。
今天就利用一些時間,把自己寫的小程式更新為Java 5語法。

1. 若有程式已經很久沒有動,也不想改,又有很多Collection的put、get,在Eclipse都是Warning,怎麼辦呢?
解決方法: 在class宣告前加上metadata
@SuppressWarnings("unchecked")
若是deprecated的method,可以在method前加上
@SuppressWarnings("unchecked")
其實很穩定的code當然是不改為最高指導原則,但我對code的要求是:take warning as error,所以就必須要以上處理。

2. 使用Generic
before Generic:
HashMap hm = new HashMap();
int i=1;
String tt="test";
hm.put(new Integer(i), tt);

after Generic:
HashMap <Integer, String> hm = new HashMap<Integer, String>();
int i=1;
String tt = "test";
hm.put(i, tt); // 1. Auto Boxing 2. 自動型別檢查

今天因為這樣,發現了一個我之前copy-paste忘了改的地方,哈

3. Generic很好用,但我自己要怎麼寫呢?
before Generic:
public interface Queue
{
public void add(Object obj);
public Object remove();
}

public class ListQueue implements Queue
{
}

after Generic:

public interface Queue <A>
{
public void add(A obj);
public A remove();
}

public class ListQueue
<A> implements Queue <A>
{
}

參考文件

ajaxWrite

今天不知道在那兒逛又看到ajaxWrite用起來還算不錯,忽然想起在某大網站工作時,業務希望我做一個給他用的Web介面功能像Word,我當時一口回絕說不可能,沒想到今天連微軟都要做Windows Live。
以前不知道IE自從5.0以後,內建一個WYSIWYG HTML editor,在早期Netscape還不能貼上Rich Text時IE就有這功能。現在到sourceforge.net隨便都有一堆,而且不需要IE引擎。我果然沒有遠見,科技始終於人性,有這種需求就有人發明;當初早做出這種東西,現在就發財了。

Hurd微核心

上一篇提到Mach,就順便提一下Hurd。這裏有GNU Hurd和GNU Mach,GNU Hurd是以GNU Mach為底層發展出來,GNU Mach當然就是拿Mach直接改囉。

在 曾瑞源的Linux書有提過,GNU一直想做真正multi-thread類Unix核心,Richard M. Stallman (RMS)這位GNU祖師就找上開發Mach的教授,請他改成RMS想要的樣子,當然被一口回絕,所以RMS就自己做,而曾瑞源一方面玩Linux也一直 很期待Hurd(希望他不要太期待呀~)。後來的結果就是Hurd一直沒辦法達到production quality,就把Debian搭Linux發行。後來Debian大受好評後,又推出Debian ports;這是將Debian套件移植到其他平台的計畫,包括其他CPU及非Linux核心,當然有Debian GNU/Hurd囉,有興趣就玩玩吧!

我個人的感覺是,咳,夾不死和理察攤販想法差不多,但夾不死以商業資源和靈活的手段做到RMS無法達成的目標-> OSX的核心Darwin。 所以我要繼續去玩Mac囉~

Mac的網路卡

在同事的Blog有提到,Mac用的en0在FreeBSD找不到,今天打開我這台Mac Mini的系統描述才發現真是誤會一場。
原來Linux將網路卡命名為eth0、eth1,而OSX以相同的做法稱為en0、en1。系統描述裏的硬體直接叫"乙太網路"要知道那家做的,得去查Mac Address,這台是00:14開頭,知道的人自己去查吧。

在FreeBSD男人一下rc.conf有一段
It is also possible to rename interface by doing:

ifconfig_ed0_name="net0"
ifconfig_net0="inet 10.0.0.1 netmask 0xffff0000"所以用FreeBSD直接可以做到這種效果,但ifconfig的命令就不知要如何下,改天有空再試試。

OSX不完全以FreeBSD為藍本,最主要是還有Mach,所以架構上和FreeBSD差異頗大~

在Mac、Linux與Windows共用的檔案系統-- Ext2

我有一個40G外接硬碟,在Mac下格式化為FAT32(XP不支援一顆40G Fat32)。用了一陣子,最近發現某些Unicode檔名不直援,長度也比較短,而且有4GB檔案大小限制。

在Linux上可以找到HFS+的Driver,如ARDIS HFS+ Linux driverLinux HFS+ Support,但是在Windows上只有MacDrive,是要錢的玩意。

所以我把腦筋動到Ext2上,在Mac有FUSE - EXT2建議)、Mac OS X Ext2 Filesystem(未維護,不支援10.6)
在Windows上則有Ext2Fsd(建議)和IFS Drives(中文有問題)、Explore2fs(中文有問題)。

這樣一來,我就可以用Unicode長檔名,而且可超過2G。很想學貓叫日記台長手插腰對空長笑三聲,哈哈哈~

目前唯一要做的就是去買新硬碟把資料都備出來才能重新格式化。

補充說明:使用FUSE存取檔案系統一定比較慢,可參考如何在Mac下,存取Ext2/Ext2檔案系統,若對速度要求較高者,請使用作業系統原生支援的檔案系統吧!

Resin+PHP?

我真的太久沒看Java陣營,今天不知在那看到,Resin 3.0支援PHP,以前就有支援Javascript,現在又支援PHP,實在是太猛了。
Resin是我所用過最快的Servlet Container,現在又推出這玩意,給我兩個心得:
1. Resin的確夠棒,這種功能都做的出來,應用上又更有彈性。
2. PHP果然佔Web開發的大宗,昨天去天瓏都找不到幾本.net 2.0的書,Resin聰明向PHP靠攏,這樣才不容易被幹掉,至少可以當做比較快的PHP Container也不錯呀。

雖然沒什麼人在看我的Blog,不過要註明,Resin是Opensource的商業軟體,任何人要開發都可以自由下載試用,沒有任何限制與警告,真是夠開放。同時Resin也是第一個沒有中文亂碼問題的Servlet Container,可惜與Tomcat的處理方式不同,因此還是用標準的做法處理中文比較妥當。

Firefox 1.5.0.1 for Mac常當

同事的Firefox 1.5.0.1 for Mac常當,其實我的也滿常當,都是在編輯MSN Spaces加Link做貼上動作時,剛才貼他的網址又掛了一次 Orz...
這就是為什麼最近很少更新Blog。
另外一點,我沒遇過他的情形,猜想是他的Firefox對zip檔的處理方式不同。
Anyway,Firefox 1.5.0.1 for Mac不穩是事實,但它是目前我在Mac下看到最習慣的Browser,Safari還是沒那麼順手。

Visual Studio 2005

拿到Visual Studio 2005快兩個月,今天終於提起勁在重灌4次的乾淨Asus L4上跑起來,這台有700MB RAM的機器能夠很順利的執行這隻大怪獸。

若沒仔細看,不會發覺和VS2003有太大的差別,但真正拿來寫程式就赫然發現其實真的增強了不少功能。首先,UI Designer增加對齊功能,方便不少;並且增加許多的control 及component。再來是內建的Refactoring速度很快,比起外掛的Resharper快很多。

另一個最大的改變是Web開發不再需要IIS,使用內建的Web Server,讓開發人員不需要administrators權限。在Web專案下,可以混合語言開發,不同的page使用不同的language,但在WinForm專案是辦不到的。

其他的新功能等過一陣子再說囉~