JSP 的 if-else expression

找相對的括號是一件痛苦的事情……

< % if (Validation.CheckUser("kero~")) {%>
  < %= new java.util.Date() %>
< % } else { %>
  lala
< %}%>

囉唆一點用 JSTL 會不會清楚一點呢,我也不知道 XD

< % pageContext.setAttribute ("test_flag", Validation.CheckUser("kero~")); %>

<c :choose>
  </c><c :when test="${test_flag}">
    < %= new java.util.Date() %>
  </c>

  <c :otherwise>
    lala
  </c>

用 ffmpeg 把 DVD 轉成 H.264+AAC 的 mp4

昨天 lwhsujnlin 找到一個用 ffmpeg 壓成 H.264+AAC 的 script,下班之後我也加入了這場混戰當中。上次作 DVDRip 的時候,我是用 VirtualDub + DVD2AVI 來壓的,只是這次換成 ffmpeg 而已。

步驟還是和之前沒什麼不同。

  • ImgBurn 解出 DeCCS 後的 VOB 檔
  • VobBlanker 把不同章節(Cell)分開成不同的 Vob 檔
  • 接著你就可以用 ffmpeg -threads [thread_count] -deinterlace -i [input_file] -ac 2 -ab [audio_bitrate] -acodec libfaac -vcodec libx264 -b [video_bitrate] [output_file] 來產生 H.264+AAC 的 mp4 檔案了。

我想比較需要注意的地方是,以我手邊這片 Utada Hikaru Unplugged 而言就有兩種不同的音源,AC3 以及 LPCM,理論上 LPCM 的音質要好上很多。所以如果你想要選擇 LPCM,記得在壓縮的時候要用 -map 0.0:0.0 -map 0.1:0.1 這樣的參數告訴 ffmpeg 輸入與輸出 stream 的對應關係。

Duration: 00:05:50.7, start: 2010.984967, bitrate: 9176 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720×480 [PAR 8:9 DAR 4:3], 9800 kb/s, 29.97 tb(r)
Stream #0.1[0xa0]: Audio: pcm_s16be, 48000 Hz, stereo, 1536 kb/s
Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5:1, 448 kb/s

除此外 -ac 2 也是很重要的,有時候 ffmpeg 會幫你弄成 5.1 聲道的 AAC,就以 160k 的 bitrate 而言,每一個聲道能分到的資料量就少了,聽起來也就很糟糕。

壓出來的成果就會像下面這張圖,2001 年的宇多田ヒカル唱歌雖然還是不太穩,不過已經蠻有味道了。這場演唱會之前也有在 MTV 台重播,還蠻值得聽聽的。

Utada Hikaru Unplugged

至於之前找到的 script,在http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/,不過眼拙如我,實在看不出花上更多時間作 2-pass 能得到多好的品質……。不過 lwhsu 也提到,在他那邊有影音不同步的問題,不過是要多個 VOB 檔串起來才會遇到,我想之後再來測試看看吧(話是這樣說,應該也要過年後了吧)。

其實弄 ffmpeg 最大的好處,就是可以自己寫 script 一次轉很多啊……。

最後廣播一下新歌「HEART STATION」,這個版本畫質真的很好啊……

從 Nokia 6120 classic 談錯誤訊息

Nokia 6610 & Nokia 6120c

一切都從換了 Nokia 6120 classic 開始。

很早開始我就是 Nokia 的忠實愛用者,而這段時間的手機操作歷程以來,我只有一隻手機是 Motorola,其餘全都是 Nokia,換機的理由很簡單:「我不小心壓壞螢幕了」,這也不是廠商的問題,畢竟我是如此暴力使用手機的人,手機在汰換前總得承受個百來次的墜機、外加無數次背包雜物的擠壓,他就只得赤裸裸地以塑膠外殼承擔這一切悲慘,直等到心力交瘁(電池充不飽)以及顏面崩壞(螢幕爆裂)才能夠電磁波戰場前線中退了下來。趁著結訓假,我去中華電信續約,也從原本的 2G 門號升級成 3G,手機的選擇的確是個問題,但最終我還是克服心中敗家慾望的惡魔,那對於 6500 Slide 質感的嚮往,也順道忘卻當年在 Symbain S60 上開發遊戲悲痛的經歷,我還是選擇那經濟實惠的 Nokia 6120 Classic。

