:::

Docker到底哪裡比OpenVZ好? / Why Docker is better than OpenVZ?

Docker到底哪裡比OpenVZ好? / Why Docker is better than OpenVZ?

image

要說近年來虛擬化的革命性技術,大家都會講說是Docker,但是OpenVZ卻被遺忘在歷史的洪流中。由於Proxmox VE的緣故,我很常使用OpenVZ容器虛擬化技術。到底Docker是哪裡比較好呢?以下就讓我姑且做個簡單的比較吧。


Docker的入門手冊 / Guide to Docker

同樣是使用Container容器虛擬化技術,每次看到Docker 的熱門程度大幅度超越OpenVZ的時候,作為OpenVZ愛用者的我總是百感交集。最近利用Google Book看了一下GitBook中的《Docker —— 從入門到實踐­》,赫然發現……Docker真的很厲害,竟然把我想要實作的功能都內建了!

image

Docker到底哪裡好? / Advantages of Docker

跟我很熟的人應該都常常在聽我講OpenVZ的優點,主要是全虛擬機器封裝、運作快速等等。Docker作為OpenVZ的後起之輩,同樣採用容器虛擬化技術,但是在運作效率、資料管理、網路管理與映像檔發布上又有更好的作法:

效率部分 / System Efficiency

OpenVZ跟Docker採同樣的技術,但Docker在運作APP(不是手機的APP)時,只會啟動相關的process,因此資源消耗更低。細節請看5.1. 啟動

資料管理 / Data Management

OpenVZ是完整封裝一個虛擬機器,但Docker則是將一個虛擬機器拆分成多個層次:映像檔(包含作業系統)、資料卷或資料卷容器(存放設定檔與運作資料)。因此可以架設多個虛擬機器,但是存取同樣的資料卷,以達到分散式運作的架構。細節請看7.2. 資料卷容器

從這篇建置MongoDB Docker虛擬機器的教學來看,甚至連文件型資料庫(大多數關聯式資料庫都是文件型)的資料庫檔案都可以掛載在資料卷上。這個意思是說可以取代資料庫的高可用架構HA了嗎?

我現在在OpenVZ上使用NFS掛載,並另外架設資料庫HA,但是操作順序比較複雜,不是很好用。

網路管理 / Network Management

Docker內建連接埠轉遞的功能,細節請看9.4. 端口映射實作。雖然後來Proxmox VE也把連接埠轉遞做到Firewall裡面,但操作上仍比較麻煩。

我現在是架設Zentyal路由器來控制連接埠轉遞。優點是可以加上Pound實作反向代理伺服器,這就是Docker無法匹敵的功能了。

映像檔發佈與保存庫(倉庫) / Publish Image & Repository

Docker採用git版本控制技術來發布影像檔,官方也有Docker Hub集中保存的倉庫,細節請看 6. 倉庫。相較之下,OpenVZ的虛擬應用範本只能在論壇中自行貼上連結,連上傳空間都要自己想辦法。就算一個OpenVZ的虛擬應用範本只要200MB左右,要找地方擺放也是個麻煩。更何況版本一修改就要重新打包上傳,非常麻煩啊!

Docker的其他資源 / Resource for Docker

Docker的網頁圖形化管理介面:Panamax / Web GUI Management Tool for Docker: Panamax

marketing_screen_03_big

以前我會嫌Docker都要用指令來操作,還是很不成熟。就算CoreOS多穩定,也不能解決管理上的問題。但是現在已經出現像是Panamax這樣子的網頁管理工具,可以免去學習指令操作的學習曲線。

在Windows上運作Docker:Boot2Docker / Run Docker in Windows: Boot2Docker

0Z13V137-2

就連Windows上也可以直接運作Docker了,運作一個Docker只要佔用27MB的記憶體,並且只需要5秒就能起動,詳細請看這篇Boot2Docker的說明,或直接到Boot2docker專案首頁下載。


結語 / Conclusion

因此越看越覺得Docker真是令人心動,是不是該來裝個Core OS搭配網頁管理介面Panamax來玩玩看Docker呢?

備註:這篇本來只是想在Facebook上隨便寫寫,可是想說心得文應該寫在Blogger中,所以改用Android上的Blogger APP撰寫草稿,沒想到越寫越長。草稿打完之後改到電腦上用Windows Live Writer來撰寫,加了大量的鏈結與圖片,就變成這一篇一千多字的心得隨筆。根據以上經驗所獲得的結論是:還是用Evernote來寫比較好,Blogger的APP並不是一個稱職的豐富文本(Rich-text)編輯器啊。

