:::
顯示具有 評論 標籤的文章。 顯示所有文章

淺談Android遊戲手把 / Talk About Android’s Gamepad

淺談Android遊戲手把 / Talk About Android’s Gamepad

image

Android上玩傳統電視遊樂器的遊戲通常使用觸控螢幕模擬傳統遊戲手把,但是觸控螢幕不僅遮擋畫面,操作手感也不如遊戲手把靈敏。我關注Android的實體遊戲手把好一陣子了,在這篇想跟大家聊聊這個主題。

When using Android phone or tablet, it is very difficult to use virtual gamepad to  play emulator games on touchscreen. This years, I have searched the solution of using physical gamepad to controll Android’s game. In this article, I want to talk about some gamepad solutions for Android.


行動裝置與遊戲 / Mobile Device & Gaming

4 - 1

隨著要處理的事情逐漸變多,現在已經很難有長期坐在螢幕前的時間。我大部分時間都是用Android系統的手機與平板電腦在處理事情,上圖的期刊論文閱讀就是一個例子。

Snes9x EX

有認真讀書,當然也有認真遊玩的時候。Android中有許多APP模擬器可以讓我回味經典好遊戲,像是這個超級任天堂的模擬器Snes9x EX+,可以讀取超任的ROM模擬執行超任的遊戲,並在觸控螢幕上顯示虛擬觸控遊戲手把以進行操作。

然而實際上玩起來之後很快就會發現,觸控螢幕上的虛擬按鍵操作起來非常困難。特別是用在即時動作遊戲上,由於缺乏實體按鍵的回饋,你很難確定自己到底按到的是哪個按鍵,亦即所謂的胖手指症候群(fat-finger syndrome)

ABAM36-A63894264000_4fbe6ac3365b9

上圖這種鋁合金觸控遊戲搖桿是可以將搖桿以吸盤形式裝在觸控螢幕上,讓玩遊戲時能夠操作實體的搖桿。但是這搖桿會阻礙部分螢幕的位置,像上圖格鬥遊戲的角色就被擋住了。因此我個人對這種產品並不是很看好。如果要不阻擋螢幕地在手機或平板上玩遊戲的話,外接遊戲手把還是我想要的方案啦。


既有的遊戲手把 / Ready-made Gampad for PC or TV Game

PC的USB遊戲手把 / Gamepad for PC

在聽說Android 4支援遊戲手把驅動程式之後,我那段期間熱衷於以電腦的USB遊戲手把接到Android來測試看看能不能玩。那時候我是用Novo 7領先版平板電腦刷成Android 4,再透過USB-OTG外接遊戲手把。現在的手機或平板也幾乎都支援了USB-OTG,只是一般大家都拿來接鍵盤滑鼠就是。

嘗試了三四隻左右的遊戲手把之後,最後可以使用的居然是一隻非常老舊的遊戲手把。這隻手把缺少了現在手把都會有的類比搖桿,而且按鍵鬆鬆的不太好按,但是它卻能接在Android上操作畫面!反而是當時具備雙類比搖桿的USB遊戲手把卻接了也沒反應,我猜是因為驅動程式沒有支援到新型USB遊戲手把吧。

然而那隻舊手把操作起來常常卡鍵,而且攜帶上也不太方便,所以我就繼續找尋其他方案。

電視遊樂器的遊戲手把 / Gamepad of Wii and PS3

其實比起PC用的USB遊戲手把,網路上的教學大部分都是以Wii跟PS3的藍牙無線遊戲手把為主。

一開始流行的是將Wii的遊戲手把用於Android上,設定起來配置很簡單,可以參考T客邦的教學。然而Wii的棒狀手把與傳統人體工學不符,我自己並不喜歡這種遊戲手把,所以傾向於選擇其他方案。

lL1F0

後來PS3的遊戲手把與Android配對的教學開始興盛,像是「用 PS3 手把玩遊戲:Sixaxis Controller 軟體篇」這篇就是大家常常引用的對象,還有不少人為了結合手機與PS3遊戲手把,用手工製作支撐架來組合手機與手把(如上圖),甚至也不少量產的支撐架產品,可見PS3遊戲手把與Android的組合相當受歡迎。

我個人也比較喜歡PS3的遊戲手把設計。可是一個原廠遊戲手把要價台幣1540有點貴,於是我就到網拍找了一下副廠的遊戲手把來購買,價格大概是近千元。可是買回來之後試了老半天卻發現怎樣都無法跟Android配對,後來才知道原來是因為副廠的PS3遊戲手把本來就是無法跟Android配對。希望想用PS3遊戲手把操作Android的朋友千萬不要貪小便宜買副廠的,去買原廠手把吧

嘗試很久依然失敗之後,我就灰心地把副廠手把轉讓給朋友,然後用遊戲手把玩Android的夢想就默默地塵封在待辦事項的最後面了。


自帶遊戲按鍵的Android平板 / Android Device Combined Gamepad

金星 JXD 的遊戲機 / JXD’s Gamepad

139202724188807

之後讓我再度興起這個注意的是大陸品牌金星JXD。金星JXD是做MP3/MP4起家的,一開始也只是主打音樂與影片播放器。逐漸改進作業系統之後,開始做出山寨PSP外表的模擬遊戲機。再來結合了Android系統之後,推出了依然是山寨PSP外表的GamePad互連網遊戲機,作業系統甚至客製化了一個遊戲中心。

138984265886605

接著螢幕畫面也朝向平板大小的7吋邁進,並依然在平板上建置遊戲手把的按鍵,像上圖這台S7300曾讓我一度心動不已,差點就忍不住下單購買。

後來冷靜調查一下,大部分買家的評價普遍不佳。主要原因包括:

  1. 按鍵設計不良:畢竟在平板大小上安裝了類似PS3的手把,結構上本來就有諸多差異,而人體工學設計上考量不夠周延,按鈕排列讓操作很不方便。
  2. 螢幕邊框有落差:由於螢幕旁邊有框,這讓手指在觸控操作時常常卡到旁邊的邊框,很多手勢、側邊欄位都難以開啟。這也是為什麼現在手機或平板都會做全平面的設計。
  3. 不是原生支援Google Play:大部分大陸品牌的Android系統都沒有購買Google Play的認證,儘管因此相對上比較便宜,也可以自行安裝Google Play APP,但是很多APP其實都無法安裝到缺乏認證的Android系統上。

