2004年12月28日

超有趣 Firefox 擴充套件

EggOn 是一個很有趣的 Firefox 擴充套件。

這是幹啥用的呢?只是為了一顆水煮蛋!對,水~~ 煮~~ 蛋~~ … :p 以下是簡單的說明:

選擇想吃的水煮蛋種類後,當時間到了會提示你… :D

  • 4 Mins for Soft Boiled ( 這大概就是溫泉蛋吧? )
  • 8 Mins for Medium Boiled
  • 11 Mins for Hard Boiled
開發人員在開發這個套件時的相關活動: Vancouver Firefox Release Party -- EggOn .1! 那看起來很像是 Firefox 點火行動時起哄所得到的成果…

2004年12月23日

Exchange Server 的 LDAP 認證

公司的 Exchange Server 是 2003 版本,已提供 LDAP 協定供查詢相關訊息。

不過,當要認證時不可以使用 uid=userName,ou=organization,dc=mail,dc=domain,dc=com 的 LDAP 格式,反而必須使用 [email protected] 這種名稱才能完成認證,有點傻眼… :(

2004年12月20日

奇摩新聞 - 下載火狐狸全球熱台灣冷

剛剛在Yahoo即時科技新聞中看到這個標題下載火狐狸全球熱台灣冷,雖然上面說校園推廣活動因為期末考試而有所遲滯,不過我覺得最大的問題在於台灣的網站/網頁絕大多數跟本就是專門寫給Internet Explorer用的,連帶才導致使用者不願意使用安全性較高的Firefox。更糟的是當向這些網站反應時,竟然會得到:『請使用大家都有的 Internet Explorer 來瀏覽我們的網站!』這種哭笑不得的回覆,當然Firefox的下載率就不可能高到那邊去。

更何況,台灣政府只會鬼吼鬼叫要發展Open Source軟體,卻見到法務部大開記者會宣佈花了一筆人民納稅錢去買了幾百套微軟公司的Office,如此口是心非的態度除了養肥了廠商外,跟本沒有其他成效。

天堂書屋 - 戀火

剛看完這部片子,對裡面的音樂非常好奇,也考慮另外寫一篇感想。

不過這不是問題,重點是這部片子是在北海道拍攝的,在北海道有一個特殊的服務中心 - 北海道外景拍攝服務中心網站,真是有趣。

另外這部片子的結束前有一場鋼琴演奏,搞的我想要找找看有沒有原聲帶來聽聽。

2004年12月15日

提款機也會中病毒喔

真是傷腦筋,因為銀行不想花太多錢而使用 Windows 平台的提款機後,自動提款機製造商Diebold表示在2004年8月時曾發生提款機受電腦病毒攻擊的案件。相關新聞請參考CNET Windows提款機遭病毒入侵 的報導。

不確定台灣的提款機是否有接上Internet網路,但是只要有心人把病毒散佈到網路中後,你我的存款就危險了… 唉…

2004年12月13日

Alien VS Predator

剛看完了 Alien VS Predator,片尾那段 Alien 自 Predator 身體中竄出來的晝面,表示 Alien VS Predator Part II 也將開拍...

讓我來猜猜會出現什麼情況好了…

  1. Predator船中打的很高興,然後相互毀滅
  2. Predator船中打的很高興,而且還有別星系的 Alien 來插花
  3. Predator船中一下就打完了,Predator繼續他們的旅程
  4. Predator船中一下就打完了,但是 Alien 把船開回地球
  5. Predator船中打的難分難捨,所以Predator的國王/艦長決定到地球找女主角幫忙,然後接上Alien I, II, III 集
  6. ...
好啦… 其實只是我想太多而以… :p

※另外我想到 n 年前 Capcom 曾推一個打 Alien 的動作遊戲,似乎和這個片子的內容是相似的。那個遊戲中的主角有三個:一個公的、一個母的、還有一個 Predator 。難道… 下一集的內容就是那個嗎?

2004年12月12日

2004-12 立委選舉馬後砲

三年一輪的立委選舉結束了,每一份報紙都在針對選舉結果發表評論,我也要參一腳…
  1. 此次投票率不及 60%,我是那沒去的 1/40% 。
  2. 投票率達新低,中間選民不見了:這次選舉民進黨似乎忘了中間選民才是決勝的關鍵。自320以來泛藍的種種作為早已讓中間選民不奈,泛綠陣營本有過半的機會,可是因為陳水扁強勢介入立委選舉,拋出那堆莫名其妙的議題後,反而造成中間選民的冷漠,強化深藍選民的危機感,所以泛綠才會輸給泛藍。反正結論就是: 陳主席下台、陳主席下台
  3. 續上,個人也認為一國總統不應該介入各級民意代表的選舉。陳水扁插手到立委選舉也令我非常反感。
  4. 陳水扁說:『因為泛綠努力不夠,導致此次敗選。』可是老實說我跟本上認為是陳水扁努力過頭所導致的結果,所以… 陳主席下台、陳主席下台 … :p
  5. 泛藍高層也不要以為這就是新民意,請注意還有高達 40% 的人實質上放棄了藍綠兩陣營,而這個比例是遠高過各黨各自的得票率的。連戰在選後記者會中講的:『這是高興的時刻,這不只是國民黨的勝利,也是泛藍的勝利,更是中華民國的勝利。』說真的只是他老人家想太多而以;低投票率其實是台灣民主的大失敗啊。
  6. 泛藍過半後,中間選民會開始等著看連戰先前所提的組織新政府訴求如何實施;也會等著看陳水扁怎麼應付這個問題。因為憲法規定組閣權在總統,所以未來政局是否安定的基本源頭在於陳水扁;個人認為陳水扁在這個選後情勢上仍然佔有主導權,而且接受泛藍所提的閣揆人選雖不一定能賺,但是卻保證不賠。
  7. 江炳坤也不用太高興有閣揆可以做,因為在陳水扁政府下泛藍不是第一次組閣,只是唐飛後來被搞成啥德性大家也都看到了。
  8. 此次有37位現任立委落選,不知道這些立委是否仍想繼續走政治路線。個人覺得這些人很適合當選區內的整合者:整合中央、地方的民代資源,全力服務選區內的選民。只是這麼做的成果不一定會反應到個人身上,卻可以累積黨的民心,最後還是看各黨如何從平常時期累積民心。
  9. 馬的,呂秀蓮憑啥把泛綠敗選原因推給選民不投票?2008年她要是出來選總統,我保證我也不返鄉投票,哼!

2004年12月8日

在 HTML 中嵌入媒體檔的正確做法

以下是從Mozilla@Taiwan討論區中查到如何在 HTML 中嵌入多媒體檔案的作法,雖然目前傾向改用 Flash 製作前端界面,不過還是要快點記下來...

<object data="test.wmv" type="video/x-ms-wmv" style="width: 320px; height: 240px;">
   <param name="src" value="test.wmv" valuetype="ref" />
   <param name="autoStart" value="1" valuetype="data" />
   <param name="DisplaySize" value="0" valuetype="data" />
   <param name="Volume" value="100" valuetype="data" />
   <div>Fallback content</div>
</object>
  1. 聽說除了 wma 可以這樣玩之外,其他都會失效… :(
  2. MSDN中有關於IE版 Object 物件的設定說明
  3. 這裡有比較完整的介紹。

2004年12月1日

製作2005年曆

在網路上看到一個製作立體2005年曆的說明,蠻有趣的!有興趣旳人可以到12 sided calendar參考參考!

如何有效地報告錯誤

因為公司目前有一套系統正在進行上線前測試,收到很多奇奇怪怪、莫名其妙的錯誤報告,造成修改上的困難。為此還特地做了 如何報告您遇到的錯誤 網頁出來。 今天在網路上看到一篇很有用的文章:如何有效地報告錯誤,原本是英文的,不過這個連結已翻譯成中文版本,請各位參考!

2004年11月22日

2004-12 立委選舉有感

個人看法

  1. 泛綠總席次要過半 + 5 席,但民進黨與台聯的比例不可以高過3:1。
  2. 民進黨有財團壓力,常會做出一些莫名其妙的妥協,而台聯不會管這些。
  3. 泛藍與無黨聯盟的比例最好低於5:1,不過我想泛藍也不會因此把焦點從陳水扁竊國、兩顆子彈的故事移轉回民生、經濟吧。不過應該可以讓泛藍進行一次小規模甚至大規模的洗牌,這樣或許能讓民意能蓋過上位者的權力慾。

色彩學

泛藍

  1. 泛藍限陳水扁三日內改國徽:不知道這三日期限是如何定下來的?我總覺得泛藍還是認為國家體制的任何改變可以不經由人民自決,可以依個人好惡強行變更。麻煩泛藍人士搞清楚這點。
  2. 軍人有選擇三軍統帥權利:這是誰說的?親民黨立委 顧崇廉 說的,個人認為這就是有政變意圖了。軍人只能遵從人民的選擇,沒有自己決定三軍統帥的權利!至於所謂的投票自由則是人民選擇一國元首的權利,但不是軍人選擇三同統帥的權利!
  3. 2004/11/24 連戰提出『軍購減半』口號:這次選舉泛藍以反軍購為主要訴求雖無可厚非,但我想知道如果要反軍購,那麼泛藍的國家安全保障方案何在?要『軍購減半』也可以,但是請問泛藍人士能不能找到那種即便宜,性能也不錯的替代武器呢?到目前大概只有親民黨立委 林郁方 有針對此部份小小說明,除此之外其他的泛藍人士都是喊爽的,甚至可能有些立委還搞不清為什麼要高喊反軍購的理由… 唉...
  4. 泛藍過半,免於戰爭威脅:先不管是乞求還是歸順而能免於戰爭威脅,不過泛藍過半,內耗永不間斷比較有可能!
  5. 國民黨對扁所提朝野和解『扁的話聽聽就好』:因為泛藍從來不曾想過要接受朝野和解啊。這是陳水扁投出來的好球,國民黨從沒就不曾想過要揮棒打擊。

泛綠

  1. 陳水扁的政變說:如果政變的話,就直接法辦吧。拿出來對社會大眾呼嚨兩聲是個重大錯誤!
  2. 陳水扁的國徽、黨徽不分說:這的確有調整的空間,像是中正紀念堂內放的就是國民黨黨徽。從這點來說,蔣介石似乎不像紀念歌中所說的是『民族的救星』嘛,不過後面那句『世界的偉人』倒是可以確定只是夜郎自大罷了!
  3. 陳水扁說『連宋打算 2008 年再選一次總統』:別人的家務事關你屁事?
  4. 泛綠過半,兩岸才能談判:想太多,台聯怎麼看都不太願意和對岸談判。台聯的重心應該還是只放在台灣本島而以。
  5. 呂秀蓮『當副總統,如坐五年牢』:明明就是權力慾望太大,還講的好像很委屈哩。覺得像坐牢可以辭職不幹啊!
  6. 陳水扁再提朝野和解:想也知道這只是說說而以,泛藍跟本不會接受,陳水扁也樂的兩手一攤:這是在野黨的選擇!
  7. 陳水扁似乎只要說句話,就會引起美國緊張耶?受不了陳水扁的權力慾了… -.-

灰色地帶

  1. 施明德:比起許信良,至少施明德對政治比較有期許。
  2. 許信良:老實說我覺得他的權力慾蠻重的,從去年以來他的言行舉止都和他所謂的理想沒有交集。

2004年11月17日

可魯,觀後有感

早在可魯上片之前,其實已從網路上取得了可魯的影像資料,我大概先看了看前10分鐘的內容,並對其字幕檔做一些初步的校正。然後在可魯正式上映當晚,跑到西門町樂聲戲院中和一大堆不認識的人一起感受可魯的一生。

為什麼要花一筆錢去戲院看呢?我一直認為,可魯這部片子若是一個人自己看的話,就會變成一部單純的導盲犬記錄片;可是如果和一群人一起看呢?那就變成一群人一起分享可魯的一生。好啦,我知道這沒有依據,本來那就是我個人的感覺… :p

不過在報告感想之前,實在覺得本片的台灣代理商似乎沒對字幕進行過校稿:可魯是本片主角的正式名稱(我看寵物當家則是翻譯成 奎爾 ),仁井夫婦則叫小名 小可 ,不過字幕進行中竟然出現 小魯 的這個用法,不知道是為什麼?

以下則是真正的感想了:

  1. 拉不拉多犬似乎真的很愛吃,雅夫是一個現成的案例,可魯也差不多!看可魯連背帶也想啃啃看就可以感受到牠愛吃的天性,不過經過訓練後可魯已可以抑制這股愛吃的習性了!
  2. 可魯一開始真的很混,直到牠的小熊朋友-小P-對牠發脾氣後才忽然變身成真正的導盲犬。不過我是覺得這是劇情故意這樣搞的啦,我也沒看過原書,更何況子非魚,焉知魚之樂?所以那個場景應該是人類自己胡思亂想、任意賦予的,只為了類似看到魚兒逆水而上而發奮圖強的效果而以。不過再看一遍後,覺得這個小P捉狂的效果其實還蠻有趣的!
  3. 雖然有些人認為片中會讓人落淚的部份是可魯的三次離別和最後身故的那幕,可是我的看法不同。
  4. 第一個令我感動的,是渡邊先生未通過導盲犬共同訓練時,可魯主動接近渡邊的那一幕。那一幕讓我感受到人與狗之前真正交流的開始,雖然說渡邊先生真正接納可魯的主要原因是可魯莫名其妙幫渡邊先生指引而買到啤酒的那一刻。
  5. 第二個令我感動的,是可魯蹺家被渡邊找到時,可魯跑回渡邊身旁而渡邊蹲下來抱著牠的晝面。那是真的擔心可魯的感覺,也表達出人狗之間相信相依的情感交流。
  6. 第三個令我感慨的,是渡邊先生在病床上對可魯揮手道別的時候。那個晝面給人一種絕望的感覺,也是我情緒開始受到波動的一幕。
  7. 同樣令我感慨的,是渡邊先生和可魯分別三年後再度回到導盲犬訓練中心時可魯的興奮反應,以及渡邊與可魯同行的那30公尺的晝面,此時渡邊先生已知道這是最後一次和可魯同行,而可魯即將失去牠這一生的主人。
  8. 第五個令我感傷的,是渡邊先生病逝的告別式上,從這一刻起可魯已真正的失去了牠這一生的主人。同時,告別式中的笑聲時常是強顏歡笑下的苦澀,這一幕也不例外!
  9. 告別式後,所長帶可魯到渡邊先生家週遭繞行一週,那是可魯最後一次和渡邊先生的連繫。
  10. 再來是可魯回到仁井家的那一段,可以感受到歲月的流逝和生命的無奈。
  11. 最後讓人熱淚滿眶的是夫婦守著可魯,在仁井太太輕唱著睡眠曲時,仁井先生告訴可魯:『 如果去了天堂,要清楚的說,你叫仁井可魯! 』然後可魯緩緩閉上眼睛的這一幕,因為生命的消逝,讓我得多揉幾下眼睛才能化去快將滿溢的淚水。
  12. 對了,悅男偷請可魯吃炸雞但被捉到時,可魯那無辜的表情真的超可愛的~~~ 呵呵~~~
  13. 另外像是所長被一大群導盲犬偷襲的晝面也是很有趣的,哈!
  14. 最後日本的電影字幕會出現在發出聲音的那一半邊,甚至當聲音來自晝面外的話還會有個類似漫晝中指出聲音來源的符號,這可以明確的讓觀眾知道是誰在說話。我蠻喜歡這種字幕表現方式的說!
嗯,再複習了一遍,仍然無法避免心情上的波動。雖然這不是個讓人哭的浠瀝嘩啦的片子,但人與狗之間的情感交流已確實的打動了我的心。推薦給還沒看過的您也到電影院去和一群人一起分享可魯的這一生!

2004年11月16日

RIA-自訂一個背包背後的網頁技術

為了不讓自己和他人『同流合污』,愈來愈多人想要可以訂製自己所須的物品,自訂背包是一個實例!

不過我不是要介紹背包怎麼訂製,而是我認為這個網站所展現的技術可能會成為未來網頁的運作基礎,也就是 RIA( Rich Internet Application ) 的成型。

有別於傳統網頁應用系統的換頁動作,Macromedia所推出的RIA 概念計劃透過幾乎每台電腦都已安裝的 Flash Player 來提坐應用程式所必須的操作界面,在這個概念下所完成的效果就是少了 換頁 所帶來的操作上的不連續感,同時還可以讓操作者以習慣的拖、拉、點、放等的滑鼠操作模式完成所想達成的作業目標。

很可惜的,之前本來報名這類的教育訓練課程,無奈人數不足造成課程取消,現在變成要自己想辦法去學了… :(

Macromedia-Rich Internet Applications中有更多這方面的操作範例,操作過後,也許您也會同意我的看法-RIA 終將取代傳統 HTML 網頁應用程式!

2004年11月3日

收到詐騙信...

很久以前曾在 eBay 中註冊過,結果昨天收到一份號稱 Security Check 的緊急信件。內容如下:
詐騙信

老實說我很早就忘了 eBay 的帳號和密碼了( :p ),所以在好奇心的驅使下去檢查了一下這封信的原始碼,一看當場笑出來,Why ?! 因為檢查帳號、密碼的網址竟然不是 eBay 自己的網址,還列了一個看起來就像隨便申請的 Domain Name:http://harnicisidar.com/f.php ,所以可以推測是這是一封詐騙信件,目的應該是為了騙取受害者的eBay帳號,至於這個帳號能幹嘛,我就不知道了。

另外讓人懷疑的是,這封信件完全沒有寫出為什麼要登入的理由,而且真正登入的驗證網址應該是:https://signin.ebay.com/ws,給各位參考!

2004年10月22日

有鼠走遍天下,無鼠寸步難行

我是說我上網時的習慣啦~~

本來蠻排斥使用所謂的滑鼠手勢的軟體,不過這幾天玩下來後,哇~~~ 好方便啊~~~ 搞到後來連 Outlook / MSN 時都會不自主的用滑鼠畫啊畫的,真是糟糕的不良習慣啊… :(

※現在在 Mozilla Firefox 上裝了不少的擴充套件,清單如下:( 請到Download Firefox 1.0下載各種平台的正體中文版 )

  1. 擋 Flash 廣告:adBlock
  2. 滑鼠手勢:All-in-One Gestures
  3. 下載輔助:FlashGot
  4. 媒體整合撥放工具: FoxyTunes
  5. 指定開啟程式: Launchy
  6. 網頁螢光筆:Line Marker
  7. 時間:Statusbar Clock
  8. 頁籤擴充套件:Tabbrowser Extensions
  9. 頁籤擴充套件-未讀強調表示:未読タブの強調表示モジュール
  10. 頁籤擴充套件-選單擴充:コンテキストメニューの並べ替えモジュール
  11. 文字網址轉換:Text Link
  12. 網址分類圖示:TargetAlert
  13. 氣象報告:ForecastFox, WeatherFox 改名了...
  14. 網頁開發: Web Developer
  15. 網頁開發-顏色選取工具:ColorZilla
  16. 右健編碼選擇: Right Encoding
  17. 另存單一壓縮檔(Like IE): Mozilla Archive Format
  18. 網頁內容管理:ScrapBook
  19. 網頁便條軟體:QuickNote
  20. GMail來信通知:GMail Notifier
  21. 網址確認:SpoofStick,防網路釣魚用...
  22. 網頁編輯:Web Color Names
  23. RSS Reader:Sage
  24. RSS Editor:RSS Editor
  25. 複製網頁網址:Copy URL+
  26. JavaScript Debugger:Venkman Development
  27. 自動複製:Auto Copy
以下請視需要自行決定是否安裝:
  1. 網頁簡繁互換套件-同文堂
  2. 選單編輯器-Menu Editor
  3. 選單圖標編輯器-CuteMenus
  4. 查看 alt 訊息:Popup ALT Attributes
  5. 套件移除工具:Extension Uninstaller
  6. 網址預覽:LinkPreview
  7. 顯示Firefox相關資訊:InfoLister
  8. 文字網址轉換:Linkification,會和 TBE 衝突!
  9. 視窗名稱修正:Titlebar Tweaks

We are on Fire - Firefox 1.0 Party!

Mozilla Firefox 1.0 正式版即將於 2004/11/09 日推出(中文版會稍微延後),全世界 Firefox 愛好者將於 11 月份舉辦慶祝 Party,希望愛好 Firefox 的您參予這項活動!

以下是來自Mozilla@Taiwan的宣傳詞!

悟空:曾經有個 Firefox 1.0 Party 在台北舉辦,但我沒有參加,等到辦完了才後悔
      莫及。人世間最遺憾的事莫過於此!如果上天能再給我一次機會的話,我會對大
      家說我要去!如果辦的日期也可以給我決定,我希望是 11/13…
柏強:可是很可惜ㄋㄟ~ Firefox 1.0 就這麼一次,你等 Thunderbird 1.0 吧 =.=
悟空:(倒在地上哭鬧)這不是 Firefox! 這不是 Firefox!

======== Firefox 1.0 Party: Taipei! ======== 前無古人,後無來者--誰叫 1.0 就這麼一次呢?

「有人」要在台灣辦 Firefox 1.0 Party 了!為了慶祝 Firefox 1.0 在大家期盼之下 浴火重生(還有慶祝柏強滿月),全世界即將同步舉行數百個宴會!台灣也沒缺席, 我們 (Mozilla@Taiwan 推廣討論板眾) 即將在台北舉辦絕無僅有的 Firefox 1.0 聚會!

目前一切事宜(地點、時間、內容)誠徵建議,您可以幫我們讓 Party 更 Happy!

詳情請見:http://tinyurl.com/6hzds 立刻報名:http://www.openforce.at/mozparty2/?party=206

2004年10月10日

我看反軍購

延續了好長一段時間的話題,反軍購與反反軍購仍舊在互相對抗中… 個人對軍購案則有以下看法…
  1. 游院長的恐怖平衡說其實是沒有根據的,因為台灣完全沒有和中國平起平坐的攻擊能力。不過若能加以反擊的話,的確可以讓中國領導人必須審慎評量那些損失是否值得!
  2. 反戰應該向敵對的兩個國家一起抗議才對,光依靠台灣的民主自由而鬼叫擺明是柿子挑軟的吃。再說,戰爭不會因為其中一方不想玩而可以不用玩或中途喊停的,只要中國還是不放棄以武力征服台灣的話,就該一起向雙方政府及人民進行反戰宣傳。
  3. 不買軍備就可以免於被侵略、被征服的恐懼了嗎?從科威特的案例來說恐怕是不可能的,況且台灣也沒有像科威特那樣有成堆的油田可以吸引世界各國進行油田爭奪戰,除了自行整軍備戰外是沒有太多的選擇的。
  4. 現在路上看到一堆自稱國防專家的,我本人抱持懷疑態度。為什麼?國防和內政、外交及經濟是環環相扣的,光只是知道武器的特性、用途就配自稱叫國防專家嗎?光以為軍購費用會造成經濟上的壓迫就是真的懂了嗎?在這之前可否先說說全民國防的意義和施行方式來聽聽如何?更重要的是如何改善目前國防部在推廣上的低成效呢?

2004年9月28日

天啊!為什麼有這麼誇張的手機?

我在 2004-09-27 晚上不幸敗了一台 SmartPhone ,型號是之前鎖定的 Dopod 565...

沒想到晚上一看,竟然出了這兩篇介紹文-告訴你手機也可以用來導航。這是擺明了要小朋友集體離家出走嘛… :'(

  1. Dopod 565+GR231=外出最佳好伙伴!!
  2. Dopod565也可以用Mio map!!
驚死人…

2004年9月25日

手機的選擇 To be or Not to Be

之前曾提到我對手機的期望規格,請參照期待中的手機規格

最近有幾隻重量級手機推出,換機的念頭開始浮動,可是麻煩的是:每一隻手機總有一項讓人不得不再評量的缺陷!

現在看到的手機有這幾隻,還有它們的問題:

  1. Sony Erission - S700i:
    * 記憶卡容量太低
    * 價格非常不平易近人
  2. Siemens - S65:
    * 缺乏 MP3 播放功能
    * 相機拍攝品質待確認
  3. Dopod - 565:
    * 相機解析度只有 30 萬
    * 採用 Windows 2003 Mobile Edition
    * 具備 GPS 衛星導航擴充功能
  4. Benq - S700:
    * 缺少藍芽
    * 採用 Windows 2003 Mobile Edition
除了 Sony Erission 的 S700i 估計在 NT$25k 外,其餘手機的價格都在 NT$15K 左右,這是令人傷腦筋的地方。惟一可以確定的是除了 S65 的 MP3 播放功能有替代方案(BT MP3 Player)外,其他的手機似乎都沒有解決之道,這才讓人非常頭痛。

倒底要選那一隻哩?

套句電影 Matrix 中的對白:The problem is choice.

PS:

  1. 目前通盤考量後,傾向放棄原先預訂的 S65,改以 Dopod 565 為第一選擇。
  2. Dopod 565 中選的主因是:
    * 100g, 與一般電話相當
    * 晝面不小,可以整合 GPS
    * 可以提供 Java MIDP 2.0 支援
    * 價格適中
  3. 勸大家不要沒事往一些敗家網站閒逛,例如: http://www.mobile01.com。我是被以下的討論串陷害的… :'(
    * 後勤補給到位-Dopod 565準備上陣!
    * PaPaGo Smartphone火力加強版!!
    * 簡單利用Windows Media 編碼器轉出SP全螢幕的影片
    * mp3 sound cutter 剪出合心意的mp3或wav
    * Microsoft SmartPhone 軟體推薦

2004年9月23日

改裝 Firefox

即然有 90% 以上的人都只知道 IE ,那麼就來改裝 Firefox 成 IE 吧...
Firefox 的可自訂功能可以讓使用者自己惡搞,不過通常不會弄成跟 IE 一樣,如果為了推行 Firefox 的話,倒是可以參照這個網站FirefoxIE的做法將 Firefox 改頭換面一番,我也相信大部份的使用者不會查覺其原本擅用的 IE 被調包了,呵呵!

2004年9月22日

台灣的政黨倒底要毀掉幾個運動員才甘心?

聽到國民黨決定將跆拳國手黃志雄納為不分區立委一事,不得不感嘆台灣的政黨倒底要毀掉多少個運動員才能甘心?

國民黨講的很好聽,強調黃志雄是體育代言人,可是從運動員轉戰立委並成功當選的,黃志雄絕對不是第一人,日前被披露已辦理離婚手續的鄭志龍不就是個活生生、血淋淋的例子,難道說鄭志龍不曾滿懷雄心想要改善國內運動員的待遇嗎?過了四年後,鄭志龍又對台灣運動員的待遇做了啥麼改變?改變的,只有他的運動生涯、他的婚姻生活,運動員仍然是不受重視的一個行業。

從這點看來,把黃志雄推進立院究竟能對台灣體育界能有啥改變?憑他一人又能做啥改變?這四年過去後,黃志雄的學業被 Delay ,他的運動員生涯被中斷,除非能一直被列在不分區安全名單中,否則勢必要回歸到一般人的生活。可是這時候即沒有學歷、也沒有體力、更沒有經歷,擺明就是要陷害黃志雄嘛。

台灣的政黨運作,總覺得短視而近利,就拿國親強勢通過的319真調會條例也明顯是個雙面刃,卻不知道為什麼這兩個政黨加上無盟會看不出這個可能害死自己的重大隱憂?

明年新任立委報到後,會不會冒出這些新的委員會呢?我倒是很期待就是了

  1. 興票案真相調查委員會
  2. 國民黨黨產真相調查委員會
  3. 大法官關說案真相調查委員會
  4. 微軟產品價格偏高真相調查委會員
  5. 公務員過勞死真相調查委員會
  6. 三重淹水真相調查委員會
  7. 中共獲得2008年奧運主辦權真相調查委員會
  8. … :p

2004年9月13日

中華電信調降ADSL費率

才剛簽下兩年網路賣身契,沒想到中華電信又要調降ADSL月租費了,不過還是高興不起來。

其實,中華電信搞錯網友的抗議內容了。網友的控訴ADSL費率過高的目的在於要求中華電信開放 用戶終端迴路 這一部份,啥是 用戶終端迴路 ?簡單講就是不論使用那家的 ADSL 都必須進貢給中華電信的那筆 電路月租費 所指稱的電話線路,一般常以 Last Mile 稱之。

先不管鄰國對 ADSL 的態度和價格為何,台灣用戶終端迴路的建設是始於國營事業時代的電信局,是由納稅人支付稅金所建設完成的公共財產,因此不該由中華電信一家坐擁這項資源,甚至作為生財的工具。

只要想想,中華電信每個月光是電路月租費可以收多少錢?以 512K/64K 速率 499 元計算,中華電信ADSL用戶數約 264 萬 (參考 中華電信ADSL 六一起全面降價 ),光這些用戶每月就要上繳 13 億( 哇咧,我沒算錯吧? )的電路月租費,而這些電路即不是重新佈建,也不見材質有何特殊,擺明是搶劫嘛,難怪中華電信打死不肯放手。也大概是因為這層保障,所以中華電信的服務品質才會落後其他民營業者吧。

希望立法院能強制電信總局開放用戶終端迴路,讓市場機制決定 ADSL 費率,那才是我們網路族的期待!

以下列出一些相關報導:

  1. 網友反應》1M降到5、6百才合理,其實我覺得這應該算是市話的附加服務,扣除用戶終端迴路轉為公共財之後不再支付的電路月租費,應該不用 300 元!
  2. 消基會:用戶迴路 別再壟斷,建議除請電信總局收回 Last Mile 擁有權,還要獎勵業者佈建新的光纖網路架構才行。
  3. Seednet擬跟降 速博下月更新費率,這個可以隱約看出民營業者的痛處。
  4. 網友抗議免費升級案廣告不實,回家要查一下這件事!
  5. 立委:推出新方案 是轉移焦點,立委總算開始知道要為民服務了?
  6. ADSL太高貴 中華電信成箭靶,中華電信一直以為是上網費率太高耶!
  7. 國內大哥大打市話 也比別國貴,這和 ADSL 電路月租費有相同的狀況,都是 Last Mile 的問題,另外其實簡訊也很貴… :(

2004年9月10日

What is orz ?

最近常常看到 orz 這個符號,您知道這是啥意思嗎?

看看以下網址應該可以明瞭… :p

http://www.orz.com.tw/
http://www.geocities.co.jp/HeartLand-Poplar/7890/kuzuoreru/kuzuoreru.html

Web 應用程式 ant 建置檔

這篇是我在公司中用來建置各項 Web 應用程式的 ant 建置檔。使用時若要部署到測試網站上就執行 ant uat ,要部署到正式網站上時則執行 ant official ,不管是建置還是部署都覺得非常方便。

<?xml version="1.0" encoding="Big5"?>
<project name="myphs">
  <!--此為我特別針對現有各JAVA/JSP網站系統所規納之 ANT 單一部署設定檔。
      請配合基本目錄規劃及檔案中應修改之註記以完成新專案部署之作業。
      基本目錄規劃如下,其中 webroot 為 WEB 應用系統之跟目錄,
      通常會放置部份 JSP / HTML 檔;
                           src 為 .java 原始檔;
                    properties 為 .properties 參數設定檔集中存放區,
                               目前放置 commons-logging.properties 、
                                       log4j.properties 、
                                    及 web.xml 等三個檔。
                   WEB-INF/lib 為 系統所需額外參考之 jar 檔。
     webroot +- src
             +- properties
             +- WEB-INF/lib

※註:web.xml 在初始化過程中會被複製到 /WEB-INF/ 下並作為建立 .war 檔時之 參考檔 -->

<target name="init" description="初始設定作業,除 tmp.path 及 output.path 外,餘皆為預設設定。" > <property environment="env"/> <!-- 設定專案部署前的暫存目錄,為新專案必改之參數設定。 --> <property name="tmp.path" value="E:/Projects/Ant-Project/${ant.project.name}_TMP"/> <!-- 設定專案部署前的輸出目錄,當建置作業完成後會在本目錄下產生相關的輸出檔案。 此為新專案必改之參數設定。 --> <property name="output.path" value="E:/Projects/Ant-Project/${ant.project.name}_OUTPUT"/> <property name="source.path" value="${basedir}"/> <property name="sourcefile.path" value="${source.path}/src"/> <echo message="Building Project: '${ant.project.name}' at ${basedir}, using J2SDK v${ant.java.version}"/> <property name="build.file" value="${source.path}/build.xml"/> <property name="java.home.path" value="${env.JAVA_HOME}"/> <property name="std.lib.path" value="${java.home.path}/jre/lib/ext"/> <property name="third.lib.path" value="${source.path}/WEB-INF/lib"/> <property name="lib.path" value="${tmp.path}/WEB-INF/lib"/> <property name="classes.path" value="${tmp.path}/classes"/> <property name="java.doc.path" value="${tmp.path}/javadoc"/> <property name="jar.name" value="${lib.path}/${ant.project.name}.jar"/> <property name="war.name" value="${output.path}/${ant.project.name}.war"/> <property name="source.web.xml" value="${source.path}/WEB-INF/web.xml"/> <property name="commons.logging.properties.file" value="commons-logging.properties"/> <property name="log4j.properties.file" value="${ant.project.name}-log4j.properties"/> <property name="exception.log.file" value="${ant.project.name}-exception.log"/> <tstamp> <format pattern="yyyy-MM-dd HH:mm:ss" property="build.time"/> </tstamp> <path id="build.classpath"> <fileset dir="${lib.path}"> <include name="**/*.jar"/> </fileset> </path> </target>

<target depends="init" name="setProps" description="專案記錄初始化作為,為各專案獨自有關之參數設定。" > <!--請依實際設定修改此區塊內容。--> <property description="測試環境使用之 ftp 伺服器位址" name="uat.ftp.server" value="0.0.0.0"/> <property description="測試 ftp 伺服器使用之登入帳號" name="uat.deploy.name" value="xxxxxxxxxxxx"/> <property description="測試 ftp 伺服器使用之登入密碼" name="uat.deploy.passwd" value="xxxxxxxxxx"/> <property description="測試 web 主機中實際的 web root " name="uat.path" value="/home/webapps"/> <property description="正式環境使用之 ftp 伺服器位址" name="official.ftp.server" value="0.0.0.0"/> <property description="正式環境使用之 ftp 伺服器使用之登入帳號" name="official.deploy.name" value="xxxxxxxxx"/> <property description="正式環境使用之 ftp 伺服器使用之登入密碼" name="official.deploy.passwd" value="xxxxxxxxxx"/> <property description="正式環境使用之 web 主機中實際的 web root " name="official.path" value="/home/webapps"/> </target>

<target depends="setProps" description="清除輸出目錄" name="clean"> <delete dir="${tmp.path}" quiet="true"/> <delete dir="${output.path}" quiet="true"/> <delete quiet="true"> <fileset dir="${source.path}"> <include name="**/*.bak"/> </fileset> </delete> </target>

<target depends="clean" description="建立輸出所需相關目錄" name="prepare"> <mkdir dir="${output.path}"/> <mkdir dir="${tmp.path}"/> <mkdir dir="${lib.path}"/> <mkdir dir="${classes.path}"/> <mkdir dir="${tmp.path}/src"/> <mkdir dir="${tmp.path}/properties"/> <mkdir dir="${tmp.path}/WEB-INF/classes"/> </target>

<target depends="prepare" name="copy-system" description="屬於 Project 通用複製作業" > <copy file="${build.file}" todir="${tmp.path}"/> <copy file="${source.path}/properties/log4j.properties" tofile="${output.path}/${log4j.properties.file}"/> <!-- 若將設定檔置於 /WEB-INF/classes 下會有錯誤 --> <copy file="${source.path}/properties/${commons.logging.properties.file}" todir="${tmp.path}"/> <copy todir="${lib.path}"> <fileset dir="${third.lib.path}" includes="**/*.jar"/> </copy> <copy todir="${tmp.path}/src"> <fileset dir="${sourcefile.path}" excludes="**/*.bak" includes="**/*.java"/> </copy> <copy todir="${tmp.path}/properties"> <fileset dir="${source.path}/properties" includes="**/*.properties"/> <fileset dir="${source.path}/properties" includes="web.xml"/> </copy> <copy file="${source.path}/properties/web.xml" overwrite="true" todir="${source.path}/WEB-INF"/> </target>

<target depends="copy-system" name="copy-project" description="與該 Project 有關且必須自行調整之複製作業" > <copy todir="${tmp.path}"> <fileset dir="${source.path}" excludes="**/*.bak" includes="**/*.jsp"/> <fileset dir="${source.path}" excludes="**/*.bak" includes="**/*.html"/> <fileset dir="${source.path}" includes="**/*.txt"/> </copy> <copy todir="${tmp.path}/images"> <fileset dir="${source.path}/images"/> </copy> </target>

<target depends="copy-project" description="編譯 java 原始程式" name="compile"> <javac destdir="${classes.path}" srcdir="${sourcefile.path}"> <classpath refid="build.classpath"/> </javac> </target>

<target depends="compile" if="env.JAVADOC" name="javadoc" description="建立 JavaDoc 文件,只在已設定環境變數 JAVADOC 時執行此作業" > <mkdir dir="${java.doc.path}"/> <javadoc description="請視需要調整 packagenames 屬性之內容" author="true" bottom="Copyright by FITEL. Co., 2004 " classpath="${classes.path}" classpathref="build.classpath" destdir="${java.doc.path}" doctitle="${ant.project.name} 專案類別庫說明文件" header="${ant.project.name} JavaDcos 專案類別庫說明文件" packagenames="net.t_times" protected="true" use="true" version="true" sourcepath="${sourcefile.path}" windowtitle="T-Times.NET ${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>

<target description="測試環境中需要準備的動作" depends="compile" name="uat-prepare"> <property name="log4j.properties.path" value="${uat.path}"/> <property name="exception.path" value="${uat.path}"/> <mkdir dir="${exception.path}"/> <replaceregexp byline="true" file="${output.path}/${log4j.properties.file}" match="=default.exception.log" replace="=${exception.path}/${exception.log.file}"/> <replaceregexp byline="true" file="${source.web.xml}" match="${LOG4J-INIT_FILE}" replace="${log4j.properties.path}/${log4j.properties.file}"/> </target>

<target description="正式環境中所需要先行準備的動作" depends="compile" name="official-prepare"> <property name="log4j.properties.path" value="${official.path}"/> <property name="exception.path" value="${official.path}"/> <mkdir dir="${exception.path}"/> <replaceregexp byline="true" file="${output.path}/${log4j.properties.file}" match="=default.exception.log" replace="=${exception.path}/${exception.log.file}"/> <replaceregexp byline="true" file="${source.web.xml}" match="${LOG4J-INIT_FILE}" replace="${log4j.properties.path}/${log4j.properties.file}"/> </target>

<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>

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

<target depends="uat-prepare, build" name="uat" description="部署 UAT 測試環境" > <ftp binary="yes" depends="yes" server="${uat.ftp.server}" userid="${uat.deploy.name}" password="${uat.deploy.passwd}" > <fileset dir="${output.path}"/> </ftp> </target>

<target depends="official-prepare, build" name="official" description="部署 Official 正式環境" > <ftp binary="yes" depends="yes" server="${official.ftp.server}" userid="${official.deploy.name}" password="${official.deploy.passwd}" > <fileset dir="${output.path}"/> </ftp> </target> </project>

2004年9月3日

中木馬/病毒怎麼辦?

剛剛同事在和朋友討論怎麼幫他朋友處理電腦中木馬/病毒的問題...

突然想到,要是我遇上了木馬/病毒時,似乎也沒有太多的防禦力耶!應該是很少遇到的關係,造成臨場經驗不足吧?

為什麼臨場經驗不足呢?那是因為我很用力做 WindowsUpdate 的,也不會隨便開啟 Mail 中的附檔,最近更將 Mail Server 設定成看到特定副檔名的信件就砍了,最後一招是僅在 Linux 環境中讀信,這個狠招已完全的封鎖住那些針對 Windows 及 Outlook 漏洞所發展的各種病毒、蠕蟲,結果就是當朋友中獎時,我只能兩手一攤:我不會… :p

我真的不會… :(

2004年8月30日

研究WindowsXP SP2自動化安裝光碟

最近電腦雜誌中突然發現有許多關於自行製作WindowsXP with ServicePack的文章,因為這需要一定程度的技術能力、Try and Error 的耐心,倒是非常好奇究竟這種硬裡子文章會有多少閱讀率?

目前來說,Windows 的安裝有兩種模式:

  1. 透過 Ghost 的備份功能 + Sysprep 工具,我習慣稱之為Windows復原光碟。
  2. 使用標準安裝程序,一步步完成安裝作業,因為不是使用Microsoft提供的安裝光碟,因此特地將自製的安裝光碟片稱為『偽』Windows 安裝光碟。至於Microsoft對這類型安裝光碟的正式稱呼應該是OEM安裝光碟。
上面所提到的兩種安裝方式各有其適用的場所:
  1. 復原光碟:適用於大量、硬體配置完全相同或是需要快速復原系統的場合,例如企業內部、學校、電腦補習班、一般家庭使用等。因為硬體配置完全相同,因此只要完成第一台 PC 的安裝後,不只可以將 Windows 復原上去,連 Office 之類的軟體都可以順便復原到第二、第三台 PC 上。最大的優勢當然是不用考慮軟體的安裝程序有多複雜,反正 Ghost/Unghost 的方法統統一樣,更重要的時安裝一台 PC 不超過 15 分鐘,就算有上百台 PC 要安裝的話,估記最多只要一天就夠。
  2. 安裝光碟:適用於大量、硬體配置不完全相同的場合,例如小公司、個人工作室。我個人習慣使用這種方式安裝,可以避免許多奇怪的問題。不過這種方式雖然彈性大,卻需要花更長的時間來進行安裝。
最早想要自製安裝光碟的原因其實是因為不想要每次裝完Windows後,還要連回Microsoft進行WindowsUpdate,當時的想法是希望在Windows一安裝完畢時就有一定程度的安全保障,以及立即驅動系統中已安裝的音效卡等硬體設備。雖然很多人覺得乾淨的Windows(處女情結?)才是王道,不過在發生了衝擊波事件後就更加堅定了我的想法,後來更進一步的希望能夠在OS安裝完畢後就包含了一些常用工具,例如 MSN Messenger, WinRAR, PSPad 4.3.1等等。

而第一版自製的『偽』Windows安裝緣自於WindowsXP,目的是做出一片不用輸入序號的安裝片。後來經歷Windows 2000 SP3, WindowsXP SP1等多次改版後,最近一次則是約半年前的 Windows 2000 SP4,但是當時還是使用舊方法來進行軟體安裝程序。

從颱風來臨那一天開始,就開始複習有關自行製作Windows安裝光碟的各項方式。雖然說雜誌介紹了好幾種方式,不過我仍然直接參考國外網站Creating an Unattended Windows XP/2003 CD。這個網址除了提供製作『偽』Windows安裝光碟的各項知識外,還提供軟體自動安裝(像Windows Office XP 之流)的方法,如果能搭配DVD燒錄機(現在一台Double Layer的不用NT$5000,還是Sony出的喔)及DVR-R的情形下,可以達到一次將4.5G/8.5G容量的軟體在Windows安裝程序中全部完成。想想看,就算安裝這一片DVD要花掉一小時的時間,不過一旦安裝完畢後系統就可以立即提供各項作業所需,個人認為,要讓新買來的PC可以立即上線使用本來就應該要提供這種光碟片的。

到目前為止過了7天,雖然已製作出可以安裝用的ISO檔,不過暫時還沒提供直接安裝Driver的能力,原因是WindowsXP SP2的檔案真是有夠大,一直到砍掉了那些從Windows 98/ME/2000等升級用的檔案後,才節餘出20MBytes的空間(使用標準CD-R片子,只有700MB的空間),慎重考慮要移除那一個常用軟體中,只是… 即然是常用軟體,刪那一個似乎都不好… :(

另外此次製作『偽』安裝光碟的感想是:WindowsXP Registry中藏了太多的設定,我正努力調校系統中,希望做到以後安裝完Windows後就是我最順手的操作環境。

※註:

  1. 有關Windows Registry的討論,在MSFN Forum有加起來有好幾百頁,實在有夠誇張。

台北電信展看展心得

與朋友和舍弟於 2004/08/29 至世貿參觀台北電信展,心得如下:
  1. 由於看展人數相對於資訊展之類的,人數少很多,相關在看展的品質方面則有相當程度的提昇,除了噪音問題以外。
  2. 今年的 SeedNet 把 4 個 show girl 擺在四個角落的高台上,負責發放 SeedNet 的充氣大槌。不過我比較好奇的是:這樣不怕曝光嗎?
  3. Show girl 一樣充斥會場,喇叭聲也一樣吵死人。
  4. 未來 3G 服務的應用蠻令人期待的,只要接通率能提昇到一定程度的話。因為目前計劃採購新手機,因此我真正開始使用 3G 服務應該要再等上 3 年吧!
  5. 對 VoIP 的應用,我個人認為最好的做法是使用 BlueTooth Dongle 配合 BlueTooth 耳機,使用 SkyPe 之類的程式。不過這有技術門檻,而且還有平台問題,我希望能在 Linux Server 上實現這種溝通方式。
  6. 那些 VoIP 專用電話實在有夠貴。和上面提出的方案相比,建置成本可以貴上一倍,當然方便性是否真的可以提昇一倍就見仁見智了。
  7. 三星那隻 S2300 手機實在有夠誇張,竟然有光學變焦功能。不知道是手機遇上了數位相機,還是數位相機碰到了手機… @.@!
  8. 不過我還是拒絕使用韓貨… :p
※後記:
  1. 朋友於看展後,被勸敗 19" LCD 成功!
  2. 為了籌措計程車資,經多次猜拳後成為惟一輸兩次的敗家,累積車資 NT$200 元… :(
  3. 還好事先約定輸一次只要付 50 元,車資總共 NT$120 ...

2004年8月24日

雙颱效應

嗯,這不是要解釋雙颱效應,只是覺得氣象新聞愈來愈讓人感到困惑了。

我聽到的情形有兩種:

  1. 當兩個颱風接近到 1000KM 時,會發生相互牽引的現象而開始以逆時針方向依同一個軸心開始繞圓。目前這兩個颱風的距離約 1500KM,依艾利颱風的行進方向判斷,雙颱效能已經開始造成影響。若兩個颱風再更接近的話,那麼雙颱效應會更明顯。
  2. 當兩個颱風接近到 1200KM 時,會發生相互牽引的現象而開始以逆時針方向依同一個軸心開始繞圓。目前這兩個颱風的距離約 2000KM(?),應不致於發生雙颱效應。
好吧,我們都知道雙颱效應是啥了,但是這兩種說法卻是怎麼回事?

2004年8月10日

走過紋身街

西門町有一條紋身街,通常我去健身後的回程就會經過那條街...

和過去相比,現在很多人都認為紋身不是啥壞事,我也不認為紋身就表示叛逆、不學好,但我絕對會排斥身上有紋身的情人,即便只是一小塊圖樣。

我排斥的原因其實很簡單:紋身所產生的人工圖案會破壞女人天生的美。這種想法似乎有點大男人主義,不過雖然我這個男人天生就不怎麼帥,但我也不會想要透過紋身來改善這種與生俱來的缺失,所以說在某種程度而言,否定紋身的要求是一視同仁的… :p

說到排斥情人身上的紋身,我還會拒絕習慣抽煙的情人。關於這個想法也不要說我沙文主義,我不抽煙,所以我可以這麼要求…

2004年8月8日

民進黨又有人捅漏子了...

是的… 一個是呂秀蓮,一個是姚嘉文…
  1. 其實我還算贊同呂秀蓮的說法,不過一個堂堂副總統和一個藝人爭執這些有的沒的,未免失了身份...
  2. 姚嘉文使用海巡署的巡邏艇去逛綠島,不論理由多麼冠冕堂皇,政治人物就是要比別人謹慎。吳淑珍-羅太太是一例,姚嘉文又是一例。
  3. 我才不相信姚嘉文所說的那種理由。
  4. 執政黨立委不能因為同黨關係而忽略了正義和公理,該遣責,該幹譙的,跟本無須迴避。當黨內出現了老鼠屎時,才更應展現自清的活動。
其他看法:
  1. 商人無祖國,台灣人則沒有憂患意識。美國人也是等到 911 之後才知道為來安定的生活只是個假像,台灣是不是也要等到飛彈掉到街角的時候,才知道其實家有惡鄰,卻總是有人視而不見呢?
  2. 我對於民進黨民代未能遣責姚嘉文這件事感到非常失望;更對姚嘉文堅持強辯的反應更覺不恥。
  3. 民進黨和國親比起來,在自省的功夫上看來不過是半斤八兩罷了!

2004年8月6日

用 Rap 反軍購...

用 Rap 反軍購… 真是夠了吧...

我們憑啥不買新式的武器裝備?因為我們可以像個哈巴狗向中共搖尾巴的關係嗎?

全民應該要在乎的,是這些錢花的值不值得,而不是直接否定軍購的意義…

阿妹,你只是想賺錢...

其實講到底,阿妹只是想賺錢… 至於啥大人的事情誰不懂?唉… 全民國防跟本是叫假的… -.-

2004年8月5日

JavaTwo 2004 參予感想

台灣昇陽公司在 2004/08/03~04 兩天假台北國際會議中心舉辦 JavaTwo 2004 技術研討會,弟有幸得以參予並做簡單報告如下:

一般感想:

  1. 和去年一樣,每一節課同時有三個講題,分別在一、二樓。不過今年我想聽的課程統統沒有衝堂的情形,真是 Excellent!
  2. 還是和去年一樣,雀巢咖啡提供雀巢冰咖啡全場免費試飲服務,大概是怕學員聽課聽到一半呼呼大睡吧。不過比較討厭的是今年沒有熱咖啡(印象中去年的第一天活動中有),空調很冷,又喝冰咖啡,所以我常常在那邊皮皮剉… :(
  3. 今年 Sun 派出了 20 個 JavaGirls,雖然服裝相同,但個人認為最大的遺憾是沒有全身統一穿著:鞋子讓她們自訂(這算客製化嗎),當這些 JavaGirls 站在一塊後就可以發覺這種視覺上的不協調。
  4. 今年的抽獎比較讓人感興趣:Nokia 7610 x 2, iPod 20G x 1, Motorola ooo x 2 (不知是啥… :p),不過後可惜的是… 老天要我把目標放在遠方,所以啥都沒得到。看來連六槓的大樂透可能有我的機會?
  5. 今年拿到兩件T恤,一件是 Macromedia 所提供,一件是 JavaTwo 送的。
  6. 今年的午餐比去年好,然後 8/3 的又比 8/4 好。
  7. 今年的活動主講人已從洪公 志鵬改成王森了,原因是洪公離開了 Sun 到『麥克羅所福特』公司任職,網址是… MichaelSoft.org (可能記錯了吧?)
參展廠商:
  1. 今年 Apple 有參展耶,可是他們沒有送 PowerMac,所以我也沒有做啥事。
  2. 去年是 Nokia 參展,今年則改成 Motorola 參展,不過我對這兩家的手機都沒有太在意。倒是希望明年 SonyErrison 可以來湊一腳就是了。
  3. Macromedia 再度參展,今年的重心應該是 Flex 技術。這個技術非常有看頭,不過個人認為在推廣上會有價格上的困境。
  4. Flex Server 的授權費用是以 CPU 的個數計算,2 個 CPU 要價 US$12000 元,台幣則在 4x 萬之間,聽說還有教育版本也要 2x 萬。因為不能立即把原先 Web 版和 Flex 版的應用程式的差異展現給長官看,所以很難跟長官提試用建議(畢竟還有正事要做,不能把時間花在建立原有系統的 Flex 版),除非 Flex Server 單 CPU 授權價格在 US$2~300 元左右,因為這個價碼比較容易報銷。
  5. 不過我倒是覺得若是可以透過 Flex 建立一個現行系統中某功能的展示版本,那麼長官就可以立即的比較出兩種不同平台下的差異,這樣才可能排出預算去採購這套系統。
  6. 我拿了一套 Flex Server,可是還在研究怎麼安裝中。不過目前似乎還沒有 Flex 的 GUI 開發工具,那麼建立展示版本的時間就不知道要搞到啥時候了… :(
講題心得:
  1. Java 科技串連全世界:這是 Sun 大中國區行銷總監負責講演,不過我不太喜歡大中國區這個詞,再者其實也不必強制總監改變一些大陸的電腦名詞,聽的出來他講的不太輪轉。
  2. Motorola 的 Mobile 3D Gaming...:我睡著了,對不起… :p
  3. Nokia 的行動通訊聰明選擇:聽到有送 Nokia 7610 時忽然醒來… :p
  4. Mac & Java:嗯,Mac 界面好漂亮!
  5. Java平台發展和重大改革:主要是講講 JavaTwo 的由來和重要人物回顧,再者就是 Java 和 Java System 的區別,中間插了一段來自 JavaOne 的 Java 開發工具介紹,最後是講題簡介。講題簡介讓學員更容易決定想要聽那堂課。
  6. Reflection & Generics in JDK1.5:原來 JDK 1.5 的 Source 改了很多喔~~~
  7. Java Code Generator:讓程式自動產生程式可以減少人為的錯誤和煩燥的工作,不過在初步建構的時候很難立即看出優勢所在。目前我只有先透過 ANT 來自動變更參數設定值,想要做更多的自動化工作必須等空檔才可能。目前對兩個地方考慮達成自動化:Database Schema及頁面轉成 Struts 的 ActionForm 。
  8. JDK1.5 全新的並行機制:我寫過 Multi-Thread 的應用程式,而 Tiger 新增的並行機制看來可以更容易的解決資源獨佔的問題。
  9. JDK1.5語言新功能:這堂課讓我想要馬上使用 Tiger 來開發應用系統說。
  10. 使用 Java Studio Creator 開發 J2EE 應用程式:這真是方便的工具,不過 Creator 用的是 JSF,而目前使用的是 Struts,反而讓我遲疑是否改用 JSF 開發相關應用程式… :( Creator 要 US$99 元,而我想要 Enterprise 版本的.... :p
  11. 從 Java 談軟體開發流程:其實這堂課讓我想到目前正在開發的系統似乎還沒有把架構訂清楚,就被迫立刻進行開發。或許要找長官談談這麼做的後遺症了… :(
  12. Open Source J2EE:本來以為會介紹一下 JOnAS 這個 J2EE Container ,不過後來發現被騙了… >"<
  13. Java 的開放原碼全文搜尋技術-Lucene:副座恰好想建立全文檢索系統,這堂課真是場及時雨呀...。
  14. 回家想找 Lucene 的 Slide 來看,發現 http://www.javatwo.net 網站中沒有可以下載的地方… -.-

2004年8月3日

蝦密?吳宗憲要選立委?

據聞立院無黨聯盟看上吳宗憲的『觀』眾魅力,擬邀吳宗憲代表無盟參加年底立委選舉。
  1. 不知道為什麼無黨聯盟不以形象、專業領域作為考量,而是用『觀』眾魅力來評估?再說,節目收視率高就表示有群眾魅力嗎?
  2. 即然不是以形象、專業領域為參選考量,難怪立委素質如此低落。
  3. 看來立委減半的確是必須、且不得不推動的公民訴求。提高當選門檻必然可以過濾大部份素質不佳的立委候選人,即使另一部份素質尚可的立委候選人可能因此落選。
  4. 我反對吳宗憲這個問題人物參選立委。

2004年8月1日

『羅生門』事件

最近羅太太事件炒的很熱,而且由於前後說詞版本眾多,結果被戲稱為『羅生門』事件。

這件事情我覺得從頭到尾陳水扁就有錯在先,沒有資格裝可憐說為什麼泛藍窮追猛打啥的。因為私心之故反而陷害了受命支援的基層士官,這是最他媽的讓我不爽的事。

他媽的哩… 陳水扁你閉嘴沒人當你是啞吧啦…

2004年7月23日

另一個丟臉到國外的例子

這邊又有一個丟臉丟到國外的例子… HiNET 的垃圾信件氾濫...

看看這裡,這一票全是 HiNET 所管理的 IP ,其中甚至還有一整個 CLASS B ( 220.130.0.0/18 ) 被擋下來的情形,這一塊區域恰好包含了我新配發的 IP ,連帶造成我無法和香港一家公司確認貨款交付的情形,這樣的損失我要找誰索賠?

爛 HiNET...

※ 以下是 TFN 及 SEED.NET 受列管的清單,和 HiNET 一比,真是不知道 HiNET 究竟在幹啥…

  1. TFN.net.tw
  2. Seed.net.tw
  3. ANET.net.tw:沒有半筆喔!不過我早就把 anet 列為垃圾信來源就是了… :p

期待中的手機規格

最近發現生活中有很多有趣,不滿的,有的沒的的畫面,開始在想是不是應該照個相作為呈堂供證… :p

不過我並不考慮買一台數位相機,畢竟我主要的目的是即時的照相而不是照的漂亮,因此具有相機功能的手機變成了我主要考量的重點,當然,另一個原因是我的 Siemens 6688 已經用了 3 年多了,如果有適合的手機的話也該讓他退休安養天年了… ^^!

不過哩,目前手機上所附的主流解析度為 30 萬像素,這樣的規格實在無法讓人提出興趣,所以新手機的需求也就一直懸在那邊...

當然超過百萬畫素的手機不是沒有,Sharp, Nokia, Motorola, 甚至 OKWAP 都已有實機上市開賣,不過買手機當然不會其中一個功能而成為購買的理由,所以目前算是在等待今年第四季所推出的產品是否有適合的型號,而考慮的基本規格大概有以下幾點:

  1. 百萬像素鏡頭
  2. 良好畫質的大面機顯示螢幕,不過顏色數倒是只要 64K 聲即可
  3. 支援藍芽
  4. 可以聽立體聲 MP3 ( 6688 目前不想換下來的原因之一 )
  5. 內附立體聲耳機
  6. 可以加裝擴充記憶卡 ( 6688 目前不想換下來的原因之二 )
  7. 多合弦鈴聲 ( 6688 最弱的一點… :~( )
  8. 直立式手機,我的確不太喜歡貝殼機… :p
期望規格:
  1. 最好是德國製造的
  2. 價格不可以超過 NT$18K
  3. 最好手機有自動開、關機設定 ( 目前 6688 已改成這種功能 )
絕對禁止:(寧可不買)
  1. MIK
  2. MIC

2004年7月21日

詢問有關我的 IP 被 Blocked 的回信

早上針對 http://www.spamhaus.org/ 封鎖住我寄信的原因向該管單位提出詢問,回覆的信件中有這麼一句:

『We were hopeful that Chunghwa were going to disconnect this spammer today as they had promised us, but now it appears they will break their promise.』

似乎 HiNET 不是不知道這件事,只是 HiNET 卻從來不曾去在乎過而以。

爛 HiNET… 爛死了… 爛死了… 爛死了… 爛死了…

我看泛藍最近的情形

這個 Blog 好像快變成政治批評區了… :p

泛藍最近的情形整理如下:

  1. 國民黨製作 BulletGate 去告洋狀:幹!在國內批評總統就算了,一個號稱政治學博士的傢伙還能跑到美國去年評自己國家的總統;在國內弄了不少槍擊案的笑話還不夠,竟然會好意思再去國外製造笑話!我的天啊,國民黨是中了啥降頭,能夠不要臉到如此地步!
  2. 藍鷹戰將-邱德宏可能投靠台聯,郭素春大罵『打著藍旗反藍旗』:我好奇的是即然國民黨不懂的珍惜肯言能諫的黨員,怎麼還能去責備別人、限制別人的參政自由呢?國民黨真的是個最不民主的政黨,偏偏又自以為是民主政黨,說到底,還真是不要臉啊!
  3. 國親年底立委選舉總量管制爭議浮現:再吵吧,看能吵掉多少席立委吧!
  4. 北市府隱匿獅子頭抽水站故障的事實,逕自將污水排入淡水河:說到底,北市府的緊急應變能力並不比行政院高到那邊去,甚至可能還遠遠不及於行政院對多數問題的處理能力。可悲的是,媒體總是輕鬆面對馬英九市長的連帶責任;馬英九也只會嘴吧說說要嚴辦到底,結果呢?娜莉颱風中有誰被嚴辦了?污水排入淡水河所造成的生態破壞又有誰將為此負責呢?
我們可以拭目以待國親今年年底的選舉結果…

2004年7月20日

有關 SpamAssassin 的相關設定

如果有使用 SpamAssassin 來過濾廣告信件的話,在官方網站有整理了一些 Customize Rulesets 的清單,網址在 http://wiki.apache.org/spamassassin/CustomRulesets

我在 http://www.exit0.us/rules/ 中看到一些特殊的設定方式,看來是為了辦識新式廣告信件的內容,有機會一定要試一試… ^_^

對了,SpamAssassin 目前已成為 Apache 基金會下的一個專案,預定近期將推出 3.0 版。

泛藍過半,會是安定力量嗎?

『泛藍過半,安定力量』是連戰對年底立委選舉所提出來的口號。

放屁!

就泛藍過去四年、近來半年的所做所為來看,恐怕泛綠過半才能有安定社會的效果。你看看過去四年來,泛藍何時曾經無條件的支持過提出的行政計劃呢?

我想不起來,我的腦中只留著泛藍立委早上罵、中午罵、晚上還要繼續罵的嘴臉,這樣能夠帶給社會安定才有鬼哩...

連戰,還在構築自己的白日皇帝夢嗎?該醒醒了啊…

2004年7月18日

解決 Tomcat 重新部署 .war 後 DataSource 失效問題

若是依照 開啟 Tomcat 遠端部署功能 內所說的目錄設定方式架設網頁應用程式時,可能會發現 Tomcat 的資料庫連線池會在重新部署一個網頁應用程式後產生一個執行時期例外,它的 Log 就像是這樣的:

[ERROR] 2004-07-07 14:53:46,747 org.apache.jsp.Exception_jsp - Cannot create JDBC driver of class '' for connect URL 'null'
[ERROR] 2004-07-07 14:53:46,759 org.apache.jsp.Exception_jsp - org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:750)
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:518)
tw.net.fitel.utility.InitialSQL.getDataSourceConnection(Unknown Source)
org.apache.jsp.passport_jsp._jspService(passport_jsp.java:108)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
...

查遍 Google 上可以發現一堆人有相同的問題,經多方測試後發現一個簡單的解決方式:『在 Server.xml 中加上 <DefaultContext>...</DefaultContext> 設定區段』。

在我的作法中,所有的 JNDI DataSource 都會放在 <GlobalNamingResources>...</GlobalNamingResources> 之中(因為我習慣將連接相同資料庫的應用系統放在同一台主機上),因此 <DefaultContext>...</DefaultContext> 中的設定只要將記錄在 <GlobalNamingResources>...</GlobalNamingResources> 的 Resources 連接過來即可,如範例:

<GlobalNamingResources>
     <Resource name="jdbc/mydbGlobal" auth="Container"
               type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/mydbGlobal">
         <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
         </parameter>
         <parameter>
            <name>driverClassName</name>
            <value>oracle.jdbc.driver.OracleDriver</value>
         </parameter>
         <parameter>
            <name>url</name>
            <value>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xx.xx.xx.xx)(PORT=1521)))(CONNECT_DATA=(SID = myDatabase)))</value>
         </parameter>
         <parameter>
            <name>username</name>
            <value>myweb</value>
         </parameter>
         <parameter>
            <name>password</name>
            <value>myweb</value>
         </parameter>
         <parameter>
            <name>maxActive</name>
            <value>100</value>
         </parameter>
         <parameter>
            <name>maxIdle</name>
            <value>10</value>
         </parameter>
         <parameter>
            <name>maxWait</name>
            <value>10</value>
         </parameter>
      </ResourceParams>
  </GlobalNamingResources>

<Host name="app.foo.com" debug="0" appBase="/home/app" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" >

<!-- 這是設定有關本站台的一般記錄保存方式 --> <!-- directory 若未指定絕對位址時,則採相對於 $CATALINA_HOME 路徑方式認定 --> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="app_log." suffix=".txt" timestamp="true"/>

<!-- 這是設定有關本站台的資源存取記錄保存方式 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="app_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

<!-- 這一段是用來設定所有 Context 共同遵守的設定 --> <DefaultContext crossContext="true" reloadable="true"> <ResourceLink name="jdbc/mydb" global="jdbc/mydbGlobal" type="javax.sql.DataSource" /> </DefaultContext>

<!-- 這一段是設定這個虛擬主機下有幾個 Web Application --> <Context path="/application" docBase="application" debug="5" reloadable="true" crossContext="true" > </Context> </Host>

完成設定後記得重啟 Tomcat ,再來若單獨 deploy 某一個 Context 時,就不會造成 JNDI 中記錄的 Database Source 失去消息了。

Enjoy it !

政治亂象之我思

近來政治亂象愈演愈烈,搞的我的思想也愈來愈偏激…
  1. 呂秀蓮認為七二洪災是因為濫墾濫伐所致,政府和民間將資源投注在一次又一次的救災只是一種假慈悲(我承認這是記憶中的印象):我非常贊同這些話,不過呂透蓮的腦袋一向搞不清礎啥時能講,啥時該講。沒事選救災還在進行的時候講這些話不就擺明了要災民好看嗎?
  2. 高金素梅抗議呂秀蓮污蔑原住民濫墾濫伐,開了好幾次記者會要呂秀蓮道歉:權力使人瘋狂果然是千古不變的真言,一個在選立委前被批評否認自己是原住民的人為什麼忽然以原住民的守護神自居哩?我只能無奈的猜想應該是利委兩字的由來使然。
  3. 呂秀蓮面對原住民(也許是指高金素梅吧)的反彈,還是不改其搞不清楚狀況的個性,為了說明卻愈說愈不明,也難怪火會愈燒愈旺。
  4. 邱毅帶著親民黨高雄市議員候選人想去民進黨造勢會場『鬧場』,結果被民進黨支持群眾海扁一頓:從 319 以來泛綠支持群眾早已壓抑很久了,邱毅自己不長眼想去鬧場,被支持群眾扁一頓其實是很正常的。這不是啥暴力政黨、暴力總統的問題,只是因為邱毅自己不長眼,自找苦吃,別老是把責任推給別人。想要跑到別人家地盤上就要有犧牲的準備。
  5. 到目前為止我認為高金素梅的行為只是為了年底立委選擇而以。
  6. 陳水扁沒有制止呂秀蓮繼續口無遮攔,造成原住民抗議事件持續沿燒,是整個鬧劇的幫兇。
  7. 關於咬舌能否自盡一事,除了讓人痛到眼淚噴出來外,實在死不了人。所以高金素梅揚言要咬舌自盡一事只是用來鼓動群眾而以。
  8. 除非高金素梅打算成為台灣第一個喑啞立委,否則我不相信她會咬的下自己的舌頭,當然更別奢談自盡了。有趣是,當我在中午去用餐時的客人也差不多都是這種反應。
  9. 台灣對立委的職務、職掌定義不明,所以什麼事立委都想插一腳,所以真相調查委員會是一例,原住民抗議事件也是一例。
  10. 針對前述問題,我堅決贊成重新翻修不合時宜的老憲法,取消各級民意代表的言論免責權,明定各級民意代表的職權以免這些民意代表不務正業。
  11. 原住民若真覺得呂秀蓮已嚴重侮辱了他們的尊嚴,應該是自行推舉一個有民望的領導出來,而不是讓這些不務正業的民代毛遂自薦。
  12. 民意代表若受選民所託而帶領抗議群眾,就不要念念不忘自己的民代身份,更不要因為自己獨斷的行為所導致的後果不符預期就哭著向立法院長喊救命。而且我覺得這麼一喊反而更明白的表示整個鬧劇的的確確是為了立委這個職銜,而不是所謂原住民的尊嚴。
  13. 周守訓大博士想選立委耶!我覺得他還是去教教建構式數學和建構式氣象學比較好。
  14. 如果民進黨下一任黨主席被那個沒腦袋的呂秀蓮撿去,那國親重黨政權的機率恐怕會過半...
  15. 從選前以來,我們發現那些所謂的民意代表、政客等等,總是做出一些正常人做不出來的反應,說出一些不合邏輯的結論,不禁讓我再次想到,我們是否該發起『罷免全國政治人物』這樣的公投呢?
  16. 聽說張俊雄年底要去選立院院長,不過這傢伙自從當了行政院長後,我就一直覺得他只會嘴吧講講要做啥,卻一直看不到他做了啥。
  17. 國親到底合不合啊?看的很煩耶,要佔據新聞版面也好歹每天換一些橋段,不要總是合、不合、合、不合的方式輪流佔版面好嗎?
  18. 以過去四年國親的逢扁必反的問政方式,我熱切的希望今年年底的立委選舉中泛綠能過半。個人認為最佳的席次比應該是民進黨 + 台聯佔 53% 或以上,不過民進黨本身不能過半,且民進黨與國民黨的比例應相近。會這麼想的原因是台聯的訴求不一定和民進黨相同,此時台聯的態度可以左右法案的立場。
  19. 連戰啥時要下台啊?每次聽他講話都覺得好冷喔...
國外的影集中常有黑暗的執法者這種法律外的制裁,好希望台灣也能有類似的東東喔。沒有少年保護法,沒有言論免責權,只有社會的公理和正義。如果沒有辦法罷免全國的政治人物的話,那,肅清全國的政治人物也行!

2004年7月17日

爛死了的 IE6...

這兩天想在 Web 頁面上加上一個點選日期的小功能...
更!那是啥麼爛 IE 啊,為什麼長出來的樣子硬是和別人家不一樣… >"<
事情的主因是這樣的:我幻想使用以下的 JavaScript 碼去建立一個跨越 7 欄 ( cols ) 的 Table Cell...

<script language="JavaScript">
   objRow = document.createElement( "TR" );
   objCell = document.createElement( "TD" );
   objCell.setAttribute( "colspan", "7" );
   objRow.appendChild( objCell );
</script>
在 Firefox 0.9.1 上很正確的顯示了想要的效果,可是混蛋 IE6 卻硬是給我忽視 colspan 這個 Attribute 的設定,真是… 他馬的… -.-
※補一下兩個 Browser 的不同處理結果好了:
IE6
Firefox091
※ 總算知道差異了
  1. Mozilla 上的 Traversing an HTML Table with JavaScript and DOM Interfaces 的用法可能是比較舊的方式。
  2. 在設定 attribute 時,最好使用 obj.attributeName = 'xxx'; 方式指定,這在 IE6/Firefox 0.9.1 中都可運作。

2004年7月14日

再論 Mozilla Firefox

最近還是針對 Mozilla Firefox 和 IE 6 對 CSS 的解釋進行了解,不過,並沒有結果… :p

之前就發現 Firefox 對一些使用 CSS 設定顏色的頁面都完全不予理會,搞了好久,終於發現最保險的方式是透過 Firefox 及一個延伸套件: Web Developer 來編輯 CSS 設定檔,和 DreamWeaver 最大的不同是:你所看到的晝面就是 Firefox 最後顯示的樣子,而不是編輯器自以為是的模擬結果。

還好在昨天一整天的作業中,IE 6 和 Firefox 對顏色設定的解釋並沒有太多的差異 ( 不過顯示的結果還是有差別啦),所以我開發出來的頁面可以給那些只知道 IE 的井中蛙使用外,Firefox 也沒有顯示上的問題!

不過,Firefox 似乎對一些 JavaScript 的 DOM 操作與 IE6 不同,所以這部份大概又要再研究一下了!

2004年7月8日

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

目前在 Tomcat 上執行遠端部署 WAR 檔的方式經整理至少有以下三種:
  1. 使用 FTP 上傳:這是透過 Tomcat 的自動部署設定機制,將 war 檔解開後重新載入相關設定的方式,應該所有的 Application Server 都可支援這種式新方式,例如 Tomcat 4/5, JRUN 4, resin 都可以。
  2. 使用 Tomcat 4 提供的 manager Servlet 界面:只要啟動 Tomcat 的遠端管理功能即可指定 Tomcat 做你想做的維護作業,包含 deploy 及 undeploy 等動作。Tomcat 5 也可以使用這種方式進行部署作業。
  3. 使用 Tomcat 5 提供的 ANT 任務:配合 Tomcat 5 提供的 catalina-ant.jar 及啟動遠端管理功能後,即可使用此方式進行部署。
  • 設定 Tomcat 啟動遠端管理功能的方式請參考:開啟 Tomcat 遠端部署功能
  • 不負責任猜測:Tomcat 5 提供的 ANT 任務服務界面應該也可以用來部署 .war 檔到 Tomcat 4 的 Server 上,但是我沒有使用 Tomcat 4… :p
以下分別介紹如何使用 ANT 達成這三種部署作業的方式:

FTP 上傳

在先前發佈的 Web應用程式ant建置檔 中就是採用這個作法,ant 的核心設定為:

<echo>Sending file(s) to ${uat.ftp.server}...</echo>
  <ftp binary="yes" depends="yes" server="${uat.ftp.server}" 
       password="${uat.deploy.passwd}"userid="${uat.deploy.name}">
  <fileset dir="${output.path}"/>
</ftp>

通常上傳後經過 10 秒後,各家的 Application Server 即可完成重新載入的動作。

使用 Tomcat 4 的遠端管理界面

Tomcat 4/5 都提供了遠端管理界面以進行安裝、啟動、關閉、移除等遠端管理界面,請參考相關說明完成設定動作:開啟 Tomcat 遠端部署功能

ANT 提供 <get.... /> 任務可以取得指定 URI ( http 支援最完整,而 https 在我的 J2SDK 1.4.2_03 上無法正確運作,據說應該要可以動才對 ) 的輸出結果,不過我不還搞不清楚怎麼將 .war 檔透過管理界面丟上 JSP Container 去… :p

<!-- 先關閉指定路徑的 Web Application,並把網頁輸出的結果寫到${uat.ftp.server}.stop.txt中  -->
<get src="http://${uat.ftp.server}/manager/stop?path=/${ant.project.name}"
     dest="${uat.ftp.server}.stop.txt"
    username="${uat.tomcat.username}" password="${uat.tomcat.password}" />
<!-- 將 get 的輸出結果載入到 uat.stop.result 屬性中 -->
<loadfile property="uat.stop.result"
           srcFile="${uat.ftp.server}.stop.txt" />
<!-- 輸出 get 的輸出結果 -->
<echo>${uat.stop.result}</echo>

<!-- 還是採用 ftp 傳檔.... --> <echo>Sending file(s) to ${uat.ftp.server}...</echo> <ftp binary="yes" depends="yes" server="${uat.ftp.server}" userid="${uat.deploy.name}" password="${uat.deploy.passwd}"> <fileset dir="${output.path}"/> </ftp>

<!-- 上傳後要留點時間給 APP Server 解開 war 檔 --> <echo>wait for 10 seconds...</echo> <sleep seconds="10" />

<!-- 重新啟動指定路徑下的 Web Application --> <get src="http://${uat.ftp.server}/manager/start?path=/${ant.project.name}" dest="${source.path}/${uat.ftp.server}.start.txt" username="${uat.tomcat.username}" password="${uat.tomcat.password}" /> <!-- 載入 Web Application 啟動情形 --> <loadfile property="uat.start.result" srcFile="${source.path}/${uat.ftp.server}.start.txt" /> <!-- 檢查 ${source.path}/${uat.ftp.server}.start.txt 是否有 'OK' 字眼 --> <!-- 有就將 deploy.uat.success 屬性設為 true --> <condition property="deploy.uat.success" value="true"> <and> <contains string="${uat.start.result}" substring="OK" /> </and> </condition> <!-- 若 deploy.uat.success 未設定時表示部署作業失敗,終止 build 程序 --> <fail message="Deploy ${uat.ftp.server} fail..." unless="deploy.uat.success"/> <!-- 不然就輸出部署成功的訊息 --> <echo>${uat.start.result}</echo>

使用 Tomcat 5 提供的 Ant 任務管理功能

設定 ant

請記得將 catalina-ant.jar 複製到 $ANT_HOME/lib 下,不然 ant 無法取得 Tomcat 5 所提供的外掛任務。

在 build.xml 中定義 ant 提供的任務項目

<!-- 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"/>

使用定義好的 ant 任務

完成任務定義後,即可在 ant 目標中使用相關的任務。

<!-- 移除原指定路徑上之應用系統 -->
<undeploy url="http://${uat.ftp.server}/manager" 
     username="${uat.tomcat.username}" password="${uat.tomcat.password}"
         path="/${ant.project.name}"/>
<!-- 傳送檔案 ( log4j.properties 設定檔 ) -->
 <echo>Sending file(s) to ${uat.ftp.server}...</echo>
 <ftp binary="yes" depends="yes" server="${uat.ftp.server}" 
     userid="${uat.deploy.name}" password="${uat.deploy.passwd}">
   <!-- 避開 .war 檔 -->
   <fileset dir="${output.path}" excludes="**/*.war"/>
 </ftp>
<sleep seconds="10" />
<!-- 重新部署 -->
 <deploy url="http://${uat.ftp.server}/manager" 
    username="${uat.tomcat.username}" password="${uat.tomcat.password}"
        path="/${ant.project.name}" war="${war.name}"/>

不過使用這個方式會有個問題: 若 undeploy 失敗後,建置程序就會中止

通常部署管理員在意的不是 undeploy 是否失敗,反而是 deploy 後該應用程序是否正確上線,因此或許混合各種不同的方式才可能取得最適合自己系統的部署方式。

另外,其他 Application Server 也多半都開始提供 ant 部署任務,這部份就等到遇上後再來整理相關的資料吧。

2004年7月6日

開啟 Tomcat 遠端部署功能

Tomcat 提供了遠端部署 Web Application ( 網頁應用系統,這和 Web Services 網頁應用服務 是兩件事 ) 的功能,但如何設定呢?

通常,我不會使用 Tomcat 預設的路徑 (指的是 $CATALINA_HOME/webapps/) 放置所開發的應用系統,反而會另外安排一塊目錄(特別是不和 / 放一起的獨立 partition )。這麼做的好處是若系統重建時,原來的 Web Application 相關程式都不會被洗掉,另外在測試各 Application Server 時能有單一的程式目錄。

設定虛擬主機

為了設定應用系統的獨立目錄,我的作法是建立一個新的虛擬主機 (Virtual Host),方法不複雜,只要把 Tomcat 設定檔 server.xml 中的<Host name="localhost">...</Host>段落複製一份再改名即可:例如將

<Host name="localhost" debug="0" appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">

<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/> </Host>

複製成:
<!-- app.foo.com 是說明用的,您應該使用正式的網路主機名稱 -->
<Host name="app.foo.com" debug="0" appBase="/home/app"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false" >
    <!-- 這是設定有關本站台的一般記錄保存方式 -->
    <!-- directory 若未指定絕對位址時,則採相對於 $CATALINA_HOME 路徑方式認定 -->
    <Logger className="org.apache.catalina.logger.FileLogger"
            directory="logs"  prefix="app_log." suffix=".txt"
            timestamp="true"/>
    <!-- 這是設定有關本站台的資源存取記錄保存方式 -->
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"  prefix="app_access_log." suffix=".txt"
           pattern="common" resolveHosts="false"/>
    <!-- 這一段是設定這個虛擬主機下有幾個 Web Application -->
    <Context path="/application" docBase="application" debug="5" 
             reloadable="true" crossContext="true" >
    </Context>
</Host>
記得 <Host>...</Host> 所在的區段必須在 <Engine>...</Engine> 中。當完成以上設定後只要重啟 Tomcat 就可以完成虛擬主機的建置,此時 http://localhost/http://app.foo.com 表示的是兩個不同的虛擬主機,也就是兩個不同的服務。

那如果有多個網域名稱對上同一個 IP ,而那些網域名稱並未在 server.xml 中設定時,Tomcat 會怎麼處理呢?其實 Tomcat 還是會提供一個預設虛擬主機來服務這些網域名稱,而這個預設的虛擬主機也同樣在 server.xml 中指定,如下所示:

<Engine name="Catalina" defaultHost="app.foo.com" debug="0">

設定維護界面

Tomcat 的遠端部署功能必須使用 /manager 維護界面達成。

當完成虛擬主機設置時,Tomcat 會在 $CATALINA_HOME/conf/Catalina/ 目錄下建立一個與新設定的虛擬主機名稱同名的目錄 app.foo.com,而這個目錄通常沒有包含任何檔案。

同樣在 $CATALINA_HOME/conf/Catalina/ 還有另一個目錄叫 localhost ,這個是 Tomcat 預設的虛擬主機名稱,目錄中包含有 3 個 xml 檔,其中一個檔名叫做 manager.xml。

manager.xml 這個檔其實正是 Tomcat 用來判斷指定虛擬主機網址是否需要啟動 /manager 遠端維護界面的設定檔,因此必須複製一份到 $CATALINA_HOME/conf/Catalina/app.foo.com/ 目錄下,如範例:

[root@app Catalina]# pwd
/opt/jakarta-tomcat-5.0.19/conf/Catalina
[root@app Catalina]# cp localhost/manager.xml app.foo.com/

完成複製動作後,最好去修改一下 manager.xml 的設定檔,將 docBase 指向正確的 Servlet 所在目錄:

<Context path="/manager" debug="0" privileged="true"
    docBase="/opt/jakarta-tomcat-5.0.19/server/webapps/manager" >

<!-- Link to the user database we will get roles from --> <ResourceLink name="users" global="UserDatabase" type="org.apache.catalina.UserDatabase"/> </Context>

設定維護者帳號及密碼

最後 manager 這個 Servlet 有限制使用者的角色必須是 manager,因此必須設定一個維護者的帳號並配屬到 manager 這個角色。設定的方式是編輯 $CATALINA_HOME/conf/tomcat-users.xml 這個檔,內容如下:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <user username="admin" password="password" roles="manager"/> 
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

檢驗設定狀況

完成以上設定後,重新啟動 Tomcat 並開啟瀏覽器進行測試。

在瀏覽器網址列上填入 http://app.foo.com/manager/list ( 請填入所設定的真實網址 ),輸入前面設定的維護者帳號、密碼後,只要看到瀏覽器輸出 OK - Listed applications for virtual host app.foo.com 字樣及其目前所管理的所有網頁應用系統記錄即算設定完成。如範例:

OK - Listed applications for virtual host app.foo.com
/blog:running:1:/home/webapps/blog
/manager:running:0:/opt/jakarta-tomcat-5.0.19/server/webapps/manager

如何使用遠端部署端維護功能

若確認 Tomcat 遠端部署維護功能已設定完成後,可在瀏覽器網址列上填入 http://app.foo.com/manager/html-manager-howto.html 即可查看如何使用遠端線上管理功能。

2004年6月29日

Jabber 伺服器設定

設定 Jabberd 伺服器

  • 安裝 jabberd 1.4.3 版
emerge -v jabberd
  • 編輯 /etc/jabber/multiple.xml,將
<host>
  <jabberd:cmdline flag="h">localhost</jabberd:cmdline>
</host>
改為
<host>
  <jabberd:cmdline flag="h">Jabber Server 的 FQDN</jabberd:cmdline>
</host>
  • 打開接受使用者註冊的設定
<!-- commented out so no one can register!!! -->
  <register notify="yes">
    <instructions>
      Choose a username and password to register with this server.
    </instructions>
    <name/>
    <email/>
  </register>
  • 設定 jabberd 載入註冊支援模組
<!-- commented out so no one can register!!! -->
  <mod_register>/usr/lib/jabberd/jsm.so</mod_register>
  • 在 service id="c2s" 中填入欲監聽的 ip 位址,若要變更 port 號也在此修改。若要啟用 ssl 連線的話,則開放 <ssl...></ssl> 設定
<service id="c2s">
    <!-- .... -->
      <!--
      Use these to listen on particular addresses and/or ports.
      Example: <ip port="5222">127.0.0.1</ip>
      Default is to listen on port 5222 on every interface.
      Remove the <ip/> section to disable non-ssl client connections.
      <ip port="5222"/>
      -->
      <ip port="5190">xx.xx.xx.xx</ip>

<!-- The <ssl/> tag acts pretty much like the <ip/> tag, except it defines that SSL is to be used on the ports and IP addresses specified. You must specify an IP address here, or the connections will fail. <ssl port='5223'>127.0.0.1</ssl> <ssl port='5224'>192.168.1.100</ssl> --> </pthcsock> </service>

測試 jabberd 是否正常

  • 執行以下命令啟動 jabber server
jabberd -c /etc/jabber/multiple.xml -D
看到這行訊息表示 jabberd 啟動了
[notice] (-internal): initializing server
  • 使用 telnet 登入 jabber server
telnet <Jabber Server 的 FQDN> 5190 # 此為於 service is='c2s' 中指定的 port number
應該要回應以下訊息,如未回應請檢查 jabber server 是否正確啟動
Trying xx.xx.xx.xx
Connected to <Jabber Server 的 FQDN>
Escape character is '^]'.
  • 送出以下命令給 Jabber Server
<stream:stream
  to='Jabber Server 的 FQDN'
  xmlns='jabber:client'
  xmlns:stream='http://etherx.jabber.org/streams'>
  • Server 回應下列訊息表示接受連線
<stream:stream xmlns:stream='http://etherx.jabber.org/streams' 
                         id='40E04E48' xmlns='jabber:client' 
                       from='jabber.jspbb.net'>
  • 送出要求註冊的訊息
<iq id='reg1' type='get'>
  <query xmlns='jabber:iq:register'/>
</iq>
  • 若回應如下訊息即表示設定完成,可以開始安裝其他 IM 的轉接器了
<iq id='reg1' type='result'>
  <query xmlns='jabber:iq:register'><password/><password/>
        <instructions>
          Choose a username and password to register with this server.
        </instructions>
        <name/>
        <email/>
      <username/></query>
</iq>

Gentoo 中文化相關文件

感謝 GOT 提供的各項中文說明…
  1. Gentoo中文化指南
  2. Gentoo 台灣中文 Ebuild 使用指南
  3. Gentoo Samba3/CUPS/Clam AV HOWTO

心智圖

星期天買了一本心智圖的基礎手冊,很薄,價格也不貴,才 1xx 元。

由於習慣於不求甚解,所以看了手冊前面的十來個範例後就大概知道心智圖的用法,並且也嘗試使用這種資料匯整工具。

我是把心智圖當成筆記在用的,但是和循序、階層式筆記不同。

我認為階層式筆記過於死板、文字過多、很難立即的將重點擺在相關連的地方,雖然可以使用線條來表示某筆記錄真正所在的位置,但這麼做版面就顯的凌亂。階層式筆記可以整理的很工整,相對的也會給人死板板的感覺,對,就是那種讓人想睡覺的感覺。另外通常這種筆記的句子較長,相對難以記憶。

心智圖一開始就不求工整,相對的就可以應用到整個頁面的空間。記錄上講求使用關鍵字,因此很容易用最少的字數登載最多的訊息。不過也常常因為資訊太多,造成不知道怎麼和他人交換所整理出來的圖形,即使是使用 MindManager 等這類軟體畫圖也一樣。

MindManager 一套要 US$299 ,好貴… :(

2004年6月27日

重大抉擇

現在我決定做出這個重大的抉擇… 換掉 XFree86-4.3.0 改為 Xorg...

Why ?!

因為 Gentoo of Taiwan 提供的 Gentoo 中文化方案使用的是這個 X11 環境… :( 若是安裝失敗的話… 哈哈哈...

我也不敢想像… :(

※後註:後來沒有改,但是增加了一堆中文字型… :D 現在桌面變成以下德性了!

FlatDesktop4

2004年6月25日

驢耳朵大集合

布拉格的春天 看到一些被聽錯的歌詞記錄,讓我差點在辨公室暴笑失聲。

去看看如何?

2004年6月23日

聽說朋友去買了套射擊遊戲

聽說朋友去買了套射擊遊戲,立刻讓我滿心期待星期五的到來,並且留下了這首歌詞(配樂:__我現在要出征__ )...

歌名:我一定要破關                    詞:Ada

我一定要破關… 我一定要破關… 我若是破不了關我總會繼續接關… 當笨達不去買Game我怎會陷下去… 但這套Game總是需要我來破關… 所以我要破關… 就因為這緣故… 玩Game… 玩Game… 破關....

還有兩天就是星期五了… :D

吃完粽子了

中國三大節慶中,端午節是我第二喜歡的節日,因為比起月餅而言,我比較喜歡熱熱的粽子… :D

到台北五年多,到今天為止有四年吃到粽子:

  1. 第二年:端午節前天下班時被朋友騙到他工作的地方去,然後他帶我到新東陽商店(那時他在新東陽)挑了三個粽子丟我拿回家吃。比較慘的是… 那一年我租的房間並沒有附上冰箱,結果一個晚上就把三個粽子(其中一個還特別大顆… -.-)啃掉,然後隔天腸胃不適.... -.-
  2. 第三年:同事端午節回南部時,帶了一串南方粽北上到公司分享,好吃!
  3. 第四年:這跟同事拗來的,是北方粽。
  4. 第五年:這一年那個新東陽的朋友早就離開新東陽了,可是不巧他媽媽為了去日本玩就先把粽子包好、拜完後,在去日本的前一天拎了一串到台北來交給他。這傢伙也很夠義氣,強迫推銷、分享他媽媽的愛給我,可是正當感動之餘卻聽到一句:星期二來幫我搬房子.... -.-! 好吧,不過星期二要在家中發呆,星期五去幫一下好了...
對了,你應該猜到第一喜歡的節日是啥了,最喜歡的原因當然不是因為有啥好吃的東西,只是單純因為年終有錢可以領的緣故而以… XD

2004年6月20日

計算檔案中重覆的行數

因為發現負責提供服務的系統中,似乎有人在暴力測試用戶的資料,好在之前有對系統使用狀況進行 Log 登載,所以嘗試實施統計那些作業編號有人在惡搞。

首先,Linux 上的確有計算重覆行數的指令:uniq -c ,但這個指令有所限制:只能計算 連續相同 的部份。

ada@www tmp $ uniq --help
用法:uniq [選項]… [輸入 [輸出]]
將 <輸入> (預設為標準輸入) 的資料中每行連續相同的資料捨棄至只剩一行,
並在 <輸出> 顯示結果 (預設會在標準輸出顯示結果)。
長選項必須用的引數在使用短選項時也是必須的。
  -c, --count           每行前加上出現次數
  -d, --repeated        只印出重覆的資料
  -D, --all-repeated[=分隔方式]
                        印出所有重覆的資料
                        分隔方式={none(預設)、prepend、separate}
                        會使用空行來分隔資料。
  -f, --skip-fields=N   不比較最初的 N 個欄位
  -i, --ignore-case     比較時忽略大小寫
  -s, --skip-chars=N    不比較最初的 N 個字元
  -u, --unique          只印出沒有重覆的資料
  -w, --check-chars=N   每行比較不多於 N 個字元
      --help     顯示此求助說明並離開
      --version  顯示版本資訊並離開

一個欄位是由一組空白字元加上一組非空白的字元組成的。 當同時指定略過欄位和略過字元不作比較時,會先略過欄位。

請向 <bug-[email protected]> 回報錯誤。

即然 uniq -c 必須要連續相同的資料行才視作重覆,那麼只要排序一下不就好了?這個指令是 sort !

ada@www tmp $ sort --help
用法:sort [選項]… [檔案]…
將所有 <檔案> 內容合併和排序,並在標準輸出顯示結果。

排序選項:

長選項必須用的引數在使用短選項時也是必須的。 -b, --ignore-leading-blanks 忽略每行開始的空白字元 -d, --dictionary-order 只考慮空白字元、英文字和數字 -f, --ignore-case 排序前先將小寫字元轉換為大寫 -g, --general-numeric-sort 以普通數值的方式作比較 -i, --ignore-nonprinting 只考慮可列印的字元 -M, --month-sort 比較月份: (不明) <‘JAN’< … <‘DEC’ -n, --numeric-sort 將字串轉換為數值來作比較 -r, --reverse 以相反的次序排列

其它選項:

-c, --check 只檢查輸入資料是否排列好,不會真正將資料排序 -k, --key=位置1[,位置2] 排序索引由 <位置1> 的欄位開始,在 <位置2> 的 欄位結束 (1 表示第一個欄位) -m, --merge 只合併已經排序的檔案;不分別排列每個檔案的內容 -o, --output=FILE 將結果寫入 <檔案> 而並非在標準輸出顯示 -s, --stable 不進行最後的整行比較排序 -S, --buffer-size=大小 指定記憶緩衝區的 <大小> -t, --field-separator=SEP use SEP instead of non-blank to blank transition -T, --temporary-directory=DIR use DIR for temporaries, not $TMPDIR or /tmp multiple options specify multiple directories -u, --unique with -c: check for strict ordering otherwise: output only the first of an equal run -z, --zero-terminated 以位元組 0 而非 newline 字元作為每行的結束字元 --help 顯示此求助說明並離開 --version 顯示版本資訊並離開

<位置> 的格式是 F[.C][OPTS],其中 F 是欄位編號,C 是該欄的字元位置。OPTS 是一個或多個單字元的排序選項,這些專用的選項會取代該排序索引的一般排序 選項。如果沒有指定排序索引,則以整行的內容作為索引。

<大小> 可以加上如下的單位: %% = 1%% 記憶體,b=1,K=1024 (預設值),還有 M、G、T、P、E、Z、Y 如此類推。

如果沒有指定 <檔案> 或 <檔案> 是 -,則由標準輸入讀取資料。

*** 警告 *** 和語系有關的環境變數會影響排序結果。 如果要以位元組數值作為排列次序,請設定環境變數 LC_ALL=C。

請向 <bug-[email protected]> 回報錯誤。

所以結論很簡單了,假設有一文字檔內容如下:

ada@www tmp $ cat text.txt
11111
22222
33333
44444
22222
44444
11111
11111
33333
55555
44444

若要計算重覆的資料行數,可以下指令:

ada@www tmp $ sort text.txt | uniq -c
      3 11111
      2 22222
      2 33333
      3 44444
      1 55555

透過 Linux 上即有工具的簡單組合,可以減損眼力的消耗和時間的浪費,提供各位做一個參考!

史瑞克 2

今天去看了 史瑞克2 了,感想如下:
  1. 微風廣場的國賓戲院好冷啊… :( 雖然是下午天氣正熱的時候,但是仍然感受到極低溫的振撼。我在此提出抗議:我是來看 史瑞克2 ,不是來看 明天過後 ,不需要把室溫搞的那麼低來企圖讓觀眾有身歷其境的感受啦...
  2. 史瑞克2 開了不少玩笑,不知道那邊有清單可以彙整所有笑點的來源?
  3. 史瑞克 還有沒有第三集?有可能喔… 神奇教母的兒子會不會為了報仇來找史瑞克呢?天曉得… :p

關於北市健保費爭議

其實… 我現在不想管誰是誰非,我只想知道如果北市府不還錢,健保局不放棄催討時,我這個非設籍台北市的外來勞工的健保福利是否可以繼續保持?

幹嘛這麼想?

當然會這麼想囉,因為屬於我的那一份健保保費還沒繳完整啊.... 所以台北市政府現在的處理方式應該朝向修改健保法,確認繳費計算基礎後,再回頭和健保局吵,否則一旦我的健保卡失效時,你認為我該怪誰?

話說回來,北市有多少外來勞工,在幫台北市生產、建設?

使用 SNMP 查詢 ADSL Router (ATU-R) 狀態


使用 SNMP 查詢 ADSL Router (ATU-R) 狀態

補充說明:
  1. 一個使用 SNMP 查詢網路設備狀態的範例
  2. 與 ADSL 相關的 MIB 參考:ADSL-LINE-MIB
我目前使用的網路是由 HiNET 所提供,硬體設施則是使用由中華電信出借的 Alcatel SPEEDTOUCH 340 這顆 ATU-R。
由於在系統中裝了 snmpd 服務,加上知道 Alcatel SPEEDTOUCH 340 也有提供 SNMP 代理服務 (必須使用 telnet 設定方式才能看到,若用 Web 設定界面是看不到的 ),所以就試著透過 SNMP 來看看這顆 ATU-R 有啥特殊資訊。

確認主機與 ATU-R 同網段

除非使用的是固定多 IP 制的連線模式,否則 ATU-R 會使用 bridge 模式來代轉使用者的網路連線。這通常給使用者一個 ATU-R 本身沒有 IP 的假象。
只要是網路設備必然會有一個 IP 來代表( HUB沒有就是了 :p),ATU-R 也不例外。它的預設 IP 是 192.168.1.1,只要系統能有一個 IP 與 ATU-R 的預設 IP 同一網段時即可存取 ATU-R 上的資訊,至少我們可以透過 telnet , web 或者是 snmp 方式向 ATU-R 進行存取作業。
我的系統中內建有 5 個網路界面,因此指定其中一個網路界面的 IP 為 192.168.1.2,當然你也可以透過 alias IP 的方式讓同一張網卡擁有兩個以上的 IP ,設定完畢後先 ping ping 看是否可以連上 ATU-R。

確認已安裝 snmp utility

在 Linux 環境下,只要安裝 net-snmp 套件後即可;若是 Windows 系統則請自己看著辦。
Gentoo Linux 中可以使用以下方式檢查是否安裝 net-snmp 套件。

www tmp # emerge -s net-snmp
Searching…
[ Results for search key : net-snmp ]
[ Applications found : 2 ]
* dev-perl/Net-SNMP Latest version available: 4.1.2 Latest version installed: [ Not Installed ] Size of downloaded files: 70 kB Homepage: http://www.cpan.org/modules/by-module/Net/Net-SNMP-4.1.2.readme Description: A SNMP Perl Module License: Artistic
* net-analyzer/net-snmp Latest version available: 5.0.9-r1 Latest version installed: 5.0.9-r1 Size of downloaded files: 2,290 kB Homepage: http://net-snmp.sourceforge.net/ Description: Software for generating and retrieving SNMP data. License: as-is

開始查詢 ATU-R 系統資訊


www tmp # snmpwalk 192.168.1.1 -c public -v 1 1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Alcatel SPEEDTOUCH 340 version 7.1.0.31 (patch) (25 April 2001) T60L280.01/H2.3.1.5.01/1.4.8
Copyright (c) 2001
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.4684
SNMPv2-MIB::sysUpTime.0 = Timeticks: (83557662) 9 days, 16:06:16.62
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING:
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 6
從以上可知 ATU-R 的產品名稱、版本編號、開機時間等,其他像連絡人資訊、系統名稱、系統位置則沒有設定。

查詢 ATU-R 網路設備資訊

www tmp # snmpwalk 192.168.1.1 -c public -v 1 1.3.6.1.2.1.2
資料很多,所以可以改查詢網路設備的型別。
www tmp # snmpwalk 192.168.1.1 -c public -v 1 1.3.6.1.2.1.2.2.1.2
IF-MIB::ifType.1 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.2 = INTEGER: ppp(23)
IF-MIB::ifType.3 = INTEGER: ppp(23)
IF-MIB::ifType.4 = INTEGER: ppp(23)
IF-MIB::ifType.5 = INTEGER: ppp(23)
IF-MIB::ifType.6 = INTEGER: ppp(23)
IF-MIB::ifType.7 = INTEGER: ppp(23)
IF-MIB::ifType.8 = INTEGER: ppp(23)
IF-MIB::ifType.9 = INTEGER: ppp(23)
IF-MIB::ifType.10 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.11 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.12 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.13 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.14 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.15 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.16 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.17 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.18 = INTEGER: other(1)
IF-MIB::ifType.19 = INTEGER: adsl(94)
IF-MIB::ifType.20 = INTEGER: fast(125)
IF-MIB::ifType.21 = INTEGER: interleave(124)
不過因為數字型式的 OID 難以記憶,通常會使用文字式代名。
www tmp # snmpwalk 192.168.1.1 -c public -v 1 interfaces.ifTable.ifEntry.ifType
IF-MIB::ifType.1 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.2 = INTEGER: ppp(23)
IF-MIB::ifType.3 = INTEGER: ppp(23)
IF-MIB::ifType.4 = INTEGER: ppp(23)
IF-MIB::ifType.5 = INTEGER: ppp(23)
IF-MIB::ifType.6 = INTEGER: ppp(23)
IF-MIB::ifType.7 = INTEGER: ppp(23)
IF-MIB::ifType.8 = INTEGER: ppp(23)
IF-MIB::ifType.9 = INTEGER: ppp(23)
IF-MIB::ifType.10 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.11 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.12 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.13 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.14 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.15 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.16 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.17 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.18 = INTEGER: other(1)
IF-MIB::ifType.19 = INTEGER: adsl(94)
IF-MIB::ifType.20 = INTEGER: fast(125)
IF-MIB::ifType.21 = INTEGER: interleave(124)
配合每一個界面的描述,大致上可以得知這 21 個界面的用途。
www tmp # snmpwalk 192.168.1.1 -c public -v 1 interfaces.ifTable.ifEntry.ifDescr
IF-MIB::ifDescr.1 = STRING: ethernet
IF-MIB::ifDescr.2 = STRING: ppp channel 1
IF-MIB::ifDescr.3 = STRING: ppp channel 2
IF-MIB::ifDescr.4 = STRING: ppp channel 3
IF-MIB::ifDescr.5 = STRING: ppp channel 4
IF-MIB::ifDescr.6 = STRING: ppp channel 5
IF-MIB::ifDescr.7 = STRING: ppp channel 6
IF-MIB::ifDescr.8 = STRING: ppp channel 7
IF-MIB::ifDescr.9 = STRING: ppp channel 8
IF-MIB::ifDescr.10 = STRING: ppp1
IF-MIB::ifDescr.11 = STRING: ppp2
IF-MIB::ifDescr.12 = STRING: ppp3
IF-MIB::ifDescr.13 = STRING: ppp4
IF-MIB::ifDescr.14 = STRING: ppp5
IF-MIB::ifDescr.15 = STRING: ppp6
IF-MIB::ifDescr.16 = STRING: ppp7
IF-MIB::ifDescr.17 = STRING: ppp8
IF-MIB::ifDescr.18 = STRING: bridge
IF-MIB::ifDescr.19 = STRING: ADSL physical interface
IF-MIB::ifDescr.20 = STRING: ADSL fast channel
IF-MIB::ifDescr.21 = STRING: ADSL interleaved channel
比對過 ifType 和 ifDescr 後,可以判定第 1 個網路界面是 ethernet,也就是接到內部網路的那個界面;第 18 個網路界面是 bridge, 若使用 bridge 模式時會在這個網路界面上產生 I/O;第 19 個網路界面是 adsl, 也就是 ADSL 實體線路,當線路異常時會在這個界面上產生反應。

範例:檢查網路是否斷線

透過 interfaces.ifTable.ifEntry.ifOperStatus.xx 可以查詢指定界面的連線狀態,如:

www tmp # snmpwalk 192.168.1.1 -c public -v 1 interfaces.ifTable.ifEntry.ifOperStatus.1
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
www tmp # snmpwalk 192.168.1.1 -c public -v 1 interfaces.ifTable.ifEntry.ifOperStatus.18
IF-MIB::ifOperStatus.18 = INTEGER: up(1)
www tmp # snmpwalk 192.168.1.1 -c public -v 1 interfaces.ifTable.ifEntry.ifOperStatus.19
IF-MIB::ifOperStatus.19 = INTEGER: up(1)

查詢某個 OID 的意義

當查詢某個裝置的資訊時,發現有無法明確辨識的 SNMP 標籤時其實可以透過 net-snmp 套件所提供的轉譯工具,將標籤轉成較為明確的說明,如 ATU-R 中有這個一個標籤 IF-MIB::ifLastChange,他的實際意義可以這樣查詢:

www tmp # snmptranslate -Td -OS IF-MIB::ifLastChange
IF-MIB::ifLastChange
ifLastChange OBJECT-TYPE
  -- FROM       IF-MIB, RFC1213-MIB
  SYNTAX        TimeTicks
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The value of sysUpTime at the time the interface entered
            its current operational state.  If the current state was
            entered prior to the last re-initialization of the local
            network management subsystem, then this object contains a
            zero value." 
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1) 9 }
也可以查詢 IF-MIB::ifOperStatus 的完整說明。
www tmp # snmptranslate -Td -OS IF-MIB::ifOperStatus
IF-MIB::ifOperStatus
ifOperStatus OBJECT-TYPE
  -- FROM       IF-MIB, RFC1213-MIB
  SYNTAX        INTEGER { up(1), down(2), testing(3), unknown(4), dormant(5), notPresent(6), lowerLayerDown(7) }
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   "The current operational state of the interface.  The
            testing(3) state indicates that no operational packets can
            be passed.  If ifAdminStatus is down(2) then ifOperStatus
            should be down(2).  If ifAdminStatus is changed to up(1)
            then ifOperStatus should change to up(1) if the interface is
            ready to transmit and receive network traffic; it should
            change to dormant(5) if the interface is waiting for
            external actions (such as a serial line waiting for an
            incoming connection); it should remain in the down(2) state
            if and only if there is a fault that prevents it from going
            to the up(1) state; it should remain in the notPresent(6)
            state if the interface has missing (typically, hardware)
            components."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1) 8 }

應用

當我們知道如何查詢指定硬體的 SNMP 資訊後,即可加以整理作為系統效能的參考依據或是錯誤警示等,或者透過 MRTG 等其他工具將數據資訊以圖示方式顯示出來。這部份就是個人的創意問題了。