程式設計週記[2017/02/24]: GopherCon India 2017 眾星雲集

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

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

網路文章心得:

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

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

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

本週摘要

下週就是 MWC 2017 公司有參加聚會,並且有兩個攤位. 為了要準備這一連串的攤位展示,同事們忙了很久的產品也可以來展示一下.

這兩週小孩子的身體都不太好,好像也感染給大人.連我都不小心得了重感冒,後來才了解重感冒嚴重的時候,其實就跟喝醉酒一樣啊.整個頭根本一整個暈到個不行.



Go

谢孟军:The State of Go | ECUG Con 精粹系列

Beego 的作者分享 The state of Go ,同時他也是 Gopher China 的的創辦人.

FiloSottile/HeartbleedA checker (site and tool) for CVE-2014-0160 http://filippo.io/Heartbleed

Filippo Valsorda 是一個在 Cloudflare (恩.. 最近很出名的公司 XD) 從事加密工作的,他經常發表很多跟資訊安全與加解密有關的專案. 這是一個透過 Golang 來檢查是否有 Heartbleed 也就是檢查系統是否有 OpenSSL Leak 的套件.

You, latency and profiling @ GopherCon India 2017 by Filippo Valsorda

Filippo ValsordaGopherCon India 2017 的講題: 如何透過 pprof 針對減少 latency 的方面來提升你的 golang app 效能. 並且針對這個 talk 他臨時還寫了一個小工作 在這裡

GopherCon India 2017

這兩天跟舉辦完的 GopherCon India 2017 可以說是眾星雲集:

  • Francesc Campoy Flores (也有來過台灣的 Francesc 身為 GCP 的 podcast 主持人也是 Golang 的 Advocator)

  • Daniel Whitenack: Go for Data Science 的作者,不斷地倡導使用 Golang 來做 Machine Learning 的作者

  • Filippo Valsorda: Cloudflare 的加密部門 (話說最近這間公司很紅喔) 他有很多使用 Golang 的資訊安全工具都很方便.

  • Ian Lewis : 另一個 Google Advocate 在台灣算很常看到,因為他都來推廣 Kubernetes 跟 Google Cloud

  • Matthew Campbell: “Microservices in Go” 的作者 (這本書我從 beta 就買了)

接下幾天,我會挑幾個裡面很有趣的議題分享給大家…



Python



Android/JAVA/NODE.JS/Scala



Docker



Kubernetes

Kubernetes now Generally Available on Azure Container Service

K8S already GA on azure, also DC/OS already update to 1.8.8

DeepDive : Kubernetes Article List

在這裡整理一下強者我同事的關於 Kubernetes 的文章列表,歡迎大家一起研究.

  1. 在 AWS 上面使用 Kops 來安裝 (其實不難.. 只是要設定一下 domain)

  2. 如何透過 Kops 來設定 GPU node (本文 focus 在 AWS , GPU 日前才公布,歡迎大家交流心得)

  3. Open AI 有篇文章,講解他們如何透過 Kuberbetes 搭配 AWS 的 EC2 Scaler 來做 Auto-Scale ,這是一篇補充文章

最後補充 OpenAI 的文章在這裡



iOS/Swift



其他程式語言



論文收集

A fistful of Bitcoins: Characterizing payments among men with no names

Morning Paper 開始看 bitcoin 論文,該論文的作者 Arvind Narayanan 是開這門課的講師,上完三四堂,覺得能抓到很多重要觀念。

這邊也有筆記可以參考.



網站文章

My favorite command-line utilities

不論電腦變得多快,身為宅宅大部分工作還是在 command-line 下.這一篇選了很多好用的 command-line (zsh)

How APIs work — An Analogy For Dummies

寫的淺顯易懂… 關於 API 如何運作的.



Machine Learning

Learning to protect communications with adversarial neural cryptography

当机器学习遇上复杂网络:解析微信朋友圈 Lookalike 算法

講解在 Weixin 上面如何計算朋友圈的複雜演算法,其中包含著

  • 點擊量
  • 好友清單
  • 閱讀清單
  • 關注的網路

