:::
顯示具有 碩士畢業論文 標籤的文章。 顯示所有文章

合作式閱讀標註之標註行為特徵與閱讀理解關聯 / A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

合作式閱讀標註之標註行為特徵與閱讀理解關聯 / A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

image

這篇「合作式閱讀標註之標註行為特徵與閱讀理解關聯」是我在第二屆數位合作學習與個人化學習研討會跟大家分享的文章跟投影片,也是我碩士論文的簡要版本。

(more...)

國立臺中圖書館獎助博碩士班學生研撰圖書資訊學位論文申請書 / Apply for National Taichung Library in 2009

國立臺中圖書館獎助博碩士班學生研撰圖書資訊學位論文申請書 / Apply for National Taichung Library in 2009

200904 國中圖書香遠傳 獎助博碩士論文報導 -1 20090610-pudding2-0038

國立臺中圖書館,現已改稱為國立公共資訊圖書館(以下簡稱國資圖)的獎助博碩士論文學生研撰圖書資訊學位論文,是提供各位圖資界學弟妹在完成計劃書口試之後可以嘗試挑戰的獎助學金。我當時在2008年計劃書口試完成之後也有前去申請,有幸在2009年順利被接受。後來幾位學弟妹也想要嘗試申請看看,而過來索取申請時的表格。為了鼓勵學弟妹多多挑戰,在此我簡單地分享一下當時的申請文件。

The application forms for applying the National Taichung Libraty Thesis Grants as well as my experience as a previous winner are provided in the article.


申請書下載 / Documents Download

個人資訊都已經隱蔽,文件裡面只有申請表格跟論文內文喔。

從論文計劃書縮減內文 / From Thesis Proposal to Application

國資圖的獎助申請條件中限制計劃書本身為15頁,不含前面的申請表格與後面的參考文獻。

我原本的計劃書(原本檔案連結損壞,我重新上傳了,連結放在留言中)不含封面、目錄與參考文獻共32頁。縮減成國資圖的申請書之後,內容只剩下14頁。

基本上論文的架構都不變,但是現在看來,我覺得可以再減少一些文獻探討的部份。大部分學生計劃書中都會蒐羅大量的文獻探討,在取捨這些文獻時往往會相當苦惱。我建議是如果你的論文沒用到前人研究的方法,那可以索性不提。重點在於研究方法、研究流程以及預期成果,用盡腦汁來找出你研究的價值吧。我想評審老師想要看的應該是有發展價值的題目,而不是讀了一堆文獻的心得彙整吧。

裝訂 / Binding

2009-02-05-480

製作這份申請書的時候,除了基本的推薦函、必要身分證件、電子檔光碟等資料之外,還需要把它印出之後裝訂成冊,一式六份。裝訂時我採用與計劃書相同的綠底膠裝。大概就跟上圖的計劃書類似的樣子,只有文字不同。因為頁數很薄,印象中是不需要書背的。

如果想要摸一下實體的話,我有一份申請書放在所上的圖書室書架喔。

詳細的規定請務必詳讀國立公共圖書館獎助博碩士班學生研撰圖書資訊學位作業要點喔。


結語 / Conclusion

我印象中當時計劃書口試結束之後,大概用了一個禮拜左右改去申請國中圖(當時還是叫做國中圖)的獎學金。雖然是抱著一種「反正論文計劃書都寫了,那就順便申請看看吧」的心態,沒想到還真的上了。而且當時政大圖檔所還同時通過三位,可謂風光至極。

很多學弟妹會擔心自己文筆不好、文獻探討不足,而不敢去申請。可是如果你看我的計劃書,也會發現我寫得其實也很不成熟。不成熟又如何呢?畢竟我們都還是學生啊,學生就是擁有不成熟的權力。

即使是不成熟的文筆,評審老師依然可以找出你的論文價值。但是如果不去申請的話,那就連這個機會都沒有囉。總之加油吧,祝各位學弟妹都能順利上榜。

(more...)

2011中華民國圖書館學會學位論文獎助活動

布丁布丁吃布丁

2011中華民國圖書館學會學位論文獎助活動

image

2011年12月2日在國家圖書館舉辦了中華民國圖書館學會第五十二屆年會,並徵選優秀學位論文發表。感謝評審老師們的獨特眼光,我的論文「合作式閱讀標註之知識萃取機制研究」居然得獎了。於是當天活動最後的發表會,我就上去介紹我做的論文內容以及KALS知識標註學習系統。

演講的投影片如下:(SkyDrive下載)

演講時間只有10分鐘,所以我就輕鬆地介紹系統。沒想到其他人都像是要準備論文口試一樣地大陣仗,相較之下我就像是來亂的一樣。還好下台之後學會沒有要沒收我的得獎資格,真是萬幸。

另外很遺憾的是,這次仍然沒有錄音檔,就當做給現場聽的朋友們特別的禮物吧。不過事實上,我做投影片也的確不是給人讀的,而是搭配我講話與介紹的內容。這份投影片使用了許多動畫講解圖示的內容,光看印出來的投影片結果,比較難理解那些圖示的順序流程。所以還是建議下載投影片來看看吧,也許會比較清楚也說不定喔?

最後,能夠跟大家分享自己做的東西,實在是很開心。希望大家也秉持著分享的心態,一起多多交流交流吧。

(more...)

合作式閱讀標註之知識萃取機制研究 A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

合作式閱讀標註之知識萃取機制研究 A Study on Developing Knowledge Extraction Mechanisms from Cooperative Reading Annotation

封面

這是我在國立政治大學圖書資訊與檔案學研究所撰寫的碩士畢業論文,指導教授為陳志銘博士。撰寫完成時間為99學年度下學期,實際上是民國2011年(民國100年)3月。

作為一份記錄,這一篇將會簡單地回顧一下整個論文的撰寫過程、論文的摘要,以及附上論文的相關檔案。


論文撰寫過程回顧

計劃書

圖資系所在碩士生撰寫畢業論文之前,通常都需要先撰寫論文的計劃書,陳述為何要做這個題目、要怎麼做這個題目、需要什麼步驟,並請口試委員幫學生審核是否可行,然後才開始進行碩士的畢業論文。

