:::
顯示具有 作品 標籤的文章。 顯示所有文章

編碼者間一致性信度:Cohen Kappa係數計算器 / Intercoder Reliability: Cohen's Kappa Coefficient Counter

布丁布丁吃布丁

編碼者間一致性信度:Cohen Kappa係數計算器 / Intercoder Reliability: Cohen's Kappa Coefficient Counter

intrater

我寫了一個線上計算Cohen Kappa係數的工具。本文簡單介紹編碼者間一致性信度與操作教學。


為什麼要算編碼者間的一致性信度? What’s Intercoder Relicability?

William M.K. Trochim這張圖傳神地描繪出編碼者間一致性的問題。兩位編碼者(coder),或著說是觀察者(observer) (註1),在分析與觀察同一件物品或現象時,兩個人的觀點可能會不太一樣。

註1:因為現在觀察大多是交給機器錄影或錄音,較無觀察偏見的問題。主要會受到人為影響的部分則是分析這些錄影與訪談的資料,而分析質性資料將之給與概念化標籤的方法稱之為「編碼」,進行編碼的研究者也就是「編碼者」。

如果兩人編碼結果相差很大,那表示研究者的分析方式不夠客觀、帶有嚴重偏頗。如果兩人編碼結果相同,那表示這是一個很穩定、具有足夠信度、可以重複使用的編碼方法。

因此現在的研究方法中會要求質性編碼要以兩位以上研究者來進行編碼,並利用統計來計算編碼者之間的一致性信度。

Cohen Kappa係數 / Cohen's Kappa Coefficient

image

依據資料類型的不同,一致性信度有很多種計算方式。在此介紹的是適用於名義尺度資料類型的Cohen Kappa係數計算方法。名義尺度的意思是資料編碼本身只是一個「代號」,代號與代號之間並沒有順序、間隔、比例的關係。Cohen Kappa係數只看有多少個編碼,兩個人之間的編碼相符的比例為何。由於Cohen Kappa排除了編碼者亂填的隨機性,因此比單純的相符百分比還來得可信。

Kappa係數介於-1 ~ 1之間。一般來說,能達到0.8以上是很棒的結果,但通常達到0.6~0.8就可以發表了。至於0.6以下,則是建議你們兩位編碼者再討論一下編碼方法,有更多共識之後再來重編一次吧。

Kappa係數

一致性程度

< 0.4

0.4 ~ 0.6

一般

0.6 ~ 0.8

> 0.8

極佳


計算器操作說明 / Counter Usage Guide

  1. 首先,在Google試算表或是Excel中,複製兩位編碼者的編碼結果。
    image
  2. 貼在「coding result」的表單欄位中。
    image
  3. 按下「Count Cohen’s Kappa Coefficient」之後,結果表格就會呈現在下方。紅字的部分就是Cohen Kappa係數了。 
    image
(more...)

分號轉星號工具 / Convert Semicolon to Star

分號轉星號工具 / Convert Semicolon to Star

image

這一個幫學弟寫的簡易分析小程式。

功能:將「--」符號前最近的一個「;」替換成「*」。

(more...)

將CSV與XLSX轉換成Solr XML格式 / Convert CSV and XLSX to Solr XML format

將CSV與XLSX轉換成Solr XML格式 / Convert CSV and XLSX to Solr XML format


2014-12-12_010659
Apache Solr要匯入資料的格式預設是使用XML,但這跟我們習慣使用的Excel有很大的差別。因此我利用js-xlsx套件作了一個可以在線上將Excel的XLSX格式轉成Solr XML格式的工具,方便大家把Excel資料匯入Solr。您可以在這個網頁直接使用此工具,而更新的程式碼則是典藏在GitHub上。
This tool is used to convert Excel XLSX format file to Apache Solr’s data import XML format. Following is online tool and you can download whole JavaScript codes on GitHub.


如何製作Excel檔案? / Prepare Excel Data

2014-12-12_010632 - Copy
規則只有一項:Excel的第一列是欄位名稱,第二列之後才是資料。
本程式在轉換的時候,會過濾掉&之類的XML脫逸字元。如果轉換後的檔案匯入Solr時發生異常,請在下面的留言中回覆給我知道即可。



Source code from: JS-XLSX (XLSX/XLSB/XLSM) Live Demo

Configuration


Upload XLSX
  • Example XLSX data: example-data.xlsx
  • 如果無法下載,請直接複製XML檔案,貼上到Notepad++,另存成為data.xml即可。
Drop an CSV / XLSX / XLSM / XLSB / ODS file here to see sheet data
... or click here to select a file
Advanced Demo Options: Use Web Workers: (when available) Use Transferrables: (when available) Use readAsBinaryString: (when available)
(more...)

我讓CKEditor也可錄音了:Recordmp3js插件 / Recordmp3js Plugin: Record Voice in CKEditor

我讓CKEditor也可錄音了:Recordmp3js插件 / Recordmp3js Plugin: Record Voice in CKEditor

2014-09-06_004725

我做了CKEditor的插件Recordmp3js,這是以HTML5的新功能為基礎,建構在Recordmp3js專案上實作的插件。以下介紹這個套件的功能。

I developed a CKEditor pluing: Recordmp3js. This is based on HTML5 audio function and Recordmp3js project. You can use Recordmp3js plugin to record voice in CKEditor. This article introduce Recordmp3js and some development memo.


CKEditor插件:Recordmp3js / CKEditor Plugin: Recordmp3js

recordmp3js的特色如下:

  • 使用HTML5的錄音功能,不需要Flash或Java Applet等其他插件。
  • 錄音功能旁有個音量顯示器,可以知道自己的麥克風有沒有啟用或收到聲音。
  • 限制錄音長度:最短3秒,最長60秒。
  • 錄音檔案可以壓縮成MP3,而不是預設產生WAVE。
  • MP3檔案預設以Base64編碼儲存,也可以儲存到PHP File Host專案上。

安裝說明請看專案的README

使用介紹 / Usage

2014-09-06_005312

安裝好之後會看到一個麥克風的圖示gentleface.com free icon set

2014-09-06_012542 - copy

開啟視窗之後,要先按瀏覽器的「允許」麥克風。

PicPick 2014-09-06 01-23-32 2

然後主要操作介面才能正常啟用。左邊是錄音的按鈕,右邊是音量的顯示器,未開始錄音時是以單色顯示。讓我們按下錄音按鈕。

PicPick 2014-09-06 01-00-52 1

開始錄音。你可以看到限制錄音時間,右邊的音量顯示器變成彩色了。

PicPick 2014-09-06 01-36-14 5

停止錄音之後,要等待系統轉檔與上傳。大致上錄音1分鐘就需要1分鐘轉檔。

2014-09-06_004725

轉檔完成,下面會出現音樂播放界面。按下音樂下載圖示則可以下載錄音檔MP3music_down。錄音檔案的時間長度比實際錄音的時間還要長,這是已知的正常BUG (參考Known issues那段),目前沒有解決方法。

