:::

布丁布丁想什麼?THE INTERVIEWS 1-10

布丁布丁吃布丁

布丁布丁想什麼?THE INTERVIEWS 1-10

image

THE INTERVIEWS匿名訪談網站的熱潮不知不覺已經消退了很久,現在問問題的都是THE INTERVIEWS的機器人,而不是你我身邊的朋友。在放置THE INTERVIEWS不管之前,我想先把個人主頁「布丁布丁想什麼?」的內容轉載到這裡──畢竟Blogger才是我主要的集中地。

以下就從將近50篇問與答的內容中挑選比較有意義的幾篇收錄,時間由最久之前到最近,以問題作為標題,分別寫成多篇blog來記載。每一篇回答的時間點都是當時的感想,回答之後我也附上了當時的時間。也許多年之後再回來看這些問答又會有不同的感受也說不定喔。


老實說,請問布丁是有意識的在裝可愛,還是無意識的就這麼可愛呢?

不不不,我本來就沒有在裝可愛,也沒有想要為自己加上可愛的屬性啊 <O>

2011-10-13 10:48:03

布丁比較喜歡台北還是台中?

其實可以讓我安心吃飯、睡覺、工作、運動的地方,我都很喜歡。

雖然因為家在台中,所以我的內心依然是以台中為依歸。

 

可是我家並不是個良好的生活環境,我回家往往會過敏,所以我不是很喜歡待在家裡。

 

現在我大部份時間都在臺北,也有很多人脈,

不過目前依然像個流水浮萍,每天都做好四處遷移的準備,並沒有長久定居的打算。

原因大概跟現在過渡的身份有關,過幾年會有不同的看法也說不定。

L_66500ba03fa029df256046fef43bf9a9