跟其他在政大圖檔所的學生差不多,我也是在碩二上的時候進行計劃書口試,日期是2008年12月,之前有寫一篇計劃書口試通過的記事,裡面包含了計劃書口試時使用的簡報。通過之後再依照口試委員的建議進行修改,這一篇則是在講修改後的計劃書檔案

我的論文計劃書拿去參加國立臺中圖書館(簡稱國中圖)博碩士論文獎助並有幸獲獎,約定要於畢業時呈繳論文,才算是完成獎助契約。

論文聚焦與系統開發

之後有非常長的一段時間,我都在處理DSpace跟其他的外務,是個不務正業、玩物(?)喪志的學生。大概到2010年4月又回到論文的工作上,不定其地在此blog撰寫meeting時的論文進度報告,督促自己要積極撰寫論文、儘快畢業。論文相關的文章請看碩士畢業論文的分類標籤。經過一些文獻探討之後,毅然決然調整了論文進行的方向

在聚焦研究問題的同時,我也開始學習以專案管理與UML的方式規劃論文系統的專案,並且閱讀極致軟體製程(eXtreme Programming explanined)、測試導向開發、PHP專業程式設計、物件導向設計模式等程式設計的書籍,努力提昇自己的程設能力。系統規劃大概是從2010年5月左右開始進行,實際上大約是2010年6月才開始撰寫系統。不過就算是到現在,我也不覺得系統算得上是完成品。關於系統的內容與功能請看KALS!標註工具說明一篇。

實驗進行與數據分析

2010年下學期學期中,由於論文系統撰寫時程大幅度地延長,導致論文的實驗並沒有按照預期希望的進行。老師建議我改以老師正在上課的同學來進行實驗,而我因此以目前系統的完成狀況、更改觀察的變項,大幅度地修改了整個實驗的設計。由於當時並不想告訴同學這是一個實驗,因此並沒有在此blog提到這些事情。變更的過程與細節請看論文進度報告(2011/1/19):變更的研究架構一篇。實驗的設計與內容都鉅細靡遺地寫在論文之中,稍後請參考論文的內容。

實驗完成之後接著是數據的分析。這段期間學習了內外控量表序列分析循序樣式探勘等研究工具,不過論文最後並沒有派上用場,單純成為了學好玩的知識。當時在分析時到處找了相當多的方法,甚至自創演算法來加權數值。後來是在聆聽學弟妹的計劃書口試中找到靈感,並以統計的方式完成了現在的論文。

最後分析主要還是用統計的獨立樣本t檢定、單因子變異數分析、相關分析以及無母數分析等方法進行。在此推薦一下吳明隆的「SPSS操作與應用:變異數分析實務」(ISBN:9789571145754)一書,不僅可以讓人依樣畫葫蘆操作SPSS,理論說明也相當清楚。即使原本沒有學過單因子變異數與無母數分析的我,照這本書所講的內容,也只要一天就能夠輕易上手、完成論文分析。

分析完成的時間點大概是2011年1月過年之前,並與老師報告分析結果,讓老師確認沒有問題之後,才是撰寫論文內容。

論文撰寫與口試

有了分析結果之後,就能夠開始推論結論、撰寫論文。撰寫過程請看我的論文寫作工具:XMind心智圖一篇。之間與老師多次來回討論、修正,經過各章節二次以上的校對之後,終於完成了論文的初稿,可以準備舉辦碩士畢業論文的口試。

口試的邀約相當地匆促,大概是二月底的時候開始邀請老師。有的老師沒問題,有的老師時間橋不攏,有的老師工作事務繁忙而推辭,前前後後共問了六位老師。最後碩士論文口試邀請的口委為卜小蝶老師、林巧敏老師、侯惠澤老師,以及我的指導教授陳志銘老師,以上共四位口試委員。口試時間排定在2011年3月4日。

老師們給了我很多建議,因為現有的論文分析方式不太像是社會科學的角度,而是相當工程的分析,因此老師建議應該更往社會科學的方式來分析會比較好。此外,老師們讚賞系統開發,認為其本身就已經是一種研究貢獻。然而除了論文寫作細節挑些毛病之外,論文內複雜的實作與分析過程居然沒有人提出質疑,讓我個人挺訝異。口試時的簡報將於本文後面附上。

畢業論文送繳

口試之後即動手撰寫論文的修改版,再來進行論文的印製,之前我也有寫了篇印製過程的心得

2011-06-24_131518

畢業前將論文呈繳到政大圖書館,圖書館會在轉送到國家圖書館,因此我的畢業論文現在也在臺灣博碩士論文知識加值系統中出現了

在畢業事務處理期間,我也完成了與國中圖的契約、呈繳了十本畢業論文。之後回去國中圖找論文的時候,發現我的論文也已經編目上架了。

以上就是整個論文的大致撰寫過程。


論文摘要

  • 題目:合作式閱讀標註之知識萃取機制研究
  • 關鍵詞:合作式閱讀標註;知識標註學習系統;知識萃取機制;模糊綜合評判;閱讀學習。

本研究在合作式數位閱讀環境中發展了一套「知識標註學習系統」,可以支援多人同時針對一篇數位文本進行閱讀標註與互動討論,以提升讀者閱讀的深度與廣度。此外,本研究更進一步地以專家評估法設計「知識萃取機制」,用於判斷讀者閱讀標註的重要度。

「知識萃取機制」是基於讀者閱讀標註中所蘊含的閱讀理解策略與閱讀技巧,以及合作式閱讀社群中產生的標註共識,考量了「標註範圍長度」、「標註範圍詞性」、「標註範圍位置」、「標註策略類型」、「標註範圍共識」與「標註喜愛共識」等六項因素,以專家評估法制定的標註重要度模糊隸屬函數來評定各因素的重要度並量化為「標註因素分數」指標,最後將六項因素以模糊綜合評判進行推論,再將推論結果解模糊化而成為代表標註重要度的量化指標「標註分數」。基於「知識萃取機制」所計算代表標註重要度的「標註分數」,可作為讀者進行閱讀標註是否不佳的判斷,並據此提供標註技巧建議與優質標註內容推薦的「標註建議」,以幫助讀者提昇閱讀理解能力。

