用 Golang 實作 NSQ:微服務訊息/事件傳遞系統

NSQ 是和 Event Sourcing 理念有所關聯的即時性分布式訊息傳遞系統,看到這裡你可能會以為是作即時通訊軟體用的,但實際上並不是。額外有趣的一點是 NSQ 也是以 Golang 所撰寫的。 我們會在文章中以實際情況、為什麼需要 NSQ 來解答疑惑並且實作一個真正的範例。 在閱讀本篇之前,也許你可以看看另一個相關的文章:「用 Golang 實作 Event Store:微服務事件儲藏中心」這篇文章提及到了為什麼我們應該用事件,

用 Golang 實作 Event Store:微服務事件儲藏中心

Event Store 是一個基於 CQRS 與 Event Sourcing 理念所衍生出來的新概念並由 C# 撰寫。這是一個微服務事件儲藏中心,這可能很難懂,但別緊張,這些都會在本文中得到答案。 在微服務結構中,每個服務都是獨立的,這意味著沒有服務該依賴另一個服務(無相依性),那麼我們應該要怎麼在服務之間互相溝通?一但有了這個問題就會開始陷入死循環,最終甚至會做出一個比傳統式單體應用程式還要糟糕的結構。 首先你要知道的是微服務應該自主。需要什麼資料的時候就應該自己處理,而不是發送請求到另一個服務然後等待回應。 實際案例

安裝 Drone 0.5 自動測試平台並與 Github 連結

Drone 來自 Drone.io,但他們有將自己的平台開源,所以任何人都可以自己架設一個 Drone。什麼是 Drone?簡單說就是一個自動化測試平台。 我們為什麼需要自動測試平台?一個小型的程式可以透過手動的方式來測試其功能,但遇到了大型程式,就不方便逐一測試了。這個時候我們可以交給機器自行測試,當發生錯誤時就自動向我們回報。 若要達到上述這種效果就需事先寫好「單元測試」,而 Drone 扮演的角色就是自動執行單元測試,而且這個執行的環境是獨立的,不會真正干擾到你的主機。 Drone 亦能在測試成功時自動幫你部署到正式的伺服器,

Golang 微服務相關工具

因為這些工具都十分地進階,所以在這裡僅稍微介紹並指引如何安裝,有趣的是這些全部都是用 Golang 撰寫的。 Go kit—微服務框架 https://github.com/go-kit/kit 當你要撰寫微服務時,你也許會需要一個框架。而 Go kit 就是 Golang 中目前知名度最高的微服務框架,接下來我們會以 Go kit 實作微服務架構的應用程式,

RAML vs API Blueprint