基於以上種種原因,加上金星JXD的遊戲平板價格也相當昂貴,我對金星JXD一直是抱持著觀望的態度。

NVIDIA的遊戲機:NVIDIA SHIELD

shield-front-open-real-boxing

2013年間Android硬體最大的焦點之一,就是顯示卡公司NVIDIA推出了Android系統的遊戲機NVIDIA SHIELD。夾帶的Android的通用性與NVIDIA強大的行動處理器NVIDIA Tegra 4,NVIDIA SHIELD作為Android的遊戲機而備受注目。

眼尖的你可能已經注意到NVIDIA SHIELD的設計彷彿是上面PS3遊戲手把與手機的組合。NVIDIA SHIELD讓手把與遊戲螢幕合而為一,收納時,螢幕可以摺疊到手把上;要啟用時,則打開螢幕,調整好自己喜歡的角度,然後操作遊戲手把。

我覺得NVIDIA SHIELD在遊戲手把與螢幕間取得很好的平衡,不過我對於遊戲手把人體工學易握性上感到質疑。另外就是我會比較想要可以拆裝在現有手機上的手把,而不是一整台Android遊戲機。

此外,NVIDIA SHIELD並沒有直接在台灣發售。原價299美元,代購價格幾乎都是破萬。為了在Android上偶爾玩個遊戲而花費這麼多錢,我自己覺得有點捨不得就是。


Android 適用的遊戲手把 / Gamepad for Android

既然PC用的USB遊戲手把無法生效、Wii與PS3的遊戲手把組合又不太合身、又不想買金星JXD或NVIDIA SHIELD這種一整台的遊戲機,到底有沒有能夠跟Android搭配的遊戲手把呢?

有的,現在真的有專門為了手機與平板設計的遊戲手把產品。

MOGA系列Android遊戲手把 / MOGA Gamepad for Android

f_434804_1

電腦硬體周邊製造商PowerA針對行動裝置推出MOGA系列遊戲手把。在CES 2013中最受人注目的就是Moga Pro。Moga Pro的架構其實就跟PS3加上支撐架很像,上圖的Moga Pro只有遊戲手把跟支撐架的部份,並不包含圖中的手機。平常你沒要玩遊戲時,可以把巨大的遊戲手把收進包包中;要玩遊戲時在拿出手把,把手機裝載支撐架上,設定藍牙連線後,就能夠開始遊戲。

Moga系列後面的產品還有做出行動電源版本,可以讓玩家邊玩邊充電。對於耗電量非常兇的Android系統來說,其實是一個很不錯的設計。

Moga Pro價格約79.99美金,換算台幣大概2500左右。儘管比起NVIDIA SHIELD來說便宜許多,但是作為購買一個遊戲手把來說還是讓我覺得難以下手。另外就是傳統人體工學的遊戲手把還很大,不好攜帶。我希望能夠找到更輕薄短小的遊戲手把,讓我平時好把它放在包包中,隨時讓我有空可以拿出來跟手機合體後進行遊戲。

iPega與FlashFire / iPega & FlashFire

又隔好一段時間,我突然心血來潮找找看Android的遊戲手把,結果沒想到出現了許多類似Moga架構的山寨品,而且價格還便宜很多呢。

網拍上大致上看了一下,主要販售的產品有iPegaFlashfire這兩家。前者的iPega 2是模仿XBOX的遊戲手把設定,後者Flashfire則捨棄了一般遊戲手把的人體工學,做出像是任天堂一樣的一片手把。兩者都具備可摺疊、伸縮尺寸的支撐架,方便跟手機結合,並透過藍牙與手機連線。兩者價格都在千元之內。不過這兩者都是來自於大陸的產品就是了。

image

基於攜帶性考量,我個人比較偏好容易塞進包包的Flashfire,如上圖。不過由於設計上比較特殊,我覺得在操作上還需要實際體驗或評估一下比較好。


小結 / Conclusion

上面聊了各種可以在Android上使用的遊戲手把,但是若要在手機上玩遊戲的話,其實還有另一種逆向思考:玩原本就是在觸控螢幕上操作的遊戲就好啦。雖然說回憶最美,模擬器最受老人歡迎,但是現在手機上的遊戲卻也是相當的精緻,何不跟隨潮流,接受現在流行的塔防類、跑酷類、拼圖類的遊戲呢?

仔細想想,比起玩遊戲這件事情,也許我更重視的是那種面對玩遊戲的心情吧。儘管現在實際上已經沒有什麼時間可以給我玩遊戲了,我還是常常抱持著有朝一日會重新再來回味超任、PS、NDS、PSP那些老舊卻經典的遊戲、或是重回艾爾林的沙灘上去坐著渡假的心情,而努力完成每一天的工作。

即使長大之後,我還是希望自己不會忘記那種進入遊戲世界中的興奮與期待。能夠好好享受遊戲的人,才能夠好好地遊戲人生。

(more...)

Netscape Mozilla Documentary 1998 - 2000 ProJect Code Rush

布丁布丁吃布丁

Netscape Mozilla Documentary 1998 - 2000 ProJect Code Rush

ani-code-rush

這部是去年9月15日國際軟體自由日時MozTW播放的記錄片。描述Netscape開放原始碼與IE對抗的過程。

影片本身即有中文字幕,翻譯的也還可以懂,請直接上YouTube觀賞吧:

這是一段歷史,而且是一段很少人會注意的歷史記錄。拍攝方式主要都是在採訪Netscape的員工,以對談的方式組成整部片。


200px-Netscape_LOGO.svg

Netscape(網景)他們製作了叱吒一時的網頁瀏覽器,號稱可以掌握整個網際網路。但是在Microsoft微軟發現了這塊大餅之後,用Windows作業系統內建Internet Explorer的行銷手法,把Netscape打的落花流水。

這時Netscape想到一個辦法:它們把軟體公布出來,成為開放原始碼(open source)。他們想要藉由這種方式讓Netscape存活下去,其他開發者可以利用Netscape的程式來做更進一步的功能,然後一起抵抗萬惡的微軟帝國。

記錄片就從這邊開始了。Netscape要把程式碼開放並不是一件容易的事情,這並不是讓你單純下載就好,而是要整理到讓人看得懂、並且讓人可以自行安裝開發環境、再來進行開發。這是很痛苦的工作,作為同樣是寫程式的人來說很能感同身受。

