2008/07/24

extglob (extended pattern matching bash) 讓你的 script 更有用

我很喜歡 Perl 簡潔有力,也很喜歡 Sed, Awk 等等,Bash 也打開了以往的限制,增加了 extglob 選項

?(pattern-list) 匹配零個或一個
*(pattern-list) 匹配零個或多個
+(pattern-list) 匹配一個或多個
@(pattern-list) 剛好一個匹配
!(pattern-list) 匹配除指定模式以外的任何字符

我是不太常用,這邊所提的內容您也可以搭配 grep 來達成。假設,我不想要 a開頭的所有檔,可以這麼寫:

$ shopt -s extglob
$ ls !(a*)

第一行只是要打開 extglob, 只需要做過一次即可。若想關掉,可以用 shopt -u extglob

ffmpeg 自製電影

不管是要轉檔,還是要編輯影片,甚至是想用照片製成電影,或是電影與照片混用,ffmpeg 都是很好的工具。

請自行參考Linux HOWTO 的說明, 有空再來貼一下我的使用心得。教學影片在這兒

2008/07/23

由 VOB 重新產生 IFO 檔

DVD 格式中,有三種附檔,其中 IFO 記錄了不同的章節、語系、上一頁、下一頁等資訊,所以光有 VOB 檔是不夠的。若您也像我一樣,突然有此需求,所有 IFO 檔都不存在,只剩下 VOB 檔的時候,怎麼辦?以前我做過一次,忘了怎麼搞定的,底下的文章來自這裡

Step 1. 下載 IfoEdit. 可以從這兒那兒找到並下載 IfoEdit. 這是免安裝的,解壓後可以直接執行第二步。

Step 2. 執行 IfoEdit.exe, 找到畫面中下方的 'Create IFOs' 點下去.

Step 3. 選項基本上都可以不用變動. 只需要找到畫面中間 "1st VOB of Title-set" 右方的瀏覽按鈕載入你的 VOB 檔,通常是指定第一個 VOB 即可,例如 VTS_02_1.VOB,這一步只需要做一次即可,不必每個 VOB 檔都做(事實上會產生一樣的東西).

Step 4. 找到 'Same as source' 並勾選它.

Step 5. 按 OK 鈕開始分析並產生 IFO, 我只做到這一步,有興趣編輯 DVD 章節或語系的人自行往下看。

Step 6. 從上述 VOB 檔案(只需做一個)蒐集完所有需要的資訊後,會產生 VIDEO_TS.IFO 以及
VTS_01_0.IFO 兩個 IFO 檔案。

Step 7. 接下來再稍作修改,點選 VTS_01_0.IFO 檔案,你會看到音軌與字幕屬性並沒有指定語言。

Step 8. 要改變語言設定,需要雙擊音軌字幕資訊流(streams),指定串流語言後並點選 OK 完成設定。

Step 9. 接著繼續處理視訊 IFO 檔案。由於 VIDEO_TS.IFO 保存有 Title-set 屬性,你也需要對 VIDEO_TS.IFO 做同樣處理。在 IfoEdit 選擇 VIDEO_TS.IFO 檔案,並為視訊軌字幕資訊流(streams)選擇語言。
(第6-9步譯自 S.J.H)

Intel Threading Building Blocks - multi-core C++???

Intel 最近釋出一個新版本的 TBB(Threading Building Blocks), 請見這裡的說明。

多核心除了硬體能力外,作業系統以至於程式語言的支援都很重要,使用 Multi-threading Programming 就算了嗎?平行運算能力還得加上 Scalable, 以及安全,此外系統並不具有任意多的資源,因此 task scheduler 也很重要,當然這也是 OS 的工作,瞧瞧 TBB 的能力或許有更好的解答?

For developers, the clear benefits of Threading Building Blocks are:

1. TBB 大量縮減程式碼大小
2. TBB 利用抽象化,隱藏了大量 Multi-threading 的程式複雜度
3. TBB's task manager 自動分析系統與軟體所執行的環境,自動選擇最佳的 thread 數目,會完成 load balance 在所有處理器核心上,達到系統最佳化。
4. 所以, TBB threaded applications 會自動有效的放大,適應將來更多核心的硬體環境。

利潤 profit

想像力到哪裡,你的世界就到那裡。

本文參考自這裡,是個值得深思的問題。

醫療器材,常常需要隨身攜帶,尤其在人類社會愈來愈老化的現在,醫療體系的支持非常重要,文中提到的小裝置,用來指引人透過控制呼吸來讓血壓下降,要價 300 美金,成本或許不到 20 元,其中的原因可能只是「專利」。

專利或許是最根本的原因,但是另一個原因在於利潤--市場因素。或許隨身裝置似乎都是個 SoC, 或許不是,文中提到難道不能跟真正的電腦連結,只是把血壓、呼吸資訊傳入電腦處理,讓裝置只是簡單的感應器,這樣或許可以降低成本,但是使用上應該不怎麼方便才是。

我在思考的,很多人也想過,怎樣創造多贏策略,也就是設計商、生產製造商、代理商、品牌商(客戶)、用戶等等的,或許這麼講野心太大。

設計商當然要專利保護,生產製造商當然要高利潤,代理商、通路商、或品牌商(客戶)當然要高單價銷路好,而用戶,卻又希望單價低又實用。嵌入廣告或許不失一個辦法,看似不怎麼實際,卻也充滿機會。當然我心中還有其他話要說啦,只是想透過圖來表達,有機會再貼上來。

Follow

我一直在跟別人提 Follow 的概念,這邊有一個與 Skype 連結的應用軟體,良好地示範了這個概念。

2008/07/22

communication

skype developer算是很特別的東西,跟 skype 通訊竟然是用純文字。

最近在思考「溝通」這件事,人類與裝置的互動還停留在原始的狀態,雖然已經有語音輸入,也有觸控,也有手勢辨識,可是感覺都還停留在不怎麼實用的階段。你的裝置要怎樣與別人不一樣?或許,「溝通」就是非常急需去思考與面對的課題。

2008/07/16

google reader


我不知道大家怎麼讀新聞的,這邊有個好東西跟大家介紹一下,或許知道的人不少。

附圖是我自己使用的畫面,當我用 Firefox 訂閱 RSS/ATOM 時,會問我是否用 google reader, 若您還沒有 google account, 建議去申請一個,而要用 google reader 也不見得用 firefox, 用 IE 也行,請至 google reader用了就知道。

以我來說,我可以同時訂閱 Yahoo news, UDN news, 還有一堆 google groups, 甚至是 blogs, 總之是一個帥啦!舉例來說,我不必登入好友的 blog 就可以看到一堆,新聞也是,對有興趣的標題再點進去讀,方便的很。

freemind 0.9.0

Freemind 0.9.0 新增了四個很重要的觀念,一個是對節點增加附記,一個是對節點增加屬性,一個是過濾,一個是 scripting(採用 Groovy)。因為 0.9.0 還不夠穩定,有個建議是與 0.8.x 並存,正式的產出用舊版的,實驗新性質才用新版的。不過,0.9.0 新增的這幾個功能並不被 0.8.0 所識別,因此我個人是直接用新版本。

我是懶得再寫像Freemind 教學,不過這幾個新功能我還算喜歡,只是有時我會拿 Freemind 來畫類似流程圖那種 cycle-link, 也就是說目前只能畫非環形的節點樹,有時不同節點會有相關性,用 freemind 無法表達。當然這也可以說是工具不正確造成的,最好是用 UML, 不過 UML 頗複雜就是了。

再次呼籲尚未使用過心智圖軟體(不一定是 Freemind)的人應該試用一下 Freemind,我想讓你有個清楚的思路非常重要,不管是不是用來開發軟體。