(more...)

行為編碼與序列分析 / Introduction of Behavior Coding and Sequential Analysis

行為編碼與序列分析 / Introduction of Behavior Coding and Sequential Analysis

image

這是我在今年六月時應台科大高老師的邀約,到她實驗室跟同學介紹數位學習中質性行為的編碼、編碼者一致性信度計算以及序列分析的原理。以下分享投影片與相關工具給大家使用。


什麼是序列分析? / What’s Sequential Analysis

image

序列分析,或說是行為序列分析(Behavior Sequential Analysis)是將研究對象的行為資料進行編碼,並以二項式檢定(bionomial distribution)計算編碼與編碼之間的轉換是否有達到顯著性的一種方法。

必須先聲明的是,本篇在講的是行為序列分析,跟統計的時間序列分析 (Time Series Forecasting Method) 以及資料探勘的循序樣式分析(Sequential Pattern Mining)是不同的方法喔。雖然名稱很像,但是計算方式有很大的不同,請不要搞錯了。


投影片 / Slide

下載:Google DriveOneDriveMegaSlideShare

這份投影片算是之前序列分析簡介中投影片的完整版本。原本的投影片只有介紹後面的序列分析,這次連前面的行為編碼也一併介紹了。

相關工具 / Tools

投影片中會使用到一些工具。質性行為編碼的工具包括:

編碼 階段 運作
1 定義問題 具體描繪問題或釐清問題的定義
2 尋求解決方法 針對問題提供(詳細/簡略的)資訊或解決方法
3 分析與歸納 分析、比較與評論他人提出的意見、解決方法以及資訊
4 統整與結論 歸納先前的提議或意 見,並提出結論
5 其他 與主題無關的討論

序列分析會使用到的工具包括:

一般化序列查詢器 / GSEQ

GSEQ5big

除了以上我自己開發的工具之外,序列分析的作者Bakeman等人也開發了專門做序列分析的工具:Generalized Sequential Querier。現在已經是免費下載了:

我的工具畢竟還不算是十分完美,只能說是入門基本款而已,有些Bug到現在也還沒有時間好好研究。未來應該要更深入來研究GSEQ的使用才對。


結語:結合質性與量化的研究方法 / Conclusion: The mixed research method of qualitative and quantitative

一般都認為質性研究跟量化研究是水火不容的兩種方法。這是由於兩種方法所站的哲學角度是有所不同:質性研究是基於社會建構論(social constructionism),認為這個世界是由獨立的個體組成,每個人都是獨一無二,世界是由微觀的行為與鉅觀的社會脈絡所建構而成;量化研究相信實證主義(positivism),認為這個世界一定存在唯一不變的真理,而我們可以利用取樣來由小見大。

而序列分析則是將這種兩者方法結合在一起:我們記錄質性的行為資料,然後進行編碼分析,再來使用量化的推論統計來解釋行為序列的轉換。一般的質性研究大概十人上下各30分鐘的訪談就是一篇碩士論文,但是數位學習的序列分析通常是取兩個班級、共約60人左右,而且是做兩個小時以上的行為觀察。一般的量化研究通常是跑獨立樣本t檢定(兩組平均數比較)、變異數分析(三組以上的平均數比較)、共變數分析(考量前測的平均數比較)、皮爾森相關係數分析,但是序列分析則是使用二項式檢定 (其實統計課都會教,沒印象的人回去跟統計老師道歉) 。不管是從質性研究還是量化研究的角度來看,序列分析要做得事情都不比前兩種還少。

由於序列分析工具做起來很簡單,我本來以為兩個小時就能講完序列分析的內涵。結果講到最後竟然用了快三個半小時,越講越覺得序列分析真是博大精深。不過序列分析依然有其侷限:只能呈現行為之間的轉換,而非建模。在研究分析上應結合其他方法一起應用。

話說回來,從哲學觀點來看,序列分析其實比較偏向量化研究,也就就是實證主義的哲學觀點。因為他是希望從大量資料中歸納出具有推論性的結論。就這個就觀點來看,如果分析質性資料的時候腦袋裡面還想著「在受訪對象中有一半人都發生這樣的行為」,那其實這是一種量化研究的思維,而不是質性研究喔。很多人都以為做訪談就是質性研究、問卷就是量化研究,其實並非如此,有必要跟大家釐清一下。

