2006/12/25

SAC - Solid State Society (SSS)

這部攻殼Stand Alone Comples的OVA作品,表面上看起來延續了前面的劇情,但實際上劇情內容並沒有像Innocence一樣那麼艱澀,網路上的討論文章,有褒有貶,Solid State Society這篇文章批評的內容與質疑的地方,確實都是SSS劇情裡隱藏的缺陷,但是仔細想想,卻似乎可以自圓其說。



舉例來說,劇情一開始就以連續自殺事件作為「傀儡迴」的引子,但不合理的地方在於,為甚麼九課在處理自殺犯人的時候,沒有採用光學迷彩解決犯人,而讓犯人直接在他們面前自殺成功,除非編劇想要在這裡顯示德古沙的領導跟素子少校還有一大段差距,才故意讓他們做出錯誤的判斷。這一段劇情跟後面少校以光學迷彩突然出現阻止德古沙自殺的劇情差距甚大。但巴特卻又在後面說除了少校外,他最佩服德古沙,也許他只是佩服德古沙有這個勇氣放棄左輪手槍的堅持,電子腦化義體化。



老化的社會在未來的確會成為重大的社會問題,於是產生了老人的看護網路,連接著全自動老人看護系統,實行了最低限度照顧措施的老人,但卻因為這個網路而產生了許多「貴腐老人」,但那個時代已經是義體與電子腦技術普及的時代,照道理說,應該不會有很多人老化,因為多數人都會在老化前選擇電子化。兩萬名失蹤兒童,也是為了吸引這些老人而讓看護網路產生的工具,以便吸引這些老人把財產合法交給政府。



不過如果仔細想想,德古沙不是也一直地抗拒義體化,顯然義體化並不是大家都能接受的,那麼這些老人的存在就是合理的。但利用兒童去繼承老人財產,也不是那麼合理的方式,要讓這些老人交出遺產,只要透過立法直接接收就可以了。雖然這一段的情節有點怪怪的,但故事能將高齡化的問題,提出時代的大問題,確實也是件不容易的事。但正如同一開始提到的blog文章所說的,這樣的情節跟「老人Z」比較起來,的確是略遜一籌。



少校的消失再出現,九課的德古沙轉變,巴特還是一如往常沒變,課長為了權宜,領導失去少校的九課,改變自己的定位角色,致力成為用八成的力量解決三件案子的組織,兩年的變化這麼大,真的讓人吃驚。



SSS一樣在劇情當中,提出了許多名言,不過值得欣慰的是,沒有像Innocence那麼高深莫測。

1. 「這樣好嗎? 還未獲得許可啊。」「如果無人知道潘朵拉之盒曾經打開過,就不算是違反承諾了。」

2. 「與其花費十成的力量解決一件案子,還不如創造一個能夠用八成的力量解決三件案子的組織。」

3. 「你考慮一下再結婚的事吧,孤獨的老人可是很悲慘的。」「因為我不想拿著一些帶不進墳墓的東西。」

4. 「子女像父母,機器像人類,你卻一點也不像我。老鴉巢中能飛出鳳凰,我很欣慰,多注意身體健康啊。」

5. 「課長,我們又能做些什麼事呢?」「我現在能回答你的,就是我們只能在管理自我的規範之中,無奈地與其對抗下去。」

6. 「超越了表象,我到底看透了什麼?你覺得我是為了什麼而在網路中徘徊的?真理? 知己?還是某個特定的人呢?也許只是把自己的無能,怪罪於組織或系統。」

7. 「雖然身處規範之中的時候,覺得十分無趣,但是毫無規範的行為本身,卻又無法作為行為成立,結果完全相同。」





Solid State Society

攻殼機動隊 S.A.C. Solid State Society

Solid State Society

攻殼機動隊 SAC Solid State Society

2006/11/28

談美 by 朱光潛

美學在理性主義當道的現代社會中,總是無法受到重視,小朋友們會學英文、學算數、學畫畫、學鋼琴,但到了中學時代以後,升學成了唯一的一件事,漸漸地,大家學會算圓錐曲線、學會語文的修辭,但忘記了小時候塗鴉的快樂,所以很多人都跟我一樣,繪畫只停留在幼稚園的程度,也忘記了怎麼欣賞美的事物。

談美這本書,是新文化運動後的作品,在朱自清的序中,就提到當時大家只知道不斷複製西洋名畫,卻不懂得美感究竟是什麼。其實每一個人的人生,都是一件唯一的藝術作品,大家每天會琢磨塑造這件作品,但每一個人的功力用心不同,結果就跟著不一樣,有些即能稱上是一件藝術品,有些就不行。人生可分成實用、科學、美感三種活動的綜合體,只有這三者平均發展,才有一個美滿的人生。

作者朱光潛在書中明確說明美感的定義,然後將一般人的誤解一一解釋排除,例如美感不是快感,美感不是聯想(因美感不該帶有理性思考,他是純粹直覺的),考證與批評不是欣賞,自然並不是美,遊戲是藝術的雛形,美感一定有想像加上情感,再加上配合的格律。學習從模仿開始,想要學一門藝術,就得先學它書特殊的筋肉技巧。

一般人只會在面對大自然,或是看到帥哥美女,就認為這是美的東西,發出讚嘆之語。然而作者告訴我們,事物的表面不能決定美醜,重要的是每一個人自己怎麼觀察,怎麼欣賞,在感受到美的境界的一瞬間,會忘記自己的存在,進入美感的世界。

作者以作詩為例,討論創造與模仿的差異,學習一項藝術,要先學會該項藝術的技巧,而學習是從模仿開始的,思想離不開語言,語言離不開喉舌的動作,所以雖然作文得先學會朗誦,朗誦既久,則古人之聲就能在喉舌上留下痕跡,等到下筆時,自然就能因襲這活動,而創作出詩文,這個道理,直到現在才瞭解。因為學生時代總是以紙筆的考試為主,自然而然就習慣以默讀的方式,配合筆寫讀書,而現在來看,這長久的習慣,對學習詩文創作來說,卻是一種慢性毒藥。

家裡的小朋友會跟著大人念詩或三字經,往往念了一兩個星期,他就能記熟那些詩文的音韻,自然而然就默記下來了,而我們還只能透過眼睛,然後唸出文字,無法背誦,我想這就是學習語言的黃金時期在3~5歲的原因吧!

美感不在外物上,而在每一個人自己觀察事物的角度與方法,當忘卻自我、沈醉的事物形象的那一瞬間,美感油然而生,而自己也彷彿置身於另一個世界。

軟體的美感存在於Pattern的技巧上,Pattern是軟體設計常見的樣式,在一步一步重構的過程中,軟體工藝品也逐漸顯露出美的形體,當忘記自己的時候,聯繫軟體與程式設計師的,就是藝術的美。

2006/11/20

品牌思考很簡單-只要跟15個哲學大師借腦 by 湯姆.布勞恩

從書本的名稱,就知道內容是以哲學的角度來觀察品牌思考。「哲學」對一般人來說是種沈重的高談闊論,沒有很多人喜歡討論一些看起來就是真理的哲學問題,例如「價值觀是什麼?」「真實世界的組成是什麼?」「人的認知世界是什麼?」這樣的問題。但這些奇怪的哲學問題,都是在討論「人」以什麼角度、要以什麼態度面對這個世界,建構自己的價值觀與生活態度,才能真正地瞭解人的世界。

這15個西洋哲學大師,各有其傳誦於世的經典理論,這本書把這些理論套用在品牌管理上,因為品牌只存在於「人」身上,透過哲學思考的引導,我們就能更深入瞭解與掌握品牌管理的哲學。

博士的英文是Doctor of Philosophy(Ph.D.),在維基百科的解釋說道,哲學博士並不一定修讀「哲學」,而是指博士對其知識範疇的理論、內容及發展等都具有相當的認識,能獨力進行研究,並在該範疇內對學術界有所建樹。但更深層地來看,我們可說所有科學的根源都是哲學,也就是根源於一般人的思考方式。

以下以章節目錄為順序,列出閱讀過程中圈點的話。
# 1 赫拉克利特斯——一個起點
思考課題:品牌的經營必須立足於不斷變動的基礎上。
世界永遠處於變動的狀態下
變動的狀態可適用於萬物之上
品牌只存在於消費者的腦子裡,虛幻無常,不可以視為穩定的假象,沒有任何事物是理所當然的

# 2 蘇格拉底——詰問的藝術
思考課題:定義品牌價值觀與品牌策略,不可忽略慎密嚴謹的重要性。
道德哲學關注的核心是理解我們行為的動機
思想背後有兩個驅動力:為了追求真理而不斷質疑發問,不屈不撓地探求理解真理而影響我們的行為
起點是不斷提問,終點是造成行為的改變
不要把事物是為理所當然,以積極態度謹慎提問,獲得更深入的理解,只要感覺起來不像真理,就不要輕易接受

# 3 柏拉圖——勘透表象
思考課題:你的品牌必須要有兩種本質:變與不變,不斷變化的表象經驗界,與恆常不變的真實理型界。
理型論
一切事物都在形成的過程當中,沒有任何事物是存在的
必須把重點放在品牌能夠成為什麼,而不在於品牌是什麼。在形成的過程中,一邊不斷變化品牌的虛幻面,一邊賦予品牌存在理由的不變事物(價值觀)
柏拉圖的洞穴迷思:直接經驗中的品牌,也只反映出某種真實的表象而已
成功的品牌必須同時「合乎當下」又「恆久不變」

# 4 亞里斯多德——結構的重要性
思考課題:絕對要問品牌的目的是什麼,才能勝過其他品牌。
在經驗界中檢視品牌,並問「品牌存在究竟有什麼意義?」
決定的要素不是零件的物質特徵,而是車子的結構與形式。車輛的形式是品牌的核心
品牌四因:物質因、動力因、形式因、目的因
是什麼、來自哪裡、看起來什麼模樣、能夠造成什麼效果

柏拉圖的無形價值觀 vs 亞里斯多德的功能性利益(目的)

# 5 笛卡兒——理性的應用
思考課題:找出維繫品牌與消費者之間關係的原因,你必須深入消費者的腦子。
Cogito ergo sum 我思,故我在
我們是否能夠確知任何事物?
數學,內部一致性,概念科學
品牌管理的基礎:若X則Y,思考方法必須奠基於無可置疑的前提之上,在這個基礎上建構知識的過程,必須完全透明而可供人檢視
世界存於兩個層面之上:物質的層面、思想的層面
品牌就是想法
「為甚麼」
笛卡兒的二元論,消費者內心的世界、看得見摸得著的世界
竭盡全力找出品牌中無可置疑的核心,也就是維繫品牌與消費者關係的原因,了解消費者內心深處的動機及思考過程,然後就可以循著理性與邏輯逐步發展

# 6 史賓諾莎與萊布尼茲——系統性的方法
思考課題:品牌的陳述必須不斷加以證實。
史賓諾莎:在一個完全依循數學原理和確定性而運行的世界中,哪裡有「上帝」存在的空間
否認物質與心智之間有所區別
笛卡兒:人有軀殼與靈魂 史賓諾莎:每個人都是一個統一的實體,身體與靈魂只是談論一個人的兩種方式而已,不能分開

萊布尼茲:分析陳述(可為真或偽)、綜合陳述(真偽取決於陳述本身以外的事實)
談論品牌時,要區分確實為真的陳述,和我們自己希望為真的陳述。如果是綜合陳述,就得不斷加以證實

# 7 洛克——經驗主義的傳統
思考課題:無論如何,一定要緊緊把握住品牌的特色。
我們對於一切所擁有的知識,都是透過意識的經驗(智識上、情感上、感官上),這些輸入都稱為「觀念」
經驗主義:觀念原本存在於外在,透過感官傳遞到大腦(內在),然後才組合成有意義的東西

經驗主義 vs 純粹理性主義

品牌建構的重點不在解譯消費者最初的動機,而在創造(對消費者來說)有意義的觀念
所有品牌都有客觀、主要屬性(可測量的),還有次要屬性,取決於品牌與每一個消費著之間的關係,消費者的主觀經驗

創造品牌特色,和世界的現況保持一致

# 8 休謨——理性的限制
思考課題:把注意力放在消費者的感受與情感上,不要讓自己成為品牌理論的奴隸!
英國經驗主義的高峰
一切都是知覺,所有知識來自於經驗。品牌是高度主觀的實體,奠基於各種感官提示之上
世界是一堆個人知覺與經驗的組合,沒有任何證據證明,這一切之間都互有因果關係
可能性
品牌管理的關鍵是感受、情感、愛好,而不是思想
沒有任何事物是確定的,因此我們應該隨時都在實驗
理性有其限制,把注意力放在消費者的感受與情感上

# 9 盧梭——感受的重要性
思考課題:品牌關乎感受與情感,品牌的力量來自於能夠遠離理性。
社會契約論:人生而自由,卻無往不在枷鎖之中。人民的「全體意志」概念
愛彌兒:教育是一種發展過程,受「自然」引導,而不是刻意培育
以自然取代理性,訴諸情感而不是理性,情感價值是品牌塑造的中心
人希望能夠與群體的情感表達保持一致的慾望 -> 微觀行銷,沒有一體通用的產品

# 10 康德——平衡的觀點
思考課題:在品牌行銷當中,只要改變思考方式,就能夠改變消費者及市場。
結合了理性與經驗主義,終結了「形上學」的辯論,明確指出我們根本無法證明上帝存在(也無法證明不存在)
「純粹理性批判」
我們只能知道我們能夠知道的事情,受限於我們能夠知道的事物範圍,受限於理解的儀器(感官與心智功能),所有儀器都負責一項特定任務
別輕易假設自己能夠知道的事情,等同於該項總和。任何研究都只代表部份看法
我們在世界裡所看見的關聯,就是讓人生可以管理的要素,這些關聯奠基於我們內在的思想架構,關聯取決於主體而不是客體的性質
世界沒有客觀的範疇,只要改變對他們的思考方式,就能夠改變消費者、市場及品牌的分類範疇,
最重大的改變,通常來自於對「範疇」的認知變化,例如切割市場的方式


# 11 黑格爾——過程的優先性
思考課題:品牌行銷的關鍵在於搶先達到下一個重要的「合題」。
系統化的變動過程,把歷史視為過程
過程不但具有潛在的結構,也有最終的目的,變化不是單純為了變化而變化,而是不斷朝一個目標前進
生命的本質Geist透過歷史過程,逐步朝向徹底和諧與自知的最終狀態前進
右翼:希特勒 左翼:馬克思(唯物史觀)
要邁向前進,唯一的方式就是解決目前的衝突與緊張:辯證過程
正題 -> 反題 -> 合題
試著把若干互相衝突競爭的性質、價值觀、優點放在一起,站在當今的時代精神的先鋒地位,恰是時候
搶先達到下一個重要的合題

# 12 尼采——價值的創造
思考課題:價值觀是品牌的核心。要成為「超級品牌」,就得盤據符合這些價值觀的領域。
世界是一個實體,一個我們能夠完整經驗的實體,沒時間理會存在於我們理解範圍之外的世界,也沒有時間理會上帝,「上帝已死」
不是設法讓現存的價值觀與現況產生關聯,就是要創造新的價值觀
品牌想要建立獨特性,唯有創造自己的價值體系
「權力意志」,對這方面徹底發揮潛力的人,稱為「超人」,如果品牌展現出這種完全按照本身心意而行的意志,稱為「超級品牌」
精明的競爭者會重新定義市場與市場規則
價值觀是品牌的核心,品牌都將成為有機體

# 13 維根斯坦——把品牌視為工具
思考課題:品牌的意義是其各種用途與價值觀的總和。以這種方式管理「意義」,就是現代品牌管理的精髓所在。
把品牌視為圖像
知覺、思想、語言及表達的關係,語言的中心地位,意義圖像理論
不論是圖像還是現實世界,都具備有同樣的「邏輯形式」
品牌「代表」了某一件事物
品牌行銷者必須確保自己的品牌代表不只一件事物
把品牌視為工具 -> 品牌成長策略


# 14 存在主義——把品牌視為個體
思考課題:品牌存在主義為我們提供了另一副可用來看待成長機會的哲學鏡片。
齊克果、沙特
過程與體系都是不存在的,只有個體才存在
對於任何哲學性的事物的理解,都必須奠基於對個體如何以及為何存在的瞭解
存在主義就是探討個人如何透過自己所做的決定,而為自己的人生賦予意義
海德格
品牌是一個個體,重點不在於賦予品牌意義,而在於賦予其生命
創造一個品牌世界,「體驗行銷」
為品牌賦予自由,給予品牌自由發展與自我表現的空間


#15 波普——尋求更佳的模型
思考課題:不要再抱持確定性的觀點。我們應該隨時尋求更佳的新思考方式來取代現有的方式。
向確定的知識說再見
一旦模型出現不足之處,一定會再出現另一個新的知識架構
顯著的確定性只是人類思想的產物,不是客觀事實
沒有理論能被證明為正確,但任何理論都可以被證明為偽
培養批判的文化,批判是進步的起點

# 16 眺望未來——哲學在品牌塑造中的真正角色
大多數人在大部分的時候,都是已可辨識的實體加以思考
人生就是把這些實體找出來,並組合成多少令人滿足的狀態
我們的思考過程,主要適合於建構關聯
品牌創造慾望,不只單純滿足慾望
品牌塑造主要就是關於一般人的思考方式

2006/11/17

Portlet JSR-168 Note

Portlet JSR-168 Note

************************
PLT.5 The Portlet Interface
PLT.5.1 Number of Portlet Instances
每個portlet container針對每一個portlet definition,只能產生一個object

PLT.5.2 Portlet Life Cycle
portlet的life cycle透過javax.portlet.Portlet裡的init, processAction, render, destory methods來處理

PLT.5.2.1 Loading and Instantiation
portlet container在啟動時或是portlet被呼叫時,負責loading and instantiating portlets

PLT.5.2.2 Initialization
container以implement javax.portlet.PortletConfig 的唯一物件,透過javax.portlet.Portlet裡的init初始化portlet,並提供定義裡的ResourceBundle。PortletConfigImpl也必須提供描述portlet runtime environment(context物件, implements java.portlet.PortletContext)的access介面

PLT.5.2.2.1 Error Conditions on Initialization
initiallization時,portlet可能會throw UnavailableException或PortletException,這時候就必須要呼叫portlet的destroy
在portlet初始化失敗後,可以再次重新嘗試初始化,但必須在等待一段時間之後
初始化時的RuntimeException要以PortletException的方式處理

PLT.5.2.2.2 Tools Considerations

PLT.5.2.3 Portlet Window
preferences objects是以定義中的初始值初始化,container要提供客製化preferences物件的機制
當portlet放入portal page中,就有一個配置的preferences object,portlet跟preferences object合在一起稱為portlet window,由container負責維護他們之間的關係
管理配置pref objects與產生portlet window的方式交由container implementation,也可提供進階功能,例如階層式管理pref objects

