Flutter 推出 1.0 版本

Screen Shot 2018-12-05 at 10.25.34 AM

很高興看到台灣時間 12/5 號 Flutter 正式推出 1.0 版本,相信很多人都不知道什麼是 Flutter,簡單來說開發者只要學會 Flutter 就可以維護一套程式碼,並且同時編譯出 iOS 及 Android 手機 App,其實就跟 Facebook 推出的 React Native 一樣,但是 Flutter 的老爸是 Google。相信大家很常看到這一兩年內,蠻多新創公司相繼找 RN 工程師,而不是分別找兩位 iOS 及 Android 工程師,原因就在後續的維護性及成本。而 Flutter 也有相同好處。我個人覺得 RN 跟 Flutter 比起來,單純對入門來說,RN 是非常好上手的,但是如果您考慮到後續的維護成本,我建議選用 Flutter,雖然 Flutter 要學一套全新的語言 Dart,在初期時要學習如何使用 Widgets,把很多元件都寫成 Widgets 方便後續維護。但是在 RN 後期的維護使用了大量的第三方 Library,您想要升級一個套件可能影響到太多地方,造成不好維護。語言選擇 RN 可以使用純 JavaScript 撰寫,或者是導入 JS Flow + TypeScript 來達到 Statically Type,而 Flutter 則是使用 Dart 直接支援強型別編譯。如果現在要我選擇學 RN 或 Flutter 我肯定選擇後者。那底下來看看這次 Flutter 釋出了哪些新功能?對於 Flutter 還不了解的,可以看底下介紹影片。

[Read More]

Drone 支援單機版安裝 (內附影片)

Screen Shot 2018-11-26 at 11.40.28 AM

在上週寫了『Drone 推出 1.0.0 RC1 版本』介紹,裡面提到一個很重要的改變,就是 Drone 現在支援『單機版』安裝了,你會問什麼是單機版安裝?以前不就是可以支援在單台機器把 Drone 給架設起來,那在 1.0.0 RC1 版本指的是什麼意思?在之前的版本,要完整的安裝完成 Drone,需要架設 drone server 及 drone agent,但是在 1.0 版本之後,只需要一個 drone 服務,裡面就內建了 server 及 agent,這很適合用在團隊非常小的狀況底下來快速安裝 drone,假設團隊專案很多,或者是成長很快,建議還是將 server 及 agent 分開架設,未來只需要擴充 agent 即可,底下來看看該如何架設單機版 drone。

[Read More]

開源專案 Drone 推出 1.0.0 RC1 版本

Screen Shot 2018-11-19 at 10.12.47 AM

終於看到 Drone 作者 bradrydzewski11/7 號釋出 1.0.0-RC1 版本,此版本尚未開源在 GitHub 上面,所以目前只能透過 docker 方式來安裝。另外如果您正在用 0.8.x 版本的,不建議現在轉換到 1.0 版本,原因有幾點,第一作者尚未公開原始碼,第二現在公開也才一週而已,還有很多 bug 以及用法都沒有在線上 document 寫很清楚,第三就是作者尚未提供工具從 0.8.x 升級到 1.0.0 RC 版本。根據上述的原因,建議大家先不要轉換,當然如果團隊尚未導入 CI/CD 的話,我強烈建議使用 1.0.0 RC-1 版本。底下來看看 1.0.0 RC-1 做了哪些變動?

[Read More]

高雄 Mopcon 濁水溪以南最大研討會 – Drone CI/CD 介紹

Screen Shot 2018-11-06 at 1.16.22 PM

今年又以講者身份參加 Mopcon 南區最大研討會,此次回高雄最主要推廣 Drone 這套 CI/CD 平台。大家可以從過去的 Blog 或影片可以知道我在北部推廣了很多次 Drone 開源軟體,唯獨南台灣還沒講過,所以透過 Mopcon 研討會終於有機會可以來推廣了。本次把 Drone 的架構圖畫出來,如何架設在 Kubernetes 上以及該如何擴展 drone agent,有興趣的可以參考底下投影片:

[Read More]

用 10 分鐘部署專案到 AWS Lambda

Screen Shot 2018-10-24 at 9.37.49 AM