從 RAML 轉至 API Blueprint 之後發現兩個各有優劣之處,在這裡稍微敘述一下。 RAML RAML 是最終被我唾棄的 API 文件撰寫風格,我很傷心我花了時間在這上面 :(。 優點 功能性多、支援多種情況:能夠應付比較複雜的結構,如 HTTP 驗證等⋯的需求,且能夠有效地重複使用部分設置。 檔案引用方便:你能夠把 API

npm 套件管理器的桌面版:ndm

這東西其實還蠻吸引我的,主要是美觀還有方便。這有點像是 Ubuntu 的套件管理程式,但是移除了很多不必要且繁雜的功能。 你可以在這邊造訪 ndm 的官方網站,這是一個開放原始碼的 npm 桌面版套件管理器,目前還是處於 Alpha 的狀態且僅開放給 macOS 的使用者使用,未來會有更多平台的支援。 開啟專案 第一次開啟 ndm 時你有兩個選擇,你可以讓 ndm 開啟全域套件或是專案套件,

Webpack 有著一堆的坑

Webpack 是個現在蠻有名的前端建構工具,說是「打包」工具不為過,但可能會令你輕忽了 Webpack 的強大,讓你以為 Webpack 就只是打包工具,但事實並非如此。你可以在使用多種工具(如:Sass、Vue)的情況下省去重新整理網頁、重新編譯的困擾,這多虧了 Webpack 熱重載功能,不過還不僅如此。 實際上 Webpack 的

The Elm Architecture(Elm 基本結構)說明

The Elm Architecture(TEA)實際上就是 Redux 或是 Vuex 不過是寫在 Elm 裡。實際上 Redux 跟 Vuex 都是基於 TEA 的想法而來的,所以 TEA 可以算是⋯⋯先鋒者吧? 在 Elm 中會很常用到

ElmTEA

Vuex 可能追加的功能:命名空間

Vuex 是個規劃 Vue.js 資料流的「理念工具」,一般來說規劃像是記事本或是購物車這樣小型的應用程式都游刃有餘,一但遇上大型應用程式像是社群網站就會有些問題。 好佳在的是接下來的 Vuex 版本可能會新增命名空間的功能了。 都是同個 Store 在 Vuex 中只有一個 Store。意思是當你有兩個同樣名稱的 Action 或是 Getter, Mutation 的時候,就會遇到命名重複的問題。 為什麼要命名空間?

簡單地用 Golang 與 Leap Motion 互動!

Leap Motion 是一個用以偵測手部動作的小型傳感器,價格也蠻便宜的大約在 1,800 新台幣左右。雖然說優點是輕巧、廉價與容易開發,但是有時候感應上也會有些問題,例如說在手指相連再一起時 Leap Motion 經常會誤認成另一種手勢。 順帶一提,Leap Motion 不能偵測像「關節」這麼細緻的地方,不過基本的稍微彎曲是可以的。 其實就只是 Web Socket 要與

API Blueprint 撰寫教學

API Blueprint 是一個 API 文件撰寫風範,而且也有相關的工具可以將寫好的文件轉換成網頁,其實 API Blueprint 的寫法十分地簡單,先讓我們從開頭開始。 中繼資料 FORMAT: 1A 所謂的中繼資料即是 鍵名:值,從上述範例中你可以看到我們將 FORMAT 賦予一個 1A 的值,FORMAT 關鍵字是用來表示這份 API

別用 RAML 撰寫你的 API 文件,千萬不要。

這篇文章專門講解我如何被 RAML 騙到入坑然後放棄的過程。最近在找 API 文件工具,然後就剛好看見了 RAML,RAML 是一個撰寫 API 文件的格式,風格是延續 YAML 的。 現在讓我們看看官方網站的示意圖,你會發現:「哇,這根本夭壽棒啊!」。 所以我才被騙進來了,不是嗎?如果你現在打算用 RAML,請留步。 撰寫風格一般

Hash 你的 ID 吧!加密、縮短你的項目編號

有時候你可能會不想讓使用者看見文章、會員流水號(例如:/user/1, /user/2),這個時候你就可以用到 hashids 這個輕量級套件。 hashids 可以將陣列、數字、字串透過預先設置好的鹽加密,例如 347 可以被加密成 yr8,如此一來客戶端就沒辦法揣測下一個編號是多少,也避免了有心人士掃一遍你的網站。 hashids 支援很多程式語言,也可以按下這裡到其中的 Demo 稍微嘗試一下

HashID

JSON 轉換成 Golang

在 Golang 上若要讀取 JSON 就必須建立相對應的建構體才行,而 JSON-to-Go 線上工具解決了手動新增建構體的困擾,這個工具是由 JavaScript 撰寫的,相關原始碼可以在這邊的 Github 看見。 工具操作 先來到 JSON-to-Go 頁面,然後頁面左下角是輸入 JSON 結構的地方,輸入後會自動轉成右邊的 Go 結構體。 讓我們假設輸入了下列

RESTful API 的常用 HTTP 狀態碼

很常用到這些狀態碼,但是好像沒有人寫簡單點的說明,所以就自己寫了一個,以後應該會常常回來看。 成功 - 2xx 任何成功的狀態碼都是 2xx 開頭。 200 - 成功 請求已經成功,並且有返回內容。 201 - 已建立 請求成功,而且在伺服器上新建了一個資源(例如新增文章、留言)。 202 - 已接受

從 Atom 跳到 Visual Studio Code 編輯器

以前最討厭的大概就是微軟的 IDE 跟 Dreamweaver 了吧,自從離開 Visual Basic 6 生活圈之後我就很少碰到微軟的產品了,除了玩遊戲才會開一下 Windows,不然其他時間都是在用 Macbook。 不過自從 Windows 10 跟 Surface Studio 出來之後,能夠明顯地感受到微軟正在慢慢取代蘋果以前的位置,這樣說也許太過於誇張,不過確實連外國人都有如此感受,我曾看過有個留言說道:

3. 鍵盤、手把和滑鼠處理——在 Golang 透過 Ebiten(炸蝦)來製作 8-Bit 遊戲!

一個不能和使用者互動的遊戲會令人感到十分地無聊,不是嗎?這次你會學到如何在 Ebiten 中偵測鍵盤或是滑鼠和手把的輸入,所以你就可以在玩家按下特定按鍵的時候進行相關回饋。 現在讓我們回到第一章的範例,因為那個範例就足夠應用在這次的教學了: package main import ( "github.com/hajimehoshi/ebiten" "github.com/hajimehoshi/ebiten/ebitenutil" ) func update(screen *ebiten.Image)