都是需要注意的,也有提到臉書跟 google 相關演算法,很有趣的內容.

Using Apache Spark for large-scale language model training

daleroberts/itermplot: An awesome iTerm2 backend for Matplotlib, so you can plot directly in your terminal.

可以讓你再 iterm2 上面顯示 Matplot ,這樣做 ML 更方便了.

Image-to-image translation using conditional adversarial nets https://phillipi.github.io/pix2pix/

使用 LUA 開發的工具可以讓你從一個圖片中學會並且做出類似的圖,比如說當她學會貓的圖片,不論你畫甚麼形狀的貓.都會把它變成貓..

你来手绘涂鸦,人工智能生成「猫片」:edges2cats图像转换详解

這一篇詳細解讀 pix2pix 的使用方式,並且透過一些有趣的使用方式(除了畫貓,還可以畫 Hello Kitty ) 來講解他如何訓練與預測.



有聲書/影片心得





[TIL][Go][System] 閱讀心得: 扛住100亿次请求?我们来试一试

這兩天最紅的 Golang github 大概就是這篇 “扛住100亿次请求?我们来试一试”

裡面主要就是根據 2015 春晚上使用的微信要紅包與發紅包的系統裡面提到 “扛住100亿次请求——如何做一个“有把握”的春晚红包系统?”

其實系統要求很低,有興趣可以玩玩看:

  • Server 端:
    • 這篇文章使用相當低的電腦來接受這樣的壓力測試
    • Dell R2950, 8 Core, 16G RAM.
  • Client 端:
    • 透過 esxi 來分成 17 台電腦來發送需求

代碼部分並沒有太多複雜的部分,主要是觀念上把所有的需求切割成數個 goroutine 來服務. 主要的代碼可以參考 github 或是最基本的 gobyexample 提供的 non-blocking channel operation

回過頭來,並不是一般人都有機會來試試看 10 billion 的連線機會.不過比較多的問題都會是怎麼我的電腦連幾萬個 (c1000k) 都撐不住了. 可以參考一下作者另外一篇基本文章: “c1000K 實踐報告”

裡面有提到基本系統設定:

  • 由於連線的時候其實系統本地都會開啟一個檔案來寫,所以需要修改文件開啟上限
    • /etc/security/limits.conf
    • /etc/sysctl.conf
  • TCP/IP 的網路優化,可以修改
    • net.core.somaxconn
    • net.core.tcp_max_syn_backlog

關於 tcp/ip 在 web connection 這邊有關的可以參考 nginx 的優化指南

  • 有些其他跟 tcp 接收有關的如下:
    • tcp_syncookies
    • tcp_max_tw_buckets
    • tcp_tw_recycle
    • timestamps
    • tcp_tw_reuse
    • tcp_fin_timeout
    • tcp_synack_retries
    • tcp_keepalive_time
    • tcp_keepalive_intvl
    • tcp_keepalive_probes

其實一路上要優化的部分還有很多,找時間慢慢紀錄一下.

參考鏈結:

程式設計週記[2017/02/17]: 情人節最幸福的就是跟家人一起

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

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

網路文章心得:

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

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

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

本週摘要

情人節左右似乎是雲端大廠的新產品發表會,先有 Google 的 Cloud Spanner 又有 HTTPS LB ,之後 AWS 又出了 Amazon EBS . 更別說深度學習最重要的平台(之一) Tensorflow 也在 02/16 正式發表了 1.0 的版本.

情人節最幸福的大概就是跟老婆(這輩子情人)跟女兒(相傳是上輩子情人) 一起度過了.



Go

muesli/beehive: A flexible event and agent system with lots of bees

透過 Golang 實作類似 IFTTT 的東西.

Top 10 Most Imported Golang Packages — Some Insights

有人分析了某個禮拜中最常被 imported 的 Golang 套件。

選出了十大套件,裡面有不少都是測試與 logging 用的。大家可以看看那些套件你們有沒有用過。

Building a Performant API using Go and Cassandra