總之經過這次的歷練,如果下次還有誰想要認識序列分析的話,歡迎來找我去介紹。預計下次就會再加入GSEQ的介紹了吧XD

(more...)

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

image

傳統的關聯式資料庫PostgreSQL一般而言都是裝在本機端上運作,但是搭配了pgpool中介工具,就能夠串聯多臺PostgreSQL伺服器,以達到高可用(High Available)的架構。我將pgpool與PosgreSQL的高可用架構做成了兩臺虛擬應用範本pgpool-master跟pgpool-slave提供大家下載,並說明擴充的方法。


什麼是pgpool? / What is pgpool?

pgpool是PostgreSQL的中介工具(middleware),現在的版本為pgpool-II,所以軟體名稱通常是pgpool2,以下內容翻譯自pgpool Wiki

pgpool-II採BSD開放原始碼授權,提供了以下功能:

  • 資料庫連線池管理(Connection Pooling):pgpool-II保存連線到PostgreSQL伺服器的連線,當同樣設定的人進行連線時,就拿以保存的連線來使用。這可以降低資料庫連線的額外負擔(overhead),並且改善系統整體效能。(布丁註:早期我在DSpace上使用Proxool也是同樣的目的)
  • 資料複製(replication):pgpool-II可以管理多個PostgreSQL伺服器。使用複製功能,可以即時將資料備份在2個或更多的實體硬碟中,如此一來即使硬碟損毀,伺服器仍然可以繼續提供服務。
  • 負載平衡(Load Balancing):當資料複製功能開啟時,在任何伺服器上執行SELECT查詢時的會獲得同樣地結果。pgpool-II將SELECT查詢分散到多個PostgreSQL伺服器上,以改進整體的效能。PostgreSQL伺服器的數量越多,效能提升的幅度越多。負載平衡特別適用於很多使用者同時執行大量查詢的時候。
  • 限制超量的資料庫連線:PostgreSQL會限制最大同時連線數量,超量的連線將會被拒絕。調整資料庫連線上限會增加資源消耗量,並影響系統效能。pgpool-II也可以設定連線數量的上限,而超過的連線將會列入等待,而不會立即回傳錯誤
  • 並行查詢(Parallel Query):使用並行查詢功能,查詢本身會切割成多個部分,並同時在多臺伺服器上同時進行查詢、取回資料、並進行合併,以此降低整體執行的時間。(布丁註:類似RAID-0的概念) 並行查詢的功能最適合用在查詢大規模的資料上。

pgpool-II將PostgreSQL伺服器作為後端與前端的通訊接口,並仰賴與伺服器之間的連線。因此,資料庫應用程式(前端,意思是網站)會將pgpool-II視為一臺PostgreSQL伺服器,而資料庫伺服器(後端)則會視pgpool-II為它的客戶端。因為pgpool-II對伺服器與客戶端來說都是透明的,因此既有的資料庫應用程式(網站)可以直接使用pgpool-II而幾乎不需要更改設定。(布丁註:通常修改連接埠即可)

(我翻譯完才發現pgpool有中文wiki…)

pgpool-II的配置 / Configuring pgpool-II

pgpool有很多模式,每一種模式都會啟用或關閉部分功能,詳細的設定一般會位於 /etc/pgpool.conf 與 /etc/pcp.conf。讓我們來看看pgpool的四種模式:

功能/模式 原始模式(*3) 複製模式 主/備模式 並行查詢模式
連接池管理 X O O O
資料複製 X O X (*1)
負載平衡 X O O (*1)
故障恢復 O O O X
線上恢復 X O (*2) X
並行查詢 X X X O
需要伺服器數量 1 或更多 2 或更多 2 或更多 2 或更多
是否需要系統資料庫
  • O表示可用、X表示不可用。
  • *1 並行模式需要同時打開複製與負載平衡的設定,但是複製和負載平衡無法用於並行查詢模式中的分佈式表。
  • *2 線上恢復可以和串流複製同時使用。
  • *3 客戶端僅是透過pgpool-II連接到PostgreSQL伺服器。這種模式僅用於限制連到伺服器的連接數,或著在多臺機器上啟用故障恢復的功能。

