最近讀到一份 “2014 Federal Plain Language Report Card”,是一份由民間機構檢驗美國聯邦政府各行政部門對於 ”Plain Writing Act” 的遵循程度的報告。該報告從法案遵循 (compliance)、書寫 (writing)、及資訊設計 (info design) 三個項目評估各部門是否能夠以簡單明瞭的方式說明政府的服務或法規,提出改進建議,並將結果公諸大眾檢視,以督促政府繼續改善。值得我國參考。

此報告所謂何來?這就要追溯到美國國會在 2010 年通過的 “Plain Writing Act” (暫譯為「直白書寫法案」)。此法案規定美國政府的行政部門必須以直白的方式書寫公開的政府文件,以增進人民對政府資訊跟服務的了解。該法案有以下幾點規定:

  1. 以直白的方式書寫公開的政府文件 (Plain writing)
  2. 訓練員工以 plain writing 的方式寫文件
  3. 機關內部需建立一套流程自我檢測對該法案的遵循程度,對外則需在機關網站設置專區說明此事,且至少一位聯絡人,接受公眾反饋。

什麼是以直白方式書寫?wiki 上給了一個清楚的例子。原文是這樣:

The amount of expenses reimbursed to a claimant under this subpart shall be reduced by any amount that the claimant receives from a collateral source in connection with the same act of international terrorism. In cases in which a claimant receives reimbursement under this subpart for expenses that also will or may be reimbursed from another source, the claimant shall subrogate the United States to the claim for payment from the collateral source up to the amount for which the claimant was reimbursed under this subpart.”

很難懂對吧?不要查字典了,來看看下列改寫過後的樣子:

If you get a payment from a collateral source, we will reduce our payment by the amount you get. If you get payments from us and from a collateral source for the same expenses, you must pay us back the amount we paid you.”

好懂多了吧?這就是這個法案的理由。政府還建立了一個網站教大家相關的字句用法。

這份報告對美國政府各行政部門打分數,請各部門上繳文件,填寫問卷,看看各部門有沒有乖乖遵守這個法案,評估結果除了上網公布之外,還有一位眾議員會發函讚揚高分者,鼓勵低分者 (所以這是非強制性的,各機關各憑良心)。美國政府各行政部門分數的此消彼長當然不是我們關心的事,但報告中針對缺點的改進建議卻值得一提,以問題較多的書寫 (Writing) 一項來說,他們檢查的方式已相當先進:直接用軟體 (Acrolinx) 掃描文件,除了可挑出簡單的文法跟用字錯誤之外 (動詞單複數、時態等,我們用不到),還可以找出一些進階的缺點,其中與中文能夠連結的部分說明如下:

  • 長句或複雜的用字 (Long sentences and complex words)。wiki 的例子講的就是這件事,或是再看一個報告中的例子:

Original: Daylight harvesting, the use of natural light to offset electric light in perimeter workspaces, offers the opportunity to reduce lighting energy by between 20% and 60%, assuming that daylight harvesting is only one component of an integrated lighting control system. (40 words)

More readable: Daylight harvesting replaces electric light with natural light in perimeter workspaces. When combined with other lighting control strategies, daylight harvesting can reduce lighting energy by between 20% and 60%.

除了句子長度,用法跟用字也要更好懂,例如 “offer the opportunity to” 改成 “can”;”assuming that daylight harvesting is only one component of an integrated lighting control system” 就說 “When combined with other lighting control strategies” 就好。

  • 被動語句 (Passive verbs)。報告中的例子:

Original: The JavaScript used on this site for creative design effects is not supported by your browser.

More readable: This site uses JavaScript for creative design effects. Your browser does not support JavaScript.

除了英翻中以外 (ex. 此網站使用 JavaScript 以呈現不被你瀏覽器所支援的效果),一般使用中文時此問題應該不大。

  • 隱藏的動詞 (Hidden verbs)。把動詞變名詞,再用一個動詞描述它。報告中的例子:

conduct an investigation (How about “investigate”?)

take into consideration (or just “consider”)

make adjustment (or just “adjust”)

這我們也很愛用,我隨便找了一個政府網站的新聞稿就看到了:「公布截至 104 年 1 月 7 日中午止,全國檢察機關受理妨害 103 年地方公職人員各項選舉案件收結及實施偵查作為情形」。「實施偵查作為」不就是「偵查」?其他例子相信大家比我更常看到。

  • 名詞堆砌 (Noun clusters)。太多名詞串在一起會讓讀者花額外心思去解譯它。報告中的例子:

National Electric Transmission Congestion Study

Recovery Act Interconnection Transmission Planning

Electricity Policy Technical Assistance Program

  • 贅字 (Needless words)。雖然無法直接類比,但使用中文時也有此問題。報告中的例子:

This kind of behavior (How about “this behavior”?)

particularly important

very powerful

  • 以條列式取代敘述式 (Narrative lists rather than bulleted ones)

另外,在資訊設計 (Info Design) 一項,雖然各部門在此項分數都偏低,但報告中並未給出具體範例,故此處只簡述此項的設計原則,就是利用字型、空白、顏色、圖示、圖表等,讓讀者能夠了解資訊中欲表達的重點。此項目他們是用人工檢視。

報告結尾也建議各部門更認識此法案跟清楚溝通的重要性,加強員工訓練,並發展針對不同屬性的民眾或不同主題的最佳表達方式。雖然我們百廢待舉的政府大概還不用考慮這種法案,但無論你是民眾,或公務機關內的公開文件撰擬者,偶爾可以想起這件事情,幫助政府跟人民的溝通更順利。


為什麼要裝 Sikuli 呢?故事是這樣的,這是正常的網站畫面:

sikuli-1

這是壞掉的:

sikuli-2

兩個網頁的原始碼一模一樣,只是壞掉的網頁有 javascript error,故無法用 XPath 之類的元素辨認方式設定 test oracle。那要怎麼設定 test oracle?方法有很多,首先根據 Test Pyramid 實務,最正確的就是「javascript error 應該在 javascript unit test 層級就解決,不應該留給 GUI / Acceptance Test 處理」,打完收工。如果要在 System Test 層級做一些事情,以這個案例的作法有二:一是在 test case 執行過程中驗證是否有 javascript error 的產生,有則 test fail,這部分可參考這篇,我是用其中的第一個方式:deploy 到 dev server 之前先插一段 javascript 捕捉 js error,不是很理想 (如果有人知道文章中所寫的安裝 firefox toolbar 的方式請指教);二是更直覺的做法:直接判斷畫面元件是不是 optically visible (因為 logical visible 上沒有差異),所以 sikuli 就出馬了。

至於為什麼要自找麻煩在 CentOS 下安裝 Sikuli,而不是用官方測試過的 Windows、Ubuntu 或 Mac 呢?還不是因為這邊的 jenkins server 架在 CentOS 上面的關係 QQ,而且還沒有 GUI,要用 headless 的方式跑 sikuli test cases。本文進度只到「在有預設 GUI 的 CentOS 6.5 上面把 sikuli 裝起來」,把 sikuli test case 改到 Xvfb 上面跑的時候就失敗了,在 DISPLAY :0.0 (實體顯示器) 上捕捉的圖案,在 Xvfb 上無法辨認出來,我想是螢幕圖案的辨識非常相依於顯示設備吧!如果有人知道如何在 Xvfb 上跑請指教。

在 CentOS 上安裝 Sikuli 幾乎都要手動,主要參考這篇這篇

必要套件

yum -y groupinstall "Development Tools"
yum -y install wget cmake
yum -y install libjpeg-devel libpng-devel libtiff-devel zlib-devel
yum -y install gcc gcc-c++ make numpy

leptonica 1.71

wget http://www.leptonica.com/source/leptonica-1.71.tar.gz tar zxvf leptonica-1.71.tar.gz
cd leptonica-1.71 ./configure --prefix=/usr
make
make install