為了驗證「知識萃取機制」計算「標註分數」的有效性,以及探討未來改善「知識萃取機制」和可加入的考量因素與適性化設計的可能方向,本研究以單組後測設計規劃實驗,並以國立政治大學圖書資訊數位碩士在職專班19位學生作為實驗對象,進行一份數位學習論文的合作式閱讀標註學習,並於實驗後評估實驗對象閱讀文章之後的閱讀理解能力,作為評鑑「知識萃取機制」計算方式是否有效的指標。最後再以問卷蒐集實驗對象對於「知識萃取機制」的意見,歸納成為未來研究改善的參考依據。

研究結果發現,本研究所提出「知識萃取機制」中計算標註重要度的「標註分數」與實驗對象的閱讀理解能力呈現低度正相關,一定程度地證實了「知識萃取機制」計算方式的有效性。而「知識萃取機制」六項考量因素中,「標註範圍長度」與「標註喜愛共識」為分辨實驗對象閱讀理解能力的關鍵因素;「標註策略類型」與「標註範圍詞性」的標註重要度模糊隸屬函數有待修正;「標註範圍共識」與「標註範圍位置」為無效因素,但這可能是受到計算方式錯誤與閱讀文章類型的影響,未來仍有待進一步評估。在未來發展方面,系統操作標註行為頻率越高,實驗對象的閱讀理解能力也有較高的跡象,未來可以將其納入「知識萃取機制」作為考量因素之一;而閱讀理解能力較差的實驗對象,呈現出比較不願意回應「標註建議」與較常使用社群互動的現象。本研究歸納可能原因為實驗對象自身的閱讀素養不成熟,以至於無法判斷「標註建議」的正確性,而需要參考他人閱讀標註。

未來研究可針對本研究的實驗對象與閱讀標註資料進行更深入的分析,並且將改良後的「知識萃取機制」擴大至探討其他類型的數位文本閱讀標註與實驗對象。也可以搭配認知策略教學法建構閱讀教學鷹架,或是將「知識標註學習系統」用於支援數位典藏與數位圖書館閱讀學習,以激發更多不同領域的應用研究。


論文檔案

正文內容

裡面有很多工程技術與計算過程,因此相當地枯燥乏味。有需要的人再打開來看吧。

畢業口試投影片


結語:論文未完成

image

論文即使寫完了,卻仍有許多資料並沒有善加利用。例如上圖的標註範圍次數分配表中,可以看到標註範圍為4個字的次數佔了最多。不過這數據究竟能怎麼解釋,我還沒有什麼頭緒。總之,這份論文的資料還有很多利用價值,也許可以再分析出些什麼關連,也許也可以從不同角度進行不同的分析。

這個論文,總覺得只能說是「做到告了一段落」,還不能說是「完成了論文」的感覺。很多未探究的地方都還沒好好釐清,我就這樣子被趕著畢業了。

kals_interface_original

至於論文中的KALS系統,儘管我希望他以開放原始碼的形式公開(請看KALS的Wiki),不過至今仍尚未動手進行。日後我可能會先將原始碼公開,並在實驗室架設一個公開使用的系統,屆時會再告知大家。

最後我應該會放棄KALS開發。因為我想要用其他技術來撰寫,嘗試更效率更好、更容易開發、更具有可維護性的方式來開發系統。

這份論文並不是寫的很好,有任何看不懂、發現有問題、覺得不太可行的地方,歡迎大家提出來討論。也祝往後接手的學弟妹能夠順利畢業,大家加油。

(more...)

JSONP跨網域傳送檔案:以POST方法實作

JSONP跨網域傳送檔案:以POST方法實作

image

網頁應用設計中的JSONP技巧可以做到跨網域資料傳送的功能,但它卻只能傳送純文字資料,而我希望能在跨網域的環境下開發AJAX上傳檔案的功能,那麼就需要一些小技巧才能進行。

雖然我想應該也有人提出這個作法了,不過實際上在之前我並沒有找到過。因此我把這個在論文中實作的技巧在此記錄、分享。

這篇用到大量的網頁設計專有名詞,主要是以AJAX設計網頁應用的人為主要對象撰寫的。


範例

image

這個範例網頁中,你可以上傳一個檔案,並填寫下面的敘述Description,再按下UPLOAD按鈕上傳。伺服器會回傳給你檔案的上傳結果、檔案名稱、檔案大小。檔案上傳最大是1MB,超過1MB的檔案,伺服器會回傳錯誤結果。

