Ada Hsu 的胡思亂想

2010年2月7日星期日

ONE PIECE: STRONG WORLD

上週到國際書展時才發現原來 ONE PIECE 電影版 STRONG WORLD 強者天下 已經上映後(剛好上映的隔天去書展的),就幻想著一定要趁過年前先看一看。今天是過年前最後一個假日,我也很努力的在京站威秀售票口前排了將近一小時的隊。不知道為什麼 場次的安排 似乎不是連續的,還好大家顯然都跑去看 MONGA 而沒來和我搶 ONE PIECE 的座次。雖然尚未滿座,但是這個可容納百餘人的小場地其實在輪到我購票時也沒剩幾個位置可以選了,此刻倒是有一種為什麼早上不先多花 20 元手續費直接網路購票的悔恨... (泣)

就劇情上來講可能要扯到 OnePiece 第 0 卷,另外在動畫版部份魯夫於到達海底監獄『推進城』時也有加入一段金獅子的故事(426話開始)。總而言之,這是一場世界政府的危機但最後世界政府啥都不能做的故事。至於為什麼世界政府啥都不能做的理由還請進電影院瞧瞧!

另外在各橋段中總是一直穿插著各式各樣的笑點,不過印象最深刻的應該是布魯克被食肉蟻小看時說的那句『我只是局部型肥胖』吧!這真是中廣型阿宅最需要的一句救世密令啊... XD

  • 沒想到 WIKI 上已經有人整理了 電影相關資料 了!
  • 除了娜美的裸露演出外,羅賓的馬尾 + 眼鏡娘造型倒也是讓人印象深刻,雖然她最後沒啥表現機會!
    羅賓的新造型
  • MONGA 發音要正確,不然會變成 MANGA
  • 對了,這是 MONGO 預告片!
  • 如果有人想請客的話,我還很願意再進電影院看一遍.... XD
  • 啊對了!個人覺得本劇場版應該歸為輔導級,因為裡面抽煙的人太多了卻沒有打馬賽克...

2010年1月15日星期五

把 SFTP 關起來 (CHROOTED)

前言

為了提供少量的檔案共享但又不願意特地去設定 FTP 服務的話,通常第一個想到的會是附屬在 SSH 服務下的 SFTP 傳輸模式,事實上 SFTP 這個服務雖然因為加密的關係會導致傳輸時間略長,但卻一直是格揆我作為檔案傳輸的唯一方式。但這方式雖方便卻有個大問題:登入的使用者可以看到所有的檔案目錄甚至直接下載檔案內容。這在多人使用的環境下顯然會有資安上面的困擾,有沒有辦法把 SFTP 服務關在某個指定的目錄下呢?

格揆經由 Google 大神的協助並多方測試後終於實作出可行方案,就... 再貢獻回給大神吧... XD

設定步驟

※ 本文以 OpenSSH 5.2_p1-r3 為設定環境!

  1. 選定封鎖目錄:如果對像是單一個人時即為該用戶登入 SFTP 時的根目錄;如果對像是一個群組時則該目錄為這群使用者目錄的根目錄。
  2. 在 /etc/ssh/sshd_config 中啟用 sftp subsystem:特別注意要啟用的是 internal-sftp 這個 Subsystem。
    # override default of no subsystems
    #Subsystem      sftp    /usr/lib64/misc/sftp-server               # 系統中原來的設定
    Subsystem       sftp    internal-sftp                                       # 改用 internal-sftp 
    
  3. 一樣在 sshd_config 中指定需要被關起來的使用者資訊及要關到什麼地方去,請在前述修改處之後加上以下設定:
    Match User ada                                 # 要被關起來的使用者,如果是群組的話則將 User 改為 Group 再接群組名稱
                                                              # 例如: Match Group rootedSFTP
    ChrootDirectory /chroot                    # 要關在什麼地方,如果對像是個群組且群組內的每個人有個別目錄設定時,
                                                              # 可以加上 PATTERNS (man ssh_config) 做區隔,如 /chroot/%u ,
                                                              # /chroot 為這群使用者目錄的根目錄。
    ForceCommand internal-sftp            # 一樣要使用 internal-sftp 這個 Subsystem
    
  4. 設定 Chroot 目錄權限:錯誤的目錄權限設定會導致在 log 中出現 "fatal: bad ownership or modes for chroot directory XXXXXX" 的訊息。根據 openssh 5.1 chrootdirectory permissions issue 這篇文章的資訊顯示,目錄的權限設定有兩個要點:
    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是 root
    • 由 ChrootDirectory 指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限
  5. 重新載入 sshd 後即可透過 FileZilla 等支援 SFTP 的軟體測試有無被關起來了...

