2006年8月4日 星期五

T:描述結構性資料

抽象化的第一件事,是能用簡單的名字描述一串結構,
較佳的結構至少是類 xml 的階層結構。
階層結構由 "{}"來區分,
而 sequence 結構由 "," 及出現的前後區分。
一個 order 有很多 entry 可這樣描述
order ={
light={amt=2},
bulb={amt=2}
}

取出 order 第一個物件就是
order.light.amt==2
用"." 點來區分物件。

2006年7月31日 星期一

T:一個新語言的設計

看完 B. A. Tata 的"超越 Java" 後,有種想設計新語言的念頭。
這個語言的中心哲學是,
"簡單直覺的描述一件事"

語言暫且稱為 T 意思為譯者,
能讓我們用簡單的命令告訴它,讓電腦作事情。

當然這是交談式的,
我告訴 T 一件事,
T 會給我回應,溝通圖如下:
I <-> T
T 給我的回應是在下一行,
我給 T 的稱作"指令",
T 的回應是用字串報告的結果,
並列印於螢幕上。

首先這個語言的 hello world 是如此
I: print("hello world!");
T:hello world!

2006年7月18日 星期二

SVN 基本用法


















SVN 與 CVS 異同
功能SVNCVS
版本編號每次 commit 專案編號加一,版編=專案被 commit 的次數每個檔案一個編號,編號=這個檔案的commit 數
異動功能add delete copy moveadd delete
指定儲存庫標準 URL 語法,語法較自然類 URL

SVN 的版本編號



SVN 一次都是給整個專案都同一個 revision number,
而 CVS 是一個檔案一個 revision number。
這樣的好處是可以很簡單的找出穩定的版本。
因為穩定和整個專案有關,而非個別的檔案。
所以一個穩定的專案版在 SVN 可用一個 revision number 表示,
而在 CVS 需指定每個檔案的 revision number 比較麻煩。



安裝SVN


1.先下載 bin 檔案
2.解壓安裝
3.設定環境變數 lang=en_us 以去除中文亂碼

常用指令



以下指令以主機[192.168.0.188]及專案[RPMS]為範例:

察看目前儲存庫的目錄



svn list svn://192.168.0.188/

取得最新的工作烤貝



svn co svn://192.168.0.188/RPMS

更新工作烤貝



#進入工作目錄
cd RPMS
#更新
svn up

加檔入確認排程



#進入工作目錄
cd RPMS
svn add FILE

刪檔入確認排程



#進入工作目錄
cd RPMS
svn delete FILE

建立子目錄加入排程



#進入工作目錄
cd RPMS
svn mkdir DIR

確認上傳



#進入工作目錄
cd RPMS
svn ci

連接密碼控管的文件庫


若要連上有加上密碼控管的文件庫則在命令前加上使用者及密碼資訊如下:
svn co --username ggyy --password ggyy svn://gyboy.blogspot.org/fhope

2006年7月3日 星期一

ANT 簡介

ANT 的角色是作為一個 跨平台 的批次檔或 shell script。 shell script 是幫助自動化發展應用程式的非核心工作, 像是檔案管理、源碼管理、程式庫 dependency 分析、 程式師合作的溝通。 讓程式師專注於解決他的問題, 基本上除了寫程式的事外,ANT 都能幫你作好, 她能為妳處理下面這些事。
  • 檔案管理- copy, move, mkdir, rename等
  • ANT 能從不同來源取得檔案的方法,像是 ftp, cvs, svn, http get 等
  • 也能用 ftp 來幫妳佈署檔案到遠端主機
  • 壓縮檔案
  • 支援 zip, unzip, jar, war, 幫妳生成包裝檔案
  • 利用 JDBC 設定資料庫
  • 利用 Telnet 幫妳設定遠端的 Server,ex.重開 weblogic
  • 支援 CVS, SVN 幫妳作版本控管
  • 利用 JUnit 自動幫妳作測試,並產生測試報告
  • XSLT 幫妳轉換 XML 的文件
  • XDOCLET 幫妳自動生成程式碼
  • 把 JSP 轉成 JAVA 可指定 tomcat 或 weblogic
  • 幫妳從檔案取代字串,通常用在 html sign 上最後修改日期的自動化
重點是上面這些工作妳可以全部在一個檔案定義, 然後用 ANT 去呼叫特定的工作, 把寫程式以外卻又必要的雜事集中控管, 又可以輕易的呼叫出來 功能強大,又跨平台, 不用 Linux 寫 sh,Windows 又要寫 bat。 所有的語法已被 XML 統一了, 所以 ftp telnet bat sh perl xslt copy find svn cvs 等奇怪的語法, 全部都可用 xml 表示,像是指定一組檔案, 在所有的命令都是用 來表示, 不用再去參考某命令的文件,再去找他指定一組檔案的語法