2014-09-06_014012

按下「確定」之後,就可以在編輯器內插入<audio>標籤了。

開發感想 / Development

萬用的Base64編碼 / Amazing Base64 Encoding

2014-09-06_100638

其實前一篇開發的PHP File Host專案是為了保存這篇的錄音檔而開發,規劃上是最後才實作。不過真的摸到Recordmp3js之後,才發現原來保存二進位MP3檔案的方式竟然是用Base64編碼!

Base64編碼是一種將二進位檔案以字串的方式編碼的方法。一般HTML網頁是以純文字的方式保存,因此網頁上面的圖片、聲音檔案等二進位資料通常是另外儲存,再以<img>、<audio>標籤嵌入到HTML網頁中。可是這個動作是撰寫HTML網頁初學者的第一個難關:為什麼網頁跟圖片要分開儲存?這也造成了複製網頁檔案的困難,不能只有複製HTML網頁檔案本身,還得複製相關使用的二進位圖片檔案。

Base64編碼可以讓圖片以字串的方式保存在HTML網頁中,而不需要額外保存一個檔案。我以前也介紹過以Base64編碼保存圖片這件事情。在寫這個Recordmp3js插件時,也因為覺得還要另外找地方插入麥克風圖示很麻煩,所以直接用Base64編碼的圖片來插入。可是我還真沒想到原來Recordmp3js的MP3聲音檔案也是用Base64來儲存!

以前只是單純地使用Base64編碼的檔案,但是到這時候我才意識到Base64的麻煩之處。一般是使用file類型表單欄位來上傳檔案,例如:

<input type=”file” name=”file” />

但是由於Base64編碼是字串資料形態,所以用普通的text類型表單欄位來遞交:

<input type=”text” name=”file” />

這兩者的name雖然都是file,但是對伺服器來說卻是不一樣的。在PHP當中前者是要用$_FILES[“file”]來取用、後者是要用$_POST[“file”]。此外,由於Base64編碼並沒有指定檔案名稱,所以還需要用另一個text欄位來傳送檔案名稱。

而即使Base64編碼是字串形式,也不能用JSONP的方式來做跨網域傳輸。因為JSONP實際上是將資料輸入在網址上,而Base64編碼的結果通常很容易超過網址的2083字元限制

這造成我得改寫PHP File Host的檔案接收方式,又花了我一番功夫。到最後索性乾脆讓Recordmp3js預設使用Base64編碼來儲存,讓PHP File Host變成選擇性支援。雖然這會造成插入CKEditor的資料變得超級長,但不需要額外架設伺服器保存MP3檔案這點還是蠻容易讓人使用的。

MP3轉檔 / MP3 Convert

一開始研究HTML5錄音功能時,最讓我困擾的地方在於HTML5預設的錄音結果是WAVE格式。WAVE是沒有壓縮的聲音檔案,因此聲音檔案的大小非常大,讓我難以直接使用HTML5的錄音功能來儲存錄音檔案。

本來還在考慮是否要在PHP File Host加上檔案轉檔功能,在上傳檔案之後轉檔成MP3或amr格式。可是後來意外發現Recordmp3js居然在Recorderjs專案之上加上了MP3轉檔libmp3lame.js的功能,讓MP3轉檔的工作直接就在客戶端瀏覽器上完成。這真的是太方便了。

當然,對很多網頁開發者來說,這是風險很高的事情。因為客戶端使用的瀏覽器跟電腦效能不一,因此完全不能寄望IE6或是在行動裝置上的瀏覽器能夠正常執行。我剛剛拿了Android的Chrome跟Firefox來玩玩看,的確是無法開啟。

不過我的應用場景比較特殊,我可以要求使用者以Chrome或Firefox來使用我的系統,這個顧慮就暫時不在我的考量之中。

其他的轉檔格式? / Other Better Audio Format?

這也讓我想到是否可能用更有效率的amr格式來為語音聲音檔案編碼,赫然發現GitHub上的確有amr.js專案,真是厲害。然而選用編碼格式也要顧慮到瀏覽器的支援,根據w3schools.com的HTLM5 Audio介紹,<audio>標籤只支援MP3、Wav跟Ogg格式,大部分瀏覽器都支援MP3,除了Opera。支援細節如下:

Browser MP3 Wav Ogg
Internet Explorer YES NO NO
Chrome YES YES YES
Firefox YES YES YES
Safari YES YES NO
Opera NO YES YES

 

HTML5的錄音元件 / Audio in HTML5

Recorderjs將HTML5的錄音元件包裝的非常好用,但是實際上使用之前,還是需要經過非常多的設定。你可以看看Recordmp3js的範例網頁程式碼,JavaScript設定那邊就一長串了,一開始研究的時候還真讓人感到困擾。Recordermp3js也具備了錄音完成之後上傳的功能,可是這功能卻寫死在Recordmp3js檔案裡面,而非開放設定的功能,讓我到最後還跑到Recordmp3js裡面去研究,也花了不少功夫。

在研究的過程中,越來越覺得audio真是有趣的應用。藉由結合多個音訊來源,我們可以動態控制各種聲音播放,就可以自行製作各種樂器。Web Audio Demos展示了很多聲音的應用,Web Audio Vocoder是其中一種強調混音的功能,這激起了很多不同應用的可能性。而我則是參考了AudioRecorer華麗的音量顯示器,做到Recordmp3js當中,讓錄音介面感覺漂亮一點。

錄音功能需要的Worker / Recorder and Worker

使用HTML5錄音跟MP3轉檔時,Recordmp3js都使用到了HTML5新元件Worker。一般來說,這個Worker必須是獨立的JavaScript程式碼,而且受限於同網域下執行的安全性問題。在跨網域應用中,這是一個很大的門檻。

但是我參考使用web workers這篇文章的說明,撰寫了worker_manger.js,將worker要執行的程式碼事先插入到目標網頁中,然後在以該網頁上的worker程式碼作為worker物件執行,就能夠保持在同網域執行的限制,迴避跨網域的問題。

雖然這個小功能我只用了很短的時間來做,但其實應該對很多人來說是很重要的功能吧?有機會再來正式發佈好了。

如何允許瀏覽器錄音 / How to Allow Browser Enable Microphone

使用HTML5錄音元件的另一個重點在於「允許」錄音檔案的事件。實際上啟用Recordmp3js的時候,跟HTML5元件宣告我要使用麥克風的時候,不是所有的瀏覽器就會跳出提示問你要不要啟用麥克風。

Firefox會在使用時直接跳出是否允許啟用,一個網頁只會問一次,Chrome有些版本也是如此。但是我電腦的Chrome卻不會在Recordmp3js載入時跳出來詢問,而是要離開網頁、再回到網頁時才會詢問。我索性加入一個<iframe>標籤,讓網頁觸發讀取事件,好讓Chrome問我要不要允許使用麥克風。但是離開網頁又回來時,Chrome還是會問我要不要允許麥克風,還好這動作也只要問一次而已。

