2010年8月31日

如何設定 Becky email client 的 SMTP 驗證

前陣子遇到一個問題,當以 SMTP 寄信的時候,若沒有設定驗證,有時候會發生信件無法寄出的狀況,因此建議還是要手動設定 SMTP 驗證。

不同的 email client 有不同的設定畫面,而 Becky 的 SMTP 驗證設定步驟如下。

步驟一:進入Becky後,在信箱上點選右鍵,選擇「內容」



步驟二:切換到「雜項」頁籤,勾選「SMTP驗證」,並在下方的「用戶名稱」及「密碼」欄位中輸入mPro的帳號以及密碼。最後按確定即可。

2010年8月25日

[Outlook 2007] 如何將 Exchange Server 上的信件收到本機資料夾

以下簡單紀錄之前寫的操作步驟。

步驟一:從控制台進入「郵件」設定


步驟二:選擇目前 Exchange 帳戶所在的設定檔
(若要新增設定檔,請參考:新增 Outlook 電子郵件設定檔),之後點選「內容(R)」按鈕



步驟三: 點選「資料檔」按鈕


步驟四:在「帳戶設定」頁面中,點選「新增(A)...」按鈕



步驟五:在「新的Outlook資料檔」畫面中,使用預設值:Office Outlook 個人資料夾檔案 (.pst)


步驟六:選擇新增的 .pst 檔的儲存位置,並設定檔案名稱



步驟七:在「建立Microsoft個人資料夾」畫面中,設定此資料檔的名稱,此名稱會顯示在Outlook中。



步驟八:在「帳戶設定」畫面中,點選剛剛新增的資料檔,而後再點選上方的「設成預設值(D)」按鈕。



步驟九:此時由跳出的對話視窗中可看出,爾後電子郵件會被收到本機的資料夾,Exchange伺服器上的資料會被清空。



步驟十:啟動 Outlook 2007,此時選擇剛剛修改過的「mPro」設定檔



步驟十一:測試收信,可看到新的信件會被收到剛剛在本機上新增的個人資料夾



步驟十二:在「個人資料夾」上按右鍵,選擇「”個人資料夾”的內容」,可看出此資料夾(.pst)檔是存在本機上。
此外可登入 Exchange Server 確認是否伺服器上面的信件已經清空。





2010年8月18日

如何批次將Yahoo!信箱中的聯絡人轉到Outlook

前陣子被客戶問到「如何批次將 Yahoo! 信箱中的聯絡人轉到 Outlook」,趁機把完整的步驟記錄下來,要特別注意的是步驟?和步驟?,其他的操作倒也不複雜。


