Showing posts with label opensource. Show all posts
Showing posts with label opensource. Show all posts

May 6, 2013

偵測目錄變動並自動執行指令

最近比較少用 IDE 後,coding 少了些自動化的回饋機制總覺得缺了點什麼,手動執行不知不覺也浪費了許多時間

想了想, 有些重複流程是可以用程式自動化的, 只要有程式來偵測目錄變動並自動執行程式就夠了,在 linux 裡確沒找到相關的工具(inotify-tools), 於是用 Go 做了一個命令列工具 watchf ,能彈性組合命令, 也可以在多個作業系統上使用

Usage

Usage:
  watchf [options]
Options:
  -V=false: Show debugging messages
  -c=[]: Add arbitrary command (repeatable)
  -e=[all]: Listen for specific event(s) (comma separated list)
  -f=".watchf.conf": Specifies a configuration file
  -i=0: The interval limit the frequency of the command executions, if equal to 0, there is no limit (time unit: ns/us/ms/s/m/h)
  -p=".*": File name matches regular expression pattern (perl-style)
  -r=false: Watch directories recursively
  -s=false: Stop the watchf Daemon (windows is not support)
  -v=false: Show version and exit
  -w=false: Write command-line arguments to configuration file (write and exit)
Events:
     all  Create/Delete/Modify/Rename
  create  File/directory created in watched directory
  delete  File/directory deleted from watched directory
  modify  File was modified or Metadata changed
  rename  File moved out of watched directory
Variables:
  %f: The filename of changed file
  %t: The event type of file changes

Example 1

程式碼存檔時從另一個 terminal 看到程式碼錯誤分析、compiler 編譯訊息跟測試結果

以Go為例:

watchf -e "modify,delete" -c "go vet" -c "go test" -c "go install" -p "\.go$"

以Java為例:

watchf -r -i 5s -e "modify,delete" -c "mvn test" -p "\.java$"

Example 2

放置一個背景程式&偵測當前目錄與子目錄的檔案變動, 接著自動同步檔案到另一個目錄(或著遠端目錄)

watchf -r -c "rsync -aq $SRC $DST" &

停掉背景程式, 只要在同個執行目錄裡下watchf -s命令

Example 3

將常用參數寫入設定檔,之後只要在同個執行目錄裡下watchf命令不用給定參數

watchf -e "modify,delete" -c "go vet" -c "go test" -c "go install" -p "\.go$" -w

Jan 2, 2012

使用 TOTP 與 Google Authenticator 實作 Two-Factor authentication

在食衣住行育樂都需要的網路的時候,現代人擁有許多網路帳號,但能記憶的帳號密碼通常只有少數組合,當遇到密碼外洩(e.g.資料庫外洩、病毒側錄密碼),相對的也影響了使用共同帳密的網路服務,對今日資安事件逐漸從惡作劇變往金融犯罪的趨勢,帳號有操作功能,個資,身份(實名化),對盜竊者來說帳號密碼可以產生許多價值。

帳號盜用除了個人影響外,間接牽連的還有親友與網路服務提供者,對網路服務提供者而言,帳號盜用是會提高營運成本與降低使用者信賴度的麻煩事,因此面對使用者規模與服務品質,強化帳號安全逐漸成為不可忽視的事情,Google 於去年底開始提供 2-step verification 做多層次的帳號驗證,別於以往硬體 OTP 的方式,透過 Smartphone 使用軟體(i.e Google Authenticator) 來規模化佈署。

目前得知使用類似軟體驗證機制的服務提供者有


在 Server 端的實作驗證流程不難,未來可能會變成一種常見的帳號驗證方法。

以下參考國外部落格文章與 Google Authenticator Android原始碼 實作 Two-Factor authentication 驗證流程,並釋出伺服器端原始碼


Nov 21, 2011

Memcached vs Redis vs MongoDB vs MySQL 效能比較

"記憶體是新一代的硬碟"在高流量網站內已是稀鬆平常的事情,像是採用 Memcached 做分散式快取服務即是典型的應用模式,Memcached 使用概念簡單且相關應用情境、文件、工具、演算法都已相當成熟,許多知名網站都運用 Memcached 提升scalability,像是GAE、Heroku 等PaaS 環境也有提供 Memcached 的收費服務,這些市場訊息已說明大規模的使用記憶體是可以合乎成本效益的。

Redis 是近年隨著 NoSQL 熱潮出現的 Key-Value store,其功能涵蓋了 Memcached 並且提供許多高階功能,在許多應用情境下相較 Memcached,能降低開發與營運複雜度,比如:
  • 豐富的資料結構(strings, hashes, lists, sets and sorted sets) 更易於設計適當的資料粒度增進資料重用的機會,且可依不同的資料結構特性在redis server上做組合與計算,降低開發上的複雜度與資料傳輸
  • 永續保存功能可充當簡易的資料庫降低重覆資料的一致性問題或一些特殊應用,像是當系統當機後能快速回復快取資料,避免大量重建的衝擊
  • 資料覆寫功能 提升讀取效能,提升 availability
  • 2.6可以寫script (lua)
  • 3.0版本預期還會加上Cluster做HA與Balancing有些data grid的樣子

但效能是否能與 Memcached 匹敵呢?以下透過大量的 get/set 操作做簡單的比較,並且加入MySQL與MonogoDB 做為參考