原本我是將HTML網頁放在Dropbox空間(http://dl.dropbox.com/),而伺服器則是放在You Hosting的空間(http://pulipuli.co.cc/),想用兩個不同網域來呈現透過POST方式實作JSONP跨網域檔案上傳的範例。但是因為You Hosting放著一陣子就被強制關閉了,所以很遺憾的,在此無法看到線上即時的成果。(2011/9/19更新)

此範例中用了三個檔案,請直接下載研究、並自行配置使用吧:

應用背景

使用AJAX開發網頁應用的程式設計師,大多時候都是在同個網域之下處理client(使用者端電腦)與server(伺服器)之間的訊息傳遞。更進一步的,利用jQuery框架,以JSON物件、GET方式傳遞資料的jQuery.getJSON()函數,讓處理AJAX資料傳遞更為簡單。

但是我的論文中需要使用的AJAX跟上述常見情況有個很大的差別。第一個是跨網域,client端呼叫server端資料,這兩者是位於不同的網域,因此普通的GET或POST方式都無法讓client端取得server端的資料,必須仰賴JSONP(JavaScript Object Notation with Padding)技巧;其二,這次要傳送的資料並非純文字或可以用JSON來組織的資料,而是需要上傳二進位的檔案,或是超過GET資料傳送上限的資料量。在這種情況下是不能單純使用JSONP,必須使用POST方式與form表單傳送資料才行。

因此,我將POST的傳送優勢與JSONP的跨網域AJAX特色融合,寫成以POST方式實作的JSONP跨網域檔案傳送。

角色

在此應用中是以前端的瀏覽器與遠端的伺服器進行溝通合作,因此我先簡單敘述這兩種角色。

「C」 client

在這篇文章中,我以「C」表示「client」(客戶端)瀏覽器中執行的程式語言,主要是HTML跟JavaScript,這也是AJAX的基礎。多虧了jQuery框架克服了相容性問題,因此在Chorme、Firefox或IE都可以使用。

在此範例中,「C」是擺在Dropbox的空間,他並不具備伺服器端的功能,不能判斷檔案大小。此外,我將「C」的HTML外觀寫在client.html當中,而JavaScript的邏輯運作寫在client.js當中。稍候會再敘述他們的功用。

「S」 server

另外「S」代表「server」(伺服器),在此範例中我以PHP寫成,擺在You Hosting空間。伺服器端的程式語言具備了處理檔案的能力,可以判斷檔案大小。在此利用AJAX架構,讓「C」能夠與「S」進行溝通。

為了利用POST傳送檔案,並能以JSONP進行跨網域溝通,「S」必須判斷請求方式(request method)是POST還是GET。並以session來暫存狀態。

稍微有點概念之後,接下來就是實際看看這方法要怎麼運作了。


Step1. C1:資料準備

 image

為了讓大家好理解,此範例中的檔案上傳做得跟傳統網頁一樣。這是一個<form>表單,裡面有個可以選擇檔案上傳的input,並限制只能上傳1MB大小的檔案,還有一個可以撰寫「Description」(敘述)的input,最後則是一個submit(遞交)的「UPLOAD」按鈕。

在這個表單前面,引用了大家的好朋友jQuery以及我另外寫的client.js;表單後面則有個<div>容器,負責顯示待會跟伺服器溝通的結果。

原始碼很簡單,寫在client.html中,摘錄如下:

<script src='http://www.google.com/jsapi' type='text/javascript'></script>
<script type='text/javascript'>google.load("jquery","1.2.6");</script>
<script src="client.js" type="text/javascript"></script>
<form id="form" method="post" action="http://pulipuli.co.cc/20110517-jsonp-post/server.php" enctype="multipart/form-data">
    <input type="hidden" name="max_file_size" value="1048576">
    <label>File: <input type="file" name="file" /> * Max File Size: 1MB</label>
    <br />
    <label>Description: <input type="text" name="description" value="The description of this file."></label>
    <br />    
    <button type="submit">UPLOAD</button>
</form>
<div id="output"></div>

另外,為了讓這個form表單能具備AJAX跨網域上傳的功能,我利用JavaScript幫他做了些初始化的調整,讓form的遞交會以AJAX方式進行,並設定回傳資料時所要執行的回呼函數(callback)。

這部份寫在client.js開頭,程式碼如下:

/**
 * Initialize Form
 */
$(function () {
    
    $("#form").submit(function () {
        
        if ($(this).attr("jsonp_by_post") == null)
        {
            $.jsonp_by_post(this, function (_result) {
                //...Step7時再講解... 
}); return false; } }); });

Step2. C2:AJAX式的POST遞交

當form的UPLOAD按鈕被按下時,就會開始一連串的AJAX式的POST遞交作業。

在此步驟中,JavaScript會做以下事情:

  1. 以timestamp作為辨識每次檔案上傳作業的代號。
  2. 讀取form的資料,並將timestamp設定到action的網址中,提供伺服器辨識每次檔案上傳作業的代號。
  3. 建立一個接收資料的iframe,隱藏之,並設定name。
  4. 調整form的action跟name,讓form的遞交會傳送到iframe去,而不是把整個網頁都替換掉。
  5. 給form做個記號(此範例用jsonp_by_post屬性),以免跟Step1初始化form的submit事件相衝突。
  6. 設定iframe遞交完成之後的後續動作。
  7. form執行遞交作業。

程式碼寫在client.js,摘錄如下,其中6.設定iframe遞交完成之後的動作,我會在下面的Step4詳細敘述,這邊先以略過。

$.jsonp_by_post = function (_form_ele, _callback) {
    
    var _timestamp = (new Date()).getTime();
    
    var _form_obj = $(_form_ele);
    
    var _action = _form_obj.attr("action");
    var _action_post = _action + "?timestamp=" + _timestamp;
    
    //建立接收資料的iframe
    var _iframe_name = _action + _timestamp;
    
    var _iframe_obj = $('<iframe></iframe>')
        .attr('name', _iframe_name)
        .appendTo($('body'));
        
    //隱藏iframe
    _iframe_obj.css('width', '0').css('height', '0')
        .css('position', 'absolute').css('left', '-1000px').css('top', '-1000px');
    
    //調整傳送資料的form
    _form_obj.attr('action', _action_post)
        .attr('target', _iframe_name)
        .attr('method', 'post')
        .attr('enctype', 'multipart/form-data');
    
    //防止重複觸發初始化的事件
    _form_obj.attr('jsonp_by_post', 'true');
        
    //設定iframe讀取完畢之後的動作
    
    _iframe_obj.load(function () {
        
        //...Step4時再講解...
        
    });
    
    //執行遞交
    _form_obj.submit();
};

Step3. S1:伺服器接收POST資料

伺服器端的程式會依照請求方式的不同,決定此程式是要接收檔案上傳,還是要回報檔案上傳的結果。

在Step3中,form以POST方式呼叫了位於另一個伺服器的server.php,並執行以下動作:

  1. 接收$timestamp,作為判斷這次作業的辨識代號,並與一個特定的$header組成session使用的$index。
  2. 透過透過PHP的$_SERVER['REQUEST_METHOD']來判斷請求方式。
  3. 如果是POST,則將檔案的檔名、大小、以及從POST過來的description資料儲存在session當中。
  4. 判斷檔案上傳的狀態,失敗就是「error」,成功則是「sussesful」。
  5. 顯示一些資料,作為簡單偵錯。但其實可以省略。

以下程式碼寫在server.php中,摘錄如下。請求方式是GET的情況,我會在下面的Step6再來講解。

<?php
$header = "data";
$timestamp = $_GET["timestamp"];
$index = $header . $timestamp;

session_start();

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    $description = $_POST["description"];
    
    $_SESSION[$index]['name'] = $_FILES['file']['name'];
    $_SESSION[$index]['size'] = $_FILES['file']['size'];
    $_SESSION[$index]['description'] = $description;
    
    if ($_FILES['file']['size'] == 0)
    {
        $_SESSION[$index]['state'] = 'error';
        echo "false";
    }
    else
    {
        $_SESSION[$index]['state'] = "sussesful";
        echo "true";
    }
}
else
{
    // ...Step5時再講解...
}

