2009年2月24日

Java WebStart + Linux + URLStreamHandler = MalformedURLException

又發現了一個Java的陷阱,讓我手頭上的一個Java專案,在porting到Linux環境的過程一直很不順利。

今天仗著不找到solution不罷休的的決心,把jEdit的原始碼拿出來一隻隻慢慢啃,最後連JDK的原始碼都找出來翻山倒海一番,才發現只需要加幾行程式碼就能解決。

我開發的軟體是這麼樣運作:
  • 使用JNLP配置Java WebStart
  • 搭配jEdit的jar檔啟動編輯器
  • 自製兩項jedit的plug-ins
在jEdit啟動後,會找尋jars目錄下的jar檔案,檢查是否為plug-in,如果是則會自動載入。

好死不死,在討人厭的 Windows + JDK6 一切都正常;而在迷人的 Linux + JDK6 卻發生 MalformedURLException 的意外。

經過逐步的檢查發現,原來是 jEdit 自己定義了一個新的URL格式「jeditresource:/檔案路徑」。

一般來說,Java註冊新的URL格式,會使用如下的Property「java.protocol.handler.pkgs」定義,這幾行是jEdit.java包含的程式碼。

System.getProperties().put("java.protocol.handler.pkgs",
"org.gjt.sp.jedit.proto|" +
System.getProperty("java.protocol.handler.pkgs",""));

但不知道、不知道、不知道為什麼,在Linux下的Java VM,似乎根本不理會這些定義,根據挖掘JDK原始碼URL.java的了解後,我認為跟Security機制有關,但是嘗試一些Security Policy的設定後,還是~~無效。

只好把希望放在另一種方法,也就是 URL.setURLStreamHandlerFactory 這個method,它可以讓我們自己定義Factory Implementation,將protocol對應到處理它的Handler Implementation。

以jEdit來說,需要的程式碼摘要如下:

class JEditURLStreamHandlerFactory implements URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
if (protocol.equals("jeditresource")) {
return new org.gjt.sp.jedit.proto.jeditresource.Handler();
}
return null;
}
}

URLStreamHandlerFactory factory = new JEditURLStreamHandlerFactory();
URL.setURLStreamHandlerFactory(factory);

雖然暫時解決啟動的問題,但遇上Java惱人的Security機制,不知道何時還會在其他地方踩到地雷!

再次體驗Java的「Write Once, Debug Everywhere」不是喊假的。

2009年2月23日

2009媽祖萬人崇BIKE圓滿落幕

週六參加「媽祖萬人崇BIKE」活動,完成挑戰組130公里的騎乘,讓我的腰酸背痛直到今天還沒完全退散,當天還因為太累,而錯過MERRELL特賣會的敗家機會。

130公里有多遠呢?!從台中大甲到嘉義新港單程距離。

其實對平常有騎車的人來說,這距離並不算太遠,以平均時速30km/hr來看,130/30=4.33小時,也就是說如果八點出發,中午左右就抵達目的地,均速25km/hr也只需要5.2小時。

這趟路會那麼累,學到的教訓就是「要按捺得住、沉得住氣」。在前60公里(大甲→彰化)時,只要看到有人衝,我都緊緊黏在後面,接著一路超車、連機車也超,時速接連幾次踩到5xkm/hr,直到腰開始刺痛、雙腳開始抽筋,就知道接下來的70公里路途會是一片暗(案、按、黯…)。

從民雄到新港的一小段路,明明只有二十公里,但全身無處不痛,只能撐住時速二十「滑行」,勉強才到達終點。

這次的活動,有值得稱許之處。
  • 媽祖保佑紀念衫好看(尤其是可愛的大甲媽騎單車LOGO)、好穿(材質比普通T-shirt好)。
  • 提供廠商贊助FIN運動飲料、VOLVIC礦泉水(水從法國進口,雖然喝起來還是水,但一小瓶售價就要三十元)。
  • 喝著媽祖保佑水、掛著媽祖保佑平安福、吃著拜拜常用的貢品(香蕉、棗子、七七乳加、米粉),整個有被媽祖光環圍繞的感覺,雖然騎在危險的縱貫路(省道一號),但一路很平安,就像先祖跨越黑水溝來到台灣。
  • 省道上沿途都有7-11陪伴,一路下來小腹開始微凸。
  • 聽說比起去年有進步一點。
  • 想不出來了…
