黃金週特輯 — 一場自我驅動的黑客松

愷開
12 min readMay 6, 2020

--

一直以來,我都覺得自己是「收穫」大於「付出」的人。你可以參考我在前幾年寫的北漂青年在台北生活的這幾年

從小到大因為家境的關係,所以時常要靠補助才能讓生活過得比較寬裕一些,我算是比較幸運的那一群,家境雖然不好,但還沒有悲慘到家徒四壁、一貧如洗。這個情況到了大學二年級左右,比較有能力可以靠自己養活自己時,狀況才開始逐漸改善。

所以近幾年也開始思考,除了工作本身之外,透過自身的能力,還可以怎樣幫助別人?

當時 huli 可以說是影響我很深,那個時期他做許多免費的程式教學和撰寫大量的初學者導向的文章,來幫助他們入門寫程式或是轉職,甚至還開始了「程式導師實驗計畫」。

額外一提,如果你很想要轉職成(前端)工程師的話,這個計畫非常值得一看,除了課程本身非常紮實之外,你幾乎可以用沒有風險的方式來報名這個計畫。

回歸主題,答案不是很明顯嗎?

對啊,我是一位工程師,會寫一些程式,那麼程式就是我最大的武器呀!只要有電腦跟網路,就可以善用程式碼來幫助身邊的人!雖然不是手把手地去教初學者,但的確也可以用這種方式來幫助別人。

也因此我逐漸找到可以嘗試的目標,就是用程式做一些可以提供實質幫助的事。雖然人微言輕,有時候不一定能引起什麼廣大迴響或關注,但至少在自己做得到的範圍貢獻,不就是一件很棒的事情了嗎?

在這之前我也想先推廣一下我以前曾經做的事:

1. 勞工大代誌(2017)

https://kjj6198.github.io/pround-of-labor/app/

這是我在 2017 年勞動節時做的一個小專案。勞基法已成立 33 年,台灣的勞動環境仍有很大的改善空間。 儘管如此,勞工意識逐漸抬頭,老前輩們留下的足跡不可置否。 這些豐碩的成果是靠他們的汗水、鮮血、甚至性命換來的。

當時覺得「啊,都不知道以前台灣發生過怎樣的事」,就這樣當成假日在過,覺得有點可惜,所以花了一些時間整理了政府的資料,把它做成了一個網頁。雖然製作的時間很趕,程式碼醜醜的,但我相信或多或少可以幫助到一些人理解背景,或是逐漸重視勞動環境的重要性。

2. 八百屋(2017)

八百屋也是我在 2017 年做的專案,他是一個週刊服務,會在每週寄送關於日本文化、日語學習、日劇電影相關的資訊給你,裡頭都是我整理的資料。雖然已經有一段時間沒有更新(抱歉因為時間分配的關係,還沒有更新網站),不過從讀者的回饋表單看來,它的確幫助了一些人,這讓我覺得非常開心。

另外像是比較小的事情還有:

  • 因為 Din Ben Dong 的訂餐介面很難用,但公司的工程師們又特愛喝手搖飲料,因此我寫了一個簡單的訂飲料系統幫助大家方便訂飲料。
  • 透過簡單的小工具幫忙解決運營人員遇到的問題

看到別人的問題可以被解決,是我覺得很開心的事,雖然不一定每次都有完美的結果,但我認為踏出這一步是很重要的事情。

自我驅動的黑客松

黃金週的期間因為要 stay caption 的關係,所以就把這幾天的規劃全部用自己預定的計劃塞滿,原本以為自己可以輕鬆達成,但是實作之後才發現各種細節,以至於整個黃金週變成了黑客松。

主要都是以能夠實質幫助到別人為主:

1. 貢獻 svelte

第一件事就是貢獻 svelte 這個開源的前端框架,當時是想要研究原始碼並且順手解一些比較簡單的 issue,後來發現在 a 標籤 href 的判定當中,a11y 的部分沒有針對 javascript:void(0) 做處理,因此就順手提了一個 pull request 貢獻,最後也順利被 merged 了。

