2011年2月11日

[NPOI] 輕鬆地將 GridView 匯出成試算表-修正版

之前坎尼有發佈一版 Web User Control,讓 GridView 可以輕鬆匯出成 Excel
(詳見 [NPOI] 輕鬆地將 GridView 匯出成試算表)

後來有讀者發信來問:「為什麼他匯出的檔案標題列都是空白?」
經一番追查之後發現,原來是 GridView 啟用了排序 (AllowSorting)
HeaderText 會自動轉換成 LinkButton
以至於原本抓取標題部分的程式碼只抓到空白文字

於是坎尼稍做了一下修改,如下圖紅框所示
ec_01 
可以看到,不論標題是否可排序
新版本的 Web User Control 仍可以抓取標題文字
ec_02 
ec_03 

請有需求的讀者到 這邊 下載

2011年2月10日

在自行撰寫的 DNN Module 中使用 & 列印 Microsoft Chart Controls 的注意事項

前陣子因緣際會的又摸了一下 DNN,根據官網上的 Basic DotNetNuke Module Development Video 教學影片的說明開始自行撰寫模組,並且在模組中用到 Microsoft Chart Controls 來呈現圖表。過程中陸續遇到一些問題,以下是解法。

問題一:error: Invalid temp directory in chart handler configuration [c:\TempImageFiles\]

這個問題挺好解的,因為錯誤訊息很明確,直接 Google 就可以找到解法,重點在於自己新增的 DNN Module 專案(位於 C:\inetpub\wwwroot\dotnetnuke\DesktopModules\[YourModule])下的 web.config 是找不到 Chart Handler 的設定的,必須要去找最上層的 DNN 站台的 web.config,位置是 C:\inetpub\wwwroot\dotnetnuke\web.config:


找對 web.config 檔案以後,把多餘的「c:\TempImageFiles\」設定刪除,或者指定一個確實存在且有寫入權限的目錄即可。

問題二:無法列印 Chart Control 圖表,列印時會看到表示圖檔不存在的紅色叉叉


經過一番搜尋,最後在 StackOverflow 找到這篇文章,雖然該文作者說在 web.config 的 ChartImageHandler 設定中加上「deleteAfterServcing=false」對他們的專案偶爾也沒作用,但我試著加上這個設定之後,測試到目前為止每次都可以順利的把圖表列印出來!而從這個問題一直到現在都沒人回覆的狀況來看,大概只有極少數狀況在加上此設定以後仍然無法確保100% 正確的執行結果,因此有需要列印 Chart Control 的內容的話,加上這個設定就沒錯啦!(看起來就是叫系統不要把暫存圖檔立刻刪掉)


以上就是最近在 DNN Module 中使用 Microsoft Chart Control 遇到的問題 & 解法,有了這次的經驗,下次開發就可以更順利啦!

2011年2月5日

IIS 7.5 設定網站的實體路徑執行身分 (Physical Path Credentials) 時,AD 帳密輸入錯誤不會跳出錯誤訊息

去年底去恆逸上了一堂 SCVMM 的課(Microsoft Official Course 6331A: Deploying and Managing Microsoft System Center Virtual Machine Manager),在實作的過程中一切都很順利,但是在我要打開 SSRS 的報表網站來檢視報表時,卻一直跳出類似「網站無法存取」的錯誤,但是老師和課堂上其他同學的系統都很正常。

接下來就是恐怖的 debug 時間,老師親自過來在我的機器上測試各種設定,從 IIS、SSRS、AD、VMM Admin Console 一路到 SCOM 都查遍了,甚至把 VMM Admin Console 和 SCOM 砍掉重裝,問題還是沒有解決。最後花了將近一個半小時,終於找出問題!原因就是在設定 IIS & SSRS 網站的時候,設定「實體路徑執行身分 (Physical Path Credentials)」時要輸入 AD 的帳密,此時如果帳密輸入錯誤,IIS 是不會跳出錯誤訊息的!!!

「實體路徑執行身分 (Physical Path Credentials)」的位置在哪裡呢?以 IIS 7.5 為例:


在每個網站的 Features View 裡面,右邊的控制面板中間可以看到「Advanced Settings」:


點進去以後,可以看到「Physical Path Credentials」這個設定值:


在接下來的設定畫面中,要把預設的「Application user (pass-through authentication)」改為「Specific user」,並在此處輸入 AD 的帳密:


問題就是出在這一步!!