Step4. C3:以JSONP取得檔案上傳結果

當iframe讀取完畢之後,「C」就可以知道檔案上傳動作已經結束。但是因為POST在跨網域的狀況下是無法取得iframe裡面的資料,所以必須要改用JSONP的方式來跟「S」取得結果。

這些動作寫在Step2中省略的iframe onload事件中,大概動作如下:

  1. 設定JSONP的網址,加入jQuery.getJSON()特有的callback=?參數。
  2. 執行jQuery.getJSON(),並設定執行完後的回呼函數。

這些程式碼寫在client.js中,摘錄如下。執行完getJSON()的回呼函數會在Step6講解。

    //設定iframe讀取完畢之後的動作
    
    _iframe_obj.load(function () {
        
        //設定get方法JSONP的網址,要注意加入了JSONP特有的callback參數
        var _action_get = _action + "?timestamp=" + _timestamp 
            + "&callback=?";
          
        $.getJSON(_action_get, function (_result) {
            // ...Step6時再講解...
        });
        
    });

Step5. S2:伺服器回傳檔案上傳的結果

以JSONP方式呼叫伺服器時,「S」是以GET方式運作,他會做以下動作:

  1. 接收$timestamp,並與$header組成$index。這跟Step3做的事情一樣。
  2. 判斷請求方法為GET。
  3. 取得回呼函數的代號$callback,這是搭配jQuery.getJSON的作法。
  4. 從$index取得session資料,將檔案上傳結果存進$output字串。
  5. 刪除session資料,避免後來有心人再利用同樣的timestamp取得資料。
  6. 以JSONP方式輸出。

以下程式碼寫在server.php中,摘錄如下:

<?php
$header = "data";
$timestamp = $_GET["timestamp"];
$index = $header . $timestamp;

session_start();

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    // ...Step3講解...
}
else
{
    $callback = $_GET['callback'];

    $output = '';
    if (isset($_SESSION[$index]))
    {
        $output = $_SESSION[$index]['state'].'; ' 
            .$_SESSION[$index]['name'].'; '
            .$_SESSION[$index]['size'].'; '
            .$_SESSION[$index]['description'];
            
        unset($_SESSION[$index]);
    }

    if (is_null($callback))
        echo $output;
    else
        echo $callback."('".$output."');";    
    
}


Step6. C4:接收資料,復原form,呼叫回呼函數

以jQuery的getJSON取得資料之後,接下來就是復原form、刪除臨時建立的iframe,然後呼叫回呼函數。

這段程式碼也很簡單,寫在client.js中,摘錄如下:

        $.getJSON(_action_get, function (_result) {
            
            //復原form
            _form_obj.attr('action', _action)
                .removeAttr('target')
                .removeAttr('jsonp_by_post');
            
            //移除iframe
            _iframe_obj.remove();
            
            _callback(_result);
        });

Step7. C5:結果輸出

在Step1初始化時設定好的回乎函數會在最後接收資料,然後將結果輸出到div容器中。程式碼寫在client.js的上方,摘錄如下:

            $.jsonp_by_post(this, function (_result) {
                $("#output").html("Message: " + _result);
            });

如果檔案正常上傳,你會看到以下畫面:

image

如果你上傳超過1MB的檔案,則伺服器會記錄錯誤狀態,於是會看到以下畫面:

image

這樣就大功告成啦!


變化與應用

範例中的講解很簡單,身為能夠舉一反三的程式設計師,腦袋裡面應該已經呈現出很多不同的應用方式吧。這邊我大略提一下幾個變化的重點,還有最後應該注意的安全性問題。

資料的輸入

在此範例中,我所有資料都是來自於撰寫好的form表單。實作時,我們的原始資料不一定是真的來自form表單,通常會以JSON、陣列、變數形式存在記憶體中,以方便JavaScript進行處理。

如果是以JSON等非form的資料型態,想要進行跨網域的AJAX傳輸,那麼你還是得要自己將這些資料寫成form,這樣才能以POST進行遞交。雖然多了點步驟,但相信對於熟悉jQuery的你來說應該不是什麼問題。

安全性問題

網頁之間有很多跨網域的限制,而本篇旨在於打破這個跨網域限制來做到更多功能,但相對的就會負擔起更多安全性問題。

提供JSONP的服務,很容易就會受到跨網域指令碼(Cross-site Script)的攻擊,而被找漏洞、挖出使用者的資料。我並不是資安專家,對這方面研究還不夠深入,只能提供幾個簡單的安全性加強方向。大致上,我建議搭配身分認證的session、來源IP或網址,來判斷這個C是否有跟S溝通的資格,S再決定是否接受C的POST或GET請求。這樣應該會安全許多吧。

範例程式中為了講解方便,所以並沒有加上這些措施。如果你要將這個方法放到自己的應用程式中,請務必做好安全性的防範措施。


結語

這是我論文系統中實作的一個技巧,但因為論文無法寫出這些細節,所以我以寫blog的方式,記錄這個技巧的細節,供有需要的人參考。實際上這篇從想寫、擬完心智圖、寫了一半覺得不滿意、又改了好多次,到現在才完成。

這只是一個很基礎的AJAX技巧,可以應用到很多地方,可以進一步寫成更漂亮的framework或library。也許已經有人發表過這種方法了也說不定,不過,我另一個目的也只是給未來的自己留下一個參考而已,就作為一篇記錄吧。

(more...)

用Zotero輸出中文、英文不同的APA參考文獻:我的碩士論文參考文獻製作過程

用Zotero輸出中文、英文不同的APA參考文獻:我的碩士論文參考文獻製作過程

image