然而這個開放原始碼的釋出工作也一樣不被外界看好。平白把自己辛苦的成果給大家用,這樣真的有意義嗎?開放程式碼的過程需要替換很多不能公開的程式,而且連帶的又會遇到更多的bug,這沒有辦法結束的專案簡直是永無止盡的惡夢。

接著記錄片當中出現了另一個角色,他是一位年僅16歲的少年Pavlov,卻是一位在Netscape公開程式碼之後快速地改良了大部分bug的重要程式碼貢獻者。

另一方面Windows也遭到反壟斷調查,比爾蓋茲在法院上振振有詞與他背後用龐大財團支撐的律師集團,不意外地讓他們撐過了這段風波。

Netscape最終被AOL(美國線上)併購,這是美國主要的通訊公司之一。小組成員有些討厭AOL而離開,有些繼續留在AOL,而因股票獲利成為了百萬富翁,但是他們已經不是原本的Netscape小組了。

鏡頭一轉,當初16歲的少年念完高中之後,毅然決然地來到了AOL,加入了這團隊,彷彿象徵著新的傳說即將開始。

記錄片差不多就到此為止了。因為這是好幾個月之前看的影片,現在憑印象來寫,可能細節會有些錯誤。


從Netscape到Firefox

接著我想補充一些東西:

大家都知道Netscape是Firefox的前身,這也是為什麼是由MozTW播放這部記錄片的原因。

Netscape將原始碼公布的同時成立了Mozilla基金會,而戴夫·海厄特喬伊·休伊斯布雷克·羅斯從Netscape的原始碼中建立了另一個分歧,並於2004年之後正名叫做Mozilla Firefox。

Mozilla_Firefox_3.5_logo_256


感想

看完之後,感覺並不是很好釐清整部劇情。

要說有沒有劇情這也是個問題,他不像社群網站把Facebook的成立經過編劇成的電影,而是從多面向去組成的記錄。因此主線十分混亂,很難讓人搞懂Netscape小組到底是贊成還是反對Open Source。

最後結局是很確定的:它們被AOL收購了,有些人也因此成為了百萬富翁,這就是矽谷吸引人的魔力。那些離開的Netscape成員覺得2年就該換工作,而下次又是這樣繁忙的Code Rush。

但是在台灣,只有繁忙的工作,卻沒有製造百萬富翁的環境。更恐怖的是,許多成員都胖得超過正常人的標準。那種體型反應出了壓力與工作型態的異常,這樣真的好嗎?

然而看到Netscape轉變成開放原始碼的過程,那是一種參與歷史轉變瞬間的感動。那之中包含了許多夢想,他們希望藉由開放原始碼來改變世界。儘管很多都是大叔阿姨了,但那種少年追夢的理想令人敬佩。

追求自由的程式設計人請務必來看一看,Netscape開放原始碼的記錄片,Code Rush。

(more...)

軟體構築美學──棕地應用程式開發指導原則讀後感想

布丁布丁吃布丁

軟體構築美學──棕地應用程式開發指導原則讀後感想

image

Kyle Baley、Donald Belcham 著;蔡煥麟、張簡才祿 譯

  • 出版商:悅知
  • 出版日期:2010-10-20
  • 台幣定價:$650
  • 語言:繁體中文
  • 頁數:528
  • ISBN:9866348784
  • EAN:9789866348785
  • 網路書店連結:天瓏網路書店博客來書籍館

某天我在逛天瓏書局時意外翻到這本書,書中提及了許多我以前就很在意的議題,包括程式開發的環境配置、如何將物件導向設計模式應用到開發中。更重要的是,該書要改善的「棕地應用程式」正是適用我多次開發的真實情境。讀完之後,我發現這本書給我了比預期還要多的啟發,所以我想藉此機會寫一下這本書的讀後感想,也作為整理自己所學的一個記錄。


標題與內容

這本書內文翻譯得很好,但就是「軟體構築美學」這個標題下的太差,很難一眼就搞懂作者到底要講什麼,而且也很容易跟其他書籍混淆。

原文的標題是「Brownfield Application Development in .NET」,直譯就是「棕地應用程式──以.NET語言開發」,但就市場銷售來說,這個讓人無法直覺理解的標題也不太妥當。

先不論標題如何,該書就是環繞在「棕地應用程式」的改善上。作者是以.NET程式語言開發,時常使用Visual Studio IDE來講解,主要是開發安裝在桌面端的應用程式。但是作者是以概念性、原則性的方式說明各種作法的含意,因此很容易讓人將作者的開發技巧轉換到其他的程式語言上。

該書分成兩大部分,Part I說明開發環境,而Part II才是開始寫程式碼。以下我稍微摘要各章的內容,並加入我自己的感想,讓大家對該書有一些基本的認識。


認識棕地應用程式

建築領域所說的棕地(brownfield),指的是一塊年久失修的荒蕪建地,如果將這塊地好好整理一番,則仍可能恢復其利用價值。對軟體開發人員來說,棕地應用程式(brownfield application)指的是一個既有的軟體專案,此專案可能因為用了一些不好的開發方式、結構、或設計而產生許多問題,但若經過仔細的整理和重構(refactoring),還是有機會起死回生。

以上引用自該書的第一章的第一段。簡單來說,接手別人寫好的程式碼繼續改進,通常就是一個棕地應用程式。作者更進一步地說明棕地應用程式的三個基本元素:

  1. 既有程式碼:棕地應用程式中會有大量的、已經寫好的程式碼。但是可能因為有些問題,而現在有一群專屬的團隊在積極地想改善它。
  2. 差勁實務作法所造成的汙染:程式中到處都是看起來不太正常的技術債(technical debt)需要改善,大多都是前人一再拖延而沒有寫好的地方。
  3. 仍有改善或重複使用的潛力:儘管有些問題,但棕地應用程式仍有改善的價值。反之,如果該應用程式已經沒有救了,那麼它會被歸類到「老舊系統」。

我翻到這邊的時候就深深地被這本書吸引住。我認為現在進行開發工作很少是重新開始(該書稱之為綠地應用程式),而是幾乎都是接手別人的程式碼,再來開發自己想要的功能,例如我以開放原始碼系統DSpace為基礎進行開發就是如此。嚴格說來,這並不符合上述的棕地應用程式定義,因為DSpace寫作架構良好,並沒有明顯的污染問題,至多只是應用功能無法達到專案的需求,因此仍需要開發。

