:::

Zotero引用文獻樣式之中文APA

Zotero引用文獻樣式之中文APA

image

Zotero是一個依賴Firefox的文獻書目管理套件,用來協助管理文獻、快速輸出學術文獻使用的引用樣式。我在之前做過介紹Zotero功能的投影片,而網路上也可以找到很多Zotero的相關介紹,而我個人也是用Zotero來寫作論文、管理參考文獻。

比較遺憾的是,Zotero基本上是以英語語系國家為主,因此引用文獻樣式中大多也都是英文為主的樣式。儘管Zotero有提供Zotero Style Repository並有非常多種的引用文獻樣式,但卻仍沒有看到專屬於中文,特別是我自己在使用的中文APA樣式。

值得慶幸的是,Zotero允許使用者自行設計csL(Citation Style Language)的樣式檔,因此我參考了張保隆與謝寶煖的「學術論文寫作:APA規範」與hiroshi yui建立的CSL,修改出一份「American Psychological Association in Pulipuli」來使用。經過數篇文章的測試與修改之後,目前此版本已經算是勉強堪用,但Zotero對於資料處理仍有極限,因此仍有需要手動修改的地方。

這一篇我將要介紹在Zotero中安裝「American Psychological Association in Pulipuli」(以下簡稱中文APA)的方法,然後補充仍須手動修改的細節,供使用Zotero的中文使用者利用。


Zotero與中文APA安裝

Firefox安裝

Zotero是基於Firefox瀏覽器的一個套件,因此在使用之前必須先安裝Firefox。雖然現在Firefox 4已經出來了,但習慣上我仍以Firefox 3為主,而且我偏好喜愛可攜版的Firefox Portable。

Zotero安裝

Zotero是以套件的方式安裝在Firefox中。

 

此外,如果要整合到OpenOfficeLibreOffice或Microsoft Word的話,仍需要安裝整合增益集。增益集非常依賴Zotero套件的版本,要更新Zotero的時候,請務必跟增益集一起更新喔。

以下是適用於Zotero 2.1的版本

中文APA安裝

最後是安裝中文APA,首先先下載這個檔案:

image

然後開啟Firefox,把這個檔案拖曳到Firefox視窗中,如上圖。

image

Firefox會問你是否要更新現有樣式,按下確定。

image

這樣就安裝完囉,你以後就可以在選擇引用文獻樣式時選用「American Psychological Association in Pulipuli」囉。以下我會再更詳細地介紹使用方法。


中文APA的使用

儘管Zotero在管理書目上已經幫了很大的忙,但實際上在使用時仍有許多細節需要調整。Zotero的操作基本上分成三大步驟:「輸入書目」、「調整書目」、「輸出書目」,而由於輸出書目的成果仍有需要手工調整的地方,所以我加上第四個步驟「輸出後書目調整」。以下就這四大步驟,一一介紹使用中文APA的細節。

步驟1. 輸入書目

Zotero的特色是可以從各個網站輸入文獻的書目。我找期刊文獻時常用Google Scholar(學術搜尋),找書本書目時則是用OCLC的WorldCat.org

由於Google Scholar實在是太好用,還能夠結合政大圖書館的OPAC,所以幾乎都能用Google Scholar來找到要引用的文獻資料。以下我以Google Scholar找尋「專題式學習小組溝通行為與成員角色之研究」這一篇期刊文章為例子,說明Zotero要怎麼輸入書目。

1. 開啟Zotero面板,選擇「收集」

image

安裝好Zotero之後,就可以在Firefox的狀態列下看到「zotero」的圖示,如上圖所示。點開之後就可以打開Zotero面板。

image

Zotero的書目管理都是透過這個面板來完成,例如語系切換、編輯書目資料、管理「收集」等等。

其中,我會使用「收集」(collection)功能來管理書目資料,他的功能跟「資料夾」、「目錄」的概念差不多。例如我在寫論文時,會將書目資料依章節存入「Chapter 1 緒論」、「Chapter 2 文獻探討」等不同的收集。你可以點選面板左上角的「黃色資料夾與+號圖示」來使用「新增收集」的功能,如上圖所示。

此例中,我建立了一個[TEMP]收集。待會就是將書目存入這個收集中。

2. 開啟Google Scholar搜尋結果

image

在安裝好Zotero,打開Google Scholar並搜尋「專題式學習小組溝通行為與成員角色之研究」之後,就會出現上面的網頁。請先確認一下搜尋結果是否出現了要找的文章,此例中我們要找的文章就是第一個結果。

