2011年3月19日

日本祈福與福島核災

日本這次發生誇張的地震和歷史性的海嘯,在慶幸不是台灣的同時,
祝福他們,希望他們能夠早日重建完成,我相信強大的日本,
絕對可以在短時間內重建,恢復如常。

這次,我繼四川地震、八八風災後,第三次捐款,
同樣捐助了3000元台幣,雖然不算太多,但以我目前的收入來說,
是3日所得,算是我能力所及的,因為我最近比較忙碌,
經常加班,恐怕沒辦法有力出力,錢,大概也只能出這些,
希望大家都能幫忙,讓日本能更快得回覆原來生活。

至於福島的核災,現在很多媒體報導的很誇張,
我實在不想點名,但有些新聞台報導的實在太離譜了,
記得第二天某新聞台的報導,
一邊說原能會說輻射線對台灣沒影響,風向也不對,
但另一邊打跑馬說輻射線晚上就會來台灣,這實在是......

在到達第4天時,某新聞台晚上的新聞評論,
幾個名嘴一邊說反應爐已經破洞了,一邊說水不夠,
一邊說他們拿水桶衝過去潑水,
這看得我笑到眼淚都噴出來了,這也太扯了......

我認為,日本核電廠的問題算嚴重,
但並沒有嚴重到會發生核子爆炸,也不會發生核子爆炸,
事實上,他們第一時間反應爐就停機了,
核子反應第一時間就降到最低了,所以不會核爆,
但因為核子反應「不會完全停止」,因此需要持續水循環作降溫,
而供水設備沒電、故障,才引發後續問題。

到了現在第6天,事實上狀況「漸趨穩定」了,
從新聞來看,他問題的背景是:
遭遇地震+海嘯時
1號、2號、3號反應爐機組運作中
4號、5號、6號停機歲修中(全世界核電廠的反應爐機組,運作1年半都要歲修一次)

所以4、5、6正常來說,反應爐是不應該有問題的。
所以4號失火,第一時間日本官防長官(台灣的行政院長)說正在瞭解情況,
因為不應該有問題,而之後的瞭解是,「廢燃料棒儲存槽失火」。

到今天(2011-03-19)原能會發佈的狀況是:
1號反應爐機組,反應爐圍阻體正常,冷卻水(海水)有進入,勉強可控制
2號反應爐機組,反應爐圍阻體「可能受損」,冷卻水無法進入,無法控制
3號反應爐機組,反應爐圍阻體「可能受損」,冷卻水無法進入,無法控制
4號「廢燃料棒儲存槽」「可能受損」,冷卻水無法進入,無法控制
5號「廢燃料棒儲存槽」原本水位降低,柴油發電機已能正常動作,冷卻水循環已經正常
6號「廢燃料棒儲存槽」和5號相同,柴油發電機已能正常動作,冷卻水循環已經正常

所以現在要注意的是:
1. 4號儲存槽是否有受損,這關係到輻射線是否外洩?
4號儲存槽的冷卻水循環何時能恢復?
2. 2號跟3號的反應爐圍阻體到底受損多嚴重,是變形還是破洞?
因為這關係到輻射線外洩的嚴重程度
3. 2號跟3號的冷卻水循環,或者外部海水注入,何時可以完成?

這3個點才是目前要關注的,這3個點,也才是輻射線外洩程度的關鍵問題。
至於爆炸,目前我認為再發生爆炸的機會不大,核爆的可能性更低,
而輻射線外洩,是「已經洩了」,但「洩漏程度」是目前的問題點。

至於台灣,我認為台灣的核電廠安全係數比福島的高一些,
就原能會的新聞來看,台灣核電廠的選址地形、備援機制都要比日本福島的好很多,
同樣的災難發生在台灣,可能不至於讓核電廠出問題,
但我認為,台灣的核電廠未必會出現和日本一樣的災難,
卻可能因為其他災難造成其他問題,因此我認為,加固或增加安全機制有必要性,
但因此反核我就不認同了。

最後,我的結論是,在為日本祈福,有錢出錢有力出力的同時,
對於核能的問題,還是應該理性一點看待,不應該被一些怪怪的媒體報導左右,
然後搞得認為世界末日或者福島要核彈爆炸了,
以冷靜的腦袋,儘可能的瞭解資訊,讓自己不要驚慌,應該是這時候比較適合做的事。

OpenOffice巨集參考資料

繼上篇的UNO架構介紹和上上偏的簡單範例後,
相信已經有能力寫個HelloWorld的Macro(巨集;之後都會直接用Macro表示)了,
但記得我在很多年前寫過,要學習一個新的程式語言,需要知道幾個部份:
1. Main結構
2. 程式語法
3. API或Class Reference