我覺得 svelte 是我目前用起來最順手的框架,它提供了做 SPA 所需要的一切元素,同時還有非常小的 bundle size,這點讓我相當喜歡。

為什麼 javascript:void(0) 不好呢?影響最大的就是輔助使用(screen reader),當你啟用 screen reader 時,使用者會聽到他是一個連結,既然他是一個連結使用者就會期待他是要做連結相關的動作,但是在 href 加入這個標記,會讓 a tag 本身的功能失效。

如果只是為了做 onClick 的動作,那麼直接採用 button 就可以了。

雖然只是簡單的改動,但是我覺得如果因為這樣子而讓更多開發者去做一些對 screen reader 友善的操作,也是好事一樁。也因為這個 pull request 的原因,我開始去看更多有關 a11y 的知識。發現有很多是只要開發者簡單加幾個 aria-* 的標記,圖片記得加個 alt 等等,就可以有很大的改善。

當然要深入也可以很深入,但開發一個無障礙的網頁並沒有想像中的那麼難。

2. 動物森友會圖鑑整理

為了查詢魚類跟昆蟲的價格跟出現時間,我在網路上找了一些資訊,發現網頁不是載入太久、廣告很多,不然就是介面做得不是很好用,每次找這類資訊就覺得好痛苦。

所以就隨手把動物森友會目前蒐集到的魚類做成一個超小型網頁(只有 7KB,不含圖片),沒有廣告、沒有追蹤,只有純純的魚跟昆蟲。

雖然在網路上可能也已經有類似功能的網站了,不過再多一個好像也沒什麼不好,而且如果真的可以省下大家的時間還有體驗,相信遊戲玩起來也會更開心。

3. 福岡武漢肺炎疫情情報整理

日前雖然有東京的防疫網站,但是我目前人在福岡工作,只想要看福岡的資訊時,操作就沒有那麼直覺,所以我透過了 App Engine、Cloud Scheduler、Github Actions 快速建立了一個專門只記載福岡疫情資訊的網頁,並且加上了 i18n 方便各國人士搜尋。

雖然時至五月份已經有點晚了,我想至少為了防疫還是可以盡一份微薄的心力。

4. 自幹王 / BUILD YOUR OWN X

What I cannot create, I do not understand

在防疫期間,工程師宅在家不知道要做什麼時候,剛好是個很棒的時機點檢視一下自己對於計算機科學知識。所以我就把原 repo 的 README 文章轉換成 HTML 之後再用 svelte 加強網頁版的體驗。同時也盡可能地加強了 screen reader 的操作,甚至還自己用 screen reader 操作了一遍。

原始碼:

5. 互動式自我介紹

我是一個非常不擅長自我介紹的人。每次自我介紹時,如果對方的反應很冷淡,我就會覺得非常尷尬然後想要匆匆帶過,所以最後都只講名字,出身,職業然後就這樣草草帶過了。

但是又覺得自我介紹實在是重要到不行,所以我花了幾天的時間把有關於我的事情寫成了網頁。

雖然不知道是不是主要因素,但我覺得如果只有純文字加一些排版,似乎不夠吸引人,所以我花了一些時間把它打造成互動性比較高,在架構上可以很輕易做調整的網頁版。

覺得自己花了很多時間幫公司產品解決問題,卻沒有什麼時間自己動手幫自己做些什麼事,於是打算做一個自己也會想要看的自我介紹。這個網站整理了我可以想到有關於我的事,還有我曾經做過哪些事,希望你看完後大概對我有個想像。

做這件事的目的雖然跟幫助別人沒有什麼直接關聯,不過如果以後需要請求別人幫助,有一個清晰明瞭的自我介紹可以幫助雙方快速認識彼此,我覺得也不錯。

雖然每個網頁的規模不大,都只有短短一頁,但是從構思、配色、設計、實作、部署,全部自己做還是花了不少時間,也讓我整個黃金週都處於一個睡眠不足的狀態。

