Architecting on AWS 課

這禮拜去上了三天的 Architecting on AWSTraining 課。查了一下這課在美國要收 USD $1,800,不知道為什麼台灣這麼好是免費的,佛心。

講師是個印度人,英文口音一開始有點不太習慣,不過反正跟著投影片教材走,理解上不會有太大的困難。教材是要來上課現場才會開放讓你下載的,算是這課的精華所在吧。教材投影片包含了詳細的註解補充很不錯,Lab 教材則有一步一步的操作說明,照著作就可以完成練習。

第一天: 上架構原則跟安全知識,Lab 1 練習開 VPC 網路

第二天: 介紹 IAM,Lab 2 練習設定 IAM。接著介紹 Route 53, ELB, CloudFront, CloudWatch, Elastic Beantalk 跟 CloudFormation。介紹 Auto scaling 的觀念跟 Pattern、如何 bootstrapping ec2 instances、Storage scaling (EBS,S3…etc) 的策略跟使用情境。最後是 Lab 3 設定一個 Auto scaling 架構出來,它給了一個簡單的 web app 可以操CPU,然後自動開 EC2 instances 擴充上去。挺有意思。下課前分組討論一個模擬架構是跨 regions 的文件分享系統。

第三天: 介紹 Application services: SQS, SNS, SWF, SES, CloudSearch 等等、Cost 概念以及 HA(high availability) 跟 Disaster Recovery(DR) 概念跟策略,最後教如何說服老闆改用 Cloud 架構、如何寫搬家計畫等等。Lab 4 則是利用 SQS 跟 Auto scaling 設定一個 Batch Processing Cluster,它給了一個簡單的圖片處理 script 當作 worker instances,然後當 SQS 等待的訊息過多時,會自動開 ec2 instance 擴充上去,處理完的圖片丟上 S3,也是一個很有趣的練習。

內容雖然免不了有基本 AWS 功能介紹,不過有教一些架構策略跟 Lab 練習算是不錯的收穫。VPC 跟 auto scaling 我之前都是知道但沒實際操作過,這次跟著教材練習很快就完成了 :)

我還報名了兩週後的 Systems Operations on AWS 課,到時再來比較看看。

BTW,午餐是 Buffet 自助餐還不錯。

RubyConf Taiwan 2014 售票開始

今年的 RubyConf Taiwan 日期是 4/25-26,地點在陽明大學,目前已經開放報名啦!!

本屆 RubyConf Taiwan 的邀請講者有:Rails Girls 社群創辦人 Linda Liukas 和 Terence Lee,她們將一同上台分享Rails Girls社群創辦經驗;Ruby 之父松本行弘先生與 Ruby 核心開發者笹田耕一先生是第二次在 RubyConf Taiwan 進行演講,展現他們對 Ruby 社群在台灣發展盛況的贊許與支持;還有 JRuby 的主要開發者 Charles Nutter;另外,以良葛格之名廣為人知的 Java 及 Python 語言的教育專家林信良先生也將發表主題演講;更有來自國內外的諸多程式好手分享心得與發現。本屆會議的內容精采可期,不容錯過。

摘錄自新聞稿

如何在本地端取出和送出 Github 的 Pull Requests

最近意識到 Github 上的 pull requests 其實也是 branches 參照,所以你也可以根據 pull request 編號在本地端直接取出。對於常用 pull request 功能來作 code review 的團隊來說,是蠻方便的小技巧。

首先編輯專案下的 .git/config,加上 fetch = +refs/pull/*/head:refs/remotes/origin/pr/* 這一行,例如:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:ihower/sandbox.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

接著打 git fetch origin 就會抓下來這些 remote branches:

From github.com:eduvo/keybridge
 * [new ref]         refs/pull/1/head -> origin/pr/1
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

接著用 checkout 取出,例如 git checkout pr/3 即可。

喜歡的話,也可以設成 git 全域設定,直接套用所有專案:

git config --global --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"

參考資料: Checkout Pull Requests Locally

本地端送 Pull request

舉一反三,那要怎麼在本地端送 Github 的 Pull Request? 參考 HSATAC 的這篇:用 Commandline 發 Github Pull Request

首先安裝 github 的 hub 工具:

brew install hub # 或
gem install hub

編輯 ~/.bash_profile

# https://gist.github.com/hSATAC/5591270#file-gistfile1-sh
# Usage: pr (pull request current branch into develop)
# Usage 2: pr stable (pull request current branch into stable)
# Notice: replace "team" with your github team account.
 
function pr() {
    base=$1;
    if [ "$1" == "" ]; then
        base="develop"
    fi
    hub pull-request -b team:"$base" -h team:`git rev-parse --abbrev-ref HEAD`;
}

程式設計不像建築工程,而是園藝維護

Update: Real Software Engineering by Glenn Vanderburg 這場演講也值得一看

前一陣子念「笑談軟體工程:敏捷開發法的逆襲」這本書,其中有幾篇文章的說法和比喻常被引用,所以我按圖索驥,也把原文章拿出來念一念,包括:

1. What Is Software Design? by Jack W. Reeves

「原始碼就是設計」「 Source code is the design」,避免花費太多時間在分析設計上,原始碼本身就是是軟體設計的產生,而 compile, link 等才是軟體的生產活動。因此,寫程式是「設計」的活動,而不是「生產」的活動,因此傳統設計文件的重要性就大大降低了。

程式設計不是 “building software”,而是 “designing software”。

2. Is Design Dead? by Martin Fowler

軟體系統的設計是演進來的,不能一步到位,而是要藉由憑繁與使用者互動得到的回饋來修改系統設計。

3. Programming is Gardening, not Engineering

與其把程式設計比喻成蓋房子,實際上更像是園藝。

4. Orthogonality and the DRY Principle

所有程式設計活動其實都是維護,因為絕大部分的時間都在改code,寫一點改一點。即使是新專案,也很快需要回頭作修改。

後兩篇是 A Conversation with Andy Hunt and Dave Thomas 訪談。Andy Hunt 和 Dave Thomas 是 The Pragmatic Programmer 這本經典的作者,他們後來共同創辦了 Pragmatic Bookshelf 這家出版社。其他五篇訪談也值得一看,都是關於軟體開發的真知灼見:

RubyConf Taiwan 2012 籌辦祕辛與心得

這篇拖稿超久,堆在草稿大半年了,真是不好意思。跟往年 2010, 2011 一樣,還是要留個籌辦心得紀錄。聽眾版心得文可以看會後記錄

該怎麼描述這次的 RubyConf Taiwan 2012 呢,應該是超乎預期的成功吧。大體來說,除了 wifi 搞砸了之外,其他似乎都讓大家還蠻滿意的,特別是議程和食物 :)

閱讀全文〈RubyConf Taiwan 2012 籌辦祕辛與心得〉

Yet another introduction to Git – from the bottom up 投影片

這是今年在 COSCUP 演講的投影片,Git 應該是近幾年最流行的版本控制系統,也有非常多的入門和教學資料。這次我則是從底層的原理和操作來介紹,探討 如何不用 git add 和 git commit 指令進行 commit 動作?

了解 Git 的資料結構之後,就會發現其實內部原理並沒有很複雜。對照發明人 Linus 的話,就會讚嘆版本控制系統就該這樣設計啊!

I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers
his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. by Linus Torvalds

p.s. 會後有會眾問我關於 workflow 和 rebase 的問題,可以參考我之前的課程投影片