我仍在尋找歸宿 (圖片來源:狼與辛香料OP

2011-10-27 01:29:47

為什麼叫做布丁?

純粹是因為名字當中有音相近的字,所以這樣叫比較方便。

大多數的人都不知道該怎麼念我名字當中的那個字,所以與其勉強記名字,不如直接叫暱稱說不定還比較方便。

 

另一種說法是,希望自己能像布丁一樣地有QQ彈性

我知道自己的個性太硬了,所以這也是對自己的一種期許

希望能像甜點布丁一樣,很容易與人相處。

 

還有一種說法是,布丁這是一個菜市場暱稱,許多人都叫做布丁。

我也覺得自己並不是什麼特別人物,而是一般市井小民。

路人中的路人叫做路人甲,那麼平凡又便宜的甜點,就是布丁了。

一個布丁出現、一個布丁消失,都不太會在人們的心中留下印象。

這樣就好,我不希望自己是個很突兀的人,只要平凡地好好活著就好。

L_e5a84bb22e1d49bb72080683f24d638e
你知道汀洲是什麼意思嗎?(圖片來源:Google Maps

2011-10-27 01:38:47

為什麼要叫布丁? 喜歡吃布丁嗎?

前一個問題已經有人問了,我就回答另一個問題。

 

我並沒有特別喜歡吃布丁。

暱稱跟飲食習慣沒有關係。

 

應該說,我並不是個很喜歡吃甜點的人,包括布丁在內。

我追求的是三餐正常飲食,就不會想要多吃其他食物(甜點、點心)的生活習慣。

我知道補充糖分可以降低壓力,但是比起吃甜點,我比較想用其他方式去紓壓。

儘管偶爾看到甜食還是會想要去吃,不過自己平常幾乎不會主動去買甜點。

而且最麻煩的是,吃太多糖(特別是人工糖),我的身體會陷入病閹閹的過敏狀態。

 

有一年生日時收到超大的布丁,我一個人很理所當然地吃不完,生日禮物瞬間彷彿像是懲罰遊戲一樣。

總而言之,一年應該吃不到五顆布丁……吧?

 

比起布丁本身,我倒還比較喜歡布丁瓶。

可是拿了也不知道要做什麼用就是了……

 

L_7abecf584701380d60a43ceab6e3f5f2
小妖精的家(暫定) (圖片來源遺失)

2011-10-27 01:47:18

燒臘喜歡吃那種? 喜歡吃叉燒嗎?

沒想到這個問題意外地中肯。

 

是的,港式燒臘裡面,我最喜歡吃的就是叉燒。

原因很簡單,因為叉燒不用挑骨頭,而且肉厚多汁又好吃(僅限定於燒臘具有一定水準的店家)。

 

一般人都會用「三寶飯」或「招牌飯」來測試一家燒臘的水準,我個人也會這樣做,但在各種肉當中,我最在意的仍然是叉燒是否美味。

是的,雞鴨有如門帘般掛一排的燒臘店中,我最愛的仍然只有叉燒。

 

此外就是喝茶,燒臘店通常都會配清淡無糖的熱茶。

我不能喝濃茶,而這種清淡通常很合我的胃口,我挺喜歡的。

可惜的是燒臘店不能久留,吃完就要換下一位客人了。而且環境太過油膩,我也不喜歡久待就是。

L_d9cc80720b3802f0a51dd3c0f9bda5a5
娘娘娘娘你好娘(圖片來源遺失)

2011-10-28 03:44:03

會想出國看看嗎?

這個問題很好,老實講,我非常喜歡出國。至今為止已經出國過很多次,現在仍在出國中。

只是,「出國」的定義可能跟你想的不太一樣就是。

 

你覺得出國對你來說的意義是什麼?

 

享受異國美食?在臺灣已經可以吃到大多數各國食物,而且我對美食沒有特別偏好,臺灣的食物就很好吃了。

觀賞各國景物?資訊發達的現在,我可以從書、網路取得各國美景──他們拍的說不定比我親眼看到的還漂亮!

邂逅金髮碧眼正妹?我自認沒這命,算了吧XD

 

對我來說,出國最重要的是,體驗與日常不一樣的生活。

這不僅僅只是在語言、生活習慣、環境等外顯表現中,也包括了人際關係、價值觀等內在想法的不同。

而這些非日常的生活將會衝擊我原有的想法,比較為何他們與我會有如此不同的看法

然後再把這些差異整理、學習、吸收,並與他人分享在各國所見的有趣事物。

 

我覺得這就是出國的醍醐味了,你覺得呢?

 

如果體驗非常生活就是一種出國,那麼我想你應該可以猜到我所謂的出國是指什麼。

答案是──身分上的改變。

 

很多人都知道,站在不同觀點用不同角度來看待事物,就會有全然不同的看法。

而我覺得這對之前的我來說,就是一種非日常體驗。

 

例如從高中生變成大學生,從大學生變成研究生

到現在,我出國到博士生(雖然休學啦XDD),這又是一個全新的觀點。

原本是坐在台下聽老師講課,現在是跟老師坐在同一張桌子前討論。

原本是聽老師指導怎麼做論文,現在是教導學弟妹如何寫論文。

責任、價值觀、人際關係等各種事物都急遽地改變,

彷彿出國時踏出機場時看到截然不同的風景一樣地令人印象深刻。

我很喜歡出國,因為我還有很多想要看的國家沒看過。

我想去便利商店當計時人員,想在外面公司當基層員工,想到大公司參加研發團隊,想要帶領團隊做些有趣的事情,

我想跟別人做朋友,想要跟某人成為情侶,想要結婚成為新的家庭支柱,想要成為小孩子的爸爸,

 

還有好多好多好多地方還沒去過,

「那個山丘的對面有什麼呢?」
「這個船前往的地方有什麼呢?」

我自己繼續走下去的話,到底能到什麼樣的境界呢?

 

就是因為一直都抱著這樣期待,所以我才喜歡出國。
L_388f51c9804cc48afbcf4ebe0bf0c1f6
只要有人能陪我一起去「山丘對面」的話,那我就很滿足了(圖片來源:魔王勇者「成為我的東西吧勇者」「我拒絕!」

2011-10-31 21:12:40

為什麼你這麼討厭海鮮呢?

這個問題問得非常好,而且從問題的方式就知道,這個人非常了解我。

是的,我並不是對海鮮過敏(儘管大部分的人都會這樣子先入為主),而是討厭海鮮。

 

在描述理由之前,我想先介紹一款遊戲,Nitro+ 2003年的知名電子小說:沙耶之歌

 

一般人認為很平常、美麗的世界,在主角郁紀的眼中就像是燒肉果凍。

儘管理智上知道那些普通人(看起來像是異形)開心地吃著他們認為很美味的食物,

但是生理上怎麼看都覺得那就是令人難以下嚥的燒肉果凍。

 

對我來說,還好,並不是整個世界都是這樣──除了海鮮。

在我看起來的海鮮就像是燒肉果凍一樣,或著說那本來就是一種燒肉果凍──像是內臟、生肉之類的東西。(所以其實內臟、生肉的東西我也不太想吃)

儘管理智上知道大家都很開心地吃著那些海鮮,在我眼裡依然覺得大家吃的是燒肉果凍。

那些「新鮮」──的果凍、「海味」──的腐爛感,再再地讓我難以接受。

 

這已經不是過敏或是金錢昂貴的問題──雖然我會跟難以理解的人用這種理由來搪塞──而是一種價值觀上的問題。

如果你還是難以理解的話,我用另一種東西取代海鮮,來推薦給你看看:

 

柬埔寨特色小吃──油炸水蟑螂

 

「來吃嘛,這東西不貴,而且可以補充蛋白質喔。」

「我知道怎麼治好你這觀念,你只要吃一次,你就可以感受到它的美味,並且愛上它。」

「你這就不對啦,大家都在吃,怎麼只有你不吃?你不知道為了你這樣大家很難找餐廳嗎?」

 

如果你能敞開心胸去快樂地吃蟑螂,那你很厲害。

但是不管怎樣,對我來說海鮮終究是燒肉果凍,我不想吃也不喜歡吃更討厭吃它。

 

不過,我不吃就算了。

我並不會反對其他人吃海鮮,或是厭惡別人吃海鮮的行為。

大家吃得開心,那我也跟大家一起開心,和樂地在旁邊吃其他東西,用餐氣氛愉快就很好。

因為這是大家各自價值觀不同的問題,我十分尊重大家個人喜愛海鮮的看法。

同時也希望大家能尊重我的價值觀,請勿強迫餵食布丁海鮮。

L_478975d623547cafb0b6cb467c85b429
沙耶好萌,你也是這樣覺得吧?(圖片來源:沙耶の唄

2011-11-12 23:58:03

環山之於你

「那是……一個約定。

 

『不知道環山一直走下去的話,會有什麼獎品呢?』

她開心地說著她的期待,那笑容激起了我的動力。

於是我在心中,跟自己下了一個約定。

 

『要去環山嗎?』『好啊。』

即使撐著雨傘,在路燈故障的昏暗山路中,

散步在環山之道的聊天時光,是我每天最珍惜的重要時刻。

 

可是,這樣的日子並不長久──

 

『今天好像比平常還要晚,要去環山嗎?』

『嗯,我今天有事。』

『這樣啊,那我們下次再去吧』

我看看漆黑的夜空,再不趕快走的話,下山時就連晚餐都吃不到


『今天雨好大啊,要去環山嗎?』

『可能不太方便,我怕鞋子褲子弄溼。』

『嗯,好吧。哪天天氣不錯我們再去走走。』

就算雨傘擋住了風雨,但還是難以抵抗寒冷的感覺。

 

『難得沒下雨,要走嗎?』

『不好意思,我很忙。』

『嗯,那我不打擾了。』

我慢慢地一步一步往山上走,看著周圍的人有說有聊地超越我而去。

我只是看著他們的背影,一個人繼續往前走。

 

『那我先走囉,掰掰。』

『掰。』

我在山路上嘗試讀著每週都讀不完的論文。

遇到下雨天,索性戴著耳機,練習唱唱那自己唱不上去的crack。

 

為什麼我要踏著這條漆黑的山路?

為什麼我要在大雨中行走?

為什麼我要持續走在這彷彿沒有盡頭的環山之路?

 

我只是想,只是想讓她看看,那環山之後的世界。

只是為了,想把那個獎品帶給她看看。

只是想要,再一次能看見她的笑容。

 

使只有我一個人,

今天,我也準備要去環山了。」

 

──如果在我身上能發生這樣的故事就好了。(遠目

 

因為有兩個人問了類似的問題,所以關於爬山的話題,讓我們移到下一篇再來談。

L_08a6a34650d6db4adfcf1461829100c8
Something is pulling me, I feel the gravity of it all...(圖片來源:Wolf Rain ED

2011-11-13 01:25:54

聽說你每天環山,很健康吧

儘管沒有到每天,但是我盡可能每天都留一些時間做運動。

是的,環山是運動的一種。

而我個人也很喜歡爬山,或著說,散步。

 

隨著年紀增長,我體認到健全的心靈寄託於健康的心靈,

遺憾的是國民教育只有告訴我們體育課是拿來補課,或是教導各種運動的規則、概念,可惜真正重要的事情卻一直沒教。

我直到長大才知道,運動就如定時的睡眠、正常的飲食一樣,是生活中不可或缺的一環。

 

運動的形式與種類有很多種,而我選擇以爬山的原因,主要是因為我喜歡散步。

 

我也在我blog說過,我覺得做在電腦前面工作的思考方式,跟一個人走在路上的思考方式並不同。這兩種方式都有適合進行的活動,而我覺得走路的時候特別容易進行平常不會做的思考。

像是規劃目前的工作、思考最近的方向、反省檢討這幾天做的事情、思考在路上碰到的有趣事物。

 

同時,由於在行走中可以做的事情並不多,所以也很適合做些需要專心的工作,

我走在路上會用手機讀電子小說、用PSP打電動、用平板讀paper。

結合走路時的思考方式,我覺得這是很適合一般散步一邊進行的活動。

有段時間甚至出現了覺得不走在路上就喪失讀paper的動力這般地異常習慣。

 

而且爬山已經跟我的日常生活結合,達到「工作順便運動」的省時優點。

如果未來我的日常生活難以配合爬山這項運動,那麼我可能會學習另一種運動的習慣。

 

……講了老半天,好像還是沒談到環山跟運動這件事情。

就隨意吧,有人很在意的話我再繼續聊下去。

希望大家能多多提問,拜託大家了!

L_c3c926c47c8aedfc2b1589b059e570bb
多出去走走看看大自然,這樣才不會近視啊!(圖片來源遺失)

2011-11-13 02:21:59

對布丁來說,「男子漢」的定義是什麼呢?

對我來說,「男子漢」等於是一種負責任的態度,同等於「行得直、坐得正的生活方式」。

我覺得活在這個社會中,對於責任的意識感可說是決定一個人成熟與否的絕對指標。

當一個人意識到自己應該扮演的角色,以及該角色應該要做的事情的時候,那麼就具備成為一個「男子漢」的資格。

從我上面的說法就可知,在我心中,「男子漢」無關性別,而取決於態度。然而,「男子漢」終究只是個理想目標。也許我會在現實中受到挫折、感到迷惘,但是我仍希望自己能夠朝著「男子漢」的目標,持續成長。

講到背責任這種事情,很多人都極力躲避責任。小時候我們總是嚮往無拘無束的自由生活、排斥成為定型的社會角色,長大之後屈就於無奈的現實而扮演不同職業,並為此感到人生無趣與絕望。

在我看來這並不是令人難過的事情,相反的,就像是遊戲一樣,好好扮演玩家本身,在有限的舞台中享受遊戲人間的樂趣,這就是我對「男子漢」的另一種詮釋。

L_c6479f9cf2d3532c68dec5c65ba00841
自己打造人生RPG(圖片來源:RPG MAKER VX

2011-11-14 22:59:55

(more...)

愛書者的推理小說:古書堂事件手帖

布丁布丁吃布丁

愛書者的推理小說:古書堂事件手帖

image

(圖片來源:博客來

可能是因為自己有著「圖書館」背景的身分,也可能是純粹喜歡「文學少女」類型的女孩,小說中有著「書」、「圖書館」等主題的書籍,總是能夠勾起我對他的興趣。

這次要聊的是以二手書店美女店長為主角的推理小說:古書堂事件手帖


簡介

輾轉流轉於人們手中的舊書,除了書中的故事之外,也擁有屬於書本身 自己的故事--

故事是描述2010年神奈川縣北鎌倉的一間虛構二手書店「文現里亞古書堂(ビブリア古書堂)」中,因緣際會成為店員的男主角‧五浦大輔碰上了不善與人接觸但卻異常喜歡書籍的店長女主角‧篠川栞子(しおりこ,注音是「ㄎㄢ」),栞子能從書中見微知著的推理能力揭開了一連串事件背後的真相。

輕小說中的愛書者們

在看這本書時讓我感動的地方,是在於栞子對於書的熱情,就像是在細數男朋友優點的小女友一樣令人喜愛。前人撰寫的書本內容能夠為栞子這樣的愛書者視之若寶,更讓人有種跨越時空傳承下來的感動。

當然,當我看到愛書者如栞子的時候,不禁就會想到其他輕小說中同為愛書者的女主角們,來回憶一下讀子跟遠子這兩位愛書者吧。

R.O.D大英圖書館的特務:讀子

image (1)

(圖片來源:博客來,右側為讀子)

倉田英之所著的動作科幻小說「R.O.D –Read Or Die-」中的女主角:讀子‧列特文(読子・リードマン)。看起來身穿藏滿文庫本的大衣、戴著大大的黑框眼鏡、頂著一頭亂糟糟的長髮的東洋女性,喜愛看書愛到廢寢忘食、也是書店的大客戶,實際上卻是身為英國大英圖書館的書籍鑑定師,更是能夠操縱紙張的特務「The Paper」。

以愛書狂讀子為中心的R.O.D,故事卻是像好萊塢電影一樣演出的超能力動作片。也許比起書本身,讀者可能更想看的是每個人物的超能力戰鬥也說不定?

R.O.D小說從2000連載至今尚未完結,但是從2006出版的11集之後就沒有繼續寫下去。儘管如此,在我心中愛書狂讀子的形象已經讓她成為「書蟲」的代名詞了。

緬懷一下2001年R.O.D推出的OVA中,我最喜歡的一首曲子「書を愛して狂う者曰く、紙は常に我らと共に」吧:

文學少女系列的文藝社社長:天野遠子

image (2)

(圖片來源:博客來

野村美月所著的文學少女系列(“文学少女”シリーズ)中的女主角天野遠子,身為聖條高中的文藝社社長,自稱「文學少女」,綁著兩條長長的麻花辮與發育不良的纖細身材,將各種故事形容成不同的美食,並時常滔滔不絕地介紹關於文學的知識,不僅是喜愛讀書,更會像美食家一樣地將文學書籍一頁一頁吃下肚子來「品嚐」。

文學少女系列是以高中校園為舞台的推理故事,不過事件非常地陰沈、激烈且非日常。每一集都是有著相對應的文學作品這點讓本作從描寫校園戀愛的輕小說增加了許多賣點,但是推理的部份我覺得不是很精采。

如同其他輕小說一樣,作者野村美月對於人物的塑造讓讀者印象深刻。搖擺著長長的兩條麻花辮,任性地要男主角心葉寫下三題故事來當點心吃,一邊開心地聊著各種文學作品與作家的天野遠子令人印象深刻,這也是在文學少女沈重的故事中少數能讓讀者喘息的綠洲吧。

一樣地來聽一聽2010年的文學少女電影版中我最喜歡的曲子「ほんとうの幸い」吧:

古書堂店長:篠川栞子

37187b6c4134be6980af85a9c8cb26bc

(圖片來源:狐の日記帳,第二集封面)

最後回到本篇所講的文現里亞古書堂店長‧篠川栞子身上。儘管是一店之長,篠川栞子非常地怕生且不擅長與人應對。而故事開始的時候,因為事故受傷的緣故,栞子一直待在醫院難以行動,僅能靠電話與電腦網路來與外界聯繫。因此「害羞怕生」、「行動不便需要人照顧」就成了我對栞子的第一印象。

不過與弱女子形象不同的是,栞子可以從書本上細微的特徵看出隱藏在背後的謎題與秘密,能藉此推理出讀者顧客的背景。除了書中的故事之外,栞子也能看出屬於書本身自己的故事,這樣的特技讓她帶有反差萌的亮點。

栞子說她從書中見微知著的能力是來自於犯罪心理學,但是故事中的案件卻非常地日常。來賣書的丈夫與阻止他賣書的妻子、找尋偷書的女子高中生、國小生獨特的讀後心得,我特別喜歡作者三上延以這些日常的小故事為主題撰寫的案件,而解開這些案件之後也為讀者帶來幸福的滿足感。比起超能力者讀子、吃書妖怪(還真的三天兩頭碰到的都是非常人的怪事)的遠子,相形之下栞子就是相當平凡的愛書者。

不過先別說第一集結尾時也出現了個狂熱的異常愛書者,故事後面栞子的母親越來越成為主線重點,故事似乎快要遠離那種日常感覺,令我不禁擔憂了起來就是。


結語:令人憧憬的愛書者

雖然我帶有圖書館員這樣的身分在,但是其實我算是很少看書(包括小說)的那種人。以前教編目的老師說:「圖書館員看到書的時候,總是專注在書目、上架等管理的層面,卻很少去深讀書本的內容。」明明應該是離書最近的地方,但因為要處理的書太多了,圖書館員可能是最少讀書的人也說不定。

比起當個書蟲讀遍古今中外每一本書,將合適的書本交到愛書者手上,也許這會是圖書館員更大的樂趣。可能也是因為這樣,所以我也很喜歡看愛書者──也就是我們的讀者的故事吧。

不過話說回來,文學少女的形象根深蒂固,不知道有沒有文學青年的故事呢?

(more...)

找尋JavaScript的UML塑模工具中

找尋JavaScript的UML塑模工具中

image

UML物件導向程式語言用來塑模(modeling)的好工具,但是卻很少應用在同樣也是物件導向的JavaScript上。

最近心血來潮又摸起了JavaScript,碰巧看到了一些與UML相關的契機,於是花點時間來找找看有沒有JavaScript與UML塑模之間的解決方案。

可惜,找到現在還是達不到我的理想成果。這篇就記錄我找到現在的一些過程與發現,以及我覺得該怎樣做會是最好的理想成果。


StarUML產生的程式碼樣板

image

在我撰寫論文系統的時候,最常用的UML塑模工具就是開放原始碼的自由軟體StarUML。那個時候嘗試用StarUML輸出JavaScript程式,但是失敗了。

現在有人開發出了適合JavaScript的樣板(template)提供下載,我嘗試看看,其實結果也挺為理想。安裝方法是將上述網頁中的樣板檔案下載解壓縮到[StarUML安裝資料夾]/modules\staruml-generator\templates之中。

image

你可以在StarUML中繪製class。

image

然後利用StarUML Generator功能,選擇Javascript樣板,

image

中間我略過一些步驟,不是很重要,總之就是產生程式碼。StarUML會在指定的資料夾位置產生「Book.js」的檔案,以下是檔案的內容:

/**
*@namespace 
*/


/**
* 
* 
* @author Marten Olgaard
* @created 17/9/2012
* @copyright Adnuvo
* @todo 
* @class Book
*/
var Book = Book || {};
Book = {
        
    /**
    * 
    * @property {*} pages
    */
    pages : null,
    /**
    * 
    * @property {*} height
    */
    height : null,
    /**
    * 
    * @property {*} width
    */
    width : null,
    /**
    * 
    * @property {*} length
    */
    length : null,
    /**
    * 
    * @property {*} weight
    */
    weight : null,
        
    /**
    * 
    * @method open
    */
    open : function(){
        
        //Stub code - to be removed
        alert("the function 'open' has been called  ")
        
    },
    /**
    * 
    * @method close
    */
    close : function(){
        
        //Stub code - to be removed
        alert("the function 'close' has been called  ")
        
    }
        
}

好的,現在我們看到的是個物件導向寫法的JavaScript程式語言,而且有著良好的註解。

儘管很多細節上的問題我還沒有深入去探究,像是繼承要怎麼實作?(JavaScript的繼承有很多種樣式)介面(interface)又要如何實作呢?更重要的是,要產生怎樣的JavaScript程式內容,才能讓IDE正確地剖析呢?

這些問題可以透過修改樣板檔案的內容來調整。要憑空打造一個UML轉換成JavaScript的樣板對我來說難度太高,不過要修改別人寫好的內容,這倒不是太大的問題。

儘管如此,只是透過樣板來將UML轉換成JavaScript,這樣是不夠的。我需要的是能夠直接整合IDE的UML工具,可以畫UML來擬定程式架構,又可以將程式轉換成UML來檢視各程式之間的關係,所以我又繼續找了下去。

整合Eclipse的plugin: JS/UML

point-region-uml

整合IDE的UML工具真的存在嗎?萬能的Eclipse還真的有JS/UML這個plugin,而以Eclipse為基礎的Aptana Studio 2也當然可以使用……雖然我是這樣想的,實際上到目前為止我只有成功安裝過JS/UML 0.8.2版而已。

如果安裝0.8.4版本的話,就會出現以下的錯誤訊息:

Your original request has been modified.
  "JS/UML" is already installed, so an update will be performed instead.
Cannot complete the install because one or more required items could not be found.
  Software being installed: JS/UML 0.8.4 (org.jsuml.eclipse.feature.group 0.8.4)
  Missing requirement: JS/UML 0.8.4 (org.jsuml.eclipse.feature.group 0.8.4) requires 'org.eclipse.uml2.uml 3.2.100' but it could not be found

image

安裝了JS/UML,並開啟他提供的範例檔案來看看之後,會發現它並沒有出現想像中的類別圖(Class Diagram),而是XML的樹狀結構,如下圖。

image

雖然這樣的樹狀結構也可以當成釐清程式架構的一種簡單工具了,不過修改節點內容之後,似乎還是無法修改檔案?這之間的對應我還摸得不夠透徹就是了。


結語:JavaScript真的有理想的UML工具嗎?

就我目前所知,理想的UML工具應該要能做到與程式碼之間的雙向轉換,並有著正確的註解供IDE剖析。

不過,在考慮是否有這種UML工具之前,我卻碰到了一個更根本的問題:JavaScript真的能夠這樣順利地透過UML塑模嗎?畢竟JavaScript並非完整的物件導向,其運作也跟傳統的C或Java有所差異,到目前為止坊間討論UML的書也沒有一本是以JavaScript為主題。我想,這個疑惑應該會隨著我對UML的認知,而逐漸豁然開朗吧。

不知道大家還有沒有什麼推薦的JavaScript輔助工具呢?歡迎提出你的看法喔!

(more...)

從戰場女武神DUEL來看跨平台開發

從戰場女武神DUEL來看跨平台開發

2012-09-14_222520

日本遊戲公司SEGA著名的遊戲「戰場女武神(戦場のヴァルキュリア)」 系列最新作品「戰場女武神DUEL(戦場のヴァルキュリアDUEL)」一改以往的戰略動作遊戲型態,以網頁遊戲(Web Game)堂堂登場。

然而比起遊戲遊戲本身更讓我在意的是,他不僅僅是一個透過網頁瀏覽器就可以啟動的遊戲,戰場女武神DUEL現在也可以在Android執行,未來甚至會支援到iOS。一個遊戲可以在不同平台上獲得相同的遊戲體驗並進行延續的遊戲記錄,這就是我對戰場女武神DUEL感到興趣的特色。


遊戲簡介:一天只要五分鐘的隊長業務?

組成牌組
image image

戰場女武神DUEL(以下簡稱「戰場D」)將初代到三代當中的各種角色化成了一張一張的卡片,而卡片上保留了戰場女武神系列原有的遊戲設定,諸如指令(オーダー,指揮官使用的強力技能)、潛能(ポテンシャル,一定機率提高或樣低屬性的技能)、相性(角色之間的情誼可以提高戰鬥能力)、職業等,化作卡片中的屬性。

戰鬥時是以一位指揮者與四位主力角色組合成共五位的主力部隊,以及八位提供HP、移動、索敵、攻擊、命中、防禦、迴避、回復各不同屬性的支援部隊,共13張組成一個牌組來與其他玩家或電腦組成的牌組來對戰。

建立設施

2012-09-14_220621

另一方面,玩家也要在基地中建立各種設施,以提高戰鬥的能力、促進基地建設的效率等效果。玩家在靠戰鬥得到的TP或特殊券購買的卡片、組成牌組(部隊編成)、然後再用合成來提高卡片的屬性。玩家也可以與他人組成連合(公會的意思),連合成員彼此之間可以執行「敬禮」動作(傳訊息)來獲得TP,或與其他玩家討論遊戲的戰略目標。

等待資源補給

遊戲中每一個動作都必須消耗資源。資源包括建設所需的DCT、糧食、鐵礦石、ラグナイト(戰場女武神系列裡面的特殊礦石)、進行對戰時所需的燃料、進行頭目戰時所需的彈藥。通常資源等待一定時間就會自動補給,玩家也可以靠花錢購來的道具提昇這些資源的補給速度。

上述這點就是網頁遊戲最大的特徵:等待。玩家可以選擇當個一天五分鐘的隊長,每天下班回家之後執行一下業務;也可以隨時設定倒數計時器,每隔三十分鐘就提醒自己回到遊戲中進行下一個動作。戰場D雖然有著影響獎品獲得的排名機制,但是競爭要素並不強,每個玩家都可以用自己的步調慢慢地進行遊戲。


特色:不只是網頁遊戲,還是跨平台的網頁遊戲

儘管我也是個喜歡戰場女武神系列的粉絲玩家,但是當戰場女武神DUEL以網頁遊戲登場時,並沒有引起我多大的興趣。反而是當它推出Android版本之後才激起我對它的好奇心。

unnamed

我試著把它裝到之前購買的Ainol Novo 7領先版上(如果Play不能直接裝,你也可以下載apk檔案來安裝),令人驚訝的是,不僅運作起來還算順暢,重要的是在Android上幾乎是可以獲得跟電腦瀏覽器上的操作體驗!

仔細一看,戰場D在電腦瀏覽器推出時,似乎就已經為跨足行動裝置平台做好了準備。以下讓我感到興趣的三個特點:

類似行動裝置大小的固定畫面

image

是的,戰場D的視窗畫面是固定的──只有800*480的大小,你不能自由的放大或縮小遊戲的畫面。而這種寬螢幕的解析度正是許多手機或平板電腦的配置。

然而,優使性(usability)原則要求的是畫面可因應螢幕解析度來做調整,而並非固定大小。我想應該也是因為這樣子,戰場D首先推出的是普遍使用寬螢幕的Android,而不是使用3:2比例的iOS(可是iPhone 5又變成寬螢幕囉)。

兼具適合觸控與滑鼠的操作介面

2012-09-14_222633

一開始進入戰場D時,往往會對這些又大又清楚的按鈕感到突兀。但是在Android的觸控螢幕進行遊戲時,這些按鈕卻是恰到好處。而遊戲本身不僅支援觸控螢幕上的雙指縮放(pinch-zoom)、滑動換頁(slide scrolling),也支援用滑鼠操作的中鍵縮放與中鍵換頁(中鍵真是萬能)。

這時優使性原則就會跳出來問:那只能使用鍵盤的玩家呢?注重滑鼠與觸控螢幕,卻捨棄的鍵盤的操作,這是否意味著未來遊戲的走向呢?

跨平台遊戲的技術功臣:Unify

2012-09-14_222505

讓戰場D能在電腦瀏覽器與Android上擁有同樣體驗,達到一種遊戲多個平台的目標,那背後的功臣就是Unity。Unity是一個開發遊戲的引擎,或著說是一種開發工具,最近。它不僅讓開發者能夠建立華麗的遊戲畫面,更能將成品製成適合各種不同平台的遊戲,而不必為了每一種平台各別開發遊戲。

在電腦瀏覽器執行戰場D時,玩家必須先安裝unity web player;而在Android中,unify似乎就包含在apk裡面。在遊戲開始時,玩家可以選擇讓Android裝置透過登入Hangame帳號來與PC進行連動。此後不論是從電腦瀏覽器、還是Android的APP,開啟戰場D的時候都會是同樣的遊戲進度。


結語:跨平台是終極的目標

戰場女武神DUEL以Unity製作出跨平台的網頁遊戲,不管是在電腦瀏覽器上還是在Android裝置中都可以獲得相同的遊戲體驗,這讓我看到了製作一種遊戲就能橫跨不同平台的一個成功的範例。

儘管利用Unity製作遊戲並不是我的目標,但是開發一套能夠在不同的平台中運作的工具仍是許多人的夢想。HTML 5是一個不錯的開始,不過有一套IDE、開發引擎的工具會更好。不僅只有遊戲,市面上跨平台的開發引擎也非常多,我也在持續關注中,希望未來有機會時能好好地研究一番。

然而無法對應不同大小的螢幕解析度、捨棄鍵盤使用者等違背優使性原則的設計,成了跨平台下的犧牲品。這些都應該是我們程式設計師在開發時必須要注意的問題,不是只有網頁要求無障礙,各種應用也別忘了優使性原則喔。

(more...)

Google Chrome安裝userscript的方法

Google Chrome安裝userscript的方法

image

最近Google Chrome(以下簡稱Chrome)的更新中增加了從其他網站新增擴充功能的限制。現在只能從Google Play上安裝擴充功能,而原本可以從userscripts.org之類的網站安裝userscript這種擴充功能的方法,現在都沒辦法直接在網站上安裝了。

不過你依然可以把擴充功能下載到本機端,然後打開「管理擴充功能」(chrome://chrome/extensions/)頁面,將擴充功能的檔案拖曳到此頁面,以此來安裝Google Play之外的擴充功能。


為什麼要用userscript?

跟Chrome的擴充功能類似,userscript也是一種瀏覽器的擴充功能。它能在指定網站中安裝由使用者自訂的JavaScript程式,以達到許多原本網站沒有提供的功能。

跟Chrome的擴充功能相比,我比較熟悉userscript的寫法,因為它就只是普通的JavaScript檔案。所以之前我也用userscript寫了幾個擴充功能,像是Plurk快速消音或是Plurk未讀計數圖示,並習慣性的安裝在Chrome上。

image

usersciprts.org是個匯集userscript的網站,我做的userscript都在這邊。

image

目前userscript可以安裝在Chrome跟Firefox的Greasemonkey擴充功能上。原本Chrome內建轉換器,可以將userscript轉換成擴充功能,但日前改版中Chrome關閉了這項途徑,所以我們不能直接在userscripts.org等網站上安裝userscript了。


安裝本機端的userscript

現在Chrome雖然無法在網站上直接安裝userscript,但是我們卻可以將userscript下載到本機端,再安裝到Chrome上。

image

Plurk quick mute這個功能來舉例:

  1. 在「Install」按鈕上,按右鍵下載userscript。
    image
    下載之後會是一個「.user.js」為結尾的檔案,Plurk quick mute的檔案名稱就是「111012.user.js」。
  2. 開啟Chrome的擴充功能頁面:你可以從「設定」按鈕中進入「工具」、「擴充功能」。
    image
    image
  3. 開啟剛剛下載userscript的資料夾,跟Chrome的擴充功能頁面擺在一起。
    image
  4. 將userscript檔案拖曳到Chrome的擴充功能頁面,Chrome就會確認是否要安裝這個功能。
    image
    按下「新增」就可以安裝囉。

雖然麻煩了一點,不過這樣子還是可以在Chrome上安裝Userscript,也是不錯啦。

(more...)

VDI轉換成KVM可用之VMDK

VDI轉換成KVM可用之VMDK

image

早期我常使用的虛擬機器環境為VirtualBox,但是因為效能不彰、管理不易,之後我開始使用Proxmox VE平台來取代,並獲得不錯的成果。

要讓VirtualBox使用的VDI檔案能在Proxmox VE平台中的KVM虛擬機器中運作,必須先將之轉換成KVM可用之VMDK。奇怪的是,這並不能夠用VirtualBox GUI介面中的「匯出」功能,而必須要用「VBoxManage.exe」直接轉換VDI才行。

以下簡單說明作法。


虛擬機器使用的硬碟映像檔

本文所用的平台轉換方式是將VirtualBox使用的硬碟放到Proxmox VE的KVM中使用,你可以單純地想像成實體電腦中硬碟換到另一台插上去的感覺。只是VirtualBox用的VDI跟KVM支援的VMDK這兩者格式上有所不同,在實作前有必要先介紹一下。

VDI:虛擬硬碟映像檔

VDI是VirtualBox使用的虛擬硬碟映像檔,全名為Virtual Disk Image。他可以在最大2TB的檔案大小之間動態地佔用實際上需要的檔案數量。

舉例來說,設定一個大小為2TB、但內容並沒有檔案的硬碟,在Host端看起來該檔案大概只有幾MB而已。隨著VDI內容檔案的增加,VDI的檔案大小也會隨之增加。以一個CentOS來說,VDI大概會高達10GB左右。

VDI似乎並不會壓縮檔案。實際上內容用了多少、外面看起來就是說大。我之前用7-Zip壓縮VDI檔案的時候,可以將26GB的VDI壓縮到3GB左右的大小。當然,壓縮的時間也是非常地久就是了。

VMDK:虛擬機器硬碟

VMDK是VMware虛擬機器使用的映像檔,全名為Virtual Machine Disk。作為虛擬機器市場第一把交椅,各種虛擬機器都將支援VMware作為噱頭,而VMDK格式映像檔也在VirtualBox跟KVM的支援範圍之內。因此,將VirtualBox使用的VDI檔案轉換成KVM也支援的VMDK,就是本篇的主要重點囉。

2012-04-24_062535 vmdk 2012-04-24_064813 oracle vm

必須註明的是,只有VirtualBox 2.1.2之後的版本,也就是後期的Sun VirtualBox跟Orcale VirtualBox才有支援VMDK格式。早期的xVM VirtualBox跟更早的Inno Tek VirtualBox都沒有支援喔。關於VirtualBox的歷史請看新聞頁面

VMDK格式似乎會稍微壓縮資料,讓硬碟實際使用量不會太過暴增。VirtualBox支援匯出功能的時候,也會將硬碟檔案直接匯出成VMDK,而不是早期的VDI。但是透過匯出功能匯出的VMDK並無法讓KVM使用,這點真是令人匪夷所思。

VirtualBox將VDI轉換成VMDK指令

VirtualBox 2.1.2之後支援VMDK虛擬機器硬碟格式,可以使用內建的工具VboxManage來轉換。操作時必須以指令列的方式執行,Windows中就必須先叫出命令提示字元。

其指令為:

VBoxManage.exe clonehd source.vdi target.vmdk --format vmdk

舉例來說,我的VirtualBox裝在「D:\Program Files\Oracle\VirtualBox\」路徑底下,而我要將dspace-dlll.vdi轉換成dspace-dlll.vmdk的話,那麼指令要這樣下:

"D:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd dspace-dlll.vdi dspace-dlll.vmdk --form vmdk

2012-04-24_065054 cmd

如果指令正確的話,就會看到下面出現「0%…」的訊息。進度每隔10%都會顯示一次,你也可以看到目錄底下的「dspace-dlll.vmdk」逐漸變大。

因為VMDK會稍微壓縮資料的樣子,轉換完成之後,原本26.5GB的VDI居然只剩下11.4GB的VMDK。這對硬碟空間老是抓襟見肘的我們來說,真是件好事。

Proxmox VE執行VMDK結果

接著將轉換完成的dspace-dlll.vmdk放到Proxmox VE上執行看看。

基於Proxmox VE特殊的目錄架構,你必須先將硬碟檔案透過網路上傳到指令目錄底下。舉例來說,我現在要建立的KVM虛擬機器是VMID 103,名稱「test-dspace-dlll」。那麼vmdk檔名就要改成「vm-103-disk-1.vmdk」,並上傳到目錄「/var/lib/vz/images/103/」。

2012-04-24_182234 proxmox

至於建立KVM虛擬機器與掛載vm-103-disk-1.vmdk這些細節我就不說明了。

2012-04-24_065449 on kvm

設定好之後就能夠直接運作,上圖就是正常開啟的成果囉。


小結:KVM也需要Virtual Appliance

既然KVM支援VMDK,那麼也應該可以支援VMware大力推廣的虛擬應用(Virtual Appliance)吧?我之前介紹過Proxmox VE內建的OpenVZ系列虛擬應用樣板,以及最近發現的Turnkey Linux ,而KVM的虛擬應用就比較少。儘管Proxmox VE都已經進入第二版,但是這部份並沒有什麼加強就是了。

透過上述的轉換工具,各種虛擬機器之間的隔閡越來越低。下一步就是對各種虛擬機器的整合管理,根據機器負載需求即時地遷移需要的資源。這個議題已經有不少計畫進行中,許多工具也放在網路上等我去研究。可惜近期內我應該沒什麼時間好好摸索就是了。

(more...)

光碟救援模式(rescue mode)用fsck修復無法啟動的CentOS

光碟救援模式(rescue mode)用fsck修復無法啟動的CentOS

2012-04-23_154621 光碟畫面

繼今天(實際上是昨天)下午寫的用救援模式暫時進入原本系統的研究,之後在救援模式用fsck花了許多時間修復檔案系統之後,居然順利讓我修復完成並且正常啟動了!

以下就記錄修復的過程。


問題敘述

這個作業系統是CentOS 5 final,提供DSpace服務。

前一篇一樣,我要處理的問題都是開機過程「Checking filesystems」時出現「e2fsck: aborted [FAILED]」 錯誤,然後Linux指示以下訊息:

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue): _

也許可以在維護模式(maintenance)中進行修復,但我摸了一陣子搞不太定。倒是利用CentOS 5 Final的救援模式,用fsck順利修復了系統本身。

從光碟進入救援模式 (rescue mode)

2012-04-23_234849 linux rescue

用光碟開機之後,輸入「linux rescue」就可以進入救援模式。上圖是按下<F5>之後對救援模式的說明。

接著要設定語系、鍵盤與網路。

2012-04-23_235030 continue

最後要決定是否掛載原本的系統。因為我們是要修復原本壞掉的系統,所以這邊要選擇「Continue」。

2012-04-23_235123 chroot hint

掛載完成,原本的系統被掛載到「/mnt/sysimage/」。

2012-04-23_235214 cmd   

接著會進入指令列模式,可以輸入指令進行操作。

請輸入以下指令,將原本的檔案系統視為根目錄:

sh-3.1# chroot /mnt/sysimage/

試著查詢一下現在的目錄看看吧:

sh-3.1# ls
bin dev halt lost+found mnt pgdb sbin sys var
boot dspace home media net proc selinux tmp
core.15890 etc lib misc opt root srv usr

其他的細節請看前一篇的「從光碟進入救援模式(rescue)」。

利用fsck修復檔案系統

在使用fsck修復之前,必須要先卸載要修復的檔案系統,否則會造成檔案系統毀損。

透過「mount」指令,可以知道要修復的檔案系統「/dev/VolGroup00/LogVol00」掛載在「/」根目錄。現在我們使用「umount」卸載檔案系統:

sh-3.1# umount /

接著就能用「fsck」來修復檔案系統囉,指令如下:

sh-3.1# fsck -y /dev/VolGroup00/LogVol00

記得要加上「-y」選項喔,不然會確認按到累死。

image

看到以下訊息,就知道fsck開始修復動作了:

fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/VolGroup00/LogVol00 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes

修復的過程非常久。我的硬碟有2T大小,修復大概也要快兩個小時有吧。總之請耐心等待。

2012-04-24_052701 finish

修復完成之後會看到上圖的訊息。

image

重開機看看,這次就能夠正常運作囉!


小結:能在維護模式下用fsck修復嗎?

雖然透過光碟的救援模式(rescue mode)使用fsck的確能修復檔案系統,但畢竟這還是要片光碟,比較麻煩。不知道能不能在維護模式(maintenance)中就直接使用fsck修復呢?

2012-04-24_004010 maintenance

當然,直接用上述的作法來做,只會收到以下錯誤訊息:

Error allocating icount link information: Memory allocation failed
e2fsck: aborted

到這邊我就不知道該怎麼做才好了。因為時間的限制,我也沒有繼續找下去。未來有機會再繼續研究吧。

(more...)