opencv 2.4.10

wget -O opencv-2.4.10.zip http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.10/opencv-2.4.10.zip?r=&ts=1415654591&use_mirror=superb-dca3
unzip opencv-2.4.10.zip cd opencv-2.4.10
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr ..
make
make install

tesseract

svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr
cd tesseract-ocr/
./autogen.sh
./configure --prefix=/usr
make
make install

裝完以上之後記得 ldconfig 一下

終於輪到 sikuli 了

wget https://launchpad.net/sikuli/sikulix/1.0.1/+download/sikuli-setup.jar
java -jar sikuli-setup.jar

裝好之後 java -jar sikuli-ide.jar./runIDE 即可啟動

sikuli-3

P.S. Windows 上安裝 sikuli 只需要第五步…


工作上有使用 Robotframework 搭配 Selenium2Library 驅動 Firefox/Chrome 對網站做測試,並整合進 jenkins 的自動部署流程中。最近需要讓這些 test cases 能夠在沒有 X server (GUI) 的 CentOS 6.5 上面跑,同時也設定到該主機上的 jenkins 專案內。上網查了資料後很快找到解法,主要參考這篇

要讓瀏覽器能夠在沒有 GUI 的機器上跑,關鍵字就是 Xvfb – X virtual frame buffer,其原理是在記憶體內創造出虛擬的顯示裝置,讓 client 送給 X server 的顯示訊息經由設定 DISPLAY 這個環境變數送給它,而不是真正的顯示器。以下紀錄在 CentOS 6.5 64 bit 下安裝的方式:

安裝 Xvfb 及 Firefox:

yum install xorg-x11-server-Xvfb.x86_64 firefox

裝好之後測試一下有沒有畫面:(指令參考這篇這篇這篇,或 man Xvfb)

Xvfb :1 -screen 0 1600x1200x16 &
export DISPLAY=:1 (數字自選)
DISPLAY=:1 firefox http://www.google.com
DISPLAY=:1 import -window root test.png

打開 test.png 來看看,有網站畫面就成功啦。在行文當下我安裝好 Firefox 之後,啟動時會有錯誤訊息,可能是 Firefox 的 issue,我後來去下載 Firefox 的 binary,解壓縮覆蓋到原 firefox 目錄 (/usr/lib64/firefox) 就好了。

裝好 Xvfb 及 Firefox,指定 DISPLAY =:1 之後,就可以跑跑看 Robotframework 的 test cases,應該沒問題。至於如何整合進 jenkins?當然可以土法煉鋼先在 server 上開一個 Xvfb,並在 jenkins 的 robot command 前增加 export DISPLAY=:1,但 jenkins 其實有 Xvfb Plugin,裝好之後就可以自動在專案 build 之前開一個 Xvfb,build 之後自動關閉。

jenkins-1 jenkins-2


(之前給學校國際事務處的 NAL 實習心得)

NAL 實習心得 - 給非生醫資訊背景的同學

正文開始之前先簡述我個人的背景:我是電機所 CS 組博士班學生,大學跟碩士都是念 Computer Science,研究領域是 Software Testing,來實習之前已通過資格考,但學分還沒修完。對於 Bioinfomatics 背景的同學,申請到這邊實習我想是個絕佳的機會,可以同時兼顧原本的研究,但對於像我一樣非生醫資訊背景的同學,到這邊實習有什麼好處?對自己的研究是否有幫助?應該是許多人關心的。因此我歸納出幾個誘因供各位參考:

體驗美國的生活與工作文化

