解決jdom輸出時產生無意義(空白)Namespace之問題

在新版的jdom(我用的時候是1.1)中,使用XMLOutputter來輸出整個XML Document時,在Element上會產生空白內容的Namespace,像是這樣:

<bean xmlns=""></bean>
不管是呼叫Element的removeNamespaceDeclaration()或是設定NO_NAMESPACE都沒有用,甚至在create element之後呼叫remove attribute()去remove xmlns屬性也不行,這案情不單純阿...。

後來Google到一篇,裡面說到jdom新版有bug,要去source code裡面解決,不過也沒說是什麼問題,只好自己來啦!好險並不是很困難,原因在於XMLOutputter這支code裡面出了問題,在XMLOutputter中,有一個方法叫printNamespace,裡面原本的code有一段是長這樣:



很明顯有了錯,改成下面這樣就可以了:

[Shell Script] 用echo將文字以附加(apppend)方式寫入檔案

在編寫Shell Script時,如果你有echo到某個檔案的需求,你希望寫入檔案時是以附加(append)的方式進行,而不是整個覆蓋的話,你可以使用【>>】來取代【>】:

echo "aaa" >> /home/kevingo/example.txt
echo "bbb" >> /home/kevingo/example.txt


如此一來,example.txt中的內容就會是:
aaa
bbb

High Availability(HA) 與 Load Balance

最近在架設Web Server和Database的Cluster,主要的目的在於建構出一個High Availability(HA)的服務環境。

High Availability(HA)指的是提供一個高可靠度的運作環境,以網路服務來說,在Back-End需要的是Web Server Cluster和Database Cluster,目的在於當有任何一個節點crash後,會有其他的節點自動補上。

而Load Balance指的是當使用者的請求(request)進入到Back-End之後,會導入到目前loading比較輕的server,如此一來可以減輕每個server的負擔。

【相關閱讀】
商業服務的Ruby on Rails HTTP Cluster觀念及測試

MySQL Cluster 之 Data Nodes 與 Node Groups 之間的關係

在建立MySQL Cluster的時候,data node的數量和其所屬的node group是有相依關係的。從官方的文件中可以得到這樣的關係是

  • number of node groups = number of data nodes / NoOfReplicas

換句話說,你沒有辦法直接對node groups的數量進行設定,它取決於data nodes的數量和NoOfReplicas這兩個參數。

例如:

假設data nodes = 4

NoOfReplicas = 1 , node groups = 4
NoOfReplicas = 2 , node groups = 2
NoOfReplicas = 4 , node groups = 1

data nodes的數量最好是偶數,才能被平均分配到每個group當中。


Scrum 專案管理

Scrum是一種專案管理的模式,特別常用於軟體專案的開發上。Scrum字面上的意思指的就是【美式足球的爭球】,Scrum的運作精神就是希望能夠在每一次段時間的衝刺(Sprint)中,逐步逐步的透過小產出來完成最後的產品。

在Scrum的管理方法中,總共有四種角色:

  • Stakeholder
    • 使用者
    • 負責提供需求,在Scrum中,我們稱之為故事(Stroy)
  • Product Owner
    • 整個Scrum團隊的負責人
    • 將使用者的Story轉換為Product Backlog
    • 必須要為使用者的Story依據重要性進行排序(Priority)
  • Scrum Master
    • 開發團隊的領導人
    • 通常需要較深的開發經驗與技術知識背景
  • Scrum Team Member
    • 完成產品需求

從這裡可以看出,Scrum的角色定義其實並沒有太特別,比較有趣的是它的運作流程,讓我們來看看這張圖:


這張圖可以被拆成以下幾個步驟:

  1. Stakeholder向Product Owner提出自己的需求
  2. Product Owner將需求轉換為Product Backlog
  3. 透過Sprint Planning Meeting後,將Product Backlog轉換為Sprint Backlog
  4. 在每一次的Sprint中,按照優先順序,進行一次Sprint(衝刺)
  5. 每次的衝刺中,都會進行Daily Scrum Meeting,確保進度
  6. 完成產出後,由Product Owner來驗收成果
  7. 整個Scrum流程做完後,進行Retrospective Meeting,檢討整個流程需要改進之處


而在Scrum中,幾個名詞的解釋如下:


  • Product Backlog:指的就是使用者的需求。通常被排定好重要性和預計完成時間。

  • Sprint:一個工作週期,通常為期一到四週
  • Sprint Backlog:每一個Sprint需要完成的工作清單
  • Sprint Planning Meeting:在執行每次的Sprnit之前所召開的會議,用來決定這次的Sprint要完成的工作(Sprint Backlog)
  • Daily Scrum Meeting:在每天會舉行的會議,時間大約為15分鐘左右。Scrum Master會在這個會議中問三件事情
    • 昨天完成什麼
    • 今天要作什麼
    • 遭遇到什麼困難

為了管理方便,在Scrum進行過程中,還會有一些工具來幫助你進行得更加順暢:


  • Task Board:用來確認工作完成狀況的表格。實際上許多人會用有顏色的便利貼來區分,不同的顏色代表不同的工作或不同的負責人。




  • Burn Down Chart:用來監控專案進度的表格,X軸是時間,Y軸是專案總時程或總工作數目。理想中的走勢應該是向藍色線一樣的斜率,但是實際執行時,通常會有出入,可能會像紅色摺線一般,可以用來觀察專案的走勢。



【相關閱讀】
Scrum (development)
A Simple Intro of Scrum
What is SCRUM?
5分鐘 學 Scrum (簡介)