本文主要的目標在於第二種模式:複製模式。以下大致上說明安裝的過程,至於結果請直接用虛擬應用範本就好了。

安裝pgpool-II / Install pgpool-II

我以Turunkey Linux的PostgreSQL虛擬應用範本為基礎,以apt-get安裝pgpool2,然後修改配置後完成。大致做法如下:

  1. 下載Turnkey Linux Postgresql:這個虛擬應用範本做得很貼心,安裝完成之後可以自動提示設定PostgreSQL預設帳號postgres的密碼,使用https連線就會開啟phpPgAdmin
  2. 從虛擬應用範本建立虛擬機器:做法請看我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器。建立的虛擬機器有兩臺,各別是pgpool-master與pgpool-slave。以下步驟大部分都會在這兩台上進行。這兩台伺服器的IP為:
    1. pgpool-master: 192.168.11.110
    2. pgpool-slave: 192.168.11.111
  3. 啟動Turnkey Linux Postgresql:Turnkey Linux的虛擬應用範本啟動時都要先進行初始化,大概要花10分鐘的時間。
  4. 安裝pgpool2:安裝指令為:
    apt-get install –y pgpool2
  5. 設定伺服器之間SSH的連線:
    1. 先設定postgres帳號的密碼:
      passwd postgres
      設定密碼為: password
    2. 切換到posgresql帳號:
      su postgres
    3. 在pgpool-master電腦上建立ssh金鑰:
      ssk-keygen
      當詢問passphrase的時候,直接enter就好了,不設定passphrase。
      image
    4. 複製金鑰到pgpool-slave:
      ssh-copy-id postgres@192.168.11.111
      詢問密碼時,輸入剛剛設定postgres的密碼:password
      image
  6. 設定PostgreSQL的連線權限:
    1. 修改/etc/postgresql/9.1/main/pg_hba.conf ,注意,路徑可能會因為PostgreSQL的版本而有所不同,我用的是9.1版本。
    2. 將METHOD中使用peer與md5的登入方式全部改成password。例如:
      host    all         all         0.0.0.0/0             password #md5
      image
  7. 設定 /etc/pgpool2/pcp.conf
    image
    1. 建立要連線帳號的md5密碼,我們用預設帳號postgres來做這件事情:
      pg_md5 postgres –p
    2. 輸入密碼,我建立公開範本的統一密碼都是password
    3. 取得md5編碼:「88e2d8cd1e92fd5544c8621508cd706b」
    4. 連同帳號組成「postgres:88e2d8cd1e92fd5544c8621508cd706b」,加到 /etc/pgpool2/pcp.conf最後一行
  8. 調整 /etc/pgpool2/pgpool.conf 基本設定:
    1. listen_addresses = '*' # 表示可讓任何其他伺服器連線到pgpool。
    2. replication_mode = on  # 啟用資料複製
    3. load_balance_mode = on # 啟用負載平衡
  9. 調整 /etc/pgpool2/pgpool.conf 連接PostgreSQL伺服器的設定,backend_hostname1就是pgpool-slave:
    backend_hostname1 = 'localhost'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_hostname1 = '192.168.11.111'
    backend_port1 = 5432
    backend_weight1 = 1

    image
  10. 修改phpPgAdmin的連接埠設定 /etc/phppgadmin/config.inc.php:
    $conf['servers'][0]['port'] = 5433;
    這樣phppgadmin就會連到pgpool,而不是原本的PostgreSQL。
  11. 重新啟動pgpool-II跟PostgreSQL:
    service pgpool2 restart
    service pgpool2 postgresql
  12. 開啟phpPgAdmin看看成果:
    https://192.168.11.110
    image
    這個網址應該可以打開phpPgAdmin,然後請用postgres / password來登入。登入之後的任何操作都會在pgpool-master跟pgpool-slave上生效。這就代表成功了。

安裝pgpoolAdmin / Install pgpoolAdmin