大多數時候,公司的工程師要接手其他工程師開發的系統,實驗室的學弟要接手學長的論文系統,而這些以少數人力開發出來的程式,都是屬於典型的棕地應用程式。我們遇到棕地應用程式仍然是比重新開發還來得多,不可忽視棕地應用程式的問題。


Part I 開發環境

Part I 開發環境包括以下五章:

  • 第02章:棕地專案的版本控制
  • 第03章:持續整合
  • 第04章:自動化測試
  • 第05章:軟體度量與程式碼分析
  • 第06章:瑕疵管理

對我來說很意外的是,在我過去的認知中,講到開發環境,要嘛就是指非常針對特定程式語言的IDE、要嘛就是專案開發的方法論,但是該書講的卻是更實在的開發環境──能夠建立信心的開發環境。

程式開發的環境

該書先探討許多棕地專案都會使用的版本控制系統VCS,指出傳統簽出、簽入式VCS與具備合併、分支、標籤功能的VCS應該如何使用。

持續整合則是一臺時常進行自動化編譯與測試的伺服器。它負責告訴專案成員現在在VCS中的程式碼是否可用。而持續整合用在不需要編譯的直譯式程式語言上的時候,我認為可以用自動化測試來取代編譯,這也是Ruby on Rails教我的想法。

自動化測試則是基於敏捷開發的概念,藉由單元測試與整合測試來為應用程式抓出臭蟲並改善。

以上三章提到的都是非常重要的議題,而比起單純的專案管理方法論,這些技巧更是能夠確實地提昇專案開發的穩定度,帶給工程師、專案經理、老闆與客戶們信心。讓程式開發就像是坐著一輛穩定的跑車,能夠讓駕駛安心地開往目的地的感覺。

開發以外的環境

更進一步的,作者導入軟體度量與程式碼分析的概念,講述我們常常聽到的「程式碼涵蓋範圍」、「循環複雜度」、「類別耦合度」等指標要如何用於專案開發。

然後作者在瑕疵管理中敘述如何面對瑕疵,以及「達到零瑕疵」原則對於提昇專案組織文化的價值所在,這讓我對於瑕疵報告系統又有了全新的認知。

作者不僅僅只是對程式開發的環境提出指導,也更關注在進行開發的工程師、專案經理遇到程式碼以外的實務問題。我並沒有太多與他人合作開發的經驗,但仍不難想像實際開發時專案成員對於瑕疵所帶來的恐懼以及會如何應對。

正視開發環境中會遇到的問題,並逐步著手改善。這是我認為該書相當有價值的原因之一。而且光是Part I 開發環境,就佔了這本書的一半。


Part II 程式碼

經過半本書漫長兩百多頁的開發環境,Part II總算要關注應用程式真正要處理的程式碼了。在Part II開發環境中包括以下六章:

  1. 第07章:在專案中導入好的物件導向實務
  2. 第08章:應用程式的重新分層
  3. 第09章:鬆散一些:降低程式碼的依賴性
  4. 第10章:重整使用者介面
  5. 第11章:重構資料存取
  6. 第12章:管理系統外部的依賴

在剩餘的兩百多頁中談論如此多的議題,該書並沒有辦法相當地深入探討,但是他卻比專門探討程式開發(例如設計模式)的書籍更加地實用──由於廣泛地討論各種議題,因此適合作為程式開發的入門、回顧、反省,並且更能將這些開發技巧應用在實務上會遇到的各種問題。

可測試的物件導向設計

一開始,作者像是老生常談一樣地帶我們複習了物件導向,而且是「適合實務的物件導向用法」──是的,因為太多人還是用程序導向在寫物件導向的程式。封裝、繼承、抽象化、多型等物件導向基本概念,你學過,我學過,龍五也學過,不過很多學校課程也只會教到這邊而已。

實務上到底應該怎麼用物件導向呢?作者給我們幾個好的程式應該有的能力指標:

  1. 可維護性:一切好的程式應該有的基礎出發點。
  2. 可讀性:讓程式碼容易讓人閱讀。接手棕地應用程式的工程師,閱讀程式碼的時間通常比動手寫的時間還要多。
  3. 可測試性(Designing for testability):程式能夠進行個別的、自動化的測試。
  4. 擴充性:讓程式碼在需要加入新行為時很容易修改。
  5. 可逆性(reversibility):任何設計決策都能輕易回復。
  6. 調適性(adaptability):確保變動發生時不用大幅度重寫。

就如許多程設教科書會講的一樣,這些能力指標也是相當抽象的概念。作者介紹了各種好的程式的開發原則與作法,其中最實在的概念,大概就是「可測試性」了。儘管Part II廣泛地討論各種程式碼設計原則,但大多都會回到「想辦法讓程式可以被自動化測試」的概念上,我也覺得這是一個相當實際的指標。

以實務問題來應用設計模式

第8章討論應用程式的分層、第9章教讀者如何降低程式碼的依賴性,作者從實務中會遇到的問題著手,引進各種設計模式來解決這些問題。

許多以「設計模式」為主題的程設書籍,例如Head First的深入淺出設計模式,大多是為講解「設計模式」而講解,儘管深入淺出設計模式真的寫得很好,但看完之後還是會覺得不知道何時該應用於哪種實務問題上。

相反地,該書作者以設計模式來解決棕地應用程式會遇到的問題,這讓我對設計模式有了更具體的印象。作者不是很深入地探討設計模式,不同程式語言也會有不同的實作方式,不過這是一個很好的入門、索引。畢竟我們想要學的程設技巧,都是為了解決實務上會遇到的問題,而不是為了使用設計模式才想要去學設計模式。

儘管設計模式的作法沒有深入的探討,但是作者仍有具體的程式碼舉例。作者在降低程式碼的依賴性一章以電影評論的拼字檢查功能來舉例,帶著讀者一步一步將程式拆解,以依賴反轉原則(dependency inversion principle)設計介面(interface)、以依賴注入(dependency injection)降低耦合度,將一個隨處可見的棕地應用程式改成更為良好的程式。

