TOEIC Preparation
2013-05-26

昨天參加了一場 TOEIC 英語測驗。我趕在這個場次最後一個報名日2013/4/17日報名,而後大約花5個星期的時間準備。 我第一次寫模擬測驗的成績大約是815分。現在考完估計應該有900分,如果沒有應該就是他們的讀卡機有問題(誤)。這邊分享一下我考試的心得。

Update: “
:00” 聽力成績: 475
閱讀成績: 470
總成績: 945
成績公佈,閱讀發揮的比考前模疑好。在考試的當下就感覺的出來,快速的閱讀很重要。全部寫完我還剩約5~8分鐘檢查。

考前準備

準備用書有:

  1. 國際學村 NEW TOEIC 新多益聽力題庫大全
  2. 國際學村 NEW TOEIC 新多益閱讀題庫大全
  3. 國際學村 NEW TOEIC 新多益題庫解析【全新試題版】
  4. 多益測驗官方全真試題指南III TOEIC Official Test-Preparation Guide Vol.3 【1 Book + 2 CDs】

聽力題庫大全、閱讀題庫大全裡面已經幫忙排好課表,只要照表操課即可。 不過寫了1,2周,就發現自己的進度開始落後了,畢竟現在是工作中,回家後時間並不是這麼充裕。 原本打算寫完上面4本書,再另外到圖書館借閱幾本書來練習。因為時間緊迫,只好專注把上面的書讀過,並想辦法複習。

事實上到最後,題庫解析我只寫了一回,聽力題庫大全、閱讀題庫大全最後部份模擬測驗沒寫。OG全真試題2回全寫完。 然後概略的複習我比較不擅長的聽力題庫part4,及閱讀題庫的文法單元。

在考試前兩周,我一直後悔報名的太早,如果讓我多一個月準備,應該可以準備的更完整。不過也來不及退費,只好硬著頭皮上了。 考前3~4天,我做了官方全真試題,按照網路上答對題數跟分數的對照表toeic-score-count,大約落在920~930左右。 全真試題裡沒有給對照表,只有給相對應的可能分數範圍,不過範圍大的很難參考。我的範圍大約在 870~960,取中位數也大約有900分。

做了官方全真試題,發現聽力題庫大全、閱讀題庫大全裡的題目比較困難,口音也比較重。我覺得這樣還不錯,畢竟準備的時候,還是要準備深入一點,才能在考試時游刃有餘。

上考場

考試過程跟寫全真試題的感覺很像,難度也差不多,所以我想成績應該會很接近我的模擬測驗。真的要說,考試時聽力稍微表現的比模擬時差了一點,但應該差不了太多。

這段時間的進步,我想主要有4項

  1. 文法,提昇約25分。我過去的文法不算很好,尤其是副詞。藉由這次準備測驗讓我弄清了一些觀念。
  2. 商業單字,提昇約20分。TOEIC的考題類型其實滿固定,多看商業單字有很大的幫助。聽力題庫大全後面附的單字表、mp3有很大的幫助(除了少數醫療的用詞,那些真的太少接觸,也背不起來)。
  3. 聽清楚關鍵字,提昇約20分。例如以聽力Part2來說,聽清楚when, where, how。或是Par3, Part4的時間詞 hourly 等等
  4. 適應口音、熟悉考試的對話型態,提昇約20分。

日常生活

