April
12th,
2017
Line Bot Animal photo classification
為了 Chatbot Day 準備的聊天機器人第二彈.
功能:
很簡單: 就是你上傳動物照片,他就會告訴你是什麼動物.
背後原理:
背後的機器學習模型就是鼎鼎大名的 Tensorflow Inception
註解: Tensorflow Inception 就是一個透過 CNN 建立出來的動物資料庫分類器
架構:
其實這個 Chatbot 還會連接我後端一個 API Server (tf-go-inception) .上面已經將 Inception 訓練好的 model 讀進來.
當你在 Line Chatbot 上面上傳圖片的時候, LineBotAnimal 就會將 圖片透過 multipart 的方式傳到 tf-go-inception 的 API Server
API Server 會將圖片透過 Tensorflow 來預測你的結果,並且傳回給 LineBotAnimal
參考:
Tensorflow Inception
iThome Chatbot Day:
繼續閱讀
April
6th,
2017
原文: Consistent Hashing with Bounded Loads
在實作網路服務的過程中, Load Balancer 是最常被運用在分散流量到適當的伺服器之中. 而其中就是使用 Consistent Hashing 的演算法實現. 在使用 Consistent Hashing 的過程中,最被人在乎的就是兩個主要的問題
分布的均勻度 (uniformity)
當發生了新增與刪除伺服器的時候,需要有多少的移動次數.
Google 當然已經把這個問題解決,並且已經放在他們的 Google Cloud Pub/Sub 服務之中. 也在去年的八月將論文發表出來.
( Google 很擅長將神之技術寫成論文後,然後放在 GCP 裡面 XDD)
沒想到論文發表三個月後, Vimeo 的工程師將論文看懂後把相關演算法實現在 haproxy (這.. 應該不用解釋.. 就是最基本的開源 load balancer ) 之中,並且在 Vimeo 上線了. 並且將相關過程寫成這篇部落格….
有興趣的可以一起來鑽研這篇論文…. 不知道 Consistent Hashing 是什麼… 可以看看小弟當初練手用的 Golang Consistent Hashing
或是可以看看這堆 Viemo 工程師將它實現在 HAProxy 的 commit
[更新 2017/06/23]
後來這位工程師有機會跟 GDE 分享他的經驗,在這裡
這裡有另外一位,把相同概念完成到 Golang
繼續閱讀
March
31st,
2017
這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 為了之後的 Chatbot Day ,最近用掉自己半夜的時間,把自我學習的聊天機器人完成了. 也很久沒有在寫一些小專案或是 side project ,感覺相當的好. Go mattn/mattn-icons mattn 是一個 #Golang 很厲害的日本人,常為人熟知的作品就是 go-sqlite3 跟 gom .他有個招牌就是 github icon 是一個閒晃的小男孩(應該是吧) 這裡搜集一堆他的圖片 以下跟 Golang 有點關係,他在這個 repo 有放個 update-readme.go .當有新的圖片上傳,可以自動更新 README.md .算是很有趣的. 參考: go-sqlite3 gom Python Android/JAVA/NODE.JS Docker iOS/Swift 其他程式語言 論文收集 Kubernetes Kubernetes Authentication plugins and kubeconfig 這個網站列出如何在 Kubernetes 上面的 authentication . Five Days of Kubernetes 1.6 連續五天介紹 Kubernetes 1.6 的新功能,第一篇就是剛剛有人分享的 Dynamic Provisioning ,有興趣可以持續關注. Kubernetes issue: kubeadm 1.6 is broken due to unconfigured CNI making kubelet NotReady Kubeadm 可以讓你安裝 Kubernetes 就像是使用 docker swarm (v2) 一般容易. 所以除了 GKE, Kops 之外,這大概就是一般人很喜歡拿來架設 Kubernetes 的方法之一.但是它也是有一些限制就是 OS 的限制比較嚴格 (Ubuntu 16, centOS 7 …) 但是日前的 Kubernetes 更新到 1.6 的時候,不少人發現 Kubeadm 無法正常的使用了. 到了現在都還沒有被解決… 有興趣想了解的人可以一起看看… 想了解 kubeadm 的中文說明,可以參考我之前寫的部落格: http://www.evanlin.com/til-kubeadm/ Machine Learning 自駕車學習之路(ㄧ) 有人分享學習 Udacity 自動駕駛車的心得. 如果你還在考慮要不要學,可以看看他貼出的作業部份.很多作業都看起來很有趣… 參考: Udacity Self-Driving Car Engineer Nanodegree 網站文章 [關於影像處理的完整介紹] 裡面包含圖片,各種影像格式 av1, h264, h265 的編碼格式與一些基礎原理外.也有 ffmpeg 的相關操作. 對於想要惡補或是回顧的人會有趣. 裡面的解釋都很清楚,有大量的圖片作為輔助.相當的棒! 網站收集 有聲書/影片心得 小專案: 使用 LUIS...
繼續閱讀
March
24th,
2017
這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 深刻體驗到時間不夠用的痛苦,又需要準備四月份的一些演講,又需要弄公司的東西,不過相當得充實又有趣啊. 四月一共有一場分享加上一場大型研討會.雖然兩個都會提到 Tensorflow ,但是內容有些不太一樣. Go Slide: 簡單介紹 golang 使用的 gc 演算法 介紹 GC 演算法在 stack 的 scan 方式,在 Go 1.7 的時候 stack rescaning 會造成 GC Pause (俗稱的 Stop-The-World). 在 Go 1.9 的 Proposal Eliminate STW stack re-scanning 就是為了要減少這樣的問題. 在 1.8 已經預設打開. 參考: DK 的文章 Automatic Stackdriver Tracing for gRPC 這篇講解了如何透過 Golang 來撰寫一個使用 stackdriver (也就是 Google 之前所併購的線上分散式追蹤 distributed tracing 的工具) 來查看在 gRPC 下問是否有任何問題. 想要試試看 Open Source 的 distributed tracing ? 那麼可以試試看最近進入 CNCF 的 Open Tracing . 官方的部落格有一個範例讓你學習如何用 Golang 透過 Open Tracing 來追蹤 http latency . 名詞解釋: CNCF (Cloud Native Computing Foundation) 是由 Google, Intel, CoreOS 與華為 等等各家網路 大公司所組成的協會.主要選取一些優秀的服務來推廣適合作為 Cloud Native Computing 之用.. 目前裡面的軟體有: Kubernetes, Prometheus, Fluentd 與 GPRC .. 等等 Cloud Native 上重要的服務 3.5 Years, 500k Lines of Go (Part 1) juju 是ubuntu 開源出來使用 Golang 開發的 devops 工具,目前已經開發了超過三年多的過程.他們分享在公司內部如何使用 Golang 的. 不論是如何做 package management (使用 godep) 或是專案的如何組織與分割各種不同的 repo .分享了許多使用 Golang 作為大型專案開發的經驗,很推薦大家一起來學習....
繼續閱讀
March
23rd,
2017
Automatic Stackdriver Tracing for gRPC 這篇講解了如何透過 Golang 來撰寫一個使用 stackdriver (也就是 Google 之前所併購的線上分散式追蹤 distributed tracing 的工具) 來查看在 gRPC 下問是否有任何問題.
講到 stackdriver,主要就是為了要解決在大型分散式系統中如何追蹤多個系統間相互溝通的問題. 有幾個很棒的系統,像是 2010 年 Google 發表了論文 ( Dapper, a Large-Scale Distributed Systems Tracing Infrastructure)),還有 Twitter’s Zipkin 也都是佼佼者.
但是最近進入 CNCF 的 Open Tracing 就相當的優秀,不僅僅是開源的系統,更提供各種語言的連接工具.
Open Tracing 官方的部落格有一個範例讓你學習如何用 Golang 透過 Open Tracing 來追蹤 http latency
名詞解釋:
CNCF (Cloud Native Computing Foundation) 是由 Google, Intel, CoreOS 與華為 等等各家網路 大公司所組成的協會.主要選取一些優秀的服務來推廣適合作為 Cloud Native Computing 之用.. 目前裡面的軟體有: Kubernetes, Prometheus, Fluentd 與 GPRC .. 等等 Cloud Native 上重要的服務
參考:
Towards Turnkey Distributed Tracing
繼續閱讀
March
17th,
2017
這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 最近聽到同事 J 的名言 : “先去報名分享,就會學習到這門新的技術” 挺好的.. 所以我也去報名了一些研討會,於是又欠一堆 slide 要準備.最近加緊在學習 Tensorflow 中. 最後,很久沒有寫小專案了.於是手會癢(剁手) 就跑去刷 HackerRank 的題目(因為裡面有 Go ).很好玩,裡面 easy 的真的太 easy .. 不小心刷到 Hard 的還會要求時間複雜度,真有趣啊. Go Fission: Serverless Functions for Kubernetes fission 是一個透過 Golang 完成的 kubernetes serverless function 的伺服器. 目前 serverless 支援的語言有: dotnet python nodejs php7 Giving dep a try: Using the new Go dependency tool with piladb Dep 已經越來越重要了,甚至被考慮當成官方套件之一。這篇文章透過使用 dep 來開發 piladb 一個堆疊式資料庫。整個流程可以學習使用 dep. 來看看吧。 Go doesn’t support exception, in syntax. Go has many exceptions, in syntax. 覺得 Go 有很多語法限制嗎? 其實他也是有很多語法例外,來看看這篇的介紹,很多沒想過的語法例外。 Linux, Netlink, and Go — Part 1: netlink 這篇文章看了好幾天,終於看完. 透過 #Golang 來介紹 Linux 中與 Kernel 溝通的另外一種方式 “Netlink” 本文的作者原來是在看 Prometheus 的一個工具 node_exporter 的時候發現一個跟 WiFi 的有關的 issue ,看了幾個禮拜後發現是 ioctl 太慢了… 於是就決定要換成 Netlink [科普] Netlink Socket 是一種在透過 kernel 來傳遞訊息的方式,但是跟一般常用的 ioctl 不同的是 Netlink 透過 udp 來傳遞,不需要像 ioctl 一樣需要有透過 response ,所以他的速度比較快. Netlink Socket 優點: 透過 UDP 沒有 ioctl 的 kernel round trip time 可以一次發給同一個 group...
繼續閱讀