星期日, 2月 01, 2015

軟體建構之道:讀書心得(第四、五章)

第四章:關鍵的構建決策
  1. 在撰寫程式碼之前,決定編寫的約定,例如變數名稱、註解、程式碼的格式等。
  2. 決定如何由軟體架構去處理諸如錯誤處理、安全事項、介面類別。
  3. 程式碼check-in之前,應規劃一套順序,例如step-by-step執行程式碼確認運作正常、進行單元測試及集成測試、review程式碼等。
  4. 思考時,跳脫程式語言。實際撰寫時,清楚知道語言的優缺點,並在語言不支援的部份,提出辦法補足。
第五章:軟體構建中的設計 (5.1-5.2)
  1. 設計時會有很多錯誤的步驟,這正是關鍵所在,必須在設計階段就加以改正,而不是程式碼撰寫階段。
  2. 設計什麼時候算是「足夠好了」?一般來說是「沒有時間再進行」的時候停止。
  3. 控制複雜度,人類一次能夠處理的問題與複雜度有限,讓問題折解成許多單純的小問題,並降底彼此間的關聯性。把必要性的複雜度控制到最小,並且避免附加性的複雜度無謂的快速增長。
  4. Low fan-out: 一個類別裡使用到其它類別的程度,叫做fan out。使用超過7個類別以上,稱為high fan-out。不論是調用sub function的量,或者是使用其它類別的量,應該保持low fan-out。
  5. 考慮精簡性,不留下無用的程式碼。「加了這段程式碼會有什麼害處呢?」
  6. 儘量避免使用特殊技術。
  7. 設計的步驟:軟體->子系統->類別->資料結構與子函數->子函數的內部設計。
  8. 子系統:限制子系統間的互相通訊,降低複雜度。

星期一, 1月 26, 2015

抽象的重要性

要達到軟體的擴充性、預留面對需求變動的彈性,「抽象」非常重要。

比如說,我想顯示一行文字到螢幕上,可以怎麼寫?

1.
printf("This is a string\n");

2.
Display("This is a string\n");

void Display(char *c){
 printf("%s", char);
}

是不是第二個比較好呢?為什麼?
因為有一天這行字可能不顯示到螢幕上了,
而是改用USB介面輸出。
那麼豈不是要搜尋所有printf呢?
使用第二種方法,
只要改寫Display的內容就好了。

如果是C++的話就更棒了,
利用多型可以更進一步的抽象化。

例如:
void Display(int value){
 LEDBlink(value);
}

void Display(char* c){
 printf("%s\n", c);
}

void Display(void){
 // Do nothing (dummy)
}

所謂抽象,就是用更高的角度去思考程式架構。
好的架構會透過抽象函數,把介面都留出來,與底層的實作全部分開。
如此一來,未來實作方式改變的時候,上層的code可以完全不變。

比如說
Speak會比SpeakEnglish來得抽象,而Communicate會比Speak來得抽象。

void Communicate (...){
 // Maybe speak something
 // Maybe hand singnals
 // Maybe burn some woods and make smoke
}

void Speak (...){
 // Maybe speak english, japanese....
}

void SpeakEnglish(...){
 // Only english....
}

運用抽象函數是寫好程式的重要一步!

軟體建構之道:讀書心得(第三章-前期準備)