不得不說令我汗顏的是,儘管我以為我自己已經對設計模式、正確的物件導向有所了解,但是在看該章一開始介紹的棕地應用程式時,我真的覺得自己也只會寫出那樣的程式碼,而且不知道其中的問題所在。當作者一一剖析之後,我才有如夢初醒的感覺,同時也深深地反省著自己的功力不足。

使用者介面、資料存取與系統外部依賴的重構

許多程設的教科書只會講到上面的原則性理論,而本書還深入使用者介面、資料存取的設計、以及使用系統外部依賴的議題。

這邊談到的使用者介面並不是介面設計,而是在討論很多工程師都會把商業邏輯(business logic)跟介面寫在一起的問題。這在開發AJAX應用的時候更是讓人苦惱不已,某些邏輯判斷到底要寫在JavaScript,還是寫在後端程式中呢?作者帶我們認識了MVP(Model-View-Presenter)與MVC(Model-View-Controller)設計模式,而在會保留使用者狀態的應用程式中,適合使用MVP,例如桌面端應用程式;傳統的網頁程式則是普遍採用MVC。依此推論,我想以保留使用者狀態為賣點的AJAX應用,應該也可以用MVP的方式來設計也說不定。

在第11章資料存取主要討論DAL(Data Access Layer,也就是MVC中的Model),作者斥責預存程序(store procedure,在資料庫中寫的邏輯判斷程式),建議商業邏輯應該集中,並且大力讚賞ORM(Object-relational mapping)。說真的,我在用過Active Record這種ORM的設計之後,也認為作者的建議實在是中肯到不行。

外部系統依賴的問題中,作者建議以Proxy、Adapter、Facade等設計模式來設計「反腐敗層」(anti-corruption layer)。而如果將目光縮小到專案內部,內部依賴也是可以利用作者介紹的各種設計模式,將內部元件區隔、模組化,以降低內部依賴的程度。

以上三個議題都比前面的原則性指導更貼近實務操作,作者將各種會遇到的問題一一剖析、探討,讓程設從實務需要的技巧更深入到程式的品質。隨著實例看作者是如何改善、為何要如此修改的敘述,讓人獲益良多。


持續改善

該書的最後一章並不談程式,而是回歸到了整體開發環境中的基礎點:要如何持續改善。

該書談論了各種程設的技巧與作法,儘管有其價值所在,但每個看過的人應該都會先在心中打退堂鼓,抱著:「我真的做得到嗎?」「這種作法真的能持續下去嗎?」的疑惑。至少我就是這樣覺得。

在最後一章中,作者點出這個困惑。作者並不是要實務上立刻大轉彎,馬上加入版本控制、持續整合、自動化測試等機制,而是建議讀者緩慢、持續漸進地改善。

我們需要清楚的知道目標,並計劃如何達成目標,而不是「我們想要讓事情變得更好,所以就加入單元測試」,而是要不斷的推動這個專案,讓最後的結果可以盡量貼近我們當初的期望。

然後最後這一章舉了相當多案例,帶讀者回顧整本書的內容要如何應用在實務上。即使是像作者如此老練的高手,還是不斷在專案中碰得一鼻子灰。但是堅持品質、持續改善,儘管專案成果可能很難讓客戶理解這之中的好處,但是團隊的成員素質卻會因此逐步提昇、變得更有自信。

看完持續改善一章之後,我就決定在把這本書還回圖書館之後,自己再去買一本擺入書櫃中。當我要開始開發專案時,或是專案碰到困惑時,我想這本書都可以給我一些實務上的建議。更重要的是,我希望藉由該書在書櫃上的身影,讓我不會忘記對於持續改善的堅持。


優良的翻譯

最近讀了一些歐萊禮的程式書籍,說實在的,歐萊禮的翻譯通常都會讓人覺得奇怪。有些是翻譯的不錯,不過像是這種比較實務性質、又牽扯到各式各樣議題的書本,我通常會有需要腦內自動校正翻譯的覺悟。

但是這本悅知文化出的書中,譯者蔡煥麟跟張簡才祿翻譯得真的很好,我幾乎找不到看起來很奇怪的地方,閱讀起來毫無阻礙。不僅是程設專案的專有名詞翻譯貼切(時常標註英文原名也是相當的貼心),而且作者幽默的笑點也能讓人看了會心一笑。這讓該書中的眾多案例讀起來像是小說般的有趣。

以下節錄一段讓我印象最深刻的敘述,這是持續整合中的假設案例:

現在,假設我們開發流程已經有自動化建置程序,只要有人簽入程式碼,就會自動執行下列動作:
  1. 取得最新版程式碼
  2. 編譯程式碼
  3. 透過電子郵件通知團隊這次的建置結果
所以當傑克森簽入程式碼的時候,我們的自動化建置程序便會啟動,並且立即在第2個步驟(編譯程式碼)出現錯誤。然後團隊成員會收到電子郵件,知道程式碼出了問題了。我們甚至設定讓電子郵件的內文顯示最後一次簽入的人是誰,在這個例子當中就是傑克森。
現在得用上我們的建置失敗規則了。麥可、小劉、阿輝,以及其他團隊成員都停下了手邊的開發工作,也許去喝杯咖啡什麼的。他們多半會閒晃到傑克森的辦公室隔間開點小玩笑,也許送他一個小東西,例如,一隻象徵失敗的橡皮鴨,暗示他就是最近造成一次建置失敗的人。傑克森看見一群人朝他這邊走來,嗅到了嘲弄的味道,才想起自己之前忘記取出新版的程式碼,於是趕緊做了必要的修補。在第一個人踏入他的隔間之前,他就已經迅速修正完畢,並執行了正確的簽入程序。現在,他可以心安理得地等待命運之神的降臨。

感想

在寫論文的時候,我嘗試自己進行開發一個綠地應用程式專案。儘管在開發之前我讀了一些程設的書,學習設計模式與專案管理,但是開發過程中,我還是得承認自己真的禁不住「走捷徑」的誘惑,在程式碼中留下了一堆技術債,而我只能絕望地看著程式碼向下沈淪。現在,他已經是個標準的棕地應用程式,雖然我不知道未來會不會有人繼續想要改善它就是。