PLT.5.2.4 Request Handling
javax.portlet.Portlet定義了processAction, render兩個methods
當container呼叫portlet的processAction時,request會參考action request,當container呼叫render時,request會參考render request
通常client的request是由portlet產生的URL trigger,稱為portlet URLs,一個portlet URL會指向一個特定的portlet。portlet URL有兩種,action URLs 或 render URLs
當client request經由action URL被trigger時,container要先處理目標portlet的processAction,然後再處理其他portlet的render。當client request經由render URL被trigger時,container就執行所有portlet的render
如果portlet有caching功能,container可選擇不執行render,而使用cached content

PLT.5.2.4.1 Action Request
在處理action request時,portlet會以action request裡的參數更新自己的state
Portlet裡的processAction有兩個參數,ActionRequest, ActionResponse
ActionRequest提供access許多參數資訊的介面,action request, window state, portlet mode, portal context, portlet session, portlet preferences data
在處理actio request的時候,portlet可以讓container重導到某個特定的URL
portlet在處理action request時,會在ActionResponse中改變portlet mode與window state,portlet mode會影響render的結果

PLT.5.2.4.2 Render Request
Portlet的render有兩個參數,RenderRequest, RenderResponse
RenderRequest提供許多參數的存取介面,render request, window state, portlet mode, portal context, portlet session, portlet preferences data
portlet由RenderResponse的writer產生content,也可以交給servlet或jsp處理

PLT.5.2.4.2.1 GenericPortlet
render會set title(在定義中)並執行doDispatch
doDispatch幫忙根據portlet mode處理request,doView:處理VIEW, doEdit:處理EDIT, doHelp:處理HELP
如果portlet的window state為MINIMIZED,則render不會執行任何一個render methods

PLT.5.2.4.3 Multithreading Issues During Request Handling
container負責處理concurrent requests的問題,Portlet developer也要在processAction與render中處理concurrent的問題

PLT.5.2.4.4 Exceptions During Request Handling
portlet可能會throw PortletException, PortletSecurityException, UnavailableException
PortletException表示處理request時發生錯誤,container必須要停止繼續執行該portlet,但其他portlet還是要繼續處理render。
PortletSecurityException表示request因user沒有足夠的權限被中止
UnavailableException表示portlet暫時或永久不能處理request
RuntimeException的處理方式跟PortletException一樣

PLT.5.2.4.5 Thread Safety
request跟response object都不保證thread safe

PLT.5.2.5 End of Service
當container因記憶體不足或shutdown的時候,可呼叫destroy後結束portlet object


************************
PLT.6 Portlet Config
PLT.6.1 Initialization Parameters
PortletConfig的getInitParameterNames, getInitParameter會傳回portlet定義中的initialization parameter names/values

PLT.6.2 Portlet Resource Bundle
在定義中的裡有title, short-title, keywords
如果有定義com.foo.myApp.QuotePortlet,container必須要產生ResourceBundle提供大家使用,render method會使用PortletConfig裡的ResourceBundle取回ResourceBundle裡定義的title資料

************************
PLT.7 Portlet URLs
portlet需要產生參考到自身的portlet的URL,作為content的一部分
PLT.7.1 PortletURL
portlet會藉由RenderResponse裡的createActionURL與createRenderURL產生PortletURL介面的實作,createActionURL產生action URLs,createRenderURL產生render URLs
因為有些container會產生一些狀態碼放在URL上,portlet開發人員不應該自己寫form並使用HTTP GET method取得資料
portlet可以在PortletURL中加入自己的參數,setParameter與setParameters
container必須要 "x-www-form-urlencoded"對參數名字與值編碼,但developer不需要encode parameter names/values
ex: PortletURL url = response.createRenderURL();
url.setParameter("customer", "foo.com");
url.setParameter("show", "summary");
writer.print("Summary");

PLT.7.1.1 Including a Portlet Mode or a Window State
portlet URL 必須要包含portlet mode的參數,PortletURL裡有setWindowState, setPortletMode兩個methods
ex: PortletURL url = response.createActionURL();
url.setParameter("paymentMethod", "creaditCard");
url.setWindowState(WindowState.MAXIMIZED);
writer.print("< FORM METHOD=\"POST\" ACTION=\""+ url.toString()+"\" >");

portlet不能設定未定義的PortletMode,會產生PortletModeException
portlet不能設定未定義的WindowState,會產生WindowStateException

PLT.7.1.2 Portlet URL security
PortletURL.setSecure可指定為HTTPS or HTTP,如果未指定,則跟current request一樣


************************
PLT.8 Portlet Modes
VIEW, EDIT, HELP

PLT.8.1 VIEW Portlet Mode
Portlet一定要support VIEW mode,overriding doView

PLT.8.2 EDIT Portlet Mode
Portlet不一定要支援EDIT mode
overriding doEdit

PLT.8.3 HELP Portlet Mode
Portlet不一定要支援HELP mode
overriding doHelp

PLT.8.4 Custom Portlet Modes
Portal廠商可以自己定義自己的mode,要寫在定義檔裡的custom-portlet-mode裡面,在PLT.A裡面有建議提供的自訂Portlet Modes
ex:

Creates content for Cut and Paste
clipboard


Provides administration functions
config


PLT.8.5 GenericPortlet Render Handling
GenericPortlet實作的render method會將request dispatch到doView, doEdit, doHelp,如果Portlet提供自訂modes,則必須要override doDispatch

PLT.8.6 Defining Portlet Modes Support
ex:

text/html
edit
help
...


text/vnd.wap.wml
help
...


***********************
PLT.9 Window States
window state代表portal page上可填寫的content畫面空間大小
標準有三種window states: NORMAL, MAXIMIZED, MINIMIZED

PLT.9.1 NORMAL Window State
PLT.9.2 MAXIMIZED Window State
PLT.9.3 MINIMIZED Window State
PLT.9.4 Custom Window States
ex:

Occupies 50% of the portal page
half_page



*****************
PLT.10 Portlet Context
PortletContext定義了portlet執行中的時候,Portlet application中的portlet能做什麼事情,例如使用PortletContext,portlet能夠log events, obtain portlet application resources, set/store attributes for other portlets/servlets

PLT.10.1 Scope of the Portlet Context
在containter中PortletContext的實作instance只會有一個

PLT.10.2 Portlet Context functionality
透過PortletContext,能夠 access context initialization parameters, retrieve/store context attributes, obtain static resources, obtain a request dispatcher to include servlets/JSPs

PLT.10.3 Relationship with the Servlet Context
context-wide initialization parameters跟servlet context的一樣
context attributes跟servlet context一起共用,透過PortletContext跟ServletContext取得的initialization parameters會完全一樣
透過ServletContext跟PortletContext存取的attributes都一樣

??? PortletContext必須處理ServletContext中所提供的temporary working directory (Servlet spec 2.3 javax.servlet.context.tempdir)

PLT.10.4 Correspondence between ServletContext and PortletContext methods
PortletContext必須仿照ServletContext提供 getAttribute, getAttributeNames, getInitParameter, getInitParameterNames, getMimeType, getRealPath, getResource, getResourcePaths, getResourceAsStream, log, removeAttribute, setAttribute


*********************
PLT.11 Portlet Requests
PLT.11.1 PortletRequest Interface
PortletRequest提供ActionRequest與RenderRequest共用的功能

PLT.11.1.1 Request Parameters
如果portlet收到client端的request,URL必須要encode(PortletURL),request object的parameters必須要是"x-www-form-urlencoded" decoded
containter不能從action request傳遞參數給後續的render requests,如果portlet需要這樣作,則必須要在ActionRespponse裡的processAction中使用setRenderParameter or setRenderParameters

portlet不可以取得傳遞到別的portlet中的參數

取得參數的介面methods: getParameter, getParameterNames, getParameterValues, getParameterMap

PLT.11.1.2 Extra Request Parameters
containter可以在portlet URL上增加參數,幫助route/process request
以"javax.portlet."為prefix的參數,保留給container使用

PLT.11.1.3 Request Attributes
JSP/servlet透過PortletRequestDispatcher分享使用request attributes
PortletRequest可以set, obtain, remove參數,methods: getAttribute, getAttributeNames, setAttribute, removeAttribute

以"javax.portlet."為prefix的attributes,保留給container使用

PLT.11.1.4 Request Properties
HTTP client request裡的headers可透過 PortletRequest的getProperty, getProperties, getPropertyNames取得

PLT.11.1.5 Request Context Path
context path是portlet app被deploy時的路徑,path不能以"/"開頭,不能以"/"結尾

PLT.11.1.6 Security Attributes
PortletRequest裡的 getAuthType, getRemoteUser, getUserPrincipal, isUserInRole, isSecure

getAuthType: portal使用的authentication scheme, ex: BASIC_AUTH, DIGEST_AUTH, CERT_AUTH, FORM_AUTH,如果USER沒有authenicated,則getAuthType會return null

getRemoteUser: 回傳java.security.Principal物件

isUserInRole: 表示user內含於某個特定角色中

isSecure: request是否是以HTTPS傳送

PLT.11.1.7 Response Content Types
portlet可透過getResponseContentType取得default content type
getResponseContentTypes中要回傳container支援的所有content types

getResponseContentType可回傳 *

PLT.11.1.8 Internationalization
container要決定user產生reponse時使用的locale,container可以使用request中的 Accept-Language header訊息,PortletRequest.getLocale會回傳container選擇的locale

PLT.11.1.9 Portlet Mode
PortletRequest.getPortletMode容許portlet取得目前的 portlet mode
PortletRequest.isPortletModeAllowed 可決定是否支援某個portlet mode

PLT.11.1.10 Window State
PortletRequest.getWindowState 回傳目前的window state
PortletRequest.isWindowStateAllowed 可判斷是否可使用某個window state

PLT.11.2 ActionRquest Interface
ActionRequst extends PortletRequest,用在Portlet.processAction中

PLT.11.2.1 Retrieving Uploaded Data
input stream在client request中包含HTTP POST data(除了 application/x-www-form-urlencoded之外)時很有用
ActionRequest.getReader, getPortletInputStream 可取得POST data資料,可能會throw IllegalStateException

ActionRequest提供四個method處理input stream: getContentType, getCharacterEncoding, setCharacterEncoding, getContentLength,如果POST data是 application/x-www-form-urlencoded 這種type,則getReader/getPortletInputStream 會throw IllegalStateException

PLT.11.3 RenderRequest
目前RenderRequest沒有定義任何methods

PLT.11.4 Lifetime of the Request Objects
每一個request objects只在processAction or render method裡面可以使用


**********************
PLT.12 Portlet Response
PLT.12.1 PortletResponse Interface
PortletResponse定義ActionResponse, RenderResponse共用介面

PLT.12.1.1 Response Properties
PortletResponse.setProperty, addProperty

portlet要使用encodeURL建立URLs


PLT.12.2 ActionResponse Interface
ActionResponse extends PortletResponse,由Portlet.processAction使用,提供 redirect, set render parameters, change window state, change portlet mode 的功能

PLT.12.2.1 Redirections
sendRedirect必須要指定一個 fully qualified URL,否則會傳回 IllegalArgumentException

如果在ActionResponse.setPortletMode, setWindowState, setRenderParameter, setRenderParameters後面呼叫sendRedirect,就會 throw IllegalArgumentException

PLT.12.2.2 Portlet Modes and Window State Changes
setPortletMode可改變current portlet mode,如果指定一個不支援的mode,就會 throw PortletModeException

setWindowState可改變window state,如果指定一個不支援的state,就會throw WindowStateException

sendRedirect之後呼叫setPortletMode, setWindowState,就會 throw IllegalArgumentException

PLT.12.2.3 Render Parameters
ActionResponse.setRenderParameter, setRenderParameters設定render parameters

PLT.12.3 RenderResponse Interface
RenderResponse extends PortletResponse,用在Portlet.render

PLT.12.3.1 Content Type
RenderResponse.setContentType要跟PortletRequest.getResponseContentType吻合,否則會忽略設定值

getWriter, getPortletOutputStream呼叫前,就要先呼叫setContentType

PLT.12.3.2 Output Stream and Writer Objects
RenderResponse 將content寫入 OutputStream, or Writer

PLT.12.3.3 Buffering
RenderResponse.getBufferSize, setBufferSize, isCommitted, reset, resetBuffer, flushBuffer

getBufferSize: returns the size of the underlying buffer being used

setBufferSize:

isCommitted: 表示所有response bytes已經回傳給client

flushBuffer: 強制flush contents

reset: clear data in the buffer

PLT.12.3.4 Namespace encoding
getNamespace提供portlet保證回傳唯一字串的method(在整個portal page中唯一),必須在一次render request中,呼叫幾次都回傳一樣的字串

PLT.12.3.5 Portlet Title
由container決定是否要支援自訂title
setTitle在每次portlet commit output前一定要被呼叫一次

PLT.12.4 Lifetime of Response Objects
每一個response object只在processAction, render裡面才能使用


******************
PLT.13 Portal Context
PortalContext 提供整個portal的資料,portlet可以呼叫

getPortalInfo: return portal vendor/version資料

getProperty, getPropertyNames: return portal properties

getSupportedPortletModes: return supported porlet modes

getSupportedWindowStates: return supported window states

getPortalContext: 從request object中取得 PortalContext object


**************************
PLT.14 Portlet Preferences
PLT.14.1 PortletPreferences Interface
portlet 可以在processAction過程中,修改preferences attributes

methods: getNames, getValue, setValue, getValues, setValues, getMap, isReadOnly, reset, store

ex:
PortletPreferences prefs = req.getPreferences();
String[] symbols =prefs.getValues("preferredStockSymbols",new String[]{"ACME","FOO"});
String url = prefs.getValue("quotesFeedURL",null);
int refreshInterval =Integer.parseInt(prefs.getValue("refresh","10"));

如果是read-only,則當setValue, reset時,會throw ReadOnlyException

store: 儲存修改後的PortletPreferences,如果在render中呼叫store,則會throw IllegalStateException

PLT.14.2 Preference Attributes Scopes

PLT.14.3 Preference Attributes definition



PreferredStockSymbols
FOO
XYZ
true


quotesFeedURL
http://www.foomarket.com/quotes




PLT.14.3.1 Localizing Preference Attributes
portlet spec沒有定義localizaing preference attributes

PLT.14.4 Validating Preference values

...

com.foo.portlets.XYZValidator



一個implements PreferencesValidator的class,必須要有thread safe manner
store必須要呼叫validator,可能會throw ValidatorException


*********************
PLT.15 Sessions
PortletSession介面

PLT.15.1 Creating a Session
PLT.15.2 Session Scope
PortletSession必須要scoped at the portlet application context level

PLT.15.3 Binding Attributes into a Session
PortletSession定義了兩個scope: APPLICATION_SCOPE, PORTLET_SCOPE
APPLICATION_SCOPE: 所有portlet可以使用的資料,javax.portlet.p.?,ID是container提供的id,一定要有?字元,ATTRIBUTE_NAME是用來設定PORTLET_SCOPE物件
PORTLET_SCOPE: 在一個portlet window中可以使用的資料

ex:
PortletSession session = request.getSession(true);
URL url = new URL("http://www.foo.com");
session.setAttribute("home.url",url,PortletSession.APPLICATION_SCOPE);
session.setAttribute("bkg.color","RED",PortletSession.PORTLET_SCOPE);

要得知有沒有物件新增或移除自Session,就要implements HttpSessionBindingListener,PortletSesionUtil提供判斷是否為PORTLET_SCOPE的物件,decodeAttributeName可以移除container prefix


PLT.15.4 Relationship with the Web Application HttpSession
PortletSesion必須把所有attributes存在HttpSession中

PLT.15.4.1 HttpSession Method Mapping
PortletSession.getCreationTime, getId, getLastAccessedTime, getMaxInactiveInterval, invalidate, isNew, setMaxInactiveInterval跟HttpSession一樣
getAttribute, setAttribute, removeAttribute, getAttributeNames除了跟HttpSession的一樣外,還要有額外的功能: APPLICATION_SCOPE attribute names必須要一樣,PORTLET_SCOPE的attribute name要有特定的prefix,不提供SCOPE功能的變型method必須要把全部的attributes視為PORTLET_SCOPE

PLT.15.5 Reserved HttpSession Attribute Names
以"javax.portlet."開頭的attributes保留給portlet使用

PLT.15.6 Session Timeouts

PLT.15.7 Last Accessed Times

PLT.15.8 Important Session Semantics



**********************
PLT.16 Dispatching Requests to Servlets and JSPs
PortletRequestDispatcher

PLT.16.1 Obtaining a PortletRequestDispatcher
portlet只能在render裡面使用PortletRequestDispatcher
可透過PortletContext.getRequestDispatcher, getNamedDispatcher取得PortletRequestDispatcher

getRequestDispatcher要有path String當參數,path一定要以"/"開頭,並在PortletContext裡面

getNamedDispatcher以servlet String當參數

PLT.16.1.1 Query Strings in Request Dispatcher Paths
ex:
String path = "/raisons.jsp?orderno=5";
PortletRequestDispatcher rd = context.getRequestDispatcher(path);
rd.include(renderRequest, renderResponse);

PLT.16.2 Using a Request Dispatcher
PortletRequestDispatcher.include

PLT.16.3 The Include Method
在render中可能會被呼叫很多次
不應該使用RequestDispatcher.forward

PLT.16.3.1 Included Request Parameters
必須要設定這些request attributes
javax.servlet.include.request_uri
javax.servlet.include.context_path
javax.servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string

PLT.16.3.2 Included Request Attributes
Request Attribute Type
javax.portlet.config javax.portlet.PortletConfig
javax.portlet.request javax.portlet.RenderRequest
javax.portlet.response javax.portlet.RenderResponse

PLT.16.3.3 Request and Response objects for Included Servlets/JSPs
HttpServletRequest.getProtocol, getRemoteAddr, getRemoteHost, getRealPath, getRequestURL 必須return null
HttpServletRequest.getPathInfo, getPathTranslated, getQueryString, getRequestURI, getServletPath必須要return path and query string infos
HttpServletRequest.getScheme, getServerName,getServerPort, getAttribute, getAttributeNames, setAttribute,removeAttribute, getLocale, getLocales, isSecure, getAuthType,getContextPath, getRemoteUser, getUserPrincipal, getRequestedSessionId,isRequestedSessionIdValid 要跟PortletRequest一樣

HttpServletRequest的這些methods必須不能作用,並要return null,getCharacterEncoding, setCharacterEncoding, getContentType, getInputStream and getReader. The getContentLength method of the HttpServletRequest must return 0.

The following methods of the HttpServletRequest must be based on the properties
provided by the getProperties method of the PortletRequest interface: getHeader,getHeaders, getHeaderNames, getCookies, getDateHeader and getIntHeader