最近開始看了軟體工程的重量級書藉「軟體建構之道」,
來記錄下一些要點並助於知識吸收。

  1. 確認需求
    1. 在需求時期未解決的問題,到了建構時期,要花上很多倍的時間解決。
    2. 演進原型法:在建造系統前,先盡可能探索需求。
    3. 演進交付法:一次完成一點,從用戶獲得回饋,調整一點,再繼續建下一塊。
    4. 確定每個人都知道需求改變的代價。
    5. 建立一套需求改變的程序,例如審刻機制、變更時間點。
  2. 決定架構
    1. 在設計架構時期未解決的問題,到了建構時期,也必定要花上很多倍時間解決。
    2. 能對整個系統的類別做一個簡單綜述。
    3. 清楚每一個類的功能。
    4. 每一個需求都至少有一個類包覆。
    5. 定義核心類別、其它類別、類別之間的存取權限。
    6. 預測需求改變,預留變動空間,並將風險降至最小。也可運用延遲交付方法,將變動性的部份容後決定,例如把數據資料放在獨自的資源檔案中。
    7. 管理稀有資源。
    8. 性能評估。
    9. 可伸縮性。
    10. 安全性。
    11. 用戶界面模組化,利於替換。
    12. 錯誤處理:包含錯誤如何傳遞(立即丟棄/進入錯誤處理狀態/處理完才報錯)、錯誤如何記錄、錯誤何時處理(立即處理/順著function call上傳錯誤碼)由誰來處理錯誤(各類別各自處理/特定類別處理)、哪些層級以上資料必為正確、遇到錯誤如何處理(回到錯誤之前、使用替代函數、功能退化並自動重啟等)。錯誤處理一定要先規劃好,介面一致。
    13. 可行性:哪些是已被驗證可行的,哪些是有風險的。
    14. Overenginnering: 系統中哪些類別需要擁有較高健壯性?是可以做的比需求更好的?哪些類別不需要如此下功夫?系統中的類別是否都有考慮到健壯性?或者有的過頭了,有的做的不夠?
    15. 架構目標要清楚表述,並描述所有決策的機動。謹防「我們向來這樣做」。每個決定必有原因。並描述為什麼不使用別的方法?
    16. 架構擁有語言獨立性。
    17. 架構描述各個類別時,不要過頭,也不要缺少描述。
    18. 視圖:以不用視角來觀看架構,檢查錯誤。就像是室內設計的不同角度視圖一般。
  3. 後記:
    Data-driven: 利用if/switch來判別遇到什麼資料做什麼事。
    Table-driven:把所有資料放到array中,再利用迴圈進去分析資料。有助於將資料與程式碼隔離。

星期四, 1月 22, 2015

Debug的方法

Debug的方法很多,
先講流程:

發現問題->重現問題->找到原因->解決問題


以下假設問題已能被重現,
例出常用的幾種Debug手法:

1. 分段法
把程式分成數個區塊,鎖定在有問題的區塊debug。

2. Trace
從發生問題的code的call stack慢慢trace回去,
就不多做論述。

3. 地毯式搜索
這是最爛的方法,
但只要肯花時間就能獲得一定成效。
又可以再分為漸減法跟漸增法,
看是要從最原始的code慢慢加東西上去,
還是要從現有的code慢慢減少東西。
其實跟分段法算是相關的方法。

4. 模型建立法
最困難的辦法,
但系統愈複雜,問題愈離奇,這個辦法反而有效率。
把出問題的區塊想成是黑盒子,
有目的性的丟一些輸入資料進去,
一定會出來一些不符預期的資料,
此時去建立模型來解說為什麼會發生這個狀況。
又像是偵探辦案,
去搜集一些線索,建立論點,
進一步還原出bug產生的原因。

舉個簡單的例子,
預期答案是0x0C,卻得到0x18
預期答案是0x0F,卻得到0x1E
想一想~想一想~
不用看code就知道問題怎麼解決了。

5. 休息一下,做點別的事。
從撞牆的思路逃脫出來,一定有什麼你沒想到,
一定有什麼是你信以為真的事錯了。



用C語言實作物件導向(一)

寫Embedded的人最常碰到的就是C語言了,
在這邊整理一下幾個最初級也最基本的概念。

1. 以file為一物件,變數、函數分成私用(static)與公用。
 儘量避免使用全域變數。
 在令變數時就應決定作用範圍,愈小愈好。
 外部物件要對私有變數賦值,寧可多寫一個function。
 只對外露出function而不露出變數這很重要。
 
2. 同類的變數使用struct集合在一起。
 如此一來要re-use也很方便。
 