會有 script 功能說真的我也沒用過,不過既然有屬性,給它方法似乎看來也不必太怪異,有個範例是說幫 Node 加上「今天」的日期。也可以計算屬性之類的。有新的想法再來跟大家分享。

Linux 2.6.26 新發現

這篇文章算是純筆記,來自Linux 2.6.26 新鮮事Linux 2.6.26 對嵌入式裝置的改善

先從後面那篇寫起,因為比較短。linux 2.6.26 多的項目,對嵌入式裝置來說重要的發展有幾個:

.良好支援 KGDB, GDB 這東西本來就可以為 kernel 除錯,現在更提供選項,不知道有何改善,之前必須要patch, 現在是整合良好,算是一大功德。

.對 KVM 支援的硬體變多了,同時軟體特性也變多了:Itanium (IA64), S390, and PowerPC 440, plus lots of new KVM features such as x86 hardware task switching

.USB Video Class driver for better webcam support: 這是個好消息,不知道我那台中華電信送的可不可以用?

.802.11n improvements, and 802.11s mesh networking support via Open80211s:這項目在 OLPC 裡是我特欣賞的一項,現在整合進來,不知道是不是代表隨便的網卡都能動作?

.Read-only bind mounts (story): 在使用 chroot 時,我介紹過 mount --bind 這個命令,請見chroot with mount bind 一文DirectFB 介紹。對 /proc 什麼的沒什麼影響,但是對 /etc 或 /var 就會有影響,增加這功能會讓系統安全點。

.Better documentation for real-time scheduling options

.Improvements in EXT4 (still an "experimental" feature): 既然還在實驗階段,用的人肯定不多,有機會好好來研究一下它的改進之處

.另外對很多嵌入式硬體做了最佳化,我就不特別列出來。

.x86 PAT support: 這一點存在很久了,早期的 MTRR 就可以做因而被延遲了下來,有了它,對記憶體的管理會做的更好。

.Device whitelist on cgroups: 不知道是啥,看起來是加強 mknod 的能力的,跟虛擬化似乎有相關性。例如,原來的裝置型態有 c(char), b(block), 現在多了 a(all),而存取權有 r(read), w(write), m(mknod), 對 a(all) 而言,似乎更「開放」了。有興趣的人請讀cgroups一文。

.內建 Memtest: 看來系統除錯更容易建置了

.Export BDI attributes in sysfs: 不懂,有機會看看

./proc/pid/mountinfo: 似乎對查出 process 用了哪些 mount point 有幫助?

當然還有更多改善,感覺對硬體的支援增加非常多,請自行看文章吧

2008/07/10

進化 evolution

有一篇是這麼說的,當買電腦不再關心 CPU 運作速度,不再關心記憶體大小時,下一個關心的目標會是什麼?

她說是螢幕,我個人一直認為是輸入法,輸入裝置,貼近人類思想的輸入裝置。

在看這篇文章時,讓我想起一個很久以前想過的問題,「人類,還會再進化嗎?至少,在腦袋上,還有進化的空間嗎?」這問題問過的人不少,有人提出外星人是人類進化的樣本,我不知道。

電腦的發展,效能似乎不是最受人關心的,網際網路的發展,訊息的取得似乎不再是人們感興趣的,接下來呢?有人提出情感的媒介與交流。似乎,回歸更人性化才是發展的趨勢,我在想,人類,或許已經是發展的顛峰,剩下的問題是如何與大自然相處吧?如何與其他人更好的相處或許才是進化的未來趨勢。

我喜歡一個理論,叫蓋婭,相信人類要更好的往下走,勢必更好好思考這理論才是。

2008/07/09

讓 Make 使用遞增的編號

本文算是從這兒翻譯來的。

本文主要目的,不是要你新增什麼源碼來產生或是記錄編譯次數,基本上若您有興趣配合著用也行。先說一下編譯時,通常是用 make, 也就是說,它會讀一個檔叫 Makefile,有在用 make 的人應該都知道 Makefile 可以定義變數,甚至請 make 把變數丟進源碼中。