image

網址列右方出現了「黃色資料夾」的圖示,這是Zotero的輸入功能按鈕,請點下此按鈕。

image

接著Zotero會請你選取要輸入的項目,我們就勾選要加入的「專題式學習小組溝通行為與成員角色之研究」吧。

image

然後就能看到Zotero的[TEMP]收集中出現該篇文章了。

步驟2. 調整書目

image

由於Zotero跟Google Scholar是英文語系國家為主的系統,在中文上有些地方需要調整。以下介紹的書目資料調整設定都是在Zotero面板中的「資訊」版面中進行。

1. 英文首字字母大寫規則(sentence case)

雖然這邊是在講中文APA,但是偶爾也會遇到英文題名、作者、期刊等資料的情況,所以英文首字字母大寫、其餘均小寫的規則仍是要注意的。

Zotero雖然有簡單的大小寫規則判斷,但它卻沒有辦法幫你判斷「專有名詞」。所以中文APA的設定是以輸出書目資料中的原始樣貌為主。我列出常見需要調整的部份,其餘細節請參考「學術論文寫作:APA規範」一書吧。

  • 標題、副標題、作者:首字字母大寫、其於均小寫。但是標題跟副標題中的專有名詞則依慣例首字字母大寫。
  • 期刊刊名:應列全稱,英文刊名每個字的第一個字母均大寫(冠詞、介係詞除外)
2. 統一書名副標題的分隔副號「:」

image

Zotero並沒有區分標題中的副標題。在圖書館的編目規則中,標題與副標題是以冒號作為區隔。英文的區隔是用半型冒號「:」並左右各空一格,中文則是用全形冒號「:」而左右不留空格。

常常會有人用橫線「」來分隔副標題,但圖書館編目規則會將之改成冒號,「學術論文寫作:APA規範」一書也是以冒號「:」來處理。

再提醒一下,如果題名是英文,標題是首字的第一個字母大寫,其餘均小寫。副標題也是第一個字母大寫,其餘均小寫。但是專有名詞則依慣例首字字母大寫。

3. 中文作者轉成單一欄位

image

雖然中文作者也是有姓名之分,但是在書目輸出時一般都是連名帶姓一起顯示,所以此處不應將中文作者名字區分成姓名雙欄,而作者名字應該保持在同一欄位。

image

Zotero在作者欄位提供了「兩個欄位」與「單一欄位」的格式。兩個欄位是預設值,可以填入姓跟名,適合填入英文作者;一個欄位則沒有姓名之分,適合機構或中文作者的全名。在作者欄位後面有個小方塊可以做「切換成單一欄位」或「切換成兩個欄位」的功能。

image

修正之後的作者姓名資料如上圖所示。

對了,團體作者應該用全稱,例如:「國立政治大學」,而非「政大」。

4. 「論文」的類型與大學

image

在撰寫論文時,同學們很常引用國內博碩士論文的資料。Google Scholar雖然找得到博碩士論文,但是匯入Zotero的格式並不正確,請務必手動調整。

  • 項目類型:改成「論文」
  • 類型:依照博士論文、碩士論文以及出版或位出版而有不同。常見的是「未出版之碩士論文」
  • 大學:要寫上大學全名以及系所全名
  • 所在地:大學的所在地。

未來有機會的話,我會考慮寫個博碩士論文網的Zotero解析匯入器,或是調整Google Scholar的匯入器功能看看吧。

5. 書頁的分隔線轉成半型的「-」

image

Google Scholar在輸出書頁時,書頁中間辨識起始頁數與最後頁數的分隔線是以全型的「–」來表示,上圖的例子中就是「137–164」。但是實際上應該仍是以半型的「-」表示即可。所以這部份也是要手動修改成「137-164」。

image

直接點選該欄位就可以進行修改了。

6. 刪除版本「初版」

image

APA中,初版是不需要註明的。但是Zotero並無法區別什麼是「初版」,因此輸出時會直接顯示。

如果匯入Zotero時版本是「初版」,我建議將此資料刪除。僅有二版或特訂版本才需要註明。

7. 加上語言「zh_TW」

image

這是一個區分中英參考書目的小技巧。你可以在「語言」欄位中加入表示正體中文的「zh_TW」,未來在輸出書目時,就能夠很明確的知道他到底是屬於中文參考文獻還是英文參考文獻。

