Clojure

Ona

2017 年 4 月 13 日

今天我們與 Peter Lubell-Doughtie 談論 Ona

Ona

你使用 Clojure 和 ClojureScript 多久了?

Ona 使用 Clojure 和 ClojureScript 已有三年。我們在建立資料收集和管理平台的前端更新版本時開始使用它。大約五年前透過 Cascalog 接觸到 Clojure。自從在大學部學習並在產生 s-expression 以發展代理溝通語言的遺傳程式設計研究專案中使用它以來,我就對 LISPs 有好感。

你的團隊中有多少人使用 Clojure 或 ClojureScript?

任何時候,我們大約有 4-6 位團隊成員全職使用 Clojure 和 ClojureScript 進行專案;這約佔我們工程團隊的三分之一。我們使用許多不同的編輯器,包括 Meow,這是由我們的一位工程師建立的 emacs 設定檔。

你使用 Clojure 或 ClojureScript 建立什麼產品或服務?

我們正在建構一個資料收集、管理和視覺化平台,目標為人道主義和國際發展組織。這些組織,例如世界糧食計畫署和聯合國兒童基金會,使用我們的平台在現場進行持續調查。現場資料會與歷史資料即時合併,以建構他們已投資或正在執行的專案的全面概觀。這讓組織能看見問題發生時,並進行調整,例如指示醫護人員前往人手不足的診所,或指示檢查員前往損害較嚴重的建築物。Clojure 和 ClojureScript 元件是一個無狀態層,所有資料的持久性和擷取都透過我們的 API 客戶端 Milia 進行調解,並在我們的 ClojureScript 資料檢視器 HattiVega-viewer 中進行視覺化。

你最喜歡使用哪個 Clojure 或 ClojureScript 函式庫?

在 Clojure 方面,我們從 Ring 中介軟體 Optimus 受益良多,它會將我們所有的資產打包並最佳化。

在 ClojureScript 方面,我們是 Om 的早期採用者,並廣泛使用它來呈現反應式檢視。我們將它與基於 Hiccup 的標記一起使用,其中一些與 Clojure 共用(我們希望共用更多)。

對於我們在 Clojure 和 ClojureScript 中使用的函式庫,我們大量使用 i18n 函式庫 Tempura,並結合 自訂輔助程式 從翻譯檔案載入所有文字。我們也在建置步驟中執行許多靜態分析器,包括 KibitBikeshed,以找出重複並強制執行統一的程式碼樣式。

使用 Clojure 或 ClojureScript 對你來說最有價值的是什麼?

一致性和近似純粹性對我們來說最有價值。使用 Clojure 和 ClojureScript 時,我們可以查看前端或後端,實際上是我們程式碼庫中的任何地方,並知道它遵循同一組簡單規則。我們可以追蹤資料流程,並明確地看到轉換是如何發生的。

這些功能在我們與經驗較少的工程師或沒有函式式程式設計背景的工程師合作時也有所幫助。在 Clojure 中工作,使用嚴格的靜態分析器,可以大幅限制解決問題的可能方法,並排除一堆反模式。

你的堆疊是什麼?

我們使用 NGINX 作為反向代理,將要求傳遞給我們的應用程式伺服器,該伺服器執行基於 Ring 的 Jetty 伺服器,並使用 Compojure 將要求路由到一組檢視。我們使用 Enlive 和偶爾使用 Hiccup 在伺服器端呈現檢視。所有樣式都用 SCSS 編寫。客戶端使用 Om 使用 Secretary 進行路由和 Sablono 進行標記來呈現 React 檢視。我們使用基於 core.async 的 API 客戶端 Milia 從客戶端與 API 資料進行互動。

對於測試,我們自行主機 Drone 來執行持續整合建置。在執行測試套件之前,程式碼必須通過 Sass-lintBikeshedcljfmtEastwoodKibit 和生產 ClojureScript 建置(它會向我們發出任何進階編譯問題的警示)。我們在 Midje 中撰寫 Clojure 測試,並在 cljs.test 中撰寫 ClojureScript 測試。

使用 Clojure 或 ClojureScript 對您的業務有何價值?

由於我們的平台在全球用於改善兒童和孕婦健康、治理、農業、基礎設施存取和政府問責制,因此平台中的錯誤會造成嚴重的後果。例如,施打的疫苗減少和配發的必要資源減少(例如水和毯子)。從非常實際的角度來看,我們的錯誤意味著拯救的生命減少。使用 Clojure 和 ClojureScript 簡化了我們處理來自世界各地即時資料串流的方式,並幫助我們將錯誤降至最低。如果您有興趣與我們合作,請與我們聯繫

如果您想分享您的 Clojure 故事,請填寫此表單