例:把 JSP 上傳測試機

  • 傳統上我們得用 ftp GUI client 貼上去,但每次改一段要測試就得重覆這個動作,在程式間跳來跳去,相當不方便。
  • 聰明一點的,會把利用 ftp 的 command 指令寫成巨集執行這個重覆的動作ftp 命令檔如下:
#deploy.ftp
root
rootpassword
cd /deploy/webapp
put /local/file1.jsp
put /local/file2.jsp
cd /deploy/classes
put /local/file1.class
put /local/file2.class
然後要上傳時輸入
ftp -s deploy.ftp
批次執行上述的 ftp 命令
看看 ANT 怎麼作?
         description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">





可以把 元素看成個別的 dos bat 檔 ,要執行只要輸入
ant deploy.pcstest
就可以執行 所定義的工作了。 再看看 ANT 的 copy 指令
         description="create a temp dir for make ncqmda release file" >












再看看 ANT 的 ZIP 指令
         description="create a nckmqa release zip" >





有沒有發現指定檔案集的方式都是用 。 若沒用 ANT,ftp 命令有一種指定檔案的語法, dos bat 又一種,unix 還有語法超級特殊的 find 指令, 每次用都要 man find 復習一下, 在 ANT 指定一組檔案就一種方法。

ANT 可統一設定所有的資源,包括 SQL, Telnet, CVS, http GET, mail

可遠端操作 Telnet 不用在使用其它的 cliet 去作這件事, 以下看看如何重開 weblogic。
  
userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &



當然透過 JDBC 也可用 SQL 設定資料庫
  
driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);


cvs 或 svn 也通用,用來作版控。
  




自動寄 e-mail。




The ${buildname} nightly build has completed




從 http 抓檔案
     dest="statement.html"
username="1214";
password="secret"/>

ANT 能自動比較檔案的新舊,來作動作

ANT 能從不同來源取得檔案的方法, 像是 ftp, unzip, copy, cvs 等, 其中一個重點是當目的檔案比來源檔案舊時, 應該不可覆蓋來源檔案,相關的屬性如下
[v1|v2] 第一個表預設值
ftp.depends=[no|yes] yes 表不覆蓋
ftp.newer=[no|yes] yes 表不覆蓋
unzip.overwrite=[true|false] false 表不覆蓋
copy.overwrite=[false|true]false 表不覆蓋

直接看我的範例檔吧!


operation









location="${build.test.dir}/report"/>






value="jdbc:mysql://localhost/pss?useUnicode=true&characterEncoding=big5"/>




value="jdbc:informix-sqli://192.168.11.112:1526/pcs:authority:INFORMIXSERVER=nckmdb_tcp"/>










value="${pcstest.nckmdomain.dir}/applications/hospitalization"/>
value="${pcstest.ap.dir}/DefaultWebApp"/>
value="${pcstest.web.dir}/hospitalization3/operation"/>
value="${pcstest.web.dir}/WEB-INF/classes/"/>

location="d:\nckm\DefaultWebApp\hospitalization3"/>

value=":pserver:nckmcvs:nckmcvs@ftp-proxy.syscom.com.tw:/cvshome/nckm"/>
value="nckm_s"/>
description="setup a environment for this project" >


























description="put file to test machine" >
debug="on"
source="1.4"
target="1.4">





description="unit test" >






name="edu.ncku.hosp.OPRMaterialRecordTXTest"/>


description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">




remotedir="${pcstest.web.classes.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">






remotedir="${test.server.operation}"
userid="root" password="wyj0806" depends="no" binary="no">





description="backup" >
value="${backup}/${ant.project.name}_${DSTAMP}${TSTAMP}.zip"/>




description="create a temp dir for make ncqmda release file" >












description="create a nckmqa release zip" >





description="clear release dir">


description="put release into nckmqa" >
remotedir="nckmqa"
userid="root"
password="wyj0806"
depends="yes"
binary="no">







description="restore src to initialize state" >








message="import procject files: ${scm}"/>




test.server.operation.dir=${test.server.operation}






userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &




driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);




無廢話ANT 安裝

  1. 下載ANT
  2. 解壓縮至 c:\ant
  3. 設定環境變數 JAVA_HOME=C:\jdk
  4. 設定環境變數 ANT_HOME=C:\ant
  5. 設定環境變數 PATH=%ANT%\bin

使用 FTP task

安裝以下的庫至 %ant_home%/lib 下
  • jakarta-oro-2.0.8.jar
  • commons-net-1.4.0.jar
在 build.xml 第一行補上:
classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/>

Ant vs Maven

