星期五, 1月 13, 2012

Python gflags

Google有一個叫python-gflags的project, 可以很方便地幫助讀取參數. 使用方法如下.

  • 安裝方法
    • sudo easy_install --upgrade python-gflags
  • 參數種類
    • string: 將參數解讀為字串
    • bool/boolean: 值可以是0/1, false/true, f/t
    • float: 將參數解釋為floating point number. 有兩個optional參數, 可以指定上下限
    • integer: 將參數解釋為integer. 有兩個optional參數, 可以指定上下限
    • enum: 如果輸入參數在預先設好的這個list裡, 為合法輸入, 否則會發出exception.
    • list: 以逗號隔開的一組輸入字串
    • spaceseplist: 以space隔開的一組輸入字串
    • multistring: 還看不太懂怎麼用.
    • multi_int: 還看不太懂怎麼用.
  • 使用方法
import gflags
FLAGS = gflags.FLAGS
# string, 參數意義為"參數名", 預設值, 說明
gflags.DEFINE_string('client_id', None, 'Client Id for authentication.')
gflags.DEFINE_string('client_secret', None, 'Client secret for authentication.')
gflags.DEFINE_integer('age', None, 'your age in years', lower_bound=0)
gflags.DEFINE_boolean('debug', False, 'produces debugging output')
gflags.DEFINE_enum('gender', 'male', ['male', 'female'], 'your gender')
# 設為required field
gflags.MarkFlagAsRequired('client_id')
gflags.MarkFlagAsRequired('client_secret')
def main(argv):
    try:
        argv = FLAGS(argv)
    except gflags.FlagsError e:
        print '%s\\nUsage: %s ARGS\\n%s' % (e, sys.argv[0], FLAGS)
        sys.exit(1)
    # you can use FLAGS.debug, FLAGS.age, FLAGS.client_id... here
if __name__ == '__main__':
    main(sys.argv)

星期三, 1月 11, 2012

[新聞] 宏碁上雲端 力推AcerCloud

Original Link
工商時報【記者詹子嫻╱拉斯維加斯9日專電】
在雲端風潮下,宏碁先前砸下3.2億美元購併iGware的成效,一直深受市場關注。宏碁在CES上對外展示最新「個人雲」成果,用戶儲存在PC上的檔案可傳送到微軟和Android平台的平板、智慧手機,並暫存在AcerCloud30日。
另外,董事長王振堂指出,2012年研發和行銷費用約增加營業額的1%,估算下來約50億元,主要將用以提供AcerCloud服務及運作。
AcerCloud將自第2季在北美、大中華區推出,第4季全球上線,宏碁預估2012年宏碁約有4成的產品會支援AcerCloud。
王振堂表示,未來是雲端社會,雲端跟雲端之間可互相交往,但世界級的雲端服務只有3~5個,如Google、微軟、亞馬遜等,宏碁要去競爭不太可能,但宏碁有一個自己的雲端社群,就能跟國際級雲端去交叉行銷。
未來硬體業者若缺乏一套完整服務,就沒有差異化,恐怕無法在產業成為要角。宏碁希望藉由AcerCloud提高客戶黏著度。
不同於一般雲端服務,使用者多將檔案儲存在業者的資料中心,AcerCloud則是以電腦為基礎,用戶可將存在電腦的檔案暫存到AcerCloud,其它裝置就能存取、編輯文件等。王振堂表示,目前支援微軟和Android系統,非宏碁產品也可使用,長期希望擴大串連到蘋果iOS,並希望透過AcerCloud替宏碁的平板及智慧手機加分。
對於宏碁將平板電腦單位移至PC部門,王振堂表示,主要是因Ultrabook與Tablet關聯性更高,考量相關零組件、技術資源共用的比例增大,加上產品精簡化後,筆電機種減少,所以將兩個部門整合。
但蘋果、亞馬遜在平板價位上下夾殺,平板逐漸朝M型化發展,恐不利宏碁、華碩等業者。王振堂坦言,過去內部也懷疑中間價位的平板是不是就會消失,但近3~4個月歐、美市場訂單卻一直湧入,看來299~499美元的中間市場還是會存在。
目前平板電腦仍有利潤,宏碁不會放棄,不過今年平板電腦市場仍多變數,包括低價199美元平板會持續多久,以及蘋果iPad 3功能,因此宏碁傾向保守策略,目標維持在200萬台。

星期二, 1月 10, 2012

Send SMS

現在是個手機門號比人頭還多的年代. 簡訊幾乎是每個人都有"能力"收的一個媒介. 如果service有狀況, 用簡訊通知是最有效的!


之前在survey transcribe service時, 找到了一個叫 twilio 的網站. 它提供的服務可多了, 可以用程式打電話給使用者(1), 然後再唸一段文字給使用者聽(2), 可以錄下使用者的回話(3), 還可以把使用者的回話轉譯成文字(4). 手機的部份則可以送簡訊(5), 還可以收使用者送來的簡訊(6)當做request, 再另外做對應的事. 可以很簡單地把程式跟電話整合在一起. 價錢看起來不太貴(打電話一分鐘2 cents, 接電話一分鐘1 cent, 每送一個SMS 1cent). 我倒也沒比較過類似服務收費就是了...

註冊的方式很簡單, 只要在它的首頁上點Try Twilio Free, 填上基本資料就可以使用他們的API了, 還有附送30 USD的credit可供試用. 之後它還會試著吸引你upgrade成正式用戶, 比如說再另外送25 USD的credit. 主要是要吸引你提供信用卡資料就是了...

之前帳號申請就放在那裡, 忘了! 今天剛好有一個場合可以試這個API. 主要是用crontab持續的去偵測目前server的狀況. 如果有需要注意的時候, 它會即時送SMS將當時的狀況送給能夠處理的人, 免得問題擴大.

它有提供各種不同語言的API, 最近都在用python, 所以就用它的python來達成目的. 真是無敵簡單的.

1. 安裝
在ubuntu上只要打sudo apt-get install pip, sudo pip install twilio, 基本上就將必需的python package裝好了.

2. 使用
在coding之前, 有兩個資訊是需要知道的, account id與token. 這兩個值可以在login後的dashboard上看到.
用了它,  twilio 才知道要跟誰收錢.
可以把這兩個值直接寫在程式碼裡, 或者是存成TWILIO_ACCOUND_SID與TWILIO_AUTH_TOKEN這兩個環境變數. 官方文件是建議存成環境變數, 這樣就不用擔心程式碼放到source control server上, 會把這兩個值洩漏出去.

有了這兩個值之後, 就可以送簡訊了. 程式碼如下.

from twilio.rest import TwilioRestClient

client = TwilioResetClient()

message = client.sms.messages.create(to="+12345556789", from_="4155992671", body="content")

上面三行, 就會把content這幾個字送到+12345556789這個號碼上. 因為是免錢的試用帳號, 它至少有兩個限制. 第一, 目的號碼必需先verify過. 第二, 來源號碼必需是 twilio 的sandbox號碼, 也就是上面寫的4155992671. 付費的就沒這麼麻煩了. 不過我現在也只是小量試用著玩兒, 沒那麼多顧慮.

3. 統計
既然是計費服務, 那統計資料肯定是要詳細的. twilio 它也有提供一些圖表顯示使用的數量及頻率等等.


之後只要那個service出事, 15分鐘內就會通知, 馬上就可以處理. 心安得多呀...