語言欄位的值我是參考ISO 639ISO 3166所組成,前兩或三個字母是語言代碼(維基百科列表),後兩或三個字母是國家和地區代碼(完整列表)。

常用的有臺灣使用的正體中文「zh_TW」跟中國大陸使用的簡體中文「zh_CN」。

對於Zotero解析器不足的看法

Zotero雖然可以用解析器簡單地從資料庫中匯入書目資料,但如上面所述,通常還是需要經過許多加工,書目資料看起來才比較完整。

研究生2.0認為沒有辦法直接使用漂亮的書目資料實在是Zotero的一大缺點,但我個人則是覺得這有點強人所難。畢竟每個人撰寫文章的格式本來就很難統一,短期內應該還沒辦法解決這問題。

因此在此步驟中我提出了很多需要修正的地方,其實也只要修正這一次,接下來輸出之後幾乎就可以直接使用。請繼續往下看看到底怎麼操作吧。

步驟3. 輸出書目

Zotero輸出書目的方式主要有兩種,在撰寫文章時會用整合到編輯器的方式,而臨時使用時也可以直接從Zotero輸出書目資料。以下我介紹後者的方法。

image

在Zotero面板中,在要匯出的書目或「收集」按下右鍵,選擇「從選取的項目來建立參考書目…」。

image

建立參考書目對話視窗中,選擇「American Psychological Association in Pulipuli」,輸出格式則是先「複製到剪貼簿」。

3. 貼上到文件中

image

接著在Microsoft Word之類的文件編輯器中使用「貼上」,你就可以看到輸出的書目了。

許喬雯、岳修平、林維真(2010)。專題式學習小組溝通行為與成員角色之研究。圖書資訊學刊8(1),137-164。

以HTML輸出的樣式如上,其實還有行距跟凸排的樣式,不過這邊就看不到了。

步驟4. 輸出後書目調整

「專題式學習小組溝通行為與成員角色之研究」這個項目剛好是比較沒有問題的,但是有些特殊情況下輸出的書目就需要調整。大部分的修正都可以用編輯器中的「尋找與取代」功能來進行字串的替換。

1. 7位以上多作者的「等」

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯、等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

這是Zotero以中文APA預設輸出的樣式,但是其中「、等」是錯誤的,應該修正為「等」。

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

修正結果如上所示。

如有發現其他需要修正的地方,請大家踴躍告訴我吧。能從Zotero修正的我就用Zotero修正,不能的話我就寫在這邊做個記錄。


中文APA輸出展示

最後我用Zotero的中文APA列出幾種常見的中文書目資料作為展示,讓大家看看到底Zotero中文APA輸出的格式會是如何吧。只是在此看不出「行距」、「首行凸排」的樣式,但至少標點符號跟斜體都還算正確囉。

以下各別列出「正文中的引證」與「參考文獻」兩種不同的輸出格式,資料都有按照上述方法調整過,不一定是照著原始資料庫輸入的格式。

期刊的文章

(褚麗娟、黃剛銘、蔡坤哲,2004)

褚麗娟、黃剛銘、蔡坤哲(2004)。網路虛擬社群激勵機制之研究。出版與管理研究1(1),61-78。

會議論文(研討會論文)

(王瓊珠、洪儷瑜、陳秀芬,2007)

王瓊珠、洪儷瑜、陳秀芬(2007)。低識字能力學生識字量發展之研究:馬太效應之可能表現。特殊教育研究學刊32(3),1-16。

(博碩士)論文

(陳勇汀,2011)

陳勇汀(2011,3月)。合作式閱讀標註之知識萃取機制研究。未出版之碩士論文,臺北市:國立政治大學圖書資訊與檔案學研究所。

書籍

(Eric Freeman、Elisabeth Freeman,2005)

Freeman, Eric、Freeman, Elisabeth(2005)。深入淺出設計模式(蘇秉豐編,蔡學鏞譯)。臺北市:歐萊禮。

這一個例子是有編輯跟翻譯者的狀況。至於分隔英文作者名稱是要用頓號「、」還是英文的comma「, 」似乎尚未有定論,在此是以頓號「、」為主。

報告

(洪儷瑜 等人,2007)

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯、等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

必須要注意的是,這是一個作者人數為7人的書目。因此就如上面所說的,請手動將正文引證的「 等」改成「等」、參考文獻中的「、等」改成「等」。修正之後如下:

(洪儷瑜等,2007)

洪儷瑜、陳淑麗、王瓊珠、方金雅、陳美芳、張郁雯等(2007)。中文閱讀診斷工具臨床驗證性研究。教育部委託專案報告

網頁

第一次引用(林從一、羅竹芳、黃俊儒、陳志銘,2008)

第二次引用(林從一 等人,2008)

林從一、羅竹芳、黃俊儒、陳志銘(2008)。全國通識課程資料庫。全國通識課程資料庫。上網日期:2008年12月17日,檢自:http://get.nccu.edu.tw/getcdb/

這是一個作者為4人的例子。在中文APA的正文引證中,3到5人的書目,第一次引用時顯示全名,而第二次引用時只需要寫出第一位作者即可。因此上例中我列了兩次正文中的引用,你也會發現到又出現「 等人」的字樣,記得手動修正一下。


修改CSL的心得

中文APA是一個以XML寫成的Citation Style Language (CSL)檔案,如果了解CSL語法的話,大致上你也可以改出你想要的輸出格式。而Simple Style Generator這網站更是把CSL的設定以簡單易懂的HTML表單來呈現,即使你不懂CSL語法也能夠輕易地寫出你想要的規格。

但是CSL並不是一個很完整的程式語言,因此他的限制也非常地多。最麻煩的就是沒有字串的比對、搜尋、替代功能,頂多只能判斷資料的有無。如果Zotero能夠用比對字串的話,就可以實作中英文相容的文獻格式。如果能夠搜尋與取代字串的話,副標題的分隔也就不需要手動修改。

此外還有一些微妙的限制,像是「 等」前面一定會有空格或分隔符號「、」。我研究了老半天還是找不到修改的方法,所以只能在輸出之後手動修改。

而且Zotero許多欄位都無法用於CSL中,特別是判斷語系用的「語言」欄位,這也造成中英文參考書目在處理上的困難。我會在之後繼續討論這個問題的解決方案。

結語

儘管Zotero在解析器與引用文獻樣式輸出上仍有許多不盡人意的地方,但作為一個免費且開放的書目管理工具,Zotero仍然是十分優秀。儘管我的瀏覽器已經都已Chrome為主,但就是因為有Zotero的緣故,所以我電腦上還是常駐著Firefox。

這一份CSL檔是我在寫論文時開始建構,然後再之後二篇研究計畫中不斷地改進,到寫這篇blog時仍花了一些時間來調整,最後結果就是這樣了。應該還是會有許多錯誤,希望好心人士可以將發現的錯誤回報在下面的留言,讓我們一起來改進中文APA的樣式吧。 (more...)

Zotero語系切換套件:Zotero Bibliography Locale Switcher

Zotero語系切換套件:Zotero Bibliography Locale Switcher

image

Zotero預設安裝時是使用Firefox的語系,如果你是用中文,則他會用中文語系。如果你使用的引用文獻樣式並不是為中文設計的,那麼輸出的格式會非常奇怪。因此我們要Zotero的時候,要根據文獻的格式來調整語系。

about:config的調整方法

研究生2.0的「Zotero文獻格式改成英文」介紹了如何設定Firefox的about:config參數來修改Zotero的語系,但現在有更簡單的套件可以使用:Zotero Bibliography Locale Switcher

Zotero Bibliography Locale Switcher用法

安裝Zotero Bibliography Locale Switcher之後,就能夠從Zotero的設定介面中來調整。

image

請點開這個齒輪。

image

接著就可以從列表中的「Language」選單中,再選擇要使用的語系。因為我安裝中文版的Firefox,所以語系只有中文跟英文。

image

套件會提示你重新啟動Firefox才會生效。

image

你可以搭配QuickRestart套件,就能夠在Firefox的「檔案」選單中使用「重新啟動Firefox」囉。

(more...)

Windows一鍵執行SSH指令:AutoIT、Pietty搭配使用

Windows一鍵執行SSH指令:AutoIT、Pietty搭配使用

image

Linux的命令列畫面讓很多人惟恐避之不及,這對有許多指令需要依賴SSH連線、並在命令列輸入才能執行的DSpace來說,無疑是一大門檻。在此我提出一種可以做到「一鍵指令」的方案:利用AutoIt自動執行機器人,透過PieTTY的命令列模式,用ini設定檔來設定連線參數,來執行捷徑所指定的指令的作法。

這種作法對資安來說非常不理想,僅是一個簡便利用的應急方案而已。


