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 的問題,可以參考我之前的課程投影片

如何使用 pry 作為 Ruby debugger 進行除錯

很奇怪,ruby-debug 或是 ruby-debug19 常常有版本問題,甚至還有 fork 版本 debugger。都不知道哪個沒問題。

最近發現其實 pry gem 就可以作為 debugger 之用,本來還以為只是漂亮的 irb 取代品,沒想到功能這麼強大。作為 debugger 使用的方法很簡單,只要在程式裡加上:

binding.pry

這樣就會設下中斷點。例如在 rails console 或 rails server 中,就會停下來讓你可以進行檢查和除錯。

可是如果你有用 Rails 伺服器,例如 pow 或 passenger 的話,因為不在同一個 process,所以必須加裝 pry-remote gem。它利用 DRb 技巧讓另一個 process 可以亂入進行除錯,用法改成:

binging.remote_pry

接著在 command line 輸入 pry-remote 就可以進行除錯了。非常簡單好用。

其他 pry plugins 也可以裝一下,包括:1. pry-stack_explorer 輸入 show-stack 的話可以看到 call stack 2. pry-debugger 可以加上 step, next, finish 和 continue 的控制

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩 投影片

這是今年在 OSDC.TW 演講的投影片。這次的內容相對簡單,就分享一個好用的工具給大家。會挑這個題目並不是因為自己對 Vagrant/Chef 非常熟很有研究(我們公司的 DevOps 當然比我厲害)。而是從一個 Rubyist 的角度想說 Ruby 社群裡有什麼好東西可以介紹給大家。畢竟 OSDC.TW 並不是以特定技術為主的研討會,來聽的人四面八方,所以從去年開始我就盡量考慮聽眾適合聽的程度,以後大概也會抱持這樣的想法吧。

Sublime Text 資源整理

自從 Textmate 2 官方開發陣亡之後,就改用 Sublime Text 2 來寫 code 了。整理一些找到的好資料跟 Plugins:

Plugins

Syntax 相關

Settings

編輯 Preferences > Settings > User 加上:


{
  # 把 tab 換兩個空白字元
  "translate_tabs_to_spaces": true,
  "tab_size": 2,
  # 高亮所在行
  "highlight_line": true,
  # 存檔時移除多餘的空白
  "trim_trailing_white_space_on_save": true
}

還有推薦什麼必裝的 Plugins 嗎?

修改 AWS RDS 資料庫設定,以 max_allowed_packet 為例

記錄一下,以後肯定還會再用到。

因為 MySQL 預設的 max_allowed_packet 設定是 1M,對有些應用來說可能太小了。如果是自己架 MySQL 改 /etc/mysql/my.cnf 就是了,不過租用 Amazon RDS 就沒有這種事了。又它的 web console 也沒有提供介面可以改設定(parameters)除了可以用 AWS 的 web console 介面來改,也可以透過 Amazon RDS Command Line Toolkit 呼叫 API 來改,步驟如下:

  1. 下載 Amazon RDS Command Line Toolkit

  2. 參考 credential-file-path.template,編輯 credentials.txt 把 AWSAccessKeyId 和 AWSSecretKey 填上去

  3. 設定環境變數,例如:
    export AWS_RDS_HOME=/Users/ihower/RDSCli-1.12.001
    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
    export PATH=/Users/ihower/RDSCli-1.12.001/bin:$PATH
    export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credentials.txt
    export EC2_REGION=ap-northeast-1

  4. chmod +x ${AWS_RDS_HOME}/bin/*

  5. rds-create-db-parameter-group <自定的parameters群組名稱> -d "群組描述" -f MySQL5.5 新增一個群組來放參數

  6. rds-modify-db-parameter-group <自定的parameters的群組名稱> -p "name=max_allowed_packet,value=2097152,method=immediate" 把參數放進你自定的群組裡 (這裡單位只能用bytes)

  7. rds-modify-db-instance <DB Instance Name> -g <自定的parameters群組名稱> 把群組綁到指定的 DB 上

  8. 這個設定似乎不需要 reboot 就生效了。要重開的話,在 web console 也可以 reboot。

完整的文件在 AWS Command Line Reference,例如


rds-describe-db-instances <DB Instance Name> 看這個 DB 套用了什麼 PARAMGRP 群組
rds-describe-db-parameters <自定的parameters的群組名稱> 看這個群組的 parameters