[Golang] 安裝流程 CoreOS/DEX : OAuth Server

挑選 DEX 挑選 CoreOS 的 Dex ,因為它具有以下特點: 支援 OpenID 支援 Kubernetes Authenication (via OpenID) 支援 OAuth CoreOS 開發 (XD) 以下就是基本建置方式 建立 Google API Console 憑證 進入 Google API Console 選擇已經有的專案(或是建立一個新的) 進入”憑證中心“,建立一個新的憑證. 選取 “OAuth 用戶端 ID “ 選取 “網路應用程式” 在 “已授權的重新導向 URI” 輸入 “http://127.0.0.1:5556/dex/auth/google/callback” 這邊會取得 “ID” 跟 “Secret” 記得存下來. 建立資料庫 (PostgresQL) 1. 設定 postgres docker docker run --name postgres -e POSTGRES_PASSWORD=YOURPASSWORD -d postgres 2. 登入建立相關 schema docker run -it --rm --link postgres:postgres postgres psql -h postgres -U postgres >Password for user postgres: >psql (9.5.4) >Type "help" for help. postgres=# CREATE DATABASE dex_db; > CREATE DATABASE postgres=# CREATE USER dex WITH PASSWORD 'dex_pass'; > CREATE ROLE postgres=# GRANT ALL PRIVILEGES ON DATABASE dex_db TO dex; > GRANT postgres=# \q //離開 postgre console 3. 編譯 DEX 先設定 postgres 環境變數,將剛剛資料庫密碼帶入 export DEX_DB_URL=postgres://dex: YOURPASSWORD@localhost/dex_db?sslmode=disable P.S.: 如果你跟我一樣 postgres 使用 docker ,記得將 localhost 改成該 container 的 IP. 下載並且編譯 DEX git clone https://github.com/coreos/dex.git cd dex ./build 4. 設定環境變數與啟動...
繼續閱讀

程式設計週記[2016/09/09]: Kubernetes GO!