一鍵指令的背景與目的

我現在要做的事情是:

  1. 在Windows的環境下
  2. 透過SSH連線到Linux伺服器
  3. 進行登入動作(以及金鑰確認)
  4. 然後執行一個指令。

而這個方案的目的是將使用者的操作簡化到極限,我希望使用者能夠以滑鼠執行一個檔案,就自動做完上述的所有動作。

一鍵指令方案概述

簡單來說,這個方案的作法是:

  1. 利用PieTTY的命令列模式來輸入登入資訊與要執行的指令
  2. 以ini檔案儲存登入資訊
  3. 在Linux伺服器端配置參數與接收命令的sh腳本
  4. 利用AutoIt來處理連線的細節
  5. 利用Windows的捷徑與捷徑後輸入的參數,將參數輸入給AutoIt

Linux環境配置

要做到這些事情,需要Linux伺服器端與Windows使用者端的環境一起配置才行。這邊先敘述Linux的部份,大致上是要做以下三件事情:

  • 建立帳號、密碼
  • 開啟ssh連線
  • 建立ssh-cmd.sh腳本

Linux伺服器建立帳號、密碼、開啟ssh連線等基本操作請參考鳥哥的Linux思房菜。在此最重要的是要配置接收來自客戶端指令的執行腳本「ssh-cmd.sh」。

在本篇的例子中,我以普通使用者「dspace」跟管理者「root」作為帳號、「password」作為該帳號的密碼來說明。

ssh-cmd.sh:執行指令腳本

因為帳號是使用「dspace」,所以我在「/home/dspace/ssh-cmd.sh」(SkyDrive備份)這個位置建立起腳本。腳本的內容如下:

#!/bin/bash
# Program:
#       Excute command and pause at finish.
## History:
## 2009/11/12    Pudding   First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export JAVA_HOME=/usr/java/jdk1.6.0_06
export PATH
export LC_ALL=en_US
export JAVA_OPTS="-Xmx128M -Xms64M -Dfile.encoding=UTF-8"

ANT_HOME=/opt/apache-ant-1.7.0
JAVA_HOME=/usr/java/jdk1.6.0_06
CATALINA_HOME=/opt/apache-tomcat-6.0.16
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC JAVA_HOME ANT_HOME CATALINA_HOME


if [ "$1" == "/home/dspace/tomcat_restart.sh" ]; then
        at now + 0 minutes < $1
        echo "Tomcat will restart now."
else
        $1
fi

echo ""
echo "====================================="
echo ""
read -p "Please press ENTER to exit. " doExit

這個腳本中設置了相當多參數,請依照你伺服器的實際情況來決定要設置的參數內容。

此外,由於Tomcat的重新啟動無法直接透過這樣的指令來執行,所以我改成以「at」執行一次的方式來執行。必須說明的是,這並不是很理想的作法,有待以後改善。

tomcat_restart.sh:重新啟動Tomcat伺服器腳本

如果你沒有需要重新啟動Tomcat的話,這個步驟是可以省略的。「/home/dspace/tomcat_restart.sh」(SkyDrive備份)是用來重新啟動Tomcat伺服器的腳本,內容如下:

export JAVA_HOME=/usr/java/jdk1.6.0_06
export JAVA_OPTS="-Xmx128M -Xms64M -Dfile.encoding=UTF-8"

/opt/apache-tomcat-6.0.16/bin/shutdown.sh 
sleep 1
/opt/apache-tomcat-6.0.16/bin/startup.sh 

要記得將這些腳本的執行權限開啟,他們才能正常地執行。

Windows使用者端配置

你現在需要在Windows中建立一個資料夾,例如「c:\ssh-cmd\」,然後把以下的檔案放進去:

PieTTY的命令列執行方式

雖然很多人都知道PieTTY是用來作SSH連線的,但是知道PieTTY可以透過命令列與指令檔案來進行連線並執行指令的人就不多了,其實這是基於PieTTY改編自PuTTY原始就有的功能喔。

具體來說,利用命令列來透過PieTTY連線的作法如下:

pietty0327.exe -l [ID] -P [PORT] -pw [PASSWORD] -m [COMMAND] -t [HOST]

裡面的參數中:

  • [ID]是要登入的帳號
  • [PORT]是連接埠
  • [PASSWORD]是密碼
  • [COMMAND]是「存放指令的檔案位置」,注意,不是指令,只是檔案位置喔
  • [HOST]要連線的主機IP