從上上篇的範例看完,以及上篇的UNO解說,
我相信1和2大概都能掌握了,接著是3的部份,而這篇,
就是列出一些我在寫OpenOffice時,參考的網站、文件。

書:
我在學習OpenOffice Macro時,第一個找的是書,但很不幸的,
中文書是完全沒有的(正體、簡體),
我找到的一本值得的書是:

這本書基本上不錯,但仍舊有缺點,它細節的部份很多都略過了,
所以看起來也會有一知半解的感覺。

文件:
針對OpenOffice Macro的基本概念和語法教學,寫得最好的我認為是:
這個算是Oracle(前Sun)提供的官方教學文件,
針對OpenOffice的BASIC Macro寫得非常詳盡,
事實上,我認為前面介紹的書,有一些是從這裡面Copy出來的。
雖然文件是介紹StarOffice的BASIC,
但事實上,
OpenOffice的BASIC和StarOffice的BASIC在語法上幾乎是一樣的。

網頁:
 針對OpenOffice BASIC,OpenOffice網站的教學當然不能錯過:
OpenOffice.org BASIC Programming Guide

這個教學頁面有提供簡體中文的翻譯,如下:
OpenOffice.org BASIC 編程指南
這個教學頁面我認為部份內容寫得還ok,
但它幾乎沒有圖片,解說內容也很少,看得很模糊,
看完之後,感覺上還是甚麼都沒看懂,
但基本上,有比沒有好,還是一個值得參考的教學頁面。