Maven 是 ANT 的主要對手,其差異如下: Ant 有三個階層,project target task,但彼此互不關聯 Maven 在 project 層則隱涵target。

2006年6月23日 星期五

開發程式活動及工具

開發程式的活動
開發程式包含了下面幾個活動:
  1. 撰寫說明文件,設計文件,需求文件,專案文件
  2. 編輯程式碼文件
  3. 文件版本控管
  4. 程式測試
  5. 程式除錯
  6. 程式建立
  7. 程式佈署
  8. 臭蟲需求追縱記錄

一篇介紹程式發展工具的好文
用Open Source工具開發軟體: 新軟體開發觀念

我用的程式發展輔助工具
----------------
文字編輯器:vim

程式語言:Java
編譯器:javac
除錯器:jdb, 尚未有深入研究,見:java debug, O'Reilly sleepless 專欄

程式碼結構 index 產生器:
jtags,對 java 結構產生一 tags 的 index 檔,使編輯器可很快走到 java 的某項結構
ctags,支援多個語言

程式建立輔助工具:ant, maven 好像也不錯
安裝程式產生器:目前還用 ant 模擬
log 系統: log4j + chainsaw ,links:log4j 簡明手冊

版控系統:SVN 和 CVS 都有用,目前希望專注在 SVN 上

目前想要的功能:
bug tracker:無,想要找一套,或自已寫
測試軟體:JUnit, htmlUnit,dbunit
vim 能有 code completion
vim 有更好的 xml 編輯功能

CASE Tools
UML 塑模器:ArgoUML 似乎進步了,不過比不上 Rose UML 吧
StartUML 也不錯
RDBMS Exploerer: Squirrel
上面覺得不好用是因為沒跟 vim 整合在一起吧!

2006年6月22日 星期四

值得注意的未來技術:WiMAX

WiMAX的真實面貌

George Ou‧郭文興譯  2005/08/01

WiMAX(全球微波存取互通介面)是IEEE 802.16乙太網路的介面標準,就像Wi-Fi是802.11乙太網路的標準一樣。這兩年來,WiMax已經成為無線網路界最流行的專用字彙。同時它也可能是近年來最被誇大誤解的技術之一。