2009年12月15日星期二

Gentoo Linux 與 Windows 7 安裝心得

這幾天一直在安裝 Windows 7 和 Gentoo Linux 10.1 之間奮戰,浪費了不少時間踩了不少的地雷,恰好可作為部落格的文章以為紀念... XD

Dual Boot

首先因為 Windows 7 在安裝時會在硬碟中產生兩個 Primary Partition ,這讓我在評估是否雙系統共存時有了很慎重的考慮,並為此選擇在 VirtualBox 3.1 中先行試驗確認。不過,經過多次測試總無法經 Grub 對 Windows 7 開機,在最後關頭時決定直接上機測試成功時,才驚覺整整浪費了 2 個工作天在無任何產值的測試作業中... (嘆)

另外對於 Dual Boot 這件事,Gentoo 其實沒有先 Windows 再 Linux 之類的條款,因為它不會幫你建立預設的開機環境設定。Grub 裝在 MBR 也無所謂,反正 Windows 7 開機是從第一個 Partition 中的特定檔案啟動的。最後我還放棄了 SWAP 分割區的設置,將 4 個 Primary Partition 平均分給兩個作業系統,Gentoo 就一個 / partition 及一個 /home partition 。

發行套件的選擇

基本上這是因為安裝過程不太順利下,為什麼還選擇 Gentoo 的原因說明

Gentoo 之所以在某些群體中受到歡迎經常受到誤解,認為這些愛用者是因為迷信自行編譯所帶來的無上效能。其實在目前的中、高階 CPU 及便宜的記憶體市場下,自行編譯所帶來的效能改善情形非常有限,很多人應該也不是那麼心甘情願的願意浪費 1 ~ 2 天的時間進行系統編譯的工作(尤其 Windows 7 安裝一遍只要 20 分鐘),只因為目前還沒有看到更有彈性的軟體套件管理機制,導致短時間內無法轉投入另套發行套件。像格揆本人我就一直想要知道 Arch Linux 究竟有沒有類似 Portage USE 選擇的機制,只是說從所有的範例中似乎嗅不出類似機制的可能性,我也只好繼續使用 Gentoo 系統了!

基楚系統建置

在進行 Gentoo 基礎系統建置時切記不要過早投入 Portage Overlay 的設定,雜亂的套件相依設定是造成系統編不出來的主要原因,尤其在桌面管理系統上影鄉尤為深遠。

另外為了簡化系統的複雜度,一開始也不宜過早加入 ACCEPT_KEYWORDS 的設定,儘量先以系統預設的、穩定的套件版本為基礎完成配置後再加以強化為宜。

2009年11月16日星期一

ExtJS 筆記 - EXTJS 的事件處理函式

jQuery 不同,ExtJS 的事件處理函式略顯複雜了些!原因在於 jQuery 的事件綁定機制永遠只作用於 jQuery 物件,但 ExtJS 的事件綁定機制卻必須先確定事件綁定對象的種類。

在 ExtJS 中有兩種類型的 Ext 物件可以進行事件綁定,一種是 Ext.Component,另一種是 Ext.Element。雖然它們都會對應到頁面上的 HTML Element ,但實際上來看 Ext.Component 算是以 Ext.Element 為基礎進行擴充的衍生物件,常因為特別需要而自行提供許多自定的事件,例如 Ext.form.Checkbox 這個 Ext.Component 物件會額外提供 check 事件,當然你可以把這個 check 事件當成原本 click 事件的再包裝。