很多使用者應該會忘記做「允許」麥克風這個動作。Chrome跟Firefox的介面都不太容易讓人理解,我可以預期這個動作應該是最讓人感到困擾的地方吧。

播放介面與<audio>標籤 / Audio Controller <audio> Tag

至於播放介面,我就直接使用HTML5的<audio>標籤。雖然<audio>標籤提供了播放/暫停、時間、播放進度條、聲音控制等功能,但是各個瀏覽器上<audio>長得都不太一樣,因此網路上大多建議是自行重寫<audio>的操作介面。但想到這個<audio>是要插入到CKEditor當中使用,寫得太複雜也不利於編輯。所以我還是選用最基本的<audio>標籤來顯示。

CKEditor插件開發 / About CKEditor Plugin Development

最後來講講CKEditor插件的開發。

一開始我是看为CKEditor在线编辑器增加一个自定义插件這篇,一步一步來實際操作看看。但是做到最後並沒有如期地做出可以用的CKEditor插件。我也去翻了CKEditor的Plugin教學跟它的API,但後來還是覺得乾脆直接複製既有的Plugin開始做起好了,所以就打開被壓縮的程式碼來看,直接從可以運作的功能中找尋我需要的程式片段。

雖然並不是什麼正規的學習方式,但這樣也在一片混亂中寫完了這個插件。有多混亂呢,看看插件的程式碼就知道了orz

總之最後還是完成了,也發佈到CKEditor的Add-on頁面去,也算是對這份研究有個交待啦!

話說回來,一開始會全部都重頭製作的原因就是因為在CKEditor與TinyMCE上找不到這種錄音的插件。現在我可以用這種方式來製作錄音插件的話,那其實像是webcam拍照與錄影等各種應用應該都沒問題才是。有機會再來研究看看吧。

(more...)

PHP File Host 檔案上傳專案 / PHP File Host Project

PHP File Host 檔案上傳專案 / PHP File Host Project

圖片1

最近我完成了一個用PHP做的檔案上傳專案「PHP File Host」,順便學習了PHP框架Fat-Free Framework、PHP資料庫函式庫RedBeanPHP、前端檔案上傳工具jQuery File Upload跟前端界面Bootstrap等技術。以下說明這個專案內容。

I wrote a PHP project “PHP File Host” for cross origin file uploading. In this project, I try some new technology include Fat-Free Framework, RedBeanPHP, Bootstrap and jQuery File Upload. Following is introduction of this project.


專案由來 / Project Introduction

原本我的KALS專案並不具備檔案上傳功能(其實一開始規劃時有啦,但是一直沒有實作),但最近開始有了這方面的需求。然而檔案上傳乍聽之下很簡單,但是在跨網域(Cross Origin)的情境中,卻不太容易實作。

另一方面,簡單的檔案上傳應用實作常常會有幾個問題:

  1. 實體檔案管理的問題:檔案存放在哪哩?伺服器空間足夠嗎?
  2. 檔案重複問題:如何有效率地降低檔案的使用空間?
  3. 檔案名稱問題:遇到不支援的檔案名稱編碼,存到伺服器的檔案系統時會造成亂碼的問題。

因此我想要做一個簡單的檔案上傳應用網站。這個只做一件事情:支援跨網域的檔案上傳、然後的到一個下載網址。這樣就夠了。這就是PHP File Host的由來。

專案內容 / Project

圖片2

我把最近對PHP File Host的報告彙整成為一個投影片,裡面有簡單的功能介紹:

特色 / Features

PHP File Host的特色在於:

  • 運作環境:以PHP架設,資料庫預設使用SQLite,但是不需要額外配置資料庫。
  • 跨網域檔案上傳:支援以JSONP上傳jQuery File Upload上傳
  • 避免儲存重複檔案:以MD5特徵碼來辨識檔案內容,避免儲存相同檔案。
  • 完整保留檔案名稱:以資料庫儲存檔案名稱,並由程式負責從header指定下載檔案名稱,因此不會下載到亂碼的檔名。

相關技術 / Technology

裡面主要用到幾種技術,在此我也聊一下使用這些技術的心得。

Fat-Free Framework (F3)

Fat-Free Framework (F3)是一個PHP框架。不過在講F3之前,我想先聊一下CodeIgniter。

在開發KALS時,我主要使用的PHP框架是CodeIgniter (CI)。CI大量參考Ruby on Rails的理念,大量遵守「約定優於配置」(convention over configuration)的準則。特別是對於routing功能來說,要連到指定網址就得在特定的檔案結構中撰寫相對應的PHP類別。

一開始我覺得這也不錯,大家的都能遵守約定的話,開發就能夠維持一致性。但事實上是為了這這個約定,CI限制了大量的靈活性。常常會發現要接手專案的新手要花很多時間來瞭解routing的邏輯,而且無法自由指定routing中的變數與類別也很令人覺得限制很大。最致命的就是不能支援JSONP的呼叫模式,難以跟jQuery.getJSON()搭配運用。

雖然KALS的CI被我大改之後變得可以支援JSONP,但我不覺得這是一種理想的做法。所以當我這次要開發這個專門支援跨網域檔案上傳的PHP File Host時,我就毅然決然換了另一個PHP框架。

我花了一點時間嘗試不同的PHP框架,不過後來找到了F3。這個專案特色是檔案看起來不會太複雜,特別是與龐大的CodeIgniter相比。

image

F3一些零星的功能不多,但是主要功能卻比CI好用很多。

F3的routing是由設定檔控制,寫法跟Node.js的express框架很像。這符合我們一般使用的概念:從URI追溯檔案位置。而不是像CI那樣,得先瞭解約定才能知道檔案的位置。使用配置設定來規範routing這點看起來像是違反了「約定優於配置」,但是從另一個角度來看,這也是讓「使用者」(利用URI使用系統)跟「開發者」(使用伺服器上的檔案配置)脫鉤的一種好方法。CI那種routing規範實在是太過糾結,用起來綁手綁腳的。

而F3的routing也支援分辨GET (查詢)、POST (新增)、PUT (更新)、DELETE (刪除)等REST API會使用的四種方法。不過要注意到,若針對同一URI使用GET跟POST等多種方法,最後變數只會取得使用GET這個而已。這是比較令人困擾的地方,我得再研究看看。

此外,我喜歡F3用擴增HTML標籤的方式來建立樣板,輸出的樣板能夠直接指定MIME Type為JavaScript這點也很不錯,這對JSONP支援良好,也可以輕易使用現在流行的Markdown程式語言。相較之下,CI的樣板只能說是原始人。不過F3預設限制「同源使用」(same-origin),為此得額外宣告以下header才行讓其他網站跨網域開啟F3專案:

header('X-Frame-Options: ');

