:::

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...)

Windows Live Writer上傳到Blogger發生密碼錯誤的問題 / How to solve Windows Live Writer Permission Error

布丁布丁吃布丁

Windows Live Writer上傳到Blogger發生密碼錯誤的問題 / How to solve Windows Live Writer Permission Error

image

如果你發生了「Windows Live Writer無法使用此使用者名稱及密碼登入遠端伺服器。請確認您輸入正確資訊後再試一次。」的問題,這是因為Google賬戶設定中不允許安全性較低的應用程式存取你的賬戶。只要暫時開啟允許安全性較低的應用程式存取權限,再回到Windows Live Writer來更新即可。


如何啟用安全性較低的應用程式存取權限? / How to enable less secure apps access permission?

image

這個問題rtpHarry也講過,最簡單的做法,就是暫時打開安全性較低的應用程式存取權。

設成「開啟」之後,再來回到Windows Live Wirterr進行上傳的動作即可。用完之後可以再關閉存取權,以提高賬戶的安全性。

25 - 1

這個問題除了讓Windows Live Writer無法登入Blogger之外,我手機上使用IMAP的郵件APP也發生了同步錯誤的問題。這設定真是擾民啊。

有軟體可以取代WLW嗎? / Anyone could replace WLW?

我因為這個莫名其妙的緣故,導致很長一段時間都沒辦法使用Windows Live Writer (WLW)來寫。最近終於快受不了了,於是開始找看看有沒有可以替代WLW的程式。雖然這篇2014年的「13 Best Alternatives To Window live Writer For Windows, Mac & Linux」已經介紹了很多類似的工具,但很遺憾的是,大部分都是很久以前就存在、需要付費,甚至我還測試過的工具(Zoundary Raven)。

BlogJet3

抱著半放棄的心態,剛剛安裝了BlogJet來試試看能不能用。雖然是個付費的軟體,但如果可以用的話,倒也不是不可以買。只是試著新增Blogger帳號時,又發生了低安全性應用程式禁止登入的問題。好吧,如果這個問題都不能解決,那就跟用WLW還是一樣的程度,不如回頭繼續使用WLW。

WLW無可取代的功能有那些? / Important Features of WLW

image

這不禁讓我思考起,究竟我需要WLW的什麼功能?而這是其他Blog工具都無可取代的呢?

目前想到得有:

  • 圖片上傳整合Picasa:這真的是至今沒有看到任何Blog工具有這樣功能,太重要了。大部分的Blog工具都可以上傳到FTP,但是這個年頭還有人在FTP的嗎?
  • 簡易的圖片編輯功能:我喜歡WLW會為圖片加上陰影與的效果,這會讓人在看圖片時覺得跟內文有所區別,而且比較美觀。
    image
  • 整合Blogger範本的功能:我可以用我喜歡的背景顏色與字體顏色來寫作,這讓很容易進入專注的狀態。
  • 外掛Dynamic Template跟Code Snippet:WLW的外掛功能擴展了Blog寫作的無限可能,其中我認為最重要的兩個外掛,一個是可以標亮程式碼的Code Snippet,另一個是可以插入自訂程式碼的Dynamic Template。這兩個太重要了少了他們,叫我怎麼寫Blog?
    image

以前我也有很多次興起想要換掉WLW的念頭,結果時至今日,我還是繼續用著WLW。現在無法登入的問題也解決了,了那就繼續來寫吧。

(more...)

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

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

image

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

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

(more...)

用OpenVZ安裝Zentyal失敗記錄

用OpenVZ安裝Zentyal失敗記錄

openvz

為了繼續之前提出的DLLL-CIAS第四版架構,我開始試著在Proxmox VE 3.2上用OpenVZ來安裝Zentyal (附帶一提,Proxmox VE本身是以VirtualBox架設的,因此是全部都在虛擬機器下運作)。我以ubuntu-14.04-x86_64.tar.gz為基礎,用apt-get來安裝Zentyal。過程很順利,但問題卻卡在最後的網路上:無法建立具有內網與外網的NAT。我嘗試了很多方法來解決這個問題,但總歸來說,無法建立的原因可歸納為兩個門檻:1. OpenVZ的veth網卡只能連到未公開的虛擬網路;2. OpenVZ的veth與venet之間無法轉遞封包。以下來說明我遇到的這兩個問題。


1. OpenVZ的veth網卡只能連到未公開的虛擬網路

image

在討論這個問題之前,我們必須先釐清OpenVZ的兩種網路模式:venet跟veth。下表是veth跟venet的差異比較:

veth跟venet的差異
Feature
特徵
veth venet
可使用的虛擬機器類型 OpenVZ
KVM
OpenVZ
可透過網頁管理
直接配置網路IP
No Yes
MAC address
網卡位置
Yes No
Broadcasts inside CT
封包會在虛擬機器間廣播
Yes No
Traffic sniffing
封包攔截
Yes No
Network security
網路安全
Low High
Can be used in bridges
可否用於橋接器
Yes No
IPv6 ready
可否使用IPv6
Yes Yes
Performance
效能
Fast Fastest

OpenVZ預設使用的是venet (Virtual NETwork),可以直接給定IP,速度非常快。但是venet沒有MAC位址,使用上較為受限,可能不適合作為Zentyal的網路。因此這次我選擇使用veth (Virtual ETHernet)來架設,veth是用模擬真實的網卡的方式,可給虛擬機器安裝如「eth0」的虛擬網卡,因此配置上會比較貼近我們真實使用情境下安裝Zentyal的模式。

