2013年2月20日 星期三

關於HTC的感想


網上一堆人在砲轟 Sony 很差怎樣, 我沒用過 Sony 所以我不敢講. 可是看影片的使用感覺很不賴. 所以我不知道其他人是在不滿什麼?

HTC? 為什麼不用 HTC? 我提供本人使用經驗給大家參考, 事實上我很鼓勵大家愛用國貨, 但是根據我使用3隻 HTC 手機的經驗來說, 我只能說我給過他太多機會, 但是 "我累了"!!!!

第一隻是我在HTC還是多普達的時代, 我買了多普達 828, Windows CE 介面, 剛開始用還滿順手的, 我也很高興的裝了PAPA Go 還買了一個籃牙介面的GPS, 就開始用他到處跑了! 心想我有一個手機就可以當導航, 真是酷弊了! 天曉得這是惡夢的開始! 我也沒有裝什麼程式, 但是他就是常常會導航到一半就當機了..... 我心裡想: "反正我就先開到路邊重開一下機就好"... 偏偏就是這種僥倖的心理上讓我發生了杯具, 有一次我開到台中的時候開到一半就關機再也開不起來了!!!!!! 天阿!!! 心裡非常緊張!!! 因為我不知道路回家啊阿阿阿阿阿!!!!!!!! 還好同行的友人有方向感, 沿著路標才救了我一命, 那時我就深深的體會到! 千萬不要讓手機做超出手機功能以外的事情! 從此之後就乖乖得去買導航.... 可是呢他也沒讓我安心多久, 常常講到後來就熱當, 有時候還開不起來! 我新一橫就去換了一隻 Nokia 照相手機. 跟自己說我再也不要買多普達了!

第二隻是Google Nexus One, 硬體是 HTC 做的. 說真的 Nexus One 真的還滿勇猛的, 更新了好幾次都十分順暢, 可是他有一個讓我十分困擾的問題, 觸碰永遠都不是點到我要得那個東西!!!!!! 這要怪 Google 嗎? 我不知道要怪誰, 但是當我的第三隻 HTC 有時也有同樣問題的時候, 我還是寧願相信 Google 的清白. 其實這也沒什麼大不了的, 反正他只是電話, 雖然聲音扁了一點. 但是還是可以講, 雖然常常點到我不要的東西, 或是有時候程式會掛再那裡, 嗯沒關係我重開一次就會正常了. 雖然相機很鳥, 嗯反正我有更強的相機, 吃飯拍照就不用再強求畫質了. 而且OLED的顏色真是銷魂阿!!! 之後因為一個機會又換了 Sensation XE 加潮牌耳機, 他就退位當 Wifi 熱點了, 可惜好景不長, 過沒多久 power 鍵就壞了, 再也開不起來了哭哭 (HTC 的 Cost down 控制做的真好! 差不多兩年就該壞了!)...

接下來就是目前我目前現役的手機, HTC Sensation XE. 我懷疑他是不是惡魔轉世要來整我的.... 一剛開始我用的還滿順的, 畫面順暢, 聲音還不錯沒有銅罐聲, 而且送的那組據說非正廠潮牌耳機, 老實說他的表現 run 開之後還滿對的起他的價位的. 老實說我剛用前半年的 fu 真的跟現在大家拿到蝴蝶機的感覺沒兩樣, 就是讚! 順! 聯絡人介面不習慣但是還可以接受! 高解析度看影片很爽! 打電動也很爽! HTC 終於做了個像樣的東西了! 支持國貨是有好報的!

可是過了一陣子後, 發現有時候就會發生按到不是我想要的東西上, 剛開始我以為是我手殘, 還很認真的去盯著我的手只是不是有按到那個物件上! 沒錯! 靈異的觸碰事件又回來了! 我看到我按下去的物鍵沒反應, 反而是在他正上方的那個物件居然反白然後被觸動了! 但是這嚇不倒我這個有經驗的人士, 我就用重開大法就又恢復正常了. 接下來, 我的鬧鐘不會響了!!!! 這也是重開就好了, 但是很不幸的我不知道這能不能成為各位看倌跟老闆解釋你遲到的理由 (別擔心, 我後來有用三個鬧鐘去解決這種狀況~)... 還有一些零零總總的小問題, 例如開程式按了總是要等個幾秒鐘才有反應, 音效跟畫面不同步之類的就不用提了.

