close

IMG_3940.PNG

近來 COVID-19(又稱武漢肺炎)疫情烽煙四起,最早於 2019 年末在中國湖北省武漢市「華南海鮮市場」發跡,至今(2/23)已經蔓延數十個國家,根據 CHO... 呃..不是,是 WHO 官方統計,近八萬人染病,約兩千四百多人喪生,且數字仍不斷往上飆升,似乎還沒有減緩的跡象。而台灣與對岸大陸的民間交流頻繁,又適逢總統大選、農曆年等大量人口流動,終究也無可避免的遭到波及,截至今日(2/23)已有 28 例確診,1 人死亡。

截圖 2020-02-23 下午11.07.54.png

還好台灣的疫情數字目前看起來沒有當初預期的嚴重,與日、韓、新加坡、義大利等國已發生大規模社群感染現象相比,台灣的疫情仍是相對輕微,得歸功於台灣政府能及早因應,與痛切汲取 17 年前 SARS 的慘痛教訓,是至今能夠有效遏制武漢肺炎疫情快速蔓延的主要原因。然而許多專家也預言,台灣進入大規模社區感染只是時間早晚的事,即便當前防疫有成,也千萬不可掉以輕心。

其實早在一月選舉前,政府已派員至武漢參加病毒研討,在疫情尚未明朗的氛圍中,預先判斷將來演變為大規模人傳人的可能性極大(2019.12.31),更搶在比 CHO...呃..不是,是 WHO 承認疫情擴散之前祭出手段,除了針對從疫區入境的航運人口實施隔離管制,也更早宣布將口罩納入管制醫療用品。嚴禁口罩出口、徵收民間口罩工廠的出貨,全力加開口罩產線,超商限量販售等,一連串管制口罩的大動作,初期一度造成民眾恐慌,導致到處買口罩隊伍大排長龍、多數人買不到口罩、不肖商人囤貨伺機漲價、人人瘋搶口罩等亂象,史稱「口罩之亂」。直到政府祭出鐵腕,宣佈實施獨步全球的「口罩實名購買制」措施,「口罩之亂」才逐漸平息。

在口罩產量不足與疫情未大爆發階段時,實名制措施至少撐住人人有最低限度的防疫動能,避免因少數人囤積導致多數人買不到而發生更大的防疫缺口。我個人完全認同這項措施,相信已在某些未知的傳染可能途徑中,有效拖慢疫情在台灣蔓延的速度,爭取到疫情可能進入社區感染前的準備時間。

20200203004870.jpg

所謂「獨步全球」的口罩實名制,基礎建立在台灣施行已久的健保制度上。根據媒體的報導,在 2 月 4 日中央政府拍板定案實施口罩實名購買制度時,另一組由行政院政務委員會唐鳳領軍,整合官民組成的資訊團隊,就已著手將全台民眾的健保資料進行大規模設計整合,在短短兩天內就完成全台灣的動態口罩庫存量的查詢接口。接著更在短短一天之內,有多個免費查詢服務上線,2 月 6 日起民眾可以透過適合自己的方式,查詢全台灣約五~六千家健保藥局的即時口罩庫存量。台灣在這方面的軟實力,不容小覷!

在口罩實名制實施後嘗試幾個口罩地圖服務,用起來總覺得不太順手。發現問題出在自己邊騎車邊找藥房的使用方式,需要「一目瞭然」的呈現方式,藥房名稱跟庫存量若能直接標示在地圖上,就可大幅減少邊騎車邊操作的動作。突然腦袋被敲了一下,雖然已經多年沒觸碰 iOS App 開發,心想自己應該還行吧?所以就利用一點時間,順手做一支 App,差不多兩天就弄好了,至今使用了一段時間,也免排隊成功買到口罩。