那麼本文的目的是啥?就是希望讓你可以每次編譯,都產生一個獨立而遞增的編號,以便源碼能引用,以便區別,Kernel 就是這麼做的。先來看一個簡單的 Makefile 範例:


# Makefile

OBJECTS=bnum.o

a.out: $(OBJECTS)
$(CC) $(LDFLAGS) -o $@ $(OBJECTS)


根據規則,會把 bnum.c 產生 a.out,每次都是這個結果。讓我們再來看一個修改過的 Makefile:

# Makefile

# Name of text file containing build number.
BUILD_NUMBER_FILE=build-number.txt

OBJECTS=bnum.o

a.out: $(OBJECTS) $(BUILD_NUMBER_FILE)
$(CC) $(LDFLAGS) $(BUILD_NUMBER_LDFLAGS) -o $@ $(OBJECTS)

# Create an auto-incrementing build number.

BUILD_NUMBER_LDFLAGS = -Xlinker --defsym -Xlinker __BUILD_DATE=$$(date +'%Y%m%d')
BUILD_NUMBER_LDFLAGS += -Xlinker --defsym -Xlinker __BUILD_NUMBER=$$(cat $(BUILD_NUMBER_FILE))

# Build number file. Increment if any object file changes.
$(BUILD_NUMBER_FILE): $(OBJECTS)
@if ! test -f $(BUILD_NUMBER_FILE); then echo 0 > $(BUILD_NUMBER_FILE); fi
@echo $$(($$(cat $(BUILD_NUMBER_FILE)) + 1)) > $(BUILD_NUMBER_FILE)



這邊引進了一個變數 BUILD_NUMBER_FILE 用來當儲存媒介,儲存編譯次數,每次編譯時我們想辦法讓它遞增 1。這樣,就可以拿來產生不同的 target 出來。這個 BUILD_NUMBER_FILE,也就是 build-number.txt 一開始可以不必存在,機制設計上會自動把 '0' 寫進去,然後每次編譯自動遞增 1 寫進去,供讀進後設定成 __BUILD_NUMBER

不知道有沒有看到 BUILD_NUMBER_LDFLAGS 裡頭,把 __BUILD_NUMBER 傳給 Linker, 因此編譯器可以把它讓源碼看到,若有興趣的話也可以引用,底下是個範例:


#include

extern char __BUILD_DATE;
extern char __BUILD_NUMBER;

main()
{
printf("Build date : %u\n", (unsigned long) &__BUILD_DATE);
printf("Build number: %u\n", (unsigned long) &__BUILD_NUMBER);
}


要看執行結果嗎?原文裡面也有:

$ rm bnum.o; make
cc -c -o bnum.o bnum.c
cc -Xlinker --defsym -Xlinker __BUILD_DATE=$(date +'%Y%m%d') \
-Xlinker --defsym -Xlinker __BUILD_NUMBER=$(cat build-number.txt) -o a.out bnum.o
$ ./a.out
Build date : 20080708
Build number: 24
$ rm bnum.o; make
cc -c -o bnum.o bnum.c
cc -Xlinker --defsym -Xlinker __BUILD_DATE=$(date +'%Y%m%d') \
-Xlinker --defsym -Xlinker __BUILD_NUMBER=$(cat build-number.txt) -o a.out bnum.o
$ ./a.out
Build date : 20080708
Build number: 25

2008/07/04

使用案例 use case

目的:
.決定並說明系統的功能需求,結論是在關係人與建構系統的軟體開發人員之間達成共識。
.有關係統該做什麼,要給予清楚和一致的描述,如此才能在開發過程把模型拿來與所有開發人員進行溝通,瞭解系統有哪些需求,同時也作為設計模型的基
礎。
.作為執行系統測試的基礎,為了證實系統是否能適當的運作,並確認系統運作是否恰如其分。
.提供把追蹤所得的功能需求,轉換成實際類別和操作的能力。經由改變使用案例模型,接著追踨受到使用案例所影響的系統設計與實作,可以簡單地改變並
擴充系統。