CI提供了大量零星的函式(helper),讓我們能夠簡單地處理很多小東西。F3並沒有這麼多helper,但是它把很多常用的系統與環境資訊都寫在框架的系統變數裡面。習慣之後也還算好用,但我比較喜歡helper的函式形式。

在資料庫的使用上,F3的資料庫也跟CodeIgniter的Active Record一樣,都是使用ORM (Object-Relation Mapping)的方式操作資料庫。而F3多了一些NoSQL資料庫的支援,像是MongoDBJig

雖然這些ORM用起來不錯,但是我這次更想使用另一種資料庫函式庫更感興趣,那就是RedBeanPHP。

RedBeanPHP

RedBeanPHP是一個PHP資料庫函式庫,使用時只要導入它一個PHP主要檔案即可。

他在使用上跟很多ORM函式庫一樣,可以把資料表當作一個類別,裡面的一列當作是一個物件來使用。但是最大的差別在於,RedBeanPHP是不需要預先設定資料表(schemaless)的架構。

舉例來說,今天我們有一種類別叫做Book,那我們就用RedBeanPHP建立一個類別叫做「Book」的物件,然後設定其中的屬性「title」跟「author」後儲存,這樣子資料庫中就會自動幫我們把相關的table與field都設定好,連field的資料形態都會與物件屬性的形態直接相對應。

未來如果這個Book想要增加第三種屬性「price」,那就在程式中加入「price」,儲存,這樣子資料表就會多一個price的欄位。

這樣子的好處在於,我們不需要在配置程式碼之餘還要煩惱如何配置資料庫。RedBeanPHP預設採用SQLite,但也可以支援主流的關聯式資料庫,如PostgreSQL跟MySQL。

我使用RedBeanPHP在PHP File Host中儲存檔案資料,操作起來非常容易上手,而且令人驚訝地好用。

有人抱怨RedBeanPHP的資料庫查詢速度過慢,這點可能要謹慎評估。但PHP File Host少量應用看來是沒有這個問題。

Bootstrap

這次我也一併改進了前端的界面。跟以往一樣,比起重頭開始設計網頁界面,我比較偏好從既有的網頁範本開始修改。難得這次機會,我也就從知名的客戶端技術Bootstrap的範本Landing Page開始改起。

使用Bootstrap的目的包括:

  • 支援RWD (Responsive Web Design):不論電腦、平板、手機等不同螢幕大小的裝置,網頁都應該自動最佳化調整版面。這點可以靠Bootstrap的Grid system來調整。
  • 一致且美觀的元件:Bootstrap的選單、按鈕、讀取條非常好看。我還蠻喜歡它的Default、Primary、Success、Info、Warning、Danger、Link的通用分類與對應顏色。
    image
  • 豐富的圖示:不光是Bootstrap本身提供了大量的圖示(Glyphicons),Landing Page範本還用了更多元的Font Awesome圖示,基本功能操作真的是不需要額外在準備其他圖片了。

圖片1

最後完成的結果在Am I Responsive?上看起來就是這樣,開頭的圖片會按照視窗畫面去做調整,頂端選單列也會在小螢幕中自動縮成一個按鈕,成果很不錯。

雖然我老是做一些伺服器端的專案,但是作為網頁相關的程式設計師,前端界面技術自然也不能生疏。PHP File Host雖然只是一個小小的網站,但是做起來還是令我挺開心的。

jQuery File Upload

我這次也加入了jQuery File Upload來改善檔案上傳的介面。這個套件可以用簡單的方式來設定檔案上傳的功能,讓我們輕易加入以下功能:

  • 點選按鈕、選擇檔案、馬上上傳
  • 上傳進度條
  • 拖曳至指定區域上傳
  • 剪貼上傳

我很喜歡這些方便的操作,傳統點選檔案按鈕的方式實在是太過麻煩。

另一方面,我本來還蠻煩惱怎麼用jQuery File Upload來進行跨網域傳送檔案,卻意外發現jQuery File Upload使用了HTML5元件postMessage來傳輸檔案的方式,比我以前提出的JSONP跨網域檔案上傳還要好用很多,真讓我驚豔。

不過最後我要在其他專案使用jQuery File Upload設定上傳功能時,卻發現它使用的是jQuery 1.11,與KALS專案的jQuery 1.4有很大的差別。加上jQuery File Upload也要使用jQuery UI等工具,導致它與其他功能互相衝突,最後我還是放棄在KALS專案使用jQuery File Upload而使用原本的JSONP跨網域檔案上傳方式。

向DSpace致敬 / Salute to DSpace

最後也提一下PHP File Host內部檔案儲存的方式,這部分我大量地參考了DSpace保存檔案的方式。

DSpace依照檔案的MD5特徵碼作為檔案名稱與實體位置的設定,因此每個檔案都長得像是「01f7b24e629cc23e369983994d0b8fbe」。檔案的名稱、MIME Type等相關資訊則是寫在資料庫中,連同上傳者、上傳時間等操作記錄也一併分開儲存。

這樣做可以改善檔案重複儲存、避免檔案名稱編碼不支援等問題,但是檔案管理 (特別是刪除)跟下載就成為另一個技術上的重點。目前PHP File Host還沒有做的刪除功能,就只是一直擺放資料,然後以供人下載而已。

利用Base56面碼縮短網址 / Shorten URL by Base56 Encoding

喔對了,為了避免網址過長,我還特別用了Base56將數字ID以「0123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ_-.~」等網址允許的字元進行編碼。即使檔案的編號很大,網址長度仍然不會很誇張地漲大。這種做法我也挺喜歡的。

這些大致上就是PHP File Host使用到的技術。


結語:過時的技術? / Conclusion: Outdated Technology?

剛好最近也看到一篇分析報導:「AngelList 分析:越好的公司越喜歡用 Python,越差的公司越愛用 PHP」。該分析將公司分成Okay、Good、Great三級,然後看公司使用的程式語言。

其中伺服器端PHP排行第三、客戶端Bootstrap排行第五(但是RoR我不認為是客戶端技術)、資料庫SQLite榜上無名。雖然直接看圖表起來也沒啥不好,但我現在才學這些技術,的確是比很多人慢了許多。

之後有機會的話,我想要研究伺服器端的Node.js,然後在單一頁面應用上繼續精進AngularJS (之前寫了一個批次開啟網頁的小應用,蠻好上手的)。久違地學習新的技術,真的很令人開心呢。

(more...)

PHP線上轉檔服務搭配pdf2htmlEX / PHP File Converter with pdf2htmlEX

布丁布丁吃布丁

PHP線上轉檔服務搭配pdf2htmlEX / PHP File Converter with pdf2htmlEX

2014-08-11_202622

我開發了一個可以用PHP線上轉檔服務 (PHP File Converter)。此服務可以讓使用者上傳檔案,然後等待系統進行轉檔,最後輸出轉檔完的結果。這個程式是為了搭配pdf2htmlEX一起運作,以省略需要用指令來進行轉檔的過程。以下介紹這個服務的由來與下載說明。

