Jasonmel Online

Jasonmel Blog - Page 66

Garmin nuMaps

2009/11/03 (Tue.) ~ 06 (Fri.)

經過一年多的煎熬,我的職場處女作 Garmin nüMaps,以及最棒的團隊所打造出最棒的台灣圖資,終於在週二的記者會宣告之下正式對外上線了!

去年八月進公司開始,從 study 地圖座標投影及蒐集線上地圖相關技術開始,試著將公司資料庫內的數位化圖資繪成一張張圖檔,再慢慢刻出自己的 JavaScript API,一套簡單的網頁地圖瀏覽系統就此誕生,至此一共花了三個月。這一階段遇到的主要問題,就是 tile 檔案數目過多,以至於在部分 file system 會發生超過 i-node 上限的問題,而在部分 file system 則會有同一目錄內檔案數目過多造成存取速度銳減的情形,也因此花了一些功夫了解各 file system 的特性,之後在 file system 的選擇以及檔案的結構配置上也就比較有概念。

地圖呈現之歷史畫面地圖呈現之歷史畫面

2008 年度報告時的模樣2008 年度報告時的模樣

秉持著「先求有再求好」的精神,有了基礎建設後,接下來就開始進行美化的工作。除了 JavaScript API 演算法及功能上的提升 (包含處理非常煩人的 cross-browser issue),也研讀了幾篇 labeling algorithm 相關的學術論文,使畫面的呈現盡可能地絢麗又不失舒適,並匯入更多種類的資料讓畫面內容盡可能豐富詳盡。至此,回報系統的雛形大致完成,又三個月過去了。

2009 年 4 月報告時的模樣2009 年 4 月報告時的模樣