反省當初,儘管我在論文中找來了PHP與JavaScript的IDE,但是並沒有建構起良好的開發環境。Dropbox雖然有版本控制,但跟VCS比起來還是有很大的差距。自動化測試只有Model可以測,我到最近才知道,原來JavaScript跟前端UI也有一套自動化測試的方法。更進一步的,應該要搭配程式碼覆蓋率與持續整合的作法,鞏固程式碼的穩定性。

雖然我希望將我的論文系統以開放原始碼的形式發佈,但他真的很不像是外面人家做的開放原始碼專案。下次起頭時,我還是應該好好看看別人是怎麼做的,以開放原始碼專案的形式好好地開始規劃。

最後,看完這本書之後,我有一種想要再執行一個開發專案的衝動。我想實作這本書中介紹的各種方法,只要我熟悉這些方法,我就能夠帶給團隊其他的工程師,提高大家的程設能力。

題外話,雖然該書是以.NET來撰寫,但書中多次提到Ruby on Rails框架在自動化測試上的好處,而我也很想做做看大家認為能夠快速開發的Ruby on Rails,到底會是多麼快速。

還有好多想要做,還有好多想要學的事情呢。


結語

「軟體構築美學」一書,並不是專案管理的書。專案管理是成功專案的一部分,但是專案管理看再多,程設的等級還是很難進步,開發系統依然像是高空走吊橋,令人驚心膽跳。

現實環境中,很多開發環境都會讓人難以確實地提昇程設技巧。實務上的問題會變成以交際手段來搓過,工程師的能力還是很難提昇。我們這邊的開發團隊,儘管老師給了我們很大的自由,但我覺得在程設開發的能力上還是不夠。在我們這樣有自由、有時間的環境都是如此,在外面中小企業中,沒有經驗的程設顧問、老闆也不見得願意提供資源、而其他工程師也不一定想要配合,這些情況都很容易想像的出來。

即使如此,我還是想要進行更好的程式開發,用有效率、穩定的方式開發出高品質的系統。現在的我,並沒有能力帶領大家。不過,我想還是可以先將「軟體構築美學」作為目標,一步一步地踏實前進,想辦法增進自己的實力吧。

(more...)

伸縮三節筷&旋轉二節筷使用心得

布丁布丁吃布丁

伸縮三節筷&旋轉二節筷使用心得

最近好像越來越流行自行攜帶環保筷了,週遭朋友幾乎都有一雙環保筷。雖然我在宿舍也有一雙從國中營養午餐用到現在的筷子湯匙組,但是因為體積過大不方便帶出門,因此我決定選擇可以縮短的二節甚至是三節環保筷。

以下就先從二節環保筷開始介紹吧。


旋轉二節環保筷

優點:

  • 塑膠材質
  • 可拆成二節,縮小體積
  • 結合後筷子牢固
  • 筷身設計佳,好夾又好掌握
  • 便宜,家樂福35元購得

缺點:

  • 不容易使用旋轉來接合二節筷身(理由後述)
  • 盒子質感不足

長13cm*寬4cm*高1.5cm,跟國父百元鈔比比看,大概可以佔了快一半的大小。

塑膠外殼與筷身,不重,我也沒有磅秤可以秤重。我喜歡塑膠的質感,相對的,總覺得金屬就是會有種味道,而且又冰又滑不是很好用的感覺。

如上圖所示,筷身是由兩節所構成,中間是以螺絲齒痕的方式連接。問題是齒痕跟另一邊的洞感覺容易囤積髒物,而且不好清理。注意到塑膠的筷身中間還是金屬材質,所以應該蠻牢靠的。

二節筷光靠單之手就可以結合了,但是這仍然有著相當嚴重的問題:手會碰到前半筷身。為什麼這是問題呢?吃飯的時候使用筷子,因此前半的筷身就會很油或是很黏。綜使在吃完之後我們會用衛生紙做簡單的清理,但是油膩的前半筷身依然是不太想去碰。更何況,要抓住前半筷身旋轉的接合或分離的時候,也會因為油膩的關係不好掌握。這是二節旋轉環保筷的致命缺點。

接著來看看筷子的其他部分。這是前半筷身的圓型尖頭,可以看到有刻痕幫助夾食物時較為牢靠,實際用起來也不錯。

後半筷身的尾端,是呈現方形的,以方便掌握筷子本體,手感很好。

因為目前這支二節筷不使用,就乾脆拿前半筷身來當作泡麥片粥的攪拌筷,長度略短,但比整個筷子長還好的多,也不算白買啦。

盒身是單面打開的形式,注意到下半部有擺置前半筷身的架子,讓筷子在收納之後不會因為晃動而滾來滾去發出聲音。

盒身雖然薄,但是面積龐大,對我來說不便攜帶,所以就沒有帶著走了。


伸縮三節環保筷

優點:

  • 體積更小,有質感
  • 伸縮較為方便
  • 拆裝清理容易

缺點:

長8.5cm*寬2.1cm*高1.15,佔了國父紙鈔1/4不到的面積,相當迷你。

先來看看盒身,上方的蓋子旁有鑰匙圈的吊勾,方便吊在包包上。中間有個不太明顯的凹痕,那是用來當筷子架時,筷子會集中在凹槽不容易跑掉的設計。另外,照片上的水漬是因為剛洗過的關係XD

來看看背面,除了凹痕沒有之外,基本上跟正面是一樣的。

蓋子打開的圖片,兩個金色的球狀的東西是筷子的尾端。

蓋子也是單方向開闔的形式,而且有凹槽方便打開,卡住時也蓋得很緊,筷子不會輕易掉落。盒身也跟筷子的尺寸吻合,放在裡面不會因為晃動發出聲音。但是這麼小的盒身要清理也不太容易。

拿出筷子,來看看筷身跟盒子的比例吧。

可以看到三節伸縮的原理,它是三節直徑不同的筷身。

把尾部的金球部份拆開,就可以把筷子拆成三節。注意到上面第二張圖片,這是依照拿出來的順序,所以最後一節的筷身擺在左下角,而第一節的尖端筷身擺在右上角,方向是左下方的。

第一節筷身前端也有刻痕,讓夾食物時比較穩固。

最後一節筷身也有刻痕,但是我覺得這對握筷子的手感幫助不大。而且因為伸縮構造的關係所以是圓的,我也不太喜歡。尾端則是上面提到的金球蓋子部份。