我相信平常打好基礎會比考前1,2個月努力讀來的重要。而且我學英文不是為了考試,而是可以透過語言來接觸更多事物。 下面是我的小撇步。

  1. 高中時聽空中英語教室,後來上大學後轉 Advanced。雖然從大二開始就荒廢了, 到近1,2年才開始有一搭沒一搭的聽,不過我仍然覺得彭蒙惠出版社的東西真的很不錯, 每日課程內容的多元化讓台灣人在自學英文時能多點樂趣,而且提供一個合適的談話速度。 在我的能力提昇到可以聽出完整細節前,Advanced 仍然會是我聽力進步的方式。 未來實力提昇了,可以再挑戰美國廣播電台Fresh Air的人物訪談之類。
  2. 平時上網盡量使用英文介面。不管是 Google Search, Gmail, Facebook, Twitter, 都有提供設定語言的介面。 記得我第一次把 Gmail 介面改成英文的時候,”編寫新信”這個詞馬上換成了”Compose”。 這個我以前總沒記熟的字,從此我再也沒忘記它。 甚至你可以使用全英文介面的作業系統。這一點一滴的累積到最後都會有不小的影響。
  3. 上網使用 Google Chrome 瀏覽器的人,我建議可以安裝Google Dictionary (by Google)。 Google Dictionary的巧妙設計,讓你在網路上閱讀英文文章看到不懂的字,可以馬上點兩下提供翻譯、字典服務。 我們可以將翻譯語言設定為English,這樣馬上就有了一個英英字典可以使用。透過英英字典可以讓自己更了解單字的意思、或是再去發掘更多單字。
  4. 另一個Google Chrome專屬的應用程式NYTimes 則是提供了很好的新聞閱讀介面。當然以美國的新聞報導來說,沒有大量的單字量是很難讀下去的,不過我通常是試著讀TOP News的第一段,或是照片的描述。 閱讀國外新聞除了練習英文外,也可以增進自己接受資訊的廣度,認識這個世界正在發生的事,了解很多台灣媒體從不注意的新聞。

上述這些事並不是我想考多益才開始做,而是幾年前開始就陸續的進行。 未來一樣要繼續努力,即使達成了階段性目標,還是希望以後可以在聽英文演講時更順暢,掌握更多細節。

http://www.linux.org.tw/node/1 這個是很多熱心的軟體人收集起來的聚會日曆,有很多活動可以報名參加,不少在台北。 我是大約1年多前就把它加入自己的 Google Calendar,

最近發現很多朋友還不知道有這樣的東西,很推薦可以多去參加自己有興趣的聚會活動。不只可以學到很多有趣的新技術,也可以認識到很多熱心的軟體人。

最近接觸 Ruby on Rails,把一些使用心得補上。

正如同很多進化中的語言,Ruby on Rails 經常會遇到函式庫版本、執行環境的管理問題。我們可以使用Ruby Version Manager (RVM)來解決這個問題。 事實上我建議新手在第一次安裝 Ruby 前,就先安裝 RVM 來避免未來可能的問題。

這邊我示範如何在沒有 sudo 的權限下,安裝 RVM, Ruby, Rails Gem在自己的家目錄下。每位使用者獨力安裝自己的 Ruby Environment 有個好處,就是不會相互干擾,容易除錯。 我的環境是 Ubuntu 12.04,以下流程在 MAC OS 上也是可以運作的。(事實上這也是Ruby Version Manager (RVM)所提供的預設安裝方法,這裡只是提供我的經驗給大家參考)

安裝 RVM, Ruby, Rails Gem 於 ~/.rvm

1- 安裝 RVM

# install rvm via internet.
curl -L https://get.rvm.io | bash -s stable

2- 用 RVM 來安裝 Ruby

# install ruby 1.9.3 with rvm
rvm install 1.9.3

3- 用 Ruby 所附加的 gem 工具來安裝 Rails

# install gem
gem install rails

Ruby相依函式庫

但是要特別注意的是,在安裝 Ruby 的時候,因為 Ruby 依賴 OpenSSL, YAML 等等的函式庫, 如果你的電腦沒有這些函式庫,安裝 Ruby 時會遇到問題。有兩個方法來解決這個問題

請系統管理員手動安裝相依函式庫

以 Ubuntu12.04 為例,需要安裝 libreadline6-dev, libyaml-dev, sqlite3, libxslt1-dev, libgdbm-dev, libffi-dev 然後依照上述步驟2,開始安裝 Ruby

設定 RVM autolibs 為 enable

設定 autolibs 為 enable

rvm autolibs enable

然後依照上述步驟2,開始安裝 Ruby,此時,RVM會向你要求 sudo 權限,並安裝需要的函式庫。