這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下. 本週摘要 忙完了幾個研討會後,可以慢慢回歸正常的學習生活. 目前專注於研究 Kubernetes 的代碼與運作架構. 歡迎各位先進來討論討論 :) 此外,最近在籌辦新一次的 Golang 聚會 (Gopher Taipei Gathering ) 歡迎大家一起參加.如果發現報名報不到,歡迎參與閃電秀來分享一下 :p . Go fastcsv: 這個套件因為它支援的 csv 種類比較少所以能號稱比原生的 Enconding/csv 快上五倍. 衍生閱讀: github issue: encoding/csv: Reading is slow: 有人因為 encoding/csv 真的太慢了,於是發了 issue Go: avg 1.489 secs Python: avg 0.933 secs (1.5x faster) Java: avg 0.493 secs (3.0x faster) 恩… 真的不快吧 XDDD 有興趣的可以進去 issue 裡面看更多的細節 iamduo/workq: Job server in Go Golang 寫的 Job Scheduler ,具有一千多的 star Introduction to OAuth on gRPC 透過 GRPC 的方式來串接 OAuth Server [有用小技巧] 使用 gofmt 與 golint 將 snake_case 換成 camelCase 由於 Golang 還算新,所以許多人原本都是從 java 或是 python 來學 GO . 就容易在程式碼裡面看出一些蛛絲馬跡 ( 使用 python 的 snake_case 或是 使用 foo().bar().do() 這樣類似的用法. 這個工具可以幫你把 GO 程式碼裡面所有的 python snake_case 轉換成 camelCase. golint | awk '/should be/{printf("gofmt -w -r %c%s -> %s%c .\n", 39, $9, $12, 39)}' | sh coreos/dex: OpenID Connect Identity (OIDC) and OAuth 2.0 Provider with...
繼續閱讀

[TIL] 投影片- Docker Swarm 介紹

Docker swarm introduction from Evan Lin 介紹: 這是公司與工研院合作的專案中的教育系列中的教學投影片.主要是介紹 Docker Swarm ,裡面涵蓋三種 Docker Swarm 的介紹與比對. 並且附上簡單的指令來帶領著走一回. 有個小八卦是 Docker Swarm Mode 的 Routing Mesh 成功率有點低,找時間得來看看為什麼 gossip 會斷掉造成資料無法順利傳回來.
繼續閱讀

[TIL] 中文導讀 - 如何征服老舊的程式碼 (How to conquer legacy code)

原文: How to conquer legacy code 鏈結 “How to conquer legacy code” 如何征服老舊的程式碼 (英文): 以下為中文導讀: (原文七分鐘可以讀完) 常常聽到許多人很害怕來解老舊程式碼裡面的 bug 尤其越是剛入門的工程師.甚至有些人會使用到 “ 通靈 “ 或是 “ 猜測 “ 來表示閱讀老舊程式碼的痛苦. 這一篇就是一篇很好的教學來教導你如何面對老舊的程式碼. 首先是心態問題,面對這樣的程式碼千萬不要抱著 “這麼不好的架構,我一定可以寫得比他更好的心態來看問題“ It’s easy to look at work that came before you and decide it’s no good and that you can do better. This is the wrong attitude. It will lead you down a very dangerous path. 建議的方式如下: 虛懷若谷看待老舊的程式碼,絕不輕易重寫. 試著畫出循序圖來解釋整個程式碼流程 儘量做最小的變動 (minimum viable change) 來修復問題 每次的修改讓原來的程式碼能夠更好一點 慢慢地,當你更熟悉之後,就可以仔細思考整個架構與流程上的問題. 想要在老舊程式碼上面增加新功能,千萬要依照著原先的思考流程. 如果有新的架構與流程修改,試著透過 Adapter Pattern 來開始整合. 同場加映: “The Best Programming Advice I Ever Got” with Rob Pike Google 同為 Golang 發明者的 Rob Pike 曾經在某次採訪就有提到,受過最好的 debugging 建議就是來自 Ken Thompthon (C 語言的共同發明者) “Thinking—without looking at the code—is the best debugging tool of all, because it leads to better software.” 最好的除錯工具,不是直接去面對程式碼而是仔細思考整段流程.因為它能夠引導你做出更好的軟體… 心得: 還記得當初學校畢業之後,本來還信心滿滿的.結果第一份工作到了視窗軟體開發的公司 (Intervideo Inc.) 就發現所有的環境都不了解之外,還得去面對超過三五年以上的程式碼. 要面對如此龐大的架構的老舊程式碼,當初的部門經理就很推薦我使用循序圖的方式來慢慢瞭解整體架構.透過這些方式進行最小變動的修改來解 bug ,並且慢慢的來了解整個軟體的架構. 後來對於系統架構越來越有了解後,更了解思考對於解決問題的重要性.不論是整體架構的思考,或是對於流程的改造與優化都有事半功倍的效果. 最近常常在推特或是臉書上看到大家對於老舊的程式碼困擾,於是把這篇文章介紹出來,希望能幫到更多的人.
繼續閱讀

[研討會] Modern Web 2016 - Day2 上台日

第一天的心得 我的演講: 利用 Golang 架設 Line 機器人,作為網站的推廣大使 Modern Web 2016: Using Golang to build a smart IM Bot from Evan Lin 演講心得 之前 COSCUP 講得太快,所以不自主地把投影片的數量又加大不少.不過就變得太長. 太多部分在著墨 Golang,這也是因為這個場子沒有講解 Go 的人.會想要推廣 Golang 花太少來著墨 BOT 與 LUIS ,不少同學都是會後才來詢問. Tuning NGINX for High Performance 投影片,所有相關鏈結 Apache will handle whole service before response it, it might have problem for 10k connection. Nginx focus how to handle more usere in one server. To improve whole performance from architecture, please consider CACHE in any layer starting from Appliation. Basic Nginx placement: Host Nginx as load balancer or reverse proxy. Client <-- HTTP/2 --> NGINX <-- HTTP/1.X, FastCGI, UWSGI, etc --> Servers OS Tuning for Nginx Refer this link. net.core.somaxconn net.core.netdev_max_backlog net.ipv4.ip_local_port_range sys.fs.file_max /etc/security/limits.conf, nofile setting One connection will open two files open, when you receive 2000 connections it mean at least you need open file limit over 4000. Overcoming ephemeral port exhaustion (短暫的 port 耗盡) include local...
繼續閱讀

[研討會] Modern Web 2016 - Day1

前提: 之前想好好的宣傳 Golang ,於是乎一次投了兩個研討會.其實本來問題是不大的,只是剛好是同個禮拜(一個週日,一個週四).真是太棒了 (昏倒…) 不過今天相當的開心的跟了碼天狗的幾位作者 ( 同時也是講者 ) LY ,海總理還有特地趕來聚會的 Tim Kuo . 還有新認識的一堆講者. 難怪不少研討會都說,想要認識講者最好的方式就是… 成為講者. Douglas Crockford (Paypal) - Typing 投影片 History of Typing: Language Alphabet (upper) Alphabet (lower for writing) Typing The indent of key is to avoid key collision. The arrange also to avoid collision. “0” should come before “1”, all keyboard arrangement still wrong for now. ASCII code original use to for “writer” not “computer” Old typewriter history: One key combine with two word (upper/lower), Shift key to machanical shift the key to another one. Ctrl key is to call key control charactor if exist. (TAB is control part in “i” key. Return key to return to the begin of line (just like 0x0a) Line feed key to scroll papper line (just like 0x0d ) 心得: 從一開始語言的起源,到了字母的發明,最後到了打字 (Typing) . Douglas 說許多科技其實其來有自,你必須要好好了解科技的源頭,了解許多事情的原因,你才會了解為什麼會有這些相關科技的產生. 舉例而言,拿很古老的打字機上面的鍵盤排列來說: Shift key 一開始打字機為了要能顯示大小寫,其實一個按鍵黏著大寫與小寫的字母.而 Shift 就是要能夠機械式地移動( shift it ) 那個硬件去切換大小寫. Control key 現在已經越來越少使用了,其實一開始鍵盤上面是沒有 Tab...
繼續閱讀