config.ini:連線配置

連線的配置資訊,我將它存放在「config.ini」中。「config.ini」的內容如下:

[ssh-dspace]
login=dspace
pw=password

[ssh-root]
login=root
pw=password

[ssh]
port=22
host=127.0.0.1

在此安排了兩種不同的身分,一種是以普通使用者「dspace」來執行,另一種是以管理者「root」來執行。除了重新啟動伺服器等重大指令之外,一般指令最好是以普通使用者「dspace」的身分來執行會比較安全。

ssh-cmd.exe:執行連線腳本

由於要執行指令必須要以存放在檔案中的形式來執行,所以建立這個檔案、並指引PieTTY來連線的工作,是交給AutoIt的自動腳本ssh-cmd.exe來執行。

ssh-cmd.exe是由ssh-cmd.au3編譯而來的,這是AutoIt的程式語言。內容如下:

Dim $user = "ssh-dspace"
Dim $script = ""
If $CmdLine[0] == 2 Then
	$user = "ssh-" & $CmdLine[1]
	$script = $CmdLine[2]
ElseIf $CmdLine[0] == 1 Then
	$script = $CmdLine[1]
EndIf

Dim $login = IniRead("config.ini",$user, "login", "root")
Dim $pw = IniRead("config.ini",$user, "pw", "password")
Dim $port = IniRead("config.ini","ssh", "port", "22")
Dim $host = IniRead("config.ini","ssh", "host", "127.0.0.1")

If $script == "" Then
	MsgBox(0, "錯誤", "請指定要執行的指令")
	Exit
EndIf

Dim $doExcute = MsgBox(1, "提示","您確定要在伺服器中執行以下命令嗎: " & $script)
If $doExcute == 2 Then
    Exit
EndIf

Dim $sh = "cmd.sh"
Dim $scriptHeader = "~/ssh-cmd.sh "

$file = FileOpen($sh, 2)

; Check if file opened for writing OK
If $file = -1 Then
    MsgBox(0, "錯誤", "無法開啟檔案")
    Exit
EndIf

FileWrite($file, $scriptHeader & $script)
FileClose($file)

Dim $cmd = "pietty0327.exe -l " & $login & " -P " & $port & " -pw " & $pw & " -m " & $sh & " -t " & $host
Run($cmd)
Sleep(1000)
If WinActivate("PieTTY Security Alert") Then
	WinActive("PieTTY Security Alert")
	Send("{ALTDOWN}Y{ALTUP}")
EndIf

這個腳本做了幾件事情:

  1. 接收來自外部的「身分」與「指令」參數(稍後建立Windows捷徑的時候,我會再說明怎麼輸入這邊的參數)
  2. 讀取來自config.ini中的連線資訊,包括「帳號」、「密碼」、「伺服器位置」、「連接埠」
  3. 過濾指令、顯示提示
  4. 將指令寫入「cmd.sh」檔案中
  5. 以命令列執行PieTTY連線
建立Windows捷徑

image

接著要建立到「ssh-cmd.exe」的捷徑,並且在捷徑之後加上「參數」。建立好ssh-cmd.exe並改好名字之後,你可以打開捷徑的「內容」,在「目標」的欄位中設定參數。

舉例來說,我現在要在伺服器上以「dspace」身分執行「/home/dspace/tomcat_restart.sh」的指令,那麼目標裡面的設定如下:

"C:\ssh-cmd\ssh-cmd.exe" dspace /home/dspace/tomcat_restart.sh

目標的值除了指定要執行的程式位置之外,還指定了要執行的身分「dspace」跟要執行的指令「/home/dspace/tomcat_restart.sh」。如此配置之後,就能夠讓使用者直接點選此捷徑,讓他自動執行這些動作了。

你可以利用這個例子舉一反三,建立執行不同身分、不同指令的捷徑,並組成一個操作列表,讓使用者易於選擇。也可以將此捷徑放到「開始」程式集裡面,讓使用者更容易執行各種操作。這些動作我是用InnoSetup在安裝時自動配置而成,不過那又是另一番長篇大論了。


結語

儘管一鍵指令的方案我研究了很久,但是仍有很多不完美之處,希望高手能多多指教。

其實這個是DSpace-DLLL寫書的一部分技術內容。之前寫完書之後就匆忙地投入其他事情中,到最近在使用AutoIt時,又把之前寫的檔案挖出來看。