有褒必有貶,有期待明年會更好之處。
  • 報名費太貴(一般民眾要價$500,雖然學生身份只要$200元,但我明年就不是學生了),既然有體委會、環保署、香火鼎盛的媽祖廟、很多善心廠商的支持,又要鼓勵民眾節能減碳,外頭又這麼不景氣,報名費實在不該讓人覺得貴。
  • 大型活動共通的缺點,就是早晨最棒的時光不能騎車,只能呆在會場等長官致詞、跳暖身操,接著才人擠人、車擠車地上路,豔陽都高掛了。
  • 飲用水的供應需要多一點,現場應該提供補充飲水自助區,少發瓶裝水,一般車友都會攜帶水壺,塑膠瓶空罐只會製造垃圾和麻煩,比較不環保。
2009年的活動,在前段3.2公里遊行,再次突破世界紀錄「世界最多自行車隊伍」,共有2284台自行車,每位報民參加者都能在會後拿到金氏世界紀錄證書。當然實際參加的人並不只有這兩千多位,有些人因為報名費太貴而志在參加不在繳費,也有些人不想等待漫長的開幕,自行提早離開會場前往目的地。

今年最搶眼的車隊,就是遠道而來的「林北愛騎團」,一群人安全帽綁著粉紅色愛心氣球,浩浩蕩蕩進場,吸引全場車友的目光,民眾和採訪攝影記者紛紛把鏡頭轉向他們,尤其是其中幾位帶著自製媽祖鳳冠的車友,更佔了不少新聞版面。
等待開幕儀式的時間,實在無聊得發慌,索性和一旁的車友開始聊起天,他騎著一台看似歷經不少摧殘的小折,有著單車、鐵人運動愛好者的模樣,一問之下才知道原來是位單車達人,據說收藏的單車有百台之多,去年舉辦的各種大型活動,也征戰過不少場次。

抵達新港國小的時間,約是下午兩點,聽說中午就已經有一大批車完成,再次感到自己的欠缺磨練,路上真是遇到不少小腿跟大腿一樣粗的神人,把登山車騎得跟公路車一樣飛快,明明已經是後半段,時速仍保持三十多公里,遇到上坡還站起來抽車加速,踩踏速度簡直像裝上馬達。雖然過程有點辛苦,但同時和那麼多車友一起騎卦香路線,感覺如夢似幻,希望明年的這個時候,服役期間放假還能有體力再去參加。

由於實在沒體力再多背台DSLR出門(真的好想買台G10放上管袋),沒辦法詳實地紀錄整個過程,有興趣可以繼續閱讀「2009萬人崇Bike‧紀錄加冕」、「搜尋2009萬人崇BIKE」。

2009年2月6日

萬用版「PushBa!推薦小貼紙」,讓讀者輕鬆推、賺台幣

「PushBa!推薦小貼紙」,就是自動幫每一篇網誌文章,產生一個「PushBa!快速推薦」的按鈕,讓讀者點了之後,不必再填寫任何資料,就可以加進PushBa!的個人推薦區。讀者可以藉由推薦文章賺台幣,可以得到更實質的好處,而不必只是「友情幫推」。

不久前,發表過一篇Blogger專屬的「PushBa!推薦小貼紙」語法教學,心裡就一直想著,使用其他部落格平台的使用者,該怎麼做才會比較方便呢?!

每個平台都可能有自己特殊的語法,但也不一定能透過語法取得文章的標題和連結,實作上相當麻煩。

但是,至少在這邊可以先提供一個「萬用版」,也就是把當前的網頁,有可能是首頁或某一篇文章,透過JavaScript抓到標題和網址,自動產生PushBa推薦連結。

所以,如果在首頁同時有很多篇文章,就必須先點進某一篇文章,才能夠針對那篇文章推到PushBa,否則在首頁點選這個貼紙,只會把首頁推到PushBa而已。

作法相當簡單,只需要把下方的程式碼,複製到一個允許貼JavaScript語法的區塊。
以痞客邦(Pixnet)來說,就是在「側邊欄位設定」→「版位暫存區」→「新增版位」,在「自訂欄位內容」貼上程式碼,送出儲存後,再把這個新欄位拉到側欄即可。其他部落格,可以參考平台提供的「貼JavaScript語法教學」,若仍不清楚歡迎留言討論。