真正惡夢的開始是第一次更新韌體後, 當我還在慶幸順利升級到 Android 4.0 的時候, 惡夢就開始了... 首先, 我的電話講到一半會重開, 這的確很神奇, 不過根據我用多普達的經驗這還好, 不過就熱當嘛! 再打一次就好, 反正不會常發生. 接下來更神奇的事情又發生了! 當我要接電話的時候電話自動斷話了!!!!!!!!!!!! 而且我每次接每次都斷話!!!! 各位看倌, 請問你老爸老媽老公老婆馬子姓子打電話來的時候每次都掛斷應該會造成家庭革命吧... 然後你又要跟他們解釋是電話搞的鬼, 你認為這種"鬼話"他們會信嗎? 還好這種窘境並不長, 過沒多久他們就更新了韌體(都已經這樣了我也只能相信新韌體了~), 也解決了這個問題. 雖然還是有小問題, 例如用相簿上傳照片到 facebook 會卡住, 觸碰靈異事件, 按了程式很久才有反應, 滑動有點遲鈍(永遠都滑不到我要的那一頁 =_=). 按 power 鍵不一定每次都可以叫醒螢幕(咦~), 這些跟電話不是電話比起來都無關輕重了.... 就是這種僥倖的心態才又造成另一個杯具....

就像往常一樣我多按幾下才叫起螢幕, 可是我有觀察到在螢幕下方有不明亮光產生, 然後螢幕很燙, 剛開始不以為意! 但是後來再也開不起來了! 應該說是開機有聲音但是就是沒畫面.... 天阿! 還好我是在保固內壞掉的! 螢幕燒了! 趕快火速送到神腦去修理, 還好不用錢, 不然他應該就是下一個被我丟出窗外的鳳梨....(Fire in the hole!!!!)...

後續我的音量鍵壞了, 小問題一堆! 這我都覺得還可以接受. 其實這台也不是沒有好處, 照相畫質雖然還是不好, 但是有 EV 控制跟細部的像機調整就讓人覺得還滿甘心的!

經過了這麼多事件之後, 我只有幾點結論想跟大家分享!

1. 什麼都是假的! 只有保固是真的!
2. 順不順好不好用請用半年以上再下結論!
3. 千萬別相信 HTC 的韌體更新! 等別人當白老鼠確認沒災情再更新!
4. 我 TMD 下一台絕對不會買 HTC!

2010年9月30日 星期四

Qt 經驗談

大概 3~4 年前當我開始用 Qt 的時候, 那時候 Qt 4 才剛剛出來沒幾年. 之前的版本我沒用過, 但是那時 Qt 4 看起來已經算是十分的完備, 甚至我還覺得如果只把它看成是一個 UI Framework 來說已經算是撈過界了. 當然 Qt 的野心不僅於此, 許多常見的功能包括 Thread classes, Networking, Web browser engine, XML, SQL, Storage Classes, OpenGL 等等的東西, 畢竟它可是立志要當 C++ 中的 Java Framework Solution 呢. 不過當時我們只是大部分用他來作 UI 的顯示以及設定儲存上的處理罷了. (那時候 Qt 超貴的一個平台的單一 License 要10幾萬, 也沒有啥 LGPL 版跟 Qt Creator, 跟 Visual Studio 的結合也是要錢的版本才有, 整個買下來的費用真的不少. 總歸一句話, 老闆有錢真好.....)