這時候就會覺得這個Blog對我來說也是很重要的,如果沒有這些記錄,我恐怕很快就會忘記自己之前做過的事情了吧。

(more...)

CentOS中自動啟動Tomcat的亂碼問題

CentOS中自動啟動Tomcat的亂碼問題

image

如果要架設以Java、JSP、Sevlet系列伺服器端程式語言為主的網頁伺服器,Apache Tomcat(簡稱Tomcat)是相當有名的一套解決方案。我研究DSpace時也是使用Tomcat來架設在CentOS作業系統上。

因為Tomcat並不是CentOS內建服務而是我額外安裝的,所以我設定了crontab讓他在開機時自動執行。由於之前的參數沒有配置完善,導致開機自動執行Tomcat時,讓Java讀取檔案的編碼發生錯誤。

研究了老半天終於找到算是可行的解決方案,在這邊記錄一下。

Tomcat啟動腳本規劃考量

安裝好Tomcat之後,一般是以命令列執行[tomcat]/bin/startup.sh ([tomcat]表示Tomcat的安裝目錄),但是如果要以自動啟動的方式來啟動Tomcat,卻會因為沒有先執行/etc/profile中設置Java的參數,而會造成啟動失敗。

/etc/profile中的Java參數

先回顧一下DSpace安裝步驟裡,在/etc/profile設置Java參數的內容:

JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"
ANT_HOME=/opt/apache-ant-1.7.1
JAVA_HOME=/usr/java/jdk1.6.0_12
CATALINA_HOME=/opt/apache-tomcat-6.0.13
CLASSPATH=$CATALINA_HOME/common/lib/servlet-api.jar
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ANT_HOME JAVA_HOME CATALINA_HOME CLASSPATH

其中很重要的是「JAVA_HOME」跟「JAVA_OPTS」這兩項參數。前者是要告訴Tomcat要執行的Java環境必要的套件位置,後者則是執行Java時的參數設定。

Tomcat啟動腳本

如果要自動啟動Tomcat的話,則必須在腳本中加入Java參數設定才行。我建立了一個「/home/dspace/tomcat_startup.sh」的腳本,內容如下:

export JAVA_HOME=/usr/java/jdk1.6.0_12
export JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"

/opt/apache-tomcat-6.0.16/bin/startup.sh

這個腳本執行了三件事情:

  1. 設置JAVA_HOME變數為「/usr/java/jdk1.6.0_12 」
  2. 設置JAVA_OPTS變數為「-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8」
  3. 執行「/opt/apache-tomcat-6.0.16/bin/startup.sh 」以啟動Tomcat

如果你也要依樣話葫蘆的話,記得要調整一下這些參數的設定喔。

Tomcat解決亂碼的爭議點

上面在設定JAVA_OPTS的時候,有一個「Dfile.encoding=UTF-8」的編碼參數,這個設定可以讓Java知道要以UTF-8的編碼來開啟檔案,以免他用預設的en_US編碼來處理而造成UTF-8看起來像是亂碼一樣。

但是網路上大部分論壇都主張要將此參數設置在[tomcat]/bin/catalina.sh中,或是一樣在catalina.sh中設定「CATALINA_OPTS=-Dfile.encoding=UTF-8」。前者因為Tomcat版本相差過遠,我找不到要修改的地方;後者還沒試過。

總之,「Dfile.encoding」的參數應該還是有很多其他的地方可以配置,如果大家有更好的方法,也請提出來多多討論吧。

在crontab中開機自動執行Tomcat啟動腳本

開機自動執行的方法有很多種,其中crontab也可以在開機時指定要執行的程式。crontab是Linux中執行例行性工作排程的好用工具,詳細的原理可以參考鳥哥的介紹。以下我僅敘述如何將「/home/dspace/tomcat_startup.sh」加入crontab開機時自動啟動的腳本中。

1. 進入crontab編輯畫面

輸入「crontab -e」就可以進入編輯畫面了。

[dspace@dspace-dlll ~]$ crontab -e
2. 加入開機執行指令

crontab編輯畫面會以一般的vi文字編輯器形式出現,如果你對vi編輯器不熟的話,還是得先請你看一下鳥哥的操作說明。請在crontab檔案最後加入以下設定:

# Startup tomcat
@reboot /home/dspace/tomcat_startup.sh

第一行只是註解。

第二行的「@reboot」參數表示在重新開機時都會執行後面的指令:「/home/dspace/tomcat_startup.sh」。