所以說只要弄清楚事件綁定的對象後也就能夠確定所使用的事件處理函式的參數型態,對 Ext.Element 而言它的事件處理函式參數格式為:
/* 此的處 element 是一個 HTML Element ,也就是原本的 HTML DOM 物件 */
function eventHandler( event, element, object ) { }
但若是 Ext.Component 的話它的事件處理函式則為:
function eventHandler( component [, value/state ] ) { }
其實寫 ExtJS 應用系統很容易遇到事件處理函式未能如預期反應的情況,這是因為搞錯了事件作用的對象以及事件處理函式的參數匹配不正確所導致,要不是因為此次的系統開發時用到了 Ext.form.Checkbox 這個元素,也許格揆我還沒發現原來 ExtJS 的事件模型有分成兩種情形,而大致搜尋了一下也沒有啥文章特別提到這個明明就在 API 文件中,但工程師顯然不會特別注意到的情形。

但我們該怎麼取得 Ext.ComponentExt.Element 物件呢?只要記住除了 Ext.getCmp() 外,其他的 DomQuery 函式都只會傳回 Ext.ElementExt.CompositeElement(可把它當成多個 Ext.Element 物件的集合) 物件。

以下的範例可看出 Ext.ComponentExt.Element/Ext.CompositeElement 在注冊事件處理函式時的差異:
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="http://www.extjs.com/deploy/dev/resources/css/ext-all.css" />
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript" src="http://www.extjs.com/deploy/dev/adapter/jquery/ext-jquery-adapter.js"></script>
        <script type="text/javascript" src="http://www.extjs.com/deploy/dev/ext-all.js"></script>
        <script text="text/javascript">
            function init() {
                var viewport = new Ext.Viewport({
                    layout: 'form'
                    ,defaults: {
                        xtype: 'checkbox'
                        ,labelWidth: 70
                        ,labelAlign: 'right'
                    }
                    ,items: [
                        {
                            fieldLabel: '選項一'
                            ,id: 'chbox1'
                        }
                        ,{
                            fieldLabel: '選項二'
                            ,id: 'chbox2'
                        }
                        ,{
                            fieldLabel: '按鈕一'
                            ,id: 'btn1'
                            ,xtype: 'button'
                            ,text: '按鈕一'
                        }
                    ]
                });
  
                // 對 Ext.Component:chbox1 物件注冊 check 事件處理函式
                Ext.getCmp( 'chbox1' ).on( 'check', function ( chbox, checked ) {
                    alert( chbox.getId() + ' is ' + checked );
                });
  
                // 對所有的 Ext.CompositeElement:Checkbox 物件注冊 click 事件處理函式
                // 實際上有兩個物件被注冊了事件處理函式
                // 如果想在 Ext.Element 物件上綁定 check 事件的話,它是不會生效也不會有錯誤的喔!
                Ext.select( 'input[type=checkbox]' ).on( 'click', function( evt, el ) {
                    Ext.Msg.alert( 'Event Tester', el.id + ' is ' + el.checked );
                });

                // 對 Ext.Component:btn1 物件注冊 click 事件處理函式  
                Ext.getCmp( 'btn1' ).on( 'click', function( button ) {
                    alert( button.getId() + ' clicked' );
                });
  
                // 對所有的 Ext.CompositeElement:button 物件注冊 click 事件處理函式
                // 實際上有一個物件被注冊了事件處理函式
                Ext.select( 'button' ).on( 'click', function( evt, el ) {
                    Ext.Msg.alert( 'Event Tester', el.id );
                });
 
                return viewport;
            }
     
            $( document ).ready( init );
        </script>
    </head>
    <body>
    
    </body>
</html>

參考資訊:

2009年10月26日星期一

閃擊點行動 - 龍之堀起 ( Operation Flashpoint - Dragon Rising )