雖然我使用Zotero來管理參考文獻的書目資料,但是在撰寫論文的時候一定會碰到一個問題:要怎麼區別中文跟英文的書目?大部分系所對於參考文獻的要求都會希望將「中文文獻」與「英文文獻」分開列表、各自有不同的輸出樣式,但是對Zotero來說並沒有中英之分,只能使用同一種樣式來處理。這對於剛接觸Zotero的人來說是非常地困擾,甚至有人提出了中文用Zotero、英文用EndNote的這種作法,但我個人並不喜歡將文獻分散於多個軟體,造成難以管理的困擾,所以我仍堅持用Zotero來實作中英文不同的參考文獻。

要用Zotero做到這點,其實手續非常多,不見得是一個很理想的作法。但不論如何,還是比不使用書目管理軟體、呆呆地手動輸入還來得快得多就是。

(more...)

我的論文寫作工具:XMind心智圖

布丁布丁吃布丁

我的論文寫作工具:XMind心智圖

10. 核心架構圖

心智圖是一種將概念、想法以連線組織起來的筆記法。比起用手繪的心智圖,電腦的數位心智圖更具備容易組織、關連與整理的特色。這次碩士畢業論文我就是利用XMind心智圖繪製工具來撰寫論文草稿,然後再將草稿上的概念撰寫在Word中,成為長篇大論的碩士論文。

以下就跟大家分享我利用XMind來寫作論文的過程吧。


心智圖繪製相關工具

這邊要先介紹三種工具,第一個是桌上型電腦用的XMind,第二個是Android手機用的Thinking Space,第三個則是對桌上型電腦與手機檔案同步的SugarSync。

桌上型電腦的心智圖工具:XMind

image

XMind是繪製心智圖的一項工具,他是基於Eclipse的框架,以開放原始碼的形式開發,可以在各種Windows、Linux、Mac等各種平台上運作。個人使用的時候是免費的,而付費購買的Pro版本則有甘特圖、腦力激盪、簡報等各種功能,但是個人版本其實就已經很足夠使用了。

跟另一項知名的開放原始碼心智圖繪製工具FreeMind比起來,XMind介面更美觀、容易使用。但相對的,XMind也比較佔記憶體資源,使用過久的話也可能會當掉。對我現在用的電腦來說,XMind運作起來還蠻順利的就是。

Android手機上的心智圖工具:Thinking Space

image

有些時候就算不在電腦前,也可以拿起Android手機來規劃論文的草稿。我每天吃飯時走路上下山、通勤時坐公車,很多時候並沒有電腦使用。在電腦前面時,我容易專心作一件預定要做的事情;但是離開電腦,在外面走路、等待時,我反而比較容易思考「要做些什麼」的規劃。

其實手機特別適合用心智圖來記錄事情。因為手機難以長篇大論地打字,小螢幕也難以顯示複雜、大量的資訊,心智圖以關鍵字、概念、可開關的結構來呈現,特別用來記錄事情可說是格外地合適。

Android手機上可以使用的心智圖工具很多,其中Thinking Space是我用起來最好用的一款。他不僅能夠整合XMind格式的檔案,操作起來也與桌上型電腦版的XMind大同小異。Thinking Space跟XMind部分圖示有點差異,但是常用的數字、進度、驚嘆號、問號等圖示都是共通的。

必須注意的是,在手機上操作Thinking Space時卻異常地耗電,使用上需要非常地謹慎,不然可能寫一寫手機就沒電了。

Thinking Space免費版的限制中,除了比較沒啥影響的廣告之外,最麻煩的就是不能使用「超連結」功能將節點指定連到網站或某個檔案位置。即使開啟了擁有「超連結」的XMind檔案,Thinking Space也會把「超連結」刪掉。而付費版的Thinking Space Pro則沒有上述限制。

由於我寫論文到中後期會在XMind心智圖上加上超連結,以方面快速參照到某個檔案,因此我後來也改用了Thinking Space Pro作為寫作的工具。

電腦與手機的同步工具:SugarSync

image

手機改完的檔案要傳到電腦上,而電腦中寫一寫也想要放到手機中繼續寫。以前我們會用隨身碟、FTP來傳輸資料,但現在我們可以用檔案同步工具、透過網路來進行異機(電腦與手機)的同步!

SugarSync是類似Dropbox的檔案同步工具,提供跨平台資料同步功能,各檔案最近五個版本的差異記錄,也可指定要同步的資料夾,免費使用就有 5GB的空間,可以藉由推薦與付費來加大空間。

SugarSync並沒有Dropbox知名,版本差異備份的功能較弱,但是不像Dropbox只能限定在My Dropbox資料夾中同步資料,SugarSync除了類似My Dropbox的Magic Briefcase資料夾外,還可以直接指定要同步的資料夾。

此外,由於我在Dropbox中保存了許多東西,我不想要把手機的空間弄亂,所以我決定另外使用其他的檔案同步工具,就是這個SugarSync。免費使用有 5GB的大小,對我的手機8GB記憶卡來說也差不多。

每次修改過電腦或手機的心智圖檔案之後,我只要連上網路,執行SugarSync的同步,SugarSync就會確認檔案的更新日期,自動進行上傳、下載、覆蓋的動作。因此我可以確保這些檔案是維持最新版的狀態,以避免遺失寫過的內容。


使用XMind寫論文

我用XMind來輔助論文寫作上可以概分為五個階段。首先是主要利用XMind心智圖來撰寫草稿,然後在XMind中整理草稿,接著參考心智圖來撰寫論文的文章、了解文章撰寫的進度,再以心智圖追蹤論文的改版與最後的統整。

1. 概念研擬階段
  • 安裝電腦與手機的心智圖與同步工具,配置檔案同步環境
  • 以Thinking Space為主,電腦為輔

話說,當我要開始寫論文的時候,剛好碰上了春假前夕。這時候我大部分時間是在外面行動,並沒有電腦可以操作,所以我決定利用Android智慧型手機的功能,在手機上開始撰寫我的論文。