為了讓使用者能快速找到想尋找的點位,「搜尋」的功能刻不容緩。在稍微深入了解搜尋引擎的運作後才發現,中文搜尋首先面對的三大難題就是「斷詞」、「新詞」及「簡稱」等問題。「斷詞」部分舉個眾所皆知的例子來說,「下雨天留客天天留我不留」就有好幾種斷法,這將造成建立 index 上的模稜兩可。由於中文是活的語言,「新詞」的出現在所難免。常見的新詞大致可歸類為特殊領域新詞 (「非同步傳輸模式」)、時勢性新詞 (「一國兩制」)、衍生性新詞 (「數位化」)、合併性新詞 (「砍掉重練」)、火星新詞 (「殺很大殺不用錢」)、名字新詞 (「瑤瑤」) 等,除非有個字典不斷自動擴充各種新詞,不然一旦遇到了系統也無法解讀。「簡稱」的問題就更有趣了,中文的簡稱向來沒有一個制式化的標準,同樣是兩個詞的合併,有兩個頭合併的簡稱 (「節約能源」簡稱「節能」),有兩個尾合併的簡稱 (「香港總督」簡稱「港督」),有頭和尾的簡稱 (「外交部長」簡稱「外長」),也有頭頭尾的簡稱 (「安全理事會」簡稱「安理會」);你以為這樣就結束了嗎?同樣一個詞在台灣和中國大陸有著不同的簡稱 (「清華大學」在台灣叫「清大」而在中國大陸叫「清華」),還有那種順序顛倒的簡稱 (「第一核能發電廠」簡稱「核一廠」),還有簡稱再簡稱的 case (「冬季奧林匹克運動會」簡稱「冬季奧運會」再簡稱「冬季奧運」再簡稱「冬奧會」,更不用說用數字來簡稱的詞 (「通郵、通商、通航」簡稱「三通」)。也就是說,一旦使用者輸入這類「斷詞」政治不正確、系統沒見過的「新詞」或是毫無規則可言的「簡稱」字眼,搜尋結果的正確性就可想而知了。而現有的解法大致可分為兩大類:character-based 和 word-based。Character-based 的精神在於不管三七二十一,來幾個字切幾刀,亂槍打鳥只要子彈 (儲存空間) 夠多總是能打中的。而 word-based 則大致可以使用自動統計學習、手動建立字典、以及語意分析等方式來較為精確的切出當中的關鍵字,然而學習來源以及固有字彙的多寡仍然深深影響切割後的結果。因為相關論文表示前者的正確率並不亞於後者,再加上實作起來較為直覺簡單 (其實主因是本人智商不高),所以最後採用 character-based 的作法,加入一些客製化的變形,一個能夠同時搜尋地址、經緯度、POI 點位的地理資訊搜尋引擎就此誕生。突然發現好像打太多了...。總之,和 JavaScript API, labeling algorithm 有花俏的畫面和功能相較起來,同樣花了這麼多時間,結果呈現在使用者面前卻只有兩個平淡無奇的長方形:一個 text box 和一個 submit button,想想其實還蠻辛酸的。

一個搜尋欄位和一個按鈕的背後,隱藏著無數不為人之的奮鬥過程一個搜尋欄位和一個按鈕的背後,隱藏著無數不為人之的奮鬥過程

為了滿足搜尋所需要的龐大 computation resource,同時解決未來上線時將會遭遇到的 bandwidth (以及 response time), storage, stability and scalability, security 以及 cost 等相互牽制的問題,為這套系統找個合適的居所也得花一番心思才行。根據前人的經驗,通通自己來要不就是砸大錢建置硬體設備及維護管理,要不就是等著被蜂湧而至的使用者打爆,也因此 outsourcing 似乎是較為可行的方式。經過 survey 發現多種方案,包含 shared hosting, cloud hosting, virtual private server (VPS), dedicated hosting, content delivery networks (CDN), Amazon EC2/S3, Google App Engine 等,就 C/P 值來說,Google 似乎是俗 (甚至免費) 又大碗的不二選擇,就它了!而為了 Python 支援度較高的 Google App Engine,也在惡補之下將 Python 這個 fucking damn fantastic 的語言學了起來,並應用在許多邪惡的事上 (糟糕!不小心說溜了嘴...),真是一舉數得啊!至此,系統悄悄在公司的防火牆外露臉。

歷經了小組測試、部門測試,以至於公司發動測試小組進行多方面測試,到後來動員全公司的測試,收到許多熱心的回饋和指教,在效能及功能上也做了大幅度的調整和提昇。終於,在 mobile01 第一篇新地圖討論串的帶動下,系統正式在所有使用者面前曝光。

目前 Garmin nuMaps 線上勘誤系統 的模樣目前 Garmin nuMaps 線上勘誤系統的模樣

系統上線一個禮拜來,除了 Google 例行性維護好死不死剛好就在發佈後的隔天,造成系統無法使用一個多小時外,其餘時間在 Google App Engine 及 Akamai 兩朵大雲的支撐下,運作上都還正常。

一個禮拜來,也得到許多來自四面八方的正反面迴響,箇中的酸甜苦辣,實在難以用言語表達,大概只有自己最清楚。無論如何,這算是自己職場上一個好的開始。期許自己在未來的路上,能夠繼續保持這一年來邊作、邊學、邊玩的心態,在成長的同時,除了盡可能保有正常的生活步調外,也能對社會有所貢獻。

P.S. 倘若各位看倌發現任何地圖內容上的問題,方便的話也煩請協助撥冗到 Garmin nuMaps 線上勘誤系統上進行回報喔 (需先經過簡單的程序建立 myGarmin 帳號並登入)!Garmin GIS Taiwan Map Team 感謝您!

毛毛蟲皮膚炎

2009/10/20 (Tue.)

繼研究所有記憶以來的第一次皮膚過敏,又一次很類似癢到整夜睡不著的皮膚發疹過敏。有了上次的經驗,這次比較知道要忍著不去抓它,範圍才不會繼續擴大。早上請假去看鄉民推薦的國泰醫院許哲豪醫師,醫師用放大鏡看了一下,再依據只有手部、頸部等暴露在外的部位有起疹,並且前一天有到郊外的線索,加上目前正值季節變換時期,診斷為「毛毛蟲皮膚炎」。一共開了三支拭皮爽(Desoximetasone)軟膏,三天份宜胃錠(Iwell)、康速龍錠(Prednisolone),五天份布克芬錠(Buclizine)、驅異樂膜衣錠(Levocetirizine)。看來以後要注意避開跟毛毛蟲有關的東西了。

Google 會怎麼做(Whate Would Google Do)

2009/10/01 (Thu.)

因緣際會下,某 cartographer 大姊頭突然拿了一本《Google 會怎麼做(Whate Would Google Do)》來借我,實在有點莫名其妙(或許是因為我用程式做了一些邪惡的事情,讓他省下很多麻煩的工作吧...XD)。不過既然借了,就看一下吧!光看書名,原本以為這又是一本坊間充斥著的「第一次 Google 就上手」系列叢書,沒想到仔細一翻才發現這本不一樣。全書以 Google 為主要範例,輔以諸多正反面企業作為佐證,說明在這個充滿連結的網路時代企業所需具備的新思維。在這個鄉民導向的世代中,開放與溝通儼然成為大多數產業生存的利基。一旦坦誠開放,讓鄉民們有歸屬感,鄉民將樂於參與討論、協助構思、甚至動手參與除錯與開發。也就是說,這會是一個社群共有、共享、共治的民主空間。企業提供連結鄉民的平台,讓鄉民融入這塊屬於大家的地盤,之後的內容充實與維護、口耳相傳的行銷、以及功能構思與開發,則是身處其中的鄉民們共同的切身之痛。企業不再需要 PM, QA, marketing,因為每個鄉民都扮演著 PM, QA, marketing 的角色,更甚者會有高手參與 RD 的開發。(個人題外話,拜 Google 之賜,MIS 的角色也能以極廉價到近乎免費的 Google App Engine 所取代。)要得到以上互惠的效果,關鍵即在於透明、信任之下的開放。在這樣的前提下,鄉民主動或被動所貢獻出來的知識,平台群聚鄉民的吸引力,以及鄉民對平台的依賴,將造就出平台的價值。就連三個臭皮匠都能勝過一個諸葛亮,更何況上千萬鄉民,豈不勝過閉門造車的封閉企業?當然,不只企業能從開放當中獲利,作者在本書後半段也提出各行各業都將由於開放的思維而彼此獲利。媒體業、廣告業、零售業、公用事業、製造業、服務業、金融投資業、社會公義與公共機構,一旦拆毀封閉帶來的資訊不對稱,被哄抬的價格將趨於合理,資訊的流通將汰除弱伍不適用的資訊,而保留下經過千錘百鍊的較為正確的資訊,甚至資訊與資訊的碰撞,更能激發出無限爆炸性的資訊成長。在這樣架構下獲利的,不是別人,正是廣大的鄉民,以及思維開放的企業。至於封閉企業,除非有 Apple 這樣引領潮流的本能,不然是會逐漸受到唾棄與淡忘的。畢竟,人類是群居的動物,單打獨鬥的時代已經過去,開放的平等互助思維才是彼此賴以為生的最佳利器。

NeverStop 永不放棄-洄瀾極限挑戰 200K

2009/09/26 (Sat.)

活動名稱:NeverStop 永不放棄-洄瀾極限挑戰 200K
活動路線:起點花蓮大漢技術學院→縣193線→七星潭(縣193)→南濱(縣193)→花蓮大橋(16.7k)→右轉縣193→月眉27.8k(縣193)→光復 60k(縣193)→縱谷風管處78.2k(縣193)→瑞穗81.9k(縣193)→ 折返點:玉里大橋(縣193右轉台9線105.9k) →台9線縱谷公路→溪口→台11丙→縣193→終點大漢技術學院
活動時間:9月26日(六)0500時至0630時,限定13.5小時(時速 14.8 km/hr)
參賽選手:Garmin NeverStop 研習社(Shimmer, Nelson, Kaiwen 和我)、Programming the Bike(starryalley, single, mobo, rior)、以及眾多瘋子等共 6006 人

凌晨四點半,漆黑的花蓮市的街道,除了早起的送報員外,還有眾多閃爍著的 LED 燈穿梭其間,像飛蛾撲火般地湧向北方的大漢技術學院。

凌晨五點,大漢操場匯集了焦躁的人群,以及價值數千萬台幣的自行車及裝備,這場景讓人分不出究竟是選舉造勢晚會、跨年晚會、亦或是快閃族臨時起義的惡搞活動。五點半,距離開始時間已經過了半小時,隊伍絲毫沒有前進的趨勢,只好和 Kaiwen 移動至插隊人流中,才得以緩慢前進(主辦單位也很識相的播放著 sorry sorry,害我整天至少有一半以上的時間腦中不斷重播這首歌)。終於,來到感應門,破繭而出,發射了!太平洋的日出帶給大家無限希望。

不陌生的縣道 193,依然如此愜意,如此美麗。

62 km 處,不知名的村落廣場,有 Mountain 和 Duncan 的熱情補給,Nelson 和 Kaiwen 也在差不多時間會合。

78 km 的花東縱谷風景區管理處,是大會的第一個補給點。

綠油油軟綿綿的稻床,真想躺上去啊!

經過縣道 193 的終點,來到玉里大橋,也代表里程已過一半。香噴噴的補給排骨便當就在不遠的前方。

在 106 km 的某會館午餐休息片刻,繼續上路。首先映入眼簾的,就是通往北回歸線地標的長坡考驗。

當然,南深路騎多了這種程度的小山也就沒那麼嚇人了(只是在一百多公里再來個大太陽的上坡的確有點變態就是了...)。

下山後,就是永無止境的平路。太陽依舊強烈,休息喝水頻率也持續增加,以避免中暑。

最後的最後,就是體力與耐力的大考驗。回到花蓮市,天色漸暗,卻怎麼騎也騎不到終點。每過一個彎,都期待著大漢門口出現在眼前,可總是事與願違,車尾燈群撲向大漢的景象再次出現。終於,18:13:59.573 通過感應門,以 12:37:00.563 的成績完成 208 km 挑戰。和早了好幾個小時就抵達的 starryalley, single 寒喧一番,就隨 Duncan, Nelson, Kaiwen 先行打到回府。

後記:和 300K 的溼冷及疲憊相比,200K 顯得容易許多。當然,騎平路的時候還是會羨慕公路車的。另外,愈來愈多車友喜歡把沿路喝完的飲料隨手丟棄在路上,看了實在很 X 你 X 的祖宗三十六代。就算大會有良心會派人清掃,這樣亂丟也會影響後面車友的安全和感受,或許這也是自行車運動普及化所帶來的後遺症吧!花東,還能再乾淨多久?