<script src="http://pushba.howbon.info/PushBaTool.js" type="text/javascript"></script>
<script type="text/javascript">
pushba_post_link(location.href, document.title);
</script>


若想更換按鈕圖片,請參考下方這段程式碼,只要指定圖片網址即可。

<script src="http://pushba.howbon.info/PushBaTool.js" type="text/javascript"></script>
<script type="text/javascript">
PUSHBA_POST_ICON = "在這裡填入包含http://的圖片網址";
pushba_post_link(location.href, document.title);
</script>

用HostTracker監控你的網誌

http://host-tracker.com/

HostTracker是一個免費的網路服務,它可以透過分散在世界各地的主機,一起監控指定的網站是否正常運作。

對部落客來說,網誌可能是向BSP申請,也可能架設在虛擬主機,或是自行維護的伺服器主機。我們需要知道網站是否能夠穩定運作,才不會因為連不上線而將讀者拒絕於門外。

即使可以在電腦上安裝一些小程式,監視網站是否正常運作,但仍可能有其它狀況,例如某些地區ISP的用戶無法連上,或這個監控程式使用的網路本身有問題。

HostTracker的首頁,有個網址輸入區,把網址貼上之後,按下Check,耐心等待一段時間後,就會取得各地監控主機完成的連線狀況回報。

回報訊息的內容,說明如下。
Location: 監控主機的所在地
Result: 結果(OK等)
Page Size: 平均取得的網頁大小
Response Time: 回應時間,愈小表示愈快
KB/sec: 傳輸速度,愈大表示愈快
IP: 伺服器位址
Partner: 由哪個監控夥伴提供的回報

HostTracker還提供免費郵件通知(free email alerts)功能,它會將監控報表用電子郵件傳送到指定的信箱。

對部落客來說,HostTracker很棒的地方還包括「小貼紙」的提供,這個小貼紙可以顯示網誌正常運作時間的百分比,如果是100%,表示網誌大部分時間都是正常運作,可以說是全年無休。但由於監控服務並非即時,也就是如果網誌剛好在某個時間點故障,而這個時間範圍內剛好沒有被監控服務測試連線,那就不會被列入統計。

server monitor

HostTracker目前擁有63個節點(Nodes or Points),分佈在20個國家,共計30個夥伴(Host Parners),這份資料可以在這邊取得。

如果你有足夠的頻寬(靠財力?!或者是不限流的學網),想成為HostTracker的夥伴,提供在地的監控服務,當然也沒問題,可以看這個申請說明。基本的條件是:「有100Mb磁碟空間、1Gb的連線頻寬(10M的光世代要牽100條:D)、Linux伺服器環境、可允許SSH連線登入。」

2009媽祖萬人崇BIKE

年度單車盛會之一,2009「媽祖萬人崇BIKE」在2/21日舉行,而報名期限只到2/13,也就是距這篇發表還有一星期時間。還沒報名的朋友,手腳要快一點,避免人數爆滿提前截止。

今年的活動感覺比較少看到廣告,也許我太久沒去逛mobile01,所以直到前幾天才偶然在鐵飯團的行事曆,發現這個活動日期已經接近,差點又給它錯過。

我已經完成報名「騎福挑戰組130K」,路線從台中大甲騎到嘉義新港,在搭乘接駁遊覽車回大甲。剛好可以驗收最近的練車成果,這場活動結束之後,再過一個月就是「洄瀾極限挑戰300K」。

如果有興趣騎車,但不想拼老命的朋友,還是可以參加「騎福平安組20K」。今年的媽祖崇BIKE將輕鬆騎距離縮短為20K,讓有興趣的民眾也能夠共襄盛舉,試圖再次打破金氏世界紀錄(最多人共同騎單車遊行的紀錄)。

活動網址:http://www.2009mazu-bike.com.tw/

平安組報名費200元,挑戰組則是500元,但主辦單位優待窮苦學生族,只要傳真學生證正反面影本,就可以用200元價格報名挑戰組。報名費用已包含意外險、媽祖保佑紀念T-shirt、礦泉水、運動飲料、觀光手冊、紀念證書、食物、水,其中150元捐贈社福基金會,不但可以運動,還能夠A好康、做善事。總之,這麼棒的花錢自虐活動,大家就一起在週末運動一下吧。