Ref:

  1. How to install RVM debian requirements without giving sudo for rvm user. Answered by Chen-Han Hsiao
  2. RVM Autolibs

在Slide Share上看到Openstack Tutorial ,其中第12頁點出了雲端架構的構成要件。

  1. Strategic Planning 策略規畫

    • Consultants 顧問
    • Business Process Automation 自動化商業流程
  2. Operations 運作

    • Database Engineers 資料庫工程師
    • Operating System Techinicians 作業系統工程師
    • Systems Security Professionals 系統安全工程師
    • Network Experts 網路工程師
  3. Systems 系統

    • Servers, Firewalls, Load Balancers 伺服器、防火牆、負載平衡
    • Operating Systems 作業系統
    • Storage 儲存
    • Management Tools 管理工具
    • Virtualization 虛擬化
  4. Facilities 設備

    • Data Center 資訊中心
    • Networking 網路
    • Power 電力

其中 OpenStack 是包含了系統中的 儲存、管理工具、虛擬化。

讓我想到翟本喬學長的話,不是把幾台機器塞到幾個貨櫃裡面就叫雲端。重點在於,資訊服務能不能隨著需求而跟著加大、減少、改變。

Ref: 1. Openstack Tutorial

2013/5/16 參加了Amazon辦的 AWSome Day,在台北國際會議中心的201會議室,大約有500人參與了這次活動。 這是Amazon 第一次在台北舉辦這樣的活動。透過這樣的活動,大家可以更加認識目前 Amazon Web Services 所提供的服務。 事實上已經有很多台灣的團隊使用了 AWS,現場也有幾位Amazon 技術人員提供咨詢服務

開場的 Keynote 是介紹 Amazon Web Services 的核心理念(Help Customers to save money)、規模成長。 這一段就像是產品推銷,不過其實很適合還不認識這些服務的用途的人來聽。以目前 AWS 的服務來說,確實可以為企業帶來穩定且相對收費不高的基礎資訊服務,讓企業在打造應用的時候,可以無後顧之憂.

無數的知名應用服務中,我想 Dropbox 是台灣使用者最為熟悉的。而美國 Netflix 則是應用了Amazon Web Services,打造了目前最熱門的電影串流服務,據統計Netflix 就佔去了北美1/3的下載網路流量。

後面大約6小時的課程則是針對,Computing Instance, Networking, Storage, Content Delivery 等等介紹 Amazon 相對應的服務,並簡單示範操作方式。

包含常見的 * Amazon Elastic Compute Cloud (EC2) * Amazon Simple Storage Service (S3)

以及 * Amazon Virtual Private Cloud * Amazon CloudFront * Amazon Route 53

最近推出的 * AWS Elastic Beanstalk

上面沒有全部列完,因為各別服務種類確實很多,上面是大家較常開始使用的服務。 這些服務大多都是 pay-as-you-go,也就是使用多少就付費多少,大量使用者有一些優惠; 對於小量使用者也非常吸引,可以小量的建立自己的專案應用,再慢慢擴大規模,而不用一開始就付出大量金額。

活動的最後還有抽獎,送出了一台 Amazon Kindle,可惜我沒抽到。不過每位參加者都可以拿到一件T-shirt、$25美元的 voucher讓大家可以回家試用 AWS。

Ref:

Netflix Still Eats a Third of the Web Every Night; Amazon, HBO and Hulu Trail Behind

Google 推出行動硬碟、日曆的離線存取已經有一段時間,我覺得這是個很棒的功能,不過實際使用後才發現有些眉角。 有些使用者安裝了離線版的 Google 行動硬碟Google 日曆,卻發現仍然沒辦法離線使用

原因出在於 Google 的離線功能需要進行啟用,而且使用者若有多台電腦,則必須為每一台分別開啟離線功能。 你有10台電腦,就要啟用10次。

我想這樣的設計是為了確保使用者的資料是安全的,使用者只在安全的個人電腦上使用離線資料, 不會說在1台電腦上啟用了離線,另外9台也跟著啟用,導致使用者的資料有外洩的可能。