我原本是這樣想,但很遺憾的是,veth並沒有照我想的去運作。建立的veth網卡只能在虛擬機器之前彼此連線,但是卻無法連上網際網路。

用KVM的方式新增veth:失敗

我是以Ubuntu 14.04來建立虛擬機器(又稱為container),一開始是用類似KVM的方式來新增網卡,但沒有成功。大致上步驟如下:

  1. 將虛擬機器關機。
  2. 新增veth網卡,Bridge設為vmbr0 (預設),其他參數、包括MAC位址,全由Proxmox VE自動指定。
  3. 虛擬機器開機。
  4. 在console端進入虛擬機器的指令列,設定網路。 (因為網路尚未設定好,所以沒辦法用SSH連入)
    以下都是虛擬機器 (container) 中的操作。
  5. /etc/network/interfaces中設定eth0:
    auto eth0
    iface eth0 inet static
            address 192.168.11.118
            netmask 255.255.255.0
            gateway 192.168.11.99
  6. 重新啟動網路:
    [container]# /etc/init.d/networking restart
  7. 使用ifconfig,確認eth0有正常啟動
  8. 使用ping,無法連到網際網路。
參考OpenVZ的veth說明來設定:失敗

由於用KVM設定veth的方法失敗了,所以我改找OpenVZ官方網站的veth說明來操作。該網頁介紹了很多方法,從簡單的設定使用IPv4的直接路由使用IPv6的直接路由、或是建立橋接器(brdige)等等。我按照上面的指示操作,但大部分都失敗了。

在OpenVZ的介紹中有幾個動作是之前沒有做過的:

  • 確保vzethdev載入:
    modprobe vzethdev
  • 開啟網路卡的forwarding跟proxy_arp

    [host-node]# ifconfig veth101.0 0
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

其他設定網卡的方法大致上類似。但是很遺憾的是,這些設定依然是無法讓veth網卡連線到網際網路。

奇妙的是,網路上許多人在OpenVZ中使用veth看起來都很順利,可是我自己使用OpenVZ從以前到現在就沒有veth順利連線的印象,這究竟是怎麼會是呢?如果有高手看到我這篇的話,希望能夠在下面留言欄為我解惑解惑。


2. OpenVZ的veth與venet之間無法轉遞封包

由於veth未能照預期的形式運作,所以我改轉用venet來設定網卡。

Zentyal只能抓到venet一張網卡

image

儘管虛擬機器可以設定兩個venet的IP,各別配置對外網路用的IP: 192.168.11.117跟對內網路用的IP: 10.0.0.254,但結果會如上圖所示,Zentyal只能抓到一個venet網卡。

這是因為venet網卡只有venet0,兩個IP是用虛擬網路卡的方式模擬出來的。我們可以用ifconfig來觀察虛擬機器的設定:

image

[container]# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10000 (10.0 KB)  TX bytes:10000 (10.0 KB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4480 (4.4 KB)  TX bytes:6905 (6.9 KB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.11.117  P-t-P:192.168.11.117  Bcast:192.168.11.117  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

venet0:1  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.0.0.254  P-t-P:10.0.0.254  Bcast:10.0.0.254  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

 

Zentyal設定邏輯中對外網路與對內網路有相當大的差異,若使用venet會導致Zentyal無法判斷那一張網卡是對外網路(External, WAN)還是對內網路,因此並不是一個可行的方案。

venet可連上網際網路,但無法架設NAT

即使如此,若使用venet的兩個IP來設定,對內網路依然連得到對內網路的虛擬機器、對外網路則可以讓網際網路的電腦來連線。不過光是這樣依然無法做成NAT的網路架構。

一般使用情境下,只要在Zentyal當中設定好對外網路與對內網路的網卡,Zentyal就會自動設定成NAT。若是不仰賴套裝軟體,也可以用iptables來實作NAT。我參考Ubuntu Server 12.04 LTS 設定 iptables 實現 NAT Server這篇的做法來做,關鍵的設定是在設定 IP Forwarding and Masquerading:
iptables --table nat --append POSTROUTING --out-interface venet0:0 -j MASQUERADE
iptables --append FORWARD --in-interface venet0:1 -j ACCEPT

但是很遺憾的是,依然無法成功。然後我試著用veth來作為內部網路的網卡,結果反而連venet都無法連線。我猜是因為Zentyal會蓋掉Proxmox對虛擬機器的網路設定,兩者導致了衝突。


結論:應該使用KVM來架設Zentyal

直到剛剛我都還在嘗試各種設定,但是總是該設一個期限。當我把這篇失敗的記錄寫完之後,我想也差不多該終止以OpenVZ架設Zentyal的研究,而回歸到原本使用KVM架設的規劃

想來還是有點不甘心,以OpenVZ架設的Zentyal壓縮後的備份檔案大小只有800MB不到,而且啟動速度又快。回去使用KVM的話,虛擬網卡會有網路轉換的額外負荷,只能說是「可以用」但稱不上是「很有效率」。只是因為伺服器虛擬化之後管理起來比較方便而已。

好吧,雖然不是一篇成功的研究,不過總是該打起精神,這條路就先到此為止吧。

(more...)