2009年2月5日

高級小折之折疊速度比一比

最近很夯的小折,迷人之處當然就是可以方便地折疊收納,放進行李箱或背袋就可以輕鬆帶著走。除了重量和配備外,一個選購時必須注意的地方,就是折疊的方式是否能夠接受。

知名品牌的小折,有獨家專利設計的折疊方式。折疊設計的難度,在於必須同時考量折疊後的體積及美觀、切割後的車架剛性及強度、折疊花費的時間及步驟,高價小折之所以那麼貴還能賣到缺貨,就是因為許多細節都能讓車友著迷。

因為折疊的速度會因人而異,所以用時間來比較意義並不大,但是透過實際的影片示範,就比較容易看出哪種設計才符合買車的理想,當然還要考慮預算囉。

以下蒐集的影片資料僅供參考,如有補充或修正歡迎留言。

Bike Friday


Brompton


Birdy


DownTube


Dahon


Mezzo


KHS


Ventura


Abio


Strida


A-Bike


Gekko

可以簡單但不能隨便的「線上報名表設計」

最近連續填寫幾個單車活動的「線上報名表」,對主辦單位來說,鼓勵參加者採用線上報名,是節省時間人力花費的一種方式。比起那些只有活動公告,根本沒線上報名管道的活動(只能傳真、現場繳交或E-Mail報名表),這些主辦單位願意多花點費用製作線上報名網站,網站普遍有比較好的美術設計(運用不少圖片、FLASH動畫),讓人有一種「這個活動有比較認真在辦」的感覺。

但很不幸的,實在很少碰到一個報名網站,可以提供「及格」的線上報名表單。

製作一個比較完善的線上報名表,會很困難嘛?其實一點也不會,對主辦單位來說,只是多提出一些網站製作的要求。

把需求告訴網站製作團隊時,除了「外觀」這個比較容易要求的條件外,可以再多提出幾項「流程」的條件要求。

對於單次活動的報名來說,要求先申請帳號並不合理,因此「線上報名」的功能,將是很簡單的程式,有時候連程式碼都不用寫,透過工具就能做出來。

簡單的「線上報名」網站,包含:
(1) 表單 (填寫基本資料、同意聲明條款)
(2) 確認及儲存

這些是讓「線上報名」可以運作的基本條件,因為沒有帳號的關係,「確認」是一個不能省略的步驟,它讓報名資料填完之後,還有一次的機會可以重新檢視、更正錯誤。如果報名者在填完儲存後才發現自己寫錯,變成要透過E-Mail、電話、傳真來更正,那就失去線上報名的方便性,也增加主辦單位的麻煩。即使提供「確認」,仍難以確保資料無誤,但至少可以降低到合理的錯誤發生率。

列印或儲存報名結果

很多報名網站都忽略這一點,雖然有提供確認的網頁,但儲存後就什麼資訊都消失了,甚至只有一個彈出視窗,告訴報名者匯款資料等,使用上相當不方便。

「報名結果」是一個使用者會期待的資訊,就如同我們去現場報名時,如果報名資料繳完,而承辦人員卻沒有給我們任何東西,兩手空空的當下會有些錯愕感。

報名結果,至少要包含:
(1) 所填寫的報名資料
(2) 用網頁的「一般文字」顯示匯款、連絡方式、應繳交金額
(3) 用醒目的文字說明「報名成功、資料已經正確儲存」

如果再用心一點的網站,還會提供:
(1) 將報名結果以電子郵件傳送到報名者信箱,自動或手動啟用此功能
(2) 「列印」此報名結果,提供列印按鈕
(3) 提供將報名結果另存到桌面保存的功能,最好能有PDF格式

用網頁的一般文字,顯示匯款、連絡方式,主要是方便報名者,可以在報名後,方便地列印或複製這些資訊。網頁的文字過小,我通常會把匯款的銀行代碼及帳戶,連同費用金額,複製到WORD文件貼上,再改用大字體列印出來,以防止ATM操作時沒看清楚的可能性。若這些資訊不能方便的複製貼上,那就很容易造成看著螢幕抄寫、打字時,增加發生錯誤的機會。