不同的人關注的事有差異:
.關係人所感興趣的,是使用案例模型詳細說明系統的功能性,描述系統怎樣可以有這些功能,並說明如何使用這些功能。若讓關係人在塑模時扮演動主角色
顯得非常重要,因為可以依其願望調整模型,也可以採用其語言、術語等來描述使用案例。
.開發人員所感興趣的,是系統應該做什麼,並作為更詳細的塑模作業及編碼的基礎。
.專案管理者應用反覆與增量生命週期的方式,來建造反覆計畫,確保能成功地把使用案例實作出來。既然客戶瞭解使用案例模型的本質,也一定想要看到有
哪些功能,在每一段反覆計畫結束時,就應該要呈現出來。
.整合與系統測試團隊需要使用案例來測試系統,以確保系統所執行的功能就是使用案例所指定的功能
.任何人只要與系統有關聯的活動相關的話,就有可能是對使用案例模型感興趣的人,譬如銷售、支援、文件等團隊。

請參考Use Case來說明:

1. 人:當然就是參與者, actor
2. 楕圓:就是一個使用案例
3. 矩形:一個主題,可以包含多個使用案例
4. 套件:那圖形是指一個套件,譬如一個大學的入口網站可能有學院管理、員工資訊、學生資訊、一般資訊等套件,這邊通常引用已存在的套件。
5. 區塊:一個使用案例可以區分成數個小塊
6. 實直線:關聯, association, 連接元素或實例
7. 角箭號:也是關聯, association
8. 虛角箭號:依賴關係, dependency
9. 三角箭號:一般化,generalization, 通常表達繼承,或是指明某類別的實例
10. 折角紙:說明,note
11. 虛線:連結
12. 文字:加上文字

目前我也正在學習當中,以後再補實例上來

UML 名詞 - Views, Diagrams, 模型元素, 一般機制, 延申 UML

Views: 翻成觀點,用來展示各種不同的應用場合,或是面貌。我們這麼說吧,不同的觀點,可以組成的類別不太一樣,譬如,使用案例裡面「人」就扮演
重要角色,可是實作觀點,卻哪來的人?舉例來說,有使用案例觀點,邏輯觀點,實作觀點,程序觀點,部署觀點,實作觀點等。這是最重要的部份,UML 也
讓你能定義屬於自己的觀點。而不同的觀點間應該要容易切換著看,一件事有各種不同的觀點才是完整的。例如從使用案例來看使用者如何操作系統,也應該切換
到部署觀點看看實體架構裡如何部署系統。

Diagrams: 我一般是翻成(流程)圖,書上是翻成圖型。UML 圖型有很多,舉例來說有使用案例圖,類別圖,物件圖,狀態機,活動圖,互動圖,循序圖,通訊圖,元件圖,部署圖,合成結構圖。

模型元素: 不同的圖型,是由各種元素組成的。比較貼切的說法,模型元素應該是用來表達「觀念」的元素,它可以是語意,一個正規的定義,或是夠清楚的敘述,當然也可以是一個圖像符號。一些已經定義好的模型元素範例有,用來表達人員、類別、物件、訊息、關係、關聯、依賴性等等的圖素。

一般機制: 為模型元素提供額外的飾詞、註釋、資訊、規格或者是語意,這也讓不同的組織或領域,替自己擴展特有的 UML。

延申 UML: 三種機製為,造型(stereotypes),標籤值(Tagged values), 限制(Constrains)

統一塑模語言 UML

請自行參考 UML 組織,這邊有工具列表,個人推薦BoUML。推薦一本書:Hans-Erik Eriksson, Magnus Penker, Brian Lyons, David Fado 著,朱子傑譯,碁峰出版的,UML2 百寶箱。