閃擊點行動 - 龍之堀起 ( Operation Flashpoint - Dragon Rising ) 是 CodeMasters 公司前陣子新堆出的遊戲,同時支援 PC / XBox 360 / PS3 三平台。

總括而言,這是一套除了畫面遠勝 2001 年首次推出的 閃擊點行動 - 冷戰危機 外其他部份都完敗的失敗作,甚至嚴格而言本遊戲也不算是 冷戰危機 的續作,至少從遊戲命名中是完全看不到 2 這個字眼的。

簡單條列個人覺得這套遊戲和 冷戰危機 相比失敗的地方:
  1. 從班戰鬥縮水成小隊戰鬥:沒錯,這是個精英小隊 ,但是一次 12 個人可以有更多的戰術配置。沒記錯的話在 冷戰危機 中有一個關卡還是一整個排去打敵人的設定呢!這項改變大致上可以猜到是因為 PS3 / XBox 360 操控手把所做的限制。
  2. 戰術指令缺乏細節設定:記得 冷戰危機 中可以命令隊友去撿拾槍枝和補充彈藥,也可以把整個班透過撿拾殂擊槍的命令而變成殂擊班。本遊戲中似乎電腦隊員都沒有缺彈危機?把戰術指令大幅刪減的原因大概也是為了配合遊戲機的操控吧!對了,我曾對隊員下達接敵指定對象的命令,但是... 他們都不鳥我... (怒)
  3. 可遠觀而不可褻玩焉的載具:在 冷戰危機 及其資料片中有一大堆的載具(飛機、輪型車輛、民車、以及裝甲車等)可以操作,但到了 龍之堀起 時真的開過的只剩下悍馬車和最後關卡的直昇機而以。不過看電玩快打介紹的影片中有戰鬥直升機可以操作,但我的軍旅生涯回憶錄中只有被戰鬥直升機追殺的慘烈而以.... (嘆)
  4. 過關條件的限縮: 冷戰危機 最為人所贊頌的是他無特定規則的過關選擇,在 冷戰危機 中除了從外圍一路殺進敵營外,還可以先溜進敵營偷一台裝甲車或雌鹿攻擊機後再殺出來,這是 龍之堀起 總是走進去敵營又一路打出來的固定模式難以超越的。
  5. 隊員養成:在 冷戰危機 是可以透過經驗值累積以提昇班兵的能力的,但是 龍之堀起 中每次帶的隊員都一定不同,隊員陣亡也只需等到檢查點後就會重新復活,當然也就少了經驗值作為隊員養成的依據了。
  6. 關卡的變化性不足:在 冷戰危機 中有防禦、有攻擊、有步行機動、有車輛接送、也有裝甲車專屬關卡,還有直昇機攻擊,而 龍之堀起 則是突擊後防禦為主。其中雖然有一關是監控解放軍將領 - 韓將軍逛大街的特殊關卡,但最後用 JDAM 轟掉房子的設定其實覺得挺空虛的... (默)
  7. 關卡過短,故事性不足:記得 冷戰危機 約有 20 關... 吧,龍之堀起 只有 10 關的樣子,搞的玩家還沒融入故事情節時遊戲就結束了.... -.-
認為 龍之堀起 不如原本 冷戰危機 的原因大致如上,如果不是 CodeMasters 和原開發 冷戰危機 的波西米亞工作室鬧僵的話,也許真正的 Operation Flashpoint 2 早就推出了。

2009年10月19日星期一

S60 手機平台與 Google Service

老實說,從 因故 購入 Nokia 5800XM 這半年以來,我一直沒有一次就完成 Nokia 智慧型手機(S60 作業系統)在商務需求上的設定。今次經由一再的重試與手機硬格後,似乎有了一點點可以依據的脈胳可循。

商務需求包括那些呢?我想至少會包含通訊錄、行事曆、還有 EMAIL 三者間與原作業平台的相互同步,除了一般企業內部常見的 Microsoft Exchange Server 外,一般個人所能接觸到可同時提供這些服務的公司顯然以 Google 最廣為人知(其實 Nokia 自己也有提供一個整合性服務叫 Ovi ,除包含前述服務還有些其他的)。本文的主要目標是設法將 Google 上的資料與 S60v3/v5 手機相結合。

