程式設計週記[2016/10/14]: Learning how to using Machine Learning

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

小孩子得了腸病毒,在家休養了一個禮拜.每天都在學習機器學習 (好像回文).

這次竟然花了兩個禮拜才整理出來,下週要改進.



Go

sourcegraph/checkup : Distributed, lock-free, self-hosted health checks and status pages

checkup 是一個 #golang 專門拿來做應用程式健康檢查 (Health Check) 用的工具.

你可以使用 JSON 定義要檢查的應用程式網路與方式 (TCP/HTTP) 然後使用 CLI 的方式來執行.

也提供直接在 Programming 處理的方式. 支援 HTTP, TCP (並且支援 TLS) 與 AWS S3. 運用層面相當廣泛的好工具…

他們也寫了篇部落格來解釋他們為何需要自行研發這樣的產品. Why we open-sourced our uptime monitoring system

heetch/LAPJV: Go implementation of the LAPJV algorithm

這個用來解決 Assignment Problem (任務指派問題)也就是將 n 個工作分配給 m 個人如何達到最大的有效的分配方式的問題.

一般而言的解決方式會是透過匈牙利演算法,而這段代碼使用了另外一個方式 Liner-Assignment-Problem Jonker-Volgenant algorithm 來大大的提升計算效能. 似乎無法找到論文(要錢),不過這邊有稍微講到如何做到 LAPJV .

astaxie/bat : Go implement CLI, cURL-like tool for humans

類似 httpie 使用 Golang 作出的 CLI curl 工具。 這個套件的作者 Asta Xie 也就是 BeeGo 的作者.

參考 Httpie 重新以 Go 來打造的工具,使用了 Go Routine 讓整個軟體更加具有效能.

noqcks/gucci : A simple cli templating tool written in golang

noqcks/gucci 使用 #golang 寫的 template 工具。 可以透過樣板的替換方式,來讀取系統變數或是執行結果。

EBOOK : Webapps in Go (without) framework

免費的 #Golang Ebook ,使用最基本的 built-in package 來建置 Go Web App.還有 Go 語言的基礎教學,還不錯的書籍.

pygo: Interpreters in Go and for Go

pygo: 用 Golang 寫的 Go interpreter ,這篇是介紹的 slide

TheNewNormal/corectl : CoreOS over macOS made very simple

TheNewNormal/corectl 可以讓你在 Mac 上面很容易的安裝 CoreOS VM ,想要學習 rkt 也會變得比較方便.

tidwall/finn: Fast Raft framework using the Redis protocol for Go

finn 提供了簡單的方式可以讓你架設 Raft framework 並且可以直接跟 Redis 串接.

狗洞

玩了一下對岸朋友今天介紹的這個狗洞(dtunnel),真的是很神奇的東西,也是Golang寫的開源軟件,剛剛測試了一下,有點嚇到,居然security group firewall什麼的都不用開就能p2p建立起tunnel,而且p2p mode速度還不賴!如果沒有安全疑慮的話,應該是一個很值得期待的東西。

Context package in Go

講解 Go 1.7 的 context 還有一些簡單的範例與使用方式說明.

gRPC Envoy Nghttp2 and Load Balancing

一個簡單的範例來講解如何讓 grpc server 來做 load balancing .

kfirufk/go-angular2-material-auth0-and-more : a starter kit for go and angular2 and other goodies

教學如何使用 Go 與 Agular2 從無到有來架設網站.

Slide: Utilizing the Go 1.7 SSA Compiler

講解如何調教 Go 1.7 的 SSA Compiler 來讓程式碼更快.順便也帶出了 SSA 的基本原理與 SSA 帶給 compiler 的相關功能.



Python



Android/JAVA/NODE.JS/Scala

在 2016 年学 JavaScript 是一种什么样的体验?

透過想從今年學習 Java Script 的問答來了解有多少種 JS framework .

GCPUG meetup 201610 - Dataflow Introduction

舒服二人組簡介一下Google在BigData Solution上的Dataflow



Docker



Kubernetes

PalmStoneGames/kube-cert-manager : Manage Lets Encrypt certificates for a Kubernetes cluster.