或許很多人已經有在美國觀光或短期居住的經驗,不過到美國觀光、開會,跟在美國工作、生活還是不太一樣的,在這邊生活一開始有很多瑣事要辦,有不少程序要跑,這些過程可能都是一次次的文化衝擊,而每一天上班、每一個社交場合,也是學習美國文化很好的機會。舉例來說,在台灣時大部分的事情(無論是生活還是課業研究)我都可以自己搞定,所以就算看過許多文章說 Networking 很重要,我還是沒有切身的感覺,但在美國,你會親眼看到美國的年輕人是怎麼主動跟別人攀談的(不管是正式或非正式的社交場合),你可以看到在美國的各種台灣團體,或在 NIH 工作的 Postdoc 們,有多麼注重 Networking,因為他們知道在這邊沒辦法獨善其身。另一個例子是在 NAL 工作,你可以體驗到什麼才叫做真正的責任制,不是台灣那種混合了打卡的責任制,因為我曾經在台灣工作過幾年,所以我更震驚於兩邊工作文化的不同,原來這個世界上有人是這樣工作的,成果也不會比較差。所以這會是一個體驗美國生活很好的機會。

工作內容與專業背景要求

工作內容簡單來說就是寫程式,所以你一定要會寫程式,且至少不討厭寫程式。我們目前主要是 在開發支援 i5k 計畫的各種工具與網站服務,網站後台可能是 Java Servlet 搭配 Tomcat,或 Python Django framework 搭配 Apache 等,以及幾種資料庫(如 PostgreSQL)的操作;前端是 HTML 5、jQuery 等,我想只要熟悉一種物件導向的程式語言,以及有讀寫過資料庫的經驗,應該就可以勝任技術能力的要求。令人頭痛的反倒是商業邏輯的部份,因為這邊提供的服務是要給生物學家做昆蟲的基因定序,所以如果你不是 Bioinformatics 背景,可能完全不懂那些專業詞彙 或網站的功能,像我現在還是一知半解。儘管如此,還是有很多工作不太需要 Bioinfomatics 的知識,例如你可以把某個網站後端加上 Queuing 機制以避免使用者的 Query 耗盡系統資源,或是把 好幾個網站的登入機制整合成單一簽入(Single-Sign-On),或是提昇網站的社交功能(facebook 帳號登入,資訊看板)等,都是我正在作或打算要作的。甚至假設你完全沒有網頁開發經驗,但是熟悉 Linux 系統管理,你也可以在這邊一展長才,因為這個部門才剛成立,人力有限,百廢待舉, 有很多內部開發或部署流程都有自動化或改進的空間。一旦你被錄取,這邊的主管會幫你找適合的工作做,所以不用擔心來了之後幫不上忙,他們也很歡迎你提出自己的想法。 P.S. 要惡補基因相關知識可以上 Udacity 的 Tales from the Genome

對於自身研究的幫助

這部份可能是不少人關心的,對於生醫資訊背景的同學來說,他們在這邊寫的程式(做的工具)可以投稿到相關的期刊或會議,但對領域不同的人來說沒有什麼直接的幫助。即便如此,還是有很 多方式可以讓你繼續你的研究:

  1. 與台灣的指導教授保持聯繫、或在這邊拓展新的人脈 (最近的馬里蘭大學距離 NAL 只有五分鐘車程)
  2. 工作的主管同事都是博士,你可以了解到不同領域的人處理問題的方式,你也會接觸到 Bioinformatics 的知識,跨領域的知識可能會碰撞出火花
  3. 想辦法將工作與你的研究連結。例如我的研究領域是軟體工程,而我在工作,就是親身在軟體工程的現場,所以我可以收集工作上與我想做的題目相關的資料,以我來說就是我們的或別人的軟體 bugs, 以及我們用的測試方式。另外我也想要在這邊導入之前在書上看過,這邊還沒有的一些軟體工程方法。 跟「工作產出可以直接發 paper」相比,的確比較辛苦,但這些都是獨立研究能力的訓練。

最後我要提的是,這個 program 的福利真的不錯,與千里馬相比,你要做的就只有送出申請文件, 不用自己找國外指導教授,不用一個人到當地張羅生活起居,實習的薪水也比千里馬的補助多, 但跟千里馬的不同是研究領域可能沒這麼相關,以及工作內容是以寫程式為主,如果你想出來看看,這是個很棒的選擇。