I developed an online PHP File Converter to let user online convert their files to another format. PHP File Converter use system command line to  use convert tool, for example, pdf2htmlEX. Following is introduction of PHP File Converter.


簡介 / Introduction

2014-08-11_201945

一開始是因為我們需要一個PDF轉成HTML的方案。這些方案中王璐的pdf2htmlEX專案轉換成效非常好。pdf2htmlEX可以把一份PDF檔案轉成一個HTML檔案,而這個HTML檔案可以直接開啟,裡面已經包含了原本PDF的排版與圖片。上圖是轉換後的成果,非常好用。

但是pdf2htmlEX的操作是要用Linux的指令列進行,這對於許多不熟悉Linux的人來說有點麻煩。這讓我想要發展一個線上轉檔網址,可以讓使用者上傳檔案,然後利用作業系統的命令列進行轉檔,轉檔完成之後再提供使用者下載的服務。最後就完成這個PHP File Converter

特色 / Features

68747470733a2f2f6c68352e676f6f676c6575736572636f6e74656e742e636f6d2f2d424b4e2d31796b516741492f556d643863637538456d492f41414141414141424d4c592f62586138485459516769492f73302f323031332d31302d3

PHP File Converter特色在於讓使用者直接在瀏覽器中上傳檔案到伺服器,然後PHP File Converter會自動執行系統轉檔指令。轉檔完成之後,使用者則會被引導到下載網址,然後就可以下載已經轉檔完成的檔案。

具體來說,特色如下:

  • 以伺服器作業系統的命令列進行轉檔。只要伺服器可以使用命令列CLI (command line interface)進行轉檔,就可以用PHP File Converter來轉檔
  • 伺服器端可設定上傳檔案允許大小、格式,避免惡意檔案上傳
  • 伺服器端可設定轉檔輸入的參數
  • 伺服器端可設定保留轉檔數量,避免使用者上傳過多檔案而導致伺服器空間不足
  • 檔案的上傳、轉換與下載會在系統留下記錄,包括檔案名稱、使用者IP與時間
  • 系統是基於CodeIgniter 2.1.4,採MVC架構開發
  • 以SQLite作為資料庫,不需要額外搭配其他資料庫設定

目前PHP File Converter跟pdf2htmlEX轉檔工具綁定在一起,特別設置了pdf2htmlEX會使用的Zoom等參數。

至於pdf2htmlEX則是王璐開發的專案,詳細請看他的pdf2htmlEX專案

系統需求與設定 / System Requirement & Configuration

PHP File Converter的專案網站與下載位址如下:

PHP File Converter是以PHP架設,需要搭配SQLite資料庫才能運作。建議運作環境是:

  • PHP 5.5.3
  • SQLite 3
  • 硬碟空間:建議100MB以上
  • 測試環境XAMPP 1.8.1

轉檔程式主要的設定檔位於 [php-file-converter]/application/config/converter.php 。參考檔案內的說明來進行設定。

由於轉檔需要耗費大量伺服器資源,故在此不提供展示用的界面。


結語:未來發展方向 / Conclusion: Future Works

雖然目前PHP File Converter設定是搭配pdf2htmlEX,但其實它有很多可能。

發展PHP File Converter的原因有很多,另一個原因是因為很多服務都需要搭配轉檔工具才能使用,例如DSpace多媒體轉檔器 (Media Filter)就需要轉圖片、轉文件檔案(txt或doc)、轉聲音、轉影片,很多很多。雖然大部分轉檔工具都可以在Linux中安裝,但是每一臺都安裝自己的轉檔工具,顯然是無法善用資源的一件事情。

於是我的構想是:一臺伺服器專門負責一種檔案的轉檔,其他伺服器則是把檔案交給它轉檔。為了做到這件事情,PHP File Converter甚至有規劃API使用。

不過可惜的是,目前為止還沒有朝向這個方向進行的實際規劃。目前大家主要是手動上傳、手動下載,再把轉檔好的檔案擺到提供使用者取用的位置,伺服器之間沒有這麼自動。

最後,請讓我用這一篇文章來感謝pdf2htmlEX的作者王璐。我在安裝跟使用pdf2htmlEX時遭遇了很多問題,感謝他在信中熱情地為我解惑,而且還快速地修改了一些錯誤,真是令人尊敬的開發者。謝謝您。

(more...)

RSS全文抽取服務 / Full-Text RSS Service

布丁布丁吃布丁

RSS全文抽取服務 / Full-Text RSS Service

2014-08-11_200706

Full-Text RSS是我根據FiveFilters.org提供的full-text-rss改良的開放原始碼RSS全文抽取服務。Full-Text RSS可以分析RSS中每個頁面的網址,抽取該網址中的網頁文章內容,並加上換頁偵測、中文字編碼調整,讓RSS閱讀器可以直接閱讀到全文的RSS。

Based on FiveFilters.org’s full-text-rss code, I developed Full-Text RSS service to extract full text in RSS feed especially for Chinese article. Following are Full-Text RSS’s introduction, features and usage.


由來 / Introduction