看到這標題也許非常聳動,也可能覺得不可思議,今天來探討如何將專案直接部署到 AWS Lambda 並且自動化將 API Gateway 設定完成。當然要做到完全自動化,必須要使用一些工具才能完成,本篇將介紹由 TJ 所開發的 apex/up 工具,如果您不熟悉 EC2 也不太懂 Command line 操作,本文非常適合您,不需要管理任何 EC2 機器,也不需要在熟悉任何 Linux Command 就可以完成簡單的專案部署。首先為什麼我選擇 apex/up 而不是選擇 apex/apex,原因是使用 up 工具,您的專案是不用更動任何程式碼,就可以將專案直接執行在 AWS Lambda,那 API Gateway 部分也會一並設定完成,將所有 Request 直接 Proxy 到該 Lambda function。如果您希望對於 AWS Lambda 有更多進階操作,我會建議您用 apex/apexServerless。您可以想像使用 up 就可以將 AWS Lambda 當作小型的 EC2 服務,但是不用自己管理 EC2,現在 up 支援 Golang, Node.js, Python 或 Java 程式語言,用一行 command 就可以將專案部署到雲端了。

[Read More]

Go 語言 1.11 版本推出 go module

Go-Logo_Blue

本篇來聊聊 Go 語言在 1.11 版本推出的 新功能,相信大家也許還不知道此功能是做什麼用的,我們來回顧看看在初學 Go 語言的時候,最令人困擾的就是 GOPATH,所有的專案都必須要在 GOPATH 底下開發,然而在更久前還沒有 Vendor 時候,兩個專案用不同版本的同一個 Package 就必須要使用多個 GOPATH 來解決,但是隨著 Vendor 在 1.5 版的推出,解決了這問題,所以現在只要把專案放在 GOPATH 底下,剩下的 Package 管理都透過 Vendor 目錄來控管,在很多大型開源專案都可以看到把 Vendor 目錄放入版本控制已經是基本的 Best Practice,而 go module 推出最大功能用來解決 GOPATH 問題,也就是未來開發專案,隨意讓開發者 clone 專案到任何地方都可以,另外也統一個 Package 套件管理,不再需要 Vendor 目錄,底下舉個實際例子來說明。

[Read More]

Go 語言專案程式碼品質

本篇想介紹我在寫開源專案會用到的工具及服務,其實在編譯 Go 語言同時,就已經確保了一次程式碼品質,或者是在編譯之前會跑 go fmtgo vet 的驗證,網路上也蠻多工具可以提供更多驗證,像是:

  • errcheck (檢查是否略過錯誤驗證)
  • unused (檢查沒用到的 func, variable or const)
  • structcheck (檢查 struct 內沒有用到的 field)
  • varcheck (拿掉沒有用到的 const 變數)
  • deadcode (沒有用到的程式碼)

但是這麼多驗證工具,要一一導入專案,實在有點麻煩,我自己在公司內部只有驗證 go fmtgo vetmisspell-check (驗證英文單字是否錯誤) 及 vendor-check (驗證開發者是否有去修改過 vendor 而沒有恢復修正)。如果你有在玩開源專案,其實可以不用這麼麻煩,導入兩套工具就可以讓你安心驗證別人發的 PR。底下來介紹一套工具及另外一套雲端服務。

[Read More]

Go 語言的 graphQL-go 套件正式支援 Concurrent Resolvers

要在 Go 語言寫 graphQL,大家一定對 graphql-go 不陌生,討論度最高的套件,但是我先說,雖然討論度是最高,但是效能是最差的,如果大家很要求效能,可以先參考此專案,裡面有目前 Go 語言的 graphQL 套件比較效能,有機會在寫另外一篇介紹。最近 graphql-go 的作者把 Concurrent Resolvers 的解法寫了一篇 Issue 來討論,最終採用了 Resolver returns a Thunk 方式來解決 Concurrent 問題,這個 PR 沒有用到額外的 goroutines,使用方式也最簡單 1 2 3 4 5 6 7 8 9 10 11 12 13 14 "pullRequests": &graphql.Field{ Type: graphql.NewList(PullRequestType), Resolve: func(p graphql.ResolveParams) (interface{}, error) { ch := make(chan []PullRequest) // Concurrent work via Goroutines. go func() { // Async work to obtain pullRequests. ch <- pullRequests }() return func() interface{} { return <-ch }, nil }, }, 使用方式 先用一個簡單例子來解釋之前的寫法會是什麼形式 [Read More]

在 PostgreSQL 時區轉換及計算時間

postgres

通常在使用資料表時,都會在每一筆紀錄上面寫入當下時間,而這個時間會根據目前系統所在的時區而有所不同,當然我們都會使用 UTC+0 作為標準時區,而欄位我們則會是使用 timestamp 或者是 unix time 格式,兩者最大的差異就是在前者 (timestamp) 會根據目前系統的時區來記錄,而後者 (unix time) 則是紀錄秒數差異 (Jan 01 1970) 而不會隨著系統時區改變而變化。如果是發展開源專案,則會使用後者居多,這樣不會因為使用者時區變化,而產生不同的差異,在 Gitea 開源專案保留了兩者,但是只要計算時間則是用 (unix time) 作轉換。

[Read More]