在這裡雖然 Password 有 confirm 的機制,但是若連續兩次輸入錯誤(暈倒),IIS 就會接受這個錯誤的密碼,而後當網站實際上執行,以這組帳密去驗證時就會失敗,進而產生「網站無法存取」或者「存取被拒」之類的錯誤訊息了!

雖然說密碼連續兩次輸入錯誤還蠻扯的,但是若是跟我一樣習慣盲打的人,有時候用到一支鍵位配置跟平常習慣的鍵位不一樣的鍵盤時,是可能會連續兩次輸入錯的一模一樣的字串的。特別是這個欄位是密碼欄位,在畫面上看不到實際輸入的內容,因此當系統顯然沒有真的嘗試用此組帳密進行驗證,只是單純用 confirm password 的方式驗證時,就會發生這次的狀況了!

在這樣的狀況下,最好的作法就是設定完 AD 帳密以後,馬上試著打開網站看看能否正常運作,如果發現問題的話才有機會回頭檢查設定是否有誤。


後記:

雖然我只有用 IIS 7.5 來驗證,但是既然最新版的 IIS 都會有這問題,那麼舊版應該也是免不了的 ~

2011年2月2日

[無用小工具] 大樂透對獎程式

好久沒寫這個系列了
這次剛好台灣彩卷要開出100組的對獎號碼
所以坎尼順手寫了個對獎小程式 (不然100組會對到眼花吧…)
首先是 程式下載

以下為使用說明:
解壓之後會有三個檔案
bl_00 
Lottery.exe => 主執行檔
l.xml => 預設的開獎號碼 (可用 notepad 打開修改)
numbers.xml => 對獎號碼範例 (可用 notepad 打開修改)

預設的開獎號碼 (l.xml)


數字用空格分隔,記得特別號要放在最後一碼
bl_05

主程式畫面


加入對獎號碼有三種方式
  1. 手輸 (用空格分隔)
  2. 用選的
  3. 載入 xml 檔
圖中藍色框框則為對獎按鈕
bl_01 
手輸,記得用空格區隔數字
bl_03
用選的,選完六個號碼之後按下確定即會把選好的號碼回傳
bl_02
xml 檔格式,可開啟範例檔以同樣的方式進行修改
一樣是用空格來分隔數字
bl_04

對獎


確定載入自己的對獎號碼之後,即可進行對獎動作
點下右下方的對獎按鈕,程式就會自動執行對獎
並將結果顯示在號碼後方的狀態欄中 (如下圖)
bl_06 
以上為自得其樂的中頭彩示範

不過現在台彩網站似乎流量爆了
要得到開獎號碼可能要再等晚一點 XD

如何升級 MacOS X 內建的 vim

雖然說 MacOS X 內建的 vim 版本已經很新 (v7.2, 2008-08-09),但有些軟體會利用到最新版 vim 的功能 (v7.3, 2010-08-15),如T客邦介紹的:vmail (see Prerequisites),就一定要使用 vim v7.3 才能正確運作,那麼要如何升級 MacOS 中內建的 vim 呢?