理論上,新手機總是特別完美的,外加 Nokia 還提供極度友善的 Nokia PC Suite 這套工具,他可以將我那歷經滄桑 Nokia 6610 內所有通訊錄、簡訊,一切私密而珍貴的條目無一不漏的轉換至新的手機上,那真是貼心至極啊。我想我是做了正確的選擇,正當我這樣想時,我才發現那所有匯入 SMS 訊息聯絡人寫的不是個國字,也不是個英文字,全部都是 +886 開頭的字串,我只得傻眼這 2007 年出廠的手機也會忘記查詢通訊錄……。

fine!也總會有人注意到這種問題,也該會有新的韌體出現來解決這種鳥事吧!Nokia 還是不會辜負大家的期待,他還有一套叫做 Nokia Software Updater 的好東西,只是他果不其然的又出包了……。

Nokia Software Updater error

啥?Connected Phone was not recognized?自家的軟體不認識自家的手機?這真是見鬼了!我把英文版的軟體換成中文版,檢查過所有的連接線、驅動程式,翻了各大討論區還有一些有的沒有的,直到我看到 Nokia Europe – News – Device software update 這個 link 我才明白。

Nokia 6120 Classic software removed – 8 January 2008

Due to a number of problems with updating the Nokia 6120 Classic, we have temporarily removed Nokia 6120 Classic support from the Nokia Software Updater service. Other Nokia products are not affected. We apologize for any inconvenience caused, and will endeavour to release the software again as soon as possible.

原來是因為種種更新的因素,所以暫時把 6120 classic 的更新拿掉,%@#%@#^@^@^。可是,你知道 Nokia Software Updater 顯示的訊息又是什麼呢?在我的例子上,我就花上更多的力氣在找出問題點上,某些程度而言,這也造成我對於 Nokia 品牌形象的一種幻滅。

回到主題上,不管是 Nokia Software Updater 的設計缺陷也好,或是維護伺服器更新資訊的工程師腦殘也好,就這個例子而言,對一個「正確使用」的使用者來說,他所關心的事物勢必是他在操作這些軟體時,他所獲得的資訊是否能夠「確實指出問題點」,讓使用者能夠適切的解決問題。回到設計的角度來看,某些錯誤訊息的產生,是否該由服務者端,適情況而有彈性的產生呢?換句話說,對於 client side 而言,他不應該只是從 server 端得到一個「well-known」的 error code,並在「本地端」從這個 error code 產生一個 error message。在這個例子上,反而應該是由 server 端明確的告訴 client 端

因為種種因素,所以我們把這個更新先拿掉,你可以參考 blah blah……

那麼,還有什麼錯誤訊息是我覺得有待改進的呢?我想比較多的狀況是源自使用者關閉 cookie 的使用上面,自從使用 FirefoxPermit Cookies 這個 addon 之後,有許多需要登入的頁面就變得不同了,常常打了密碼之後就沒啥反應,沒有錯誤也沒有登入,一切就這樣悄然無息。你可能會爭議的一點,關閉 Cookie 的使用是「合理」的嗎?我想這的確是,基於許多安全的考量,我們並沒有義務要開啟 JavaScript 與 Cookie 。

flickr 就做的很漂亮,他告訴你已經正確的 login,不過忘記開 cookie 啦,ooops!

flickr no cookie

但也有一些有趣的狀況發生,這發生在台灣花旗銀行上面。因為花旗卡看電影很便宜(心),所以我幾乎每個月都會搜尋一次「郵局帳號繳納花旗卡費」的方法,就如這個 link 所述,但只要我一沒開啟 cookie,卻又被告知我必須打開 cookie 的使用權。這著實令我訝異,為什麼「常見問題與解答」要使用 cookie 呢?

我想這篇文章不是爭論些什麼,而是提醒自己許多東西的設計上必須多為使用者著想一點,使用者可能會以怎麼樣的環境使用你的產品,會不會完全跳脫設計者的思維呢?當自己是 QA 時應該要怎麼去思考問題,以及身為 RD 時要怎麼避免問題的產生,並在設計的當中提供適合的錯誤資訊。有時候多做了一點功夫,受惠的不是別人,是那個總在 bug 苦海中浮沈的自己。