如何在 Kubernetes 中使用 Let’s Encrypt .



iOS/Swift



其他程式語言



論文收集



Machine Learning

Cross Industry Standard Process for Data Mining

很少會收集 Wiki,不過這篇清楚的講解了跨產業的 Data Mining 需資料處理流程.可以算是 Machine Learning SOP.

人工智能革命:为什么深度学习会突然改变你的生活

中文列表:

原文文章

[summarization] “A survey on transfer learning,” Sinno Jialin Pan and Qiang Yang « Birdman’s Blog

簡單介紹什麼是 Transfer Learning

Predicting Disk Replacement towards Reliable Data Centers

3萬台硬碟,來自兩家大廠,監測超過 17 個月,準確率 98%

Paper: Predicting Disk Replacement towards Reliable Data Centers

台灣資料科學愛好者年會: 一天搞懂深度學習 心得筆記

iHower 的心得,相當清楚的紀錄深度學習.



網站文章

辦一場自己在場的葬禮:一名軟體工程師的死亡習題

Pieter Hintjens 為 ZeroMQ 的創辦者也是眾所皆知的軟體工程師之一,在癌症末期的時候寫了 〈臨終協議〉(A Protocol of Dying) 更是讓人覺得寫得真好.

在 10/04 的時候,他簽下來安樂死的同意書在下午一點的時候選擇了安樂死.他在之前也辦過了生前喪禮,讓人無盡的緬懷他.

How We Switched Without A Hitch To A New API : 一個新的想法關於 JSON Diff

這篇文章主要講解某一間公司的 API 升級的方式,使用的人想要了解哪些 API 更改了造就回傳的 JSON 變動,哪些沒有變更.

所以這篇文章就變成很清楚地探討判別兩段 JSON 是否是相同的演算法討論.

如何敘述差異(Diff)

Longest Common Subsequence (hereafter LCS) 是裡面提到的概念,也就是針對兩個 JSON 的 DIFF,我們必須要透過最少的文字來敘述.舉例而言

  • [1, 2, 3] –> [1, 3]

我們都會說是 [2] 被拿掉了,但是卻有另外一種講法是 [2 +1] 然後拿掉原本的 [3]

求解出 LCS 的方式本身是一種 Dynamic Programming .

相似度 (similarity) 的敘述方式
  • 只專注在 Value 比對,對於 Key 值的變動不會改變. (Key rename)
  • 數值相似為 “1” ,不相似為 “0”
  • 如果是一個 List 就是取平均.
減少索引變動的差異 (Index Shifting)

對於索引變動的處理方式:

  • 重新排列組合,透過 Key 值的先後
  • 排列成環狀來比對,避免找過的在前面.
結語

程式碼在這裡

Api.ai vs Wit.ai (or is it Google vs Facebook?)

兩組自然語言網站的比較,蠻適合深入了解的.

漫谈Domain Flux僵尸网络

Zombie Network

Scaling Conversational Commerce

講解如何擴展你的 Conversational Commerce (交談式經濟)

opentracing/opentracing-go : Go implementation of the OpenTracing API

跟隨 Kubernetes 與 Prometheus 之後, 第三個加入 CNCF 的專案 OpenTracing ,可見他有多重要.

這裡有 CNCF 的官方公布文件: OpenTracing Joins the Cloud Native Computing Foundation

Orchestrating GPU-Accelerated Workloads on Amazon ECS

Docker包進NVIDIA CUDA Driver之後可以直接存取GPU資源

Our agile journey in GovTech so far

新加坡政府的 Agile contracting 很出名啊

申請 Let’s Encrypt 免費憑證讓網站支援 HTTP2

【高效自學術】如何找到一份「深度學習」的工作?讓這些資源充實你必備的知識!



網站收集

災害警示公開資料彙整

P2P with webrtc 確保來源網站,不會被 ddos 打死了

MIT 開放課程,介紹關於 AI 的部分

Redis性能问题排查解决手册

【HITCON TALK - 金融資安研討會】- 講師簡報公佈 | Hacks in Taiwan Conference 台灣駭客年會



有聲書/影片心得



[Kubernetes] Authorization and Admission Survey

