Tuesday, May 18, 2021

postwalk

如果說, sequence 是 Clojure 世界裡最常用的「走訪抽象」、而 map 是對於這種抽象最佳的「轉換函數」的話,那如果把 sequence 換成 tree 的時候,那 map 應該要換成什麼呢?應該是 postwalk 。從這個上述的角度來看的話, postwalk 可以視為是一種 map 的 generalized form 。


我最近有遇到一種情況,我需要在 backend side 生成 hiccup form,然後,將這個 hiccup form 送到 frontend side 。然而,我卻又需要在 hiccup form 裡去呼叫 reagent form 1 的函數。所以我的作法就是:在 backend 生成 hiccup form 時,對需要呼叫 reagent form 1 函數的地方,先塞一個「佔位」的 keyword 。等到 hiccup form 被送到 frontend 時,再將該 keyword 轉換成 reagent form 1 。


上述的那個轉換操作,我就是用 postwalk 來做,非常的直覺與容易。

Thursday, May 6, 2021

walking skeleton first

最近學到一個概念: walking skeleton first

什麼是 walking skeleton 呢?
它是以最少量的成本打造的程式碼,並且滿足下列三項條件
  • 自動化構建程式 (build)
  • 自動化布署程式 (deploy)
  • 自動化的端對端測試 (end-to-end test)
在開發新 project 的時候,應該秉持著 walking skeleton first 的概念,先把 skeleton 打造出來,再來補足核心的功能。

Tuesday, May 4, 2021

ClojureScript library 簡單整理

gaiwan.co 工作一陣子了,工作上常用到的 ClojureScript library 其實值得整理一番:

  • lambdaisland/fetch               js fetch 的 wrapper ,而且 default 對 transit 有效
  • athos/kitchen-async            ClojureScript 的 promise library
  • applied-science/js-interop   處理 ClojureScript 與 js 交互溝通的問題
  • lambdaisland/glogi               log 
  • alandipert/storage-atom      提供 atom 的介面,將資料存到 web storage 裡。