Google 離線啟用的步驟如下,文章最後附上Google 說明連結。

設定離線存取

如要在您的電腦上啟用離線存取功能,請按照下列步驟操作。請注意,離線存取功能只能在 Chrome 中使用。

  1. 按一下畫面左方的 [更多]。
  2. 選擇 [Google 文件離線版]。
  3. 設定離線存取只需兩個簡單步驟,首先,按一下標示 [啟用 Google 文件離線版] 的藍色按鈕。幾秒鐘後,系統會讓您繼續前往下一個步驟。
  4. 在對話框右邊按一下藍色的 [從 Chrome 線上應用程式商店安裝] 按鈕。如果您已經安裝應用程式,則無需完成這個步驟。
  5. 之後,系統會將您導向至 Chrome 線上應用程式商店。按一下瀏覽器視窗右上角的 [加到 Chrome]。
  6. 應用程式安裝完成後,系統會將您導向 Chrome 頁面,其中會顯示 Google 雲端硬碟應用程式圖示。如要返回雲端硬碟,請按一下 [Google 雲端硬碟] 圖示。

不同檔案類型的存取權

Google 文件和試算表

現在就算沒連上網路,也可以檢視 Google 文件和試算表,甚至可以在離線時編輯 Google 文件。目前使用者還無法在離線狀態下查看 Google 簡報、表單或繪圖。進一步瞭解如何使用 Google 文件離線版。

其他儲存在 Google 雲端硬碟中的檔案

就算您沒連上網際網路,仍可在 Google 雲端硬碟資料夾中查看及編輯檔案 (例如 PDF、Microsoft Office 檔案、圖片)。您在離線時對同步檔案所做的所有變更,都會在重新連上網際網路時與具有時間戳記的所有裝置重新同步處理。

停用離線存取

如果您不需要在離線時存取您的雲端硬碟,請按一下瀏覽器視窗右上角的齒輪圖示,然後選取 [停止使用 Google 文件離線版]。

為了確保 Google 雲端硬碟的資料安全性,除了您自己的個人電腦或是具有受密碼保護的帳戶的電腦以外,請勿啟用離線存取功能。如果您在公共電腦或共用電腦上啟用離線存取功能,其他人可能會看到您所同步的 Google 文件和試算表,因而導致您的資料發生危險。

Ref:

  1. 在離線狀態下存取 Google 雲端硬碟
  2. Google 日曆的離線存取功能

cURL HTTP redirects
2013-05-09

cURL 是一個 unix 下以命令操作來取得檔案、頁面的工具,在網頁測試中經常使用到。不過要注意的是,cURL 預設並不處理 HTTP 重導向。

昨天在 github 上看到了一個有趣的專案 screenshot-as-a-service,這個專案給使用者的第一個範例就是用 cURL 來進行操作。不過在 Readme.md 裡有點小錯誤。於是我就將它改正過來,並送了一個 Pull Request。 revise usage example in Readme.md

今天發現作者已經將我的 patch 合併進了專案,有興趣的人可以抓下來試一試。

註:現今的網頁設計中,重導向至少有三種。

  1. HTTP redirects
  2. Redirects with HTML tag
  3. Redirects with javascript

在 cURL 中,可以下參數讓 cURL 進行第1種 HTTP 重導向。至於第 2, 3 種,cURL 則是完全不支援。原因很簡單,就如同 cURL 最初的設計,是用來取得檔案、頁面用的。它並不是特別用來處理 HTML 的工具,所以這2類重導向就交給其它的工具去處理了。

Ref:

  1. How do I tell curl to follow HTTP redirects?
  2. Redirects work in browser but not with curl!

一個程式至少會開啟三個Input/Output 串流,分別為

  1. Standard input (stdin) 標準輸入
  2. Standard output (stdout) 標準輸出
  3. Standard error (stderr) 標準錯誤訊息

操作時相對應的代號就是file descriptor。