pgpoolAdmin是用來管理pgpool-II的PHP網頁管理工具。我們可以用它來快速確認pgpool是否正常運作。安裝方法參考自Aric Gardner的PGPOOL-II-ADMIN安裝教學。我把pgpoolAdmin跟phpPgAdmin結合,大致上步驟如下:

  1. 下載pgpoolAdmin:
  2. 解壓縮後,更改目錄名為admin-tool
  3. 修改擁有者為root
    chown -R root admin-tool
  4. 修改目錄與檔案為777
    chmod 777 templates_c
    chmod 777 conf/pgmgt.conf.php
  5. 放置到phpPgAdmin的網頁目錄:/usr/share/phppgadmin/admin-tool/
  6. 開啟網頁 https://192.168.11.110/admin-tool/install,按照指示設定。主要設定包括了
    1. 修改以下目錄與檔案的修改為777 (使用chmod)
      1. /etc/pgpool2/pcp.conf
      2. /etc/pgpool2//etc/pgpool2/pgpool.conf
    2. pgpool.conf File (string): /etc/pgpool2/pgpool.conf
    3. Password File (string): /etc/pgpool2/pcp.conf
    4. pgpool Command (string): /usr/sbin/pgpool
    5. PCP Directory (string): /usr/sbin/
  7. 設定完成後,刪除install資料夾
    rm -rf /usr/share/phppgadmin/admin-tool/install/

開啟網頁:https://192.168.11.110/admin-tool/status.php

image

設定完成。


下載pgpool虛擬應用範本 / Download pgpool Virtual Application Template

經過以上漫長的安裝過程之後,最後成果就是pgpool-master跟pgpool-slave這兩個虛擬應用範本啦。

建立虛擬應用範本的方法請參考我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器

image

建置好之後,設定啟動,預設就是這兩台伺服器的PostgreSQL高可用架構。


pgpool虛擬應用範本操作教學 / pgpool Virtual Application Guide

接下來我要說明使用教學。在以下教學中的網路設定如下:

  • pgpool-master: 192.168.11.110 (主要操作都在這進行)
  • pgpool-slave:192.168.11.111
  • pgpool-slave2 (複製pgpool-slave):192.168.11.112
如何操作pgpool?

請使用phpPgAdmin來操作pgpool,操作方式就跟原本操作PostgreSQL一樣!

image

網址是: https://[pgpool-master-ip]/

如何觀看pgpool的運作狀況?

請使用pgpoolAdmin,網址是:https://[pgpool-master-ip]/admin-tool/

image

如何連接到pgpool? / How to connect to pgpool?

很簡單,使用原本連接到PostgreSQL的設定方式,連線到pgpool-master,然後連接埠改成5433就可以了。(PostgreSQL預設連接埠為5432)

CodeIgnitor的資料庫連線設定來舉例,

原本的設定可能是連線到localhost本機端:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";

現在要改成連線到pgpool-master (假設IP為192.168.11.110),而且要指定連接埠為5433:
$db['default']['hostname'] = "192.168.11.110";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";
$db['default']['port'] = 5433;

如何增加pgpool的數量? / How to extend pgpool structure?

首先,我們要再建置一臺pgpool-slave,設定為pgpool-slave2,設定網路位址為192.168.11.112

2015-06-20_000510

然後來到pgpool-master上,修改 /etc/pgpool2/pgpool.conf。加入以下設定:(因為是第三臺,所以編號為2,下一臺編號就是3,依此類推)
backend_hostname2 = '192.168.11.112'
backend_port2 = 5432
backend_weight2 = 1

重新啟動pgpool:
service pgpool2 restart

從pgpoolAdmin來看,pgpool-slave2已經加入節點中。

image

有其他問題怎麼辦? / Other Questions

請使用Blogger的「張貼留言」來描述您的問題。


結論 / Conclusion

其實最近我連續做了很多個OpenVZ的虛擬應用範本,可是大部分是做給實驗室內部使用的,因此還沒能花時間轉換成可以發佈的版本。老實說,用OpenVZ製作虛擬應用範本有點麻煩。即使我用了Turnkey Linux來製作虛擬機器,可是檔案還是有200MB以上,要找到空間擺放,實在是不太容易。而且如果我要修改一個檔案,那就要重新打包、上傳,這樣子維護虛擬應用範本實在是太沒有效率。

OpenVZ虛擬應用範本在更新上實在很麻煩,因此我開始關注起Docker的倉庫運作方式。不知道這個倉庫的運作方不方便使用?

(more...)

Windows Live Writer可以連線Blogger了 / WLW connecting Blogger problem was solved

布丁布丁吃布丁

Windows Live Writer可以連線Blogger了 / WLW connecting Blogger problem was solved

image

最近令人開心的消息很多,其中一項就是Blogger Support Team的Nick修復了Windows Live Writer連接Blogger的問題