使用 Golang 來建置高效能可以跟 Cassandra 互動的 API 很基礎的教學。 想學學怎麼透過 Golang 存取 Cassandra 並且從頭開始的教學文章可以看看這篇。

Exploring shared objects in Go

C 裡面使用 dynamic loading 是很平常的事情,但是在 Golang 裡面要怎麼用呢?

這篇文章詳細的介紹,並且有稍微比較與 C 語言不同的地方。

vim-go: New tool “GoAddTag”

vim-go 出了一個更好的工具,就是 GoAddTags 可以幫你直接在資料內加上 Structure Tag (json, xml, bson)

可以很快速地增加,減少或是更改內容. 再也不會不小心打錯 structure tag 了



Python



Android/JAVA/NODE.JS/Scala



Docker



Kubernetes

Highly Available Kubernetes Clusters

[Inside JD.com’s Shift to Kubernetes from OpenStack

](http://blog.kubernetes.io/2017/02/inside-jd-com-shift-to-kubernetes-from-openstack.html)

JD.com 分享他們從 OpenStack 轉換到 K8S 的經驗,主要原因是:

[TIL] How to to setup GPU experimental tag with kubernetes via kops



iOS/Swift



其他程式語言



論文收集

Fast and scalable minimal perfect hashing for massive key sets

code is here.



網站文章

Postmortem of database outage of January 31

業界都在傳 gitlab 因為不小心刪錯 production 資料而造成整個系統服務當機回朔六個小時的資料. 這一篇事後檢討報告可以好好的閱讀.

這裡有另外一篇中文的可以看看.

How eBay’s Shopping Cart used compression techniques to solve network I/O bottlenecks

Cheat Sheet: All Facebook Chatbot Interactions

一些關於 Chatbot 的 UI/UX 的列表.

淘寶架構的演變史

其實就是講述一段(黑)歷史,到底淘寶是如何從頭打造成世界上最大的拍賣網站.幾件事情值得注意:

  • 一開始淘寶也是買來的,從 PHPAuction 那買來第一版來改
  • 買來的架構並不難,但是能夠搭配業務快速演變就是相當的難
  • “好的架构是进化来的,不是设计来的”。的确如此,其实还可以再加上一句“好的功能也是进化来的,不是设计来的”
  • 任何牛B的人物,都必须有一段苦B的经历

這篇文章從一開始買來的系統,發現業務發展得太快需要有太多架構上的修改講得非常清楚. 真的是不可多得的一篇好文章.

Amazon Elastic Block Store (Amazon EBS) Enables Live Volume Modifications with Elastic Volumes

AWS EBS 支援線上動態擴容,過程不斷線也不影響效能。 ( 這是要逼死誰 )

還可以換 storage type

Google全球级分布式数据库Spanner原理

Cloud Spanner 出來後,可以看看舊文了解它的原理.

Introducing Cloud Spanner: a global database service for mission-critical applications

Google 改變世界的幾篇論文中 (MapReduce, BigTable, Chuppy, Borg, Spanner) ,總算又有一個從論文變成商品了. 參考: 五大神論文

當然宣傳內容很讓人驚訝, CAP Theorem 可以完全(強)滿足嗎?可以看看這篇文章

當然我們都知道 CAP 無法都完全支持,大部分會選擇某些比較弱,當另外兩項選擇強支持的時候.

“Spanner does not actually beat CAP theorem. It chooses C over A when P happens. But the infra team in google manages it so well so they could still deliver high Availability to most users.”

但是,當然這麼好的神器便宜嗎?

“開一台 0.9 usd/hour,儲存和傳輸另外算錢” refer kaif

難道 Spanner 論文出來後沒有人試著把 Spanner 做出嗎?

當然有! 就是之前很紅的小強資料庫 CockroachDB ,所以他們當然趁著風頭繼續推廣他們的 Open Source 小強資料庫

最後,別忘記 CockroachDB 使用 Golang 寫的!! 歡迎加入 Go程式語言 (Golang Taiwan, Gopher Taipei)



Machine Learning

Google軟件工程師解讀:深度學習的activation function哪家強?_幫趣網

Announcing TensorFlow Fold: Deep Learning With Dynamic Computation Graphs



有聲書/影片心得





[Coursera] Illinois: Cloud Computing Concept Part 1 : Week 4

課程鏈結: 這裡

學習鏈結:

課程內容:

這裡先簡單的介紹整系列的課程內容,希望能讓大家了解這個課程想做什麼.

這整堂課主要是圍繞著 Cloud Computing 經常會使用到的技術與相關的概念. 整堂課其實只有一個程式語言作業:

	使用 C++ 寫 Gossip Protocol

雖然課程裡面程式語言的作業不多,但是整體上的內容還算不少. 除了有談到一些雲端技術的基本概念:

  • Map Reduce
  • Multicasting and Gossip Protocol
  • P2P Protocol and System
  • K/V DB, NOSQL, and Cassandra (畢竟都談了 Gossip)
  • Consensus Algorithm - Paxos, FLP Proof

其實課程內容很有料,也可以學到很多的東西.

前提:

總算到了第四個禮拜了,本週的內容相當的充實.主要就是討論 Cassandra, HBase 之外,就是討論 Cloud Computing 裡面關於時間順序的問題.

時間的對應對於 Cloud Computing 一直都是一個很難解的問題,因為多個主機間的時間必定不相同.如何確保訊息間的因果關係 (Causal) 關係是不變的,這裡介紹了兩個方式:

Leslie Lamport 的 Lamport Timestamps 還有 Vector Timestamps

看完這個,也能了解為何 Leslie Lamport 會為了解決 timestamps 的問題造就他寫出 Paxos 了.

Week4 - Key-Value Stores, Time, and Ordering

Cassandra

Replica Strategy (備份的策略)

Simple Strategy:

就是簡單地透過 Partition 來在同個地方備份多份資料. 這邊有兩種方式:

  • Random Partition: 類似 Chord 的 Hashing (Consistent Hashing Ring)
  • ByteOrderedPartitioner: 直接給予一個範圍的來做切割
Network Topology Strategy:

如果你的 Cassandra 是跨多個 DC(Data Center) 的話,你就必須要參考這樣的備份方式. 可能是一個資料中心 (DC) 有 2~3 份的備份.

NetworkTopologyStrategy:

  • 會不斷的尋找 replica 直到不同 rack 為止.
  • 舉例: Clockwise N1 ~ N6. N1, N2 in Rack1. N3 N4 in Rack2.. N5, N6 in Rack 3.
    • 如果第一個 Replica 在 N3 ,則下一個 Replica 會出現在 N5. 因為要透過 clockwise 尋找出不同 Rack 的機器. N4 在同一個 Rack 所以不選.要選下一個 N5 .

對於 Network Topology 方式而言, Snitches 提供一個方式可以針對資料中心 (DC) 以及機架 (Rack) 來辨識的方式. 提供以下方式,細節可以看文件:

  • Simple Snitch: 不在意各種網路架構(連 Rack 也不在意)
  • RackInferring: 假設分類與你的 IP 有關:
    • 102.103.104.105 = X.<DC>.<Rack>.<Node>
    • 舉例而言:
      • 同個 Rack : 102.103.104.122, 102.103.104.123
      • 同個 DC 不同 Rack: 102.103.104.122, 102.103.112.123
  • PropertyFile Snitch: 透過設定檔
  • EC2 Snitch: AWS EC2 的區域來判別 DC, Zone-> Rack
    • Eg: X.<EC2 Region>.<Avaliable Zone>.<Node>

讀與寫的方式

Write:
  • 如果某個 replica 斷線, Coordinator 會先寫在自己這邊等待恢復
  • 如果全部的 replica 都斷線, Coordinator 會本地端暫存一下 (buffer)

當一個 Replica 收到 Write 的指令:

  • 先寫 commit log file
  • 寫在 MemTable
  • 記憶體滿的話,就 flush 到 SSTable (Sort String Table)
  • 透 Bloom Filter 來尋找有沒有存放該資料

刪除(Delete)

  • 不會馬上刪除,會加上一個 tombstone (墓碑)
  • tombstone 的資料再 Compaction (SSTable 滿了需要壓縮與精簡) 發生的時候就會刪除
READ:
  • 任何命令都會發送給 Coordinator ,然後尋找真正資料儲存的 Partition
  • 發送查詢到所有的 replica ,等到”特定個數 X “的 replica 回覆就回答給查詢的人
  • 收到各個 replica 的資料會比對,如果有不同會做一個 read repair 的動作來更新錯誤的 replica
Suspicion Mechanisms

Cassandra 透過 suspicion mechanism 來處理斷線或是結點出問題.

PHI 代表一個 heartbeat 變異數,也就是 timeout 的間隔.

Eg: PHI=5, timeout 10 ~ 15

Note: This already deprecated by Cassandra

CAP Theorem

資料庫的三大定理:

  • Consistency: 所有節點都要能在同一個時間讀到相同資訊
  • Availibility: 系統要在任何狀況下都要能夠運作,並且快速回覆.
  • Partition-Tolerance: 系統即使被切割的狀況下,要能夠繼續運作.

在一般的分散式系統中,通常只能有兩個能夠滿足.或是應該說三個只能有兩個被完全滿足,第三個可能會部分滿足.

Eg:

  • Cassandra:
    • Eventually (weak) consistency, Availiability, Partition-tolerance.
  • RMDBSs:
    • Strong consistency, Availiability, no Partition-tolerance.

BASE (Basically Available Soft-state Eventual consistency)

Eventually Consistency:

If all writes stop all its values will converge eventually.

Quorem

Quorem 就是選舉 Leader 的機制,而對於參加選舉的主機

R: 具有讀取的主機數 N: 所有的主機數 W: 具有寫入權限的主機數

必須滿足以下的格式:

  • W + R > N
  • W > N/2

Consistency 系列

  • Strong Consistency (RMDBs)
    • 就一般的強一致性
  • CRDTs
    • 只允許每次加一的變更數值.
  • Probabilistic
  • Red-Blue
    • 分成藍色指令跟紅色指令,紅色必須要在同個 DC 中保持特定順序,藍色則不需要.
  • Per-key sequential
  • Causal
  • Eventual
    • 所有寫入動作停止後,資料就全部會一致

HBase

Feature:

  • Yahoo 開源
  • Facebook 內部使用
  • API:
    • Get/Put (row)
    • Scan (row range filter)
    • MultiPut
  • 比較重視 Consistency

架構:

  • 切割成不同區域 (regions) 分散在不同的備份主機上
  • ColumnFamily 就是一群的欄位 (column)
  • Store:
    • 就是一個 ColumnsFamily + Region
    • MemoryStore 放在記憶體中的 Store

HFile 結構:

Refer to Cloudera Blog: Apache HBase I/O – HFile

  • 主要都是 key/value 架構,一個 HFile 包含多個 key/value pair
  • 每一個 key/value 內容包含著
    • Key length
    • value length
    • row id
    • col family length
    • col family
    • ts
    • key type
    • value

如何達到 Strong Consistency : Hbase Write-Ahead Log

流程:

  • client 寫入數個資料 k1, k2, k3, k4
  • 透過 HRegionServer 查到 k1, k2 在 region 1 而 k3, k4 在 region 2
  • 透過 HRegion 找到相關的 HFile
  • 這時候先將 log 寫到 HLog ,可以寫入失敗的時候可以再度重做
  • [預防資料遺失] 先將資料寫入 Hlog 然後才會去修改 MemStore
  • 透過 Store 裡面的 MemStore 將 HFile 裡面的數值修改

Time and Ordering

Introduction

時間 (time) 指的是各個系統中用來同步的 clock ,在單機上面都是使用 CPU 的時脈作為所有內部軟體的時間資訊,來同步之用.

但是在分散式系統下,時間就變得難以同步.而每一個網路中的動作都需要的 ts 也就難以同步. 困難的地方有:

  • 每一台機器有自已的 CPU 時脈
  • 如果時間沒有同步 Message Delay 跟 Process Delay 就無法正確的限制

這裡有兩個名詞:

  • Clock Skew: 指的是兩個時間 (clock) 在速度上相同但是有起始點的差異
  • Clock Drift: 指的是兩個時間 (clock) 雖然起始點相同,但是在速度上不同

所以相同速度,不同起始時間的兩個 clock 有著 non-zero clock skew but zero clock drift

多久需要同步一次兩個 clock ?

如果最多能夠忍受時間相差 M 分鐘 (Clock Skew M) 那麼 M/(2 * MDR) 就需要同步一次.

參考:

Network Time Protocol (NTP)

NTP 為一個樹狀結構的方式來同步時間

根據以上的圖形

  • offset = ((t1-t0) + (t2-t3))/2
  • round-trip delay = (t3-t0) - (t2-t1)

Lamport Timestamps

這個定理就是由 Paxos 的作者提出的,當初他就是在做 Lamport Timestamps 的時候想到利用類似的方是可以解決 Consensus Problem 的方法.

基礎定理與標記

–> : 代表的是 Happen Before ,也就是左方的事件一定比右方的事件還早發生,不論雙方的時間究竟有沒有同步.

  • a –> b : time(a) < time(b) 同步過的時間必定 time(a) < time(b)
  • send(m) -> receive(m) : 因為傳送必定有網路需要傳遞的時間,所以開始傳送的時間必定比接受到的時間還前面.
  • 遞移律 a –> b, b –> c 則必定 a –> c

透過一張圖來講解更多關於 Lamport Timestamp

針對這張圖,稍微講解:

  • P1, P2, P3 不一定是具有同步的 timestamp
  • P1 左到右是直線的,具有因果關係.也就是 A –> B (A happen before B)
  • 有向的箭頭代表著某人傳訊息給另外一方. B ->(箭頭) F 代表著是 B 傳訊息給 F ,由於基礎定理 send(b) -> receive(f).所以 B –> F (B happen before F)

幾個範例:

  • F –> G
  • F –> J
  • H –> J
  • C –> J
  • A –> F : A–> B ; B –> F ; A –> F

針對 Lamport Timestamp 計算時間上,如果 send(b) -> receive(f) ,則透過時間算法為:

	max(local clock, message timestamp) + 1

Vector Timestamps

這邊會有三個資料 (x1, x2, x3) ,其中 x1 代表循序的 P1 timestamps, x2 代表 P2 的 timestamps …

而傳訊息的時候,就會把其他兩個傳給對方.舉例而言, P1 (2, 0, 0) -> P2 原本前面是 (0, 1, 1) 本來應該是 (0, 2, 1) 但是由於 (2, 0, 0) –> (2, 2, 1) 就是 (max(x1, y1), max(x2, y2), max(x3, y3))

Lamport Timestamp v.s. Vector Timestamps

  Lamport Timestamps Vector Timestamps
Timestamp Data Single Integer Tuple (x1, x2, …)
Causality obey obey
Identify Concurrent Events No Yes

關於作業 Homework

其實作業就是一堆 Lamport Timestamps 與 Vector Timestamps 的計算.整個計算相當的花時間,不過可以了解兩個算法之間的差異也相當的有趣.

程式設計週記[2017/02/10]: 雞年要開始努力了

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

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

網路文章心得:

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

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

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

本週摘要

過年的時候帶了家人去峇里島旅遊,事隔上次全家人出國也過了二十年了.家人永遠都是最重要的.



Go

travisjeffery/jocko: Kafka implemented in Golang with built-in coordination (No ZK dep, single binary install)

透過 Golang 將 Kafka 做出類似的功能.不需要依賴 ZooKeeper 並且是 single binary.

Go vs. Swift: The Languages of The Modern Tech Giants

一份文件比對 Swift 與 Golang 在各個方面的比較.

My Go Resolutions for 2017

Golang 大神 Russ Cox 把他 2017 的目標訂立出來,有不少的項目,其中有一個就是 Package Management.令人期待

golang/dep: Go dependency tool

golang/dep Google 官方的 #golang dependency tool ,會不會之後整合進去呢?可以好好觀察看看

講解 #Golang 的 selectors ,淺顯易懂

講解 Golang 的 selectors ,淺顯易懂



Python



Android/JAVA/NODE.JS/Scala



Docker



Kubernetes



iOS/Swift



其他程式語言



論文收集



網站文章

[若渴計畫] Studying Concurrency

關於 concurrency 的學習整理文章,很值得好好深讀.

RethinkDB: why we failed

RethinkDB 在去年的十月宣布要關閉,那時候就說會找個時間來把失敗的原因檢討一下. 現在這份檢討報告出來了,來看看身為 DBAAS (Database As A Service) 公司創業失敗的檢討報告.



Machine Learning

CS565500 Large-Scale Machine Learning

清大課程學 Machine Learning 聽說老師也太有型了,講中文的課程,使用 python

https://cloud.google.com/blog/big-data/2017/01/learn-tensorflow-and-deep-learning-without-a-phd

用一系列的課程來教導你如何使用 Tensorflow 就算你不是 Data Scientist 的 Phd.

Google Data Engineer 的認證: Google Certified Professional (Beta)

GCP 認證的 Data Engineer

arxiv: Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer

Geoffrey Hinton 和 Jeff Dean 的神作,類神經網路取得 1000 倍以上的 model capacity 大躍進。

Scaling of Cloud Applications Using Machine Learning

講解 VMWare 如何使用 ML 來做 Web App Scaling.



有聲書/影片心得





程式設計週記[2017/01/20]: 我也只有毅力這個優點

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

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

網路文章心得:

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

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

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

本週摘要

本週是認真做事週,可以好好的把許多事情規劃並且處理一下.也更有時間可以把過去一些東西拿回來學學. 把 MOOC 繳費開始要學習,並且也要認真學習看一些機器學習的論文,看不懂就可以跟強者同事們討論看看.



Go

xtaci/kcptun: A Simple UDP Tunnel Based On KCP

kcptun 是一個透過 KCP (A Fast and Reliable ARQ Protocol) 來達成的 tunnel 的方式.

會注意到這個專案是因為以前的公司曾經為了 firewall penetration 而使用 UDT ( http://udt.sourceforge.net/ ) .但是 UDT 這個專案已經多年沒人維護,並且支援的程式語言相當的少 (C++) 要跟其他語言來結合就很麻煩.

快速整理: 在做 firewall penetration 由於封包特性,不使用 ICE protocol 下,最簡單方式就是將 TCP 封包改成 UDP 來做到資料傳遞到 stub. 但是 UDP 又沒有 TCP 的相關優點,所以有 UDT 這個將 TCP 的機制做在 UDP protocol 上面的專案.

KCP 看起來有不少優點: (https://github.com/skywind3000/kcp)

  • 支援語言比較多 (Go, C#, Lua…)
  • 沒有修改 socket 部分,完全透過演算法來用 (所以封包會大 10~20%)
  • Header file 24 byte include control and data sync
  • 近幾個月都還有在維護

UDT 比較麻煩點: (http://udt.sourceforge.net/)

  • 只有 C++
  • 一套完整的 UDP 解決方式,但是有不少雷可以踩
  • Header file 16 byte, separate control and data sync

KCP 畢竟是強國人開發,中文文件不少可能是一個優點.

相關鏈結:

Ross Cox:My Go Resolutions for 2017



Python



Android/JAVA/NODE.JS/Scala

Building the TensorFlow android example app on Mac OS

讓 Tensorflow 跑在你的 Android 手機上面直接做 prediction .透過這樣的方式,就算你沒有網路也能讓手機跑已經學習好的機器學習模型.

不過這個範例需要的手機配備還蠻高規的,



Docker



Kubernetes



iOS/Swift



其他程式語言



論文收集



網站文章

AirBnB original deck in 2008

原本 AirBnB 在 2008 年的 pitch

The Infrastructure Behind Twitter: Scale

Twitter 在 2017 新的一年談到

另外可以看看 Uber Scale 的方式

RUNNING ONLINE SERVICES AT RIOT: PART II

Riot Game 介紹了他們的 Container Orchestration 架構 rcluster 是主要透過 Go 來完成的 ADMIRAL 來寫自己的 Resource Scheduler . 文章是寫在兩個月前,而這個系統其實是在目前的接近一年前開始探討與開發,當然他們也是有觀察過其他架構的:

  • Mesos + Marathon (後來的 DCOS )
    • 不容易架設
    • 不支援 Container Group
    • 當時尚未支援 Docker Container ( Mesos 一開始只支援自己的 Container 架構)
  • Kubernetes (一開始的 LMCTFY )
    • 當時還沒有 Constraint
    • 之後有支援各種 constraint 或是 node select 甚至是之後的 1.5 要支援的 Taint
  • Fleet
    • 剛剛才 Open Source ,還不夠成熟
    • 比較適合建置系統服務,而不像是給一般應用程式部署而用.

所以他們在半年前建置了自己的 Resource Scheduler (Admiral) 結合了 Docker Container 的概念與 Mesos Constraint 的概念來建置,讓整個系統其實很像… 目前的 DCOS (笑) .

最後的結論也提到,他們正在思考將 Admiral 慢慢轉移到 DCOS 上面來處理.



Machine Learning

谷歌云首席科学家李飞飞:人工智能 极客公园 2017 年 大会演讲

新智元:2016年全球AI巨头开源深度学习库Top 50

Gigaom对话吴恩达:迁移学习是未来五年的重要研究方向

Andrew Ng 談到他在百度的相關工作內容,並且提到 Transfer Learning 與 Multi-Tasking Learning 將會是未來 AI 的趨勢.

Multi-task learning(多任务学习)简介

創造AlphaGo的台灣「土博士」,他們眼中的黃士傑

黃博士的故事,這篇專注在他進到 DeepMind 之前的事情

A guideline from Google - Best Practices for ML Engineering from Google [pdf]



有聲書/影片心得

ATP 205: PEOPLE DON’T USE THE WEIRD PARTS

最近剛離開 Apple 到 Tesla 的 Chris Lattner 接受 ATP (ACCIDENTAL TECH PODCAST) 的邀請來談談 LLVM 跟其他相關科技. 記錄一下一些重點摘錄:

  • 關於職涯轉換:
    • 當然有談一下關於 Apple 跟 Tesla 在職業生涯上面的轉換. 對於 Chris Lattner 從工程師到管理階層的轉換,他自嘲不是一個所謂的 People person 但是他喜歡這方面的轉換.
  • 有討論到 Apple 對於 Objective C 想要改善的想法,一直到了 ARC 甚至談到了 Swift 誕生的起因.
  • 關於 Swift 的開源 (Open Source):
    • Lattner 提到原本在他心中就覺得會發生,但是礙於公司政策無法來運作.
    • 其實從一開始的 Commit 到相關工具的開發,都有顯示出來 Lattner 是從 Open Source 的角色來思考.
    • 但是 Swift 2 Open Source 後, 公司無法規劃到說會得到那麼多的回饋.

其實有更多的部分,對於 LLVM GC 有興趣的人都很歡迎好好聽聽.整段訪問有兩個多小時.

從 HN 找到一些,關於 Chris Lattner 的八卦:

備註一下: Chris Lattner 是 LLVM 跟 Swift 的發明者跟主要維護人.

參考:



Meetup

GDG#32 《Tensor What? AI and Mobile - 行動應用與人工智慧》

昨天晚上 GDG Tensorflow on Android 的投影片:

影片

心得:

雖然前一天已經把範例跑過了(需要 Nexus 5 以上手機) 但是這次演講對於 Machine Learning 由淺入深並且很有趣的介紹.