2005年8月31日

中共承認國軍抗戰功勳 許歷農與王昇將到北京參加活動

新聞:
  1. Yahoo!奇摩新聞 - 中央社:中共紀念抗戰勝利 許歷農王昇獲邀參加
  2. Yahoo!奇摩新聞 - 東森新聞報:中共承認國軍抗戰功勳 許歷農與王昇將到北京參加活動
疑惑:
  1. 難怪國軍不懂為誰而戰、為何而戰!
  2. 不管是國民黨還是前國軍將領,明明就自許為世界反共大軍的那群人為什麼到了今日卻無不希望得以參加中共所舉的的各種活動?

利用 Firefox 拒絕垃圾廣告

在商業網站上常常會有一堆廣告,目的是阻礙閱覽者流暢的讀取資訊。這一點很令人傷腦筋,尤其是廣告還會排擠其他資訊,導致還得動動滑鼠、東移西拉後才能接續剛剛所讀到的片段。

還好我們有 Firefox,還有它的好搭擋:AdBlock Plus extension。效果如何?我們可以來看看美容前、美容後的差異:

美容前:
未阻擋廣告前

美容後:
阻擋廣告後

2005年8月30日

又是西北颱

自從去年那次西北颱後,對防颱措施就比較重視了。

不過到目前為止,還沒能驗證防颱措施的防禦力。不知道這次這個強烈西北颱會不會又讓我在驚恐中過一夜… :(

防颱措施:

  1. 把冷氣電源移除,冷氣加蓋 - 防潑水、漏電
  2. 堵窗戶縫隙 - 防滲水
  3. 在窗戶軌道上貼一堆衛生棉 - 測試吸水力 (雖然紙尿布單位吸水量較大,可是很難整理外型… )
  4. 貼膠布 - 分散風壓,減低玻璃破裂的可能。要真破了就完蛋了…

2005年8月29日

PMP 考試日期確認

因為不願意去考厚了一倍的 PMBOK 2004 的內容,所以堅持要在 9 月前考一下 PMP !

問題來了,其實我都沒讀耶… 怎麼辦?

這兩週我專心讀書好了,抱兩週彿腳搞不好可以考上喔… (握拳)

我現在要讀書
※背景音樂:我現在要出征

我現在要讀書~~ 我現在要讀書~~ 有PARTY要舉行~~ 唉有PARTY要舉行~~ 這PARTY絕不去~~ 我現在要讀書~~ 我若是考的上 我總會回來告訴你~~ 當考場還沒BOOKING 我怎會想讀書~~ 但未來薪水都需要這張證照~~ 所以我要讀書~~ 就因為這緣故~~ 兩週以後再會~~~

2005年8月26日

抱玻璃娃不慎摔死 好心同學挨告被判重賠

新聞:
  1. 東森新聞報:抱玻璃娃不慎摔死 好心同學挨告被判重賠
  2. 東森新聞報:抱玻璃娃娃下樓摔死判賠百萬 愛心學生低調走避
  3. 東森新聞報:摔死玻璃娃娃 學校同學判賠333萬 家屬:遲來的公理
新聞(續):
  1. Yahoo!奇摩新聞 - 東森新聞報:玻璃娃娃/協會聲援陳同學 溝通後顏家表示不會向陳拿錢
  2. Yahoo!奇摩新聞 - TVBS新聞:勝訴遭批評 顏家:只求一個公道
  3. Yahoo!奇摩新聞 - 中廣新聞網:玻璃娃娃協會呼籲勿讓單一事件影響愛心
心得:
  1. 『高等法院認定照顧殘障人士是專業工作,他(陳姓學生)未能量力而為,有過失侵權的責任』這意思告訴我們:看到殘障人士要躲的遠遠的,因為那是專業人士的工作。
  2. 路上遇到狀況一定要先考慮是否得以量力而為,不然可能會有賠不完的錢!
  3. 我賠不起 333 萬,看來我只能選擇冷漠以對!
心得(續):
  1. 昨天的新聞早就在講法官的這項判例等於告訴人民不要太過熱心以免不自量力。
  2. 今天的報紙論壇則幾乎也都做出同一個結論:不要管路上發生的大大小小事,反正那都會有專業人士來處理。
  3. 昨天顏家家屬:『如果今天摔死的是陳姓同學,不知法官如何判定玻璃娃娃的責任?』我也很好奇!
  4. 惻隱之心,不能有之!
心得(續x2):
  1. 哇,一件新聞可以一直續續續也算少見…
  2. 個人對此事的看法不在於顏家向不向陳姓學生收錢,而在於法官對於熱心助人的人沒有減輕其刑責。只要這個判例不改,那每個人都會擔心自己是下一個單一個案的主角。
  3. 各類殘障人團體看來都無法置身事外,統統必須出面呼籲此為單一個案。這項判例恐怕會害慘所有的殘障人團體吧!
  4. 再加上政府收了捐款可以堆在國庫不予處理,看起來熱心助人其實並不見容於法律和政府觀點,不管是想出錢還是想出力都不行!

未公開海龍外洩報告 居民赴北市府抗議

新聞:
  1. Yahoo!奇摩新聞 - 中央社:未公開海龍外洩報告 居民赴北市府抗議
  2. Yahoo!奇摩新聞 - 中廣新聞網:捷運漏氣 華陰街住戶要求公佈調查報告 蛋洗市府
心得:
  1. 看起來北市馬主席仍然選擇逃避問題。
  2. 不知道國民黨馬市長對此事件有何看法?

2005年8月24日

海嘯善款/王金平:政府找理由藉口搪塞 為時已晚

新聞:
  1. Yahoo!奇摩新聞 - 東森新聞報:海嘯善款/王金平:政府找理由藉口搪塞 為時已晚
  2. Yahoo!奇摩新聞 - 民視:政府募款撥民間 引發適法疑慮
心得:
  1. 老實說對林佳龍質疑審計部阻撓善款發放這件事讓我對林佳龍的印象急轉直下,不過仔細想想,其實我對他也沒啥太多印象的樣子!
  2. 中午看到林佳龍和姚文智兩個的大合解演出時,差點把滿嘴的腿庫飯給噴出去。
  3. 到目前為止似乎還是只見到政府各部門的推委卸責之詞,仍然沒有一個明確的發放時間表及發放金額清單出來。

內政部地政司全球資訊網

內政部地政司全球資訊網中有這麼一個圖示:

可是當我在 Linux 上以 Firefox 想去點選畫面左側的選單時竟然發現 頁面跟本不會切換 :o ,突然覺得那個無障礙圖標好剌眼,真的好剌眼… :@

只是要查一個地圖出版品的資訊竟然也能惹上一肚子氣,蘇部長,你們家的網站真的做的太好了…

2005年8月23日

南亞海嘯善款延宕撥付挨轟

新聞:
  1. Yahoo!奇摩新聞 - 中央日報:南亞海嘯善款延宕撥付挨轟
  2. Yahoo!奇摩新聞 - 中央日報:海嘯捐款四億迄今一毛未發
  3. 蘋果日報:募款法令不周遭糾正
  4. 蘋果日報:扁賣黑鮪1800萬善款無下文
  5. 蘋果日報:在野諷:災民早餓死
新聞(續):
  1. Yahoo!奇摩新聞 - 東森新聞報:善款何時撥?家扶︰善款再不來只能放棄救援
  2. Yahoo!奇摩新聞 - 東森新聞報:兒福團體怨沒拿到扁義賣所得 蘇嘉全:錢才剛匯入內政部
  3. Yahoo!奇摩新聞 - 東森新聞報:4億善款卡國庫誰之過?前後任新聞局長摃上
心得:
  1. 其實從 921 之後就發現,這類的捐款 絕對不要 捐給政府相關單位。為什麼?照那個超機車的撥款流程跑完後災民真的會餓死的。
  2. 下次要捐款請盡量直接捐給社福團體或民間救援組織。他們的效率絕對比行政單位要來的快、狠、準。
  3. 像行政單位這類的重大缺失本來是由監察院來加以監督的,可惜立法院想做太上民意機構所以技術性廢了 國父理想中的五權分立制度。
  4. 國民黨立院黨團有啥麼資格出來鬼吼鬼叫啊?那是五權中被立院閹割掉的監察權的職責耶,關立法權啥屁事!
  5. 陳水扁這次要不要也出來罵兩聲?畢竟他費盡心思賣 Toro 的熱情被新聞局給浪費了。
  6. 新聞局的廢話還真多… :@
心得(續):
  1. 突然有點搞不懂,那些捐款的目的到底是啥啊?南亞災民?台灣災民?在南亞都收拾的差不多時,還撥錢嗎?
  2. 內政部次長張溫鷹稍後也在記者會中表示,「如果一切順利,第一筆款項大概在9月底前就能分配出去」。 』好吧,該餓死的恰好來的及付喪葬費用。
  3. 內政部也是到6月30日才收到陳總統義賣黑鮪魚的所得,「錢才剛匯進來不久」。 』如果兩個月算不久,那就難怪捐款會扣在國庫半年了… orz...

2005年8月22日

Web應用程式自動部署作業-使用 Tomcat 及 Ant ( Part II )

記得在去年在 Web應用程式自動部署作業-使用 Tomcat 及 Ant 一文中介紹過如何透過 Ant 完成 Tomcat 上的 Web 應用程式自動部署作業。過了一年後相關的設定也有了修正,且目前因為計畫將部署程序移轉到 Maven 上,所以先在此將作法登錄下來,算是一個歷程的完結。

第二版的部署作業最大的改變就是將原本那個超大的 build.xml 檔予以解散,並將系統的、專案專屬的設定項目都切割開來,目的當然在簡化每一個設定檔的大小。以下從目錄結構開始介紹起:

網頁應用系統標準目錄結構

現行所有的網頁應用程式目錄結構係依據 Application Developer's Guide: Deployment (也可參考 Web Application Archives) 文中所描述基本結構,配合後續單一檔案維護要求而設定。目錄結構如下:
網頁應用系統標準目錄結構
WEB-ROOT       網站根目錄,目錄中會包含 Ant 建置主檔
├─build        建置過程中之暫存目錄
├─build.ant    Ant 建置主檔附屬支援目錄
├─conf         網站參考設定檔
├─css          應用系統目錄:依各專案不同而有增減
├─distribute   建置完成輸出目錄
├─images       應用系統目錄:依各專案不同而有增減
├─src          原始程式檔:主要為該專案之 servlet、javabean 等原始檔存放目錄
├─war.backup   遠端程式備份目錄:儲存遠端伺服器上原本運作中之網頁應用系統壓縮包
└─WEB-INF      Web Application Archives 標準目錄
    └─lib      該應用系統有關之類別庫一律置放於此目錄下

ANT 部署說明

所有的部署動作由 WEB-ROOT 下的 build.xml 開始,透過 build.ant/ 目錄下的輔助設定及類似 Ant 副程式的機制,完成自動化部署作業。而在系統建置過程中將參考 conf/ 目錄下之內容以建構出完整的網頁應用系統部署套件。

如何使用 build.xml 部署建置檔

常在取得一份 .war 檔後,先使用 7-zip 等檔案解壓縮工具將檔案解壓到專案目錄中,此例為取得一個 QuerySalary.war 檔案。附圖是這個壓縮檔案的內容。(註:war 檔的本質是 Zip 格式)
取得 war 壓縮檔
解壓縮 .war 檔後,即可從命令列中檢查該專案所附的 build.xml 設定檔提供那些功能,請切換到專案所在目錄中並鍵入以下指令:
檢查 build.xml 提供功能
ant -projecthelp
以下是 QuerySalary 專案的 ant -projecthelp
CHECK_PROJECT_HELP
另一個專案的 ant -projecthelp
CHECK_PROJECT_HELP_OTHER
通常來說要部署一個專案時只要鍵入以下指令即可!當然請先確定該建置檔是否提供相對應之部署功能。
各階段部署應用系統的方式
# 部署至正式主機
ant production

# 部署至開發用主機 ant dev

# 部署至使用者測試主機 ant uat

下圖為某次部署作業之畫面擷圖:
某次部署作業之畫面擷圖
  • 每個專案總會有些差異,這類的差異由 build.ant/ 目錄下的檔案進行調整,稍候介紹。

build.xml 內容說明

以下為 build.xml 之基本設定:
build.xml
<?xml version="1.0" encoding="Big5"?>
<!-- 專案名稱,識別用 -->
<project name="Forms">

<!-- 初始設定區段 --> <target description="初始設定作業" name="init"> <!-- 設定系統環境變數之識別碼 --> <property environment="env"/> <!-- 載入基本屬性設定檔 --> <property file="${basedir}/build.ant/build.properties"/> <!-- 載入資料庫屬性設定檔 --> <property file="${basedir}/build.ant/database.properties"/> <!-- 載入部署作業屬性設定檔 --> <property file="${basedir}/build.ant/deploy.properties"/> <!-- 開始建置時間 --> <tstamp> <format pattern="yyyy-MM-dd HH:mm:ss" property="build.time"/> </tstamp> <!-- 建立 CLASSPATH 設定 --> <path id="build.classpath"> <fileset dir="${lib.path}"> <include name="**/*.jar"/> </fileset> </path> <!-- Configure the custom Ant tasks for the Tomcat 5.0 Manager application --> <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/> <taskdef name="list" classname="org.apache.catalina.ant.ListTask"/> <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"/> <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/> <taskdef name="roles" classname="org.apache.catalina.ant.RolesTask"/> <taskdef name="start" classname="org.apache.catalina.ant.StartTask"/> <taskdef name="stop" classname="org.apache.catalina.ant.StopTask"/> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/> </target>

<!-- 顯示 ant 目前的 properties 設定值 --> <target depends="init" name="echoProperties" description="顯示 ant 當前 properties 設定值" > <echoproperties/> </target>

<target depends="init" description="清除輸出目錄" name="clean"> <!-- 刪掉打包過程暫存目錄 --> <delete dir="${build.path}" quiet="true"/> <!-- 刪掉最終輸出檔案目錄 --> <delete dir="${target.path}" quiet="true"/> <!-- 刪掉所有名為 .bak 之檔案 --> <delete quiet="true"> <fileset dir="${basedir}"> <include name="**/*.bak"/> </fileset> </delete> </target>

<!-- 建立系統所需環境(目錄及檔案) --> <target depends="clean" name="prepare-system"> <ant antfile="${basedir}/build.ant/system.xml" inheritrefs="true"/> </target>

<!-- 建立專案所需環境(目錄及檔案) --> <target depends="prepare-system" name="prepare-project"> <ant antfile="${basedir}/build.ant/project.xml" inheritrefs="true"/> </target>

<!-- 測試是否有 struts.xml ant 設定檔,目前未使用 --> <target depends="prepare-project" name="test-struts"> <available property="struts.xml.present" file="${basedir}/build.ant/struts.xml" type="file" /> </target>

<!-- 建立專案所需環境(目錄及檔案) --> <target name="prepare-struts" depends="test-struts" if="struts.xml.present" > <ant antfile="${basedir}/build.ant/struts.xml" inheritrefs="true" /> </target>

<!-- 編譯 java 原始程式(包含 servlet 及一般類別庫)--> <target name="compile" depends="prepare-struts" description="編譯 java 原始程式" > <javac deprecation="${deprecation}" destdir="${classes.path}" srcdir="${java.source.path}" debug="on" debuglevel="lines"> <classpath refid="build.classpath"/> </javac> </target>

<!-- 建立 javadoc 文件,僅限於已設定 JAVADOC 環境變數時才會啟動 --> <target if="env.JAVADOC" name="javadoc" depends="compile" description="建立 JavaDoc 文件,只在已設定環境變數 JAVADOC 時執行此作業" > <ant antfile="${basedir}/build.ant/javadoc.xml" inheritrefs="true" /> </target>

<!-- 開發測試環境中需要準備的動作 --> <target depends="javadoc" name="dev-prepare"> <!-- 開發環境中所需的 log4j 相關設定資料 --> <property name="log4j.properties.path" value="${dev.deploy.webroot}"/> <property name="logfile.path" value="${dev.deploy.webroot}"/> <!-- 呼叫 genConfig task 以便建立 web.xml 檔案 --> <antcall target="genConfig" inheritAll="true"/> </target>

<!-- 使用者驗收測試環境中需要準備的動作 --> <target depends="compile" name="uat-prepare"> <!-- 使用者驗收測試環境中所需的 log4j 相關設定資料 --> <property name="log4j.properties.path" value="${uat.deploy.webroot}"/> <property name="logfile.path" value="${uat.deploy.webroot}"/> <!-- 呼叫 genConfig task 以便建立 web.xml 檔案 --> <antcall target="genConfig" inheritAll="true"/> </target>

<!-- 正式環境中所需要先行準備的動作 --> <target depends="compile" name="production-prepare"> <!-- 開發環境中所需的 log4j 相關設定資料 --> <property name="log4j.properties.path" value="${production.deploy.webroot}"/> <property name="logfile.path" value="${production.deploy.webroot}"/> <!-- 呼叫 genConfig task 以便建立 web.xml 檔案 --> <antcall target="genConfig" inheritAll="true"/> </target>

<!-- 初始化 XDoclet 設定 --> <target name="genWeb.xml"> <path id="xdoclet.classpath"> <!-- xdoclet 類別庫路徑在 build.properties 檔中自行捉取環境變數設定 --> <fileset dir="${xdoclet.lib.path}"> <include name="*.jar"/> </fileset> <pathelement location="${classes.path}"/> </path> <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.classpath"/> <!-- Generate servlet and JSP Tag "stuff" --> <webdoclet destDir="${basedir}/WEB-INF" mergeDir="${basedir}/conf" force="true" verbose="false"> <fileset dir="${java.source.path}"> <include name="**/*.java" /> </fileset> <deploymentdescriptor distributable="true" displayname="${application.name}" description="${application.description}" > <!-- 要特別傳給 xDoclet 用的設定變數 --> <configParam name="application-name" value="${application.name}"/> <configParam name="application-description" value="${application.description}"/> <configParam name="log4j-init-file" value="${log4j.properties.path}/${log4j.properties.file}"/> </deploymentdescriptor> </webdoclet> </target>

<!-- 建立網頁設定檔 - web.xml --> <target name="genConfig" depends="genWeb.xml"> <!-- 自動調整 log4j.properties 中的 log 檔檔名 --> <replaceregexp byline="true" file="${target.path}/${log4j.properties.file}" match="log4j.appender.FileLog.file=default.exception.log" replace="log4j.appender.FileLog.file=${logfile.path}/${log4j.exception.file}"/>

<!-- 調整的變數內容 --> <echo>LogFile.Path: ${logfile.path}</echo> <echo>LogFile.Name: ${log4j.properties.file}</echo> <echo>${target.path}/${log4j.exception.file}</echo>

<!-- 用於修改 datasource 設定之內容 --> <!-- <replaceregexp byline="true" file="${web.xml}" match="${DATASOURCE}" replace="${data.source}"/> --> </target>

<!-- 將編譯出來的 .class 予以打包 --> <target depends="compile" name="package" description="將編譯出的 .class 檔壓製成單一 .jar 檔,放入 web root 下的 WEB-INF/lib 目錄中"> <jar basedir="${classes.path}" jarfile="${jar.name}"/> <delete dir="${classes.path}" quiet="true"/> </target>

<!-- 將整個WEB ROOT目錄打包成.war部署檔,此部署檔已完整包含開發所需各原始程式。 --> <target depends="package" name="build"> <war warfile="${war.name}" webxml="${web.xml}"> <fileset dir="${build.path}" excludes="**/*.jar"/> <lib dir="${lib.path}"/> </war> </target>

<!-- DEV,通常會採用 JSP Container 的自動部署功能,因此使用 FTP 上傳方式處理 --> <target name="dev" if="dev.deploy.server" depends="dev-prepare, build" description="部署 DEV 測試環境" > <echo>Sending file(s) to ${dev.deploy.server}...</echo> <ftp binary="yes" depends="yes" password="${dev.deploy.password}" server="${dev.deploy.server}" userid="${dev.deploy.user}"> <fileset dir="${target.path}"/> </ftp> </target>

<!-- UAT,通常與 DEV 同一台主機,因此也採 FTP 部署方式處理 --> <target name="uat" if="uat.deploy.server" depends="uat-prepare, build" description="部署 UAT 測試環境" > <echo>Sending file(s) to ${uat.ftp.server}...</echo> <ftp binary="yes" depends="yes" password="${uat.deploy.password}" server="${uat.deploy.server}" userid="${uat.deploy.user}"> <fileset dir="${output.path}"/> </ftp> </target>

<!-- Production, --> <!-- 若使用 JRun 4 時必須採用 FTP 上傳方式,但目前多數已改用 Tomcat Application Server, 可在關閉自動部署(校能考量)後,透過 Tomcat 內建的管理功能進行部署作業! --> <!-- catalina-ant.jar --> <target name="production" if="production.deploy.server.1" depends="production-prepare, build" description="部署 production 正式環境" > <echo> Deploying ${application.name}.war to ${production.deploy.server.1}… </echo> <!-- 移除原指定路徑上之應用系統,應用系統名稱為 deploy.properties 中所定義 --> <undeploy url="http://${production.deploy.server.1}/manager" username="${production.tomcat.user.1}" password="${production.tomcat.password.1}" path="/${application.name}"/> <!-- 傳送檔案 ( log4j.properties 設定檔 ) --> <echo> Sending ${log4j.properties.file} to ${production.deploy.server.1}… </echo> <ftp binary="yes" depends="yes" server="${production.deploy.server.1}" userid="${production.deploy.user.1}" password="${production.deploy.password.1}"> <!-- 避開 .war 檔 --> <fileset dir="${target.path}" excludes="**/*.war"/> </ftp> <sleep seconds="5" /> <!-- 重新部署 --> <deploy url="http://${production.deploy.server.1}/manager" username="${production.tomcat.user.1}" password="${production.tomcat.password.1}" path="/${application.name}" war="${war.name}"/> <tstamp> <format pattern="yyyy-MM-dd HH:mm:ss" property="complete.time"/> </tstamp> <echo>Deploy complete at ${complete.time}</echo> </target> </project>

build.ant/ 相關配置檔案說明

build.ant/build.properties 基本參數設定

此檔為 Ant 建置過程中的標準參數設定檔,通常使用時直接保留原始設定檔即可,不需另行修改。

build.ant/database.properties 資料庫參數設定

此檔為資料庫連線有關的參數設定檔,通常是在 xdoclet 建置 web.xml 配置檔時修改相關參數時使用。目前因採用 Servlet Containner 提供的 Connection Pool 或其他原因之故並未真正使用本設定檔。

build.ant/deploy.properties 部署參數設定

此檔為專案部署有關之參數設定檔。內容及說明如下:
build.ant/deploy.properties 內容說明
# 定義應用程式名稱, 請用英文,且 .war 壓縮包將以此為名
application.name=QuerySalary
# 定義應用程式名稱, 請用英文
application.description=FITEL QuerySalary System

# log4j 記錄器設定 - 給 log4j init servlet 使用, # 為避免不同專案混淆造成混亂,直接以專案名稱設定 log4j.properties.file=${application.name}-log4j.properties # 此檔案會放在指定之 ${deploy.webroot}/ 下 log4j.exception.file=${application.name}-exception.log

# 正式環境之 FTP 部署設定 # 若有多台時以 .2, .3, … 方式登記,但系統的 webroot 應統一! production.deploy.server.1=production.server production.deploy.user.1=production.user production.deploy.password.1=production.password # webroot 只有一組 production.deploy.webroot=C:/JRun4/servers/EHR # 此為 Tomcat 管理界面使用,JRun 不使用此法 production.tomcat.user.1= production.tomcat.password.1=

# 開發人員環境 FTP 部署設定 # 無測試主機,故設定與 正式環境 相同! dev.deploy.server=${production.deploy.server.1} dev.deploy.user=${production.deploy.user.1} dev.deploy.password=${production.deploy.password.1} dev.deploy.webroot=${production.deploy.webroot} # 此為 Tomcat 管理界面使用,JRun 不使用此法 dev.tomcat.user=${production.tomcat.user} dev.tomcat.password=${production.tomcat.password}

# 使用者驗收環境 FTP 部署設定 # 無測試主機,故設定與 開發環境 相同! uat.deploy.server=${dev.deploy.server} uat.deploy.user=${dev.deploy.user} uat.deploy.password=${dev.deploy.password} uat.deploy.webroot=${dev.deploy.webroot} # 此為 Tomcat 管理界面使用,JRun 不使用此法 uat.tomcat.user=${dev.tomcat.user} uat.tomcat.password=${dev.tomcat.password}

若有兩台以上正式主機時,除了在 build.ant/deploy.properties 中設定 production.deploy.server.2 等等變數外,尚必須連帶修改 build.xml 檔內容如下: (其他 Application Server 亦請比照辦理!)
build.xml
  <!-- Production, JRun 4 -->
  <target depends="production-prepare, build" 
          description="部署 Production 正式環境" 
          name="production" if="production.deploy.server.1">
    <echo>Sending files to ${production.deploy.server.1}...</echo>
    <ftp binary="yes" depends="yes" 
         server="${production.deploy.server.1}" 
         userid="${production.deploy.user.1}"
         password="${production.deploy.password.1}">
      <fileset dir="${distribute.path}"/>
    </ftp>
    <!-- 若有兩台以上主機時,移除以下區段之註解並修改主機編號即可! -->
    <!--
      <echo>Sending files to ${production.deploy.server.2}...</echo>
      <ftp binary="yes" depends="yes" 
           server="${production.deploy.server.2}"
           userid="${production.deploy.user.2}" 
           password="${production.deploy.password.2}">
        <fileset dir="${distribute.path}"/>
      </ftp>
    -->
    <tstamp>
      <format pattern="yyyy-MM-dd HH:mm:ss" property="complete.time"/>
    </tstamp>
    <echo>Deploy complete at ${complete.time}</echo>
  </target>

build.ant/system.xml 系統基礎作業部署設定檔

此檔受 build.xml 呼叫,用於建置網頁應用程式之基本目錄結構。整個網頁應用程式之暫存目錄會放在 WEB-ROOT/build/ (在 build.ant/build.properties 內設定)下,而且通常不做任何修改。

build.ant/project.xml 專案作業部署設定檔

此檔受 build.xml 呼叫,用於配置專案所需目錄或檔案之用。必須視專案之目錄需求進行對應之調整。
build.ant/project.xml
<?xml version="1.0" encoding="Big5"?>
<project name="project.prepare" default="project.all">
  <target description="建立輸出所需相關目錄" name="project.mkdir">
    <!-- 有額外的目錄要納進專案時,請在此處增加之 -->
    <!-- 注意:所有要打包的目錄必須先行建立在 ${build.path} 指定的目錄下 -->
    <mkdir dir="${build.path}/images"/>
    <mkdir dir="${build.path}/css"/>
  </target>

<target description="複製系統檔案" depends="project.mkdir" name="project.copy"> <!-- 若有額外的檔案要納進專案時,請在此處增加之 --> <!-- 注意:所有要打包的檔案/目錄必須複製到 ${build.path} 指定的目錄中 --> <copy todir="${build.path}"> <fileset dir="${basedir}" excludes="**/*.bak" includes="**/*.jsp"/> <fileset dir="${basedir}" excludes="**/*.bak" includes="**/*.html"/> <fileset dir="${basedir}" includes="**/*.xml" excludes="**/build.xml,**/web.xml,**/build.ant/**,**/build/**" /> </copy> <copy todir="${build.path}/images"> <fileset dir="${basedir}/images"/> </copy> <copy todir="${build.path}/css"> <fileset dir="${basedir}/css"/> </copy> </target>

<target description="執行所有動作" depends="project.copy" name="project.all" /> </project>

build.ant/javadoc.xml javadoc 文件建置設定檔

此檔受 build.xml 呼叫,用於建置 src/ 下所有 java 原始碼之 javadoc 文字檔。必須先設定一個環境變數 JAVADOC 時,才能在建置過程中觸發此項作業。
build.ant/javadoc.xml
<?xml version="1.0" encoding="Big5"?>
<project name="javadoc" default="javadoc">
  <target name="javadoc" if="env.JAVADOC" 
          description="建立 JavaDoc 文件,只在已設定環境變數 JAVADOC 時執行此作業">
    <mkdir dir="${javadoc.path}"/>
    <!-- 必須設定欲產生那一個 package 下的文件,如紅色字所標示的內容 -->
    <javadoc author="true" 
             bottom="Copyright by FITEL. Co., 2005" 
             classpath="${classes.path}" 
             classpathref="build.classpath" 
             description="請視需要調整 packagenames 屬性之內容" 
             destdir="${javadoc.path}" 
             doctitle="○○企業 ${ant.project.name} 專案類別庫說明文件" 
             header="&lt;b&gt;FITEL ${ant.project.name} JavaDcos &lt;/b&gt;" 
             packagenames="tw.net.fitel.ehr" 
             protected="true" sourcepath="${java.source.path}" 
             use="true" 
             version="true" 
             windowtitle="○○企業 ${ant.project.name} 專案類別庫說明文件">
      <link href="http://java.sun.com/j2se/1.4.2/docs/api/index.html"/>
      <link href="http://java.sun.com/j2ee/1.4/docs/api/index.html"/>
    </javadoc>
  </target>
</project>
以下是執行情形:
  1. 未設定 JAVADOC 環境變數時:
    NO_JAVADOC
  2. 已設定 JAVADOC 環境變數時:
    SET_JAVADOC

conf/ 目錄說明

conf/commons-logging.properties

conf/ejb-resourcerefs.xml

conf/error-pages.xml

conf/log4j.properties

conf/mime-mappings.xml

conf/servlets.xml

conf/web-settings.xml

conf/welcomefiles.xml

被遺漏的 Java 專案管理工具:Maven

Nokia 說的好:『科技始終來自於人性』
那麼下聯呢?『人性始終少不了惰性』

為了不需要每次部署網站時都要自行動手修改相關設訂、打包、FTP 上傳等等鎖碎的工作,很早以前就利用 ant 完成了網站應用系統自動化部署作業,並在專案開發過程中減少了不少的等待時間。為什麼這麼努力的不務正業在搞這些哩?還不就是人太懶嘛… :p

不過這個月份的 跑吧!電腦 卻介紹了另一套與 ant 同屬 Apache 基金會的 專案管理套件 Maven ,這讓我又開始想將先前的專案部署方式移轉到 Maven 中。

會讓我想將專案部署機制從 ant 移轉到 Maven 的原因有兩個:

  1. Project dependency:這表示我不用在移交專案時得付上一大票的類別檔,甚至還可以指定所需版本,這是個很重要的功能。
  2. Project build and reports:從文章中的介紹看來,似乎可以將相關的專案報表一併包到 .war 檔中,雖然 ant 也可以自行做到,只是很麻煩。
我想我會花個一到兩天的時間,將一部份的專案移轉到 Maven 中試試,若試用效果良好的話再全面移轉!

2005年8月19日

光氣惹爭議 居民要馬英九負責

新聞:
  1. Yahoo!奇摩新聞 - 民視:光氣惹爭議 居民要馬英九負責
  2. Yahoo!奇摩新聞 - TVBS新聞:「光氣研究」遭推翻 羅士翔低調
  3. Yahoo!奇摩新聞 - TVBS新聞:華捷光氣外洩 居民火大市府抗議
心得:
  1. 昨天衛生局找來的專案中有人說該研究內容粗糙。
  2. 其實華陰街的居民要的不是衛生局去找所謂的專家來批評別人的研究結果如何,他們要的是真正的專家來提出完整的研究方案。
  3. 人都怕死,給華陰街的居民一股不會死的信心就夠了!可是目前捷運局、衛生局都只會強調 那不是光氣 ,而不是去設法證明那些滅火器(包含 海龍 1211 或海龍 1301 )並不會產生光氣。
  4. 光氣研究有無被推翻呢?個人認為還有的等,等一個真正的研究計畫後才能知道。
  5. 目前看來,馬主席還是維持一慣不沾鍋的特性耶!他到底啥時才能找到公正第三者來協助檢驗啊?

318 槍擊案?

總統槍擊案在莫名其妙下結案,會不會是因為搞錯日期的關係啊?

東森新聞 - 政治 - 火線話題:
東森新聞火線話題清單

2005年8月18日

馬英九時代

新聞:
  1. Yahoo!奇摩新聞 - TVBS 新聞:【馬英九時代來臨】「不沾鍋」進廚房 馬英九誓當愛國鍋
  2. 蘋果日期:災民挺 揭露光氣醫師 捷運公司衛局聯手 追究報告外洩
  3. 蘋果日期:憂毒氣再洩 守夜不睡
  4. 蘋果日期:揭密醫師 恐遭囚3年
心得:
  1. 雖然大家都說馬英九時代已經來臨,尤其是在其正式接任國民黨主席之後。可是老實講,最近的台北市府的狀況特別多,我是真的很懷疑馬英九是否有時間(不問能力)可以處理市政與黨政的各種問題。
  2. 台北市機車竊盜案破案率高達 16x% 的原因,是北市員警勾結竊盜集團買回贓車,可是似乎沒有高官受到懲處?
  3. 捷運局公安意外,結果衛生局想要一起掩飾太平?
  4. 怎麼好像感覺華陰街的居民不是台北市民?他們只是一群被北市衛生局遺棄在台北市的受害者?
  5. 覺得『洩露國防以外秘密罪』這項指控有白色恐怖的威力喔!尤其各種政治討論論壇中動不動有人提到陳水扁是神經病、報紙也三不五時就說連戰會打老婆,這算不算也是 洩露國防以外秘密罪 哩?
  6. 我真的很好奇台北市府還會再捅出啥漏子出來,更期待不沾鍋如何可以繼續不沾鍋!

2005年8月16日

國道台北總站啟用 49條客運路線集中發車

新聞:
  1. Yahoo!奇摩新聞 - 中廣新聞網:國道台北總站啟用 49條客運路線集中發車
心得:
  1. 記得先前看統聯的公告是從 08/01 開始啟用,從 Google 上查則是五花八門。如:東森新聞報-16日啟用;中時電子報-6日正式啟用。
  2. 將所有客運及路線集中在一起的好處是:選擇方便了,那邊有車就往那邊擠!
  3. 不知道台北市政府的臺北新訊網站在想啥,連總站位置圖及週邊公車路線圖都要弄成 doc 檔才甘願!拜託~~看看悠遊網的頁面,簡單清楚又明瞭,那還有時間去安裝 Windows 和 Office 來開啟 doc 檔啊。
  4. 我一直懷疑台北市政府有圖利微軟的情形,才會在網站上搞一堆微軟專用文件格式出來。

Java 的全文檢索套件

兩篇介紹 Java 的全文檢索套件 - Lucene 的文章:
  1. jserv: 全文索引引擎Lucene簡介
  2. 東東: 在应用中加入全文检索功能-基于Java的全文索引引擎Lucene简介
第一次注意到這個套件是在去年的 Java Two 上,加上最近可能要實作這個玩意兒,所以先留個記錄!

Google 真誇張!

在 BBS 上看到 jserv 從 Google 中找回國小時代的大頭照,於是也想用自己的名字試試看。

Oh My God… :o

  1. Goole 竟然把我們公司的生日禮金發放記錄給找出來了… @.@!
  2. 原來有人和我同名同姓耶!我一直以為這個名字是超冷門、沒人要的名字說!

2005年8月15日

小林尊又出來大吃特吃了

新聞:
  1. Yahoo!奇摩新聞 - 民視:叉燒包大胃王 12分鐘吞100顆
心得:
  1. 看報紙寫小林的體脂率才 14%.... 更!上次測我是 28% 耶… :'( 我又吃不過小林… :@
  2. 能夠如此猛吃還不胖… 會不會是… 有迴蟲?Doctor K 漫畫中有這種案例耶… :p

2005年8月12日

醫學漫畫日益專業寫實 醫師健保官員也愛看

新聞:
  1. Yahoo!奇摩新聞 - 中央社:醫學漫畫日益專業寫實 醫師健保官員也愛看
心得:
  1. 我也喜歡看醫學類的漫畫,我必須承認有些醫學常識其實都是從這些漫畫中看來的。
  2. 前幾天才趁著颱風天重新複習把無敵怪醫 (Doctor K) 44 冊及新無敵怪醫 10 冊。最令人悔恨的是這一套書的主角死了,而承繼著 K 族血統的下一代故事看來好像不會推出… :'( 這套書算是以 醫生的責任與榮耀 為主吧!
  3. 更早前還有重新複習天生神手這一套,目前出到 21 集。有很多搞笑的片斷,但也 一再強調生命的可貴
  4. 新聞中提到的『怪醫黑傑克』… 呃… 大概是畫風吧,我沒有從書架中拿出來的勇氣。
  5. 『醫界風雲』嘛… 嗯,大概是太寫實了,所以也沒從書架中抽出來過!
  6. 『醫龍』也有在看,其實也不錯看!不過內容似乎偏重於醫生技術面的表現及醫生應有的態度。
  7. 『仁者俠醫』這是現代腦科醫生不小心回到過去時,試圖表現現代醫學對改變日本古醫術的一些可能影響。

2005年8月9日

頻道換照/無國界組織批換照 華府輿論關注

新聞:
  1. Yahoo!奇摩新聞 - 東森新聞報:頻道換照/無國界組織批換照 華府輿論關注
  2. 東森新聞報: 頻道換照/無國界組織批換照 華府輿論關注
感想:
  1. 這次共有東森S台、歐棚、蓬萊仙山、龍祥電影台、彩虹頻道、CASA、華爾街財經台等七台換照未過。
  2. 文中『「無國界記者」組織,針對國內七個電視頻道換照沒過關,發表聲明認為新聞局做法違反新聞自由。』
  3. 我想問的是 這七個頻道那一個是新聞台 ?又如何能違反 新聞自由 ?我真的看不出來耶!無國界記者組織會不會太莫名其妙了?
  4. 我希望下次新聞局能真正將現有新聞台數量減半,省的浪費頻道資源給一堆沒啥新聞素養的爛記者。
補註:
  1. 東森S台全名似乎是東森新聞S台,但是他們真的有在做新聞嗎?要不就談話性節目,要不就借東森新聞台的內容來播,再不然就自己搞摸擬遊戲結果惹出大風波… 這真的是新聞台嗎?

2005年8月8日

土城看守所之去留!

新聞:
  1. Yahoo!奇摩新聞:羅文嘉要搬看守所 周錫瑋:不可行
感想:
  1. 政治人物的思維邏輯真的不是我們這些平民百姓能理解的。
  2. 在爭執財政負債升高前,能不能先討論一下『 土城看守所能搬到那邊去? 』這個問題呢?

果然官字兩個口,以為喊水會結凍!

新聞:
  1. 東森新聞報: 謝揆指示8日恢復桃園供水 何美玥:朝目標努力中!
  2. Yahoo!奇摩新聞 - 東森新聞報:復水跳票! 水濁度飆高40倍如黑豆漿 桃園維持供一停一
  3. Yahoo!奇摩新聞 - 中廣新聞網:原水濁度高還無法排除 桃園是否繼續分區停水 下午決定
心得:
  1. 實在很難理解 謝揆下令復水就認為真能復水的理由何在 ?隨便承諾一下再讓其跳票難道有助於政績的宣傳嗎?
  2. 我不認為桃園縣長可以把缺水的責任都推給中央,所有的災難都是一連串的錯誤所導致,桃園縣長真有把握這些錯誤中沒有一條是桃園縣要自行承擔的嗎?

2005年8月4日

台灣的政治新聞果然很氾濫!

在陳水扁 寧願犧牲國家安全只為保障新聞自由 的理念(這是什麼理念?)下,台灣的政治新聞的氾濫已經超乎想像!

我一直不知道原來趙雲的性別問題也屬於政治的一環… orz ,原始網址在:網路追追追/ 三國名將趙雲 竟是女扮男裝?(一)

2005年8月3日

擷取 XML 中不重覆的某元素值

踹了很久,不幸在 Google 中找到了超級簡單的解決方案:selecting unique entries from a list

所以擷取 Extensions.xml (參照:開始提供 『Mozilla Firefox 擴充套件網頁安裝服務』 ) 中不重覆的 category 元素值的作法如下:

category.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<link rel="stylesheet" type="text/css" media="all" href="extensions.css" />
<title>Firefox 套件自動安裝服務</title>
</head>
<body>
<xsl:apply-templates select="/extensions"/>
</body>
</html>
</xsl:template>

<xsl:template match="/extensions" > <!-- 請把 select 內的前後空白去掉 --> <xsl:for-each select=" extension/category[not (. = preceding::category)] "> <xsl:sort select="." /> <xsl:value-of select="." /><br /> </xsl:for-each> </xsl:template> </xsl:stylesheet>

呵呵,看來還有的玩囉!