說到 Google 採用 Microsoft 的 ActiveSync 技術協定的目的就是希望能一次滿足前述三個願望,可惜事與願違,Google 目前在 S60 平台上確實還無法達成 EMAIL 同步,因此整個作業要分成兩部份來進行:通訊錄與行事曆可以合併處理、至於 EMAIL 則需另尋他法。

Push EMAIL

說 EMAIL 要另尋他法其實也不是說需要多複雜的設定,只要透過第三方服務即可達成,這服務就是 Nokia Messaging

首先,把手機扔一邊吧!如果你一心想找 Nokia Messaging 的用戶端軟體自行安裝的話,保證事倍功不成。

如果是第一次使用 Nokia Messaging 服務時必須先建立一個 Nokia Messaging 帳號,但這帳號並不需重新選擇 ID/PWD ,實際要做的只是選擇一個需要被 Push 到手機的現有 EMAIL 帳號即可。Nokia Messaging 支援 POP3/IMAP 郵件協定,也支援包括 Yahoo! Mail、Google Mail、Windows Live Hotmail、Ovi Mail 以及郵件代管類型的 Google Apps、Yahoo! Small Business 等郵件資源,總而言之挑一個出來當主信箱帳號即可。另外 Nokia Messaging 可以支援最多 10 個郵件的推播服務,可以依需要自行增減信箱個數。

Nokia Messaging 主要畫面當然如果不放心把 EMAIL 交給 Nokia 的話,可以考慮只設定那些非日常使用的次要信箱即可。一般來說次要信箱通常很少主動去開啟的,讓 Nokia Messaging 協助追蹤這些信箱似乎也不錯!

決定好主要信箱後即可 Sign Up 進行申請程序。在申請的過程中會發送簡訊到手機上以便開始下載及安裝 Nokia Messaging 用戶端軟體。這程序很重要,整個啟用 Nokia Messaging 用戶端軟體的相關設定都包含在這則簡訊中,當你讀取這則簡訊時會觸發軟體下載、安裝然後手機自動重開機的流程。這過程需要一點時間,也許可以趁這時間回到 Nokia Messaging 官網中把需要 Push 的各郵件信箱設一設。

當手機重新啟動後有機會看到一個標為『簡訊佈建』的畫面,這時手機會進行一些內部設定,完成後即可看到 Nokia Messaging 手機軟體的登入畫面(請參考 Nokia的Push mail--Nokia Messaging 一文中的第二張圖),輸入前述申請作業中設定的主信箱帳號的密碼即可登入。

Nokia的Push mail--Nokia Messaging 一文是以 E71 做說明,如果是 S60v5 平台的話則主要畫面如右圖所示,可以選擇要看那個信箱,也可以另外新增其他信箱。

Reinstall Nokia Messaging另外,如果因為某些因素必須重新安裝 Nokia Messaging 手機端軟體時也請切記一定要從 Nokia Messaging 網站上進行,只需在登入後點選頁面右方的 Install now 即可。如果是自行由手機內安裝先前下載的 .sisx 檔的話是不會與 Nokia Messaging 服務有任何關連的,這個時候對 Nokia Messaging 手機軟體的各項操作都會被寫進手機訊息中心內的電子郵件項目中,在 Nokia 5800XM 上會發生一件很糟糕的情形 - 這些 EMAIL 帳號設定無法刪除...

以上是個人選用為 S60 手機與 EMail 整合的一種方式,目前 Nokia Messaging 服務仍然免費但後續可能會改為收費服務,此點請特別注意。(別擔心,Google Sync 屆時就可以支援 Symbian 平台上的 EMAIL 同步了.... 我猜的... )

