首頁

  • 揭開土耳其浴的神秘面紗

    揭開土耳其浴的神秘面紗

    在我年紀尚輕、對各類事物還沒有那麼了解時,好似任何國家名稱後面加個「浴」字就可以讓人充滿遐想;過了八年、十年後,總算盼到自己可以訪店的年紀,這大概是年幼時最期待的事情之一。

    這次我拜訪的是伊斯坦堡獨立大街附近的澡堂,由鄂圖曼土耳其的第七任君王於 1454 年建造,它比我阿公再老上四百多歲。

    澡堂門口

    土耳其浴由羅馬澡堂變化而來,在突厥人來到這塊土地後,便將既有的澡堂設計得更貼近自己的宗教習慣。他們的公共澡堂大致上跟三溫暖差不多,拿澡盆沖個幾次,就可以去蒸氣室待著,待夠了就出來沖水或是去躺在加熱石板上烤人肉。

    其中我最期待的是別人幫我洗澡的部分,如果別人願意幫我們洗香香,誰還想要自己洗,對吧?安寧病房的洗澡機一直是我心目中的夢幻逸品,輕輕一按,就可以拿到天堂的三十分鐘入場券。我非家財萬貫,自然是無法負擔洗澡機,但出國請人幫我洗香香還算在能力範圍之內。

    價目表,本次體驗 Massage package with head massage

    自行沖完澡後,經理請我進入澡堂旁的小房間,房內並不太亮,幾顆燈泡將室內暈成一片昏黃,裡頭放了兩張床,此時另一位客人正在洗泡泡浴,那位幫忙洗香香的服務者輪廓很深,應是來自中東地區。

    過沒多久,我的洗澡師進入房內,他是澡堂經理特別為我安排的專業人員,經驗豐富,第一次非常適合由他帶領入門。

    他先是脫掉上衣,然後看了我一眼,便要求將我的內褲脫掉。出自於對專業的尊重,我當然是唯命是從,深怕一不小心就妨礙了神技的施展。

    我對這位洗澡師的第一印象是成熟穩重,175 公分、90 公斤,其中啤酒肚約佔了 20 公斤,頭髮略微稀疏,此時他身上只有一條我國中最常穿的夜市格紋四角褲,看起來像是小時候住隔壁喜歡打赤膊的阿伯,只是種族換成了土耳其人。

    一開始會用菜瓜布在身體上摩擦,聽說技術純熟的洗澡師,半小時就可以在客人身上刷出十公升的黑色污水。我原本有點擔心這個步驟會很痛,但洗澡師非常溫柔,讓我可以安心將全部交給對方,這彷彿是在母親的子宮內享受全身去角質一般。

    充分刷洗後,洗澡師離開了小房間,回來時我聽到了水桶撞擊聲,接著我感受到比羽毛還輕柔的觸感在身上流淌,睜開眼我看到全身已經佈滿了泡沫。這是我從未有過的體驗,泡泡浴舒服得幾乎令我無法睜開眼睛。洗澡師的雙手非常靈活,時而像脫兔在身上打滾著,時而像是飛燕掠過皮膚表面。

    洗澡師洗到身體兩側時,會用雙手托住我的手臂,而他的肚子很大,此時我的手會剛好抵在他的肚皮上,偏偏大叔肚臍附近體毛又非常旺盛,我覺得我的手好像深陷在鋼絲球寶寶的巢穴。

    鋼絲球

    每一次觸碰,我整隻手臂會不自覺僵硬並遠離大叔,然後他又會把我的手臂肌肉鬆開,於是我的手又回到大叔的肚皮上,幾次下來,我的童年幻想在鋼絲的觸感下逐漸消逝,臉上的液體已經不知道是洗澡水還是淚水,非常委屈。

    不知道過了多久,大叔拿了條浴巾把我包起來,並請我到二樓躺椅等待按摩技師。五分鐘後,一名中東面孔的年輕男子領我進入三樓的小房間,裡頭就開著一盞小夜燈,當然,床也是有兩張,另一名客人正在右側床上油壓按摩。

    這名中東小哥要先幫我做頭皮按摩,當他將瓶中的液體倒到我頭上,我只感覺到一股冰寒襲來,像是有人在我頭上倒了十罐家庭號綠油精。後來他越倒越多,我眼睛也被薰得睜不開,當下只覺得雙眼竭盡所能地漫出淚水,與此同時,這位小哥開始了頭皮按摩。

    撇開綠油精不談,小哥的按摩技巧其實是不錯的,但就不知道為啥按著按著,他突然開始用嘴吹我頭皮,頭已經很冷了,每吹一下我身體就會跟著一縮;我轉頭跟他說「No」想要略過這個步驟,他嘴裡講著我聽不懂的語言,然後笑著對我比了一個大拇指,想說他已經理解我的需求,結果幹他媽的越吹越起勁,吹完我還被他淋冰水,真的冷到靠北,我強烈懷疑房間內有攝影機,這在拍攝整人節目對吧?

    最後就是油壓按摩了,這裡按法比較不會有單點重壓的招式,都是大面積按壓,偶爾會把我折成奇怪的姿勢,像在施展什麼關節技,看來是要按我比較深層的肌肉。過程中我想請小哥調整力道或位置,但總是只得到小哥幾句未知語言的嚷嚷,然後笑著再比一個大拇指。仔細想想,我所有接受到的有效溝通只有大拇指,但沒有一個需求是成功解決的。

    一定是大拇指啦!

    小時候總是想要趕快長大,迫不及待地想要去體驗一切;但真的長大後,突然發現一切不若當初所想的那般美好。經過這次土耳其浴的嘗試,我覺得童年的幻想破滅,也彷彿永遠失去了自己的某一部分,或許這就是長大的感覺吧?

  • 如何處理出國的網路? eSIM 是個好選擇

    如何處理出國的網路? eSIM 是個好選擇

    前言

    我的新工作準備要到職了,團隊下週在土耳其剛好有個聚會,我就順理成章一起參加,疫情後這還是第一次跨出國門。對我而言,出國除了住宿、交通及換匯,我覺得保持網路暢通也是非常重要的事情;過去我總習慣在當地買 SIM 卡,但現在有個更方便的選擇:eSIM。

    什麼是 eSIM?

    設備可以無需配有 SIM 卡卡槽,用戶不用插入實體 SIM卡 就能開通行動網路運營商提供的電信服務,當更換行動網路運營商時,運營商根據用戶的更換請求,通過網絡推送SIM配置文件至用戶設備。

    維基百科

    簡單來說就是虛擬 SIM 卡,不需要插入實體 SIM 卡,只要透過手機設定就可以安裝新的 SIM 卡。以往下飛機總是趕著要把當地的 SIM 卡插入手機,這件事情可能會在 eSIM 流行後逐漸式微,對我來說這件事情變得更簡單了。

    Esimdb

    Esimdb 是一個比較當地 eSIM 方案的服務,在介面中會列出各個方案的頻寬、天數、價格等資訊,消費者在意的內容幾乎都有列在上面。本次土耳其的電信網路就是透過 Esimdb 比較而來,我覺得相當方便,也比台灣販售的方案便宜許多。

    只要點擊下方的方案就會引導到有販售此服務的平台。

    Esimdb 官方網站

    Find and compare best prepaid eSIM for travelers
    The easiest way to search for travel eSIM & prepaid data plans for your trip. Filter by country or region, find customer reviews, and more!

    Airalo

    Esimdb 最終會導到販售 eSIM 方案的平台,我這次是使用 Airalo 來購買土耳其的電信網路服務,使用上也非常簡單,只要選擇想要的方案即可購買。

    選擇想要的方案。

    購買完可以到 My eSIMs 看已購買的方案。

    點擊後可以看到詳細資料,記得點擊 ACTIVATE NOW 來啟用你的 eSIM。下方 Top-up 則是可以另外買流量,若流量快用完可以來這邊加值。

    Airalo 官方網站

    Local and regional eSIMs for travellers – Airalo
    Data packs with local rates. Manage your eSIMs and top-up on the go with Airalo.

    後記

    我還記得某次在國外把退卡針搞丟,SIM 卡明明在我手中,我卻打不開卡槽,當時真是欲哭無淚。此外也曾遇到卡槽接觸不良的問題,不碰還好,一碰就讀不到 SIM 卡。很高興未來我不必再為此擔憂,感謝科技的進步。

  • COVID-19 確診及通報流程紀錄

    COVID-19 確診及通報流程紀錄

    前言

    身邊的人幾乎都確診過了,這次總算輪到我,趁這個機會來記一下發病的症狀以及我後續的處理方式。

    時間表

    日期事件
    10.10晚間七點喉嚨開始有異物感,當晚睡得很不好,主要是想咳嗽且頭很痛。
    10.11早上快篩陰性,喉嚨癢,當天有發燒。晚上去看耳鼻喉科,醫生覺得我應該是流感或確診,因為現場沒有檢測儀器,所以醫生要我自行決定去做 PCR 或是回家吃藥就好。
    10.12請假,喉嚨微癢,有吃藥都滿穩定的。當晚睡覺可以感覺到明顯鼻塞,睡得不好。
    10.13喉嚨微癢、鼻塞、輕微反胃,感覺在痊癒的路上。早上快篩陽性,隨即預約線上看診,走後續的通報流程。
    10.14鼻塞、輕微反胃。
    10.15鼻塞、輕微反胃,晚上睡前反胃特別有感。
    10.16輕微鼻塞、輕微反胃、嗅覺變不敏銳,感覺剩下七成。
    10.17嗅覺感受度下降,剩下一成。
    10.19嗅覺剩下三成。
    10.21解隔離了,自主防疫第一天,嗅覺回復到五成水準。
    10.23嗅覺回到了七成左右。
    10.28嗅覺恢復得差不多了,一直有種還差一點的感覺。
    10.31這天嚐到很細微的味道,總算敢說完全康復了。

    前兩天最痛苦,喉嚨癢的感覺嚴重影響生活,但吃藥後症狀控制得不錯;從 10.12 開始就覺得是輕症,活動力、食慾都正常,但鼻塞真的很不好睡。後期吃東西感受不到氣味,會擔心是永久性的後遺症,幸好最後有慢慢恢復。

    診斷與通報

    本圖轉自疾病管制署

    我 10.13 早上快篩陽性後,便使用聯合醫院的視訊看診服務,只要輸入個人資料就可以線上掛號。有幾間分院要自己加門診的 Line 帳號,我是掛忠孝分院,對方會直接傳簡訊給我,只要點選連結就可以加入 Line meeting,首圖就是用電腦點開的畫面。

    視訊一開始會先檢查快篩結果以及健保卡,確認完需要銷毀快篩結果的塑膠片。跟醫生說明我的狀況後,對方表示會利用社區藥局送藥到府(限定台北市),最後就是由醫生幫我通報,等待後續流程。

    當天下午收到通報簡訊,會需要去填寫個人資料,如果有同住者也要將對方的資料一起填寫。幾乎同時間也接到了衛生單位的電話,會關心健康狀況,並安排社區藥局給藥,大約傍晚時分就收到藥了。

    保險理賠

    因為有買保險,順便寫一下請領方法。我本身是購買富邦的防疫險,需要準備的資訊如下:

    1. 身分證正反面
    2. 存摺封面
    3. 理賠申請書
    4. 隔離通知書檔案
    5. 隔離公知簡訊截圖
    6. 健保快易通確診截圖
    7. 數位新冠證明

    填寫完理賠申請書後,一同將其他文件給保險業務即可。比較需要注意的是:上述的隔離通知書是可能過期的,收到簡訊記得趕快存檔,其他資料就沒此擔憂。申請後大約等待三個月可以收到款項。

    結語

    這次確診讓我取消了好多行程,包含了我的離職聚餐、各種門診的諮詢、去台東耍廢,連公司登記的簽約都被迫延期,還滿討厭的,畢竟我離下間公司到職日越來越近了,但還很多事情沒處理,滿有壓力的。

    但也不全是壞事,這讓我知道確診是什麼樣的感覺,經歷過一次後就沒那麼可怕了。

  • GoShare 取代租機車可行嗎?

    GoShare 取代租機車可行嗎?

    前言

    前陣子安排了一趟台南的小旅行,剛好得知當地的 GoShare 機車密度很高,因此決定這趟旅行就不租機車了,全程使用 GoShare 來移動,順便比較電動機車與我的燃油速克達使用差異。

    密度多高?

    圖中可以看到整個市區滿滿的都是機車,整趟旅程幾乎都是五分鐘內就可以找到車,若行程跟我一樣都是安排在市區,其實不用太擔心沒有車。

    燃油 vs 電動

    這次騎乘了三款車型:Gogoro 2、Gogoro 3、Gogoro VIVA。我本身主要是騎化油器的速克達,彼此最大的差異是催油門,Gogoro 的油門總有種延遲感,好似要等一下才會前進,但這應該是習慣問題,騎久了就會記住這個感覺。

    Gogoro 特有體驗

    要藏一台車,最好的地點就是把它放在停車場。我一開始其實會擔心找不到車,但顯然這擔心是多餘的:GoShare 的機車都是很顯眼的淡藍色,且被預約的機車會閃爍煞車燈,遠遠就可以吸引使用者注意,如上圖所示。

    開始騎乘後,我不太習慣 Gogoro 的方向燈體驗,途中一直手拙按錯。其他速克達的方向燈是往左右推可亮燈,按中鍵消除燈號;Gogoro 則是按左右鍵亮方向燈,再按一次剛才的方向可消除燈號。少了中鍵的重置讓我不太自在,因為重置鍵代表:不管你剛才按什麼方向,過完彎就按重置就對了;而 Gogoro 的體驗是:你要記好剛才按的方向,過完彎再按一次。雖然不是什麼大問題,但前幾趟花了一點時間適應這個差異。

    而側柱熄火是我一開始未賞握的資訊,好幾次架完中柱後機車無法熄火,導致車廂打不開,最後才發現側柱要踢了才可以完全熄火。因為習慣架中柱,到了目的地無法進入還車流程讓我有點惱火。新聞提到新車款的中柱也可以熄火,但我當時騎的車型都是有支援的款式,不太確定我是否做錯了什麼,下次有機會再來測試一下。

    結語

    我這次安排三天兩夜的行程,GoShare 共花費 638 元;台南租機車通常是一天 300 元起,整體算下來便宜不少,而且也不用特別預約,對旅客是相當便利的一項交通工具。

    至於 Gogoro 跟燃油車比較,我自然還是習慣燃油速克達。但近年一直在推減碳政策,電動機車也確實排碳量比耗油車少,未來若有機會選擇較環保的交通工具,我還是會願意支持(包含但不限於 Gogoro 這個品牌)。

  • MacOS CPU 資源被 ReportCrash 吃光

    MacOS CPU 資源被 ReportCrash 吃光

    前言

    最近筆電常有卡頓感,打開了活動監視器後,發現有 ReportCrash 吃掉我 80% 以上的 CPU。一開始以為是我哪個程式當掉,想說重開機就好,但重開完依然看到 ReportCrash,肯定是哪裡出了問題。網路資料說:ReportCrash 就是有服務當掉才會跑出來,且該服務不斷地重複開啟,導致 ReportCrash 消不掉。

    解決方法

    cat /var/log/system.log

    利用上述指令印出系統的紀錄檔,看是哪個服務一直重複啟動,找到就將它砍掉吧。我是看到 tw.gov.nhi.nhiicc2019,這是健保卡的相關服務,推測是我之前報稅時下載的。如果你也受健保卡服務所苦,請參考下述連結說明:

    移除 macOS 健保卡元件
    移除 macOS 健保卡元件. GitHub Gist: instantly share code, notes, and snippets.
    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

    上述指令用來終止 ReportCrash,可以緩解資源被佔用的狀況,但在找到重複啟動的癥結點後,還是要將它加載回來 。

    sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

    刪除掉重複開啟的服務後,就可以利用上述指令將 ReportCrash 加載回來。

  • 貫徹始終的賓士車隊文化

    貫徹始終的賓士車隊文化

    前言

    這陣子在看 Netflix 上的 Formula 1:飆速求生。它是一部體育紀錄片,主要從 2018 年開始記錄 F1 賽車的故事。最近追到了第二季,第四集的內容在講 F1 賽車的常勝軍:賓士車隊,這集看完讓我驚嘆賓士車隊的文化,讓人難以置信可以組織出這麼強大的團隊。

    正文

    這集有三個人令我印象深刻,分別是尼基勞達、托托以及路易斯漢普頓。尼基勞達是賓士車隊的董事,過去是一名傳奇賽車手;托托則是車隊經理,過去也是一名賽車好手,至於路易斯漢普頓,他是賓士車隊的當家車手,在節目拍攝時已經取得五次 F1 世界冠軍。

    賓士車隊並非一開始就是一支勁旅,而是在尼基勞達出任董事後開始轉型(關於尼基勞達的故事,可以去看決戰終點線),截至第二季內容的 2019 年,賓士車隊已經連續五年獲得世界冠軍。這集內容主要是在講述該年度德國的大獎賽,賓士在主場發生嚴重失誤,最終一分都沒拿下。

    托托在接受 Netflix 訪問時,他透露賓士車隊的強大來自於一千六百位員工,他其實大可說是車隊在尼基勞達(或是他自己)的帶領下,取得當前的成就;但他沒有,而是將這份功勞歸於全體,這可能是場面話,但後續的發展讓我覺得他是發自內心陳述這件事。

    路易斯漢普頓在排位賽*身體不適,雖然前幾圈跑不好,但最終還是拔得頭籌,拿下了竿位*,此時他不像其他車手講些「爽啦」「耶」之類歡欣的話,而是感謝全體的付出,這也讓我印象深刻,真是一名內斂的強者。

    在正賽過程中,排名第一的路易斯漢普頓因車體受損要進站維修,原本只要換前翼,結果維修人員調度錯誤,連輪胎也一起換,這一折騰就是超過一分鐘。F1 賽車平均維修時間只有兩秒,套句賽車記者講的話:「在 F1 賽車,維修一分鐘幾乎是過了一年」,這是很嚴重的疏失,出站後排名已經掉到很後面了,最終完賽未能取下一分。

    事後檢討時,路易斯漢普頓率先跟大家道歉,他覺得是他沒有挽救頹勢。說真的,怎麼看都不會是他要道歉,整場看下來,他唯一犯錯的點就是打滑了一下,而且還沒有撞車。身為數屆冠軍車手,這是多麼廣大的胸襟?而托托在這次拍攝中沒有責怪任何人,因為他們有一套「不責怪」的文化。事情搞砸時,我們很習慣地會想要去抓戰犯,但賓士車隊這種對事不對人的文化,說明了他們卓越的原因。

    內容的結尾,帶到了尼基勞達所說的:每個人都會犯錯,重點是記取教訓,然後改變,變得更加強大。

    名詞解釋

    排位賽:各家車手在正式賽事的跑道上試著跑出單圈最快速度,此成績將決定正賽出場的排序,成績越好排得越前面。

    竿位:在排位賽取得第一名的成績。

    後記

    在職涯中,我經歷過不少公司,也有過被責罵的經驗。就我自己所感受到的,我認為被責罵後的表現很容易變差,而且還會造成員工間的不信任。比起責怪,我認為討論失敗原因以及改善方法才是上策。

    這是我之前在徵才文提到的內容:

    就事論事不是口號,是做到想法直說不用擔心得罪對方。

    就事論事是很重要的;對我而言,一個人很難面面俱到,那些資深、專業的員工不見得什麼都懂。好的公司文化應該要有機制聆聽不同的聲音,因為讓管理者完全帶領員工是不切實際的,必須有人在不同面向察覺一些端倪,提出後好讓大家可以往更好的地方前進,這才是長遠的經營之道。權力下放不見得是能力不足,而是理解這麼做可以帶來更大的效益。這也是為何我喜歡扁平的組織,因為管理者跟員工的對話機會更多,只要這些想法都能妥善處理,就能帶來正向循環。

    正循環

    1. 員工因為建議被採納,進而願意分享更多見解。
    2. 公司因為好的建議而有機會改善某些環節。

    當然,上述循環是理想狀況,也有一些情境我覺得滿常見的:

    1. 建議一百次後沒有得到採納,員工失去自信。
    2. 員工覺得決策者不公平。

    關於第一點,我其實可以理解,是否有辦法在屢戰屢敗後還可以站起來繼續打下一場仗的心理素質會是關鍵。每次帶著解決方案去找我家的技術主管,每次都被打臉我也覺得開心,因為又學到一些東西。但不見得每個員工都有一樣的心態,我只能給予引導與鼓勵,長久之計還是得讓員工長出面對挫敗的應對方式。

    我認為公平很重要,某種程度上,它是崇高、不可侵犯的。但決策者必須把關的是:帶領公司朝正確的方向前進。權衡之下,我會直接捨棄公平,公司利益為先;這也是為何某些人擁有決策權。遇到不滿意的決策,我通常就是詢問決策者的見解,無論最終有沒有說服對方,最起碼要保有資訊同步以及對決策者的尊重。

    很多問題是沒有解答的,彼此見解若多次牴觸,那我會覺得道不同不相為謀,去尋找下一個認同你的地方吧!

  • 腳踏車抵家的系統設計

    腳踏車抵家的系統設計

    前言

    在確認了產品需求之後,接下來就會走到開發實作的階段,這個階段第一個面臨的問題就是:我的系統要怎麼處理比較好?在回答這問題之前,必須盤點手上所有的資源,尤其要注意這些資源的限制,因為會攸關到可行性。

    產品需求見下文:

    資源清單

    • Oracle Cloud VPS * 1
    • Supabase Database (PostgresSQL + Postgis) * 1
    • Google Cloud Functions (for Auth)
    • 政府開放資料

    除了 Google Cloud Functions,其他都是免費資源。都有 VPS 了,為何還需要去付費使用 Cloud Functions?

    我之所以將 Cloud Functions 納入是因為:不想讓別人看到我的 API endpoint。尤其我是用免費的 VPS,機器比較不夠力一些,加上自身 SRE 的專業不強,很怕 Server 被人打趴,因此將驗證做在 Cloud Functions,先濾除一些非法的連線再去連我的 VPS;而不是直接把驗證做在我後端程式的 middleware。

    版本 1.0.0

    最一開始我串接雙北的公共自行車開放資料,因為開放資料沒有統一欄位,所以我寫了爬蟲程式放在 VPS 上,把開放資料整理後存入資料庫,並透過 API 將這些整理過的資訊給 App 使用。

    版本 1.1.0 – 1.2.0

    後來我發現交通部有個公共運輸整合資訊流通服務平臺(Public Transport Data eXchange,PTX),它整合全台灣公共自行車的資料,做的事情跟我 1.0.0 爬蟲程式差不多,就是取出資料交集,整理出一致的資料格式。此時決定改用 PTX 的資料,省下處理各縣市開放資料不一致問題的工。

    這時拿掉了很多東西,因為 PTX 滿足產品早期的需求,少維護一台伺服器我也樂得輕鬆。此時還留著 Cloud Functions 是因為:Android 應用程式容易反組譯,我不想讓 PTX 的金鑰外流,因此多墊一層確保安全性無虞,也保留一開始驗證使用者的功能。

    版本 1.3.0 – 現在

    新的產品規格有一些細膩的資料需求,這是 PTX 的 API 無法提供的,所以走回老路,重新啟用我那台 VPS 跟爬蟲程式,改爬 PTX 的資料;下圖左下是長回來的部分,專門處理新功能的需求。

    原本想要讓 Cloud Functions 直接對我的 Server 拿資料就好,但我自己的 API 回應時間一直調不到我預期的水準,所以保留 Cloud Functions 對 PTX API 拿資料的那段,確保回應時間壓在 100 ms 以下。

    優點與缺點

    每個解決方案都是權衡下的結果,我認為沒有最好的解決方法,只有最適合當下的處理方式。下述提到的優點是我追求的,但一定也為此犧牲了某些東西。

    高流量

    因為 Cloud Functions 可以自動水平擴充,所以使用者變多時也不太擔心。腳踏車抵家的主功能是在地圖上瀏覽腳踏車的站點,這是打 PTX API,我看 PTX 有處理 Cache 機制,感覺打不太死。而我的 Server 負責小功能的 API,這被打趴就算了,至少主功能還活著。

    安全性

    Cloud Functions 那邊用 Firebase Auth 處理驗證,不該外流的 key / secret 也沒有暴露給人看,看起來還算安全。

    費用

    便宜,目前 Cloud Functions 每個月花不到 100 台幣,當然使用者少也是一個原因。

    速度

    Cloud Functions 對 PTX 那段的速度還行,但我 Server 那邊就有點問題了。Cloud Functions(台灣)、VPS(日本)、Database(日本)分屬不同雲端服務,且分散在各個位置,這是先天不足之處,加上我沒有完全榨出那台 VPS 的效能;這問題我最後用連線策略跟使用者體驗處理掉,實際感受沒有那麼慢。

    最讓我有感的是 Cloud Functions 沒用時會睡著,要用時才會被喚醒,這個啟動時間超過十秒。就我自己觀察:有時打開 App 的前兩個 API request 會特別久,回應時間遠超出我的預期,即便我調整 Cloud Functions 的常駐數量也無法達到舒服的回應時間。但這就是它便宜的原因,想改善就是要換掉。

    潛在成本

    PTX 之後可能會收費,加上它是有使用上限的。目前爬蟲抓 PTX 資料是不可避免的成本,但主功能連 PTX API 那段其實是可以省下的,在正式處理之前都會是個隱憂。

    未來可行方案

    Typo, Radis -> Redis

    未來若有機會不計成本,我想以這個架構來實作。自然是囊括上述提到的所有優點,但目前的我還無法實踐,需要先擴充我的 SRE 技能點以及我的口袋深度。認真來看,這應該可以滿足商用等級的需求。

  • 創業之星選秀大賽得獎感言

    創業之星選秀大賽得獎感言

    2019 年,我們只有三個人,公司都還沒成立,只能暫時棲身成員在農田水利署二樓的合租辦公室,連座位都要搬開一堆雜物後,才勉強可以坐下。幾個月後,我扛著螢幕跟電腦設備在民生東路走過數個街區(後來換辦公室都有請搬家公司,請大家放心),跟著兩位初始成員搬進宏泰金融大樓,終於有個安身立命之地。

    後來我們陸續換了幾次辦公室,員工也成長到近三十人;在這期間,我一直覺得讓大家相信這間公司是困難的。我們在台灣沒沒無聞,搜尋公司名稱查不到什麼資訊,甚至有面試者懷疑我們是詐騙集團。

    「協助印尼政府進行稅務改革、印尼政府支持的新創科技、印尼辦公室座落於總統府行政區正對面」是我們在徵才頁面的說明,以往面試時,面試者對我們的公司總有諸多疑問。

    「公司真的能進駐在總統府旁邊嗎?」

    「為什麼台灣人可以做其他國家的稅務系統?」

    ……

    「原來是這樣,網路上查不太到你們公司的資訊,我一開始還有點擔心。」

    我們對每個問題據實以告,面試者最終也可以理解,但終究在親眼目睹之前,也不過是單方面說詞。

    我們一向鼓勵員工到最前線見證自己工作成果在當地的影響力,並走入政府大樓,跟我們熱情的印尼同事一同協作。儘管你可能只出差一、兩週,但我們也期待你試著融入當地。下班後,穿越對面的國家紀念碑,再往前走,那裡有一條小吃街,還不太適應當地食物的你,點了一盤炒粿條跟肉丸湯,你似曾嚐過這位廚師的手藝,或許往前追溯兩、三百年,會發現彼此的某代祖先就是鄰居。用完餐,你走到隔壁,那裡堆滿小時候最愛吃的山竹,以及從未看過、像是蛇皮般長滿鱗片的未知果實。接著你心滿意足地拎著一袋水果,用 Gojek 叫了一台機車,跨上機車後座後,在大馬路上穿過世界第四壅塞的車陣,並用你蹩腳的印尼語指引司機該怎麼騎到宿舍。最後你在客廳的沙發上,用多汁而酸甜的滋味結束一天的辛勞。

    2020 年疫情爆發後,出差去印尼的員工全數緊急撤離,逃命似地飛回台灣,諸多業務也因為後來雅加達封城而停滯,台灣跟印尼之間的聯繫就剩一條網路線跟幾通越洋電話,試問該如何證明這個事業千真萬確?印尼中央社的新聞稿?還是幾張印尼夥伴與地方首長的合照?看著無法理解的文字及照片上異國的傳統服飾,彷彿另一個世界,疫情在我們的事業籠罩了一層陰霾。幸好,今年印尼疫情趨緩,得以讓我們再次前往雅加達,加速印尼的所有業務。先前的擔憂一個一個化解,陰霾也逐漸散去,透露出一道曙光。

    四天前,我們榮獲經濟日報創業之星選秀大賽的冠軍,從 141 個企業隊伍中脫穎而出,受到來自各界的專業人士、評審肯定,這無疑是莫大的榮耀。這不只大大振奮了台灣的全體員工,在印尼的夥伴也為此歡欣鼓舞。終於可以自信地說出:我們的能力不只是受到印尼政府青睞,即便是在台灣,也絕對經得起考驗。

    除了感謝主辦單位及現場的評審老師,我最想感謝一起踏上這段未知旅程的酷堤康全體夥伴,沒有大家的辛勞付出,這件事情不會成真。

    @Tiffany Hsiao,我們的營運長,這場比賽自始至終由妳獨自打理,為比賽準備了無數個日子,還壓力大到在棉被裡哭泣;一直到我們上台前的最後一刻,還是維持在緊繃的狀態。後來妳在台上有條理地把公司最好的一面呈現給在場所有人,穩健的台風令眾人印象深刻,甚至有評審老師在中場休息時間特別走過來,讚賞方才在台上的表現。還記得輪到我們上台前的三十秒吧,妳莫名揍了我一拳,我被這突如其來的舉動嚇了一跳,如果這是什麼勝利的前奏或暗號,我下次願意被多揍幾拳(但拜託不要打臉)。

    還有執行長,@Red Li,最該接受這份殊榮的人,但此時遠在南半球的最前線,馬不停蹄地處理新的合約事宜。有時我會懷念當時一起去榴槤街,從街頭走到巷尾,宰殺無數顆或大、或小的榴槤,只為了尋覓那顆最美味的榴槤之王;然後回到住處,打上三小時榴槤口味的嗝(?)。

    以及 @tka,我的前同事兼 Mentor,現在的首席技術執行長,在我覺得最艱困的時候選擇加入酷堤康,為公司注入活水;團隊在你的帶領之下,除了技術限制的突破,團隊也明顯地比以往更加凝聚。以前總是受到你的指導與照顧,現在也是如此;我甚至想過要賣一顆腎來回報你的恩情,但我覺得一顆大概不夠,因此作罷(?)。

    最後,我想感謝閱讀此文的你,願意騰出時間看到這裡;今天是週末的最後一天,願你在週日晚間可以充分休息,然後明天與我一起在各自的職場上繼續打拚。

    我們是酷堤康科技,致力解決印尼的稅務問題。如同前文所述,我們正走在一段未知的旅程,我也不知最終會走到哪裡,但我們絕不止步。希望未來開啟職缺時,各位可以給酷堤康一個機會,來公司與大家聊聊,若可以,讓我們一同享受旅途上的風景,一起讓全世界看到我們的實力。

    創業之星選秀/「公司組冠軍」酷堤康 跨國抓逃漏稅 | 聯合新聞網
    第六屆創業之星選秀大賽公司組冠軍由酷堤康科技拿下,該公司主打數位化專案,是印尼政府唯一支持的新創科技,主要為印尼地方政府…
  • 腳踏車抵家 – 立志把官方 YouBike App 再進化

    腳踏車抵家 – 立志把官方 YouBike App 再進化

    前言

    什麼事情比眼睜睜看著別人騎走最後一台 YouBike 還要難過?有的,那就是又一次看著別人騎走最後一台。我每個 App 的開發動機都是一些雞毛蒜皮的小事,就像蔬果行情站是因為喜歡吃水果、尋車小幫手是經常忘記車停哪,腳踏車抵家則是:連續兩次看著別人騎走最後一台 YouBike 的憤怒與哀傷。

    那天下午六點半要在新租屋處跟房東點交,六點一下班,我就衝去公司對面的 YouBike 站點,只看到路人騎走站點的最後一台 YouBike。也罷,畢竟 App 上顯示只剩一台。接著我往建國高架方向走,App 顯示那邊的站點還剩六台車,而我竟在等紅綠燈時,眼睜睜又一次看著別人騎走最後一台 YouBike,說好的還有六台呢?那天點交差點遲到,氣到當晚直接開工。

    官方 YouBike App 缺點

    這陣子在處理搬家事宜,因為新租屋地點離公司不遠,預計遷入後會騎 YouBike 通勤。當我久違地開啟 YouBike App 時,發現 YouBike 1.0 跟 YouBike 2.0 居然是拆成兩個 App;這令我困擾,因為我騎個腳踏車還要下載兩個 App 才可以知道完整的資訊。對我來說:只要有車能借、有位能還,我不會在意是騎 YouBike 1.0 還是 YouBike 2.0。

    你可以接受來回切換 YouBIke App 只為了看完整的站點資訊嗎?

    除了上述的資訊不完整,我還留意到 YouBike 2.0 的 App 在更新資料時會造成畫面卡頓;對一個體驗要求高的開發者來看,這是很痛苦的事情,我還要體諒對方實作錯誤導致要用詭異的節奏來操作 App。相較之下,YouBike 1.0 App 的流暢度好多了。

    此外,前言提到當天借車遇到連續兩次撲空,第一次是地圖上剩一台車的站點,這我完全可以諒解;但剩六台還讓我撲空,讓我不禁懷疑資料更新的頻率是否有問題。

    需求分析

    基於上述各種理由,我決定自己寫一個 App,首要之急就是解決前面提到的幾個問題。

    資料完整性

    簡而言之,要讓 YouBike 1.0 及 YouBike 2.0 的站點同框登場,最好還可以自由篩選要顯示哪種類型的腳踏車。

    流暢的操作體驗

    改善體驗永遠做不完,但 App 畫面凍結絕對是不該發生的,我的 App 要順暢地滑動到每一個地圖的角落。

    可接受的更新頻率

    我不知道 YouBike App 的更新頻率是怎樣,也不知道 YouBike 站點回傳資訊的時間差;但我要求自己至少每分鐘抓取一次資料,不該因為 App 更新頻率問題,導致獲取了過舊的資訊。

    節省流量

    因為 YouBike 站點的開放資料是提供整座城市的,也就是會有多餘的流量浪費,某種程度也會讓 App 變慢,我希望這個 App 可以只提供我需要的資料就好。

    多國語系

    自從口罩地圖有人許願英文版後,我都期許未來的作品可以將英文版當作標配,以便服務更多使用者。對我來說,資料內容會限制這件事情的發展,幸好開放資料有提供英文資訊,可以順手一做。

    成果展示

    站點地圖
    站點資訊
    站點資訊(英文)

    下載連結

    產品定位

    自從將腳踏車抵家分享到各大社群網站後,幾乎每個平台都有人提出其他解決方案給我。像是 Google Maps 或是 Citymapper;留言者多以「別人也有」來評論腳踏車抵家的可取代性,例如:前面提到兩個產品都有 YouBike 1.0 跟 YouBike 2.0 的資料,為何還需要腳踏車抵家?如果因為這個理由而不試用就太可惜了,我們來聊聊產品差異。

    資料廣度比較

    Google Maps

    地點資訊包山包海,說是地圖界的巨人應該不為過吧?大家都很熟悉它,不多做解釋。

    Citymapper

    專注於交通資訊,它是跨運具規劃的佼佼者。如果覺得 Google Maps 資料太多、太肥,只想看交通資訊,那 Citymapper 就很適合取代 Google Maps。

    腳踏車抵家 BikesHere

    只有提供公共自行車資訊。

    產品策略

    面對資源遠大於我的競品,我沒有辦法與他們的產品強項來正面對決,只能劍走偏鋒,找到自己的生存空間。在進擊的巨人中,第二次女巨人捕獲作戰時,主角一行人的策略就是要把女巨人引到地下通道,利用地下建物的構造困住巨人,以降低任務難度;我們這些沒有資源的個人開發者也是,要把戰場轉移到可以佔上風的地方才有可能與這些企業巨人一搏。

    多數民眾利用 YouBike 來滿足短距離的移動需求,騎乘 YouBike 可能只是起點到終點的一部份而已,後續還要轉乘其他交通工具,如公車、捷運等。面對這種轉乘需求,這是 Google Maps 或 Citymapper 的強項,各種花式路徑規劃、豐富的到站資訊,並給予使用者一百種抵達目的地的方法,這是我做不到的。

    世界上有這麼一群人,對公車到站時間、捷運路線圖、火車時刻表視若無睹,對他們來說:資訊不在多,有腳踏車就行。Google Maps 雖然也能滿足他們對資訊的需求,但就是太多了。舉個例子:你今天想吃鹹酥雞,結果阿嬤不只幫你炸了一盤鹹酥雞,還幫你煮了五菜一湯,最後你被多餵了一堆鹹酥雞以外的食物,大概就是這種感覺。

    選擇戰場

    談完了鹹酥雞,所以我打巨人的策略是什麼?腳踏車抵家提供的資料這麼侷限,真的有辦法去跟 Google Maps 或 Citymapper 相提並論嗎?我們直接用真實案例來比較:我想要知道周圍的 YouBike 站點資訊。

    Google Maps

    1. 打開 Google Maps
    2. 自動定位到目前位置
    3. 點擊搜尋列
    4. 輸入「youbike」
    5. 點擊送出
    6. 顯示周圍 YouBike 站點資訊

    Citymapper

    1. 打開 Citymapper
    2. 點擊腳踏車圖示按鈕
    3. 自動定位到目前位置
    4. 顯示周圍 YouBike 站點資訊

    腳踏車抵家 BikesHere

    1. 打開腳踏車抵家
    2. 自動定位到目前位置
    3. 顯示周圍 YouBike 站點資訊

    小結

    從操作步驟的比較來看:腳踏車抵家是步驟最少的,這也意味它是效率最高的 App。一開始在資料完整性的比較落居下風,但換個角度看,原本的缺點就扭轉成優點了;且資訊最豐富的 Google Maps 在這個比較反而敬陪末座。

    主流市場就留給那些巨人,而他們無法完全滿足的對象就是我的目標受眾,這些人不多,但只要接觸到我的產品,就會留下來,因為這種量身打造的體驗很難在大眾導向的產品感受到,少了那五菜一湯,只端出用戶真正想吃的。

    競爭對手

    選擇完戰場,會發現上述提到的兩個競品與我產品定位差距甚大,他們並不是我直接的競爭對手。在相同戰場上,最大的競品是官方的 YouBike 微笑單車 App,儘管它做得很難用,但它就是擁有官方的特權與光環,有些事情只有它能做:註冊 YouBike 會員、設定扣款方式、查詢交易紀錄……等。這是民間開發者無法觸及的領域。

    面對官方的不可取代性,我並不覺得毫無勝算。如同我作品的資料廣度不足,但反著看會變成簡潔有效率;官方的弱點就是它身為官方,只能做官方的事。就像你不會在官方 YouBike App 看到彰化的 MOOVO 或是金門的 K-bike,地方政府沒有這個需求,自然也不會編列預算去做額外的整合。

    因此我的產品新功能的規劃會以「官方做不到」為大方向,如果有機會做到極致,那官方 App 就會變成只拿來註冊、查扣款紀錄的 App,剩下的使用需求全部被腳踏車抵家做完了。

    撇除官方,剩下的競爭者大概就是跟我一樣的獨立開發者或小型團隊了。在一樣的背景、資源狀態下,其實就是看誰技高一籌。網球王子有位角色叫手塚國光,當他發動絕招「手塚區」時,可以回擊所有對手打過來的球,意味著他不會失分,而且還可以反殺對方一波;我擁有名為軟體開發的手塚區,如果有人把球打進我的手塚區,我不確定自己是否能贏,但對手肯定麻煩大了,哈。我享受彼此較勁的經過,尤其有時回首看到自己在過程中的成長,那是種難以言喻的感動。

    總結

    興趣使然的開發者不以營利為目標、不需要出報表,也不用對投資人負責;在沒有任何包袱的情況下,可以完全專注在想要解決的問題,這是我能以小搏大的武器之一;我也以這個身份為樂,因為沒有人比我更自由了。

    最後期許自己能端出美味的鹹酥雞與大家分享。

    版本更新日誌

    • 1.6.4 同 1.6.2
    • 1.6.3 修正 App 打不開的問題
    • 1.6.2 改善搜尋體驗及站點顯示方式
    • 1.6.1 修正搜尋功能無法運作的問題
    • 1.6.0 加強搜尋功能
    • 1.5.0 地圖周遭站點列表
    • 1.4.0 搜尋站點功能
    • 1.3.0 收藏站點功能
    • 1.2.1 調整縣市顯示方法
    • 1.2.0 顯示縮放後的 11 個縣市並改善體驗
    • 1.1.0 支援全國 6200+ 自行車站點地圖
    • 1.0.2 修正修正初始頁面及自動更新功能
    • 1.0.1 修正錯誤圖示
    • 1.0.0 支援雙北 YouBike 1.0 / YouBike 2.0 站點地圖

    後記之一

    App 準備好了,就差我下週搬進新住處。希望未來都可以順利借到腳踏車,快樂抵家。

    其實在開發過程,也有遇到一些問題。串接政府的開放資料,往往遇到的問題就是:服務不穩定、資料異動、欄位不一致,又或著是內容有誤。前面幾項問題在多次交手後,已經有點麻痺了,但最後一項是我認為最嚴重的。

    原因在於:沒有人知道哪些資訊是正確抑或是錯誤的。這些資料一旦給大眾使用,總會有人瀏覽錯誤資訊後才發現問題,這時要補救已經太遲了。一旦這些開放資料變成不可信任的內容,一開始的立意與動機也會為此衝擊。希望政府單位可以多重視開放資料的相關議題。

    後記之二

    搬完家了,現在我每天都會開啟這個 App 看哪裡有車可騎,還滿方便的。

  • 願您安息,Vangelis

    願您安息,Vangelis

    偶然看到 Vangelis 過世的新聞,因為自己對音樂界不熟悉,一開始並不是很有感觸。直到我將新聞留言區的作品連結點開後,才發現這名大師的作品其實早就聽過無數次。二十年前我還是個對於版權沒什麼概念的屁孩,網路上充斥著各種可以下載的資源;其中有首音樂我每次放學回到家就會開始循環播放,當時只覺得從未聽過這類型的音樂,讓我喜愛不已,那就是 2002 年世足盃的主題曲:

    再次聽到這首主題曲,我當下的反應是錯愕,它用不到一秒的時間喚起我深層的記憶,接踵而來的是令人鼻酸的複雜情緒。當年最愛的音樂,竟在二十年後被我再次聽到了,但卻是在作者逝世的新聞留言中得知,這是我第一次知道作者是誰,真是發自內心感到羞愧,又強烈覺得遺憾與不捨。

    願您安息,Vangelis,我會永遠銘記您對音樂界的貢獻,也感謝您讓我對電子樂如此熱愛。

Copied title and URL