先簡單介紹一下 UML, 你要蓋房子,或讓人參觀預售屋,弄個模型屋出來是最正常的。蓋房子之前,會先把藍圖設計出來才開始蓋,車子也類似,還會先模擬風切、撞擊等,這一切,都叫「塑模」,也就是先建個模型,看看合不合用,再來真正動手。

台灣大部份的軟體工程師(硬體的我不熟,想來也差不多吧?)常常忽略這樣的步驟,做完需求,分析完,就開始動手寫程式,常常搞到最後該加的班加不完,臭蟲還是一直出現。因此跟大家介紹 UML,就是希望能讓大家少點加班時間,多點回家陪家人的時間,顧好自己的身體。

一般軟體工程的步驟:

需求:UML 以「use case」的方式來捕捉客戶或使用者的需求。從案例探討著手,會發現不同需求、需求間的關聯,怎樣進入不同的狀態,操作過程會有哪些活動等等。

分析:分析要從建立類別及物件著手,整個問題(系統)由什麼類別組成?其運作機制如何?類別間的關係如何?在使用案例裡又如何實現其間的活動?有些人以為這邊在講的是物件導向程式語言裡的類別,其實不算是,後面我們再來介紹。

設計:分析的成果,必須擴展成技術上的解決方案。這時才要考慮使用者介面,資料庫等等。設計必須定義詳細的規格。

實作:就是所謂的 coding。因為 UML 是以物件為基礎,因此一般也使用物件導向程式語言,例如 Java, C++, 甚至是 Perl, Python,卻沒有 C, shell script. 實作已經不算是 UML 真正有定義的事,但是卻有工具可以幫你把 UML 產生相對應的程式語言表示法,也算是相得益彰。

測試:一般測試常常由工程人員測完就算了,其實還可以分幾類,單元測試、整合測試、系統測試、生產測試、驗收測試。不同的測試團隊會有不同的測試模型,這也是 UML 重要的功用。

更技術的討論,我想移至wadefs 討論區去完成,希望將來也採這樣的方式進行。

程式設計師還是工程師 Programmer or Engineer

中譯來自電子工程專輯, 英文來自Embedded.com。後面再來以回覆的方式寫我自己的看法。

‘程式設計師’這個詞應該從字典中刪除。

我痛恨‘程式設計師’(programmer)這個詞,雖然我承認經常使用它,因為它在我們的文化中太根深蒂固了。就像那些無意說出的粗魯詞句,儘管不斷出現,但是又缺乏有效的防治方法。

Dictionary.com將‘程式設計師’定義為‘編寫電腦程式的人員;對設備(尤其電腦)進行編程的人員’

編寫程式的人稱為程式設計師。這個描述更像是‘編碼員’,日復一日地編寫著程式碼。編碼人員,如同技師及看門員一樣,都是不可缺少的員工。但是他們可能成為一個軟體專案的破壞性因素。

我認為,軟體專案失敗的十大理由之一,是團隊無法抗拒開始編碼的衝動。編碼不過只是軟體工程的一部份,類似於為橋鋪路面。沒有路面我們無法通過,但橋樑施工需要仔細的工程規劃、分區、籌款以及其他眾多比鋪路更複雜的活動,同時對於最終的結果來說也更重要。

糟糕的鋪路可以重來或進行修補,但是糟糕的橋樑設計可能會倒塌。劣質的軟體工程必將帶來專案的失敗,即使編碼人員(程式設計師)做得再好也無力回天。

我們之中大部份人是工程師:軟體工程師,韌體工程師,或是硬體/軟體工程師,儘管我們水準各異。實際上,近期的嵌入式網調查顯示只有13%的受訪者擁有電腦科學學位;80%具有工程學(EE或CE)的學位。

工程是一門解決問題的藝術,也可以說就是建構韌體。由架構設計開始,在這個過程中,我們思考如何設計、規格、團隊、工具以及得到解決方案的方法。