※ 2010-01-17: 目前 Nokia Messaging 10.1 版用戶端程序已經可以自行重新建立相關設定了!
  1. 在 Nokia Messaging 10.1 版直接點選電子郵件設定時會開啟新的(大概吧)設定頁面,按下開始後即可進行設定。
  2. 接下來這頁是選擇郵件種類,不過格揆懷疑這是為了方便給新使用者所提供的選項。像格揆這種早就有申請 Nokia Messaging 的使用者可以直接選其他即可。
  3. 然後分別輸入原先 Nokia Messaging 服務中指定的郵件帳號及密碼後即進行驗證。
  4. 如果在進行帳號匹配時未插入 SIM 卡的話,Nokia Messaging 會要求手動輸入電話號碼以便和原登錄的資料進行驗證,是否有實際用途則不確定(誰沒事常換號呢?)
  5. 一旦帳號密碼匹配成功後即可看到 歡迎再次使用 的訊息,同時也告知還要再輸入一次 Nokia 訊息密碼。
  6. Nokia 訊息密碼就是 Nokia Messaging 服務的密碼,不太瞭解為什麼還要再輸入一次?輸入後即可看到熟悉的 Nokia Messaging 畫面,原先的設定也會同時自動下載。

※其實我是想反正 Nokia 開始收費時我就跳到 Android 去了,沒差啦!

行事曆、通訊錄同步

再來就是如何同步行事曆和通訊錄,大致上請先參考 Google Sync 的說明。至於格揆則需要花點時間擷圖... 擷圖的目標放在如何同步 Google Apps 上的個人行事曆與通訊錄。請大家等個一、兩天吧... :p
先期準備 - Google Apps 管理設定
如果需要同步的通訊錄、行事曆來源是 Google Apps 服務,那麼必須先確定 Google Apps Manager 已同意開啟手機行動 Google Sync 支援,詳見 Enable Google Sync via ActiveSync 內說明。
更新 Mail for Exchange
Mail for Exchange 必須要 2.0(9).158 以上版本才能支援,Symbian 手機可以透過內建的更新機制進行軟體更新,在更新的過程中會有警告訊息提醒一旦使用 Mail for Exchange 後就不可以再使用其他同步軟體。
Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定

雖然也可以從 Mail for Exchange 官網自行下載手機端程式,不過似乎還是比透過手機更新的版本來的舊。
Mail for Exchange 同步設定
執行 Mail for Exchange(以下簡稱 MfE)後即可進行同步設定,併隨 MfE 安裝的公司目錄工具是用來查詢 Microsoft Exchange Server 上的通訊錄用的,因為 Google Sync 使用 ActiveSync 協定進行同步作業,所以日後可以使用這個工具查詢 Google 通訊錄上的內容。
Mail for Exchange 安裝/設定

第一次執行 MfE 時會因為沒有任何同步設定而詢問是否建立操作模式,反正只能選擇不然就沒得用。
Mail for Exchange 安裝/設定

首先填入 EMAIL 基本資訊,不管是 GMail 還是 Google Apps 都請在電子郵件位址使者用名稱部份填入完整的 EMAIL 信箱全名。至於網域部份則因為軟體限制直接填入 google 即可,存取點則通常設為網際網路,如果有申請 mCool 49 之類的 WAP 上網吃到飽的則可以選擇 WAP 。
Mail for Exchange 安裝/設定

輸入完 EMAIL 基本資訊無誤後即可按下確定鈕,MfE 會嘗試擷取郵件伺服器的設定。如果是在一般企業內部的話應該可以自動捉取到 Exchange Server 的相關資訊,但 Google 的手機服務似乎是透過另一個獨立主機做橋接的,因此 MfE 會出現擷取失敗的訊息並要求手動輸入 Exchange Server 的相關資訊。
Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定

在 MfE 中總共有八個設定頁籤分別對應到連線認證同步排程行事曆工作通訊錄郵件不在辦公室,不過一開始第八個設定頁是看不到的。
2009/10/20

連線設定:主要就是指定 Exchange 伺服器的名稱,請填入 m.google.com 即可。
Mail for Exchange 安裝/設定

認證:先前輸入的完整 EMAIL 全名會自動帶入這個設定頁中,完全不用更改。
2009/10/20