對WiMAX常見的誤解有:

  • WiMAX的傳輸範圍一定比Wi-Fi大

  • WiMAX的速度比Wi-Fi快

  • WiMAX會跟Wi-Fi競爭,進而取代Wi-Fi

  • WiMAX比Wi-Fi更安全。
  • WiMAX的傳輸範圍一定比Wi-Fi大

    WiMAX的設計可以在需要執照的無線頻段,或是公用的無線頻段運作。只要系統業者擁有該無線頻段的執照,而讓WiMAX在授權頻段運作時,WiMAX便 可以用更多頻寬、更多時段與更強的功率進行傳送。一般來說,只有無線ISP業者才會使用授權頻寬的WiMAX技術。至於Wi-Fi的設計則只在公用頻段中 的2.4GHz到5GHZ之間工作。美國的聯邦通訊委員會(FCC )規定Wi-Fi一般的傳輸功率要在1毫瓦到100毫瓦之間。一般的WiMAX的傳輸功率大約100千瓦,所以Wi-Fi的功率大約是WiMAX的一百萬 分之一。使用WiFi基地台一百萬倍傳輸功率的WiMAX基地台,會有較大的傳輸距離,自然毫無疑問。

    雖然有授權頻段的WiMAX顯然有較長的傳輸範圍,也不代表只要有錢就要趕著去買個WiMAX基地台。你必須要有一個授權的無線電頻段,就像一個音樂電台 也必須要有頻段執照,才能在空中發射無線電波。而如果WiMAX跟Wi-Fi一樣放在未授權的頻段,則它的傳輸優勢就馬上消失了。Wimax跟Wi-Fi 都是基於無線頻段傳輸的技術,所以受同樣的物理定律限制。反之,如果在同樣的條件下,讓Wi-Fi使用授權頻寬,Wi-Fi也可以跟WiMAX一樣快。另 外,雖然WiMAX可以利用較新的多路徑技術。目前新推出的pre-N MIMO(多天線雙向傳輸)技術Wi-Fi產品也使用了該技術。

    WiMax的速度比Wi-Fi快

    WiMAX的擁護者常常在大肆宣揚該技術的速度優勢。雖然WiMAX聲稱最高速度每秒70mbyte,然而最新的Wi-Fi MIMO理論上也有每秒108mbyte的最高速度,而實際環境下也有45mbps的速度。我可以去商場買一個Wi-Fi MIMO的基地台回家組裝,自行確認其速度約為45mbps,然而WiMAX的產品至今卻尚未出現。WiMAX技術同樣受技術問題與物理定律所限制,要談 論WiMAX的實際頻寬還是太早。

    無線ISP業者在建置WiMAX的時候,同樣會遇到現今其他無線業者會遇到的頻寬競爭難題。授權頻段的WiMAX系統涵蓋範圍極大,約數十公里,其建置的 困難可說是一把兩刃之劍。這是因為無線覆蓋範圍非常之大,裡面會有極多的使用者同時競爭同樣的頻寬。就算無線ISP業者使用多個獨立的頻道來運作,在同一 個頻道中,還是會有數倍於Wi-Fi的使用人數。我所認識的每一家無線ISP業者,不管是無線微波業者、3G行動業者,到衛星電話業者,同樣都會遇到頻寬 競爭與QoS(服務品質)管控的問題。

    如果網路的延遲在200到2000毫秒間遊移,這種網路根本不可能使用VoIP、視訊會議、網路遊戲,或任何其他的即時應用。雖然已經有人談論將 WiMAX加上QoS機制,以供VoIP使用,然而實作方法與實作效益仍舊有待觀察。而在Wi-Fi方面,Spectralink上的QoS實作成效已被 證實,同時802.11e的無線QoS標準也將要推出。無線ISP業者的WiMAX建置一定會比非授權的WiMAX或Wi-Fi基地台建置來得慢,因為對 無線ISP業者不可能會去讓少數用戶使用整個頻段。

    私人而使用公用頻段的WiMAX基地台,與Wi-Fi基地台的設置到底何者為快,將取決於產品的推出。由於理論上他們的傳輸功率與頻段大致相同,而市面上 已經有大量而且成熟的Wi-Fi產品,我個人會賭Wi-Fi這一邊贏。Wi-Fi在非授權頻段這一邊已經領先一大步,很難想像WiMAX在這個領域有辦法 成功。這是為什麼WiMAX多是往無線ISP業者的方向來推動。

    WiMAX將與Wi-Fi競爭,進而取代Wi-Fi

    最狂熱的WiMAX支持者甚至辯稱WiMAX將會完完全全的取代Wi-Fi,讓Wi-Fi成為歷史。這種想法說好聽一點是過度樂觀,過難聽一點則是荒謬無 比。WiMAX在整合與標準化無線微波ISP市場的過程中,將會有一席之地,但它並不會直接的與大多數的Wi-Fi建置競爭。WiMAX將會聚焦於授權頻 段的無線ISP市場,而Wi-Fi將會繼續主導私用的無照無線市場,如公司或家用的無線網路。WiMAX與Wi-Fi唯一會重疊的地方,大概就是收費的 Wi-Fi存取點了。

    由於WiMAX連線的涵蓋面積較大,以數十公里計,而Wi-Fi存取點是由數十米的小片面積所組成,所以WiMAX在全球涵蓋上會有佔有優勢。但是因為目 前的市場佔有率較高,以及因為小範圍、同時競爭的用戶人數較少,造成Wi-Fi較快、延遲較小的特性,Wi-Fi的收費存取點仍可能持續流行。至於 WiMAX是否能擊敗Wi-Fi的收費存取點,關鍵因素將是WiMAX的QoS機制是否良好實作,以及如何解決過多使用者的問題。如果WiMAX技術跟現 今的無線ISP一樣,具有過多使用者與高延遲的問題,它絕對不可能讓Wi-Fi收費存取點的需求消失。

    WiMAX較Wi-Fi來得安全

    WiMAX比Wi-Fi更安全是另一個盛傳的錯誤觀點。事實上WiMAX使用的是與Wi-Fi 的WPA2標準相似的認証與加密方法。其中的微小區別在於WiMAX的安全機制使用3DES或AES加密,然後再加上EAP,這種方法叫PKM-EAP。 而另一方面Wi-Fi的WPA2則是用典型的PEAP認証與AES加密。沒人可以說其中一個一定絕對比另一個安全,因為好的安全性往往取決於實際建置方式 的正確與否。

    讓社會大眾知道WiMAX的正反兩面十分重要。WiMAX技術與802.16標準是十分重要的,因為他是無線ISP業者未來合理的演進方向。但是它絕非無 線網路技術萬能而且終極的解決方案。WiMAX或其他的無線網路技術將會互補,同時這些無線技術也不可能取代有線技術的需求。無線的連線方式必定更有行動 力、更方便。至於有線的連線方式,只要能牽上線,則一定更快,更可靠。我們必須揚棄所有關於WiMAX的不實謠言,務實看待這個技術的真實面貌。

    Assertion

    裡面缺乏一篇介紹,
    assertion 的開啟及關閉是由
    java -ea
    來設定的,也就是可在虛擬機啟動時才指定。

    JavaWorld@TW - Assertion 介紹與使用