3. 以物件為出發點去思考函數的寫法,而不是以方法為出發點。
 例如在中斷處理的檔案中(ex. IRQ.c),
 直接在裡面做事情並呼叫許多各物件的方法是不妥的。

 不好的寫法:
 // IRQ.c
 void A_IRQ(void){
  obj1xxx();
  obj1yyy();
  obj1zzz();  
 }

 好的寫法:
 // IRQ.c
 void A_IRQ(void){
  obj1IRQ();
 }

 // obj1.c
 void obj1IRQ(void){
  obj1xxx();
  obj1yyy();
  obj1zzz();
 }

 Initial的時候也是

 不好的寫法
 // RCC.c
 void RCC_Conf (void){
  obj1RCC_Conf();
  obj2RCC_Conf();
 }
 // NVIC.c
 void NVIC_Conf (void){
  obj1NVIC_Conf();
  obj2NVIC_Conf();
 }

 好的寫法
 // Obj1.c
 void Obj1_Init (void){
  obj1RCC_Conf();
  obj1NVIC_Conf();
 }

 // Obj2.c
 void Obj2_Init (void){
  obj2RCC_Conf();
  obj2NVIC_Conf();
 }


星期三, 10月 08, 2014

京阪自由行:第五日「大阪港、關空快速」

  第五日由於老爸要上晚班,我們一行人早上4:30起床,從天王寺坐最早的一班 Haruka 號到關西機場。話說 Yahoo! 的轉乘查詢網站,指定時間出發時都查不到Haruka號的訊息,我這天也較緊張些,讓我吃了一些苦頭。

  大約上午9:00在關西機場放好行李,送老爸坐上飛機後,準備前往今天的景點大阪港。先到 JR Ticket Office 購買 Kansai Area Pass (1 Day),並索取關西機場 Haruka 號的發車時刻表,便搭乘 Haruka 號到天王寺,再搭地鐵轉乘到弁天町、大阪港。(我蠻想建議 JR 也發行相關車站出發到關西機場的時刻表,方便旅客抓準時間登機)。

  天王寺的列車路線很複雜,我在網路上查到的是大和線,在車站看了半天沒找到,後來詢問站內人員,很好心地帶我到月台,請我搭下一班車。過了一陣子車子來了,是列快速車,我怕弁天町不停,便等下一班普通車。趁這段時間我在月台的路線圖前看了許久,另一位站內人員直接用中文問我要到哪裡去,知道我要去弁天町後,請我坐待會來的大阪環狀線列車,不論快慢車一定會停弁天町,這才解決了問題。(原來 JR 有會說中文的人)!

  後來我才知道大和線跟大阪環狀線在天王寺車站 - 今宮車站這段是重覆的。以後自助旅行,查好轉乘資訊之後,還是儘量把該列車路線的資訊給調查好,轉乘會比較輕鬆。


  JR天王寺站內有一家 Bread Papa,裡面賣的泡芙非常好吃,我買了限定哈蜜瓜口味的,非常香濃。話說天王寺的日文原來不能唸做「TEN-OU-JI」,而是「TEN-NO-JI」才對。

  說到大阪港,那就是摩天輪、聖瑪利亞號、 Market Place 還有海遊館。大阪港站下車後一走近海岸,首先看到的是摩天輪,轉一圈為15分鐘。聖瑪利亞號是艘帆船,做得相當可愛,像是海賊王魯夫的船那樣。這艘船的45分鐘普通路線,每小時出發一班,在海上航行的樣子頗有西式復古氛圍。我因為時間問題,在另一側搭船處坐了觀光小船,從大阪港開到環球影城,單程只要10分鐘,來回加上等候發船的時間,大約要30分鐘。小船每小時發兩班,可以在船上觀看大阪港岸邊景色,向上望去則是阪神高速的高架橋。到了環球影城的港口,可以看到西式房屋以及雲霄飛車。觀光小船裡分為兩層,可以在船內坐著看海,也可以到甲板上吹吹風,欣賞更多的景色。










  搭完小船,時間也下午1點了,一行人到 Market Place 裡面用餐。這裡面是個購物中心,有服飾、記念品、點心等等。一樓的角落有個裝潢成晚上祭典的地方,叫做「なにわ食いしんぼ横丁」,中文有人翻譯作「浪花美食橫丁」。這裡有知名餐館的分店,像是自由軒(咖哩)與北極星(蛋包飯)。先前朋友推薦我道頓堀的北極星,正好在這兒吃到。我點的是號稱人氣第一的「ほうれん草とベーコンのチーズオムライス」,也就是菠菜培根起司蛋包飯,起司與培根吃起來頗香,但我個人並不太喜歡菠菜的澀味。(當時不懂菠菜這個單字,以為是某種香草)。老妹點的是豬排蛋包飯,豬排頗為特別,是把豬肉絞碎後再炸,汁多且調味濃厚,一時還以為是牛肉(笑)。這裡的祭典裝潢蠻漂亮的,必須說日本人真的很會做生意,為了要吸引顧客,會把氣氛做到像真一回事。在東京池袋太陽城的「Namco Namja Town」以及台場的「大江戶溫泉」,都有類似佈景的美食區。

  最後時間不多,趕緊進入海遊館。原來我是要去看鯨鯊的,卻被海生動物與建築空間的結合之美給感動了。這裡的參觀是歸劃好動線的,觀眾先坐電梯上到8樓,按不同海域迴旋而下。在這個海中動物園裡,一個海域一個水槽,讓遊客在這有限的展館內,認識各海域中的生物。但如果是這樣,還不足以驚奇。最精彩的是6樓至4樓的太平洋水槽,貫穿展館中心,讓大型魚類諸如鯨鯊、魟魚等等,在3層樓高的大水槽中悠游。而遊客在每層樓參觀不同海域的生物時,也會從不同角度、不同高度觀賞到太平洋的大型魚類。從下而上仰望鯨鯊,就好像自已也在潛水一般。如此巧妙的空間設計,大幅提升了觀看大型魚類的臨場感。再以海豹展示區為例,先是在天花板看到海豹向下潛水,如此的觀看角度是很有迫力的。接著上樓,再次以水平角度觀看海豹棲息的姿態,並打出冷風讓遊客感受溫度。為了突顯海中生物立體的移動特性,善用立體空間讓觀眾多角度觀賞,海遊館真的讓人驚訝。












  不得不說日本人在觀光景點的規畫上相當用心。原來單純的海港,設立了許許多多的設施,可以坐帆船、摩天輪,可以購物、吃美食,也可以觀看海中生物。雖是人工方式,但卻創造了遊客到港口觀光的動機,這點令我相當欣賞。

  海遊館遊畢,時間也差不多了。晚上7點的飛機,下午3:30也得從海遊館這裡前往關西機場了。首先搭回天王寺,搭車的路上,才發現 Haruka 號4點的班次已趕不上,若是搭5點的,到達關西機場已是5:30。另在 Yahoo! 轉乘查詢到下午4:10於天王寺18號月台有一班關空快速的列車,5點就可以到關西機場。我們一下車大約是4:08,在那一瞬間拼命找18號月台,剛好在2分鐘之內搭上關空快速的列車,說真的還挺累人。

  列車上,大夥睡的睡,但我必須要注意狀況,卻忍不住打起盹來。我一邊看著Google地圖的定位,一邊確認目前列車經過的車站。突然在「日根野」站,列車分別傳來日文與英文的廣播:「列車的1~4號車廂的終點站是關西空港,5~8號車廂的終點站是和歌山」。為了避免聽錯,我再次確認了車上的LED字幕,應該是我想的這樣沒錯。「趕緊看一下自已是第幾車廂」!「是第4車廂,Safe」!這令我挺驚訝的,畢竟我們在台灣並沒有這樣的規劃,慶幸自已運氣好有注意到情報,否則不知要坐到哪裡去了。接著列車在日根野站走了通往關西空港的軌道,一直到了「りんくうタウン」的前幾站,有許多外國人搭車,又在「りんくうタウン」下車,我以為又發生什麼事了,趕緊詢問一位乘客,才確認關西空港確實是下一站沒錯。(回到台灣才曉得那邊有一個購物中心,摩天輪是它的地標。)

  學到教訓了,以後不論如何,一定要先調查好回到機場的列車時刻表。

  日本出關的安檢比台灣出關嚴格許多,外套、皮帶頭、零錢什麼的都要拿下來,大夥在安檢那邊花了不少時間。過關之後距離搭機時間只剩20分鐘,跟本沒時間逛免稅店呀!關西機場也許是比羽田、成田機場大上許多,必須乘坐機場內的電車才能到達登機口。附帶一提,免稅店裡無法使用ICOKA呢,真的很可惜,原本打算在機場全部花掉的。這部份還是羽田、成田機場比較方便,可以使用Suica來付帳。

  搭機的過程中,機長室傳來18號颱風「巴逢」的情報:飛機會經過氣流較不穩定的區域,會稍微有一點搖晃,並將在通過之後開始用餐。到達桃園機場時,發現後面有幾台日本飛往台灣的飛機被更改時間,颱風預計在隔天的半夜進入日本。只能說我們這次旅行運氣真的很好,沒有被前後兩個颱風影響到行程,感謝神的祝福!

  為期五天四夜的日本行就此結束,前兩次我是去東京,這次來到京都、大阪,清水寺也好,姬路城也好,梅田空中庭園的夜景也好,海遊館也好,建築與空間帶給了我許多感動。這次的行程對長輩來說還是太趕,例如第四天的「京都-難波-姬路城-道頓堀-梅田空中庭園」就一直在趕路,長輩很容易吃不消。本次旅行仍有許多遺珠之憾,像是平安神宮、成就院、龍安寺、平等院、二條城、賞楓或賞櫻、祇園祭、萬博公園、姬路大天守登頂…等等,讓我感受到京阪確實值得多來幾次,並透過不同季節的風光來體會。

  京都、大阪!我會再來看你!