同步排程:此頁籤用於設定同步的頻率,預設為尖峰時段永遠連線,離峰時段則每 30 分鐘連線同步乙次。基本上因為電信訊號並不穩定且人員也不一定都在 WiFi 訊號範圍內之故,把同步頻率改為定時更新應該比較適合。
Mail for Exchange 安裝/設定

行事曆:Google Sync 目前可以支援行事曆同步,原則上雖然可以保留手機上即有的行事曆內容,但這麼做很容易把行事曆搞亂(N82 時代同時同步 Outlook 及 Google Calendar 的心得,每重建乙次手機設定就會多一倍的行事曆項目)。所以這裡通常會選擇先清空手機上的行事曆資料。
Mail for Exchange 安裝/設定

工作:待辦事目前尚不支援同步作業,請選擇不同步。
Mail for Exchange 安裝/設定

通訊錄:一樣建議先刪除手機上的內容後再進行同步。如果手機上的資料完全沒有和 GMail / Google Apps 上重覆的話可以考慮保留以便傳回 GMail / Google Apps 上。
Mail for Exchange 安裝/設定

郵件:目前 Google 仍不提供在 Symbian 支援郵件同步,而且前面不是已經使用 Nokia Messaging 提供 Push Mail 服務了嗎?
Mail for Exchange 安裝/設定

不在辦公室:這必須先能連上 Exchange 伺服器後才能檢視,目前 Google 也不支援。

完成各頁籤的設定且確認無誤後就可以按下 選項儲存 將設定保存下來,之後回到首頁時會看到 MfE 已開始嘗試連線進行同步了!
Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定

當你專心的注意畫面上的訊息時,會發現目前狀態這項訊息會依序改變: 連線中已連線閒置,那麼結果究竟成功了沒?經由檢視記錄的功能應該會看到這個畫面:
Mail for Exchange 安裝/設定
同步作業
什麼?搞半天竟然沒成功?嗯,稍安勿噪!之前格揆都只進行到這個步驟就放棄了,所以不知原來事有蹊蹺。其實啊,真正的同步作業現在才要開始呢!不如,再試著同步一下看看?
Mail for Exchange 安裝/設定

咦?它顯示出正在同步行事曆耶!趕快檢查記錄也確認有 5 筆行事曆記錄被匯入。
Mail for Exchange 安裝/設定 Mail for Exchange 安裝/設定

可是為什麼通訊錄沒有同步呢?再來同步一次好了,又發現通訊錄的也開始匯入了,記錄中也確認有 34 筆記錄被匯入。靠么,原來同步作業是需要耐心和勇於嘗試的作為啊?
Mail for Exchange 安裝/設定Mail for Exchange 安裝/設定

基本上同步的設定到此即算完成,若不是還放心的話可以嘗試分別在手機及 GMail / Google Apps 中分別新增一筆行程及一筆通訊錄,然後等排程時間一到看會不會完成同步。
結論
之前一直朝著完整重新同步的想法去進行測試,結果沒有一次成功。沒想到最後是因為選錯項目才發現只要一直同步就有機會完成整個同步程序,這實在有夠瞎就是了。

2009年10月12日星期一

Tomcat: Cannot create PoolableConnectionFactory

因為在修改某系統的部署方式而遇到這個問題,特此記之!

錯誤訊息:
12:15:11,605 ERROR jsp:228 - Cannot create PoolableConnectionFactory (IO 異常: The Network Adapter could not establish the connection)
據說這個例外的成因還不少,但在使用 Oracle 資料庫的情形時有個比較特殊的原因:連線設定參數與資料庫設定不符。最直接的驗證方式是將資料庫連線設定改用 tnsnames.ora 檔案內的寫法取代即可。Ex:
<Resource 
    name="jdbc/oracle" auth="Container"
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.OracleDriver"
    url="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP))(HOST=192.168.1.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MY_DB)))"
    username="賣哀滴"
    password="賣怕死我"
    maxActive="8"
    maxIdle="4"
    maxWait="30"/>