步驟一:清除目前 iPhone 中的 Exchange 聯絡人資訊
(取消 iPhone 上 Exchange 帳號的聯絡人同步)
  1. 在 iPhone 上的「設定」點選「電子郵件/聯絡資訊/行事曆」














  2. 選擇 Exchange 信箱 (e.g., xxx@emome.net),取消同步「聯絡資訊」(點選「聯絡資訊」右邊的按鈕,讓按鈕變成白色,顯示「O」。
  3. 在跳出的對話視窗中選擇「從 iPhone 刪除」。














步驟二:將 Yahoo! 信箱中的聯絡人同步到 iPhone 中
  1. 開啟 iTunes,點選裝置中的「xxx 的 iPhone」。
  2. 切換到「資訊」頁籤,勾選「同步聯絡資訊,與 Yahoo! Address Book」,之後執行 iPhone 同步。
  3. 同步完成後 Yahoo! 信箱中的聯絡人就可成功同步到 iPhone 中(存放於「來自我的PC」群組)。(詳細說明請參考:如何將 Yahoo! 奇摩通訊錄與 iPhone 同步)














步驟三:將 iPhone 中的 Yahoo! 聯絡人資料同步到 Outlook 帳號中
  1. 確認目前 Outlook 的聯絡人是空的。
  2. 將「同步聯絡資訊」改成與「Outlook」,之後執行 iPhone 同步,此時要注意選擇「合併」,以免將 iPhone 中的 Yahoo! 聯絡人資訊清除。
  3. 完成後 iPhone 中的 Yahoo! 聯絡人就同步到 Outlook 中了。














  4. 接下來稍等幾分鐘,讓 Outlook 將聯絡人資訊同步到 Exchange Server 上。
步驟四:取消 iTunes 中的「同步聯絡資訊」

為了避免爾後同步時在 iPhone 上產生兩份相同的 Exchange 聯絡人資訊,先取消勾選「同步聯絡資訊」,再執行一次 iPhone 同步。此時原本位於「來自我的 PC」群組的聯絡人會被轉移到「我的 iPhone」群組中。



步驟五:把 Exchange Server 上的聯絡人資訊同步到 iPhone 中

  1. 在 iPhone 的「設定」->「電子郵件/聯絡資訊/行事曆」中,選擇 Exchange 信箱(e.g., xxx@emome.net)














  2. 設定同步「聯絡資訊」(點選「聯絡資訊」右邊的按鈕,讓按鈕變成藍色,顯示「|」。
  3. 在跳出的對話視窗中選擇「刪除」,如此會把「我的 iPhone」群組中的聯絡人資訊刪除,僅保留從 Exchange Server 同步下來的資訊 (位於「xxx@emome.net (Exchange)」群組中),以免產生兩份相同的聯絡人資料。














  4. 接下來稍等幾分鐘,讓 iPhone 把 Exchange Server 上的聯絡人資訊同步到手機上即可。若 iPhone 沒有立刻執行同步,請點選主畫面下方的「Mail」應用程式,開啟後就會自動執行同步。
將 Yahoo! 信箱聯絡人匯出成符合 Outlook 格式的 .csv 檔後匯入 Outlook

步驟一:登入 Yahoo! 信箱後,切換到「通訊錄」畫面



步驟二:點選畫面右邊的「工具」->「匯出」



步驟三:點選 Microsoft Outlook 右邊的「立即匯出」按鈕,將 Yahoo! 信箱中所有的聯絡人資料匯出為符合 Outlook 聯絡人資料的 .csv 檔



步驟四:首先要輸入 Yahoo! 自動產生的認證碼



步驟五:認證碼輸入正確後,會自動開始下載 .csv 檔,預設檔名為「yahoo_ab.csv」,請記住將檔案存到哪個位置



以下匯入 Outlook 的步驟可參考:如何批次將 Yahoo! 信箱中的行事曆匯入到 Outlook,有差異的地方包括以下兩點:
  1. 選擇目的資料夾時,要選擇「聯絡人」
  2. 設定自訂欄位時,要根據聯絡人的各欄位設定對應關係

步驟六:開啟Outlook,選擇「檔案」-->「匯入及匯出」



步驟七:在「匯入及匯出精靈」中,使用預設值:從其他程式或檔案匯入,之後按「下一步」


步驟八:在「匯入檔案」精靈中,向下捲動到最下面,選擇「逗點分隔值 (Windows)」後,按「下一步」


步驟九:在「匯入檔案」精靈中,點選「瀏覽(R)...」按鈕,選擇剛剛存好的 yahoo_ab.csv 檔案,按「下一步」


步驟十:在選取目的資料夾視窗中,選擇「聯絡人」


步驟十一:需勾選「匯入”yahoo_ab.csv”至資料夾:聯絡人」左邊的方塊,而後點選右邊的「對應自訂欄位」按鈕,以設定欄位的對應。


步驟十二:以拖拉的方式,將左邊的英文名稱拖曳到右邊的中文名稱。基本上英文和中文的欄位順序是一致的,只要按照順序拖拉一次即可。




重要:若沒有設定好欄位對應,匯入Outlook後資料會是一片空白:




步驟十三:自訂欄位設定完畢後,點選「完成」按鈕,就會開始匯入。


2010年8月16日

兩種更好的 AWStats 報表呈現方式 - BetterAWStats & JAWStats

前陣子在 AWStats 上啟用了內建的日報表 (daily report) 功能,接下來繼續 survey 週報表 (weekly report),無意間找到另外兩個讓 AWStats 的報表呈現全新風貌的套件:BetterAWStats 和 JAWStats (這兩個套件的 link 可以參考 Wikipedia - AWStats 的 External links,看來也沒有其他提供不同 AWStats Report 格式的 project 了)。

安裝這兩個套件以後,除了可以更輕鬆的閱讀 AWStats 報表以外,這兩個套件也各自提供了一些官方 AWStats 報表無法提供的功能。另一個好處是這兩個套件的作法都是讀取 AWStats 的統計資料後,再以不同的方式呈現報表,因此不會對系統造成額外的負擔。

BetterAWStats

基本資料
  • 官網
  • Online Demo
  • Help Forum
  • 安裝 & config.php 修改方式請參考 betterawstats-1.0.zip 解壓縮後的 \betterawstats\docs\install.txt,蠻簡單的
最大的優點:可檢視跨年度的統計資料 (稱為 Monthly history)



AWStats 官方的報表只能看到「某年度所有月份」的統計資料:


因此若有「檢視跨年度資料」的需求,就適合用 BetterAWStats 來呈現。

安裝欲到的問題 & 解法
使用上的問題
  • 繪製網頁的速度挺慢的,也很吃 server 的 memory。我管理的 site 中資料比較大的,甚至會超出 php.ini 中設定的 memory_limit (64 MB) (已經從預設的 16 MB 放大4倍了)。
  • All(daily) 和 All(monthly) 的表格呈現方式不容易閱讀 (橫向無限延伸)。

JAWStats

基本資料
最大的優點:繪製網頁的速度快,介面看起來很新穎 (Table 欄位都支援排序),用起來心情比較好

Visitors each Month (月份可跨年)

Visitors each Year (可檢視各年度總計)

Calendar of Visitors this Month (可提供週流量/點擊數統計 的功能!! 看右手邊那兩欄就是了)
把流量、點擊數等等放到月曆裡面,很棒的介面。


安裝欲到的問題 & 解法
  • 由於 JAWStats 已經好久沒更新了,因此有人把這個 project fork 出一個叫做 MAWStats 的 project,目標提供更多的報表檢視方式,但是我一直裝不起來,MAWStats 始終無法讀取 AWStats 的統計資料。
使用上的問題
  • JAWStats 是根據 AWStats 的月報表格式來設計,不支援日報表 (daily report),不過這點影響不算大,日報表用 AWStats 內建的報表格式即可。
  • 如同作者所說 (Any disadvantages?),壞處是 mouse click 比以前多,因為每一個分頁都只有顯示以前完整報表的一部分資料。但我覺得這也沒太大問題,反應速度快比較重要。
小結

就這兩個套件來說,安裝 & 設定 & 使用都很簡單,但是 JAWStats 的介面更新穎好用,且反應速度比 BetterAWStats 快很多,功能也更強,因此最後還是推薦 JAWStats 啦!可惜這套件已經超久沒更新了 ... 希望未來更新版的 AWStats 的資料格式都可以維持 backward compatibility,不然就麻煩啦!

(因為 OS、Search Engine、Browser 的版本不斷推陳出新,因此 AWStats 主程式也常常需要跟著升級,不然就無法辨識最新版的軟體了。)

參考資料:

2010年8月13日

SIKULI 初體驗 -2:進階技巧 & 其他感想

上週日分享了一篇:SIKULI 初體驗 - 利用 SIKULI 每日自動將 50 個 AWStats Report 另存為 mht 檔,這週又花了些時間持續改進。

雖然經過幾次測試,感覺已經沒甚麼問題了,但最後想到這樣的東西要交接其實蠻困難的,因此最後捨棄了這個完整版,另外花了 10 分鐘改出一個精簡版,只有自動去抓 4 個很複雜的綜合報表下來另存,並且用 FileZilla 上傳到 Server 而已。

經過幾天的實作,又更深入的瞭解到 SIKULI 的好處 & 應用上的限制,以下是簡單的紀錄。

進階技巧

SIKULI command line tool

SIKULI 是可以接受 command line 參數的,我遇到的狀況是 SIKULI 執行有時候會失敗,而我要抓的 mht 檔可以分為幾個群組,因此後來我把每個群組包成一個 function,新增一些 command line 參數來對應這些 function,如此就可透過 command line 參數來控制要重跑哪一個 function 了。

SIKULI command line tool 的相關說明可從官網點選 download 之後,在左下的 Others 中點選 Command Line Tool 連結,如下圖:


傳遞 command line 參數給 SIKULI 的範例 (在 cmd 視窗中執行以下指令):

C:\Program Files\Sikuli\Sikuli-IDE.bat -r "\path\to\your\sikuli project folder\xxx.sikuli" --args yourArgs

SIKULI 從 command line 接受到參數以後,會存在 sys.argv 裡頭 (其實底層就是 Python 啦),應用方式請參考:Handling command line arguments (sys.argv)。

這次遇到的問題

SIKULI Runtime Exception

有一次在實際執行 SIKULI script 的時候,經過了 30 個迴圈,忽然冒出以下這個 C++ Runtime Error,按下確定以後整個 SIKULI process 就消失了 (IDE 也掛了),完全不知道為甚麼 ... 但之後執行了很多次都不會遇到這個問題,可見現階段 SIKULI 還是不太穩定。



SIKULI Project Rename 後不會自動刪除舊的 .py 和 .htm 檔

在 SIKULI IDE 中可以選擇「檔案」->「另存為」將 project 取個新名字後另存,但是舊的 .py 和 .htm 檔不會自動刪除,必須手動刪除,有點小小的麻煩。



其他感想:
  • SIKULI IDE 不支援 ctrl-z,無法很快速的復原上一個操作。
  • 在 Windows 上,明明每次都在全螢幕模式下關閉程式,但 IE 和 Excel 在開關多次以後,有時候會以「非全螢幕」的方式啟動,導致我要另外叫 SIKULI 去視窗上按右鍵後輸入「x」來確保視窗是全螢幕執行,很麻煩。
  • 如果在設定「排定的工作」時選擇將電腦喚醒後執行 SIKULI script,當電腦進入待命/休眠狀態,再被喚醒執行 SIKULI script 時,往往會發生錯誤 (最常見的是無法辨認某張圖片),即使手動重新執行也可能會持續出錯,再重開機以後就恢復正常,不確定是啥問題。
  • SIKULI 執行時有時候會造成短暫的 delay (e.g., 0.x 秒),如此可能會造成某張圖片無法辨識,因為該跳出的對話視窗還來不及跳出來。我的解法是多利用 wait 和 waitVanish,讓 SIKULI 等到預期的對話視窗出現以後再執行動作。
  • 承上,wait 和 waitVanish 的預設 timeout 時間是 3 秒,但以「IE另存新檔」這個對話視窗為例,執行時間要視該網頁的複雜程度而定,有可能要超過 3 秒才能存檔完畢,因此適當的調整 timeout 秒數是很重要的,否則後面的程式一執行可能會讓系統整個亂掉。
  • 程式可攜性 (Portability):由於 SIKULI 的核心 & 最有魅力的特點是內建電腦視覺引擎,因此「抓圖寫程式」是一大賣點。但是仔細想想就會發現,如果用越多抓圖,就越會被綁在目前的操作環境中,如果把程式移到另一台電腦上,或者把 XP 的佈景主題改掉 (e.g., 藍色 -> 銀色),那 SIKULI 執行失敗 (無法辨識圖片) 的機率就會越高。

    就這點來看,SIKULI 比較適合用在自己的工作環境的自動化,除非企業有用 AD 或者其他可以讓每個使用者桌面都維持一致的管理機制,不然 SIKULI script 要大量佈署是有困難的。(當然也可以盡量用 hotkey (e.g., ctrl-c, ctrl-v 來取代點擊 GUI 環境中的按鈕,但是這樣就不炫了...)
經過這次的實作對 SIKULI 有了初步的認識,雖然目前暫時還沒想到其他的應用,但以後自己手上又多了一個好用的工具啦!

參考資料:
  1. SIKULI command line tool 
  2. How to force a running Sikuli script to quit? 
  3. An Introduction to Python: Control Structures
  4. The basic python datatypes (dictionary)
  5. Handling command line arguments (sys.argv)
  6. Exception FindFailed

2010年8月12日

[Linux/Unix] 讓 script 在登出後仍可繼續在背景執行 - at 排程

在之前的文章中曾經提到,因為改了 cron job 的執行時間,導致 awstats.pl 執行失敗,必須重跑 cron job。由於是在週末發現這個狀況,因此我透過 VPN 連回公司下指令 (sh /path/to/awstats.pl -update ...),但由於 VPN 有限制幾分鐘內沒有向 server 要求資料就會自動斷線,但 awstats.pl 分析一個網站往往要耗時 15~20 分鐘,且 VPN 連線過程中若登出 server (手動 or 被踢出),則執行中的 script 就會被中斷了,最後發現利用 at 排程 + 背景執行就可以解決這個問題。

只要輸入 at HH:mm YYYY-MM-DD,按 Enter 後,再輸入「perl /path/to/awstats.pl -update ... &」,按 Enter,最後按 ctrl+d 結束 at 排程的編輯即可。

其中關於 at 排程的設定可參考:鳥哥-僅執行一次的工作排程,至於如何讓 script 於背景執行,請參考:鳥哥-job control的管理。

利用 at 排程設定的工作,即使在執行此排程的帳號登出系統的狀況下仍然可以正確執行,就和利用 cron job 執行排定的工作一樣。

當然要對每個網站都手動輸入一次指令也太麻煩了,最好是把所有的 awstats.pl -update 指令包成一個 .sh 檔案,之後就只要執行那個 .sh 檔就可以啦!

參考資料:

2010年8月11日

[AWStats] 刪除因 awstats.pl 執行不完全造成的 awstatsMMYYYYDD.mySite.tmp.### 檔案

在上一篇文章提到,前陣子調整 AWStats 更新統計資料檔的 cron job (其實就是執行 awstats.pl -update) 的時間後,AWStats 統計資料檔都沒有正常更新,除了會產生錯誤訊息以外,還會在存放統計資料檔的資料夾 (config 檔中的 DirData) 中留下檔名為 awstatsMMYYYYDD.mySite.tmp.### (數字可能從 3 位到 5 位) 的暫存檔案。

以我管理的 AWStats Server 為例,由於要分析的網站多達 26 個,因此我有利用 DirData 這個設定值來區分不同網站群組的統計資料檔,除此之外,每個網站群組下還另外細分月報表以及日報表資料夾,造成 xxx.tmp.### 檔案分佈在各種不同深度的目錄中,那麼要如何一次把這些檔案清光呢?

一開始我想要用 ls -lR | grep tmp 指令來找出所有的暫存檔案,這個方法雖然可以把檔案名稱 & 檔案屬性列出來,但由於缺乏檔案的完整路徑,因此無法對檔案進行刪除或者其他的操作。

後來(壞毛病又發作)我參考了 Renaming Files As Lowercase Using Perl 這篇文章,把 rename 的動作改成「rm -f」,由於 Perl 支援 Regular Expression,因此要找出檔名格式為 xxx.tmp.### 的檔案非常容易。

但是在測試 ok 以後我又覺得,如果每次要做類似的事情都要寫個 Perl script,或者把現有的 script 打開來編輯,未免也太麻煩了吧!後來同事提醒我,find 指令的回傳結果就是完整的檔案路徑,在查閱 find 指令的 man page 之後,終於發現只要用以下的一行指令就可以搞定了:

find [AWStats DirData] -name *.tmp.* -delete

由於 -name 這個 switch 本身就支援 Regular Expression,因此用來找檔名中含有 tmp 的檔案相當容易,不放心的話可以先不要加上 -delete 這個 switch,就可以把找到的檔案列在螢幕上逐一確認是否有誤判的情況。

確認把暫存檔案 (xxx.tmp.###) 都找出來以後,加上 -delete 這個 switch,find 就會幫你把找出來的檔案砍掉囉!

找到正確作法 (& find 的正確用法) 以後,感覺真是爽快阿 :D

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D