首頁

  • 如何避免 Travis CI timeout 中斷任務?

    如何避免 Travis CI timeout 中斷任務?

    我們家是用 Travis CI 的 Core – 5 Concurrent Builds 方案,一直以來我都沒什麼使用上的問題,直到我跑了一個執行很久的 task,才發現它 10 分鐘內沒印出任何 log 會自動幫我中斷任務。

    原因

    Travis CI Documentation
    Customizing the Build

    會被中斷的狀況:

    • When a job produces no log output for 10 minutes.
    • When a job on a public repository takes longer than 50 minutes.
    • When a job on a private repository takes longer than 120 minutes.

    會發生上述原因可能是:

    • Waiting for keyboard input or other kind of human interaction
    • Concurrency issues (deadlocks, livelocks and so on)
    • Installation of native extensions that take very long time to compile

    解決方法

    別人的 workaround,在設定檔跑迴圈印 log 避免中斷:

    ballerina/.travis.yml at master · SupunS/ballerina
    Ballerina is a new programming language for integration built on a sequence diagram metaphor. – SupunS/ballerina

    官方其實有提供 travis_wait 來等待耗時任務,使用範例如下:

    install: travis_wait 30 mvn install

    以上述範例來說,30 就是要等待的時間,單位為分鐘。

    但我使用 travis_wait 後,發現 log 就不再出現了,可能是 process 被丟到背景執行,導致想看的 log 沒辦法當下印出,這些 log 會在最終執行結束才一口氣顯示;其實滿困擾的,因為無法得知當下在做什麼。

    官方文件可參考:

    Travis CI Documentation
    Common Build Problems

    最終還是選擇 workaround 來當作本次的解決方案,因為它更貼近現實需求。

  • Kobo 電子書閱讀器無法開啟 PChome 購買的書籍

    Kobo 電子書閱讀器無法開啟 PChome 購買的書籍

    前陣子 Kobo 跟 PChome 合作,PChome 上的電子書有滿不錯的折扣,便趁機入手一些想看的書。但問題來了:我的閱讀器無法開啟從 PChome 購買的書籍,會顯示如同頁首照片的錯誤訊息:此文件無法開啟。

    一開始以為是同步問題,但書籍同步後還是出現一樣的錯誤訊息。最終的解決方法就是重新登入,登出時會造成未同步的紀錄消失,要確保登出前有做好資料同步。

    更多 -> 設定 -> 帳號 -> 登出

    重新登入後,我的書籍就可以正常閱讀了。

  • 室友的肛門炸裂了

    室友的肛門炸裂了

    我室友有個特質,當他覺得某件事對他有重大意義,他就會持續去做。我印象中,他在農曆年後就開始過著極度健康的生活,我未想過促使他做這件事的緣由,只覺得這是個好習慣。直到兩週前,我才知道背後的原因。

    那時我正在客廳打電動,莫約下午四點左右,室友拖著腳步走進門,看他面有難色的樣子,我便開始關心他。一問之下才知道他剛剛去電燒,現在還有點不舒服,而罪魁禍首就是肛裂。

    關於肛裂,我其實也略有經驗,我還記得當時染血的馬桶,跟後續心神不寧的狀況;每次上廁所都很怕再現血色地獄,但我的狀況不到電燒的程度,頂多就是擦藥而已。因為這段往事,我可以同理室友的心情,一路走來,我一直站在他的角度給予最大的關懷與支持。

    那天我們聊了很多慘痛經驗跟避免復發的方法,像是:保持高纖飲食、多喝水;在那之後,室友的生活作息以及飲食也更加謹慎,我以為這個夢魘會從室友的生活中消逝,但顯然沒有。

    反覆肛裂如同字面上的意思,傷口多次撕裂,使人飽受千刀萬剮之痛。就算是最剽悍的勇士,遇上反覆肛裂也會變成失去母親的幼崽,連走路都會膽戰心驚。人們總會詛咒他人生兒子沒屁眼,但他們不知道:最可怕詛咒的不是沒屁眼,而是有屁眼卻反覆肛裂,這是最惡毒的永恆詛咒,使人墜入無間。

    下班一回到家,我便用最誠摯的語氣關心室友的肛門;這才知道室友回到了上次的診所再次電燒,而且醫生還建議他要開刀處理。

    「這次去看醫生,裡面的阿姨一直叫我寶包。不知道是不是我上次電燒叫得太慘,這次來他們好像都認識我,跟我很熟的樣子。」

    「欸寶包來了。」

    「寶包,你還好嗎?」

    「我電燒的時候,那個痛就像一個波形一樣。就算他手拿開沒有燒了,我還是會痛得繼續叫。」

    聽室友描述,若電燒的痛楚可以具現化,我覺得會是一個正弦波。

    這次的憾事我跟室友事後檢討是哪個環節做錯了,室友提到醫生叫他每日解便兩次,這樣才不會太硬又造成傷害。我才想到:小時候老師會問大家的排便頻率,那些每天大兩次以上的同學會得到老師的稱讚,讓我好生羨慕;現在我都長得比老師當年還老了,才知道老師的用心良苦,不勝唏噓。人們常說:「佛度有緣人」,老師可能是人間菩薩,讓我們得以在他的庇護之下,避開肛裂帶來的腥風血雨,但室友無緣遇到這樣的好老師,讓我不得不正視教育資源的城鄉差距。

    「你知道我規律運動一段時間了,而且吃很多蔬菜,現在它又炸開,我真的覺得很憂鬱。」

    室友抱怨他近期嚴格的飲食、作息控制根本無效,並且感到灰心喪志。在我眼裡,室友確實付出了很多,無論是一天吃兩顆高麗菜,或是誤差逼近毫秒等級的作息時間,都令我感到欽佩不已,這不是凡夫俗子可以做到的,除了他還有誰有資格抱怨?

    前陣子室友做了心理測驗,測驗結果中,他對於當下心境的形容是:「風光明媚、無限美好」。但他今日改口,覺得當初的正能量已經消失殆盡。在我眼中,室友面對困難的態度,一直都是逆來順受、從不逃避。當下他或許展露了人性的脆弱,但我知道:他早就安排了手術時間,隨時都做好根除後患的準備,這些喪氣話不過是滄海一粟。或許就是這番遭遇,才得以孕育出社會的中流砥柱,越是嚴苛的條件,越能造就非凡的人才。

    故天將降大任於是人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為,所以動心忍性,曾益其所不能。

    孟子

    後記

    寫完文章的隔天,室友就跑去開刀了。剛回到家有點像三魂七魄少了幾魄的那種民俗說法,整個人不在線上的感覺,多虧他女友一路攙扶,不然應該回不了家。希望他這次真的痊癒了,願閱讀此文的大家都能身體健康。

  • 半夜的腳步聲

    半夜的腳步聲

    每次融入新的團體,很多時候都會用鬼故事來開啟話題,我聽過的鬼故事不少,那些讓我覺得印象深刻的往往是他人的親身經歷,不是因為可怕,是因為真實。

    時間是二十五年前,那時是國小三年級的暑假,我每天都會賴在我哥房間打電動、看漫畫,而且都要熬夜到凌晨三、四點才肯上床睡覺。不知從何時開始,有些特殊狀況很針對性地發生在我身上。

    當我獨自一人在房間時,電腦不定時會自動開機。一開始最困擾的是:我還要去把它關機,覺得很煩,因為大家會唸我用完電腦不關機。這其實很直覺想到零件異常,可能需要修理。但無論我怎麼講,大家都不相信,因為只有我遇到這件事。有次我叔叔經過我房間,幾乎同時間——主機傳來開機嗶聲,熟悉的硬碟噪音也跟著響起,我終於可以證明自己沒有說謊,但叔叔只覺得奇怪,並沒有進一步的作為,這件事就停在這邊,不了了之。

    另一件事則是:我觀察到半夜門外總會有個腳步聲,非常緩慢,由遠到近,又逐漸走遠。家裡除了我哥跟我,我想不到還有誰會在大半夜活動;午夜時分有腳步聲是很詭異的,尤其兩個夜貓子都在房間裡頭,沒道理門外還有人沒睡。有次腳步聲響起,剛好我哥還醒著,我便跟我哥提起;他一臉疑惑彷彿沒聽到似的,就叫我開門看看,當下我們兩個人都很緊張,怕開了門會看到什麼未知的事物。花了一點時間做好心理建設,我緊抓著喇叭鎖、轉開,當下只看到無人的飯廳跟天花板上的昏暗夜燈。

    這腳步聲實在太頻繁了,幾乎每個夜晚都聽得到;有次我忍不住把這狀況告訴我爸,那天我爸沒有責備我胡思亂想,我有點忘記是如何跟他結束這個話題,但我還記得當天他沒有回家過夜,再次看到我爸已經是隔天的事情了。

    原來我爸聽完我的描述,他便去廟裡詢問腳步聲的事情;廟方告知理由後,我爸緊急驅車南下,在雲林的祖厝住了一晚,隔天才回到台北。

    「我回去鄉下開門。」我爸如是說。

    「為什麼?」我完全在狀況外。

    「鄉下大廳的門關起來了,你阿公被擋在門外,沒辦法進去,所以晚上只能在我們家裡徘徊。」

    就我有印象以來,鄉下三合院的門一直都是開著的,我們只有在晚上要睡覺時才會將門關上。那時因為祖母北上開刀,鄉下沒人,長輩便將門給鎖上了;而祖父——那時他過世還未滿半年。祖父務農,平時沒有穿鞋的習慣,而我家所有人都會穿室內拖鞋;我聽到的腳步聲是赤腳走路、行動緩慢,從客廳穿過飯廳,再往後走到最尾端的客房,也是我祖父生前暫住的房間。神奇的是:我爸跑了一趟雲林後,我再也沒有遇到電腦自動開機或是在半夜聽到腳步聲。

    這些經驗讓我聯想到星際效應的橋段,身處其他次元的主角,想要提示自己和家人一些訊息。我在想:當時阿公是不是也在異度空間瘋狂提示我們,想要去促成某些事情。

    對於這類的超自然現象,我喜歡用科學的角度來看待,雖然不諳宗教,但我會將神、鬼靈魂之說連結到其他維度的生命體,覺得合理存在,只是我們很難看到。未來若再讓我聽到半夜的腳步聲,我會直接以水錘效應結案,希望之後來自異度空間的訊息可以提示得更明顯一點,我們直球對決。

    後來我跟我爸提起這件往事,他雖然不記得了,但他質疑:祖先才不會被自己的家門擋住。我啞口無言,但我還是在心裡反嗆:阿公當時才過身不到半年,搞不好他還沒掌握好穿牆的技能啊!阿公沒有錯!

  • LiveKit – 最容易上手的 WebRTC 開源專案

    LiveKit – 最容易上手的 WebRTC 開源專案

    前言

    我第一次接觸 WebRTC 是在 2019 年,當時要在手機實作視訊、音訊通話功能,一開始選用 Google 官方的解決方案,過程非常痛苦,因為文件極少,且手機原生的相關討論也不夠多。後來雖成功實作這個功能,但自己對於這個領域的知識不夠充足,出問題要 debug 又是另一個難關。

    LiveKit

    LiveKit 來自美國加州,其 CEO Russell D’Sa 意識到:疫情期間,遠端工作深遠影響了公司文化以及同事間的合作模式。為了促進彼此的互動,LiveKit 應運而生。

    WebRTC 已經廣泛支援各個瀏覽器跟平台了,但要開發相關的應用程式其實很困難,首先要先理解 WebRTC 的協定規格,而這個協定內容範圍很廣,理解一部份後,馬上又會出現新的瓶頸,像我就是苦主之一。如果要使用現成的付費服務(例如:Twilio、Agora),費用昂貴不說,諸多限制又很難完全符合產品需求。

    功能

    以 WebRTC 為基底實作視訊、音訊功能,易部署、支援水平擴充,並以多種語言製作 SDK,此外它還支援 Simulcast,可確保網速不足的用戶可以擁有更好的通訊體驗。官方有提供網頁跟 app 版的通訊範例,在開發過程中可以很容易地參考使用方式。

    Server SDK

    • Go
    • Node.js

    Client SDK

    • Javascript
    • iOS – Swift
    • Android – Kotlin
    • React

    Tools

    • livekit-cli
    • chrometester

    核心概念

    LiveKit 核心概念像是:一間旅館提供無數房間,只要房間裡頭有人,那就可以開始聊天。

    • 房間:這是由 Server 端所建立的容器,可以讓參與者在裡頭交換資訊。
    • 參與者:參與者可以分為本地端(自己)跟遠端(對方),可以在房間裡面發布或訂閱通訊內容。
    • 通訊內容:那些可播放的多媒體串流。

    開始使用

    LiveKit
    LiveKit is the open-source WebRTC stack for building scalable, real-time audio and video experiences into your applicati…
    測試畫面

    結語

    精通 WebRTC 需要耗費大量成本,在沒有研究團隊跟金援的情況下,LiveKit 無疑提供了一個快速、方便的解決方案。目前視訊、音訊的開源專案不少,但以整合容易度及 Golang 實作後端的,LiveKit 絕對稱得上是一時之選。

    後記

    我一開始其實是要試 Pion,可惜 Pion 的 Android / iOS SDK 還沒完成只好作罷;LiveKit 星星數比 Pion 少 ,不過使用方式以及文件都相對完善。此外,LiveKit 的開發者不多,但它 2021 年底的種子輪募到 700 萬美金,看來可以再活好一陣子。

    我們有幾次用 LiveKit 進行線上會議,順便測試 LiveKit 的多人視訊功能,當時的通訊品質比 Google Meet 還好,這點讓人滿驚豔的。

  • 寫作的理由是為了複製自己

    寫作的理由是為了複製自己

    前言

    有次跟負責人在聊天,我們聊到公司想要補什麼樣的人,結果意外的有共鳴:「想要複製很多個自己。」會有這樣的想法其實很單純;當時公司成立沒多久,百廢待舉,很多事情都覺得有能力處理,但顯然地,我們力有未逮;每天要做的事情實在太多,恨不得多複製幾個自己來處理這些事務。

    為何寫作

    以專業能力來看,能取代我的人不少,即便如此,我也無法複製自己。在這世上,有些看不見的事物遠比能力重要,其中一項是價值觀。當我們擁有相似的價值觀,那就會被共同的信念所驅動,堅持不能退讓的底限,追求一致的目標。

    透過寫作,我可以將自身的價值觀傳達給他人;字裡行間裡頭,會有我抱持的看法、我重視的價值,這些透露出的資訊可以在素未謀面的狀況下,知道我是什麼樣的人。而我期待:某天我們這些抱持著相似的價值觀的人們齊聚一堂、成就一番大事。

    這就是近期恢復寫部落格習慣的原因,影響力雖然不大,但不做就不會成真。發文頻率還在摸索中,期待做到每週至少一篇。

    後記

    還記得某次我跟前主管在聊天,突然提到某同事要離職了,我覺得可惜,因為要離職的同事是很棒的人,擁有極高的不可取代性。這位主管一副理所當然的回答我:

    我們訓練出來的這些人,如果有一天離開了,不用覺得可惜,因為我們在這個業界種下了一顆種子。

    這位主管大可出一張嘴就好,當一位稱職的管理者;但他永遠在第一線支援,他認為有些事物必須要傳承下去,因此事必躬親、親力親為。就我感受到的,共事過的人或多或少都帶著這位主管的一部份;或許主管會覺得有一天,這些看不見的事物也會以某種形式回饋到他身上吧?

  • 口罩地圖帶來多少流量?

    口罩地圖帶來多少流量?

    前年疫情剛爆發時,我跟風做了口罩地圖,因為在風口上吸到一波恐慌流量,就進了排行榜一段時間。當時拿了 Google Play 地圖分類排行榜的第一,也摸到免費排行榜的榜首。這篇文章會說明當時發生什麼事,以及流量的規模有多大。

    時間軸

    從口罩實名制開始講起,直到我的 App 被下架為止,歷時 42 天的事件以及跨 15 個版本的功能演進。

    2020.02.06:口罩販售實名制 1.0 上路

    民眾自2月6日起,可持本人「健保卡」前往購買,每張健保卡可用10元購買2片口罩,7天內不能重複購買。身分證字號末碼雙號者可於每週二、四、六購買,單號者可於每週一、三、五購買,週日則開放全民皆可購買。

    發布單位:食品藥物管理署

    2020.02.08:上架 App

    2/6 實施購買口罩實名制,我在 48 小時內把初版口罩地圖做出,此時使用者只有我跟幾位好友。

    2020.02.09:1.0.0 – 1.1.0 地圖與搜尋

    初上架的基礎功能,以使用者介面來看,已經跟最終版本有八成像了,主要提供地圖上的藥局資訊以及列表搜尋功能;此時以為主功能做完就不太有新需求,但實名制執行不到一週,社群網站開始出現民眾及藥局對民間口罩服務的負面迴響:因為政策未預料到號碼牌制度,部分民眾用資料的數據去質疑藥局,讓藥局的工作人員承受了莫大壓力。

    2020.02.09:宣傳

    2/8 ~ 2/9 這個週末,我想讓 App 多一點曝光,於是到臉書社團G0V 貼了我的作品,後來也被收錄到口罩供需資訊平台,我覺得這是口耳相傳的起點,尤其臉書那篇迴響還滿不錯的。

    2020.02.11:COVID-19

    譚德賽於記者會上將新冠病毒引發的肺炎正名為「COVID-19」

    發布單位:衛生福利部

    2020.02.15:1.2.0 藥局備註資料

    從這個版本起,我開始進行補救措施,第一版的口罩地圖已跟最初期待的樣子截然不同,接下來服務勢必要朝著資料補充的方向前進,提供充分的資料可以降低資訊不對稱的狀況,進而減少衝突,因此加入了藥局的備註資訊,當作資料補全的第一步。同時,我也想要降低藥局的負擔,因為有藥局接電話接到手軟,便將電話藏到最深處了,也增加不要加重藥局負擔的警語,避免使用者可以輕易地撥打藥局電話。

    2020.02.20:口罩徵用產能持續提升

    全國販售口罩據點由每日提供成人口罩200片增為400片、兒童口罩50片增為200片;兒童口罩7天內可買4片。由於國內醫用口罩徵用產能持續提升,2月20日起增加實名制口罩提供量,以因應下週開學需求。

    發布單位:衛生福利部

    2020.02.22:1.3.0 回報制度

    延續上個版本的精神,政府的開放資料已經不夠用了,必須擴充資料內容才有辦法滿足需求,這個版本提供民眾或藥局工作者回報當下的口罩販售狀況,試圖讓資訊更即時、完整,但也衍生出新的問題:如何驗證民眾回報資料的正確性?這點除了藥局的工作人員,誰都做不到;最後是加了時間限制,避免短時間大量回報。(加入地點限制會更精準,但未實作。)

    2020.02.27:中央流行疫情指揮中心提升為一級開設

    因國際疫情緊急,將中央疫情指揮中心提升為一級開設,並請衛生福利部陳時中部長擔任指揮官,行政院長蘇貞昌院長特別指示各部會務必嚴守國門,全力防疫、紓困跟振興。

    發布單位:衛生福利部

    2020.03.01:1.4.0 回報、營業時段與廣告

    新增回報號碼牌制度的功能,不少藥局備註依然空白或未提及是否採用號碼牌,若能回報一個指標性的資訊,相信可以再消弭一些惱人的情形;這個版本亦加入了藥局營業時段,雖然開放資料不是以詳細的時間呈現,但起碼知道營業日,聊勝於無。此外也加入了廣告,預計接下來會開始支付下個版本所使用的網路服務費用。

    2020.03.05:全國各販售口罩據點每日供量提升

    全國各販售口罩據點每日提供成人口罩增為600片、兒童口罩增為200片。成人口罩每人購買量:7天3片。兒童口罩每人購買量:7天5片。

    發布單位:衛生福利部

    2020.03.05:1.5.0 口罩存量紀錄

    看到有人用銷量斜率去估算是否有口罩,便覺得庫存紀錄可以利用一番。一筆資料與一堆資料最大的差異是:能看到數字變動;在沒有藥局備註的情況下,可以直接推測「可能的販售時間」與「是否要抽號碼牌」,這是第一次真的有解決問題的感覺。

    2020.03.11:全球大流行

    WHO正式宣布新冠病毒疫情進入「全球大流行」

    發布單位:衛生福利部

    2020.03.12:口罩實名制 2.0

    為了改善口罩分配不均的問題,及讓沒時間排隊買口罩的上班族、學生等族群便於購買口罩,經過政府、民間業者資訊人員日以繼夜開發測試,推出「口罩實名制2.0」,除了現有健保特約藥局及衛生所等實體通路外,新增線上預購通路,民眾可透過健保卡、自然人憑證登入平臺,或可藉由健保快易通行動APP進行認證預購。

    發布單位:衛生福利部

    2020.03.18:停權

    違反 Google Play 政策而被下架,人數歸零;因為口罩地圖搞得自己身心俱疲,而且我也在口罩實名制 2.0 實施後買到口罩,這時已經該讓口罩地圖退場了,就沒有很積極處理重新上架事宜。

    產品規劃

    需求分析

    見下述文章:

    觀察競品

    我每天會觀察各種口罩地圖是否有更新,若有,那是更新了什麼內容?這會影響到我的 App 嗎?若對方做得很好,我有辦法做得一樣甚至是超越對方嗎?最重要的是:當時沒有一個口罩地圖解決問題,我一直在追尋解決問題的方法,最後我在一個競品上看到了解答。

    決勝點

    最終還是回歸到產品的本質:是否能解決問題。我最初做的差異化是回報系統,只要有人回報這間藥局的資訊,App 就提醒大家要注意。這件事由 Android 單一平台來做其實很冒險,因為回報量要夠大,這件事才有意義,沒做 iOS 版代表直接捨棄一半的量(台灣雙平台的使用者比例接近一比一)。

    後來,我注意到有人討論用庫存斜率來算營業時間,同時間我也在競品中找到這個功能:庫存量紀錄。記錄過去的庫存變化,只要數量在固定時間雪崩式下降,幾乎可以斷定那時間點是號碼牌制度的藥局在大量刷健保卡。我只要去找那些庫存緩慢下降的藥局,就可以買到口罩。於是我花了 1 個晚上複製這個功能,發佈後,3 天內衝上了 Google Play 的免費排行榜第一名。

    觀察指標

    每日新用戶

    取自 Google Play,從上架到停權的區間。

    峰值在 3 月 7 日,當天有 7076 位新用戶。

    活躍使用者

    Google Analytics 整合在 1.3.0,2020/2/21 發布。

    平均參與時間

    留存率

    固定每隔 7 天會有個小峰,猜測是「七天內不得重複購買」的影響,剛好都是週四,口罩實名制實施第一天也是週四。

    使用者男女比例

    使用者年齡分佈

    我的 App 字體大小偏大,因為我的主要使用者應該都有眼部老化的症狀。

    版本數

    下架前共發布 15 個版本,8 個功能上線、6 個問題修正以及 1 次體驗改善;平均算下來,每 2.8 天我會發布一個新版本。最緊湊時,平均每天上架 1 個版本。

    GitHub repo commits

    貢獻無數個平日夜晚以及週末。

    Firebase 用量

    用於回報功能以及庫存紀錄,只有記錄到三月用量。

    結語

    1. 跟風要快,個人開發者的好處是:企業、組織還在討論時,個人開發者已經做出東西了。
    2. 做正確的事情不一定成功;複製對的事情不一定失敗。
    3. 失敗就換個角度,試到成功為止。
    4. 當時的網站解決方案還是比 App 流量多上數十倍,可以思考下:體驗與流量之間該如何平衡。
    5. 當全世界跟你作對時,先好好睡一覺。

    後記

    當時歷經使用者罵口罩地圖不準、藥局業者說口罩地圖造成困擾,到最終 App 被下架,自己當下的狀況並不是很好。我對這個 side project 的感受有一部份滿負面的,尤其是看 Google Play 評論時,玻璃心碎一地。

    相關連結

  • foodpanda 等到店家打烊還沒送餐會發生什麼事?

    foodpanda 等到店家打烊還沒送餐會發生什麼事?

    2 月 22 日我經歷了工作、印尼文課、工作、英文課,在吃飯時間都沒有好好進食,這意味著我離開公司後需要高熱量食物撫慰心靈。我在路上用 foodpanda 點了漢堡王,預計回到家時,餐點會躺在管理室,到時把袋子拎上去就可以開始我的追劇行程;一切看似完美,但我沒料到這次的訂餐體驗會出乎意料。

    事發經過

    我在八點半訂餐,若按照慣例,餐點應該會在半小時內送達我家。九點左右,我發現這次外送時間比較久。到了九點四十,我開始按耐不住,因為漢堡王已經打烊了;於是我跟 foodpanda 的客服人員確認狀況,當時客服回覆:餐點等待外送中,為了補償我的久候,會發一張折價券給我。

    這幾天比較冷,我猜測是沒外送員接單,就先去樓下超商買泡麵充饑了。十點半,漢堡王的員工來電,說我的餐點遲遲未有外送員來送單,感到非常抱歉,餐點因為冷掉而重做、汽水也沒氣了,希望我不要給他們負評;他說已經跟 foodpanda 聯絡好幾次了,但一直等不到人,等他十一點下班,會親自送餐到我家。

    結束通話後,我再次聯絡 foodpanda 客服,這個問題他們也沒有解決方法,只重複貼罐頭訊息給我:這是內部高層的議題,無法透露更多。十一點,我在樓下從漢堡王的員工手中接過餐點;沒多久,我又接到一通電話,這次是 foodpanda 外送員。對方說漢堡王已經送餐給我了,他會再跟 foodpanda 反映這個問題;而我則是眼睜睜看著 foodpanda app 的地圖,外送員騎車到我家樓下,完成一張空氣訂單。

    解決方案

    foodpanda 的處理方法清楚明瞭:只要餐點做了就沒有取消的方法,不論是 B 端或 C 端客戶都無法阻止這件事,唯一的解答就是完成訂單,簡單暴力。

    若我是 foodpanda,我也不想處理取消訂單,退費只有全退跟不退,中間的損失是誰要吸收?再來發票的處理方法、外送單的移除……等,每件都是麻煩事。反正我丟一張折價券出去,剩下的你們自己想辦法,這個解決方案就是讓 B 端及 C 端客戶吸收剩下的成本,在流程異動最小的情況下解決問題,很有效,也很霸道。

    結語

    目前餐點外送服務競爭激烈,就我所知:Foodpanda 算是收費較低廉的選擇。在削減成本的情況下,只要出了亂子,苦果就會反映在客戶身上。這件事情客服不會跟你說、官網問與答也不會寫明,唯有親身經歷才會知道。

    後記

    1. 漢堡王來電時,對方語氣非常慌張,我花了不少時間安撫對方。
    2. 網路上提到的反制方法:改用現金付款。
    3. 這次事件我沒有對任何人發脾氣。
    4. 那份套餐被我當隔天的晚餐。
    5. UberEats 取消訂單很阿莎力,但折扣碼只有天選之人才能兌換,非常無情。
  • 手臂上的小精靈

    手臂上的小精靈

    這是我在 2019 年 3 月刺下的圖案,當時剛好喜歡的刺青師來台,想也不想就直接預約了。這篇文章原本只有在我的 Instagram 發布,但總覺得也要收錄在個人主頁才對。

    源由

    莫約在公元前五世紀,不列顛群島有一群人不拜天地、不敬鬼神,但他們相信萬物有靈,尤其以樹木為尊;若熟稔凱爾特神話,對於德魯伊(Druid)應該不陌生。德魯伊生活在巨木群裡,與動物為伍,擁有與萬物對話的能力,在凱爾特部落中,德魯伊除了是僧侶,也是醫生、教師、先知與法官,在部落中享有特權,但成為一名德魯伊並不容易,凱撒曾在高盧戰記提到:「成為合格的德魯伊教徒之前,至少要修行二十年。」 十八世紀初,英格蘭考古學者在康沃爾郡的洞穴發現了一系列的壁畫,初步研究僅推判是德魯伊信仰的遺址;直到數年前以現代檢測儀器掃描後,得知這些壁畫出自鐵器時代,正是不列顛群島德魯伊信仰的全盛時期。

    這些壁畫記錄了德魯伊與萬物共榮的場景,其中頻繁出現一種未知生物,考古學者稱之為:小精靈(Sprite)。小精靈是德魯伊信仰尊崇的樹靈,掌管植物消長,並提供了凱爾特部落穩定的糧食來源。

    小精靈約五到六寸高,頭上是植物的幼苗,待生長穩定後就會將其移植到適合成長的土壤中。手持木杖以聖樹枯枝製成,沒有魔力,但具有紀念價值,木杖較粗的部位可以用來修繕房屋或敲打開心果。果食主義(Fruitarianism)執行者,柑橘類水果是禁忌,食用後不會死亡,但汁液噴到眼睛會造成業火焚燒靈魂的痛楚,尤以檸檬為最。

    凱撒大帝征服高盧地區後,基督教跟著傳入,凱爾特的德魯伊信仰也因此逐漸消散,小精靈族群隨著式微的信仰而凋落。現代德魯伊教徒(Neo-druidism)雖恢復了古老的儀式,但再也沒有人見過任何小精靈。

    一些事實

    上面的內容是我唬爛的,我從維基百科蒐集資料拼湊而成。每次有人看到我的刺青,就會想聽這個圖案的故事,所以就為小精靈編了一個。這年頭刺青好像一定要有個什麼故事,沒有,單純刺帥的,我就是這麼膚淺。

    我以為刺青之後會帶來諸多困擾,截至目前為止,經歷過很多事件,包含面試、泡湯、出國⋯⋯等,但實際上讓我覺得這個刺青不討喜的案例只有兩件:有次我在印尼跟財務長吃飯,財務長是韓國人,用餐到一半,財務長突然說:「你刺在這麼明顯的地方啊?刺在上臂比較不明顯。」另一次則是日本朋友來台,我們一起逛夜市時,我突然提起這個刺青,他很震驚的說:「你居然有刺青?在日本是黑道才會刺青。」但上述兩起事件都沒有影響到我們的交情就是了。

    小時候被長輩灌輸:刺青是𨑨迌囡仔在做的事,每次看到有刺青的人都很害怕被傷害。長大後發現:讓我們關聯負面印象的是擁有刺青者的所作所為,惹是生非的人就算沒有刺青,也不會討人喜歡。若我們看待所有事物都可以聚焦在本質,那很多東西都顯得沒那麼可怕。

    結語

    若小精靈真的存在,那我期待自己可以跟小精靈一樣成為種樹的人,這一路走來都有貴人相助,希望某天我也可以成為他人生命裡的貴人。

  • 男性飄眉初體驗

    男性飄眉初體驗

    我早就知道自己眉毛有斷眉的狀況,因為有時拍照可以明顯看到眉毛只剩三分之一,但我也沒有做什麼補救措施。直到某次剪髮看到設計師的眉毛有特別處理,一問之下才知道飄眉、霧眉的處理手法。雖然當時沒有直接預約,但也在我心中種下一顆種子。

    像這張照片的眉毛就只剩短短一截。

    霧眉?飄眉?

    霧眉跟飄眉差異在於呈現的樣貌,霧眉如同其名,看起來就是霧狀的外觀,偏眉粉的感覺,看起來妝感會比較明顯;至於飄眉,它看起來就像毛髮一般,屬於線條狀的仿真毛流。喜愛妝感的人通常會選擇霧眉,並搭配一些飄眉;喜歡自然的人,就會以飄眉為主。

    這類的半永久紋身方法其實很像刺青,都是將顏料透過針頭打進皮膚裡面。只是刺青是刺進真皮層,比較深;飄眉、霧眉則是刺進表皮,比較淺層,所以過八個月至一年就會代謝掉。

    過程

    Instagram 這陣子莫名一直收到霧眉、飄眉的廣告,而且還是男性為主的,讓我又想起自己眉毛的缺陷。剛好女友最近做完霧眉很滿意,我便打鐵趁熱,趁勢預約一波。由於我平常沒有化妝的需求,因此這次只做了飄眉。

    大致流程如下,有點忘記順序,應無大礙:

    1. 討論喜歡的眉型
    2. 描出合適的形狀
    3. 拔掉雜毛
    4. 軟化眉毛
    5. 開始飄眉
    6. 敷凝膠舒緩不適
    7. 修正、調整不足之處
    8. 敷凝膠舒緩不適
    9. 收工回家

    修護保養

    術後接著就是傷口保養,像刺青完我們會擦凡士林,飄眉後也有類似的注意事項;下列事項跟傷口有關的我大約做了一週,保養類的就是盡量長期遵守。

    1. (傷口)洗臉避免用洗面乳來回搓揉眉毛
    2. (傷口)可正常洗卸,建議用中性洗面產品
    3. (保養)眉毛避免用含酒精、美白或酸類的保養品
    4. (傷口)早晚用生理食鹽水濕敷眉毛
    5. (保養)眉毛用毛巾吸水,不大力擦拭
    6. (傷口)擦修護凝膠

    保養類的看起來偏向避免刺激或是任何會加強皮膚代謝的事項;滿合理的,我也不希望不到半年就因為自己手賤就讓顏料被代謝掉。

    Before / After

    比較稀疏的地方被填補起來,因為有修眉,所以眉型又更俐落一些。

    後記

    我自己算滿意這次的飄眉經驗,因為憑著自己喜歡較短的眉毛就做下去了,忘記自己臉胖的事實;事後覺得眉毛做長一點會比較適合我的比例,之後補色的時候想再微調一下長度。

    P.S. 後來上班時,沒有同事發現我去飄眉,原以為眉毛會變得像蠟筆小新一樣粗黑。