This slide show some note about Authorization and Admission in Kubernetes.

It include some detail about:

Authorziation

  • ABAC
  • RBAC

Admission

  • Service Account
  • Secret

Still working understanding how to do Authenication in Kubernetes.

[GCPUG] 參加 GCPUG + Flink 小筆記

前言

話說強者我同事 Simon SuGCPUG 是主辦者. 當然還是得特地跟老婆請假來彭場一下,加上本週有不少資料科學相關的講題.

1. Apache Beam in Big Data Pipeline by Randy Huang - Data Architect at VMFive

Why use beam?

  1. If you want to decompose your task into pipeline. You can focus on algorithm.

  2. It could run on Flink, Storm and Spark. So you can write code once run anywhere.

Q&A

  1. What is the pain point if such application has so much runner? (spark, flink, storm)
    • Ans:
      • No, pain point until now. Sometime CEP for Flink but might not able to use in Beam.
      • Beam is follow Flink related API closely.

2.Kubernetes 使用心得分享 by Gene Liu / LIVEhouse.in

  • Self healing in second.
  • Master will use 0.4 CPU in etcd.

Q&A

  • Is any way to assign random port in Kubernetes Cluster if we want to run random replica?
  • Why use kubernetes?
    • Ans:
      • It is deep link with Google Cloud.
      • Easy to integrate with Google Cloud Service.

3. 認識Dataflow by Simon Su/Cloud Architect at LinkerNetworks

The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing - 中文論文讀後心得

可惜最後沒聽完…..

[Kubernetes] 透過 Kubernetes 1.4 新功能 Kubeadm 來建立 Kubernetes Cluster

緣起

2016/09/26 Google 推出了新版的 Kubernetes 1.4 裡頭最讓人期待的,就是 kubeadm 這個新的功能.

本來很期待他能夠讓 Kubernetes 變得更容易安裝並且加入新的節點,所以就試玩了一下.發現功能都還蠻強大的.不僅僅是變得更容易安裝,其實根本就是跟 docker swarm mode 致敬啊.整個變得簡單到不行.

建立機器

這邊只建議兩個 OS 版本:

  • Ubuntu 16.04
  • CentOS 7

備註: 如果你使用 docker-machine 來建立 VM 獲釋 GCP 上面的機器,預設的 Ubuntu 是 15.10 ,是無法順利安裝完畢的.

下載相關的 binary

每一台電腦(包括 Master 跟 Node 都得執行)所有的指令都是透過 sudo su -

# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni

啟動 Master

就像是 docker swarm mode 的 master 一樣,只要一行指令就好.

kubeadm init

詳細會出現的螢幕如下

# kubeadm init
<master/tokens> generated token: "306d01.da88f33b20103873"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
<master/apiclient> all control plane components are healthy after 51.538064 seconds
<master/apiclient> waiting for at least one node to register and become ready
<master/apiclient> first node is ready after 0.504944 seconds
<master/discovery> created essential addon: kube-discovery, waiting for it to become ready
<master/discovery> kube-discovery is ready after 13.506671 seconds
<master/addons> created essential addon: kube-proxy
<master/addons> created essential addon: kube-dns
Kubernetes master initialised successfully!
You can now join any number of machines by running the following on each node:
kubeadm join --token 306d01.da88f33b20103873 10.240.0.11

備註: 當出現 waiting for at least one node to register and become ready 需要大概幾十秒鐘(取決你機器的速度).

其他機器只要透過 kubeadm join --token 306d01.da88f33b20103873 10.240.0.11 就可以了.

Node 加入該群集 (Clustering)

kubeadm join --token 306d01.da88f33b20103873 10.240.0.11

詳細指令顯示如下:

# kubeadm join --token 306d01.da88f33b20103873 10.240.0.11
<util/tokens> validating provided token
<node/discovery> created cluster info discovery client, requesting info from "http://10.240.0.11:9898/cluster-info/v1/?token-id=306d01"
<node/discovery> cluster info object received, verifying signature using given token
<node/discovery> cluster info signature and contents are valid, will use API endpoints [https://10.240.0.11:443]
<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
<node/csr> received signed certificate from the API server, generating kubelet configuration
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.
Run 'kubectl get nodes' on the master to see this machine join.

驗證 Kubernetes 叢集有成功建立

# kubectl get nodes
NAME               STATUS    AGE
evan-kube-1        Ready     1m
evan-kube-2        Ready     1m
evan-kube-master   Ready     4m

建立 Clustering 的 network

# kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created

跑一些簡單的範例吧

透過 Console 直接建立兩個 Pods ,以下指令需要在 Master 輸入.

# kubectl get nodes
NAME               STATUS    AGE
evan-kube-1        Ready     1m
evan-kube-2        Ready     1m
evan-kube-master   Ready     4m
root@evan-kube-master:~# cat <<EOF | kubectl create -f -
> apiVersion: v1
> kind: Pod
> metadata:
>   name: busybox-sleep
> spec:
>   containers:
>   - name: busybox
>     image: busybox
>     args:
>     - sleep
>     - "1000000"
> ---
> apiVersion: v1
> kind: Pod
> metadata:
>   name: busybox-sleep-less
> spec:
>   containers:
>   - name: busybox
>     image: busybox
>     args:
>     - sleep
>     - "1000"
> EOF
pod "busybox-sleep" created
pod "busybox-sleep-less" created

確認一下 Pod 有建立成功

# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
busybox-sleep        1/1       Running   0          6s
busybox-sleep-less   1/1       Running   0          6s

確認一下每個 Pod 在哪個節點執行 ?

# kubectl describe pod busybox-sleep
Name:           busybox-sleep
Namespace:      default
Node:           evan-kube-2/10.240.0.14
...

這樣就可以知道 pod busybox-sleepevan-kube-2 這台機器.

再來確認另外一個 pod busybox-sleep-less 在哪個節點執行 ?

# kubectl describe pod busybox-sleep-less
Name:           busybox-sleep-less
Namespace:      default
Node:           evan-kube-1/10.240.0.13

這樣就可以知道 pod busybox-sleep-lessevan-kube-1 這台機器.

限制 (Limitations)

  • 目前 kubeadm 還不支援 cloud-provider integrations, 所以如果需要 Load Balancers (LBs) 或是 Persistent Volumes (PVs) .還是建議使用 GKE
  • 這樣建立的叢集只有一個 Master ,並且上面的 etcd 只有一個,如果需要備援或是要做 HA 就建議透過 etcd clustering 來做.
  • 目前 kubectl logs 還不支援 kubeadm 建立出的叢集,請看 issue 22770.

[Linux] Summary how to retreival system info

Data Q&A

You also can get other detail on /proc (detail spec), such as:

  • cpu
  • memory
  • process info (id, usage, … other)
  • DMA info

程式設計週記[2016/09/30]: 資料科學家除了專業度.全局觀與信任度外,最重要的是想像力!

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

最近除了學習 Kubernetes 之外,還有加強自己對於 Machine Learning 的了解.不論是各種方式與如何驗證的手段.其實要學的東西真的不少,但是就是時間越來越少.



Go

Reversing GO binaries like a pro

來看看如何透過 ADA (專業的 reverse engineering 軟體 ) 來反組譯 Go 的應用程式.

GopherCon 2016: Renee French - The Go Gopher A Character Study

Rob Pike 的老婆 Renée French 也就是眾所皆知的 Gopher 圖形發明者,講解了 Gopher 的發明過程.沒有任何程式碼但是相當有趣.

也可以看到許多可愛的 Gopher 圖案,還有 Gopher 圖案的設計規範與理念.

Mini-Workshop: Build a Web App with Francesc

Francesc Campoy Flores 線上教你如何透過 #golang 建置 Web App . 2016/10/11 開始,記得先報名一起來看線上直播喔.

The Three Go Landmines

三個常見的 Golang 的錯誤.

Awesome Go

許多好用及相當好的 Golang 套件集合.

reloadproxy restarts your server and reloads what’s in your browser, anytime any changes are detected.

一個很有趣的專案,透過監控的方式當你修改程式碼, Web App 會即時更新內容,不需要重新編譯執行.

Youtube: Go generate, generics, and you

透過 go generate ( Golang 裡面自動產生程式碼的工具 ) 來達到 generic 的目的.

Thread-Safe Lock Free Priority Queues in Golang

講解透過 Golang 如何達到沒有 lock 又能滿足 thread-safe 的 priority queue (擁有優先權的 queue )

Github 在這裡

Idiomatic Go

許多 Golang 的壞習慣整理. 比如說空白的個數, error 變數的命名規則.. 等等.



Python



Android/JAVA/NODE.JS/Scala



Docker

Moving from Docker to rkt

中文翻譯: 三年后,我们从 Docker 转到了 RKT

最近由於 Docker 公司的不少事件 (名稱有 Docker 開頭就會提告,或是說 OCI (Open Container Interface) 是偽議題,都讓許多開源界的人不太開心. 不論是 Kubernetes 或是 DCOS 都在醞釀把其中的 Docker Container 換成其他的 Container.

那麼,可以看看 coreOS 的 rkt .

DockOne微信分享(六十六): Docker网络方案初探

主要探討 CNI 與 CNM 的差異外,並且透過 Calico (一個網路架構的工具,類似 ip addr 但是簡單點,但是功能卻沒有比 ONOS 強 ) 的實體建置,讓大家了解 CNI 與 CNM 的差異.



Kubernetes

Kubernetes 純手作部署在 Ubuntu 16.04

不錯的基本教學,如何從頭開始建置 Kubernetes .

kelseyhightower/kubernetes-cluster-federation

Kelsey Hightower 寫的教學文章,循序漸進的來建置 Kubernetees Cluster Federation .

Kubernetes 101

Kubernetes 基礎教學,從整體架構, etcd, API Server 到 Pod, Service, Kubelet 都有清楚的簡介.

Kubernetes 1.4: Making it easy to run on Kubernetes anywhere

Kubernetes 1.4 的更新,最大在於 Kubeadm 的出現.

Kubeadm 使得你建置 Kubernetes Cluster 變得更像是 docker swarm mode .你要建置 master node 只要使用 kubeadm init ,要加入一個節點的話就可以使用 kubeadm join --token=xxxx <master_Ip>



iOS/Swift



其他程式語言

Rust and Rest

如何透握 Rustlang 來實現 Rest server .



論文收集



Machine Learning

一个优秀的数据分析师是怎样炼成的?

一個專業的 Data Scientist 不僅僅要懂的了解 Data 真實的意涵外.也要能夠快速了解與認知到資料對於商業洞察力. 所以本文對於 Data Scientist 的專業度期許相當的高.

常常聽到有人說 Data Scientist 應該是 Data 的 PM .意思就是說 Data Scirentist 對於自己擁有的資料要相當的了解之外,對於沒有(或是不了解的)資料更是要有像 PM 般積極理解的決心.

要靠數據尋找分行營運新機會,玉山資料科學團隊經驗大公開

講解玉山銀行做 Machine Learning 的經驗談,從資料的 ETL 到尋找資料能回答的問題.

分析的層面從最為人了解的信用卡推薦到解決不少分行間的經營差異與想出改善的方式.

是很推薦的 Machine Learning 文章與範例.

WHY DEEP LEARNING IS SUDDENLY CHANGING YOUR LIFE



網站文章

如何实现1080P延迟低于500ms的实时超清直播传输技术

這一篇文章是講解如何實現 1080p 的低延遲 (低於 500ms) 直撥的介紹文章.

不過內容意外的淺顯易懂與循序漸進. 從 Video Streaming 的基本原理, H.264 的格式解釋, latency, jitter 發生的原因講解到 TCP, UDP 與封包遺失的基本原理.

整篇文章嚴然變成 Video Streaming 的基礎教學,相當建議有興趣的人來看看.

iThome Container Summit 2016 Day

很清楚的紀錄 Container Summit 的每位講者與主題的重點.



網站收集

Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications

Design Patterns 我們都聽多了,但是你有聽過 Cloud Computing 的 Design Patterns 嗎?

眾所皆知的從 Cache-aside pattern 到 Circuit Breaker Pattern 都是常聽到的雲端運算相關的 Design Patterns .

一起來學習.



有聲書/影片心得