接著我們開始設計-這裡特別強調‘設計’-一個強壯的基礎。使用OS還是不用OS?劃分為多個處理器?我們如何劃分問題使其方便解決?何種資料結構更有效?

這時,編碼才真正開始,某種程度上講編碼可以交給另一個組織,或許採用外包方式。

編碼相對簡單;軟體工程卻很困難。軟體工程師是負責以某種合理的可重複方式建構可靠系統重任的專家

2008/07/03

心智圖 Freemind

要建立心智圖有不同的工具,這邊介紹一個非常簡單易用的一套,叫Freemind, 可以到這兒下載,有各種作業系統版本。

什麼是心智圖?先貼一下原網站的說明:

FreeMind is a premier free mind-mapping (http://en.wikipedia.org/wiki/Mind_map) software written in Java. The recent development has hopefully turned it into high productivity tool. We are proud that the operation and navigation of FreeMind is faster than that of MindManager because of one-click "fold / unfold" and "follow link" operations.

So you want to write a completely new metaphysics? Why don't you use FreeMind? You have a tool at hand that remarkably resembles the tray slips of Robert Pirsig, described in his sequel to Zen and the Art of Motorcycle Maintenance called Lila. Do you want to refactor your essays in a similar way you would refactor software? Or do you want to keep personal knowledge base, which is easy to manage? Why don't you try FreeMind? Do you want to prioritize, know where you are, where you've been and where you are heading, as Stephen Covey would advise you? Have you tried FreeMind to keep track of all the things that are needed for that?

在進行教學前,先摘要說明一般操作會用到的步驟:
新增新智圖、更改節點文字、新增下一層(子節點)、新增同一層節點(兄弟節點)、移動節點、刪節點、存檔、匯出。
所需要的操作,可以完全用鍵盤的上下左右+Enter+Insert+Del 七個鍵來完成。

下圖第一張,是安裝好後執行的畫面,我是關閉舊檔另開新檔,所以是「心智圖2」



先來把心智圖的項目名稱改掉吧,直接用滑鼠點在名稱上即可進入編輯模式,不過這是在端末節點才有效,對非端末節點來說,應該按 Alt+enter, 按滑鼠右鍵也看得到相對應功能:



要在某節點上,增加下一層的新節點,也就是俗稱的子節點,這步很簡單,按 "Insert" 鍵即可。當然要給名稱,名稱若要修改的話,請見上一步。若是想建立的是同一層的兄弟節點,請見下一步:



接下來,要增加同一層的節點時,也就是俗稱的兄弟節點,只需要按「Enter」鍵即可。這邊要說明一下焦點的移動,可以透過鍵盤的上下左右鍵移動,也可以用滑鼠,因為對滑鼠很敏感,因此請小心移動滑鼠。

若您是要增加下一層的子節點,請見上一步,或用移動法搬移,請見下一步。



若層次錯了,想移動,只需要用滑鼠「抓住」即可移動,這一點自行試試,就是在要移動的項目上按左鍵不放再移動滑鼠,這邊先示範移到不同父節點。下一步示範移動到同一層的不同位置。



同一層的兄弟節點順序也類似上一步的移動方式,只是要注意的是想移到最後一項時,其實只要將目標位置改成父節點即可放在最後面。



關於移動還有一種,就是想放在視窗上不同位置。通常 Freemind 會自動排位置,照預設是一直往下放,若你想四面八方的放,那只好自己拖移,也很簡單,不過要自行練習。



我把最後結果顯示如下:



每個人的內心通常雜亂無章,運用上面的移動可以協助你好好整理思路,算是非常有用的功能。這邊再介紹一項利器,就是可以把項目縮起來,讓你暫時隱藏其他事物而專注思考特定項:




Freemind 有它自己的格式,若你想匯出成不同格式,底下畫面說明可以匯出的種類,算是非常多樣,但是匯出後無法匯入。