接著來看看他的伸縮。廣告台詞寫的「一甩即出」是真的,但甩出來卻還不能用,還要「順勢的把筷身往外拉一下」。他沒有內建彈簧,所以用甩出來的筷身,還是很容易縮回去。所以必須要抓著第一節筷身拉一下才比較穩固,然而,卻是單隻手無法做到的動作(因為左手要拍照,所以照片只有右手),而且拉過頭的話筷身還會被拉出來。

伸縮三節筷也有跟二節筷一樣的問題:要用手去碰油膩的第一節筷身,就是一種不方便!更何況是當吃飯吃到一半,筷子不小心戳太用力而縮回去,那要再拉出來簡直是一種痛苦且不雅觀的動作。

這是收回去的方式,第一節筷子朝著盒內,用力一插就進去了,也不會弄髒手,我很喜歡。

而且因為攜帶體積小,所以目前是帶著這一組在外面跑。

最後拿這兩組筷子的比較圖來看看,可以看到二節筷比三節筷還要長,實際用起來的時候其實感覺差異不大就是。


結語

在這邊我不講什麼環保概念,主要是厭煩了劣質竹筷容易刺到手、以及怕竹筷會有漂白水不乾淨的問題,所以才想弄個環保筷來用用。

實際上這兩組用起來並不是非常滿意,伸縮三節筷也只能說是堪用的程度。

使用完畢之後,會拿衛生紙擦拭再回收,然而是沒辦法完全清理筷子,筷身依然會油油的。這造成了第二次就不想拿出筷子來使用的問題,因為要拿著油膩的筷身往外拉,覺得不是很舒服。就算是包著衛生紙往外拉,也會怕衛生紙黏到筷子上面,待會一起吃進去。

雖然有點吹毛求疵的感覺,不過在意這些小細節,才能夠設計出好用的產品,繼續努力吧。

(more...)

狼與辛香料──旅行商人與賢狼的奇幻行商故事

布丁布丁吃布丁

狼與辛香料──旅行商人與賢狼的奇幻行商故事

(圖片來自博客來網路書店)

「這麼美好的月色,沒有什麼酒嗎?」

擁有野獸的耳朵與尾巴,卻是少女姿態呈現的賢狼赫蘿,出現在旅行商人羅倫斯車上的場景,開始了狼與辛香料的故事。

引用 Wikipedia的介紹:

《狼與辛香料》是日本作家支倉凍砂所著,文倉十插畫的輕小說。繁體中文的譯者是林冠汾。於電擊文庫出版,曾獲得第12回電擊小說大賞〈銀賞〉,同時也獲得「這本輕小說真厲害!2007」票選活動的第一名,女主角也獲得女性角色票選冠軍。

有著奇幻小說標準的中古歐洲的虛構舞台,卻將重點描述在經濟與買賣的行商活動。旅行商人羅倫斯以及同行的賢狼赫羅,是眾多奇幻輕小說裡面的異色作品。在台灣代理的輕小說中幾乎沒有不獲獎的小說,然而狼與辛香料卻是名符其實,相當值得一讀的故事。

一方面是磨練自己的介紹能力,我打算用自己的方式來介紹狼與辛香料這部作品的魅力。另外由於手邊只有最近買的第三集,所以引文主要都是以第三集的內容為主。

奇幻故事的核心──世界觀

「海拉姆地區擁有好幾座採礦量傲人、並可以採得各種礦石的礦山。行走與這地區的巴托斯或許早已聞到硫磺味,但是羅倫斯聞到這獨特的臭氣,便不禁揪起了臉。

一穿過設在石牆上的門,隨即撲鼻而來的這股臭味,讓羅倫斯瞬間明白了這個區域住著什麼樣的人。

他們是教會的最大敵人──鍊金術師。」

──巴托斯帶領羅倫斯拜訪編年史作家的路中

記得之前在Frontier雜誌裡面看到過編輯對於奇幻小說的定義,其中一項即是豐富且令人著迷的世界觀。

世界觀是什麼呢?我們從上面這段引文終究可以看到狼與辛香料中一部分的世界。首先是對於「海拉姆地區」擁有礦產的敘述,然後是「人物」對於此地區的看法不同,表現出人物的「活」,再來是用「穿越石牆的門」的動作,帶出了「教會」與「鍊金術師」的文化背景。

狼與辛香料是以第一人稱羅倫斯的觀點敘述。作為一個旅行商人,羅倫斯除了擔當世界表象的描述能力,更重要的是具備了理解事物背景的知識。他就像是世界的解說員一樣,跟著讀者一起推測、思考「石牆」存在的意義,再用「已知的教會觀點」來敘述對於鍊金術師的看法。

第一人稱的好處就是讓讀者不會感覺到是作者在控制這個世界,而作者的確在不知不覺的時候,透過羅倫斯的眼睛,在讀者的想像空間中一步步將這世界建立了起來。

寫實的奇幻設定

「哈哈哈,很意外嗎?就算在北方行商的人,也大多認為鍊金術師就是魔法師。其實他們跟打鐵工匠沒什麼兩樣,他們本來就只會做一些加熱金屬,或是用強蘇來溶解金屬的工作而已。」

──巴托斯對於羅倫斯的驚訝,如此解釋了鍊金術師工作

說到鍊金術師,一定會聯想到荒川弘的鋼之鍊金術師吧。但是狼與辛香料裡面的鍊金術師,卻是如此意外地寫實設定──彷彿就像是歷史裡面出現的鍊金術一樣。

狼與辛香料的故事並不是實際存在的歷史時空,而是有教會、國家、騎士等歐洲中世紀設定的虛構舞台,這也是奇幻小說裡面時常作為世界基礎的要素。然而,其他奇幻小說裡面的「魔法」、「除了人類之外的種族(如果先不看賢狼赫蘿的話)」之外,卻並不存在於狼與辛香料的世界中。

羅倫斯的生活環境與彷彿真的在中古歐洲中,商人是用自己的雙手行商,戰士是靠刀劍進行戰鬥,教會與異教徒的抵制與抗鬥,是可以讓讀者理解且不覺得刻意的寫實設定。

而更特別的是,狼與辛香料重點卻不是常見的劍與魔法的戰鬥冒險,卻是經濟和買賣的行商生活,也曾有網友以「簡易經濟學」來形容這部作品。