OpenOffice.org Developer's Guide
這個同樣是OpenOffice wiki內的教學頁面,
它的特點是,它介紹了OpenOffice內多種語言的開發,
包括OOo BASIC、Java、C++...等,
但如果前面的BASIC Programming Guide是有比沒有好的話,
這個頁面就實在是不怎麼樣,每個篇幅看下來,
反應就是,只有2句話我能看懂甚麼... :(
但,憑著它有多個語言的描述,勉強可以參考參考。

The OpenOffice.org API Project
OpenOffice.org Global Index A
OpenOffice.org Module star
這3個網頁是OpenOffice API內的頁面,
它們其實是同一串網頁的東西,
它們其實就是UNO的API Reference,
第2個網頁是將所有Service、Method、Properties全部以字母排列,
然後列出來。

第3個網頁則是以Module Name來排列描述的樹狀頁面。

第1個網頁則是它們的首頁,
如果知道Module、Method、Property的名稱,
首頁提供了很難用的搜尋引擎可以直接尋找。

我認為這幾個API Reference的頁面非常重要,
它提供了OpenOffice能夠使用的所有API的說明,
也非常有價值,但它寫得很爛,遠比Java在使用的API Reference爛得多,
我不瞭解,明明有Java的API Reference這麼好得樣板,
為啥還要作成這種鬼樣子。

Calc Functions listed by category
這同樣是OpenOffice wiki的網頁,但內容非常不錯,
我們回到最初提過的,我們這麼辛苦的學習OOo Macro,
就是為了使用它的Calc幫助我們運算和資料整理,
Calc裡面最強大的莫過於它的許多「function」,
這些function能幫助我們進行數學、財經...等運算,
透過Macro,我們還是要知道這些function怎麼用,
這個頁面,就是列出了所有Calc的function,
並有簡單的解說和Example教我們怎麼使用它。

The OpenOffice.org Wiki
因為前面的推薦頁面中,很多個都來自OpenOffice的wiki,
因此,還是把它的首頁列出來推薦,
這個可以算是前面幾個教學頁面的目錄。
不過因為它是針對OpenOffice的wiki,
而不是專門針對OpenOffice開發,
所以大部分的教學都還是針對OpenOffice的操作進行說明和教學。

OpenOffice Help:
沒看錯,就是OpenOffice的Help,
和前面的Calc Functions listed by category類似,
OpenOffice的Help能夠提供我們Calc Function的使用說明,
還有一部分BASIC的解說,包括OOo BASIC的資料型態,
運算符號和方式...等。
OpenOffice的Help最方便的地方在於,它可以直接搜尋,
雖然命中率有點低,但相對來說,還是比較方便的。

範例程式:
要使用OpenOffice的Macro,通常需要安裝OpenOffice SDK,SDK安裝好後,除了相關的Library外,還提供了一些範例和說明,
路徑在:
OpenOffice.org 3\Basis\sdk\examples

這裡必須要提一下,它的範例,我個人覺得有些複雜難懂。

論壇:
Macros and UNO API(OpenOffice Forum)
壓箱寶一定要放在最後面。
因為OpenOffice的Macro開發實在是文件稀少,
很多人都有相關的疑問,因此它的Forum真的是很熱鬧,
裡面有幾個國外的高手,看起來從很早前就在用OOo Macro了,
不少相關的解說和文章都相當的有用,直接提供了Code。
事實上,我看了前面的API Reference,
還是沒辦法獨立的根據API Reference寫出OOo的BASIC程式,
需要到Forum裡面查看看有沒有人有寫過並po文,
交互參考後才寫得出來,由此可知這個Forum的強大。

到這裡,我認為OpenOffice Macro入門所需的知識應該已經夠了,
下一篇開始,我會將這段時間的研究後得到的一些技巧性的程式段po出來,
一些是來自於論壇的Code的改寫,一些則是翻翻找找後拼湊出來的,
還請期待。

OpenOffice Macro API(UNO)架構說明

承接前一篇,在知道了簡單的開發環境和程式流程後,
這篇簡單的介紹OpenOffice Macro的API的架構,
瞭解架構後,可以比較容易瞭解API怎麼使用。

要接觸OpenOffice BASIC前,
我原本認為它的BASIC語法應該會跟VBA差不多,
學習下去後才發現,它跟VBA完全不同,類似的只有基本語法,
但API的使用,操作完全不同,基本上沒辦法無痛,
一定要下去瞭解UNO才有辦法使用。

OOo(OpenOffice.org簡稱)的Macro支援很多套程式語言,
包括:BASIC、Java、Java Script、C++、Java BeanShell Script

它們的核心,都是呼叫OOo提供的一整套API,
這套API被稱為UNO(Universal Network Objects),
透過UNO,上述所有語言都能呼叫和操作OpenOffice,
好處是跨語言,壞處是,就算只是想學BASIC,也得瞭解UNO。

如果先前學的是Java,要瞭解UNO很容易,UNO不愧是Sun設計的,
很有Java的概念。

一般來說,常見的UNO概念圖如下:

這裡我不得不說,我第一次看得時候,看一眼就沒興趣了,
但事實上它只是描述了一個簡單的架構。

UNO(Universal Network Objects),我猜測,
也許是為了要設計一個能跨平台使用的溝通模式,
又因為是Sun,所以以Java的物件導向為架構,用網路來實做,
我想用網路而不用其他溝通機制的原因,
應該是因為網路是各平台都有,
而且在UNIX、Linux的環境,他是很基本又常見的溝通機制,
也因為這樣,取名為Universal Network Objects。

簡單的說,它跟Java的物件導向概念雷同,它們的類比如下:
UNO ServiceJava Class
UNO PropertiesJava Object Properties
UNO MethodJava Object Method

簡單的說,它是以Java的物件導向為基本概念,
所有的Java Class在UNO上,都稱為Service
每個Service都有自己的Properties和Method

要使用Service,則和使用Java Object有些許不同,類比如下:
UNO:
Dim oDesk as Object
oDesk = createUnoService ("com.sun.star.frame.Desktop")


Java:
Object oDesk;
oDesk = new com.sun.star.frame.Desktop();


這樣應該很清楚,差異在於,要定義物件時,使用
Dim <名稱> as <物件名稱>

要實體化時(UNO下應該說是建立Service),使用
<名稱> = createUnoService("com.sun.star.frame.Desktop")

這樣描述,應該就能清楚的瞭解UNO的Service概念,
而要使用UNO Service也很容易,同樣以上面的oDesk為例子,
可以如下使用:
Dim oDoc as Object
oDoc = oDesk.loadComponentFromUrl("private:factory/scalc", "_blank",0,Array ())


在這裡,loadComponentFromUrl()就是com.sun.star.frame.DesktopMethod
使用上和Java的語法差不多。

要定義或修改Properties也很容易,類似如下:
oCell.String = "我的第一個Input"

這樣就能修改oCellString這個Property
並將內容改為"我的第一個Input"



最後,同樣出個簡單的問題,答案很好找,
卻在使用時頭一個會遇到疑問。
在Java中,每個Object幾乎都有相對應的Object名稱,
例如:
JFrame f = new javax.swing.JFrame();

像是JFrame f裡面的JFrame。

那類比到UNO Service時,這個建立後的Service,
是否也有獨立的名稱?
如果有,那會是甚麼?
如果沒有,那又會是甚麼?

補充:
漏了一個部份.....
我們回到前面常見的UNO概念圖,圖上在Service的外圍,
有一個ModuleService包裹住,Module是甚麼?
這也是很簡單的概念,同樣取自Java,類比如下:
UNO ModuleJava Package

實際上,和Java的Class一樣,OpenOffice的Service根據不同的用途,
會被包裹在不同的Module裡面,例如:
javax.swing.JFrame

我們可以知道JFrame屬於javax.swing這個Package,同樣的,在UNO中
com.sun.star.frame.Desktop

Desktop就是屬於com.sun.star.frame這個Package