2013年10月22日 星期二
FF XIII-2 感想
玩完FF 13這爛尾之作後,對 FF 13-2是不抱期望的。
但因為二個原因,我還是玩了:
1. 中文化(Xbox 360上的 FF 13是沒有中文化的)。
2. 莎拉。
莎拉是我覺得 FF 13 中最有女主角相的人物,雷光皮笑肉不笑的樣子看了就討厭,牙也一樣,香草不夠萌。
13-2 用莎拉當女主角很得我心,玩了後就停不下來了。
先說本作優點,其實也是前作優點,就是戰鬥系統非常有趣,不會有RPG練功的無聊感。
本作也不太需要練功,Easy 模式下,順著劇本走,要通關大概沒有問題。
但是FF 13-2只能二個人加1隻怪物,實在是太小氣了,打起來很不痛快。
其它優點嘛,如果喜歡養成的,也許會覺得抓怪物系統不錯,但這對我來說是個大缺點,怪物那麼多種,好的都要花時間去抓,更別說這個作品要培育怪物需要花很多錢,還要繼承,弄不好就整隻廢掉,這種浪費時間的東西我不喜歡。
買東西也不是有錢就可以,還要有材料,TMD主流程太短只好搞這些有的沒的玩弄玩家
前期的故事還算可以,但以時間為故事主軸,只有二種情況,大好或大壞,且大壞的機率很高。
剛開始玩我就很擔心,因為能將時間主題做得好的作品很少,做不好的話會很慘。
缺點的話,實在是.....「磬竹難書」用在這應該很貼切。
結局看來是很多人在罵,我個人也是無法接受這種結局。
我的看法是,這種結局代表故事還沒結束;
你要一個玩家花了錢,花了時間,玩到遊戲破關了,才發現原本這個遊戲可能只是為了後續的DLC或續集做鋪成,
講句難聽的,我這輩子沒看過這種無良廠商。
SE社你是在拿商譽做實驗。
再來是劇本的問題,為什麼一個遊戲玩到破關了,還留有一堆疑問給大家?
我還記得的疑問有:
亞莉沙為什麼要害莎拉他們?
Snow怎麼穿越時空的?
Hope也能跟著一起穿越時空但回不去了?
繭為什麼那麼重要?人們不是都到地上生活了嗎?為什麼繭要摔下來好像太陽要掉下來一樣?
後來繭也掉下來了,但換一顆人工的升在天空,這樣也行?
為什麼莎拉跟艾諾爾被劍刺穿了但是沒死?
為什麼凱厄斯被劍刺穿就死了?
凱厄斯想死為什麼不自己去死?(有人說他不能自殺,那最後的結局難道不算自殺嗎?)
薩茲本來在那?Hope不是說都找不到他嗎?怎麼突然出現在500年後?
凱厄斯一看就是最後大魔王,莎拉跟艾諾爾在中期還在猜是誰在擾亂時空,害我還以為有別的隱藏人物哩(說到底,擾亂時空的就是莎拉跟艾諾爾你們兩啊)。
太多太多疑問了,我知道有些問題在DLC有解答,但出 FF 13-2 就是為了再出 DLC 騙錢嗎?
越寫越生氣,最氣的就是,一對年輕男女一起旅行,難道未婚夫都不擔心的嗎?
這根本背離現實嘛。
FF 13 系列真是沒有最爛只有更爛,難怪後續不敢叫FF 13-3,因為玩過 FF 13-2 的人應該很少會想再被騙一次了。
鳥山求以後的作品得要嚴加防範才行。
2013年10月3日 星期四
Spring 參考書籍
Spring framework 用博大精深來形容應不為過。
我在學習 Spring 時,參考了滿多相關文件、書籍,以下列出我的學習心得,希望能有助 Spring framework 的同好。
*官方文件
這不是廢話,真的。
Spring 的官方文件寫得很不錯,看完後可以馬上上手,尤其是Spring 更新滿快的,某些新功能的資料可能只有官方文件才有。
有 Spring rference 2.5 中文版,雖然舊了一點,但對看中文比英文快的人來說,不失為快速上手的一條捷徑。
*Spring in Action
初見此書的時候,被其廣度嚇到了,寫這樣的一本書,到底要花多少時間呢?
這本書的好處是,前幾章基本介紹看完後,後面的章節可以挑有需要看的,不需要要全部節章都看過一遍。
文筆略閒枯燥,但技術參考書籍嘛,這不算什麼大缺點。
此書做為官方文件的補充資料很適合,我在學習的時候,好幾次遇到官方文件沒寫的,在此書上可找到;有時候官方文件有的,在此書上卻沒看到。
真不知道是有意還是巧合。
此書有簡中版本,雖然通常慢英文版一個版次,但還是那句老話,對看中文比英文快的人,是一大福音。
我只看過簡中第2版,翻得還行,第3版等入手後再補充。
*SPRING揭秘
中國人寫的,看內容可以想見作者在 spring 上花了很多功夫且是通過實戰考驗的。
可惜的是此書以spring 2為主,內容稍舊。
最大的缺點是,它絕版了。
若有機會入手的話,是一本滿不錯的參考書。
以下是不推的,原因就不多說。
*Spring Live
*Spring Recipes
我在學習 Spring 時,參考了滿多相關文件、書籍,以下列出我的學習心得,希望能有助 Spring framework 的同好。
*官方文件
這不是廢話,真的。
Spring 的官方文件寫得很不錯,看完後可以馬上上手,尤其是Spring 更新滿快的,某些新功能的資料可能只有官方文件才有。
有 Spring rference 2.5 中文版,雖然舊了一點,但對看中文比英文快的人來說,不失為快速上手的一條捷徑。
*Spring in Action
初見此書的時候,被其廣度嚇到了,寫這樣的一本書,到底要花多少時間呢?
這本書的好處是,前幾章基本介紹看完後,後面的章節可以挑有需要看的,不需要要全部節章都看過一遍。
文筆略閒枯燥,但技術參考書籍嘛,這不算什麼大缺點。
此書做為官方文件的補充資料很適合,我在學習的時候,好幾次遇到官方文件沒寫的,在此書上可找到;有時候官方文件有的,在此書上卻沒看到。
真不知道是有意還是巧合。
此書有簡中版本,雖然通常慢英文版一個版次,但還是那句老話,對看中文比英文快的人,是一大福音。
我只看過簡中第2版,翻得還行,第3版等入手後再補充。
*SPRING揭秘
中國人寫的,看內容可以想見作者在 spring 上花了很多功夫且是通過實戰考驗的。
可惜的是此書以spring 2為主,內容稍舊。
最大的缺點是,它絕版了。
若有機會入手的話,是一本滿不錯的參考書。
以下是不推的,原因就不多說。
*Spring Live
*Spring Recipes
2013年8月30日 星期五
UltraEdit 出現 Enable 錯誤
這幾天不知道為什麼,用了好久的Ultraedit 開中文檔名檔案時,一直跳出 Enable 視窗(如下圖),煩死人了。
研究好久才發現,原來是我手賤開了 Tab 檔名排序功能的原故,關閉此功能即可。
(看來 Ultraedit 對非英文檔名的排序處理有點問題)
關掉 Tab 檔名排序的地方如下:
Advanced --> Configuration --> Application Layout --> File Tabs --> Miscellaneous --> Sort Tab on File Open.
注意:設定完成要重新開啟 UltraEdit 後才不會再出現該錯誤。
研究好久才發現,原來是我手賤開了 Tab 檔名排序功能的原故,關閉此功能即可。
(看來 Ultraedit 對非英文檔名的排序處理有點問題)
關掉 Tab 檔名排序的地方如下:
Advanced --> Configuration --> Application Layout --> File Tabs --> Miscellaneous --> Sort Tab on File Open.
注意:設定完成要重新開啟 UltraEdit 後才不會再出現該錯誤。
2013年2月22日 星期五
Using p6spy in GlassFish
P6Spy is a framework that enables database data to be seamlessly intercepted and manipulated with no code changes to existing application.
It's easy to replace jdbc driver with p6spy in GlassFish (I've tried in GlassFish 2.1.1), just few steps:
2012年12月4日 星期二
Windows 7 使用藍芽(bluetooth)耳機 (32 bit / 64 bit)
近來買了 Sony Ericsson MW600 藍芽耳機,除了用來與手機披配無線通話外。另一個目的是利用它聽 desktop 的音樂。
沒想到...沒想到...
Windows 7 雖然內建 bluetooth driver, 但是抓不到耳機而無法使用MW600。
上網查了一下,似乎還需要 bluetooth stack 什麼的軟體,這玩意兒Windows沒有內建,有名的 CSR / IVT / Widcomm (已被 Broadcom 併購) 軟體,都要錢或是你要使用他們家的晶片才能用。
本人推薦下面這個解決方案(32 bit / 64 bit 都可以用)。
*****************************************************************
去華碩的網站下載華碩 laptop 的 bluetooth driver 安裝。
*****************************************************************
詳細步驟如下:
沒想到...沒想到...
Windows 7 雖然內建 bluetooth driver, 但是抓不到耳機而無法使用MW600。
上網查了一下,似乎還需要 bluetooth stack 什麼的軟體,這玩意兒Windows沒有內建,有名的 CSR / IVT / Widcomm (已被 Broadcom 併購) 軟體,都要錢或是你要使用他們家的晶片才能用。
本人推薦下面這個解決方案(32 bit / 64 bit 都可以用)。
*****************************************************************
去華碩的網站下載華碩 laptop 的 bluetooth driver 安裝。
*****************************************************************
詳細步驟如下:
2012年3月11日 星期日
支援 ZIP 密碼加密的 Java 函式庫 (ZIP password encryption for Java)
Java 原生不支援 ZIP 檔加密這件事已經很久了, 之前遇到ZIP加密需求都是用 Runtime.exec() 來處理.
最近又遇到了這個問題, 查了一下, 原來已經有個 Zip4j 的函式庫可以處理.
Zip4j 的功能如下:
使用方式參考他提供的範本即可, 簡單好用. 強力推薦.
最近又遇到了這個問題, 查了一下, 原來已經有個 Zip4j 的函式庫可以處理.
Zip4j 的功能如下:
- Create, Add, Extract, Update, Remove files from a Zip file
- Read/Write password protected Zip files
- Supports AES 128/256 Encryption
- Supports Standard Zip Encryption
- Supports Zip64 format
- Supports Store (No Compression) and Deflate compression method
- Create or extract files from Split Zip files (Ex: z01, z02,...zip)
- Supports Unicode file names
- Progress Monitor
使用方式參考他提供的範本即可, 簡單好用. 強力推薦.
2012年3月4日 星期日
VLC Media Player 字幕亂碼 解決之道
VLC media player 是個不錯的播放器, 但在 Windows 平台預設播放的中文字幕都是亂碼.
原因是字幕檔編碼跟字型不披配.
依據測試結果, 使用UTF-8編碼的字幕可以正常顯示(Big5編碼字幕要如何不亂碼,抱歉我試不出來), 說明如下:
1. 字幕檔編碼必須是 UTF-8
通常下載到的srt字幕檔都是 ascii (也就是 big5) 編碼格式.
請先轉成 UTF-8.
轉檔可以用Windows內建的筆記本完成, 方式如下:
筆記本開啟字幕檔後, 選擇"另存新檔". 編碼選擇"UTF-8"後 存檔即可.
(注意字幕檔會被存成結尾為.txt的檔案, 請手動更名)
2. VLC media player 的字幕/OSD設定中, 預設編碼請選擇 "Universal(UTF-8)"
3.字型請選擇支援 UTF-8 的字型, 一般常見的細明體、新細明體都不行的.
我測試的結果, 如圖中的 SimHei、SimSun, 或其它像Microsoft YaHei、KaiTi 都可以正常顯示.
原因是字幕檔編碼跟字型不披配.
依據測試結果, 使用UTF-8編碼的字幕可以正常顯示(Big5編碼字幕要如何不亂碼,抱歉我試不出來), 說明如下:
1. 字幕檔編碼必須是 UTF-8
通常下載到的srt字幕檔都是 ascii (也就是 big5) 編碼格式.
請先轉成 UTF-8.
轉檔可以用Windows內建的筆記本完成, 方式如下:
筆記本開啟字幕檔後, 選擇"另存新檔". 編碼選擇"UTF-8"後 存檔即可.
(注意字幕檔會被存成結尾為.txt的檔案, 請手動更名)
2. VLC media player 的字幕/OSD設定中, 預設編碼請選擇 "Universal(UTF-8)"
3.字型請選擇支援 UTF-8 的字型, 一般常見的細明體、新細明體都不行的.
我測試的結果, 如圖中的 SimHei、SimSun, 或其它像Microsoft YaHei、KaiTi 都可以正常顯示.
2012年1月6日 星期五
GTAC 2011: Closing Keynote - Secrets of World Class Software Organizations
世界級軟體公司的秘辛
演講者 Steve McConnell (經典書籍 Code Complete 的作者)
提到的公司有 Microsoft (1990年代的MS), Google (講google有專用Bus原因時超酸滴...XDDD), MDA (講者作為顧問奉命解決這公司專案預估的能力, 講者看完後說你們是我看過最好的公司之一, 到底有什麼問題 ? 這公司說他們"只有"93%的專案能依預期達成, 所以他們想找出剩下的7%專案是怎麼回事...現場的觀眾都大笑...), NASA, Boeing, Symantec 等.
很有趣的一場演講, 值得一聽.
2011年9月30日 星期五
apache tiles 2 學習筆記
Apache tiles是一個版型模組化的工具.
通常網頁至少會將版型切割為4個區塊, 例如下圖:
tiles 的定義檔如下:
而頁面變更的時候, 通常都只是更換整頁中的某一個區塊, 其它區塊不需要變化.
例如登入時, 只需要將右邊的區塊變更為登入頁.
登入頁 tiles 的設定如下, 只要更換 title 及 browse 二個變數的定義即可.
但考慮更複雜一點的情況呢?
例如電子商務中常見的, 點擊商品目錄.
此時商品目錄會展開, 且右邊會列出該目錄下的所有商品.
示意圖如下:
這時候就得在同一個 controller 裡處理商品及目錄的邏輯.
然後分別放入不同的 tiles 變數中.
等一下下...似乎有點奇怪, 目錄跟商品雖然有關係, 但畢竟各自有不同的處理邏輯.
放在同一個 controller 內處理似乎怪怪的...
如果再回頭看一下登入頁的例子, 目錄的頁面雖然不需變動, 但此時目錄頁應呈現第一層目錄結構.
第一層目錄結構的邏輯, 跟登入有什麼關係呢 ?
是否有辦法將各區塊的內容獨立處理, 讓彼此不相干的邏輯不要混在一起呢?
還好, tiles 提供了 View Preparer 來處理這種情況.
通常網頁至少會將版型切割為4個區塊, 例如下圖:
<tiles-definitions>
<definition name="indexTemplate" template="/WEB-INF/views/tiles/indexTemplate.jsp">
<put-attribute name="title" value="Welcome" />
<put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" />
<put-attribute name="category" value="/WEB-INF/views/tiles/category.jsp" />
<put-attribute name="browse" value="/WEB-INF/views/tiles/browse.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />
</definition>
</tiles-definitions>
<definition name="indexTemplate" template="/WEB-INF/views/tiles/indexTemplate.jsp">
<put-attribute name="title" value="Welcome" />
<put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" />
<put-attribute name="category" value="/WEB-INF/views/tiles/category.jsp" />
<put-attribute name="browse" value="/WEB-INF/views/tiles/browse.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />
</definition>
</tiles-definitions>
而頁面變更的時候, 通常都只是更換整頁中的某一個區塊, 其它區塊不需要變化.
例如登入時, 只需要將右邊的區塊變更為登入頁.
登入頁 tiles 的設定如下, 只要更換 title 及 browse 二個變數的定義即可.
<!-- Login Page -->
<definition name="login" extends="indexTemplate">
<put-attribute name="title" value="Login Page" />
<put-attribute name="browse" value="/WEB-INF/views/tiles/login.jsp" />
</definition>
<definition name="login" extends="indexTemplate">
<put-attribute name="title" value="Login Page" />
<put-attribute name="browse" value="/WEB-INF/views/tiles/login.jsp" />
</definition>
但考慮更複雜一點的情況呢?
例如電子商務中常見的, 點擊商品目錄.
此時商品目錄會展開, 且右邊會列出該目錄下的所有商品.
示意圖如下:
這時候就得在同一個 controller 裡處理商品及目錄的邏輯.
然後分別放入不同的 tiles 變數中.
等一下下...似乎有點奇怪, 目錄跟商品雖然有關係, 但畢竟各自有不同的處理邏輯.
放在同一個 controller 內處理似乎怪怪的...
如果再回頭看一下登入頁的例子, 目錄的頁面雖然不需變動, 但此時目錄頁應呈現第一層目錄結構.
第一層目錄結構的邏輯, 跟登入有什麼關係呢 ?
是否有辦法將各區塊的內容獨立處理, 讓彼此不相干的邏輯不要混在一起呢?
還好, tiles 提供了 View Preparer 來處理這種情況.
2011年9月28日 星期三
Spring MVC 的怪事一椿
今天遇到怪事一椿, 其實已經困擾我一陣子了, 只是今天才發現原因所在.
Spring MVC 的 @RequestMapping 註解可用來標示 Url, 例如:
如果同時有二個相同的註解, spring 會報錯, 訊息如下:
但有一個例外, 就是 / , 一般看到網站的 / 會參考 tomcat 的 web.xml中 welcome-file 的設定.
若是下面的寫法, spring 不會報錯, welcome-file也不會生效, 但會連到那個 URL 就不知道了...
Spring MVC 的 @RequestMapping 註解可用來標示 Url, 例如:
@RequestMapping(value={"index"}, method=RequestMethod.POST)
public ModelAndView index(HttpSession session) {
...
}
如果同時有二個相同的註解, spring 會報錯, 訊息如下:
2318 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Cannot map handler 'xxxxController' to URL path [/index]: There is already handler of type [class yyyyController$$EnhancerByCGLIB$$349da4f8] mapped.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:900)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:294)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:215)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
但有一個例外, 就是 / , 一般看到網站的 / 會參考 tomcat 的 web.xml中 welcome-file 的設定.
若是下面的寫法, spring 不會報錯, welcome-file也不會生效, 但會連到那個 URL 就不知道了...
@RequestMapping(value={"/", "index"})
public ModelAndView index(HttpSession session) {
...
}
@RequestMapping(value={"/", "login"})
public ModelAndView index(HttpSession session) {
...
}
@RequestMapping(value={"/", "login"})
public ModelAndView login(HttpSession session) {
...
}
訂閱:
文章 (Atom)