不過當時 Qt 讓我覺得很驚艷的部分則是他的 UI Framework 可以把 View 跟 Model 的處理切得很開, 這一點在當時已經夠讓我驚訝了 (大概是我對其他的 Framework 不熟). 美工的工作僅限於把元件上的所需的圖畫好並使用 Qt 提供的工具把圖貼好 (這部分不難, 也不需要太多的時間作訓練), 然後再將改好的圖跟設定檔給我們之後跟著程式一起包出去就完成了. 當然最近 Qt 又搞了一個 QML 的 UI Script. 大概是想要把元件的屬性進一步開放給 UI 設計者可以有更多的發揮空間吧. 其實當時在早期的 Qt 版本之中就已經有提供類似的功能可以作調整, 不過是得寫在程式裡改的, 要開放出來還得費一番功夫去設計, 可以調整的東西也很有限. 但是現在很多 UI 的 Framework 其實都有遵循類似的設計, 包括最夯的 Android 也是如此. 也許 Qt 不是第一家, 但是習慣了這個模式以後很多類似這樣設計的 Framework 會讓你工作起來更得心應手.

Qt 大部分的 UI 常用原件都是用 Signal 跟 Slot 機制去實作的, 這方面 Qt  的官方文件十分清楚. 這個觀念很方便, 也可以很輕易的把 UI 的呼叫跟程式主體切開跟置換, 也沒有被介面綁標的困擾(當然還是得適可而止別亂用, 飛來飛去的 Signal 跟 Slot 有時候 Debug 起來是要人命的). 當然你也可以去覆寫 Qt 原有的事件去達到類似的目的 (有時候不得不這樣作), 但是通常非必要我不建議這麼作, 除非你可以確定你的程式沒有使用Thread. 因為在某些作業系統下如果是非主要的 Thread 去更動 UI 元件內的資料會造成程式當機 (也許這問題已經不復存在, 但是這在早期不算是新鮮事), 而貼心的 Qt 的 Signal 跟 Slot 機制已經幫你處理掉這一塊的問題了.

還有 Qt 真正的完整 View / Model UI 原件組 (List/Table View Model 之類的) 昰一定得具備的, 畢竟這是 Java 2 幾百年前就有的東西. 概念上大同小異, 只是實現的方法跟細節不同. 這方面我玩得不是很透徹, 但是我覺得似乎 Java Swing 在 Table Cell 客製化內容的顯示的實現上, 像是類似貼圖貼星星等等的東西, 似乎比 Qt 要來的簡單多了. Qt 要去做這些事情, 要搞懂的概念實在是不少.

對於多國語言的支援以及轉換, 其實 Qt 在當時做得很不錯了, 不過這需要設計師一點點小小的幫忙. 在 Qt 程式中常常會見到 tr() 的巨集指令包著字串, 很多初學者會覺得很奇怪, 為什麼要這麼做? 其實這個巨集的作用是為了做多國語言轉換的時候用的. 事先用這個巨集布局好需要翻譯的字串, 之後可以透過工具產生一份份的翻譯檔, 再把對照的字串填入到翻譯檔即可. Qt 會依照作業系統的語系自動轉換到對應的語系, 它也提供了 API 可以切換.

當然 Qt 還有很多很好用的功能, 但是並不是每個東西都這麼好用. 例如如果有效能考量, 用 Qt 的 container class 不如用 std 得還來的快. 因為各家的 編譯器大概已經把這些東西的最佳化都做得很好了. 還有善用演算法跟小技巧去加速一些繁重的工作而不完全依賴它本身提供的模組也是比較健康的思維. 

2010年9月29日 星期三

Qt SDK (Qt 4.7 + Creator 2.01) + Windows 7 SDK 開發環境安裝

雖然使用 Windows 的 Native Library 跟編譯器多少有點違背 Qt 跨平台的本意, 但是有時候要用到某些功能就不得不用. 所以就只得屈就連編譯器都用 Windows 的.

安裝環境: Windows XP SP3
因為在我的筆電下 Windows 7 環境搞不定 Qt Creator 以及 CDB 合體, 所以就放棄了.

