程式設計週記[2016/05/27]: 史詩級任務: 帶著你第一個未滿周歲的小孩一起出國旅遊

這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 這個禮拜有三天請假,因為帶我的小孩去石垣島的 ClubMed 遊玩.雖然當地每天都是 Buffet 吃到飽,但是我跟老婆還是因為照顧小孩子太辛苦而消瘦. 由於只有兩天,本週專案想了很久不知道要寫什麼.於是先把上週的專案加以應用.但是也重寫了好幾次,並且想不到一個很好的處理方式. Go dgryski: best practices for writing high-performance Go code. 大大 dgryski 教導如何寫出高效能的 Go App. Replication of Etcd - Blog With ReeZhou 有介紹 etcd 裡面使用 raft 的 propose 的流程分析. Suffix arrays in the Go standard library 介紹如何使用 Go 內建的 Suffix Array ,其實 Go 內建也有 container/ring 的套件可以用.這裡有篇介紹文章. To create package alias for your #Go tool by using “go list” Application data caching using SSDs Netflix 最新的部落格提到有一個 ‎golang 寫的 application data cache proxy - Rend 決定資料要存放 memcached 或是 SSDs Abstracting S3 for Fun and Profit in Go 試著做一出一個類似 AWS S3 的服務. Practical Golang: Using Protobuffs | Jacob Martin 一些關於 Protobuf 的實際應用. VoV is a high score game for Android 完全使用 Go 開發的 Android 射擊遊戲. Four and a Half Years of Go in Production at goto Chicago 2016 講解 iron.io 在四年半前如何從 ruby 換到 Go 的故事. 當時 Go...
繼續閱讀

程式設計週記[2016/05/20]: 最簡單的地震探知系統