首先我先在電腦上安裝了XMind Portable,在手機上找到了相容於XMind的Thinking Space軟體。試用過多個檔案同步服務之後,最後我決定選用SugarSync,並在電腦端與手機端都各別安裝SugarSync並以相同帳號登入,以便連上網路時就能夠進行同步。

20110421220637

首先我將論文各章拆成各個部分,建立多個XMind檔案,包括論文的架構、格式、論文正文以外的其他資料之外,就是緒論、文獻探討、研究方法、系統、研究結果與分析、結論等章節。這除了因為單獨檔案過大會造成難以編輯的困擾之外,手機因為記憶體不足,也不能開啟過大的XMind檔案。

各章節的分類也只是個大概而已,其實原本只打算寫六章的我,後來因為系統太大,所以也拆開成為二個獨立的章節來撰寫。

20110205 1 緒論

這時候的心智圖只是個概念的列表。儘管各節的順序通常是已經明定而不需要猶豫的,但各節裡面要寫些什麼,此時則是以關鍵字或簡短的敘述來記錄。例如「研究目的」的部份,我只寫了「發展」、「驗證」、「探索」三個關鍵字而已。

20110407182739

在手機上操作Thinking Space的時候就如上圖。在這個階段就是盡可能地把想要寫的概念記錄起來。由於手機打字並不順,所以我也不想在手機上寫上太多字,反正之後回到電腦上會再進行重整。

20110407183138

我也會同時搭配「圖示」的功能,幫每個節點加上順序、進度、驚嘆號或問號等圖示,就能夠以簡單的形式來記錄我想要的概念。

2. 概念重整階段
  • 以電腦工作為主
  • 輔以手機修改

當前面概念研擬階段中把每章要寫的內容都擬定出一個大概之後,接下來我就要把這些概念重整,作為撰寫文章前的準備。

論文的章節寫作順序

附帶一提,我是以每一章為單位來撰寫,而章節與撰寫順序各別是:

  1. 第一章 緒論
  2. 第三章 研究方法
  3. 第五章 研究結果與分析
  4. 第六章 結論
  5. 第四章 系統介紹
  6. 第二章 文獻探討

最後才是將每一章統整。

這個順序並沒有一定,不同領域跟不同老師的指導方式也許會有所不同,但我覺得一章一章地寫應該是還蠻合理的作法。其中,大部分的人都會把系統介紹放在研究方法之前,可是我的研究目的之一在於發展系統,所以把系統挪到研究方法之後。寫到最後稍有修改,第四章 系統介紹被拆成二章來撰寫。

重整的詳細程度

這個階段到底要整理到多詳細呢?讓我們先看看「第二章 文獻探討」初期的心智圖:

20110216 文獻探討

我整理的時候,根節點是「章」標題,底下的子節點則是「節」標題,並標上順序數字。節底下如果有分成小節,則再標上順序數字以表示這是一個標題。然後將節點加上「電燈泡」與「驚嘆號!」等圖示以區分用意,並重整順序。這張心智圖裡面有些「問號?」圖示,表示這是上一階段中想到需要補充的資料。

在重整順序、加上圖示、順序數字之後,我就會試著將模糊的草稿寫得更具體一點。

20110216-6文獻探討

這張圖則是整理之後的文獻探討。每個節點要細到能夠具體地想到每一個段落要怎麼寫,以方便我可以重複檢查這一章的邏輯是否流暢、正確,這樣才能安心下筆寫作。

圖示

表示需要搜集或不確定的圖示

在這個階段我大量地使用圖示來標示心智圖的節點。在XMind中文版中翻譯成「圖標」,但我覺得還是「圖示」比較適合。我常用的圖示包括:

  1. 順序數字:用來標示「節」或「小節」的寫作順序
    image
  2. 「燈泡」寫作概念:抽象的一個概念,這是要寫入文章中的一個想法。
    image
  3. 「驚嘆號」寫作注意事項:寫作時可以參考其他來源,或是其他特別要注意的事情。
    image
  4. 「問號」需要補充:目前手邊資料不足,需要再補充的部份。
    image
  5. 「附件」圖表資料:在這邊要加入圖表。
    image
  6. 「刪除」不採用:這個節點及之下的節點都不採用,平時保持關閉,等有需要時再來開來查看。
    image
超連結的節點

參考檔案加入超連結

同時,我也在心智圖中加入了參考資料。參考資料中的節點通常附有超連結,指定到電腦中的實體檔案。必須注意的是,如果用免費版的Thinking Space來修改加上超連結的心智圖時,心智圖中的超連結就會消失喔。如果使用Thinking Space Pro版本就沒這個問題了。

3.0不能相對連結

原本超連結只能以「絕對式」指定硬碟中的位置,如果檔案位置更改的話,那超連結很容易就會失效。在XMind 3.2.1版本中已經可以將超連結指定為「相對式」,只要XMind心智圖檔案跟被連結的檔案相對位置不變,超連結就不會失效。這也是後來我升級到3.2.1版本之後才發現的功能,當時我只是呆呆地指定絕對連結就是了。

不採用的想法

不採用的想法

在重整的過程中,往往會捨棄部分寫得不好的概念。比起直接刪去這個節點,我通常會額外建立一個類似資源回收桶的節點,命名為「不採用的想法」,並加上「X」image 表示不使用,平時讓他保持關閉的狀態。

當我有要刪掉的節點時,我就會直接把它挪到這個「不採用的想法」裡面。如果未來我發現我又要這個想法時,這時候就能把它從「不採用的想法」裡拉出來了。反正一個節點也佔不了多少檔案空間,保持關閉的狀態也不會妨礙版面,對我來說這是一個很有用的小技巧。

3. 文章撰寫階段
  • 以Word撰寫為主
  • 參考XMind心智圖

前一個階段將XMind心智圖整理得差不多之後,接下來就是要把它寫成論文的文章。

這個階段就是參考XMind心智圖來撰寫文章。如果心智圖夠詳細的話,文章寫起來會很順、很快,還會加入許多當初心智圖沒有納入的資料。但如果寫一寫覺得很卡、轉得很硬,那可能就是當初心智圖沒有整理得很好,我會再回去重整心智圖。

寫完之後,我就會將該章的檔案寄給老師,請老師幫忙檢查。