The following methods of the HttpServletRequest must provide the functionality
defined by the Servlet Specification 2.3: getRequestDispatcher, getMethod,isUserInRole, getSession, isRequestedSessionIdFromCookie, and isRequestedSessionIdFromUrl, isRequestedSessionIdFromURL


The getMethod method of the HttpServletRequest must always return "GET".

The following methods of the HttpServletResponse must return null: encodeRedirectURL
and encodeRedirectUrl. The following methods of the HttpServletResponse must be equivalent to the methods of the RenderResponse of similar name: getCharacterEncoding, setBufferSize, flushBuffer,resetBuffer, reset, getBufferSize, isCommitted, getOutputStream, getWriter, encodeURL
and encodeUrl.

The following methods of the HttpServletResponse must perform no operations: setContentType, setContentLength, setLocale, addCookie, sendError, sendRedirect, setDateHeader, addDateHeader, setHeader, addHeader, setIntHeader, addIntHeader and setStatus. The containsHeader method of the HttpServletResponse must return false.

The getLocale method of the HttpServletResponse must be based on the getLocale method of the RenderResponse.


PLT.16.3.4 Error Handling
除了IOException之外,所有Exception都要包裝PortletException

*************************
PLT.17 User Information
PLT.17.1 Defining User Attributes



User Given Name
user.name.given


User Last Name
user.name.family



User eMail
user.home-info.online.email


Company Organization
user.business-info.postal.organization




PLT.17.2 Accessing User Attributes
ex:
Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO);
String givenName = (userInfo!=null)? (String) userInfo.get("user.name.given") : ""
String lastName = (userInfo!=null)? (String) userInfo.get("user.name.family") : "";

PLT.17.3 Important Node on User Information
目前沒有standard user information java api

********************
PLT.18 Caching
cache content可增加效能
PLT.18.1 Expiration Cache
ex: 300

If the expiration render invocation the cache property is set to -1, the cache does not expire.

**********************
PLT.19 Portlet Applications
PLT.19.1 Relationship with Web Applications


**********************
PLT.20 Security
PLT.20.1 Introduction
PLT.20.2 Roles
PLT.20.3 Programmatic Security
Request.getRemoteUser, isUserInRole, getUserPrincipal

getRemoteUser: return client用來認證的 user name
isUserInRole
getUserPrincipal: return java.security.Principal物件

security-role-ref

...

...

FOO
manager


...
...


PLT.20.4 Specifying Security Constaints

...

accountSummary
...

...

Secure Portlets

accountSummary


CONFIDENTIAL


...


PLT.20.5 Propagation of Security Identity in EJB