由於我個人是重度的RSS讀者,然而大部分的RSS訂閱來源都只有提供文章一小部分的內容,例如Linux伊甸園開源社區 (RSS網址為:http://www.linuxeden.com/rss.php) ,這意思是說我要看文章的內容,還得從RSS瀏覽器中打開瀏覽器、上網、然後用他們網站中不適合手機小尺寸螢幕的排版來閱讀。雖然之前我也找許多RSS全文服務,包括まるごとRSSFeedEx.netFiveFilters.org,但是因為效率跟中文編碼的問題,總讓我使用起來十分受限。

2014-08-11_204136

這讓我興起了想要自己來架設RSS全文抽取服務的念頭。一開始我是在GitHub上搜尋,找到很多以full-text-rss為名字的專案。然後循著README.md,才找到於FiveFilters.org的開放原始碼軟體full-text-rss

於是我就很開心地下載下來,改放到GitHub託管,然後隨著自己的習慣不斷地改造這個Full-Text RSS全文抽取服務

特色與改造 / Features

RSS全文抽取服務最主要的目的在於抽取RSS的文章內容。以Linux伊甸園開源社區為例,原本的RSS網址 www.linuxeden.com/rss.php 只能顯示部分內容,如下圖:

2014-08-11_204733

但是經過RSS全文抽取之後,可以把原本的網址取代成RSS全文抽取服務的網址: http://example-full-text-rss.org/full-text-rss/makefulltextfeed.php?url=www.linuxeden.com%2Frss.php&max=10&links=preserve&exc=&submit=Create+Feed  (只是範例網址,實際上不能連線喔),顯示內容如下:

2014-08-11_200750

2014-08-11_204930

你可以看到「物联网福音 不耗电Wi-Fi技术问世」一文已經從原本的部分文字抽取成文章全文了。

而我從FiveFilters.org下載full-text-rss之後,還進行了以下特色的改造:

用到現在也將近快1年了,陸陸續續修改了很多次,到現在總算是覺得比較穩定一點,所以就來寫這篇Blog介紹。

系統需求 / Server Requirement

Full-Text RSS是以PHP運作。安裝時條件如下:

  • PHP版本:5以上
  • 不需要搭配資料庫

但是由於Full-Text RSS在抓取網站的全文時需要大量記憶體與等待相當長的時間,如果超過PHP可以執行的時間,就會顯示錯誤訊息:

[unable to retrieve full-text content]

因此我們必須調整PHP的設定檔php.ini的部分參數,讓Full-Text RSS能有比較寬裕的執行環境:

  • max_execution_time=300
  • max_input_time=600
  • memory_limit=128M
  • 必須啟用cURL,才能抓取資料

如果還有其他參數需要調整,請在下面留言跟我說。

由於Full-Text RSS會消耗大量伺服器的資源,我本來想試著架設在免費的PaaS上來運作,可惜免費空間都跑不動。因此我推薦是安裝在自己的電腦上,當然,你的電腦也得是可以公開連線的伺服器才行。

安裝 / Installation

請從以下網址下載Full-Text RSS:

下載後,請解壓縮到你的PHP運作環境目錄。以XAMPP伺服器來說,執行目錄就是在htdocs資料夾底下。例如c:\xampp\htdocs\full-text-rss\

然後運作網頁伺服器,直接開啟Full-Text RSS網址,例如http://your-ip/full-text-rss/,這樣就可以連線了。

使用方法 / Usage

Step 1. 輸入RSS訂閱資訊網址 /  Enter RSS Feed URL

2014-08-11_200706 - Copy

首先在Enter URL輸入RSS訂閱資訊的網址,例如:http://www.linuxeden.com/rss.php。然後按下「Create Feed」按鈕。

接著等待一段時間,讓Full-Text RSS去讀取。如果讀取到最後發生錯誤,建議修改輸入頁面的「Max items / 最多抽取文件篇數」,降低為5篇以下,可以降低Full-Text RSS的讀取負擔。

Step 2. 取得全文抽取網址 / Get Full-Text RSS Feed

2014-08-11_211821

順利開啟之後,到網址列複製Full-Text RSS提供的網址。舉例來說:

  • 原本網址:http://www.linuxeden.com/rss.php
  • Full-Text RSS轉換網址:http://example-full-text-rss.org/full-text-rss/makefulltextfeed.php?url=www.linuxeden.com%2Frss.php&max=10&links=preserve&exc=&submit=Create+Feed 

剛剛的參數都寫在網址上,應該很容易看懂吧。

Step 3. 加入您的RSS閱讀器 / Add Feed To Your RSS Reader

2014-08-11_212408

然後把剛剛拿到的Full-Text RSS網址加入到你的RSS閱讀器,像是Feedly (可惜沒有Google Reader了),這樣就可以了。


結語:不太對的回饋 / Conclusion: Missing Feedback

github

Full-Text RSS網站服務又是一個受惠於開放原始碼的例子。我從FiveFilters.org取得了full-text-rss,然後改造之後再到GitHub去發佈,現在寫一篇Blog介紹這怎麼使用。取之開放原始碼,回饋於開放原始碼,嗯?好像哪裡怪怪的?

是的,其實Git版本控制在團隊合作之間一般是使用Fork建立自己的分支專案,然後用Pull Requests來請求原作者看一下我改過的程式碼,以回饋給原作者。這部分doggy有比較詳細的介紹:了解 GitHub 的 fork 與 pull request 版控流程

可惜當初我還不知道Fork這個很重要的功能,所以到現在也就獨立發展了。以後會乖乖Fork專案,好好回饋給作者的啦。

(more...)

論文獲得了「The Electronic Library 2013 Highly Commended Paper Award」 / Receving The Electronic Library 2013 Highly Commended Paper Award

論文獲得了「The Electronic Library 2013 Highly Commended Paper Award」 / Receving The Electronic Library 2013 Highly Commended Paper Award

20131225-pudding-2-0003

陳志銘老師、其他老師以及我在內大家合力在2012年發表的論文「基於臺灣百年圖書館史DSpace平台發展讀者知識典藏與分享機制」獲得了Emerald出版社底下The Electronic Library期刊的高度推薦論文獎

My teacher, Prof. Chih-Ming Chen, other teachers and I published a paper “Developing a Taiwan library history digital library with reader knowledge archiving and sharing mechanisms based on the DSpace platform” in 2012. And we got “The Electronic Library 2013 Highly Commended Paper Award” this year.


獲獎經過 / Receiving the Award

今年5月的時候,我收到來自Emerald Literati Network的得獎通知信件。那時候我還在想說,文章審查意見的事情主要是先由老師決定如何處理,而忽略這封信。隔幾天老師跟我報喜,我發現原來是這是獲獎通知。

信中還寫到有機會可以到國外研討會去領獎,我還挺興奮的,可惜後來並沒有如期成行。最後只有將獎狀寄出,大概12月才收到這張獎狀,就是文章開頭的那張圖片。

最後記錄一下得獎的網頁:

獲獎論文 / Awarded Paper

elcover

獲獎的論文原文是「Developing a Taiwan library history digital library with reader knowledge archiving and sharing mechanisms based on the DSpace platform」,完整的APA引用文獻是:

Chen, C.-M., Chen, Y.-T., Hong, C.-M., Liao, C.-W., & Huang, C.-M. (2012). Developing a Taiwan library history digital library with reader knowledge archiving and sharing mechanisms based on the DSpace platform. Electronic Library, The, 30(3), 426–442. doi:10.1108/02640471211241681

文章網址:

摘要 / Abstact

image

研究目的 / Purpose

本研究係在台灣圖書館史數位圖書館中,發展一基於Web 2.0技術、可在HTML網頁進行標註的閱讀標註與知識分享工具。

研究方法 / Design/methodology/approach

本研究調整了DSpace──一個開放原始碼的機構典藏系統──以此建置臺灣百年圖書館史數位圖書館,並加上讀者標註工具以支援讀者知識典藏與分享機制。本研究採用準實驗研究設計,將受試者隨機分成實驗組與控制組,以該系統進行閱讀學習並評估閱讀理解成效。統計分析顯示使用閱讀標註工具的實驗組學習成效明顯較高。

研究結果 / Findings

本研究發現具閱讀標註之數位文本提供讀者有用的知識。標註的價值在於可以輔助讀者獲取深度知識與進行有效閱讀。此外,對於數位圖書館來說,數位圖書館的內容也可以隨著讀者知識典藏而動態成長。更重要的是,來自不同讀者的標註資訊將有高度潛力,可以利用資料探勘技術進行更進一步的知識加值探勘。

研究價值 / Originality/value

在圖書資訊學領域中,蒐集讀者產生的內容是一種嶄新的研究議題,而且鮮少研究發展出有效的工具以支援讀者在數位圖書館中貢獻他們的知識。本研究描述了如何實作此數位圖書館系統以及如何利用標註工具促進數位典藏的成長,並影響讀者學習成效的提昇。

系統平台 / Platform

THL Project

論文提到的系統還可以使用喔:

關於百年圖書館史,可以參考我之前的「臺灣百年圖書館史」介紹。本系統在今年被我轉移到OpenVZ上,現在是以虛擬機器的形式在運作。不過這是我早期使用DSpace的系統,所以很容易當機。如果有問題的話可以在下面反應一下。


小結:得獎不敢居功 / Can't Take The Credit for This Award

這篇論文能得獎,還是得歸功於老師們,我主要做的只有系統功能的結合而已。能跟老師們沾點光,我就覺得很幸運了。在此僅是推銷一下這篇論文的內容與系統,做個記錄而已。

不過,未來我還是希望能靠自己的寫作來得獎,到時候才能夠真的抬頭挺胸地跟大家分享這份驕傲吧。

(more...)

EMAIL-KM介紹 / EMAIL-KM Introduction

EMAIL-KM介紹 / EMAIL-KM Introduction

image

這學期電子文件管理專題期末報告,我製作了一個典藏電子郵件與整合知識管理的系統,稱之為EMAIL-KM。以下是EMAIL-KM的介紹。

For completing the final report of “Electronic Records Management Project”, I developed a web system used for archiving email and knowledge management. This system is named “EMAIL-KM”. Following is the introduce of EMAIL-KM.


EMAIL-KM操作投影片/ A Slide About EMAIL-KM Operation

為了方便說明,我做了一份投影片,簡單介紹EMAIL-KM的主要寄信功能。

檔案:Google 雲端硬碟Box.netSkyDrive

第一節 系統開發 / System Development

為了降低架設的門檻,EMAIL-KM選用的工具皆為開放原始碼軟體與免費服務。WordPress是著名的部落格管理系統之一,架設環境僅需在低階電腦配置PHP運作環境MySQL資料庫,而且WordPress擁有親切好用的操作介面以及數量驚人的外掛功能(包括了電子郵件接收器)等特色,這些都是本研究選擇WordPress的原因。為了統計系統使用狀況,本研究額外加入了Google分析的功能到EMAIL-KM中,以記錄造訪次數與人數等資訊。

秉持學術交流的精神,EMAIL-KM以開放原始碼的形式公布在GitHub中。任何人皆可從「https://github.com/pulipulichen/email-km」網址中下載本研究開發的EMAIL-KM來自行使用。此外,功能使用上有任何問題也請不吝多多指教。

不過必須說明的是,由於資料不便公開,GitHub上開放的只有程式碼與資料庫schema,並沒有涵括資料庫的內容資料。直接複製程式碼來安裝的話可能會有些問題。

第二節 系統架構 / System Architecture

EMAIL-KM的系統主要是以WordPress (WordPress Taiwan, 2013)為基礎建置而成的知識管理系統,其中內建電子郵件接收者(Mail Receiver)的外掛(Allen, 2013),再搭配免費使用的Gmail電子郵件伺服器服務而成。整體架構如圖 2所示,以下將以電子郵件典藏與知識管理系統兩種角度來介紹EMAIL-KM的運作方式:

image

2 EMAIL-KM系統架構圖

一、電子郵件典藏的運作方式 / The Process of Archiving Email

EMAIL-KM依賴Gmail接收、暫存要典藏的電子郵件,然後電子郵件接收者會定期向Gmail接收郵件,並典藏在EMAIL-KM的資料庫(Database)之中成為一篇一篇的文章(Post)。Gmail是免費的電子郵件服務,只要申請一個專用的電子郵件地址即可與EMAIL-KM搭配使用。電子郵件地址通常是以gmail.com結尾,以下以「email.km@gmail.com」為例。

為了確保資料不會遭受垃圾郵件的入侵,僅有EMAIL-KM的註冊成員才能使用電子郵件典藏的功能。因此使用者要典藏電子郵件時,必須先確認使用者的電子郵件地址登錄在EMAIL-KM中。再來只需要將「email.km@gmail.com」加入收件者中,並加上分類標籤的描述,電子郵件的主旨、訊息與附件內容就能夠順利地納入EMAIL-KM中典藏。

電子郵件典藏的詳細操作步驟將會於後面小節詳述。

二、知識管理系統的運作方式 / The Knowledge Management System With Archived Email

將典藏的電子郵件保存到資料庫之後,EMAIL-KM就能搭配資料庫中的團隊成員帳號與系統功能,提供搜尋、取用與其他應用的服務。為了避免敏感資訊外洩,EMAIL-KM預設僅能由註冊的使用者登入。

使用者可以透過網頁瀏覽器開啟本研究架設的EMAIL-KM來使用EMAIL-KM的功能,方便地查找典藏在EMAIL-KM中的電子郵件資料,並在EMAIL-KM上進行社群互動。使用者也能夠在EMAIL-KM上直接建立文件資與管理已典藏的電子郵件。

知識管理系統的詳細操作步驟將會於後面小節詳述。

第三節 電子郵件典藏操作步驟 / Operation of Archiving Email

一、寄送典藏的電子郵件 / Send Email To Archive

當使用者要將電子郵件典藏在EMAIL-KM時,就要在收件者加入EMAIL-KM的電子郵件地址「email.km@gmail.com」。郵件的主旨與訊息將會是EMAIL-KM中文章的標題與內文。而附件也會保存在EMAIL中,成為文章的附件。圖 3是使用Gmail寄送電子郵件同時欲將之典藏在EMAIL-KM的示意圖。

3

3 電子郵件典藏操作示意圖:加入email.km@gmail.com

EMAIL-KM支援兩種分類架構方式。第一種「分類」是前分類設計,由主要管理者制定出預設好的層級分類架構;第二種「關鍵字」則是後分類設計,由使用者自由建立、選擇欲描述此封電子郵件的關鍵字,可建立屬於使用者自己的分類架構。兩種分類架構在EMAIL-KM的瀏覽介面略有不同,後續小節會有詳細介紹。

二、在典藏電子郵件時加上分類與關鍵字 / Add Catelog And Keyword Within Email

在典藏電子郵件時,使用者即可在郵件的主旨直接加入分類與關鍵字,以利典藏進EMAIL-KM之後的後續管理。以圖 3中的郵件為例,該郵件的主旨為「[網管專區] EMAIL-KM研究團隊知識管理方案 #email-km」,即同時使用了分類與關鍵字。分類是在郵件主旨開頭加入以中括號「[ ]」包覆的分類名稱,此例中即為「[網管專區]」,意思是將此封電子郵件分類到「網管專區」;關鍵字則是在郵件主旨末端加入以井字號「#」開頭的關鍵字名稱,此例中即為「#email-km」,意思是將此封電子郵件加上關鍵字「email-km」。分類語法的設計是基於臺灣電子佈告欄(BBS)中常用的分類表現方式,而關鍵字語法的設計則是參考Twritter的標籤機制(hashtag)來表現。(Efron, 2010)

本研究在電子郵件主旨加入分類與關鍵字的機制,不僅讓使用者容易在寄送時即可為電子郵件進行分類描述,其他收件者也希望將回信典藏到EMAIL-KM時,也會因為採用相同主旨而會擁有相同的分類架構,以確保相關的電子郵件將會置於同一分類或擁有相同的關鍵字。

三、典藏在EMAIL-KM中的電子郵件 / Archiving Email

EMAIL-KM的電子郵件接收者會在每1小時自動向Gmail收取郵件,使用者也可以手動操作「手動收信」功能以要求電子郵件接收者立即檢查Gmail。電子郵件接收者只會接收由EMAIL-KM註冊使用者的電子郵件地址寄出的郵件,然後將電子郵件內容轉換成EMAIL-KM文章的格式,並將文章的作者設為典藏該電子郵件的使用者帳號。接著電子郵件接收者會刪除所有Gmail上的郵件,以確保Gmail空間不會持續累積信件而無法運作。

圖 4是EMAIL-KM典藏來自圖 3寄送的電子郵件的結果示意圖。

4

4 電子郵件典藏在EMAIL-KM示意圖

第三節 知識管理系統操作步驟 / Operation of Knowledge Management System

一、登入EMAIL-KM / Login to EMAIL-KM

EMAIL-KM的設計是供研發團隊使用的知識管理系統,因此內容資訊是不公開的,使用者要操作任何步驟都必須先進行登入。EMAIL-KM也不允許外來使用者任意註冊,必須由擁有權限的系統管理者幫新進成員新增帳號。圖 5是EMAIL-KM的登入介面,使用者必須在帳號與密碼輸入正確的資訊,才能登入進到EMAIL-KM當中,並看到圖 6的畫面。

5

5 EMAIL-KM登入介面

6

6 登入EMAIL-KM之後的首頁

二、搜尋文章內容 / Search Archived Email

EMAIL-KM右上角有一個「Search」的搜尋框,使用者可以在此輸入欲搜尋的關鍵字(不一定是分類架構中的關鍵字),EMAIL-KM就會搜尋文章的標題、內文與附件檔案的名稱,再將找到的文章彙整成一搜尋結果列表呈現給使用者,並標亮使用者欲搜尋的關鍵字。圖 7即是在EMAIL-KM中搜尋「KALS」的搜尋結果呈現畫面。由於系統限制的關係,目前並不支援附件檔案內容的全文檢索功能。

7

7 EMAIL-KM搜尋KALS的搜尋結果

三、瀏覽最近典藏的文章 / Browse Recent Emails

登入EMAIL-KM之後即會看到最近典藏進EMAIL-KM的電子郵件以文章列表的方式呈現,如圖 6所示。由於EMAIL-KM是基於部落格管理系統WordPress開發而成,因此在此繼承部落格的特性,首頁即列出最新的文章內容。

四、依照分類架構瀏覽文章 / Browse Architecture

在EMAIL-KM的右上角有四個連結,其中前三個是EMAIL-KM的分類架構。包括「個人專區」、「知識地圖」與「關鍵字」。

(一)個人專區 / Personal

個人專區是以群組分類使用者帳號,可直接查詢該使用者在EMAIL-KM典藏(或說是發表)的所有文章。進入個人專區之後會看到圖 8的群組目錄。點選任一群組後會跳到該群組的位置,並顯示該群組的使用者列表,如圖 9所示。點入任一使用者之後,EMAIL-KM即會展現該使用者發表過的所有文章。圖 10為使用者「布丁」在EMAIL-KM發表過的文章列表。

8

8 個人專區目錄中的群組目錄

9

9 個人專區中該群組中的使用者帳號列表

10

10 使用者「布丁」的文章列表

(二)知識地圖 / Catelog

知識地圖是分類的瀏覽頁面。知識地圖會先描繪出分類的層級關係、計算每個分類的文章數量,再列出該分類底下最新的五篇文章。進入知識地圖之後會看到圖 11的分類層級,包含分類的名稱與分類底下的文章數量。點入任一分類之後,會看到該分類底下的最新五篇文章,如圖 12所示。點入該分類之後,分類底下的文章就會以文章列表的方式呈現。圖 13即是MIS GROUP MEETING分類底下的文章列表。

11

11 知識地圖的分類層級

12

12 分類底下的最新五篇文章

13

13 MIS GROUP MEETING分類底下的文章列表

(三)關鍵字 / Keyword

關鍵字則能依照關鍵字瀏覽文章。進入關鍵字頁面之後,會先看到如圖 14所示的關鍵字列表。關鍵字並沒有上下層級的區隔,只是依照字母順序排列,並附加統計具有關鍵字的文章數量。點選進入任一關鍵字後,可以看到具有該關鍵字的最新五篇文章,如圖 15。再點入該關鍵字後,即可以但具有該關鍵字的文章列表。圖 16即是EMAIL-KM中具有「中文斷詞」關鍵字的所有文章列表。

14

14 關鍵字列表

15

15 關鍵字與最新的五篇文章

16

16 具有「中文斷詞」關鍵字的文章列表

五、訂閱最新文章 / Subscribe to Latest Archived Email

為了促進團隊成員間的資訊交流,EMAIL-KM提供電子郵件訂閱功能。只要成員輸入他的電子郵件地址(輸入位置如圖 17所示),當EMAIL-KM典藏了新的電子郵件,或是有使用者發表新的文章時,就會立即通知訂閱的使用者。

17

17 訂閱最新文章功能位置示意圖


結論:在日常業務中進行研究 / Do Research On Regular Business

期中的時候,老師問我們修課的學生期末報告的題目。大部分的人都仍在摸索、嘗試聚焦在某個題目上,想藉由文獻整理來做一份報告。我則是回答:「我做了一個系統。」

為了改善我日常生活遇到的問題,我已經很習慣著手去做些東西,來讓我與周遭的人工作起來更便利。不僅僅是這個EMAIL-KM,我在Blog中聊到的DSpaceGLPIZentyal等等,都是我覺得可以為大家做些什麼而去修改的經歷。

修改之後,有些人會覺得系統更好用了。也有些人會認為,系統還有很多不夠的地方,未來仍需要繼續去修改。在我投入心力去撰寫程式碼以及大家的回饋意見之間,我在想,是不是有可能在這邊進行研究呢?

能投到國際期刊的高水準研究是我們追求的目標沒錯,但是對於日常業務的改進,我想應該也是可以用做研究的心態來進行,並試著在開發、改善與回饋的過程中,將成果分享給大家。一起讓這世界變得更好吧。加油。

(more...)