image

而且之前說的Blog密碼錯誤的問題(Google帳戶不允許安全性較低的應用程式存取權限)也一併修復了!就算是像上圖一樣保持關閉的情況,也能夠正常發文了。

各位WLW的災友們,可以回來繼續寫Blog囉。

2015-05-27_21-10-47

永別了,「Blogger傳回下列錯誤: NotFound: Not Found」,我希望再也不要看到你了啊。

(more...)

編碼結果轉序列編碼工具 / Coding Result to Sequence Convertor

編碼結果轉序列編碼工具 / Coding Result to Sequence Convertor

image

這一篇是為編碼結果與序列分析工具之間的資料轉換工具。因為我們通常都是用Google試算表或是Excel類型的工具來做編碼,可是序列分析工具卻輸入需要一連串的文字,因此我製作一個轉換工具來介接兩者。


操作方法 / Usage Guide

  1. 在Google試算表(Sheet)或是Excel上選取要轉換的編碼結果。如下圖:
    image
  2. 貼在下面的「coding result」表單欄位中。
    image
  3. 按下「Convert」按鈕,轉換結果就會出現在「coding sequence」欄位中。
    image

(more...)

編碼者間一致性信度: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...)

Ubuntu中如何用腳本檔新增/etc/hosts設定 / How to write a script for adding hostname to /etc/hosts in Ubuntu

Ubuntu中如何用腳本檔新增/etc/hosts設定 / How to write a script for adding hostname to /etc/hosts in Ubuntu



由於權限限制的緣故,我們不能單純用echo與「>>」來新增/etc/hosts設定,而應該用sh -c。例如:

sudo -- sh -c "echo '10.0.0.254      mfsmaster' >> /etc/hosts"



/etc/hosts是做什麼用的? / What is /etc/hosts?


/etc/hosts 是電腦裡面設定 hostname 跟 IP配對的設定檔,跟DNS的角色很像,可是 /etc/hosts 這個可由使用者自行控制。

根據維基百科的定義:

hosts檔案是一個用於儲存電腦網路中各節點資訊的電腦檔案。這個檔案負責將主機名對映到相應的IP位址。hosts檔案通常用於補充或取代網路中DNS的功能。和DNS不同的是,電腦的使用者可以直接對hosts檔案進行控制。

在Windows裡面,hosts的位置會在 C:\Windows\System32\drivers\etc\hosts 。在Linux裡面,hosts則是在 /etc/hosts 裡面。以Linux來說,/etc/hosts的內容大致上如下:

127.0.0.1       localhost.localdomain localhost
127.0.1.1       zentyal.zentyal.dlll.nccu.edu.tw zentyal

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

系統安全性的關鍵 / Security Issues


必須注意的是,/etc/hosts 是系統安全性一個非常關鍵的系統檔案。因為修改 /etc/hosts 可以將網路連線偷天換日、讓使用者連線到錯誤的網站。舉例來說, 我們可以在 /etc/hosts 裡面加入以下 設定:

192.168.11.50    www.google.com.tw

這樣子連線到www.google.com.tw的網站時,就會被引導到192.168.11.50這個伺服器去。當然,這個IP不是Google真的伺服器,而可能是惡意人士的釣魚網站,你可能就會在未查覺的情況下將帳號密碼輸入到別人的電腦裡面了。

正因為如此, /etc/hosts 是系統安全性的一大關鍵,所以一般人是無法修改這個檔案。在Linux當中,我們必須要以root的身份才能做修改,但是如果要用bash script腳本檔的形式來自動新增 /etc/hosts 的設定,那就得用特殊的方式來設定了。

如何用腳本檔新增設定? / How to add configuration to /etc/hosts by script?


一般網路上在教的方法,都是用echo搭配 >> 來運作,例如:

sudo echo "10.0.0.254    mfsmaster" >> /etc/hosts

但是會導致權限問題,而無法輸入:



-bash: /etc/hosts: Permission denied

那正式的做法應該是用sudo -- sh -c,指令是:

sudo -- sh -c "echo '10.0.0.254      mfsmaster' >> /etc/hosts"


sh的-c參數的意思是:「執行一個字串類型的指令,可以用特殊參數0來替換$1, $2等參數」,總之就是這樣子就能夠用較高權限來設定 /etc/hosts 了。

好,那我繼續來整合MooseFS跟Zentyal。 (more...)