概述
這篇報告是對一個結對程式設計項目的總結。我(林萌)和李亞韜同學共同完成了這個項目。
項目的目標是在使用者訪問Academic Map的時候通過使用者的IP來獲得使用者的地理位置資訊,以重新置放地圖,將使用者所在的地點設為當前顯示的中心。這個功能在許多網路地圖上都有,比如Bing Map,Google Map等等。經過長時間的調研我們最終找到了兩種解決辦法。
Method 1
使用W3C Geolocation API, 這個API是由World Wide Web Consortium (W3C)提供的一個標準介面,用於獲得使用者的地理位置資訊(geographical location information)。這個API被廣泛的接受,Firefox從version 3.5版開始支援, Google Chrome, Opera 10.6, Internet Explorer 9.0, and Safari 5也都支援這個API。而且他的使用相對簡單,只需要嵌入一段JavaScript就行了。
WBS Construction
Method 2
使用免費的IP-Location資料庫。並不是所有的瀏覽器都支援W3C GeoLocation API, 所以我們希望再增加一套備用方案,當Method 1失敗的時候自動啟用。我們從MaxMind網站上找到了這麼一個免費的IP-Location資料庫,實驗結果表面資料庫精度也還可以,但與W3C的比起來還是有一定差距的。
WBS Construction
Method2 所需要的組件與1基本相同,我們用一個自己寫的WCF Service來代替W3C Geolocation API,Silverlight的部分基本可以複用。
CostMethod 1
這個方法最大的困難在於整合JavaScript 和 Silverlight, Cost列表如下:
| |
Estimate |
Actual |
| JavaScript |
0.5 hour of Search |
Just wiki page is OK It took 10 minutes to rewrite something similar to the wiki example. |
| Silverlight |
0.5 hour to understand how to work with JS 1 hour for the Buttons and Map |
1 hour about using JS, mysterious bugs 1 hour about Buttons and Map, even a Storyboard showing a fading message when failure. |
Method 2
這個方法的困難在於快速尋找IP-Location表格,Cost列表如下:
| |
Estimate |
Actual |
| IP GeoLocation Service |
1 hour to learn how to use service 1 hour to prepare database 1 hour to implement a fast algorithm for database lookup |
Fast, WCF service is easy to learn Half a hour for a binary search in database |
| Silverlight |
0.5 hour to re-use buttons and map controller of Method 1 0.5 hour Failure handler and access to server |
nearly all reuse,fast |
總的來看,最大的時間開銷還是在調研上面,我們花了接近兩天的時間來找一個合法的,穩定的,快速的解決方案。
結果
從以下幾個方面來分析結果:
1.穩定性
程式運行穩定,明確的處理了異常情況。
2.準確性
W3C Geolocation API的準確性無需質疑。免費的IP-Location資料庫準確性難以估計,官方的claim是有97%的準確性。
3.可維護性
對於W3C的介面,代碼一旦完成就不需要維護了,資料有遠端服務提供。
免費的IP-Location資料庫是靜態,需要更新。
4.效率
W3C標準介面飛快無比,一旦失效將啟動待用資料庫方案。我們使用的Binary Search可以保證時間和空間消耗的平衡。
運行(中間五角星的就是使用者的座標,公司的IP出口在Redmond附近)
工作
我對結對程式設計的看法:
有利有弊。兩個人同時工作提高了我們克服困難的勇氣。開始的時候苦於找不到合適的IP服務,非常糾結。但後來喝喝茶,扯扯淡突然一下子也就解決了。技術上的困難花點時間都可以解決。不好的地方在於兩個人都要擠出時間來,而且中間最好不要插入個人的工作。有個地方亞濤自己加入了代碼,我當時不在,結果後來我Merge代碼的時候出了些問題,多花了不少時間。
About my partner
工作上的好幫手,和我一起工作到深夜一兩點鐘,工作刻苦。沒什麼需要改進的了啊少年。
Thanks,
By 林萌