(pic from twitter: https://twitter.com/toddmotto/status/731435248588890113) 這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 本週都在讀臉書的時間序列資料庫 Gorilla 論文,覺得應該有不少地方可以運用這樣的技術.本週專題是一個幫助你處理 bit/byte 的 bit stream helper. Go Essential knowledge for Go debugging | Stack Traces In Go 很有用的舊文章,透過了解 Golang 處理 stack 的方式可以讓你更了解如何 debugging golang app. distatus/battery: cross-platform, normalized battery information library 跨平台的電池資訊顯示工具,挺有趣的 golang app. Comparing Golang with Java 從 Java 轉到 Go 的工程師寫出他心得感想. pierrre/imageserver: Image server toolkit in Go 將一些影像處理可能經常用到的工具 kits 寫成 web services 並且開源. C++ Bindings For A Go Library 講解如何在 C++ 中去使用 Go library 的方式與該注意的地方. 並且有提到 C++ GC 處理方式的 Golang-Nuts The InfoQ Podcast: Uber’s Chief Systems Architect on their Architecture and Rapid Growth Uber 的開發團隊決定從把開發語言從 node.js 搬到 Go 跟 Java Dev Cheney 出的程式小測驗,你能做對嗎? 主要是講解使用 point 指向 slice 要注意到 slice 會因為 cap 變大而 reallocation 位置,造成你舊的指標指向一個已經過期的資料空間. 更多資訊可以參考這篇 https://blog.golang.org/go-slices-usage-and-internals Python 用Python開發Facebook Bot 流程算清楚,先存檔起來 Android/JAVA/NODE.JS devstdio/podq: The Open-source Online Podcast Player for Developers 前端透過 JS 的 pocast player. Docker Using Caddy with Docker 透過 docker...
繼續閱讀

[中文導讀] Facebook 的時間序列資料庫 - Gorilla (Gorilla: A Fast, Scalable, In-Memory Time Series Database)

(come from Paper) 前言: 本文會介紹最近被討論的 Facebook 時間序列資料庫的論文,並且會介紹資料庫壓縮演算法. 其中不少解讀都是參考 Morning Paper 裡面的論文導讀. 最後會導入 Damian Gryski 根據論文推導出的演算法 dgryski/go-tsz . 原始論文: Gorilla: A Fast, Scalable, In-Memory Time Series Database 導讀: 什麼是 Gorilla ? Gorilla 是 Facebook 開發的時間序列資料庫.其實市場上已經有很多的時間序列資料庫 (HBase on TSDB(time-series database)) ,為什麼還需要自己開發一個呢? 資料的儲存過於龐大 查詢的延遲過長 所以 Gorilla 針對這些有了以下的優化: 針對 timestamp 的壓縮 分析並且針對資料的壓縮 放在記憶體 (in-memory databse) 那麼 Gorilla 比起一般的時間序列資料庫究竟有多強大呢? 透過將時間與數值的壓縮,並且透過儲放在記憶體的操作. Gorilla 可以達到: 73 倍的 Query Latency 減少 14 倍的 Query Throughput 增加 為了要儲存到 26 小時以上的時間序列資料,並切壓縮到 1.3 TB 的記憶體之中(分散在 20 部伺服器中).所以 Gorilla 針對儲存資料有相當程度的壓縮. 透過資料的壓縮最佳狀態可以達到: (come from Paper) 高達 12 倍的壓縮比: 原先 16 bytes 的數值資料(包括 timestamp 與 value )透過壓縮,一般而言平均可以達到 1.37 bytes (通常在經過 240 分鐘後) 12倍的壓縮比? 那麼大的壓縮比是如何做到? 簡單的來說 Gorilla 透過將時間資料( timestamp )與數值資料( value ) 的壓縮. 其壓縮的方式是參考前一次的資料,透過時間序列資料庫的特性: 連續性資料 在比較小的取樣時間中,每筆資料間的變化不大 透過這樣的方式,可以拿目前的資料 \(t_n\) 去與前一筆資料 \(t_(n-1)\) 比對的方式, 來拿到差異值 (delta) .並且將差異值做一定程度的壓縮. 達到整個資料庫數值的壓縮. 壓縮的演算法: 關於時間資料的壓縮 首先針對時間資料的壓縮部分,讓我們先看看以前的時間可能如何紀錄: (舉例) \(t_0\) => 02: 00 : 00 \(t_1\) => 02: 01 : 02 \(t_2\) => 02: 02 : 02 \(t_3\) => 02: 03 : 02 如果要直接紀錄的話,其實資料長度會變得相當大. 讓我們換個角度來看: \(t_0\)...
繼續閱讀

[TIL][Mac] About GOPATH and GOBIN system environment

Major problem: System environment variable GOBIN cause problem “vim-go error: vim-go: goimports does not support srcdir” Situation: Recently I use vs code to write golang more than vim-go,But when you upgrade the Golang version then use vim-go to save file, it will always popup following error message. vim-go: goimports does not support srcdir Problem Environment: Mac Only. Homebrew installed only. Root Cause: normally there are two importnt variable in go env which was $GOPATH and $GOBIN. But most user only set $GOPATH but $GOBIN. It will cause your all golang binary install via go install to the directory $GOPATH/bin. Recently Homebrew formula, it will help us to set $GOBIN but the path will be/usr/local/Cellar/go/GO_VERSION/libexec/bin rather than $GOPATH/bin. What’s the problem with that? If you have any package which force to install in $GOPATH/bin, it might has problem with duplicate or not install latest one with Golang update. dlv has the...
繼續閱讀

程式設計週記[2016/05/13]: 最近地震真不少,國家級警報也不少

這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 本週花太多時間在學習 Amazon Echo 跟一些社群的事務上面.應該花更多時間開始看論文.下週應該又要回到看論文寫每週專題的日子. 本週專題將上週的 Line Bot 套件拆解出來,準備要移植到 Facebook Messenger Platform 之用. Go mkideal/onepw: onepw is a command line tool for managing passwords 使用命令列的密碼管理工具,可以幫你產生你需要的密碼並且儲存起來,幫助你再也不需要記住密碼. emc-advanced-dev/unik: The Unikernel Compilation and Deployment Platform 幫你把 Go App 燒在可開機磁碟上. saiday/JonSnow: Google Play review watcher, deliver new reviews to your slack channel 很威的 Google Play Review Watcher by saiday ,一開源過後馬上就有人幫忙加上 Apple Store Review Watcher 開源真棒啊… How To Use Martini to Serve Go Applications Behind an Nginx Server on Ubuntu 雖然文章是 2013 年的,但是使用 NGINX 搭配 Go 的 Web App - Martini 到目前都還是很多想要使用的架構之一. [Youtube] Golang Google Cloud Storage 在 Google Cloud Storage 上面使用 Golang 的影片教學. 在 Github 專案內搜尋 Golang 函式,Golang 開發者必裝 Chrome Extension 這個 Chrome Extension 不錯使用,一定要裝. liviosoares/go-watson-sdk: Go (golang) SDK for IBM Watson services 最近在大肆宣傳的 IBM 網路服務 Watson ,馬上就有人寫出 Go 的 SDK .幾乎所有的服務都可以使用,相當的棒. manul: The madness vendoring utility for Golang programs 使用 Git submodule 來做...
繼續閱讀

[AWS][Echo] 來玩玩 Amazon Echo

前提 ( 什麼是 Amazon Echo) Amazon Echo 是 Amazon 的一個很有趣的裝置.雖然許多人都將它當作是藍芽擴充喇叭,但是其實他功能不僅僅於此.他不僅僅能夠透過藍芽播放音樂,還能夠聽懂你的語音來執行許多功能.這邊有段簡單的影片. 並且 Amazon 具有一個類似 App Store 的商城上面擺滿了各式各樣的語音服務 ( Amazon 稱為 Skill ) 可以透過安裝不同的 Skill 達成許多功能.不論是播放音樂或是訂購商品. 然後接下來就簡單的紀錄一下最近玩 Amazon Echo 的心得 透過 Raspberry Pi 2 架設虛擬的 Amazon Echo 那使用這個功能一定要購買 Amazon Echo 嗎? 當然是,不過你也可以透過 Amazon 開放出來的說明文件來使用 Raspberry Pi 2 來架設. 詳細安裝文件,文章相當長,就不詳述在這裡. 先簡單敘述你需要的設備: Raspberry Pi2 + 記憶卡 (至少 8G with NOOB OS) + 無路線或是無線網路卡 麥克風 + 喇叭 滑鼠 + 鍵盤 簡單的敘述一些步驟如下(強烈建議看文件,裡面有一步步的介紹): 透過 NOOBS 安裝基本的 RPI OS (選擇 Raspbian) 安裝 SSH 與 VLC 安裝 JDK 跟 Maven 到 Amazon Developer 去註冊 Amazon Alexa Voice Service 然後去原先文件裡面的 Github 下載下來整套 Server 跟 Client 產生 SSL Cetificate 並且啟動 RPI 上面的虛擬 Echo Server 跟 Client 最後就能透過 RPI 裡面 XWindows 的語音控制 Client 輸入語音資料與 Amazon Alexa 伺服器溝通 這樣你架設起來,只能對他做一些間單的問答(問問台北時間,台北的溫度或是講個笑話).還有就是使用人家已經寫好的 Skill . 透過 AWS Lambda 跟 OAuth2 Server 架設自己的 Alexa Skill 以下是透過 Amazon Alexa 說明網頁上面的基本架構圖: 稍微一個個介紹每個 Server 所負責的部分: Amazon Echo : 就是使用者手中的裝置,可以把語音資料傳輸到 Alexa Service Amazon Alexa Service: 會負責把語音資料做一些處理,擷取出每段語音中的”意圖” ( Intent ) 並且傳輸到 Amazon Alexa...
繼續閱讀