儲存並離開之後就完成crontab的設定。

3. 重新啟動測試

設置好crontab之後,別忘了reboot重新啟動來測試一下Tomcat是否有自動地啟動喔。


結語

這個編碼問題讓我煩惱了好久。一開始我還以為是Sevlet或JSP在傳送request的時候編碼設定錯誤,沒想到最後居然是根本上的Java編碼就出了問題。希望這次設定完之後,以後不要再出現編碼的問題了啊。

(more...)

AutoIt使用Run()執行非exe, bat等執行檔

布丁布丁吃布丁

AutoIt使用Run()執行非exe, bat等執行檔

image

這次來記錄一下AutoItRun()函數的另類用法。

Windows的腳本機器人AutoIt

AutoIt是一個執行於Windows環境的腳本機器人,我以前就用AutoIt製作過VirtualBox的自動安裝程式,之後我偶爾也會用AutoIt來幫我排程處理例行事務,省下我自己動手的功夫。

Run()函數以命令列指令執行

有時候我會需要AutoIt去執行外部程式,這可以藉由它內建的Run()函數來執行。但是AutoIt的Run()函數預設只能執行exe、bat、com、pif,如果參數中的程式不是這些類型,那麼Run()下去就不會有任何反應。

這時候可以以「命令列」(console)的方式來處理,請使用以下的指令:

Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)

commandName可以替換成你要執行的程式路徑。要注意到" /c "前後是有空格的喔。

開啟絕對位置檔案

舉例來說,我希望AutoIt自動幫我開啟一個網頁程式「c:\index.html」的話,指令要這樣寫:

Run(@ComSpec & " /c " & 'c:\index.html', "", @SW_HIDE)
開啟與腳本相同位置的檔案

如果我要開啟與腳本相同位置的檔案,則可以利用「@ScriptDir」。舉例來說,「index.html」擺在跟AutoIt腳本(或是編譯過的執行檔)相同的目錄之中,則可以利用以下指令來執行「index.html」:

Run(@ComSpec & " /c " & 'index.html', @ScriptDir, @SW_HIDE)

結語

其實這個作法已經寫在Run()函數的網頁說明中,但傻傻的我還是google了好一段時間才發現,在此留下一個記錄。

另外也有人主張用ShellExecute()函數來開啟。以後有機會我再研究看看好了。

(more...)

GReader Folder Favicon Alerts

GReader Folder Favicon Alerts

image

這是修改自GReader Favicon Alerts的userscript,可以在Google閱讀器(Google Reader, GReader)的網頁圖示(favicon)上顯示「目前所在資料夾」的未讀訊息。

原始的GReader Favicon Alerts是顯示所有訂閱的未讀訊息。但我並不會時常盯著所有訂閱訊息,而只會想要關注特定幾個訂閱,並將他們歸類在同一個資料夾中。

GReader Folder Favicon Alerts可以讓你只顯示目前閱讀資料夾的未讀訊息。你可以開啟很多個Google閱讀器、閱讀不同資料夾,這支程式就會幫你把各個資料夾的未讀訊息顯示在網頁圖示上,方便你追蹤最新的訊息。

至於userscript的安裝方式,請參考虫二的[教學]如何讓不同的瀏覽器正確安裝並執行使用者腳本 (Userscript)

(more...)

Plurk網頁圖示未讀記數器

Plurk網頁圖示未讀記數器

12004551472

這支userscript是我參考GReader Favicon Alerts修改而成,可以在Plurk圖示上顯示未讀訊息的數量。


Google Chrome的固定分頁

Google Chrome的「固定分頁」是一個節省分頁導覽列空間的好功能。他將分頁的寬度縮小到只剩下圖示,並固定在分頁導覽列的左方,讓我們保持一些常常需要查閱的網頁。

我常常會將Plurk固定在Chrome中,但是又常常會想切換到Plurk看一看有沒有「未讀訊息」,久而久之就覺得這個切換的動作很麻煩。所以就想要參考GReader Favicon Alerts的方式,在Plurk圖示上加上未讀訊息的記數。

安裝方法

這個程式只能用在Google ChromeFirefox等有支援userscript的瀏覽器上,IE是沒有支援的。

至於userscript的安裝方式,虫二的[教學]如何讓不同的瀏覽器正確安裝並執行使用者腳本 (Userscript)已經有很詳細的教學,在此不再介紹。

(more...)