Node.js 8 搭配 npm 5 速度

yarn-kitten-full 這個月 Node.js 釋出 8.0 版本,搭配的就是 npm v5.0.0 版本,上一篇寫到如何透過 Yarn 指令移除 devDependencies 內的 Package 套件,減少 node_modules 大小,有網友提到那 npm 5 的速度為何?其實筆者已經好久沒有用 npm 了,但是有人提問,我就立馬來測試看看 npm vs yarn 的速度,詳細數據可以參考此專案說明。測試方法如下 Continue reading “Node.js 8 搭配 npm 5 速度”

減少 node_modules 大小來加速部署 Node.js 專案

yarn-kitten-full 相信 Node.js 開發者現在大部分都在使用 Yarn 了吧?如果還不知道或無法體會 Yarn 帶來的好處可以參考之前寫的一篇『用 Yarn 取代 Npm 管理 JavaScript 套件版本』,帶你體會 yarn install vs npm install 的速度差異。本篇最主要會介紹在部署 Node.js 專案都需要把 node_modules 壓縮一起丟到遠端伺服器 (假設你不是用 Docker 部署),這時候來聊聊怎麼減少 node_modules 大小。 Continue reading “減少 node_modules 大小來加速部署 Node.js 專案”

Go 語言內 struct methods 該使用 pointer 或 value 傳值?

Go-brown-side.sh 上週末在台北講『Go 語言基礎課程』,其中一段介紹 Struct 的使用,發現有幾個學員對於在 Method 內要放 Pointer 或 Value 感到困惑,而我自己平時在寫 Go 語言也沒有注意到這點。好在強者學員 Dboy Liao 找到一篇說明:『Don’t Get Bitten by Pointer vs Non-Pointer Method Receivers in Golang』,在 Go 語言如何區分 func (s *MyStruct)func (s MyStruct),底下我們先來看看簡單的 Struct 例子
package main

import "fmt"

type Cart struct {
    Name  string
    Price int
}

func (c Cart) GetPrice() {
    fmt.Println(c.Price)
}


func main() {
    c := &Cart{"bage", 100}
    c.GetPrice()
}
Continue reading “Go 語言內 struct methods 該使用 pointer 或 value 傳值?”

用 Docker Multi-Stage 編譯出 Go 語言最小 Image

docker 之前應該沒寫過用 Docker 結合 Go 語言編譯出最小 Image 的文章,剛好趁這機會來介紹。其實網路上可以直接找到文章,像是這篇『Building Minimal Docker Containers for Go Applications』,那本文來介紹 Docker 新功能 multi-stage builds,此功能只有在 17.05.0-ce 才支援,看起來是 2017/05/03 號會 release 出來。我們拿 Go 語言的 Hello World 來介紹 Single build 及 Multiple build。 Continue reading “用 Docker Multi-Stage 編譯出 Go 語言最小 Image”

用 Go 語言打造 DevOps Bot

18190989_10210525473186864_1567687746_n 在 4/27 參加 iThome 舉辦的第一屆 ChatBot Day,我分享了如何用 Go 語言 實作 DevOps Bot,可以透過 Facebook MessengerLine Messenger API 來主動通知開發者。此議程希望可以幫助想玩 Bot 但是又不知道如何入門的開發者。如果不懂程式語言,也可以直些下載 Binary 來玩玩看。 Continue reading “用 Go 語言打造 DevOps Bot”

在 DigitalOcean 新竹社群簡介 Gitea 開源專案

gitea 很高興受到 DigitalOcean 新竹社群邀請來介紹輕量級的 Git 服務: Gitea,在不久之前筆者已經寫過一篇 Gitea 介紹,這次到交通大學宣傳這套免費的開源專案,目的就是希望台灣有更多開發者或企業可以了解用 Go 語言也可以打造一套輕量級 Git 服務,並且導入台灣的新創團隊。這次分享是透過 DigitalOcean 最小機器 (512MB 記憶體,每個月五美金) 來 Demo 如何在 Ubuntu 16.04 快速架設 Gitea 及使用 Caddy 來自動申請 Let’s Encrypt 憑證,最後搭配 Jenkins 串自動化部署及測試等…。 2017-04-23-18-18-45 Continue reading “在 DigitalOcean 新竹社群簡介 Gitea 開源專案”

五大理由從 Python 轉到 Go 語言

Go-brown-side.sh 在網路上看到這篇『5 Reasons Why We switched from Python To Go』,先發到自己 Facebook 牆上,引發討論,乾脆整理一篇 Blog 來寫自己的感想,底下五大理由讓該篇作者從 Python 轉到 Go 語言。我會針對前四點來寫心得
  1. 編譯二進制檔案 (加速部署及跨平台)
  2. 編譯自動檢查 Static 型態 (你不會把 string 欄位帶入 Integer)
  3. 效能 (Go 並發跟 Python thread 比起來節省許多資源)
  4. 不需要 web framework (Go 內建大多數 Library 像是 HTTP, JSON, HTML templating)
  5. 好用的 IDE (內文提到 Webstorm, PHPStorm) 我推薦用 VSCode
除了第五點外,其他四點個人覺得都是工程師的痛點。 Continue reading “五大理由從 Python 轉到 Go 語言”

在 Go 語言用一行程式碼自動化安裝且更新 Let’s Encrypt 憑證

Go-brown-side.sh 在去年寫了一篇『申請 Let’s Encrypt 免費憑證讓網站支援 HTTP2』教學,如果您是用 Nginx,就可以參考該篇教學讓您的伺服器支援 HTTPS,而 Google Security Blog 也宣布在 56 版本以後將會提示 non-secure 網站,讓使用者可以選擇性瀏覽網站。Let’s Encrypt 官方也公布去年 2016 發了多少張憑證,相當驚人,想必大家對 HTTPS 已經有相當程度的瞭解。底下這張圖說明 2016 年 Let’s Encrypt 發憑證總量的狀況 Screen Shot 2017-04-07 at 9.52.40 AM 此篇會介紹在 Go 語言如何跟 Let’s Encrypt 串接,底下有兩種方式。 Continue reading “在 Go 語言用一行程式碼自動化安裝且更新 Let’s Encrypt 憑證”