任務完成比例

圖示各節進度 整張心智圖

我通常會用「任務完成比例」圖示來標示目前做到的進度。「任務完成比例」圖示是一個方形的餅圖,有Start (0%)、25%、50%、75%、100%、暫停等六種圖示的差別。

專案管理裡面會建議我們把專案事項以具體的視覺化方式呈現出來,讓執行者知道已經完成了多少、還有多少沒有完成,這有助於專案的控管。我把這種想法應用到論文上,用「任務完成比例」了解自己撰寫論文的進度。

制定撰寫規則與格式

制定規則跟格式

因為我是打算分章撰寫多個檔案,最後再統合,所以有必要制定撰寫規則與格式,以求得整篇文章的統一。基本規則都是參考張保隆、謝寶煖(2006)的「學術論文寫作: APA規範」來制定,不過在撰寫文章的時候,我還會一邊以心智圖寫下額外的規則,包括檔名、存檔方式、章節範本之類的注意事項。

4. 改版追蹤階段
  • 以Word修改為主
  • XMind心智圖記錄版本
  • 以RTM輔助記錄零星修改

老師檢查完的文章通常會有很多建議,而我必須參考老師的建議來改善論文的內容。

老師的修改

Word修改圖片

我跟老師之間的論文校對全部都以Word檔案進行。老師會將他認為應該要修改的地方以紅字標示、或用刪除線表示要刪掉的部份。不過很遺憾的是,老師已經忘記Word的修訂功能如何使用,所以這些標示都是手工加上去、需要手工去檢查的。

image

修改時,我並不是完全接受老師的意見,而是把老師的修改當做是一種改進的參考,很多時候都是看完老師改過的地方,然後我再整個重寫。當然,重寫時也是納入了老師的建議。

各章版本記錄

統合版本記錄

我通常把老師寄回來的檔案另存一個校對完成新檔,然後把上一版修改前的資料也存成一個新版本檔案,參考老師的校對完成檔案,來修改新版本檔案。而這之間來來回回建立多個版本的檔案,我會以心智圖的超連結來記錄,以方便查閱。

以RTM輔助記錄要修改的地方

搭配RTM

有些章節改了一些規則、用詞之後,就必須回頭去修改其他章節。這些細微變更的待辦事項,我使用RTM+Astrid的待辦事項來處理。再撰寫文章時,有要修改的地方就記錄在RTM中,稍晚再處理;待要處理其他章節時,就參考RTM的列表進行修改。

RTM待辦事項較沒有心智圖這麼有組織,只是零星的記錄,適合輔助像是修改細節這種瑣碎的工作上。

我一直想等有空時好好介紹RTM+Astrid的待辦事項組合,請等待下次吧。

5. 論文統整階段
  • 以Word統整為主
  • 以RTM輔助零星修改

校對通常是到二校就差不多。而各章都會重複步驟2到步驟4的內容,直到所有章節都撰寫完成,就進入最後的論文統整階段。

雖然理論上只是把各章的Word檔複製貼上到同一個檔案去,但因為各檔案的樣式有所不同,還要把標號進行重整,並且避免表格被分頁切斷,所以調整起來也費了一番功夫。

image

在統整時,也會參考之前規劃的論文格式部分的心智圖,把主要章節內文之外的其他資料補充進去,像是摘要、目次、表次、圖次。其中公式目次後來發現大家都沒人使用,所以我之後把公式目次刪掉了。

統整之後,我會再請老師檢查看看。這樣才算是完成整個論文。


論文草稿心智圖

這份論文寫到最後我總共建立了11張心智圖。

我在撰寫論文的時候就常常將心智圖輸出成PNG、記錄在Plruk上當成日記,所以上面介紹中有許多都是來自於當初在撰寫時的心智圖。

接著我想把心智圖最後的樣子在下面作個記錄。這心智圖與論文內文並不是完全相同,有些錯誤也在論文中直接更正。心智圖大概在4. 改版追蹤階段之後就沒有再修改過了。

以下全部的心智圖可以點選此連結下載,僅供參考。必須注意的是,心智圖中有許多部分加上超連結連到特定的檔案,而這其實是指我電腦中的資料,如果你把心智圖下載到你的電腦去的話,應該是找不到對應的資料才是。

1. 論文架構

1. 論文架構

這是整個論文的核心心智圖,連結其他心智圖之用。

2. 論文格式

2. 論文格式

記錄論文主要文章之外的其他資料。

3. 第一章 緒論

3. 第一章 緒論

4. 第二章 文獻探討

4. 第二章 文獻探討

5. 第三章 研究方法

5. 第三章 研究方法

6. 第四章 知識標註學習系統

6. 第四章 知識標註學習系統

7. 第五章 知識萃取機制

7. 第五章 知識萃取機制

8. 第六章 研究結果與分析

8. 第六章 研究結果與分析

9. 第七章 結論

9. 第七章 結論

10. 核心架構圖

10. 核心架構圖

這是與老師討論論文最後結果的架構圖。

11. 論文摘要&投影片

11. 論文摘要&投影片

最後論文完成,要撰寫摘要與規劃口試時要報告的投影片內容。


結語

註解功能

當初用心智圖的時候,其實沒有使用到「註解」的功能。「註解」可以在一個節點裡面放入長篇、有格式的文字,用在蒐集文字資料上非常方便。我後來才發現這個功能,不然有些論文資料就不需要以超連結連到外面去,而是直接就能夠用心智圖來整理。

我的論文寫作草稿工具:XMind心智圖

自從利用心智圖撰寫論文之後,我也開始用心智圖來規劃Blog要寫的內容。這一篇就是這樣子規劃出來的。一開始,這個心智圖也一樣是在手機上以Thinking Space繪製,然後在電腦上補充需要的資料,最後再用Windows Live Writer把它寫完。

感覺上這樣寫Blog會比較踏實,結構也比較完整,比較不會想到什麼寫什麼、亂無章法。但是實際上在寫的時候,還是不會像寫論文一樣咬文嚼字,寫起來還是挺隨便的XD

總之,就當做寫日記一樣,總算是把用心智圖寫論文的過程作個交待了!

(more...)