我一開始先找到了這個參考資料,直接下載最新版的 vim source code 來自己編譯 & 安裝,雖然步驟看來沒啥特別,但是後來沒有成功。又經過一番搜尋之後,我發現一個更簡單的作法,只要安裝 MacVim (a port of the text editor Vim to MacOS X,之後再開啟 terminal 修改 home 目錄下的 .profile 隱藏檔,加上以下兩行即可:

alias vim=/Applications/MacVim.app/Contents/MacOS/Vim
alias vi=vim

簡單說就是把vim這個指令作為MacVim執行檔的alias就可以了。要確認此 alias 是否生效,要先登出再登入 OS,再於 terminal 執行 vim --version 來確認目前執行的是最新版 (v7.3) 的 vim。

有些資料會寫說在 home 目錄下新增一個原本不存在的 .bash_profile 隱藏檔(跟一般 linux 一樣),而後在 .bash_profile 中加上那兩行就可以,但我測試以後發現 .bash_profile 沒有作用,在 Mac OS 中還是直接修改 home 目錄下原本就已經存在的 .profile 隱藏檔比較正確&有效。

參考資料:

2011年1月30日

Joomla 1.6 安裝注意事項 (手動編譯 Apache HTTP Server & PHP on RHEL 5)

在 2011-01-10 的時候 Joomla 推出了最新的 1.6 版,因此我也灌起來玩了一下,過程中發現由於 RHEL 5.3 (Tikanga) 內建的 PHP (5.1.6) 太老舊了,Joomla 1.6 的需求是 5.2.4 以上,因此必須要升級 PHP,也利用這個機會一併把內建的老舊 Apache HTTP Server (2.2.3) 升級 (最新版:2.2.17),以下就是升級過程中的注意事項。

安裝的過程基本上很簡單,主要參考 PHP 官網上的 online documentation -> 在 View Online 的地方選 English -> Installation on Unix systems -> Apache 2.x on Unix systems 上的步驟照做即可,重點在於步驟 5「Now, configure and build PHP」,在這個 configure 範例中只有使用最基本的「--with-mysql」來加入 MySQL 的支援,但這樣對 Joomla 的安裝來說是不夠的。

在 Joomla 的安裝過程中,會確認 PHP 有 Zlib compression 支援,否則 Joomla 會無法順利安裝。按照官網上的 configure 方式是不包含 Zlib compression 支援的,必須要在 configure 的 option 裡面加上「--with-zlib」才行,也就是:「./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-zlib

那麼萬一像我一樣在 configure & make install PHP 之後,開始安裝 Joomla 時才在 check system requirement 的時候發現 PHP 缺少 Zlib compression 支援的話要怎麼辦呢?沒關係,這時候就要靠上一次執行 configure 時自動產生的 config.nice 檔了,config.nice 檔案會記錄上一次執行 configure 所使用的 options,只要編輯這個檔案,以相同的格式加入「--with-zlib」這個 option,然後執行「./config.nice」,最後再重新 make、make install 來重新安裝 PHP 就可以囉(安裝到相同的目錄,把剛剛安裝的版本蓋掉即可)!

加入「--with-zlib」的 config.nice 內容如下:


以第二次根據 config.nice 產生的 Make file 來執行 make 的時候,只會重新編譯新增的部份,因此速度很快。有了 config.nice 千萬要好好利用,不要傻傻的重新執行 configure,這樣會浪費很多時間阿!

基本上要注意的地方就只有這裡,其他的步驟都按照官網上的範例來做就可以了。Joomla 的安裝也很簡單,基本上就是先檢查執行環境是否符合最低需求,而後把 Joomla 網站複製到指定的目錄,最後產生 configuration.php 的內容就可以運作了。

可惜的是目前 Fabrik 套件的最新版 - 2.0.3 還不支援 Joomla 1.6,一整個就是裝不上去阿,只好過一陣子再測試囉!

另外順便補充IT黑傑克前陣子寫的 Joomla & Drupal 比較文:

2011年1月7日

[IE8] 應用 Developer Tool 進行網頁內容自動填寫

又到了學期末,在忙不完的報告海之中
學校的教務系統突然來了一封信,提醒坎尼快去把教學意見調查表填完
填自己喜愛的課沒問題,但同樣的動作要做幾百次可是麻煩至極
尤其是沒什麼收獲的課 
於是坎尼就寫了一段 javascript 讓機器自動填答 Orz

I. 找尋 Pattern

這類型的作業最重要的就是找到可利用的 Pattern
我們來看一下要填寫的 Form
DTQ02
可以看到,要填答的選項很明顯的是用 input radio 組成
打開 IE8 的 DevTool (快速鍵為 F12)
DTQ03
果然沒錯,所以只要取出所有的 radio 物件
再決定要填寫哪個 value 即可

II. 撰寫 script

上面得知了目前狀況,稍微來厘清一下步驟: (以非常同意為例)
  1. 取得 radio 物件
  2. 找出 value 為 1 的物件
  3. 選取
由於要選取物件,這邊坎尼載入擁有有強大選擇器的 jQuery
var script;
script = document.createElement("script");
script.setAttribute('language', 'javascript');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
// 1 非常同意 3 普通 5 非常不同意
$("input:radio[value=1]").attr("checked","checked"); 
接著打開 DevTool,把 Tab 切換至指令碼
將上述程式碼輸入並執行
DTQ01
很快地,30幾個單選選項都自動填答完成
接著只要改幾個自己覺得不滿意的選項即可...

III. 小結

其實從這邊就可以看出自動化的威力
簡單的幾行程式就可以把整個 Form 填完

(以下為抱怨)
從上面的 sample 其實能夠得知網路問卷的信度有多差
總覺得研究者該做的不是把問卷發一發等著回收就好
要了解對象的 Deep insight 才是重點
可惜坎尼看到的都是隨意做一做就放進論文的資料來源
這樣的論文真的會對世界有幫助嗎?

Google Spreadsheet 裡用規則運算式

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