以我淺薄的閱讀經驗來看,我認為比起用各種神奇魔法來推動故事劇情的寫法,狼與辛香料建立在寫實設定上,卻又能夠藉由裡面人與人之間的互動來敘述故事,這更是另一種讓人耳目一新的寫作境界。

知識淵博的賢狼赫蘿

「我這對耳朵能夠辨別任何謊言,不知拯救了多少深處危險的同伴呢。這尾段充滿白色絨毛的尾巴是我的驕傲,只要看見的人都稱讚我這尾巴。說到約伊茲的賢狼,不是別人,正是本小姐。」

「雖然咱長久以來被尊為神,且被束縛在這塊土地上,但咱根本不是什麼偉大的神。咱就是咱,咱是赫蘿。」

──對於質疑她為人類之身的羅倫斯,賢狼赫蘿如此回答

在上一段中提到的唯一非寫實的奇幻設定,也是介紹開頭的三張書影裡面的人物,就是這位赫蘿。

赫蘿被設定為可呈現為賢狼姿態與少女姿態的人物,擁有高於人類的嗅覺與行動力,以及長久生活所累積下來的經驗──她的奇幻部份僅止與此。

這個意思是,在進行推理與思考的過程中,赫蘿與讀者代表的羅倫斯,基本上是站在同一個起跑點進行的。羅倫斯思考解決問題的方法時,赫蘿也是用她所具備的知識與身為狼的特長行動著。基於不希望人們用懼怕的態度面對的理由,在許多的時候,可以看到赫蘿十分不情願巨大賢狼的姿態用暴力破壞一切。

對於赫蘿的限制是來自於態度、想法和觀念,使得她大部分時候是以遮住耳朵與尾巴的平常人姿態出現在世界中。這種不過分強調赫蘿重要性的設定,保持了世界觀的平衡。即使赫蘿是推動劇情的某些關鍵,但是少了羅倫斯、少了其他配角,都將導致他們行動失敗。

這也是繼承上一段所寫道,這種寫實而不完全依賴奇幻設定的寫法,對我而言是相當有魅力的。

充滿魅力的賢狼赫羅

「汝喜歡這樣的咱,是唄?」

羅倫斯的視線不小心對上赫蘿垂頭往上看的視線,他無法控制自己臉色轉紅。

「大笨驢。越是愚蠢的雄性,就越喜歡軟弱的雌性,根本沒自覺到真正軟弱的是汝等雄性的腦袋瓜。」

一邊露出兩邊的尖牙,一邊露出諷刺笑容的赫蘿瞬間反敗為勝,佔了上風。

──前往卡梅爾森的途中,羅倫斯與赫蘿的鬥嘴

在寶島社《這本輕小說真厲害!2007(このライトノベルがすごい!2007)》裡面,赫蘿奪冠女性角色部門,並不是沒有來由。

長壽的賢狼赫蘿使用著古語(汝、咱等代名詞即是),許多地理、技術的知識也都已經過時。然而這樣子的赫蘿,卻有著對人們有長達數百年的觀察,熟知人與人之間的來往互動──這也是千古不變的道理。

赫蘿時常捉弄羅倫斯的表現,散發出與少女外表不符的成熟氣氛;身為高傲的賢狼,喜愛美食與稱讚的個性卻是如此平易近人;而雖有令人懼怕的巨大賢狼外貌,卻是以嬌小少女身軀的呈現;有時用玩笑的表情作弄羅倫斯,有時又顯露出賢狼的孤獨與寂寞。這些正是令人印象深刻的關鍵:違和感。

是商人也是男人的羅倫斯

看阿瑪提那副著迷模樣,相信只要赫蘿開口,阿瑪提一定會買下所有東西給她,對赫蘿來說,阿瑪提肯定是個不錯的冤大頭。

雖然這麼一想,不禁有些同情起阿瑪提;但是看他那副模樣,相信他會很樂意解開荷包吧。

如果可以拿別人的荷包來買得赫蘿的好心情,沒什麼比這更教人開心的了。

──看著準備前往旅館邀約赫蘿的阿瑪提,羅倫斯如此算計著

我發現要繼續敘述赫蘿的魅力的話,一定得先講一下羅倫斯才行。

身為本作的主角,羅倫斯擁有豐富的行商知識與人脈,他的地位及重要性並不輸給赫蘿,這也是為什麼赫蘿要跟著羅倫斯的緣故。沒有現代社會及地理常識的赫蘿,只能依賴著羅倫斯帶她回到故鄉(以及在路上能夠享受美食與美酒)。

儘管羅倫斯時常被赫蘿作弄,但是劇情中他依然是個十分精明的商人。所謂的精明是建構於思緒的縝密以及多面向的觀察之上,而羅倫斯對事物的看法,也為讀者帶來了豐富的世界觀。

然而劇情中羅倫斯也是有著判斷錯誤的時候。考慮了相當多層面之後,當羅倫斯與讀者都覺得這樣應該沒問題了吧,事情就是會在出乎意料的情況下發生,這是本作讓人看得大呼過癮的手法。

本作另一個讓人想要追著繼續看的重點,就是他與赫蘿的互動。一個單身的旅行商人,碰上一個充滿魅力的賢狼少女;對於女性經驗生澀的羅倫斯,以及令人難以捉摸的赫蘿,愛情故事永遠是看也看不膩的劇情要素啊。

結語

「雖然貪欲會失去很多東西,可是禁慾也不會有任何建設。」

赫蘿一臉幸福地舔著沾在手上的蘋果汁液,那模樣使她的說詞變得很有說服力。

倘若會失去這般難得的幸福,那禁慾簡直是愚蠢至極的事。

──吃著蘋果的赫蘿,反駁羅倫斯的話

這一句話我想應該是本部作品看到現在,最讓我有所感觸的話。

羅倫斯跟赫蘿因為有想要的東西而前進,卻也因為有想要的東西而失去。這般來回得失,卻又在這之中獲得了更多東西。不管怎麼說,看著他們的行商生活,總是能帶給我相當多的樂趣。

到日本2007年8月出的第五集為止,這部作品還沒有完結的打算。漫畫從2007年11月開始連載,畫家小梅けいと描繪出了甚至超越原作插畫的可愛赫蘿,相當值得期待代理到台灣。而明年2008的1月將要放映動畫版。

如何?有沒有興趣一起來看看羅倫斯與赫蘿的世界呢?

(more...)