我的做法是直接使用 Windows 7.0 SDK + .Net Framework 3.5 SP1 的版本做基礎加以整合, 因為這個版本附的 Visual C++ 2008是 Standard 版的. Qt 4.7 + VC++ 2008 做法我是參考 Heresy 的做法, 在此就不再詳述. 不過有些部分要補充說明, 那就是 Qt 4.7 已經把 Heresy 講的StructureTransitionTable.h 的程式碼做修正, 所以不用再改程式了, 但是 Webkit 以及 Script 模組連結錯誤的問題還是存在. 還有過程中一定要把防毒軟體先關掉, 因為它有可能造成編譯上的干擾讓你的安裝過程失敗.

安裝步驟如下:

  1. 下載 Windows 7.0 SDK ISO
  2. 安裝 Windows 7.0 SDK
    Debugger 跟 VC++ 編譯器一定得安裝 .Net Framework 相關的選項我都是拿掉不安裝的.
  3. 下載 Qt SDK (OpenSource版)
  4. 安裝 Qt SDK, 安裝過程中我是採用自訂並把 MinGW 拿掉不安裝.
  5. 設定環境變數
    在 [控制台]->[系統]->[進階]->[環境變數] 下新增以下變數
    QTDIR => [你安裝的 Qt DSK路徑]\qt
    PATH => %QTDIR%\bin;%PATH%
    QTMAKESPEC => win32-msvc2008
  6. 參照 Heresy 的安裝設定去做, 不過我並沒有開啟 -fast 選項
    這部分是個人喜好, 不過不開的話建議一定要開 -MP, 不然效能不是很勇猛的電腦可能睡一覺起來還在跑 (我的 i3 370 就是這樣 @@)
  7. 設定 Qt Creator 2.01
    1. 啟動主選單的 [Tools]->[Options] 按下對話框左手邊的Qt4, 如果路徑設定無誤, 應該會看到 auto-detected 的 Qt in PATH 是有找到 Qt 4.7 的. 而且 toolchain 是出現 Microsoft Visual C++ Compiler 9.0 (x86) 的選項
    2. 接下來請按下左手邊的 Debugger 並在上方選取 CDB 頁面, 請將 CDB 旁邊的 checkbox 打勾
    3. 在下方的 Path 旁邊有個 Autodetect 按鈕, 按下之後 Qt 會自動找你已經安裝的 CDB
    4. 按下下方的 Ok 鍵, 這樣算設定完成
Qt Creator 說穿了只是提供一個基本的環境可以方便大家編輯, 編譯, 以及除錯. Qt 的基礎例如像 qmake profile 還是要靠自己寫 (幸好 Qt 在這方面算是做的很好, profile 語法已經算是簡單了). qmake 對於各大編譯器的 makefile 以及 project 檔的支援做的很好. 沒幾行指令就可以產生對應各家開發工具用的專案檔案. 之後的細節有機會再詳談.

新開張

最近空閒時間比較多, 所以突然想要寫一些跟之前作過的東西有關的資料. 一方面是備忘, 另一方面希望自己的經驗可以提供其他人一些參考.

目前我秉持一個原則, 也是對自己的期許. 希望我網站的內容都是自己撰寫的部分. 如果有引用的部分, 我會註明出處. 老實講我對於一字不漏的張貼其實有點感冒, 因為當自己在找資料的時候常常會遇到很多網誌的內容完全一字不漏的張貼過來, 但是這些東西都無法解決我自己本身的問題, 卻白白浪費了搜尋的資源. 當然可能張貼的人本身也是處於想要分享的立場出發, 但是我覺得張貼未經證實的消息就跟拔獅子的鬃毛的傳說是一樣的, 不但對於知識傳遞本身是無益的, 還反而因為誤導而有害於別人的學習.

當然, 我的方法不一定是最好的, 但是在我的情況下是能動的. 如果有意見還請大家批評指教, 這樣大家也才有進步的空間.