***********************
PLT.21 Packaging and Deploymenet Descriptor
/WEB-INF/portlet.xml
Portlet classes in the /WEB-INF/classes directory
Portlet Java ARchive files /WEB-INF/lib/*.jar

The following deployment descriptor values must be unique in the scope of the portlet application definition:
portlet
custom-portlet-mode
custom-window-state
user-attribute

The following deployment descriptor values must be unique in the scope of the portlet definition:
init-param
supports
preference
security-role-ref


***********************
PLT.22 Portlet Tag Library
讓JSP能include portlets,並直接使用RenderRequest, RenderResponse

container必須提供portlet tag library implementation

ex: <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

PLT.22.1 defineObejcts Tag
要定義以下這些變數
RenderRequest renderRequest
RenderResponse renderResponse
PortletConfig portletConfig

defineObjects不能有任何attributes與body content
ex:
<%=renderResponse.setTitle("my portlet title"); %>

PLT.22.2 actionURL Tag
actionURL產生指到目前的portlet的URL
non-required attributes:
windowState(String: non-required)
portletMode(String: non-required)
var(String: non-required): name of the exported scoped variable for the action URL
secure(String: non-required): true/ false

ex:




PLT.22.3 renderURL Tag
windowState
portletMode
var
secure
ex:





PLT.22.4 namespace Tag
ex: Foo


PLT.22.5 param Tag
name
value
ex:

*****************************
PLT.A Custom Portlet Modes
PLT.A.1 About
PLT.A.2 Config
PLT.A.3 Edit_defaults
PLT.A.4 Preview
PLT.A.5 Print

ex:

...

...

config

...

...

config

...


**************************
PLT.B Markup Fragments
Portlet產生的HTML fragments不能使用 base, body, iframe, frame, frameset, head, html, title這些tags
Portlet產生的XHTML, XHTML-Basic fragments不能使用 base, body, iframe, head, html, title這些tags


********************
PLT.C CSS Style Definitions

2006/10/31

思考的原點

商業週刊 思考的原點
商業週刊 思考的原點
元智大學 經典五十書目(電通學院版)
元智大學 經典五十書目
看100本暢銷書, 不如讀1本經典書

蠻慚愧的,能大聲說已經讀過的書,只有美麗新世界、一九八四與《基地》三部曲。

元智大學經典五十書目
 A類(10點)     B類(5點)    C類(2.5點)
 論語         孫子兵法     唐詩
 孟子         史記
 易經
 道德經
 莊子
 傳習錄
-------------------------------------

             紅樓夢     西廂記
             水滸傳     封神演義
             西遊記     曾文正公家書
             三國演義

             浮士德     飄
             神曲      莎士比亞戲劇(Ι)-羅密歐與茱莉葉
             戰爭與和平   老人與海
             湖濱散記    莎士比亞戲劇(Ⅱ)-哈姆雷特
             未央歌     唐吉訶德
                     莎士比亞戲劇(Ⅲ)-馬克白
                     史懷哲傳  莎士比亞戲劇(Ⅳ)-暴風雨
                     異鄉人
                     源氏物語
                     齊瓦哥醫生
--------------------------------------
 新約聖經        藝術的故事   查拉圖斯特拉如是說
 舊約聖經
 六祖壇經
 金剛經
 西方的沒落
 可蘭經
--------------------------------------
 柏拉圖對話錄      夢的解析    美麗新世界
             君王論     一九八四
             民約論
             國富論
             資本論
             人口論
--------------------------------------
             昆蟲史     時間簡史
             相對論入門   費曼的六堂物理課
             物種起源    電學之父法拉第的故事
                     雙螺旋

                     量子的故事
                     胡桃裡的宇宙
                     宇宙 宇宙
                     《基地》三部曲
                     從亞里斯多德以後:古希臘到十九世紀的科學簡史
                     湯普金的異想世界:近代物理探索
                     在費曼之前:二十世紀的科學簡史

M型社會

以30年前的美國為例,對照今日的日本社會,大前研一希望能以一己之力,教化日本的民眾,體認M型社會的因應之道。

書本中分別從企業、個人與政府三個方面,討論面對M型社會的策略。企業方面的重點是,要以「高品質低價格」的商品,打動中下階層的心,否則就是提供金字塔頂端的高價商品,因為M型社會的人口分佈在兩端,所以過去的中產階級市場會逐漸消失。像最近廣告成功的「全聯社」就是一個很好的實例,在大型通路夾殺的時代,廣告以逆向操作,強調低營運成本,來提供低單價的高品質商品。

政府方面重點是要從所得稅改為徵收資產稅,因人口老化,資產集中在老人手上,藉由資產稅可讓資產市場活絡,降低所得稅可刺激年輕人努力賺錢,另外一點是要讓政府e化瘦身,還有要完全開放市場,藉國外的錢活絡本國的經濟。

個人方面則是要揚棄傳統的「中產階級思想」,例如:購屋、買車的迷思,因為所得已經不會跟著年資提高,所以過去中產階級的想法,都得要重新檢討。收入減少意味著要減少支出,「郊外購屋」就是一個錯誤的決定,因為交通費加上貸款,比不上在「市中心租屋加上週末的度假小屋」,當然最好的策略就是不要購屋。在都市生活也不要購車,像最近的新聞說,台北東區的停車費要漲價到每小時80元,在繁榮的城市中購車,是最笨的選擇,台北的捷運與公車網讓市民不需要額外的支出,就可以暢行無阻,何必要花錢養車呢?

對子女的教育不應該是花錢找罪受,大家應該多花時間陪小孩,跟小孩一起成長,而不是花錢把小孩的未來交給別人,再忙都得陪小孩聊天交談。


M型社會
介乎觀眾與演員之間
下流社會撼動日本
M型社會

2006/10/16

M型社會 與 佐賀的超級阿嬤

這期的商業週刊,一篇「M型社會來了」討論大前研一最近要在台灣出版的新作「M型社會」,所謂的M型社會,指的是在全球化的趨勢下,貧富差距越來越大,隨著資源重新分配,中產階級因失去競爭力,而淪落到中下階層,整個社會的財富分配分成了三塊,左邊的窮人跟右邊的富人變多,但是中間這塊中產階級,忽然有了很大的缺口,跟「M」的字型一樣,就忽然陷下去,然後不見了。

在商業週刊中,提出了幾個實例,討論身為M型社會的一份子,要如何因應現實的狀況,面對這個社會。方法有兩個方向,一種是設法經營自己,讓自己晉升上層社會,而另一種方法,就是把自己的慾望縮小,修改自己的生活哲學。

商業週刊的另一篇文章「提升30%幸福感的人生戰略」中,提到的一些實例,就是討論一些中產階級為了掌握更多的財富,而要付出更多的時間成本與小孩成本(沒有時間照顧小孩,花更多的錢把小孩交給別人教育與照顧),事實證明如果變更自己的生活目標,換了一個工作環境,雖然收入減少,但多出了生活的時間,可以陪著小孩學習與成長,少了高價咖啡,喝便利商店的廉價咖啡一樣能繼續生活下去。

這樣的生活哲學,恰好是現今「科技新貴」缺乏的,「看在錢的份上」有很多人甘心願意,付出大量的時間成本,參與現今台灣「高」科技產業,但換來的是生活時間不正常,甚至是身體的健康警訊,如果能換個角度思考,或許能開啟另一個人生,但「沒有人」能保證,勇於改變的人,是不是都能嚐到「幸福」的果實。人生的轉捩點,都是一種賭博,沒有人能保障未來,也許這就是大家不勇於改變的原因。

佐賀的超級阿嬤恰好說明了另一種人生,阿嬤因為自己的競爭力弱,原本就屬於窮人階層,但她要讓「老天笑出聲音來」的生活哲學,就跟中產階級的縮小慾望一樣,「幸福」的感覺全掌握在自己一念之間,雖然生活物資缺乏,但心念一轉,還是能快樂地面對生活。阿嬤能想盡方法,取得生活物資,例如河川超級市場與帶磁鐵出門這兩招。

要面對M型社會簡單的說,就是 1. 設法更有效率地賺錢 2. 賺不到錢就縮小慾望。


佐賀的超級阿嬤
M型社會來了!(商業週刊)
M型社會

2006/10/12

XQuery

專為XML設計的查詢語言

Java 理論與實踐: 用 XQuery 進行畫面剪輯
XQuery Tutorial
揭穿 XQuery 的神話和誤解
通過XQuery/XPath支持鬆散耦合
XQuery 1.0 : An XML Query Language
XQuery Wikipedia
XQuery online demo

Oracle XQuery
DB2 XQuery concepts
The XQuare project: open source information integration components based on XML and XQuery

Java Content Repository

由於傳統的Ralational & Object DB缺少了資料倉儲的彈性,沒有版本控制等等功能,Content Repository API (JSR 170) 定義標準的資料倉儲介面API。JSR 170值得注意的地方,除了要囊括不同儲存媒體的遠大目標之外(就是以同樣的API面對不同的儲存媒體,例如RDB、File System等等,單純地以設定的方式決定儲存媒體),還有它是從誕生開始就以Open Source為出發點的一個標準(ref: Java Community Process (JCP) 2.6 - More Ways to Get Involved),就連TCK也是使用Apache的授權。

Apache Jackrabbit提供了JSR 170的open source implementation,在使用Jackrabbit之前,要先決定deployment的方式(Jackrabbit Example Deployment Models),分為三種:Model 1: The (Web-) Application Bundle、Model 2: Shared J2EE Resource、Model 3: The Repository Server,但三種model的設定方式差異不大,問題的重點在決定配置伺服器的架構。

JSR 170制訂了JCR 1.0的標準,Day Software 已經提出修改的JSR 283:JCR 2.0標準,目前還在草案階段,Apache Jackrabbit是JCR的open source實作,現在已經完成JCR 1.0而且正在實作2.0當中,但Jackrabbit還不是很成熟的軟體。

1. 實體資料部份,例如SimpleDbPersistenceManager,目前只會將ItemState與NodeReferences這兩個物件,直接序列化儲存起來,且只有key, data的簡單儲存而已,並不會將各attributes分開在不同欄位儲存。

2. Query使用XPath Parser與SQL Parser兩種,並以XQuery Grammer支援"group by"的語法,XQuery目前還在草案階段,而且文件並沒有對查詢多加解釋,沒有很多sample code,我並不知道怎麼使用。

3. 需要提供一個 (web) generic JCR client

4. Security的部份,目前只有SimpleAccessManager,分為三種角色anonymous, normal, system,而anonymous只有read的權限,normal與system有read/write權限,目前權限只控制了root node,換句話說,normal與system對整棵樹都有r/w權限。


經過簡單的survey後,還是覺得暫時不要踏入JCR的環境,等到Jackrabbit成熟一點再說吧!或者說,等到使用Jackrabbit實做的CMS成熟一點再說吧。

2006/9/21

Stand Alone Complex

Animax播映的攻殼機動隊終於在昨天晚上步入尾聲,這是我第二次看GIS。在觀賞的過程中,還是沒有辦法完整地吸收所有人物哲學式的對答,與複雜的互動關係,畢竟我沒有辦法花時間用心研究劇本,只能每天晚上花一個小時,「專心地」接受GIS的網路連線洗禮,或許用GIG的角度來看,可以說是連接久世英雄的電子腦世界。

在網路科技高度發展的未來世界中,義體/電子腦與肉體/靈魂交錯的人類世界裡,所有人都藉由空中無形的網路互相即時連線互動,但在個人化與網路同步之間,靈魂的個性與群體的動作發生衝突,所有在網路上的靈魂藉由訊息同步化互相溝通,所以會導致群眾共通的行為,例如GIG中難民連續的自殺攻擊。

但訊息同步化後,個體的不確定因素,也就是Stand Alone Complex,每一個個體都是一個複雜的世界,會影響個體最後的行為,也就是久世英雄的出現,雖然內田一人與美帝致力藉由網路導演一齣難民自立與核武的戰爭,為了維持美帝與日本之間的從屬關係,美帝在最後也不得不解決亂世中的英雄,解決Stand Alone Complex可能會對群眾/人心造成的影響。

塔奇克馬/攻殼車/AI戰車之間的互動,也是一種同步化與個性化的衝突,在GIS中一部塔奇克馬因為巴特使用了天然的潤滑油而使得該塔奇克馬產生了「個性」,雖然這些塔奇克馬之間原本就設定為訊息同步分享的狀態,理論上這些塔奇克馬都應該是完全相同的,但其中一個個體產生的個性,也產生了Stand Alone Complex的狀態,這種狀態使得塔奇克馬變得跟人類一樣。

在GIG中進而讓每一個塔奇克馬可以擁有自己的儲存區,不需要每一個訊息都同步化,塔奇克馬的成長,讓他們在最後依照自己的判斷,違反少校的命令,以衛星撞擊核子飛彈,這可說是AI進化成為靈魂的過程。

人工的AI希望擁有靈魂,而人類卻想要讓自己電子化,在Stand Alone Complex的影響下,群體跟個體之間的行為表現的拉鋸,造就了這個複雜的世界。

攻殼機動隊 STAND ALONE COMPLEX
GIG

2006/8/30

AP server上重要的Cache機制

Hibernate現在可說是ORM的代言人,但其中的cache機制直接影響到Hibernate的效能表現,目前 Hibernate 內建支援 EHCache, SwarmCache, OSCache, and JBoss Cache,不知道什麼原因Apache的JCS並沒有納入Hibernate,但JCS Usage in Hibernate這篇文章也提到,Apache提供的JCS也可以透過製作Hibernate Cache plugin的方式用在Hibernate裡面。

Cache可說是一種以空間換取時間的機制,利用local的memory或是disk,將AP使用的資料暫存起來,以供後面AP的使用,舉例來說,一個取所有文件列表的查詢,事實上就可以放入cache機制當中,因為每一位登入的使用者,沒有必要重複向資料庫查詢所有的文件列表,只要將資料放入cache,就可以讓其他使用者節省向DB查詢的時間,減少DB系統與網路資源的浪費。

在真實的AP使用上,cache也要分成不同等級,例如AP等級、使用者等級,甚至可以加上單位等級,不同等級的cache有不同的作用,也需要對應不同的cache策略。

Apache JCS提供LRU Memory Cache, Indexed Disk Cache, TCP Lateral Cache, RMI Remote Cache四種region,前面兩種是以memory與disk作為cache的儲存處,後面兩種分別是以UDP與RMI的方式將local cache傳送到其他server上。

JBoss Cache機制是以Tree為出發點,在cache機制中加入Tree的概念,所有的Key/Object的cache pair都要再加上一層樹狀節點,事實上這種機制很適合用在樹狀階層架構中,區分出不同等級的cache。另外JBoss的cache可以加上transaction的概念,在操作資料物件的同時,針對物件裡的資料commit或rollback,這樣的機制就跟Hibernate的概念一樣,可直接將操作物件的結果,即時反應到cache與DB上。

Hibernate 性能提升(Improving Performance), Chapter 19. Improving performance,在Hibernate效能提升中,把外部的cache當作The Second Level Cache,要把Hibernate用得更精純,顯然得把cache機制搞清楚。

2006/8/12

PmWiki All-in-One Notes from help page

1. 大多數的 Wiki 頁面是用 WikiWord (由兩個以上、單字間不含空白、且字首皆為大寫的英文單字,連在一起組合而成)來作為頁面標題的。
在頁面內容中出現的 WikiWord 會自動被 PmWiki 轉換成為頁面連結,讓你點下它就可以連到用它做為標題的頁面。
如果這個頁面還不存在,就會在其後緊跟著一個問號「?」。只要點下問號「?」便能夠讓你開始建立新的頁面。

2. 如果你撰寫的頁面無法找到具有清楚文義的 Wiki Word 可供使用(可能硬要組合起來會太醜陋雜亂),可以使用 自由連結 來代替。
自由連結:使用雙大括號
[[text]] 會連結到名稱為 Text 的網頁。
[[longer form]] 則會替實際名稱為 LongerForm 的網頁建立連結,但是這時會顯示成 longer form 的連結文字。

每個頁面的標題名稱(WikiWord)都是唯一不變的,但是透過使用 free links,便能夠讓頁面擁有許多別名。

其它的例子包括:
* 連字符號,像 {[[post-modern music]]。
* 名詞複數,像 [[wiki group]]s 顯示為 PmWiki/wiki groups (英文)。
* [[WikiWord]]s 的名詞複數,顯示為 PmWiki Zh Tw/WikiWords 。
* 連結到其它群組中的網頁,像 Main/{{home page}} 或 {{Main/home page}},會顯示為 Main/{{home page}} 。

3. 一個頁面標題的全名是群組名稱.頁面標題,例如 Main.HomePage。在當前的群組中連結頁面,單單使用它的頁面標題即可。想要連結別的群組中的頁面,務必完整寫出它的全名。

************Editing*************************

4. 文字段落
* 每行文字的開頭,一般來說不能有任何空格。
* 請勿用空格或定位符號(按下 Tab)來縮排文字段落。
* 使用空白行來作為段落分隔。
* 在每行的開頭縮進一個或更多的空格(或按下 Tab),表示保持原來的文字排版(即 HTML 標記裡頭的
)。
* 在每行的末尾使用 \(反斜線),將把下一行接在一起。
* 在每行的末尾使用 \\(雙反斜線),將強迫斷行。

5. 段落縮排(常用在引用別人的文章內容)
在段落的開頭使用箭頭 ->,可以產生段落縮排,連字符號 ---> 越多,縮得越深。

6. 強調文字語氣
* 斜體:用兩個單引號 '' 加在文字前後,例如,''two apostrophies''。
* 粗體:用三個單引號 ''' 加在文字前後,例如,'''three apostrophes'''。
* 粗斜體:用五個單引號 ''''' 加在文字前後,或是雙引號加上三個單引號,例如,"'''five apostrophes'''"。
* 使用兩個 at 字元 @@ 加在文字前後,例如 @@monospace@@,表示使用等寬字型(monospace)。
* 夾在 [+ 和 +] 之間的文字,表示 文字放大 ,夾在 [- 和 -] 之間的文字,表示 文字縮小
* 文字語氣的強調,在一行中可任意使用多次,但是文字中間不得斷行。
* %red% 會讓跟隨在其後的文字顯示為紅色,這個改變顏色的效果將會一直持續到行尾,或是到下一對百分號「%%」出現為止(%black%、%white%、%red%、%green%、%blue% )
* 把 color、bgcolor 或 target 等 HTML 屬性術語,放在一對百分號裡面,就可以改變跟隨在其後的文字顯示效果,這個顯示效果將會一直持續到行尾,或是到下一對百分號「%%」出現為止。
ex: %color=red% This text is red and %color=blue% this text
is blue %% but this text is normal.

使用 bgcolor 屬性,可以改變背景顏色,例如:
%color=white bgcolor=green% This text is white

使用 target 屬性,可以讓連結開啟到新的視窗,例如:
%target=_blank% Any links on this line like http://www.pmichaud.com
will open in a new window.

%height=50% http://www.example.com/some.gif
將會顯示圖片 some.gif,並縮放到 50 像素的高度。

7. 標題
在每行的開頭使用驚嘆號 !,表示本行是標題,感嘆號越多,標題層次越減。
ex:
! Level 1 Heading
!! Level 2 Heading
!!! Level 3 Heading
!!!! Level 4 Heading
!!!!! Level 5 Heading
!!!!!! Level 6 Heading

8. 項目列表
在每行的開頭使用星號 *,表示本行是項目列表,星號越多,層次越深。
ex:
* First-level list item
** Second-level list item
** Another second-level item
* A first-level item

9. 編號列表
在每行的開頭使用井字號 #,表示本行是編號列表,井字號越多,層次越深。
ex:
# Prepare the experiment
## Unwrap the pop-tart
## Insert the pop-tart into the toaster
# Begin cooking the pop tart
# Stand back

10. 定義列表
在每行的開頭使用冒號 :,表示本行是定義列表,冒號越多,層次越深。
ex:
:term:definition of term
::second-level item: definition of 2nd-level item

11. 水平線
在每行的開頭使用至少四個或更多的連字符號 ----,可以產生水平線。

12. 不做格式化(常用於顯示程式代碼)
放在 [= 和 =] 當中的任何文字不會被 PmWiki 格式化。例如,[=WikiWords=] 將不會自動建立連結,而是顯示成一般的文字 WikiWords。

[= 和 =] 之間可以跨行,這會讓整個段落不被格式化。

例如,每行開頭的 [= 會讓到下一個 =] 中的文字顯示為等寬字型(monospace)的純文字。

13. 表格
在每行的開頭使用 『||』,表示這是表格,』||』 後面可以設定整個表格的 HTML 顯示屬性。

表格欄位也是使用 『||』 來隔開,每個欄位前後都留有空格,表示文字置中;只有前面留有空格,表示文字向右對齊;沒有特別設定,則一律是向左對齊。

完全空白的欄位將會自動合併前一個欄位(目前還沒有辦法合併多行)。

使用範例:

||align=center border=1 width=50%
||Left || Center || Right||
||A || B || C||
|| || single || ||
|| || multi span ||||

14. %comment% 樣式,可以用來在文章中撰寫註釋。
例如,%comment%註釋文字…%%,「註釋文字…」將不會顯示在頁面上。

*****************************
15. Wiki Structure
Wiki Word - 關鍵字
Wiki Page - 頁面
Wiki Group - 群組
要建立一個連結到其他群組的連接,你可以用 GroupName.WikiWord 或者 GroupName/WikiWord
WikiTrails - 導覽目錄
free links - 自由連結

在Windows上安裝PmWiki

1. Install Apache 2.0.59 using apache_2.0.59-win32-x86-no_ssl.msi
2. Download and Unzip php-5.1.4-Win32.zip
3. 將 php.ini-dist 檔案名稱更改為 php.ini
register_globals = Off
register_globals = On
;include_path = ".;c:\php\includes"
include_path = ".;d:\Programs\Apache2\include"
doc_root =
doc_root = "d:\Programs\Apache2\htdocs"
extension_dir = "./"
extension_dir = "d:\Programs\php-5.1.4\ext"
;extension=php_mbstring.dll
extension=php_mbstring.dll
;extension=php_mysql.dll
extension=php_mysql.dll
;session.save_path = "/tmp"
session.save_path = "d:\Programs\Apache2\temp"
開新資料夾 d:\Programs\Apache2\temp

4. 將 d:\Programs\php-5.1.4\libmysql.dll 與 php5ts.dll 複製到 c:\WINNT\system32

5. 修改 httpd.conf
DirectoryIndex index.html
DirectoryIndex index.html index.php
# 增加下列幾行
# For PHP 5 do something like this:
LoadModule php5_module "d:/Programs/php-5.1.4/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "d:/Programs/php-5.1.4"

6. 環境變數 path 增加
d:\Programs\php-5.1.4;d:\Programs\php-5.1.4\ext

7. Restart Apache

參考網站 http://phpbb-tw.net/phpbb/viewtopic.php?t=45056

8. 到 http://www.pmwiki.org 下載 pmwiki.2.0.1.2.zip 與 i18n.zip

9. 由於i18n.zip的中文部分是大陸朋友處理的,zhtw的網頁的附檔名卻是簡體中文的,所以要配合使用applocate才能解壓縮。

10.修正檔案名稱 PmWikiZhTw.文字格式、PmWikiZhTw.建立新頁面、PmWikiZhTw.頁面編輯入門、PmWikiZhTw.密碼設定、 PmWikiZhTw.插入圖片、PmWikiZhTw.測試沙箱、PmWikiZhTw.搜尋Wiki,然後把檔案複製到適當的位置。

11.把docs/sample-config.php改成config.php,移動到local資料夾。然後修改並增加里面的內容:
$EnablePathInfo = 1;
$EnableGUIButtons = 1;
$EnableUpload = 1;
#$UploadDir = "d:\Programs\Apache2\htdocs\pmwiki\uploads";
$DefaultPasswords['upload'] = crypt('aa1234');
$UploadMaxSize=100000;

XLPage('zhtw','PmWikiZhTw.XLPage');
$UploadNameChars = "-\\w. \\x80-\\xff";

12. 安裝 PublishPDF,下載http://www.pmwiki.org/pmwiki/uploads/Cookbook/wikipublisher.tar.gz
然後根據http://www.pmwiki.org/wiki/Cookbook/PublishPDF網頁的說明,把檔案放到正確的位置

在config.php中加上
include_once("cookbook/wikipublisher/extensions.php");
$MarkupEnabled['titledictindex'] = 0;

注意:
1. Apache 只能用2.0版,最新的2.2版,在設定php時都會出問題
2. 我還沒有仔細測試過詳細的功能,可能要一邊用,一邊測試看看ba

2006/8/10

Engine 飆風引擎 到底是好 還是爛?

最近緯來日本台在播映木村拓哉的Engine 飆風引擎,在網路上的評價褒貶不一,在日本上映時,贏得超高收視率。

我個人很喜歡這種故事,因為故事裡的人物之間的互動,不僅只於饒富深度的台詞對話,還有角色間的互動反應,整體營造出每一位人物活靈活現的真實個性。這跟其他以台詞攻防為主的電視劇截然不同,觀眾需要多用一點心思體會劇中人物的感受。

雖然我很喜歡這部電視劇,但還是明顯看出次郎這個人物,是專門為木村拓哉量身打造的,也只有他才有這種特殊的表情與習慣動作。家裡其他人希望看到多一點愛情故事的描寫,而不是像木村與小雪這種淡淡淺淺,帶有隱喻的愛情暗示。

像這樣有褒有貶的電視劇似乎並不多,我認為劇本在描寫育幼院孩童的心情,每一位角色在故事進行過程中的感受,都是很完美的,但顯然有些觀眾並不希望這麼「辛苦地」看電視劇,故事太沈重了,下班回家尋找休息的觀眾,也許不希望看到這麼沈重的故事。


飆風引擎
Engine 引擎
《引擎/Engine》分集介紹
木村拓哉淪為「金酸莓影帝」 贏了收視輸了人氣

2006/8/1

Javascript Web Server Scan

SPI Dynamics提供一個測試網站,可以在打開網頁的時候,以類似IP Port Scan的方式,指定範圍內的所有電腦進行web server掃描。

根據該網站提供的技術資料JSportscan.pdf,還有該網頁使用的scanner3.js可以知道,他是利用Image的物件,對範圍內的電腦的web server,配合一般web server該有的圖片網址,來判斷該IP是否有設立網站,還有該網站可能使用了那一個server。

JavaScript開啟瀏覽器攻擊之門
SPI Dynamics JavaScript Scanner

2006/7/31

salesforce.com

這期的商業週刊電子報,裡面有這篇文章「弱點攻一百次,巨人也會倒」。salesforce.com 總裁 Marc Benioff 打著「反軟體(No software)」的旗幟,行銷自己的軟體事業。

salesforce.com最重要的成功之處並不在於軟體技術,而是他成功地從客戶的角度為出發點,行銷了自己的商業模式,觀察他們目前推出的CRM系統線上demo,可以發現介面上提供的功能很多,對公司的服務內容來說,重要的是功能齊全,介面要簡潔有力。

World Wide Web對於一般使用者已經不是一件新鮮事,由於web介面語言標準化,使得user在安裝一套瀏覽器軟體之後,就能使用各式各樣的網頁服務。網頁應用目前可分為兩種,一種是web service,建構在網頁標準之上,提供不同web伺服器之間透過網頁標準互相溝通傳送資料,另一種則是單純的網頁介面,這是提供給終端使用者來直接使用服務的介面。

對於中小企業來說,web伺服器與後端資料庫的管理與使用、AP的開發,可能會造成公司沈重的負擔,因此才衍生出類似salesforece.com的線上企業服務,企業無須購買任何軟體,也不用程式開發與系統維護人員,只要有瀏覽器,隨時都可以使用最新的服務。

Salesforce.com進軍台灣 本地業者冷靜以待這篇文章說到,salesforce.com已經七月份進軍台灣市場,對於既有的大型軟體公司來說,他們並不認為這家公司對他們造成威脅,因為從企業資訊安全性與計價的角度來看,salesforce.com只會吸引5人以下的微型企業或是SOHO族群。

Anyway salesforce.com 是值得持續注意的一家公司。

基地三部曲 與 基地前傳 by 艾西莫夫

本篇文章有部分文字直接引用自:不朽的科幻史詩:基地三部曲

這三本共九篇的基地三部曲,全書竟然是以一個已經去世五十年的哈里‧謝頓為主角,他是心理史學創始人、基地之父,「心理史學」本身就是一個非常特殊的科幻產物,他代表著「氣體運動論」(物理學)、「群眾心理學」(心理學)、「歷史決定論」與「群體動力論」(歷史學)的綜合體。但是心理史學卻是一組數學模型的產物,簡單的說就是統計學,雖然個體行為無法預測,但是眾多個體集合成群時,卻又會顯示出某種規律性。

由於心理史學的推測,判斷銀河帝國即將且注定會滅亡,但是在三萬年的渾沌黑暗期之後,會出現第二帝國,整個銀河才會重新回歸穩定,謝頓為了縮短漫長的過渡期為一千年,他設立了第一基地,在遙遠銀河另一端的端點星,也就是第一基地,另外就是在群星的盡頭,隱藏在幕後的第二基地,

第一基地主要由自然科學家組成,幕後的第二基地則是由心靈科學家與心理史學家組成,為了實現謝頓的千年計畫,在每一次的謝頓危機發生時,謝頓便會現身穹窿,指導基地居民度過難關,隨著銀河外圍勢力崩離,科技進步的基地成為強敵環伺的目標,一開始是運用敵人之間的矛盾,然後是科學宗教化,接著是行商的經濟力量。

然而看似運作正常的心理史學,卻出現一位具有強大精神力量的異種人「騾」,以迅雷不及掩耳的速度席捲了整個銀河,原本可以完成帝國霸業的騾,在無形的第二基地壓力下,為了尋找第二基地的正確位置,停止了擴張手段,第二基地成了打敗騾的唯一希望。

在「騾亂」之後,兩個基地之間發生鬩牆之戰,然而關鍵仍在於,第二基地究竟在哪裡,「群星的盡頭」指的是哪裡,在眾多反反覆覆的猜測,甚至還有人懷疑第二基地根本不存在,在三部曲的最後,作者才點明第二基地就在帝國的核心川陀,。

**********************************

基地前傳說明了哈里謝頓的一生,與心理史學的創建過程,由於基地三部曲中很奇怪的,沒有多少機械人的痕跡,所以在基地前傳裡,作者透過麥曲生地區的典籍,推論出人類所發明的「機僕」,因為數量跟能力超過人類想像,威脅到人類的生存而被毀滅。而伊圖‧丹莫刺爾與鐸絲‧凡納比里,碩果僅存的機僕,跟謝頓之間有著奇妙的互動關係。

謝頓自從提出心理史學的論點之後,便受到政治統治者,不管是當權者或是反叛者的眷顧,因為他們都希望得到心理史學的作證,強化統治的權力核心。基地前傳的第一部,謝頓受到首相伊圖‧丹莫刺爾的眷顧,還有成為他的妻子的保鏢鐸絲‧凡納比里,在川陀的各個地區之間穿梭,試圖瞭解人類的歷史,完成心理史學。

在第二部中,謝頓接替伊圖‧丹莫刺爾成為克里昂大帝一世的首相,在出現軍政府之後,謝頓回到大學繼續發展心理史學,最後,他的孫女婉達‧謝頓超人的精神能力,成為建立第二基地的基礎,而第二基地是第一基地端點星的守護者,為了成就謝頓千年計畫,他們永遠隱居在幕後控制一切。

今年的倪匡科幻文學獎

今年的倪匡科幻文學獎7/31就要截止了,這次的字數限制放寬了,卻讓文章的寫作更困難了,投稿的篇數似乎也降低不少,在看了這麼多科幻小說後,很多人可能像我一樣天真的認為自己也能寫,但事實並非如此,真正的小說家,除了能寫之外還得多寫,再加上願意寫、盡量寫,我想我今年又投了一篇爛作品。

今天才把六月初購買的基地三部曲跟兩本基地前傳看完,真的很難想像,科西莫夫到底是怎麼在半個世紀的時間內,成功地從羅馬帝國衰亡史(記得今年年初的時候,曾經想要閱讀這部經典叢書,但是到了書店一翻之後,光是書本的厚度,就足以讓我退避三舍,我並沒有鼓起勇氣進入羅馬的世界,聯經目前只推出了六冊中的前三卷),營造出一整套七大冊完整的基地系列科幻小說。

不管如何,正如同許多讀者一樣,倪匡的科幻自從高中的時候,就開始影響了我。不管我是否能不能成為一個稱職的寫作者,但我相信我還算是個認真的讀者,我會一直保持著閱讀的習慣,直到某一天我心中的火花熄滅為止。

2006/7/16

安裝 Ubuntu 6.06 Dapper with VMware 5.5.1-19175

昨天下午聽了場高深的 "Hello World" 演講,jserv老大用教科書的演講方式,先講了一堆基本概念,然後最後才講七個有趣的 Hello World Programming,講的人興致勃勃,我是聽得吃力。「不學詩,無以言。不學禮,無以對。」以我初學者的程度來說,只有等「Linux 核心詳解 第三版」這本書出版,然後從頭開始。

不過我晚上倒是花了不少時間,安裝VMware跟Ubuntu,因為速度太慢,等的時間比較多,一直弄到早上4:00,Ubuntu的介面看起來真簡潔。小兔的筆記本 Ubuntu 6.06 Dapper + VMware Tools,把安裝VMTools的方法寫得很清楚。

2006/7/4

誰說文學不能系統化! 字句鍛鍊法 by 黃永武

文學通常是只能意會不能言傳的一種藝術品,閱讀一本小說或文章的時候,常會有覺得是篇好文章的感覺,但要講出好在哪裡,是很困難的事情。這本書從欣賞的角度來看如何修辭,先條列綱目,然後解釋定義,最後提供實例。

第一個部分講鍛句的方法,分成五個部分,提供讓文句靈動、華美、有力、緊湊、變化的修辭方法,運用這些方法,就能帶給讀者這些感受。第二個部分講鍊字,提供了運字、代字、增字、減字這些方法,然後再以細項說明這些方法的用途。鍛句的方法是先分類五種用途,然後講方法細項,鍊字的方法是先講四種方法,然後再講用途細項,這兩個分類方式是相反的。

現在中學生的考試,由於強調「理解」的重要性,所以背誦的題目已經不多見,在國文這個科目也是一樣,一綱多本就是代表沒有標準的課本,因此考試的時候為了要避免偏袒某個版本的課本,所以就會考很多文學賞析的題目,課程綱要規定學生要學會某些修辭的方法,老師教學就得要以類似這本書的方式,講一個方法,然後舉很多例子。

這種情況更造成了補習班的商機,因為補習班名師可以將教材「系統化」整理出來,學生看了這些整理後的教材,自然而然就能輕鬆掌握考試的要領,學校的老師除非花了心思設計教學內容,要不然總會抓不到重點。就像這本書,要教修辭的時候,便提供了莫大的幫助,然而哪裡有這些整理後的資料,並不是每一個人都知道的,也許是國文科專業的老師才知道。

我看到一半的時候,才聽國文科的朋友說,這本書是大學修辭學的參考用書,他很驚訝我為什麼會去看,因為連他都沒有真正地翻閱過。我想是有緣,就在書展上看到,像這樣整理後的資料,並不多見,尤其是國文科,要想學習修辭的人,真的可以翻閱看看,以我自己來說,我並沒有每一頁每一個字都讀,有時候會跳過一些繁瑣的實例,這表示這本書的例子夠多,我們可以選擇性地閱讀,而不需要逐字翻閱。

書看完了,不代表就馬上會了這些方法,但我相信有需要的時候,就會派上用場。

2006/7/3

創意 ≠ 商機

強調「創意」已經不稀奇了,現在的中小學教育,從老師的教案到學生的作業,都需要有創意的表現才能獲得更高的評價,還有許多創意比賽,所以「要有創意」這件事對於大多數人來說,已經不是一件值得強調注意的事情。

有了創意之後,得要檢視這個創意本身是不是有商機,換句話說,要對某個族群的人有貢獻,要有實現的價值,這才是經得起考驗的創意,創意思考,不應該只是天馬行空胡思亂想,而是得要在心裡面,確確實實地思考,在花時間完成創意後,究竟有沒有實質的幫助。因為每一個人的時間有限,也不應該任意揮霍,對於有價值的想法,才值得花時間完成,而不是浪費了時間與金錢,得來幾張廢紙或失敗的產品。

有價值的創意,就有申請IPO的必要性,以避免創意人的權利被剝奪,經濟部有個專利商品化的網站,可以提供需要的人一些幫助,台中中港路也有一家科技研發企業公司,提供了特殊的檢視創意的服務,他們可以幫助創意人檢查創意的價值,並提供製作商品的相關服務。

然而軟體的專利對於創意人來說,一直是心中永遠的痛,因為以文字描述的軟體專利,造成了許多軟體或服務因為侵犯了別家公司的專利而興訟,例如也談軟體專利的問題軟體專利的毒害文章提供的幾個實例,也因此才產生了 Richard Stallman RMS的OSS運動,讓軟體的研發與創造更開放(電腦軟體專利淺談讓研發更自由 歐洲議會否決軟體專利修訂案)。

對於我們來說,站在OSS的軟體套件或framework的肩膀上,我們減少了開發時間,增加了工作效率,但我們也失去了製作這些套件,認識framework核心設計的機會,對於身為開發人員的我來說,通常都只佔在「使用者」的角度上看這些軟體套件,我不曉得自己有沒有製作的能力與技術,也許得要花時間trace程式碼下苦工才有收穫。

現在的java web領域似乎有被套件與framework淹沒的感覺,找工作也得要有相關framework的經驗才比較吃香,當初席捲世界的「物件導向」,23個設計模式,對於開發人員來說,似乎已經不是最重要的一件事,因為這些設計的功夫,都已經被隱藏在framework當中了。

記得在C++流行的時代裡,被討論最多的是要怎麼繼承、要怎麼封裝資料,還有討論設計模式。當初看了好幾次的Design Patterns,已經好久不曾翻閱了。因為java的開發與除錯速度快,OSS的套件與framework百家爭鳴不勝枚舉,被討論最多的反而是某某framework要怎麼使用、怎麼設定。

OSS強調不要重新開發輪子,但是我需不需要有製作輪子的技術呢?

2006/7/2

FTTH的時代終於來了

中華電信開始推動光纖到家服務

「中華電信光纖到家的優惠方案:前半年880元/月、後半年990元/月、第二年1099元/月。」這樣的定價看起來好像值得期待,實際上,我們還不曉得線路費是多少,另外還有光纖的轉接設備,也許要消費者自行購買,所以還是得要等中華電信正式推出的時候,才知道成本得花多少。但整體來說,FTTH是值得期待的,而家用網路周邊設備,也會有更高階的網路整合應用模式。

2006/6/21

地 by 張系國

這本小說集合了六個短篇,我不知道這幾個短篇之間,有沒有什麼理由讓他們集合在一起。「地」,是在說明離開了土地,就會想要取回失去的根,因為根是在土地上,但回到了地上,卻又生不出,為了生活只好繼續失根的漂流。

「超人列傳」這個短篇應該是這本小說中,印象讓人最深刻的一個,在「能量度方是合理,合理性才能存在!」的口號制約下,斐人傑為了超越凡人,參與了超人計畫,放棄了原本的肉體,將精神抽離注入其他生化/機械軀殼,也因此延長了壽命,但在成為超人的成員後,卻發現他受騙了,因為他得擔任一百年的太空巡視員。

在巡航的過程中,他遇到了各種超人,例如專心研究的提摩太博士,製作仿人膠泥肉體的數學家戈德,他發現了戈德的秘密:瑪麗蓮夢露。見過的超人很多,有半數已經放棄研究工作,在太空鬼混,致力研究的,卻又將成果秘而不宣,或是完成了不知有何用意的文學批評技術。

後來人工腦的誕生,讓所有超人為此回到底地球開會討論,是否要大量生產人工腦,並進一步消滅有缺陷的人類。斐人傑跟戈德無力挽回全體超人的決議,只好將兩個曾孫帶到另一個地球,他們也就是亞當與夏娃。

超人列傳的時間感跳躍衝擊著讀者,原本認為是未來可能會發生的超人世界,但到了小說最後卻又回到了人類的起源亞當與夏娃。這無疑是一篇最棒的科幻短篇。

2006/6/12

鄭豐喜基金會 義賣書展 買書

5/26~6/11 鄭豐喜基金會在台中Sogo 18樓舉辦年度五折義賣書展,上週六才去仔細地看過每一個區域,找到了最近想要購買的艾西莫夫基地系列4本,還有一些其他的書,總共買了十多本,花了一千多元,因為是五折價又可以報稅(捐贈列舉扣除),真的是蠻划算的。

就算少部分書的書況並不是特別好,有一點折頁或是浸水泛黃,但低價還是最重要的考量,書本買來看過一次之後,通常就是放在書架上,很少會再拿出來看,其實書況如何並不是最重要的,怎麼能期待是新書又給了五折的優惠。至於公益倒是沒想那麼多,我是因為需要而買書,而不是為了公益而買書,顯然我的愛心有待被再教育。

這個書展每年舉辦一次,明年應該還是可以看到這些書本出現,到時候再購買今年有點想買卻又沒買的書。

2006/6/11

滅亡三部曲 by 張草

北京滅亡、諸神滅亡、明日滅亡是張草的滅亡三部曲,看了第一本覺得故事意猶未盡,會接著想看下一部,但第二部主角就開始了讀經參修的過程,再把第三部看完,就覺得故事的時空交錯太複雜而不知道怎麼寫感想了。

故事是以時空旅行的技術為前提,而且因為旅行需要的能量太大,使得多數人物只能回到過去而無法前進未來。北京滅亡是明朝天啟六年的史實,是在寫過去,諸神滅亡裡的兩個時代的人物,在故事裡面都是順著時間往前邁進,可算是在寫現在,明日滅亡則是在尋求未來的預言,我想,過去、現在、未來也可以說是這三部曲的縮影。

在諸神滅亡的一開始,就放進了火星文明,甚至為了與地球文明切割,而打算摧毀地球的文明,雖然三部曲中,並沒有對火星文明著墨太多,但這樣的氣氛反而營造出,身在地球的我們,常常會仰望著天,看著另一個文明在空中閃爍的感受,就是一種被人監視觀察的感覺,從衛星、火星一直到外太空。

小說的結構都是由時空跳接的方式組合而成的,雖然這樣的手法切合時空旅行的主題,但我不知道作者是不是在創作的時候,也是這樣子跳躍式的書寫,還是先平行書寫後再拆解組合,時空交錯的過程,我在閱讀的時候,第一本覺得新鮮,到第三本就已經開始混亂,不同時代的人都從未來回到同一個時代的過去,有點搞不清楚先後順序與關係。

北京滅亡與明日滅亡都在小說一開始附上了故事內容過程的地圖,這對讀者來說,是從二度空間的文字轉換到了三度空間,多數的小說習慣以文字說明故事發生地點的關係、小說人物的移動過程,但能以地名直接對照到地圖,對讀者來說同時享受了時空旅行的時間感與空間感,讓讀者更貼近故事的過程,躍然於紙上。

主角正思身為一個純種,種族民族的狂熱情感,讓他想要回到過去解救中國的古文明,後來又成了一個追求神通的宗教狂熱份子。我在閱讀佛理的部分,到後來就沒有心思細讀,對於我們這種沒有佛學基礎的讀者來說,比較難在幾段習經的過程中,跟隨主角正思,探究佛學的真理。這跟閱讀倪匡的作品不同,因為他的作品平易近人,讀著通常會將自己化身成衛斯理,隨著情節出生入死。

這是一部好小說,好在作者張草能將所有素材與想法,編排地絲絲入扣不突兀,畢竟要像他一樣從1984年就被北京異變的報導吸引,然後才輾轉到台灣蒐集了更多深入的資料,在1999年完成第一部作品,這麼長久的時間與歲月裡,光維持熱情就不容易了,更何況要完成一部作品,究竟是不是靠從未來回到過去的張草提供幫助而完成的,我就不得而知了。

2006/6/3

95年國中基測數學第33題

看到這篇新聞稿後:基測數學第33題 答案無限多 (光華國中教師郭亮偉),我才去看了基測的數學題目,今年國中基測最後一題,題目確定是有問題的,但基本學力測驗推動工作委員會仍然決定(各科試題疑義審查會議新聞稿),以A與D兩個答案都算正確的,其他不算對,這是非常不恰當的作法,現在我還是不知道為什麼B跟C不可能是答案之一。

在測驗說明中,明確提示考生圖例只能當作參考,不代表實際的圖形,因此在題目說明條件不足的情況下,考生確實會心慌意亂不知道怎麼作答。如果用幾何作圖工具去檢查,答案確實有無限多組,但在考場用紙筆計算的學生,不知道當時作何感想。以下是我用 KSEG 模擬的結果。

2006/5/24

從天而降的三組pentomno 6x10解法

三組pentomno的解

玩了好久好久,都只能排出一種解法。今天晚上運氣真好,接連隨意徒手排出三組 pentomno 6x10 的解法。

2006/5/23

靈魂工程師 之二

上一篇文章談到了靈魂工程師,也就是家庭主夫housband這個職業,但我在google上搜尋之後,卻發現這個名詞在已經普遍被使用,尤其是對岸,但不是用在家庭主夫身上,而是「老師」。人類靈魂工程師——最富哲理的稱謂:人類靈魂工程師”一詞原是史達林對作家的稱謂,後來被教育家加裏寧引用到教育界。再放大一些,所有跟兒童有關的職業項目,應該都可以稱為「靈魂工程師」。

很不幸地,goole搜尋到的網頁與新聞,有很多負面的報導,我想原因就在於,身為一位老師,教育小孩是他/她的職業與工作,做得成功稱職是應該的,但做得不好,會對小孩有極深遠的影響,也許不是在學校裡面才會發生問題,而是在出了校園之後危害社會,所以失職的老師,通常會被媒體放大檢驗,以大篇幅報導,「某某老師」做了什麼不應該做的事情,然後大肆撻伐。

也有許多新聞會說,「某某老師」因為承受不了職業的壓力而自殺,這時候通常會稍微檢討教師的工作內容合不合理,工時正不正常,(暑假要不要去學校,晚上要不要留校等等問題),但討論過後卻還是得面對「少子化」的現實威脅,因為就學人口逐漸減少,學校為了求生存,相對得付出更多的心力辦學。

老師這個工作,專業的內容其實是枯燥乏味的,同樣一份教材教幾十年,反反覆覆地得自己調適心情,有趣的地方是學生不同,學生在三年的過程中跟著老師一同成長,因為人不一樣了,教與學之間產生了不同的火花,學生的成就是老師這個工作回饋與樂趣的來源。


人類靈魂「工程師」
“靈魂工程師”豈可濫施“語言暴力”
香港地﹕靈魂工程師
靈魂工程師
張林:靈魂墮落的大陸靈魂工程師
不懈追求的“靈魂工程師”
一位偉大的「人類靈魂工程師」──安徒生

靈魂工程師 之一

看到「靈魂工程師」這個職稱,你會聯想到什麼職業?

靈魂是人類跟其他動物差異最大的一個部分,在維基百科中整理了,不同的宗教與社會對靈魂的不同解釋。雖然有些宗教認為生物都有生物靈,但一般人所認同的靈魂通常單指人類,而工程師就是這個職業的屬性,師字是尊稱,可為人師者本身必有某項專業能力,凌駕其他人之上,而工程師是專指理工科方面的專才,通常只有理工科的職業項目,會以工程師自居。因此靈魂工程師我們可以理解為,與人類工程科學有關的一項職業。

其實這句話也是從電視上的一個節目「今晚哪裡有問題」聽到的,節目中討論幾個中年轉業的成功案例,節目的重點放在不老廚房的老闆徐茂鑫身上,但我注意到的是,坐在畫面左手邊那個中年轉業,成為專職家庭主夫的前記者江兒,從生活繽紛的記者生活,轉變成為一個專職的家庭主夫,在家帶小孩,現在也以成功的主夫經驗,在外面四處演講。

在家照顧小孩其實是一件非常辛苦的工作,也許大家會認為,不過是餵小朋友吃飯,招呼他睡覺跟他玩,有什麼困難的嗎?如果真正有帶過小朋友的應該會比較清楚,帶小孩辛苦的地方是,大人得目不轉睛看著小孩在做什麼事情,因為他隨時可能會一個箭步,就打翻杯子,更會在大人不注意的時候,在沙發跳上跳下,你說不可以做的,他偏偏要去做。其實工作的內容不難,難的是耐心與毅力,還有想睡不能睡的壓力。

來賓陶大偉談到家庭主夫在美國其實還蠻多的,社會沒有異樣的歧視眼光,甚至創造了一個新名詞 housband(house + husband),但在台灣,照顧家庭與小孩通常是媽媽的工作,婆婆媽媽會一同帶小孩出門散步,互相交流育兒經驗,社會還不大能接受家庭主夫,如果一群媽媽中間有一個爸爸各自帶了自己的小孩在公園裡玩,這位爸爸還是不可避免地會引人側目。

江兒在節目最後,為家庭主夫下了一個絕佳的註腳,他說他問過許多媽媽身份證上的職業欄,有些填自由業、家管、不然就是空白,但他多年來的經驗,認為職業欄象徵著對自己工作的自信與認同,所以建議大家改為「靈魂工程師」,不單是給自己肯定,也讓社會正視這個職業。另外江兒還以他的小孩所說的一段話下了另一個註腳,「爸爸,你認為錢跟生命那一個重要」「當然是生命重要阿!」「所以說我比錢更重要,不是嗎?因為我是一個生命。」

ps. 大約是幾年前我的工作不穩定有變動的時候開始,我自己就分析覺得,老婆的工作經濟效益比我高,如果小孩真的找不到人照顧的時候,是不是就得要由我辭掉工作回家帶小孩,目前因為有媽媽的幫忙,還不需要這樣做,但工作效益的現實情形依然是如此。這應該是一廂情願的想法,因為老婆總是定期地會有職業疲乏的症狀,會想要請育嬰假回家帶小孩,「誰要回家帶小孩」這個問題,也許就等到真正發生再來討論解決吧!

----------------------------------------
中年轉業不用怕!太太當你的靠山?之二(3/13播出)
****** 本來想要轉錄這篇文章,但不應該違反blog使用規範,直接把這篇blog文章轉錄過來,我覺得這個案例對我來說非常重要,希望這篇文章的連結不會突然消失 ******

2006/5/22

膠帶 是 平民設計師的利器

前不久讀了亨利‧波卓的「小處著手-追求完美的設計」,書本裡提到了膠帶這個特殊的發明,因為膠帶取得容易,使用便利,讓每一個人都能在生活上運用膠帶,成為一個平民設計師。從來沒有想過,棕色的紙箱膠帶竟然也是女明星、模特兒們,處理胸部假奶提升罩杯的好幫手。

週末不小心轉台看到康熙來了正在訪問白歆惠、童怡禎及香月明美三位名模暢談防走光、避免穿幫的方法,原因自然是白歆惠在工作不慎被媒體拍到胸部的走光照片,本來談談走光也沒什麼,這些照片都是那些遊走衣服尺寸邊緣,能露多少就多少的明星們,不可避免的失誤照片,但我沒想到,紙箱膠帶竟然是她們共同的輔助工具。

節目中她們談著談著,就拿起兩個假奶,往假模特兒的胸部下緣放,接著就拿著紙箱膠帶從胸部的左下角沿著下緣拉出一個微笑曲線,這就能在短時間內固定住假奶,提升罩杯。更不可思議的是,小S接著談起她參加某個頒獎典禮的經驗,因為她的衣服實在是找不到合適的內褲穿,所以她最後決定不穿內褲,但開車到半途卻又想說如果不慎走光也不大好,就跟路旁店家借了廁所,用紙箱膠帶往重要的第三點貼,當時時間緊急沒想那麼多,不過撕下來的時候就有得受了。

簡單的紙箱膠帶有這種用途,真讓人大開眼界,光鮮亮麗的造型背後,是要付出代價的。小S的談話尺度之寬與無厘頭,讓她在懷孕暫停演藝事業,然後生小孩,還能維持綜藝界的地位,就個人事業版圖的經營來說,她成功了,真的蠻佩服她的。


低胸上陣《康熙來了》 小S演示防走光絕招
《康熙來了》錄影 小S演示防走光絕招(組圖)

2006/5/17

圖解經濟學 by 溫美珍

易博士出版社發行了一系列的「圖解xxx」叢書,委託城邦發行,有哲學、心理學、社會學等等專業學科,我買了兩本,一本是「圖解經濟學」,另一本是「圖說希臘北歐神話」,從「圖解」這兩個字應該不難猜出,出版這些書的目的是為了讓一般不熟悉某一個專業學科的人,也能在圖解的方式下,瞭解該學科的基本必備常識與精華。

我先看了經濟學這本書,整體來看,編排的設計明顯可以看出每一個單元主題大都是在兩頁的範圍內講完,而且左邊那頁設計為文字說明部分,右邊則是圖解的部分,每一個主題都有圖解來幫助讀者記憶與瞭解。如果認為這樣的書,內容沒有深度的話,那顯然是錯誤的想法。圖解經濟學這本書的內容,就是講解許多經濟學的基本理論與專有名詞,對於我們這種非專業的學習者來說,就算是看得懂也沒辦法一次就把整本書都記到腦子裡,所以我只能把這本書當作參考,等到遇到不懂的專有名詞時,再拿出來查閱吧。

以下列出各章內容提到的專有名詞,這個連結圖解經濟學,更把專有名詞的解釋寫出來,直接參考不寫了。

第一章 消費者行為理論
需求與供給、需求法則、正常財與劣等財、奢侈品與季芬財、替代效果與所得效果、替代品與互補品、均衡價格/數量、市場機能、需求/供給彈性分析、效用分析、邊際效用遞減法則、機會成本、後彎的勞動供給曲線。

第二章 生產理論與市場結構
生產成本(固定成本與變動成本)、短期/長期成本、超額利潤、規模經濟與範疇經濟、完全競爭市場與不完全競爭市場(獨佔、壟斷、寡佔)、OPEC、差別訂價、完全價格歧視與消費者剩餘、賽局理論、零和遊戲/非零和遊戲

第三章 市場失靈及經濟效率
市場失靈、資訊不對稱、檸檬市場理論、逆向選擇、仿冒、市場外部性、公共財

第四章 國民所得
GDP、GNP、名目/實質GDP、消費與儲蓄(相對消費理論、恆常所得假說、生命週期假說、利率、物價水準)、外國直接/間接投資、WTO

第五章 財政政策與貨幣政策
擴張性/緊縮性財政政策、政府赤字(賦稅融通、公債融通、貨幣融通)、貨幣->購買力、直接/間接金融、中央銀行(存款準備率、隔夜拆款利率、M1B、M2)、公開市場操作、貨幣政策(公債、重貼現率、法定準備率)、利率

第六章 國際貿易
絕對利益、比較利益(機會成本)、關稅壁壘(改善貿易赤字、增加財政收入、保護幼稚產業)、進口限額、WTO、傾銷/反傾銷

第七章 國際金融
匯率、外匯存底、央行干預、國際收支帳BOP(經常帳、資本帳)、經濟指標

第八章 經濟成長與發展
軟/硬著陸、景氣循環、景氣對策信號、通貨膨脹、消費者物價指數CPI、通貨緊縮(冷火雞法、漸進式法)、失業率(摩擦性失業、結構性失業、循環性失業)

博客來 圖解經濟學

2006/5/15

AJAX & Ruby on Rails

5/13是我第一次參加SA@台中的活動,「AJAX & Ruby on Rails心得分享!」,對這個活動的規模與場地覺得蠻令人感動的,一個免費的活動能吸引將近一百個人,場地雖然在偏遠的清水國小,還能把整間視聽教室坐滿,演講的內容與品質也令人印象深刻。因為不熟悉路況,提早出發也蠻早到場,看到了一位人物坐在後面,沒認錯的話應該是jserv,但我這個檯面下的人物並沒有大方地趨前致意。

有段時間沒有聽這麼專業的演講了,獲益良多。對我來說,AJAX帶來的困擾並不只是技術上的工具支援問題,更重要的是,我必須要思考在網站的介面上的哪個部分的功能,應用AJAX的「非同步」功能,另外一個問題,就是在跟美工人員配合時,要怎麼共同以「非同步」的概念為前提,設計網站的人機介面。就我觀察演講者James展示的AJAX網站,多數運用AJAX的網站畫面都是單純儉樸,以「提供資訊」為主要訴求,這些網站的重點放在資訊與內容,沒有非常複雜的美工,而最好的人機介面就是要讓使用者用得愉快,不管你用了什麼技術。

「讓人愉快Make User Happy」最後這句話,也是第二個Ruby on Rails的講題重點,Ruby的設計理念,就是要「Make Programmer Happy!」,就演講者demo的過程看來,Ruby做了很多「預設選項」的工作,以節省程式設計師繁雜的coding與configuration工作,能節省這麼多工作內容,的確是蠻神奇的。也許真的該花點時間,瞭解Ruby。

今天我突然想到,如果跳脫了預設選項,Ruby on Rails在製作客製化功能的時候,是不是也一樣方便?
另外,演講者(contiguous?)也提到,Rails在寫網頁的時候也是用Ruby,而不是傳統的Html,這個問題就像是servlet一樣,最後還是得轉換成jsp,才能推廣使用,也許Ruby該放棄這個堅持,走「中庸路線」,但是放棄這個堅持,或許就等於接受了另一個亂源,要怎麼處理比較恰當,不瞭解內幕的我不敢下結論。

回想當初學習java的過程,從學習語法開始,然後就是學習sun提供的標準函示庫,然後是眾多open source套件,如果想要深入瞭解Ruby,勢必也要經歷這樣的過程,java的優勢是有SUN及IBM等資訊大廠支援,Ruby有嗎?Ruby如果走向linux這樣的OSS生態環境,就得面對OSS所帶來的drawback。嗯...我還是暫時先把Ruby當作高階語言的玩具吧。

2006/5/2

我,機器人 I, Robot by 艾西莫夫 Isaac Asimov

I Robot 這部奠定了機器人科學基礎的作品,是在1942年由「現代機器人故事之父」艾西莫夫,以機器人學三大法則,為機器人律法起草,描繪出一個「人機共處」的未來世界,而不是人機二元對立的衝突世界。各短篇文章針對三大法則,以邏輯理性哲學思考的方式,推論出故事的情節與脈絡。

不可免俗地,我得再次重述在1942年「Runaround轉圈圈」這篇文章中,首次詳列的機器人學三大法則:
1. 機器人不得傷害人類,或袖手旁觀坐視人類受到傷害。
2. 除非違背第一法則,機器人必須服從人類的命令。
3. 在不違背第一法則及第二法則的情況下,機器人必須保護自己。

The Three Laws of Robotics
1. A robot may not inhure a human being, or, through inaction, allow a human being to come to harm.
2. A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.
3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.

全書共有九個短篇,譯者貼心地將這些短篇文章所描繪的1982年到2065年,以「大事紀」的方式把重要的事件與故事發生的年代詳列出來。我覺得可以將這些故事的機器人主角分成四類(在機器人名稱的後面有兩個年代,第一個是故事發生的年代,第二個是寫作完成年代):

1. 家用機器人:小機 Robbie (1998,1940)
這個故事背後有個需要思考的問題:「第一部家用機器人會是什麼?」艾西莫夫認為是保母,但目前機器人發展的歷程來看,第一部家用機器人應該會是專司打掃的管家,不容置疑地,機器人的運用將會從商用工廠開始,但要面對一般的使用者,第一項打入家庭的機器人產品,就是機器人公司重要的里程碑,如果這項決策成功,公司的營業額就能有明顯地成長。但顯然從這九篇短文來看,除了這第一篇Robbie之外,其他都是討論商用機器人的故事,在「證據」中,甚至明訂「禁止在住人世界使用機器人」這項嚴格規定。顯然在機器人與AI技術高度發展的社會中,無法避免必須要立法限制機器人的使用範圍,究竟要如何成功將機器人打入一般大眾的市場,又不會危害人類本身的利益,是需要討論的一大課題。

2. 決策中心:轉圈圈 SPD13 (2015,1942)、抓兔子 DV5 (2016,1944)
轉圈圈討論機器人學三大法則的作用下,SPD13要如何處理第二與第三法則的衝突,SPD13的核心接收兩條法則產生的相反結果,決策出互相平衡的行為表現。抓兔子則是一個DV5主體控制六個從屬個體,DV5在同時傳送緊急命令給六個從屬體的狀況下,超過負荷而發瘋了。從無線傳輸訊息的角度來看,似乎不大合理,因為無線可以用廣播的方式,同時傳送給六個從屬個體,那麼就不會產生故事裡所說明的那種狀況,比較可能發生問題的地方是,DV5主體接收六個從屬個體回饋資訊的地方,這時候DV5才需要面臨同時處理六個個體的資訊,而產生超過負荷的問題。

3. 理性思考:理性 QT1 (2015,1941)、騙子 RB34 (2021,1941)、消失無蹤 Nestor10 (2029,1947)、逃避 Brain (2029,1945)
在各機器人理性的邏輯思考下,最終的決策中心必須要先收集資訊,然後再以機器人律法,也就是三大法則,決定最後表現的行為,這幾個短篇的機器人,全都是在「思考」後,產生令人驚訝的行為,而在故事主角仔細推理後,才慢慢地抽絲剝繭,瞭解機器人異常行為的決策過程,再利用三大律法解決問題。其中QT1稍微有點不同,QT1的思考邏輯自成一格,也因為能獨立思考,所以能擔負太空站的任務。

4. 機器人主導:證據 史蒂芬‧拜爾萊 (2032,1946)、可避免的衝突 Machine (2052,1950)
「證據」裡描述了史蒂芬‧拜爾萊從地方檢察官到市長的經歷過程,政治競爭對手希望從各種管道證實拜爾萊是個正子人形機器人,但都不得其法。如果人形機器人的技術發揮到極致,世界就會進步到「Ghost in the Shell攻殼機動隊」所設定的世界,Shell代表人體或是義體,Ghost代表靈魂或是AI,拜爾萊的情況就跟草椎素子一樣,是把人類的靈魂注入到義體當中,不同的是他們存在的世界,一個立法限制人形機器人不得存在於住人世界中,一個是正大光明地擔任警察追查各種資訊犯罪。

「可避免的衝突」中規劃了一個由機體控制的美麗新世界,由機體掌握全人類的幸福,類似一種獨裁政權,這個系統如果再往前推演,就是「Matrix」所設定的世界。在第一法則的條件作用下,如果未來世界的生活環境已經惡劣到人類的生命體無法承受的狀態,而Machine邏輯推演認為,為了不袖手旁觀坐視人類受到傷害,將人類保存在一個類似Matrix的網路下,再由Matrix連接每一個人的感官神經,模擬出一個美好的人類世界,對人類來說,這就是最好的生活環境,既能快樂地生活在虛擬世界中,生命也得以存續。

然而艾西莫夫透過蘇珊‧凱文博士表達對未來的機體Machine世界,有著無限的憧憬,也認定永遠不會出錯的Machine所掌握的世界經濟體,對人類來說,絕對有著最正面的結果與未來,這無疑是個美麗新世界,也是個烏托邦,Machine世界屬於一種獨裁政權,而在無止境的邏輯推演下,我們無法估計推演的結果為何,也沒有任何機制可以證實,Machine的推演是絕對的善,反而有可能變成類似Matrix那樣的結局。不過這樣單純的憧憬,也帶領各位讀者神往至另一層至善的境界,機器人的世界也可以這樣美輪美奐,對這一系列機器人世界的科幻歷史故事來說,這是一個適當的結局。


各個短篇自成一套思考邏輯,九篇短篇集合起來,又是一部機器人發展史,我們不得不佩服艾西莫夫是如何在1942年就自己構造出一套完整的機器人未來世界。這本書令人驚訝地,以133元定價,不知道是不是因為著作權過期的關係,但價格便宜不代表可視如敝屣,相反地,這部曠世鉅作需要讀者用心體會,這「人機共處」未來世界的模樣。

貓頭鷹出版社 我,機器人 I, Robot

************各短篇文章簡述**************
1. 小機 Robbie (1998,1940)
機器保母,完全地順從人類,但女孩葛洛莉雅的媽媽無法認同一部沒有思考靈魂的機器,她懷疑 Robbie 可能會在某個時候突然發瘋,因此強制將 Robbie 從葛洛莉雅身邊帶走,女孩無法接受她的朋友突然消失,日益沈默消瘦。葛洛莉雅的一個簡單問題「你見到過小機嗎?」「一個像我的機器人?」讓會說話的機器人無法負荷自己只是群體中的一員這個事實,而稍壞了數個線圈。小機在跟葛洛莉雅重逢的工廠裡,營救了小女孩,一個充滿戲劇性的重逢畫面。

2. 轉圈圈 SPD13 (2015,1942)
在人類不在現場的採硒礦池中,SPD13接受了一個普通的正常命令,奉命採礦,由於三大法則之間的衝突是由正子腦中不同的正子電位解決,第三法則讓機器人面臨險境時,瞭解危險而回頭,第二法則接受人類命令,走入險境採礦,在這兩個法則衝突作用下,達成一個平衡狀態致使SPD13一直轉圈圈,為了解決這個衝突,鮑爾讓自己身歷險境,使SPD13以最高第一法則執行解救人類的命令。

3. 理性 QT1 (2015,1941)
被拼湊起來的QT1,對自己的存在產生好奇,「因為我思考,所以我存在。」讓QT1自我形成一套思考邏輯,原因在於,QT1有個基本公設,因為人類組成材料軟弱無力,缺乏持久性與強度,每隔一段時間就會昏迷,相反地QT1是個完美成品,使用效率100%而且可輕易克服極端環境。所以太空站的核心「主宰」,最先創造人類,而後創造了QT1來服侍主宰。公設建立於假設之上,而且靠信心支持,沒有動搖的可能。

4. 抓兔子 DV5 (2016,1944)
一對六的從屬機器人DV5,在人類不在場的時候,個體主體性增加,再加上危急的時候,使得DV5為了協調其他六個從屬個體發佈六重命令,致使該功能超過負荷而發生問題,當DV5變成精神病患時,就進入了迷亂狀態,不知不覺地玩起自己的手指,鮑爾以處決一個從屬體解決了DV5的迷亂狀態。

5. 騙子 RB34 (2021,1941)
會透視心靈的RB34為了遵循第一法則,機器人不得傷害人類,包含了任何種類的傷害,不可避免地玩弄了三位機器人學專家,RB34說謊,他回答的答案都是第一時間面對他的人,心理面所渴望聽到的答案。

6. 消失無蹤 Nestor10 (2029,1947)
為了一項特殊任務,未完整印記第一法則的機器人Nestor10,在工程師布萊克的咒罵下「消失了」,僅印記了「機器人不得傷害人類」的Nestore10聰明地消失在其他六十二個同型機器人NS2當中,蘇珊‧凱文博士受命透過第一法則找出這部消失的Nestor10。

7. 逃避 Brain (2029,1945)
金頭腦Brain在蘇珊‧凱文博士的提示前提下:在碰觸到人類死亡問題時,直接停止計算將資料交回來,以避免金頭腦報銷,接受計算恆星躍遷研發曲速引擎的任務,Brain成功地建造了恆星際躍遷的太空船,並讓鮑爾與多諾凡成為第一次的測試飛行員。然而恆星際躍遷在光速有限的條件下,物質與能量根本無法存在於曲速空間中,這代表人類的死亡,凱文博士的前提讓Brain有足夠的時間瞭解死亡只是暫時現象,於是Brain選擇逃避現實,促成了這次成功的恆星際躍遷飛行。

8. 證據 史蒂芬‧拜爾萊 (2032,1946)
政治敵人法蘭西斯‧奎恩面對一位令人充滿懷疑的地方檢察官史蒂芬‧拜爾萊,要脅弗瑞德‧蘭寧博士確認拜爾萊究竟是不是正子人形機器人,因為拜爾萊從來不吃東西,由於住人世界嚴禁使用人形機器人,正子機器人唯一的製造商美國機器人與機械人公司所有生產的機器人都只租不賣,正子腦都會被回收且銷毀,如果證實拜爾萊是個機器人,這樣的事實將會危害到公司的未來。但蘭寧與凱文博士,無法區分完人跟機器人的差別。凱文最後的結論是,機器人無法傷害人類,即使拜爾萊是不朽的完美機器人,他會在任期後自動離開職位,因為他不能讓人類知道自己被機器人統治過。終究沒有直接證據證實史蒂芬‧拜爾萊是個機器人。

9. 可避免的衝突 Machine (2052,1950)
四大界域分別由四個機體Machine掌握,由於他們開始產生瑕疵的計算結果,讓世界總協史蒂芬‧拜爾萊逐一檢討四大界域的現狀與問題。拜爾萊認為原因出在反對機體的「人本協會」,而希望把人本協會成員以激烈的手段將他們處理掉,而凱文解析,Machine為了不傷害人類,極力避免經濟脫序,經濟脫序的主因又會是機體被作廢,所以Machine的首要考量是保全自己,因此Machine悄悄地將威脅他們的這些成員,輕輕地搖晃讓他們失去重要的職權,這是對所有人類最適當的解決方式。「人類對未來已經失去自己的決定權」,因為機體已經掌握了全球經濟的控制權,在Machine的協調掌握下,所有的衝突都能避免,這是個更完美的社會。


我發現的勘誤:
p.174 第7行 經調查過奎恩先生 -> 經調查過拜爾萊先生

2006/4/21

小處著手-追求完美的設計 by 亨利‧波卓

這是一本討論工業設計的書,作者在前兩個章節,重新定義了「設計」這個集動詞與名詞於一身的詞語,後面十多個章節,就是以許多生活上會遇到的實例,來驗證一開始所定義的設計。整本書一直重複這幾個概念,「設計是在諸多限制中,選擇限制的用途,然後在各種選擇間妥協」「沒有完美的設計,沒有完美的成品」。創意思考強調「跳脫框架思考」,然而設計卻限制「在框架內思考」。

書本裡提到的例子,包含了飲用水(水杯、瓶裝水、濾水器)、照明(車頭燈、手電筒、檯燈)、車內設計(車內杯架、控制按鈕)、盒裝設計(模型收納與陳列、微波爐、計算機、噴墨印表機、CD、行李箱)、空間動線設計(完美超市、排隊結帳、收費站)、紙袋(購物袋、塑膠袋、購物車)、居家設計(烹調、吸塵器、不沾鍋、門把高度、電燈開關的位置、插座)、庶民設計(膠帶與WD-40,WD-40把該走的東西弄走,膠帶把該留的東西留下)、廚房與水槽(單桿水龍頭、削皮器)、座椅、數字(電話與計算機的數字鍵盤、電話號碼)、選擇的設計(用餐選擇地點、座位、菜色、甜點、小費)、牙刷、購屋與裝潢、樓梯。

根據這本書重新對「設計」兩個字所做的詮釋,不難聯想到,為什麼在學習物件導向程式設計時,一旦學到了設計模式這個部分,我們就會發現Design Patterns所提供的23種基本的設計模式,只不過是因應最常見的問題,所提供最基本的設計方法,在軟體設計裡最常說的一句話就是,沒有絕對的設計方法,只要有自己的理由與目的,就能提出自己的設計見解與方法。在做案子的過程中,從一開始蒐集需求,我們就會因應不同的需要而採用不同的軟體套件,產生不一樣的設計架構,但這些設計的內容,僅只於細部的設計與調整,整個大架構還是遵循前人或是以前專案的經驗成果,以J2EE來說就是J2EE Patterns。雖說是軟體的architect,但設計的本質不在於創新,而是因應不同的專案需要,以現有的blueprint為基礎來修改與調整,這就是軟體程式設計。

科技產品首重使用,要緊跟著使用者的態度與腳步,重大的創新與變革,除非帶來了極大的優點與便利性,否則無法說服一般使用者花時間適應這個新的科技產品,在公司的決策上,要對產品提出「革新」或是「改進」,就需要管理者針對產品的變革做充分的討論後,定義出合理的設計「框架」,然後接受在這個框架的限制內,所提出的設計。

小處著手-追求完美的設計

2006/4/18

令人苦惱的Paradox(第二集)

感謝一位不知名的網友提醒 Hxtt Paradox JDBC Driver 能存取Paradox資料庫,再加上業主對這個軟體 Single Server License 180USD售價爽快地付錢,我才能順利地使用Java去操作 Paradox DB。BLOB欄位也可以在慢慢地 try error 方式下,撰寫一個utility method解決Rich Text格式的text formatting轉換,在過程中,JUnit幫了大忙。

但這並不代表所有的問題都已經被解決了,在實作搜尋功能的過程中,我發現搜尋結果要在網頁上分頁呈現,對於Paradox來說是一件很辛苦的事情,我找不到類似Oracle的 rownum SQL語法(select * from table where rownum >=21 and rownum <40),如果要把SQL搜尋結果一次全讀進Sesion裡的一個暫存物件,如果搜尋結果是一千筆,就得花時間在SQL查詢->產生Value Object->存入Session裡面,不但耗時又耗記憶體。這個時候,偉大的 Lucene 出現了,對Lucene沒有深入研究的我,在Javaworld上所幸有 hkdennis2k 回答,我知道了當欄位資料以Keyword方式產生index時( document.add(Field.Keyword("field", "abcd")) ),就可以使用 "a*"這種搜尋語法支援字首搜尋。這無疑是一個大好的消息,我馬上就能讓這個案子能以類似字典搜尋的方式,以非常快的速度支援"a*" 1000多筆資料 ->"ab*" 500多筆資料 ->"aba*" 50幾筆資料 的逐步搜尋。通常在第三個字母的時候,資料的數量就已經縮小到可以接受的範圍了,我無法想像,光用SQL要怎麼處理這種搜尋。

接下來又遇到了另一個問題,就是Hxtt Paradox JDBC Driver在Join table的時候,明顯覺得速度變慢,再將上摧殘DB的 "like" SQL語法(select * from table1, table2 where table1.field1=table2.field1, table1.field2 like '%somestring%'),這個時候,偉大的Lucene又被我搬出來使用,把對應的欄位都存入lucene index之後,犀利的搜尋功能馬上就能提升到「快狠準」的程度。結果現在我如果要重新產生lucene index,每次都得花將近一個小時,得到一個15MB資料夾大小的Lucene index。目前我不知道這麼大一個index到底有沒有任何缺點,但Lucene的確幫了我一個大忙。

目前功能已經完成約3/4,也開始準備要將畫面嵌入進美工畫面裡。感謝這些Open Source專案的幫助:
Tomcat Application Server
Lucene Search Engine
JUnit
DWR(http://getahead.ltd.uk/dwr/)
Eclipse IDE

ps. 可能不會有第三集,因為已經不需要再特別記錄什麼事情,現在只等著收尾結案了。

2006/4/6

Spriggan 遺跡守護靈 by 大友克洋

這部由漫畫「轟天高校生」改編的電影作品,英文名字叫做「Spriggan」,中文翻譯成「世界末日」,但依照原意應該翻譯成「遺跡守護靈」,從網路上的文章介紹才知道,漫畫原作比改編電影好看。

我還沒看過漫畫,看完影片所得到的感想,就是「不合理」,雖然看過很多科幻的作品,但是科幻不代表可以胡說八道,整個故事的內容的佈局,必須要不著痕跡地讓讀著欣然接受,改編的作品尤其困難,因為要能在短時間內,把一個大故事講完,既不失原味,又能自成一局,的確是一件非常困難的工作。

縱使故事裡的主角Spriggan有著Akira般的神奇力量,但他們還是藉助了人類的力量,例如特殊的金屬,與改造的過程,Akira的改造比較能讓人接受,因為Akira是引發人類的潛能,只要讀者相信人類的潛能無限,自然就能接受Akira的神話。本片的主題,諾亞方舟本身的出現與存在就不合理,也沒有說明任何原因。片子給了方舟創造生命的新義,但一架無中生有的方舟,竟然能夠操控地球的天氣,又竟然那麼脆弱地,隨便就能啟動破壞程序,讓人覺得不可思議。美國人的實驗品馬克多魯竟然能有這麼強的超能力,他腦袋背後的那些管線竟然可以增長,又是一件不可思議的事。

最後御神苗優跟馬克多魯的對抗,馬克多魯竟然會在沒有失去超能力的情況下,突然被優近身刺傷,又是一件不可思議的事。然後出現了三架來得不合理的飛機,他們還能從空中自由落體的時候,利用繩鉤鉤住機身,更是不可思議。

如果故事本身不具有足夠的深度,再好的技術與畫工也是枉然。跟「Steam Boy」一樣,又是大友克洋一部令人失望的作品。

轟天高校生的傳奇冒險世界

2006/4/4

作文十九問 by 王鼎鈞

這本書延續了作文七巧講解文體的內容,說明寫作的技巧。十九問分別代表十九個單元主題,以問答漸進的方式,教導讀者如何寫作。作文不是一種蒙著頭硬幹的技術,也不是拿到題目,看了主題,就能下筆萬言不能輒止的,作文的基本技巧,在王鼎鈞這兩本書裡面,需要細細的體會。

以下這些單元主題並不是作者寫的,而是看完每一個章節之後,就可以明瞭的單元核心,也可以說是文心。

第一 用字
第二 佈局、鋪陳
第三 取材
第四 審題
第五 起承轉合
第六 比喻
第七 立意
第八 有我 無我
第九 下定義
第十 單線推論
十一 放大術
十二 刺激->思考->決定
十三 贊成、反對、調和
十四 文心、詩心
十五 蛇啣其尾、因果循環
十六 錯用、用錯、錯字,文學創作
十七 詩法
十八 抒情、議論
十九 文學的功用

2006/4/1

我們喝的是什麼水?

大家出門的時候,很自然地會在便利商店購買瓶裝水,選擇瓶裝水的時候,常常很在意水裡的添加物是什麼,裡面含有什麼礦物質的成分,但是有很多人家裡,裝著逆滲透的過濾器,由於經過逆滲透處理後的水是純水,所以這種水應該是「不含」任何添加物的,這種互相矛盾的心理感受,究竟有多少人瞭解。(有關逆滲透處理後的水能不能當作飲用水的爭議似乎沒有結論,在這裡我不討論這個問題。)

現代人為了取得乾淨的水源,開始有工廠為大家處理飲用水,然後裝在瓶子裡面販售,但這些瓶裝水的保存期限通常是半年或一年,如果信任飲用水工廠的處理過程,那麼買瓶裝水來喝應該是很安心的,但是很明顯地從網路上的報導看來,有六成的瓶裝水工廠是以自來水為水源,然後加工處理成瓶裝水的,另外保特瓶也有可能會析出有害物質的疑慮,看來瓶裝水似乎也是種包裝商品,能不能喝,會不會喝出問題,沒有人可以保證。

在「小處著手」這本講工業設計的書中,提到了飲用水的歷史軌跡,從一開始的公用水源,大家共用水杯開始,到後來有人發明了免洗紙杯,然後是瓶裝水在70年代開始在美國風行,大家開始習慣直接用瓶子喝水,然後開始有人自己帶空的塑膠瓶子上學或上班。有些人認為家裡的自來水不夠潔淨,所以會使用過濾器處理水源,再不然就是去外頭買工廠處理過的水,儲放在家裡面的水箱中,也有人省錢直接到山上取山泉水。大家最在意的就是要取得自己最「放心」的水源。

瓶裝水所耗費的成本相當昂貴,飲用的代價要比自來水高很多,經過包裝後的瓶裝水,大家完全不會有任何疑慮,反而非常願意花錢買水,這種消費習慣與產品,顯然是透過商業的包裝手法,慢慢地教育消費者,讓大家自然而然產生的消費習慣。

瓶裝水也不是一種極惡的產物,在發生天災人禍的時候,瓶裝水產生了很大的作用,例如發生了地震時,整個災區如果沒有瓶裝水的支援,那麼不乾淨的水源很快地會讓災民發生傳染病,產生二次傷害。

對有商業目的的工廠來說,越多人買水喝,就能轉越多錢,但相對地會產生更多社會成本,對自然環境有更大的影響與傷害,我們該好好思考,如何才能有乾淨的水源,又不需要耗費太多資源的方法。

環保署就逆滲透處理水與蒸餾水是否適合飲用提出說明
網路追追追/RO逆滲透水與蒸餾水最不能喝?
全球瓶裝水消費驚人 資源代價超乎想像
瓶裝水資源浪費驚人 成本是自來水的1萬倍
農夫山泉和69家純淨水廠商唇槍舌劍
瓶裝水可能危害健康
寶特瓶裝水放3個月含銻?衛生署:量極少、從未檢出
《江南時報》:瓶裝水水質未必高于自來水
廣東 瓶裝水協會:不符合條件取消“放心水店”稱號
大溪地的瓶裝水
寶特瓶裝水悶車內 最好不要再喝
寶特瓶不環保 還會改變氣候
More Water 竹炭水

2006/3/14

我這樣教出資優兒 by 徐權鼎

當畫面出現一隻寫滿英文單字的左手時,我不得不將注意力放在這位爸爸身上,他是徐權鼎,一個國中畢業的爸爸,現在經營一家童裝店,自嘲生意越做越小的他,把自己的心力放在一雙兒女的教養上,這本書是作者為了爭取時效,直接到出版社買小朋友的參考書,在買書的過程中,接受了社長的建議,將他教養小孩的心得付諸文字,把經驗分享給其他父母。

這本書是以散文的風格集合而成的,每一篇短文都以作者的教育理念與想法為標題,然後在文章裡面寫出他親身的經歷,所以整本書看起來有點瑣碎,也沒有絕對的時間順序,看不出作者從無到有的心路歷程,也不知道他是怎麼從錯誤中學習與成長,逐步調整自己教育的方式與腳步。

從書本的語氣來看,作者顯然是個非常有原則的爸爸,這跟「優秀是教出來的」的作者隆‧克拉克一樣,一旦跟孩子們互相約定,訂出遊戲規則,就得從自己先遵守開始,才能要求孩子們遵守規定。

家裡的小朋友非常討厭看醫生跟剪頭髮,每次開車經過理髮廳的時候,總會說「我不要剪頭髮」,幾天前又到了該剪頭髮的時候,從星期六晚上洗澡的時候開始,因為他不想洗頭髮,我就順勢跟他說,你不洗頭髮的話明天要去剪頭髮,他當場說好,可是一到澡盆不久,卻突然想通,說要洗頭髮不要剪頭髮,這個時候我就說來不及了,你明天要剪頭髮。

隔天要出門的時候,我們就說要出門散步去剪頭髮,他就開始拉拉扯扯說不去剪頭髮,我馬上說,弟弟昨天是不是沒有洗頭髮,他說是,我說沒有洗頭髮的話今天要剪頭髮對不對,弟弟說不剪頭髮的聲音馬上變小了,最後雖然剪頭髮的時候還是哭了,還把中午吃的東西吐出來,還是把剪頭髮的動作完成了。

我相信,從跟小朋友約定開始,大人就要記住並遵守自己的承諾,因為小朋友會記得這個約定,這是我們對待弟弟的首要原則。小朋友聽得懂看得懂大人講的話做的事,如果大人忽略了這個部分,忘了約束自己,就會發生不可避免的問題與錯誤。

這本書中有提到「功文」學習的成效,我哥哥與姊姊的小孩都有去上功文課程,功文文教機構提倡自學自己掌握學習進度,因此學得快的小朋友,就能進階進入更高年級的課程。我曾經看過功文的教材,整頁都是題目的數學,那時候會讓我覺得,這種「過度練習」真的不會讓小孩抗拒學習嗎?但現在我會想去功文看看,至少瞭解一下,功文的教材內容編排順序與理念是什麼。目前功文只有提供國英數的教材,顯然是要跟學校教育配合,但美術的部分,我就不曉得在哪裡有這種教育資源了。

雖然書名使用了「資優兒」這個名詞,但其實作者說自己的女兒只是中等智力而已,在序裡面提到了「資優三環論」,這裡提到傑出成就者的條件是,中等以上智力、工作熱忱與創造力,智力與創造力或多或少跟天生的基因有關係,工作熱忱與態度就需要耐心培養,我想,徐權鼎給他兒女的,除了優異的學校成績之外,最重要的是學習的態度與方法,這是每一個人都必須掌握的基本能力。

2006/3/8

作文七巧 by 王鼎鈞

這本年代久遠的「作文七巧」,是在老婆娘家的書架上發現的,書本的內頁寫著77年7月1日,想不到沒有在圖書館也會發生這種情況。像這種好書,我不知道為什麼印象當中,在唸書的時候,沒有一個老師會提供書本的介紹與資料,中學時代的國文課,每天都浸泡在部編版的課本當中,讀書不是興趣也不是娛樂,只是一件惱人的填鴨教育。沒有任何體會與感受的文字城堡,是我中學時代的夢魘,那時候的我只喜歡數學,以致於現在我得費力地亡羊補牢,我不知道到底是誰的錯,只能感嘆小時候的我「沒有意識到」語文的重要。

王鼎鈞在一開始的答問中就提到,他是在20歲左右才對寫作發生興趣,但因求教於大作家仍不得其法,所以自己嘗試分析整理作文的「技術」面,他認為人是情感的動物,人的天性與生活激盪自然能產生作品的內容,但是人得要為自己的情感及早準備一個容器,作文章的技術與技巧,可以在這本書裡面一探究竟。

記述的技巧,又分為直敘與倒敘,直敘必須要有起落、有略詳、有表裡,忌平鋪、忌平均、忌平滑,要記述事物的動靜、今昔、表裡、常變。倒敘就是顛倒時序,這是使文勢變化的基本方法,倒敘經常偽裝成直敘的樣子,即使是倒敘,也要讓倒敘顯得合理,讓讀者誤以為是直敘。局部倒敘通常發生在文章的後半段,倒敘完之後,通常得回到主流的直敘。

抒情的技巧,人的感情分為喜怒哀懼愛惡欲七種(在三字經裡是這樣寫,「曰喜怒,曰哀懼,愛惡欲,七情具。」),情與人事結合,又生出許多複雜而細微的況味。抒情文以作者的內心感受為主題,敘事不必詳細「情溢於事」。抒情文是年輕人最容易表現特色的一種文章。抒情散文很少寫「怒」,甚至避免寫「惡」與「欲」,作家總得要等「怒」轉化為諷刺,等「怒而惡」昇華為悲憫,等「欲」淨化為欣賞或曠達在動筆,抒情文要抒的是人的「高尚情感」。

描寫的技巧,描寫,寫的是景,不等於說明。描寫的技巧有「比喻」「烘托」「想像」三種,比喻只取其近似的一點,除基本的「像...一樣」句型外,還有「是」型(語言是銀,沈默是金。),「想」型(雲想衣裳花想容),「成」型(忙成一具陀螺)。當被喻的部分隱藏不見,這就稱為隱喻(水深火熱)。烘托之法常用在不便直接描寫或不易直接描寫的地方,就是不直接描寫事物,而去寫事物引起的反應。「想像」是比喻的利器,例如以「皓魄」喻明月、大珠小珠落玉盤,通常下一句是烘托,上一句必定是想像。

議論的技巧,議論又分為歸納與演繹,歸納「已知」化繁為簡、多中求一,歸納用以「溫故」,演繹「未知」以定理從一而終,演繹用於「知新」。議論的重點在於「論據」,所以發議論前得先找參考資料,故事、道理與名言,都可以當作論據,在兩三個故事當中,就可以歸納出結論。但用歸納法做議論文,不能把話說死說絕了,因為數個參考資料歸納的結論,不能保證沒有反例。演繹的方法是推論,由已知的「原理」「定理」預測未知。格言通常會互相衝突,例如「少小不努力,老大徒傷悲」「人生行樂耳,富貴須何時」,「知足常樂」「自求多福」,格言都是歸納產生的,但不是定理,所以通常議論會免不了要「爭論」。

綜合的技巧,情、理、景交融,抒情、議論、記述、描寫通常會在一篇文章中夾雜使用,這是一種複雜的合奏。以記述為主的,仍是記述文;以議論為主的,仍是議論文;以寫景為主的,仍是描寫文;以抒情為主的,仍是抒情文。但是用抒情幫助議論時,抒情的句子要少;用記述幫助議論時,記述的句子要少;用描寫幫助議論時,描寫的句子要少。以議論幫助抒情時,說理的句子要少。

下一本書要看看「作文十九問」,寫文章的功力能不能更上一層樓呢?

2006/2/28

優秀是教出來的 by 隆‧克拉克

這本書是一位全美最佳教師獎得主傳授的內功心法,以他多年的教學經驗,詳列了55條班規,他是個小學老師,這些班規不知道能不能直接套用在國中甚至高中學生身上,而且有些規定,很明顯地跟台灣學生的特性不同,因此這些規定不能夠完全直接複製到班級上使用,但要怎麼調整,適應台灣的文化,就是另一個大課題了。

這55條班規有些是規範很瑣碎的動作,有些則是形而上地傳授生活態度,每一條規定似乎都有它的由來,並不是憑空就開始規定的,如果沒有問題,根本就不需要作規範,約束大家脫序的行為與舉動。從書本裡的描述可以感受到,這些班規不僅僅規範了學生,一併也規範了老師,老師也不能夠違反規定,不能違背給學生的承諾,獎賞也要分明。

目前我還不曉得,高中生應該給與什麼樣的班規限制,才能幫助大家在學校的生活更充實、美好,也許過一陣子再想看看。

超基本 一 :與大人應對,要有禮貌,有分寸
超基本 二 :與人互動,眼睛要看著對方的眼睛
超基本 三 :別人有好表現,要替他高興
超基本 四 :尊重別人的發言與想法
超基本 五 :自己有什麼好表現,不要炫耀,輸給別人也不要生氣
超基本 六 :如果別人問你問題,你也要回問他問題
超基本 七 :打噴嚏、咳嗽都要說對不起
超基本 八 :不可以有不禮貌的小動作
超基本 九 :別人送你任何東西,都要說謝謝
超基本 十 :接到獎品和禮物,不可以嫌棄
超基本 十一 :用小小的貼心,為別人製造驚喜
超基本 十二 :改同學考卷時要謹慎
超基本 十三 :全班一起唸課文時,要看著正在唸的一字一句
超基本 十四 :以完整的句子回答所有的問題
超基本 十五 :不要主動討獎品
超基本 十六 :每天都要做完作業
超基本 十七 :換科目的時候,動作要快,要安靜,要守秩序
超基本 十八 :做什麼事都要有條理
超基本 十九 :老師在指定作業的時候,不要叫苦
超基本 二十 :別的老師來代課,也要守班規
超基本 二十一 :課堂上發言或起身,應該講規矩
超基本 二十二 :不可以上課上一半,起身去倒水
超基本 二十三 :見到每個老師,都要說某某老師好
超基本 二十四 :注意洗手間的衛生,把身邊的病原減到最少
超基本 二十五 :讓客人有賓至如歸的感覺
超基本 二十六 :不要幫同學佔位子
超基本 二十七 :同學受罰的時候,不要看著他
超基本 二十八 :對作業有問題,可以打電話來我家,我沒接的話,你可以留言,但只要留一次就夠了
超基本 二十九 :用餐的基本禮儀
超基本 三十 :吃完飯,自己的垃圾自己處理
超基本 三十一 :接受別人的服務要惜福
超基本 三十二 :坐校車或公車,都要坐好,別打擾到司機
超基本 三十三 :認識新朋友,要記住對方的名字
超基本 三十四 :吃自助餐,或與人同桌,取菜不可以貪多
超基本 三十五 :別人掉東西,請彎身去幫他撿
超基本 三十六 :進門時,如果後面還有人,請幫他扶住門
超基本 三十七 :別人碰撞到你,不管你有沒有錯,都要說對不起
超基本 三十八 :進行校外教學時,無論是到哪一個公共場所,都要安安靜靜
超基本 三十九 :去參觀別人的地方,要不吝於讚美
超基本 四十 :全校師生開會的時候,不要講話
超基本 四十一 :接電話時的言談要得體
超基本 四十二 :一趟校外教學結束,要謝謝所有隨行的老師和家長
超基本 四十三 :搭乘電扶梯時,要站右邊,讓趕時間的人走左邊超基本 四十四 :列隊行進時不要說話
超基本 四十五 :不可以插隊;但看到別人插隊不可以大呼小叫,讓老師知道就好
超基本 四十六 :看電影時不可以說話
超基本 四十七 :不可以帶「多力多滋」來學校
超基本 四十八 :有誰欺負你,讓老師知道
超基本 四十九 :自己的理想自己要堅持
超基本 五十 :要樂觀,要享受人生
超基本 五十一 :別讓將來有遺憾
超基本 五十二 :從錯誤中學習,繼續向前邁進
超基本 五十三 :不管如何,一定要誠實
超基本 五十四 :抓住今天
超基本 五十五 :在你的能力範圍內,做最好、最好的人


優秀是教出來的
優秀是教出來的 55條教育新準則
55條班規
55條班規 中英文版

2006/2/21

史丹佛的銀色子彈 by 王文華

第一次聽到這個名字,是在桃色蛋白質這個電視節目裡面,後來也因為這個節目的兩個主持人格調不合,鬧上了新聞,王文華求去,讓我對這個名字的印象更加深刻,但王文華的氣質帶給我的印象,一直都認為他只是個作家,陶晶瑩在節目中也都以讀書人、文人稱呼王文華,我從沒想過原來王文華的背景與經歷,竟摻雜了史丹佛的MBA。

去美國留學要學什麼?從以前就聽過,美國的學位裡面,就是MBA最好拿,反正留學就是過過海水,拿個MBA回來就對了。但事實並非如此,沒有商業經驗的「詩人」王文華,以獨特的個人簡歷雜誌,獲得入學的許可,以文人的背景接受現代經濟的洗禮,在入學一開始,他就體會到MBA的首要準則,當你想要的時候,你就得想到想瘋了,用盡所有辦法達到目的,一旦學校認定你是個值得參與史丹佛的學生,他們就會想盡辦法讓你進入學校。

史丹佛的訓練讓學生瞭解社會的現實狀況、競爭與壓力,上課的資料非常地多,不是每一個人都能把全部的時間與精神放在上面,小組合作在此發揮作用,就算有人能夠把資料讀完,但他失去了MBA的人脈經營,還有更多人生體驗的課程。

找工作的時候需要強調專業的素養,這是叩關的鑰匙,但是上工後卻強調人文的素養,和諧的人際關係與團隊合作的精神,八面玲瓏、面面俱到,才能稱為一個人。

王文華流行館
我在史丹佛的12堂課

2006/2/15

情人節大餐

路上的車子明顯變少了,Fridays還有人在排隊等著進去度過情人節,現在是晚上21:00。再往前走到太原路的時候,有家很像日劇路邊攤的黑輪店,在一整條漆黑的馬路上,非常地醒目,很久以前就想要吃吃看,就今天吧,就把它當作情人節大餐。

一個蒸米血糕與黑輪的蒸籠,加上一個煮著高湯的方鍋,這家小小的黑輪店,賣的東西並不讓人意外,我們點了米血、肉丸、蘿蔔、高麗菜捲,東西不多,坐在攤位旁一個小小的方桌上,老闆娘端來一個很像臭臭鍋使用的鐵鍋,裡頭裝著高湯跟黑輪,這倒是出乎意料之外,從沒見過黑輪放在這樣的鍋子裡上桌。

問了老闆娘幾句話,她說她開了一年,選在這種偏僻的地方是因為距離家裡比較近,這樣的黑輪配合著高湯,在微涼的夜裡格外美味,算帳時才50元,回頭看了一下攤位一側,老闆娘帶了一個大潤發贊助的購物手推車,這也是一絕。

今年的情人節,跟以往不同,很特別地這樣結束了。

2006/2/8

圖解思考法 by 西村克己

圖解思考法這本書跟圖形思考的最大差別在於,西村克己是利用圖解思考提出企業計畫書與解決方案,而且整本書的圖解四處可見,而久恒啟一的書,完全都是文字,用文字來講圖解,缺少了說服力,久恆啟一是用圖解來管理自己,他自己的網站上全部都是圖解。



西村克己在書本的最後出了一題作業,就是要以圖解來說明「圖解思考法」這本書,因此我得破例為這個純文字的Blog,加上一張「圖解思考法」這本書的內容介紹圖解,這也是我字寫得最少的一篇文章。



Click to Enlarge This Pic...

台中大坑九號步道

這條步道以前不曾走過,搜尋過後才知道,http://www.cdn.com.tw/daily/2005/12/02/text/941202f4.htm 這條步道在2005/12/01才正式啟用,入口是和平里921地震公園,步道起點是個彈藥庫,終點連接六號步道,全長才1.7km,遊客不多。

這條步道不向其他步道那麼長,對於帶小朋友的我們來說,除了中間到最後有一段木階梯比較辛苦,要把幼兒推車扛著走,其他地方都可由推車代勞。表面上看來,步道的距離不長,但問題是這步道的坡度很陡,所以上坡的時候,要辛苦地一步一步往上踩,後面的木階梯坡度一樣驚人,而且距離又長,得專心一步一步才能一氣呵成。我們並沒有再往上走到觀音亭,只到了九號連接六號步道的地方,就停下來休息然後回程了。

下山後,轉進東東芋圓,這兒的芋圓是人工現場製作,頗負盛名,爬山後來一碗,是個不錯的好選擇。多數人都是點冰的,但我們點了幾碗熱的,熱的燒仙草放一段時間後,就會從液體變成糊狀,這個狀態的燒仙草芋圓蠻好吃的。

墾丁三天兩夜

從來沒有冬天到過墾丁,今年終於見識到,大風大浪的墾丁。

以下以流水帳的方式,記錄這次的墾丁之旅:

第一天
1. 中山高南下,新營休息站:暫停休息,買地圖
2. 屏東東港,東隆宮:一瞥
3. 屏東東港,阿仁海產店:中餐,點了四菜一湯,才一千多元,對超大的魚翅丸印象最深刻,裡面有兩隻中等大小的剝殼蝦子
4. 東港,東港橋:遠眺東港到小琉球的港口,還有遊艇
5. 東港特產:魚鬆、雙糕潤、櫻花蝦,雙糕潤吃起來很像有夾層的年糕,因為夾了紅豆在裡面,小朋友超喜歡吃的,還在這幾天的路程中念念不忘,但缺點是沒辦法保存太久,店家說只能放2~3天
6. 墾丁大街,牧場旅棧 check in:老闆也是墾丁大街上,棋盤腳手繪 T-Shirt 專賣店的老闆,我們這兩天都住在這邊,因為墾丁的風很大,所以住在旅棧後面房間,窗戶是兩層氣密窗,感受不到外頭的風力與寒意,但隔天岳父母換到前面房間時,就因為風太大而失眠。我們第二天是住在波波房,這個房間的裝潢以卡通圖案為主,還有十幾個絨布玩偶給小朋友玩,第二天晚上,小朋友還抱著小熊維尼睡覺。
7. 墾丁大街晚餐:有名的「迪迪小吃」客滿,只好先訂位明天再來,隨便找了家店吃了點東西,然後就去「吳師傅魯味」,買了些魯味,體會傳說中的「蛇辣」,這種辣醬跟平常的辣椒醬完全不同,一開始沒有感覺,辣味有著一股後勁跟持久力,才沾了一點點蛇辣,這辣味與酥麻感,卻持續了2~3分鐘,不會因為再吃其他魯味或喝水而散去。

第二天
1. 牧場旅棧,早餐:早餐是蠻不錯的三明治,有生菜跟酸黃瓜醬在裡頭,感受到老闆娘的用心。
2. 龍巒潭:沒看到傳說中的黑面琵鷺,因為這裡的風實在太大了,小朋友才一下車,就被風吹到哭了起來。
3. 瓊麻
4. 關山:暫停,本來關山是適合觀看夕照的地方,但是這幾天天氣不是很好,雖然太陽很大,但雲層很多,考量順暢的路程下,就放棄不看夕照了。
5. 白砂海灘:小朋友很開心地玩砂玩了好久,岳父母在撿貝殼,海浪激烈地大進大退,雖然陽光普照,風依舊還是不曾間斷。一罐喝完的日式無糖綠茶,因為我要照顧小朋友的關係,罐子被風吹走的時候,沒辦法即時撿回來,最後只得看著它慢慢地隨著海浪漂去,只留下一張照片。
6. 貓鼻頭:在爬上貓鼻頭眺望台之前,有一段上坡路程,這段路似乎是因為地形的關係,風速驚人,上了眺望台反而風小了些。貓鼻頭位於台灣海峽與巴士海峽的交界處。
7. 後壁湖,午餐:輝哥生魚片這家店的生魚片,鯊魚煙非常便宜又大碗,只吃海鮮的岳父點了四菜一湯,非常好吃但是吃得好撐。
8. 船帆石:在海上一塊像船帆的石頭。
9. 貝殼砂島保護區:遠看保護區裡的貝殼砂,在陽光照射下顯得更加白晰閃亮。小朋友在貝殼砂展示館裡一直玩砂。
10. 鵝鑾鼻:前面一段草原的路程,然後可到鵝鑾鼻燈塔。
11. 風吹砂:來到這兒不是看海,而是看山,山的那頭,天空中滿佈著砂塵。
12. 茶山吊橋:要走吊橋,一個人得繳10元。
13. 佳樂水:已經近黃昏時分,寒意襲人,海浪打擊著岸邊,浪花一個比一個高。
14. 恆春出火:一塊以小石塊鋪成的圓形場地,裡頭間歇會出現火苗,這兒是天然氣的出口,有幾個人買了爆米花耐心地等待成果。
15. 恆春,小杜包子:超好吃的小杜包子,老闆也是出奇地怪,店門口一塊大看板,上頭詳述七條小杜包子條款,「一、請先拿號碼牌再來買包子,每人限拿一張,每張能買多少包子,是當時發了多少張牌而定。」意思就是說,就算你到了現場,也不一定能吃到。我們買到了四個起司包子,因為沒得選,其他包子都是要留待宅配用的,真的超好吃,一定要來。
16. 牧場旅棧,波波房
17. 墾丁大街,迪迪小吃:有名的南洋菜餐廳,因為實在吃不下了,只點了雞肉沙拉跟海鮮咖哩,雞肉沙拉好吃,不過另一個就普普。
18. 棋盤腳,買了大魚吃小魚的 T-Shirt

第三天
1. 墾丁風鈴季:裡頭有個超大的風鈴公主故事書繪本,我們看了一下,上頭寫說只要150NT,這麼大本又只賣150NT,當然要買,跟服務台詢問購買後,拿到的只是一本正常大小的故事書,雖然內容一樣,那些大的書,只是為了配合展示才刻意放大的。
2. 洪其德,洪孩兒烤飯糰:普普
3. 戎祥,戎將軍包子館:普普
4. 海洋生物博物館:大洋池餵食秀、鯨鯊、白鯨...
5. 車城,黃家綠豆蒜:就是去殼的綠豆,第一天經過的時候,他們已經賣完了,綠豆蒜分冷熱,我覺得冰的好吃。
6. 海鴻飯店萬巒豬腳,楓港分店:沒有因為分店而失去萬巒豬腳的獨特口感,好吃。
7. 東山休息站:像百貨公司的食物區地下街。

2006/1/27

令人苦惱的Paradox(首部曲)

因為某些原因,我開始接觸Paradox,這個存活在Delphi系統上的Database,我的任務是,要讓舊有存放在Paradox DB裡面的資料,可以提供Web介面查詢。根據技術的背景Java,我必須要先想辦法讓Java可以存取Paradox DB。

首先想的,就是拿到 Paradox JDBC driver,當我在google "paradox jdbc" 時,再怎麼逛街,都會逛到這個網址 http://bdn.borland.com/article/0,1410,21642,00.html 標題就是 "Corel's Paradox JDBC Driver",很令人興奮,想想不過就是另一個JDBC driver而已,只要再把JDBC URL設定正確就可以了。結果並不是這樣,文章裡面提到的pdxJDBC,還有PdxJdbc.jar,結果根本找不到這個東西,直接 google "PdxJdbc.jar"的話就更神奇了,有 "need jdbc driver for paradox"的文章,但是根本搜尋不到可提供下載的地方。

更慘的是,我後來才知道,這個Paradox資料裡面,存放了很多 BLOB 格式的資料,裡面都是以 Rich Text 的方式編輯過的文字,我必須要在Web上重現這些上下標的效果,那好吧,就開始找工具,如果有個工具可以幫我把paradox db轉成其他熟悉的資料庫,就方便多了,不過這個工具得要能幫我把BLOB資料轉出來。找工具得透過各種不同的管道,合法非法的都試,因為有data export功能的軟體,不一定能處理BLOB欄位。如果能把資料export成csv檔,那麼就可以再寫java程式,轉換Rich Text資料內容,並將資料寫入到比較好用的database裡面。

所以,我就試了
1. Paradox Viewer:這個只能檢視paradox db內容
2. SMExport Suite:這個好像是Delphi程式,但是我看不懂,也沒寫過Delphi
3. sqlbrowser-dbase-paradox-odbc:這個只有viewer的功能
4. Database Tour:可以編輯BLOB資料內容,但是export data (csv)時,BLOB欄位只寫了 BLOB 字樣
5. Database Workshop5:export成xls或csv時,根本不理會BLOB欄位
6. Exportizer:export成xls或csv時,BLOB欄位只寫了 BLOB 字樣
7. PDoxTool:export成xls或csv時,根本不理會BLOB欄位
8. DTM Migration Kit:這個把Rich Text的BLOB當成Long Varchar,所以export時,這種欄位都變成了

{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fnil MS Sans Serif;}........

m. 至少現在有初步的解決方案了,不過這個軟體必須要花錢買,140元美金應該不算貴吧。

接下來就慢慢等看看,這個案子要不要繼續做下去囉,有這個機會的話,就會有二部曲。

2006/1/12

自製身份證大頭照

現在數位多媒體設備與軟體隨手可得,照大頭照也不需要假手照相館,雖然沒有專業的數位相機,只有一台傻瓜數位,我也嘗試自己照大頭照。

在照相的時候最麻煩的,首先是閃光燈,由於在家裡面,只要一使用閃光燈,就會讓眼鏡鏡片產生反光的效果,還會有紅眼反應,所以只好放棄不使用閃光燈。另外眼鏡的上緣,常常會有天花板燈管的影子,頭稍微低一點還可以避免這種情況,還有一個問題,就是下巴的地方很明顯地比較黑,拿汽車的遮陽板來打光,發生了一點效果,至少沒有太黑。

光拍照的時候,要嘗試處理燈光的問題,就花了不少時間,拍了不少失敗的照片,很多燈光的問題根本無法後製處理。照片出來後,就比較簡單了,首先是用照片編輯軟體,將背景去背或是貼上白色,然後再將整張照片的亮度調高,也可以調高對比,基本上隨便調調看,只要畫面上的結果看起來還像樣即可,然後就是用舉世聞名的 Photocap 2.1,這個工具使用起來非常地簡單,在選擇身份證照片後,它還貼心地畫出兩圈頭的大小規格限制,沒幾秒鐘就可以拉出大頭照,然後轉存成jpg檔。

為了不被照相館刁難,還特地多洗幾張生活照,把大頭照混在裡面,4X6的照片一張5元,一個小時就可以拿到相片,總共有八張大頭照,照片的結果,左邊的左側跟右邊的右側都沒有留白,所以看起來照片會稍微小一點,不過身份證只需要兩張大頭照,拿中間的去用就可以了。究竟在戶政事務所能不能過關呢?我想,如果不行的話,就推託說,怎麼照相館照的也不行,這家照相館太爛了,看業務人員能不能高抬貴手囉。

Photocap 2.1

酷企鵝3D紙模型

很久沒有花心思準備生日禮物了,導致某人有點小不爽。原本想做些摺紙的花,在網路上搜尋後,突然想到摺紙是不是應該也有3D的摺紙呢?google "3d 摺紙"的第一個連結就是3D紙模型網,這裡頭收集的模型還真不少,點閱了 Cartoon 這一項,發現裡頭有個酷企鵝(原來許久以前某同事桌上的酷企鵝模型就是這樣來的),這酷企鵝對某人來說是有意義的,家裡也有一隻大型會說"I Love U"的酷企鵝,不需要多想,當然就是以這個為目標。

用雷射印表機印出來後,覺得影印紙似乎太薄了,從家裡拿了張舊的月曆紙貼在上面,加強紙張的強度,接下來是冗長又沒啥技術的切割工作,切下個部分的零件後,每個零件是靠那突出來的一小塊紙片塗上黏膠互相接著起來的,接著的時候花了不少功夫,尤其我那又肥又短的手指,非常不容易在紙模型的裡外穿梭來去,導致很多地方都鬆鬆垮垮的。

從遠處看這個成品,感覺還蠻像一回事的,但如果貼近仔細看,就會發現,接著的地方歪七扭八的,也因為模型實在太小,酷企鵝的嘴巴根本黏不上去,這些缺陷應該不至於影響我的誠意。模型做好之後,拿了張便利貼,剪出一個類似漫畫講話的小於符號加上圓形框框,裡頭寫上「生日快樂」,看起來就跟漫畫裡的酷企鵝講「生日快樂」一樣。

今年的生日禮物這樣搞,明年不知道還得想什麼花招,女人是不容易被取悅的動物。