在 Bash Shell 中,你最多可以有10個 file descriptor。利用這些 descriptor,你可以結合他們把輸出訊息、錯誤訊息,都導到同一個檔案中,並同時在螢幕上顯示出來。

I/O redirection 的順序性

在進行 I/O redirection 的時候,要注意順序性 (If redirecting both stdout and stderr, the order of the commands makes a difference.)。 以下2個命令是不同的。

$ sh script.sh >log.txt 2>&1
$ sh script.sh 2>&1 >log.txt

-第1個命令,將stdout 導向 log.txt,然後stderr 導向 stdout。如此一來,stderr 也將導入 log.txt。 -第2個命令,將stderr 導向 stdout,然後原先的stdout 導向 log.txt。此時log.txt 只會包含 stdout

進階應用的話可以參考 Fourdollars 的文章關於 Bash 的 Redirection 使用的心得。 裡面提到了如何將標準輸出訊息跟標準錯誤訊息都導進 fdisk.log 裡面,然後將標準錯誤訊息顯示出來。

Ref:

  1. 關於 Bash 的 Redirection 使用的心得
  2. File descriptor與I/O導向
  3. Advanced Bash-Scripting Guide: Chapter 20. I/O Redirection

git submodule
2013-05-05

我們可以透過 git submodule 來組合眾多小專案、函式庫,形成一個大專案。這樣的流程特別常見於應用程式依賴於底層的Library時。 (例如Web App 可能會想要引用 facebook-ios-sdk)

使用 git submodule 要先掌握2件事

  1. git 使用 .gitmodules 來對應小專案、函式庫於大專案中的資料夾位置。
  2. 每個開發者可以自行管理要不要取出各個小專案,每個小專案的設定將被註冊在 .git/config

##Add submodule

git submodule add /path/to/library library/position/in/my_project

##Check-out submodule

其它協同開發者在大專案中準備取出小專案前,需要先 init, 把小專案的路徑依 .gitmodule 的內容,註冊到自己的 .git/config (如此,git 才知道怎麼去取出、更新小專案)

git submodule init

之後就可以開始更新小專案了。

git submodule update

或是加入 –recursive 參數,把小專案中的小專案也一併取出來

git submodule update --recursive

##Remove submodule 移除 submodule 時,修改 .gitmodules 的內容,將欲刪除的 submodule 設定刪掉,並將大專案中的小專案資料夾刪去。再 commit 即可。

# use vim to edit .gitmodules
vim .gitmodules
# remove 
rm -rf library/position/in/my_project

.git/config 內已註冊的小專案路徑,也可將它刪掉(非必要,但建議)。

# use vim to edit .git/config
vim .git/config

Ref:

  1. Git Submodules: Adding, Using, Removing, Updating
  2. Git Submodule 的認識與正確使用!

最近工作上遇到一個問題,我們希望在自己的專案中保有專案所依賴的函式庫,而不隨著函式庫的版本更新而變動。例如我們也許想使用 boost 1.5.3 做為我們的依賴函式庫,未來等 boost 改版到 1.6 以後,也許先不急著更換,等到時機恰當再做更換。

在專案中保有的函式庫,檔案結構如:

project
├── lib
│   └── boost
└── src
    └── test.cpp

對於這樣的開發需求,我們可以採用 git 裡的 subtree 來幫助我們做到這件事。

** A. 將 lib 併入專案 **

$ git remote add -f boost /path/to/boost
$ git merge -s ours --no-commit boost/master
$ git read-tree --prefix=lib/boost/ -u boost/master
$ git commit -m "Merge boost as our subdirectory"

** B. 導入 lib 更新 **

$ rm -rf lib/project1
$ git add -u
$ git merge -s ours --no-commit boost/master
$ git read-tree --prefix=lib/boost/ -u boost/master
$ git commit -m "Merge boost as our subdirectory"

之所以採用 git subtree,而不採用 git submodule。是因為 git submodule 的更新原則基本上是會更新到最新的版本,以我們的開發需求並不適用。

Ref:

  1. How to use the subtree merge strategy
  2. Working with subtree merge