京阪自由行:第四日「姬路城、道頓堀、空中庭園展望台」

  行程前三晚我們住在「京都MyStays四條」,第四晚則是住在大阪商務旅館「BUSINESS HOTEL NISSEI」,簡單說一下對兩個旅館的感想。

  「京都MyStays四條」是新式旅館,房間內部很新,大小適中,放了行李之後還有不少空間可以活動。浴室的話則是有浴缸的。床的部份則是很用心地提供了三種枕頭,其中一個是記憶枕。門禁跟一般新型旅館一樣是使用磁卡。二樓大廳是很舒適的地方,櫃台人員的服務很好。在這裡可以拿到很多旅遊的 DM,也可以購買京都公車一日卷。這裡離捷運站只有不到5分鐘的徒步距離,相當方便。

  「BUSINESS HOTEL NISSEI」是舊式旅館,建築物與房間內部看得出來是有點年紀了。房間的大小適中,活動空間沒問題。浴室有浴缸,門禁是採用鑰匙式,出外的時候要歸還鑰匙。但是門禁老實說做的較鬆散,出外回來的時候,並沒有核對過照片就拿到鑰匙了。樓層的盡頭有小陽台,可以看看大阪小巷的夜晚景色。Check in 時有遇到會說中文的店員,早上時間運氣很好遇到打掃已完畢,讓我們先進房間休息,很感謝他們。

  一大早我們從京都動身前往位在大阪難波區的旅館。先在烏丸站通往四條站的通道上吃了「krispy kreme」的甜甜圈作為早餐。這個通道上有一些咖啡館、小型生鮮超市等等,移動的過程中可以順便滿足吃的需求,相當方便。「krispy kreme」現在正好在舉行萬聖節活動,推出各種萬聖節圖案的甜甜圈,說出「trick or treat」通關密語可以讓咖啡折價30日元。我點了南瓜頭造型的甜甜圈套餐,附一杯咖啡,裡面是奶油,應該有加一點南瓜,又香又甜,非常好吃。萬聖節活動期間也可以買到萬聖節甜甜圈組合。


  忘了提一下四條烏丸這裡的生鮮超市「Fresco」,裡面除了一些生活必需品,吃的、用的之外,也可以買到像是炸天婦羅、便當一類的熟食,種類不少,臨時想要吃個宵夜的話很方便。

  一行人從阪急烏丸站搭乘阪急列車,坐到淡路島後再轉乘地鐵,便來到了日本橋站。阪急列車內部很漂亮,坐起來心情格外舒適。一出日本橋站,黑門市場就在旁邊,我們先到旅館放行李,再到黑門市場稍微逛逛。黑門市場是一個大型的傳統市場,生魚、烤魚、章魚燒、蔬果、便當等等,生食熟食應有盡有,也有藥局、衣飾店等生活用品店。市場整理的很乾淨,不會有魚腥味。這裡的天花板則是有大型的海產模型,螃蟹、河豚等等,新奇有趣。









  姬路城景點較遠,我們必須儘早出發。到大阪站乘坐JR神戶線,一路經過神戶、兵庫、明石,便來到了姬路市。(順帶一提,明石海峽與明石跨海大橋很漂亮!)一出姬路站,連路標都不用找,姬路城就遠遠地映在眼前,沿著大馬路直走就能到達。





  姬路站旁邊的廣場正好有忍者秀,忍者與小孩子拿著玩具武士刀互相較勁,搭配音效揮刀以及倒地,甚是有趣。沿路走著,這裡也有不少腳踏車出租的地方。肚子餓了,我們隨意找了一家御好燒專賣店「お好きみ焼き ボナンザ」用餐。店內採西式復古裝潢,燈光泛黃,小巧而溫暖。由於御好燒這類餐點的「料」是想吃什麼就加什麼,因此可以任意點選想加的肉,分開計價,或者是點選已經安排好的組合。店裡主要是販售御好燒、大阪燒、廣島風味燒這三種。我們外國人常搞不懂這三種餐點的差別,這點在茂呂美耶著的《MiyA字解日本 食、衣、住、遊》一書中有提到,大致上是江戶人的御好燒是隨意加料,傳到了好排場的大阪人,又加入了牛肉、烏賊等,再傳到廣島時加入了炒麵。這樣子,這三種「燒」以後就不會再搞不清楚了。我點了「Deluxe 大阪燒」,裡面有牛肉、烏賊…大約五、六種料,已經在廚房烤好才上桌,桌上則有一大面鐵板,用來持續加熱保持溫度。大阪燒來的時候已經塗上醬料,就是有點酸酸鹹鹹的那種大阪燒醬。桌邊則有很多調味料,海苔粉、魚粉、柴魚片、沙拉醬、大阪燒醬。用小鏟子鏟一小塊放進碗裡,隨自已喜歡加入調味料,吃起來格外有趣。一下加海苔粉、柴魚片、沙拉醬,一下加大阪燒醬,一燒多吃自已動手。



  一路前行來到姬路城園區入口,便感受到姬路城的碩大,旁邊城河有人划著小船,可以付費乘坐。只是入園還不必收門票,可以在廣闊的草地上仰望白色姬路城與藍天相互輝映之美。在這裡,除了姬路城本體「大天守」之外,還能夠看到城郭及週邊建築,畫面左右平衡,比起近看大天守別有一種遼闊綜觀之美。姬路城別名白鷺城,以前我們看到姬路城的屋頂都是偏黑色,在近年的修復作業後已經成為偏白色的屋頂了,搭配上白色的城牆,藍色的天空,好似白鷺在天空飛翔。



  越過草地向園內深處走去,經過一販賣部,可以看到售票處。這理的票有兩種,一種是姬路城的門票,每人400日元,另一種是姬路城加上大河劇「黑田官兵衛」特展的門票,每人700日元。(我老媽買錯了,買到特展的門票,但老實說特展的門票比較好看。)


  通過驗票口後,這裡就像是一個大型公園,有樹、有步道。首先會經過「西之丸」,這邊要脫鞋子才能進去,沿著城郭建築內的木造長廊而行,觀看裡頭的房間、射箭孔,了解木頭相嵌的工法、屋瓦的揚葉蝶紋、姬路城的人物歷史,將白紙蓋在金屬蓋上以黑筆塗出家紋…裡頭的行程約要20分鐘。


  邊在步道上走著,時而上坡,一邊觀賞古老建築,一邊從不同角度遠眺大天守,欣賞大天守的不同面貌。接下來在「化粧櫓」附近,已經沒有辦法繼續接近大天守了。之前聽聞可以到「天空的白鷺」觀看大天守修復工程,結果在今年一月已經結束了。現在連大天守附近以及前方的廣場「備前丸」都沒有辦法進去,非常可惜,只能站在禁止通行的地方望著大天守,期許以後還要再來姬路城,走進大天守前廣場、從正下方仰望並登上大天守。





  接著來到「阿菊井」,這邊可以從正面看到大天守,此時可以看見大天守的右邊還有一些工程設施,但比起先前在網路上的照片還有大型吊車,現在的工程設施已經算是「相當低調」了。靜靜坐在這裡的板凳上,仰望大天守,再次感受人類建築的登峰造極之作,希望把一瓦一牆都記在心裡。「阿菊井」非常的深,必須把上半身伸入井口,才能看到井底的錢幣,我想大概有個八、十樓深吧。「阿菊」的鬼故事,若各位有興趣,可以Google「阿菊 盤子」就能看到。此時一個孩子在地上玩耍,一位日本人笑道:「盤子找到了沒啊?」,引來其它日本遊客一笑。站在這裡背向大天守,可以看到好一大片藍天,這天的天空很美,雲層密而層次多,陽光從中間透出,令我多駐足了好一陣子。




   大天守從各個角度,搭配上週邊建築形成的層次感來觀賞都很美。




  出了驗票口,在禮品店買了兩本不同的導覽手冊、通行手形(偏深色的木頭顏色,帶有質感,並附鈴噹)及名信片(有一組現代畫,以及一組手洗紙名信片很不錯),這邊還有姬路城的紙模型,以及屋瓦的模型。此時已是下午4:30,打算趕去看老媽買錯的大河劇「黑田官兵衛」特展,就在園區大門過馬路的商店旁而已,結果已經停止入場,只好再回到園內的大草原上,只是站著不動遠眺大天守與城郭,直到離開為止。姬路城的閉城時間是下午5點,但到了這個時刻園區大門並未關閉,不知是不是只關閉驗票口而已?

  姬路城連接JR車站的大道旁邊,還有一商店街通到JR車站,我們一路沿著商店街前行,由於大家肚子都餓了,打算繞點路,先從大阪站轉乘至難波,去道頓堀吃晚餐,再坐回梅田、大阪站前往空中庭園看夜景。

  順帶一提,姬路的點心記念品不知道要買什麼好,大部份是黑田官兵衛圖案的點心,或者是屋瓦餅乾之類的,如果有姬路的特產食品就更好了(但不曉得有沒有?)

  這天是18號颱風「巴逢」接近日本南邊的日子,我們在神戶線新快速列車上看到天空是一片火燒雲,天空一層一層的,紅色、橙色、藍色、深藍色…顏色各不相同,尉為奇觀。我想,如果剛才一直待在姬路城前,或許能夠看到大天守與火燒雲合影吧?那會是多麼漂亮呢?

  從難波站出來,看到霓虹招牌寫著「道頓堀」三個大字後再往前走,經過道頓堀飯店的人頭腳柱子前,很快就來到最熱鬧的區域了。 來到這裡,想必是要把每家店面的誇張看板都給拍下來,不論是螃蟹、金龍、握壽司、河豚,都要一一記錄在相機中。通往心齋橋筋商店街的「惠比壽橋」上,大家都要拍固力果的跑跑人,但最近非常特別,跑跑人維修期間,改由綾瀨遙擔任主角。心齋橋筋裡有一家餐廳「ミツヤ」,上頭有三位女生在坐鞦千,一邊旋轉很有意思。在惠比壽橋附近,路口的匯集處人來人往,極其熱鬧,有遊客、學生、上班族、牛郎…呈現出大都市的生命力。









  我們晚餐吃的是「拉麵四天王」(原本要吃金龍拉麵,但是必須排隊一陣子便放棄),金龍拉麵、拉麵四天王、神座拉麵三家是相鄰的,神座拉麵位置比較裡面,需要多注意才找得到。我點的是雙倍醬油拉麵加「替玉」,也就是吃完麵之後再加麵的意思。細麵一咬就斷開,相當有彈性。湯頭灑一些白芝麻,雙倍醬油又鹹又香,再來一團份量夠的麵條(這裡可以選麵,但我聽不懂,就跟服務生說我想要一樣的麵),吃起來還蠻過癮。



  接著從難波站坐地鐵到西梅田(事實上坐到梅田比較好,走的路較少),這邊就是人稱的地底迷宮了。剛才從姬路回來的時候走過一次,真的是有夠複雜,地下道不知有幾個十字路口,牆壁、地上貼了滿滿的箭頭,每走幾步就必須看一下告示才不會迷路。所以這次我打算使出絕技,到了西梅田,就先從地鐵站來到地面,跟著平板電腦的定位,這樣絕對不會迷路了吧?我們一路走到大阪站,從南門走到北門後,就能看到「梅田藍天大廈」了。順著馬路走著,來到事先做過功課的地下道並穿越而過,要從這兒越過JR鐵路來到梅田藍天大廈。地下道很長很長,在台灣從來也沒走過這麼長的地下道,已是隧道的程度了。從地下道上來之後,梅田藍天大廈就在眼前了。

  走進一看,梅田藍天大廈的正字標記「通往天空的三個圈圈」就在眼前,視覺的迫力相當驚人。通往售票處的電梯要在3樓排隊搭乘,我們誤跑到4樓,誤打誤撞拿到了張折價卷。買了票上了電梯,電梯往上一升,牆壁一亮,原來是座透明電梯,既驚喜又嚇人。來到觀看夜景的頂樓。首先是室內觀景層,裡面也有餐廳;再往上是露天觀景層,一走上去便涼風徐徐,大阪市的夜景如星宸般儘收眼底,道路上的車流、鐵路上的列車、一棟棟聳立的大樓,在這兒找個點佇立,為夜景而讚嘆。不同於一側的大樓群,另一側則是新淀川,擁有另一種不同的美。大橋兩三座跨越河川,路燈打得大橋是一節一節發光。車子像是玩具一般,從大橋上徐徐而過,一輛、二輛…如同沙漏裡的沙子般,加上橋邊列車透出微光,轟隆、轟隆地經過,令人感受到人類社會的時光流動。我不禁在這兒待上好一段時間。





  梅田藍天大廈的露天觀景台裡,架設了紫外燈,在這裡,所有穿白色衣服的人,包括指甲,地板上的紋路,都閃閃發光。觀景台下來之後有販賣部,有幾張明信片的景觀拍得不錯,值得注意。

  這裡的夜景讓人心滿意足,若說清水寺、姬路城是古代人類的建築傑作,那麼梅田藍天大廈就是現代人類的建築傑作了。在大廈頂樓感受人類文明建構起來的大都市,感受這個高度,感受這個壯闊。這次到京阪來,最令我感動的,是人類建築的禮讚。

  回去的路總是比較熟,從超長人行道出來以後,就能認出大阪車站,夜裡的大阪車站相當美。我們經過噴水池,再走過發光階梯來到2樓,便能轉乘地鐵回到旅館。晚上11點,大阪車站仍然相當熱鬧。

  這天早上9點就出發,一直到晚上11:30才回到旅館,真的是累壞了。敬請期待第五日的遊記「大阪港、關空快速」。


後記:

Part.1

餐館中
看了牆上的90分飲料無限暢飲情報

「我要點大阪燒,飲料要可樂」
「請問飲料要200元一杯還是要 free barabara(英文,聽不太懂)」
「我要可樂(以為要問飲料)」
「請問飲料要200元一杯還是要 barabara」
「現在嗎?(拿出錢包)」
「請問飲料要200元一杯還是要 barabara」
「OK!」
「不是 OK 啦~~~」
「請問飲料要200元一杯還是要 barabara」
「我要可樂一杯(終於聽懂...因為一直以為沒有一杯的選項…)」

Part. 2

在大阪車站北邊通往梅田藍天大廈的超長地下道出口
看見了日本人超高的騎腳踏車技術
一位OL邊拿著手機講電話,邊從圓形的腳踏車障礙中間繞過…