由於我已經停繳蘋果的開發者保護費,已不具有 App Store 上架撈錢的資格,所以這兩天把原始碼整理了一下,放出來放在 Github(這裏),想玩玩的可以試試看。其實開發過程中還是有點小波浪,以下跟大家聊聊一些個人心得。

undefined

程式的部分不到半天就寫好了,時間花最多的部分是在整理資料上。原來健保局給的原始資料只有地址,得自行加一道工法,把地址轉換成經緯度座標,後續才能把藥局顯示在地圖上,萬萬沒想到最大的問題就出在這裡。

地址轉換成經緯度座標的問題,對 iOS 開發開發者來說,看似「一片餅乾」(A piece of cake),實際上卻是處處陷阱,一不小心就踩坑。

截圖 2020-02-24 上午12.14.51.png

上圖是從台灣政府提供的即時庫存查詢接口得到的資料,由於資料隨時都在變動,所以查詢結果也會變動,藥局名單也是變動的,約在五千多~六千多之間浮動。藥局營業時間可以用另一份健保局提供的藥局名單整合進來,總數來到七千多筆。

接著解決座標的問題,蘋果的 SDK 有提供地址轉譯的功能,不過它是有限制的。一次送出十多筆時,它會拒絕服務,所以得另外寫個程序,讓它自動一筆一筆慢慢查,至於「要多慢」,不斷嘗試的結果,間格得慢到 1.5 秒查一筆。所以這七千多筆地址轉座標,總共花了近三個小時才完成。

如果你以為解決了地址轉譯的問題,從此王子與公主過著性福快樂的日子,那就太天真了。

回到上圖的原始資料,發現地址有「臺北」跟「台北」的差別,其實台中、台南、台東都有。另外,門號數字也有全型和半型混在一起的情況,以及少數藥房為多地址合併,導致地址格式不一的亂象。

萬萬沒想到蘋果的轉址服務,遇到這種地址亂象時,會回應離譜的錯誤結果,例如把座標定在幾千公里遠、或是縣市標錯、一個座標有多間藥房等等。所以我從蘋果的地址轉譯服務,得到一堆以為正確、其實是錯誤百出的座標,偏偏這類錯誤又不容易被揪錯,調查這些因地址問題產生的座標錯誤實在很吃力,著實吃了不少苦頭。

既然覺得蘋果的轉址服務很爛,就改用 Google 的轉址服務吧!查了一下,Google 的轉址服務是要錢的,每一千次約 5 元美金。如果一口氣把七千多筆查完,要 30 多美金,相當於台幣一千多元,這還只是個人使用而已。所以必須針對錯誤的資料才提交 Google 處理,否則荷包一定會大大失血。

於是又花了不少時間,揪出約四百多筆可疑的資料,改用 Google 轉址查詢。查了一下帳單是 73 元,好險控制在免費額度(Free Tier)內。最終得到了一份大致正確的地址轉座標資料,所以 Github 上的藥房名單包含經緯度座標資料庫(SQLite 格式),可是蘊含了小弟我個人心力,一步一腳印整理出來的。

截圖 2020-02-28 下午12.58.53.png

若沒整理好資料就發佈出去,開發者很快就傾家蕩產。看看這則新聞,在口罩實名制實施以前的超商販售,兩萬美金的額度不到一天就被榨乾,開發者免費提供服務的佛心 + 使用 Google 服務不慎 = 瞬間破產。新聞這個案例,估計一天內有超過百萬次的查詢。

所以了,對於那些努力整合健保資料提供查詢接口的人,以及提供口罩地圖查詢服務給鄉民免費使用的開發者們,我們普羅百姓都該心存感謝。在大家的努力之下,雖然口罩之亂已暫時平息,然而疫情依然嚴峻,防疫工作仍不可大意輕忽,少點政治對立與口水,多點關懷與同理心,誠心希望全世界消滅武漢肺炎疫情的這天能儘早來臨。

arrow
arrow

    benjenq 發表在 痞客邦 留言(0) 人氣()