前面有提到人微言輕,雖然盡力在做這些事情,但是如果觸及率不夠的話,那麼被看到的次數也有限,所以最近也開始在經營其他管道,像是 YouTube、Instagram 等等。

反思

1. 為什麼不早點開始?

在寫這些東西的時候,常常發現如果當初早點做的話就不用拖到現在了,原因之一在於分配零碎時間,另外一個原因就是怕麻煩。覺得寫網站本身除了要寫得好看之外,還要用 SEO、手機版、a11y 等等,想一想之後就犯懶。例如疫情網站明明可以早點做的東西卻拖到現在就是這個原因。

為了避免這樣的情況發生,我決定這次黃金週過後要把自己製作網站的流程都自動化,最好是可以一鍵生成,方便快速開發。同時順便紀錄開發文件以免之後忘記。

部署跟 serverless function:

CDN:

  • 用 AWS S3 設定跟 API 會比較方便(跟 GCS 比起來)
  • Cloudfront

Scheduler

  • 其實專案小的話可以直接放樹莓派 XD
  • Cloud Scheduler

資料儲存

  • 資料量小,沒有什麼關聯性問題的話直接用 mongo 就好

2. DevOps

雖然在公司內部、工作上都會使用工具來幫助自己快速部署與開發,但畢竟開機器要錢,因此個人小專案的技術線會完全跟公司不一樣,這是我當時疏忽的事情。像是福岡疫情網站因為要定期去抓疫情資料,所以試用了一下 Cloud Scheduler 的功能。

因為被 App Engine 的部署方式吸引到所以用了 App Engine 來實作後端。因為是第一次碰的關係,設定上還是花了不少時間去調整,像是搞清楚 app.yml 跟 dispatch.yml 的規則與寫法。也因為這個緣故開發時間變長許多。而且或許還要付一筆維護機器的費用。

實際上線之後,我發現他的暖機時間好長,而且 DNS 不知道為什麼有時候會失靈。以後如果有類似需求,如果要定期工作的話我會用 Cloud Scheduler + now 來部署,覺得小型專案不太適合用在 app engine 上,now 的設定相對無腦好用多了。

另外就是 App Engine 在彈性環境跟標準環境下部署時間差超級多,這點我剛開始沒發現,每次部署都要花 10 分鐘左右!換成標準環境後只要 1 分半就可以部署好了。

service: default
runtime: nodejs10
env: standard <<-
env_variables:
- 設定環境變數

不過也因為這樣學到了新工具啦,像是 Github Actions 搭配 App Engine 部署,也順便把它寫成文章記錄下來了。

3. 共用元件

因為是採取極簡化的關係,元件什麼的都盡量自己開發,但實在有太多共同、類似的元件在每個專案裡出現了。每次重寫真的是時間的虛耗,雖然黃金週已經要結束了,但還是想要趁現在好好拆出一些自己常用的元件和樣式。在製作這種小型網站時我的原則是不用第三方套件就盡量不要用,除非很小或是自己做要花很多時間處理,這個現象也讓我耗費蠻多時間的。

4. 時間管理

反觀我從黃金週開始的作息,實在是非常殘不忍睹。每天就是從早寫扣寫到晚,給自己太大的進度壓力導致我沒辦法很有餘裕地做好每件事情。寧願每天做一點點也不要到假日犧牲掉睡眠品質跟休息時間來做。

總結

這次的黃金週我覺得過得非常紮實,黑客松式的寫扣也讓我省思了以前到現在的一些壞習慣,這些網站隨著時間可能會逐漸褪去,但是我覺得這次的經驗帶給我的東西也蠻多的。雖然還是有很多計畫中的事沒辦法順利在期間內完成,但有時候還是讓自己喘口氣吧。

--

--

愷開

(Medium 不再更新文章) https://blog.kalan.dev 軟體工程師 / Working in Fukuoka, Japan。 平時喜歡用程式探索各種可能性,用網頁說故事、創造工具,邁向更好的生活。