有些報名結果居然以JavaScript彈出的「警告視窗」顯示匯款方式等,按下確定或OK按鈕後,就什麼都沒了。幸好我都會先用Print Screen把畫面擷取下來,否則真不知道事後要找回這些東西會有多麻煩。

報名處理進度查詢

雖然簡單的線上報名沒有帳號機制,所以沒辦法在日後登入查詢,但至少可以透過輸入E-Mail來查詢處理進度吧?

輸入報名者或代表人的E-Mail,就在畫面上顯示報名處理進度,至少也要有「等待匯款確認」、「已確認匯款」等狀態,如果覺得這些狀態應該保密,那也可以將狀態用電子郵件傳送。

雖然主辦單位有義務主動告知報名者,是否已經確認匯款等事宜,但電子郵件可能寄丟、也可能被誤判為垃圾郵件,為了避免讓報名者感到焦慮,最好能夠提供簡單的查詢功能。

2009年2月3日

2009年,「極限挑戰400K」自行車賽事預告

單車一次騎完400公里,會覺得還不過癮的人應該很少了吧?!

400公里有多遠呢?台灣環島一圈是1000公里上下,所以400公里大約是繞了1/3個台灣島。若每天騎400公里,只要不到3天就能完成環島,而一般人的環島形成通常都是10天左右。

雖然聽起來鈣恐怖,但我想應該很多人躍躍欲試吧!

這種極限挑戰的活動,當然又是台北市自由車委員會舉辦的NeverStop系列,在首頁的活動行事曆已經看得到預定日期。好樣的!就在酷熱的暑假,7/25~7/26兩天,在夏天的大太陽下騎車,除了考驗體力、毅力,還關係到防曬油的係數等級。

有沒有限定資格呢?
答案是有的。
主辦單位可能考量這種路程實在太超乎常人的能力範圍,所以限制必須先通過3/28~3/29的「洄瀾極限挑戰300K」,在該場次限定時間內完成300K,才能夠再繼續報名參加這場400K的活動。

目前還沒有路線或其他更進一步的訊息,請繼續期待囉。

2009年2月2日

虛擬實境的單車訓練軟體

第一次看到「單車訓練台」時,我就一直有個想法,如果能把這東西和電腦連接,那颳風下雨的日子,也能夠在室內,看著投影的大螢幕騎腳踏車。在訓練台上踩踏,虛擬實境的畫面就會跟著往前進,甚至跟遊戲結合,用騎車的方式來玩運動競速遊戲。只可惜,我不是念電機電子,要自己動手DIY做出這種玩意兒,大概花上十年也沒辦法完成吧!
最近在網拍閒逛時發現,ELITE已經有這種產品,虛擬訓練台與軟體一套的售價要價三萬多元台幣。ELITE提供許多競賽場地的虛擬實境DVD,還可以模擬對手跟你比賽。
這種結合電腦軟體的訓練台,就是透過軟體,依照各路段的不同坡度,控制訓練台產生的阻力,讓你在畫面看到上坡時,真的會有爬坡費力的感覺。一般的訓練台則是必須手動調整阻力,在樂趣上自然會有些差別。
有興趣的人可以上Y拍搜尋「虛擬 訓練台」,在這篇網誌文章有一些DVD的資料,甚至連「網路連線對戰」的功能都已經有消息了。另外在01討論也看到另一家TACX,同樣提供類似的虛擬訓練台。
台灣有很多風景一級棒、坡度彎道都充滿挑戰樂趣的路線,只可惜往來車輛實在太多,烏煙瘴氣就算了,還必須與大卡車爭道,說不定也適合做成虛擬DVD,讓不想冒生命危險的人可以在家過過癮。

阿桂示範超快的單車裝袋

經常在火車站看到車友滿頭大汗地拆單車、裝袋,讓我一直不敢真的把已經買很久的攜車袋拿出來用,所以到遠地騎車都是開著車4+2到目的地,沒辦法用搭火車這個省錢又環保的交通方式。
在網站搜尋阿桂時,發現Youtube有段影片,示範如何快速把單車裝袋,其速度之快,真的就在影片時間的2分56秒內裝完,看了真是萬分佩服阿!如果我也能這麼熟練,週休二日要到花東縱騎就不是太大問題了。
這段影片轉載於下,有空就在家也練習看看吧。
lyhcode by lyhcode
歡迎轉載,請務必註明出處!