2010年6月24日

[DOTNET] 利用 System.Globalization 提供的各種曆法類別取得特別的日期

今天來介紹各種 DotNET 提供的客製化曆法吧

I. 客製化曆法簡介

首先來看一下 System.Globalization namespace
各種曆法類別的命名為 xxxCalendar

比方講 PersianCalendar 為波斯曆
另外還有 TaiwanCalendarJapaneseCalendarKoreanCalendar …等

使用方法很簡單,大多是建立 xxxCalendar 類別實體之後
再叫用 .GetYear.GetMonth.GetDayOfMonth 方法
以下就用台灣曆和台灣農曆來簡單示範一下用法

II. 實戰

首先,先建立一個要轉換曆法的日期
建立 TaiwanCalendar 類別
由於台灣曆和西元曆的月日相同,這邊只顯示相異的民國年
TC01 再建立 TaiwanLunisolarCalendar 來取得農曆的日期
看一下日期的轉換結果
TC02
民國年當然可以確定是正確的
但農曆呢? 坎尼找到了這個 網站
2010/04/24 在農曆中的確是 3/11,得證!
TC03 
TaiwanLunisolarCalendar 還可以取得天干和地支
有興趣的讀者可以試試

III. 小結

若是要在自己的系統中顯示各地不同的曆法
建議可以先到 System.Globalization 裡找找
或許會有意外的發現

也有提供泰國的佛教曆,給有可能用到的人作參考

2010年6月22日

[ASPNET] 在 FormView 中使用 WebUserControl 可能會導致 Visual Studio 罷工

標題好長,不過真的有這回事嗎?

起先是坎尼的同學問有沒有碰過類似的問題
坎尼一開始也是很莫名,但發現 Visual Studio 跑他的程式就會掛
經過一陣推敲及實驗之後,總算是發現了肇事的主因

I. 問題描述

首先是怎麼個停擺法呢?

當在 FormView 中放入有問題的 WebUserControl 時
用 DesignMode 進入 FormView 的 EditTemplates 編輯模式
會看到 WebUserControl 不停的閃爍,接著 IDE 就會停擺在那邊

(註:IDE = Integrated Development Environment,本篇指 Visual Studio)

若運氣好,在發生問題之前就將游標移到 FormView 以外的位置
可以用快速鍵 Ctrl + PgUp/PgDn 切換成 Source Mode
運氣不好,大概就要叫 Task Manager 出來結束它的生命

先來看一下問題發生的影片 (請自行放大影片

影片中第一次打開 EditTemplates 時是沒有問題的
所以標題才會用 "可能" 而非 "絕對"

II. 問題解決

就在坎尼看著同學的 Code 百思不得其解時
想說再依樣畫葫蘆自己造一個一樣的 sample 來試試
咦?! 實驗結果很正常!!!

但當把坎尼同學寫的 FormView 內容 Code 直接貼到新建的 FormView 時,它又開始不停閃爍,這難道就是傳說中的鬼打牆?

接著坎尼眉頭一皺,發覺同學的 Code 裡有不對勁的地方
該不會是 WebUserControl ID 是用中文命名的關係吧?

測試結果證明:還真的就是這個原因!!!
但一般的 Controls 用中文命名都沒問題,只有 UserControl 會

原本坎尼以為所有容器型的 Template 編輯模式都會發生此情況
嗯,坎尼又猜錯了,只有 FormView 才會……

目前測試 VS2008 和 VWD2010Express 都有此情形
更之前的 VS2005 坎尼手邊沒有,無法測試
歡迎有心提供測試結果的讀者留言 ^^

III. 小結


這問題一直沒人發現 (坎尼 Google 不到)
大概是大家不怎麼用中文命名,或是沒在用 FormView 吧?
雖然 Visual Studio 為支援 unicode 的 IDE
但使用上除了文字屬性以外,還是盡量以英數字為主吧 :P

第一次錄影片,有點手忙腳亂,還請多多包涵 :D

2010年6月15日

[Tools] 利用 Web PI 輔助安裝 SSMSE 2008

首先來個名詞解釋吧

I. 名詞解譯

SSMSE = SQL Server Management Studio Express
也就是 SQL Server 管理工具,相信大家應該都不陌生

Web PI = Microsoft Web Platform Installer
微軟提供的免費 Web Platform 元件安裝工具,目前版本為 2.0
利用此工具可取得目前線上最新版本的安裝程式

II. 問題及解法

坎尼由於之前已先安裝了 SQL Server 2008 Express
由於沒裝 SSMSE,在管理自己機器上資料庫很麻煩

前陣子下載了 SSMSE 2008 來安裝,卻怎樣也找不到安裝的選項
用黑暗兵法 7zip 從安裝檔把 SSMSE 抽出來也不能安裝
ssmse2008Ins00 ssmse2008Ins00_2
以前在裝 SSMSE 2005 都是無腦 Next 一路裝到好
Search 一下才發現,似乎要裝新的執行個體才行
或是一開始就用 SQL Server 2008 Express With Tools 來安裝

突然看到有人說可以用 Web PI 來安裝
坎尼之前用 Web PI 時並沒有看到 SSMSE 的選項啊奇怪
趕緊來打開 Web PI 來看一下
ssmse2008Ins01
最可疑的地方就是 Database 了,但它把已經有綠色勾勾了啊
點開自訂,Bingo! 果然是偷偷藏在這種地方啊
ssmse2008Ins02
勾選之後點下安裝就會開始下載安裝檔
SSMSE 2008 大約是 170MB 左右,請耐心等候
下載完會自動進行安裝,接下來跟著指示做就對了 :D

III. 小結

Microsoft Web Platform Installer 真的是很好用的工具
有興趣的人可以到官網下載使用 :D

2010年6月12日

iPhone 小技巧 - 移除在台灣無法使用的 iTunes Store 應用程式

最近要去當 iPhone 訓練課程的助教,於是多花了點時間認真的玩了一下 iPhone,也確認了幾個月前偶然發現的一個小技巧:移除在台灣無法使用的 iTunes Store 應用程式 (參考:[m01]不能上iTunes Store),以下是操作步驟。

步驟一:在移除 iTunes Store 應用程式之前,iPhone 主畫面大概長這樣

003

步驟二:進入「設定」畫面,點選「一般」->「取用限制」
             (預設是關閉的)
004

步驟三:在「取用限制」設定畫面中,點選上面的「啟用取用限制」按鈕(這按鈕的名字唸起來好拗口),在啟用「取用限制」之前,下面的設定都是 disable 的
005

步驟四:設定一組四位數字的「取用限制密碼」,之後要變更取用限制裡面的設定,或者啟用/取消取用限制,都需要輸入這組密碼
006

步驟五:重新輸入上個步驟的取用限制密碼
007

步驟六:把 iTunes 關掉,在這裡可以看出,就算啟用取用限制,預設還是可以使用內建的 Safari、TouTube 等應用程式。如果出於某些很特殊的原因,想要把相機,或者 App Store 也關閉的話,一樣是在這裡設定。設定完畢之後可按左上角的「一般」回到「設定」畫面中的「一般」,或者按 Home 鍵回到主畫面,此時設定已經生效了。
008

步驟七:移除 iTunes Store 應用程式之後的主畫面。這樣就可以把「聯絡資訊」也拉到這一頁來了,在能夠使用 iOS 4 的資料夾功能之前,利用這個小技巧可以多爭取到一點主畫面的空間。
009

很可惜 iTunes Store 中的音樂、電影等內容無法在台灣地區上架販售,但是有申請美國 iTunes Store 帳號的話,還是有很多好康的 (申請方式請參考:iPhone App 推薦-1: 如何免費(不用信用卡)申請各國 iTunes Store 帳號)。

希望這個小技巧對大家會有些幫助:D

2010-06-14 補充:早上在 Facebook 的 iPhone App 應用程式看到:
用台灣帳號也可以使用iPhone裡面的iTunes了!

測試了一下的確可以使用, 雖然僅限於免費內容,但還是有很多精彩的 Podcast 可以下載,還有很多教學影片,以後要充實自己的各種知識 or 追蹤最新資訊 (e.g., FIFA 2010) or 練習英聽都更方便囉!

2012.06 補充:經過兩年多的等待,iTunes Store 終於開賣音樂單曲、專輯,以及電影租片啦!不知道何時會開賣電子書呢? ^_^

2010年6月8日

在 Windows 7 用 FileZilla Server 架 FTP 站要注意的防火牆設定

昨天被問到在 Windows 7 上如何用 FileZilla Server 架 FTP 站,其實架站步驟以及軟體安裝之後所需的設定並不複雜,重灌狂人就寫過一篇非常詳細的文章「[免費] 如何用 FileZilla Server 架 FTP 站?」。但是在「四、取得自己電腦的IP位址,讓朋友連線進來」這篇文章中,對於 Windows 防火牆的設定卻沒有多著墨,這裡就紀錄一下 Windows 7 的防火牆設定。
如果你很有空的話,可以看一下這兩個 YouTube 教學影片:
但是兩個影片看完要花將近 20 分鐘,其實在將 FileZilla Server 晚體安裝完畢,並且設定好帳號和 shared folder 之後,在大多數的情況下只要調整好 Windows 防火牆的設定就可以讓 FTP 站正常運作了,以下是設定的步驟:
步驟一:確認 FileZilla Server FTP server 這個 Windows 服務有沒有正常啟動
(在 Windows 7 開始功能表的搜尋框中打「Services」就可以叫出服務管理員)
0
如果在安裝時把這個服務設定為手動啟動,更要注意這一點,若這個服務沒有啟動,則使用 FileZilla Server Interface 連線到本機 (127.0.0.1) 的時候可能會收到「can't connect to server」之類的錯誤訊息。
步驟二:開啟 Windows 防火牆管理介面
(在 Windows 7 開始功能表的搜尋框中打「Firewall」就找得到防火牆)
0.2
步驟三:點選左上角的「Allow a program or feature through Windows firewall」的連結,進入例外程式設定畫面
1
設定前的畫面如下:
3
步驟四:將「FileZilla Server」和「FileZilla Server Interface」兩個程式加入到例外清單中
  • 若選單中的項目被反灰,則先點選右上角的「Change settings」按鈕 (必須有 Administrator 權限)
  • 點選下面的「Allow another program…」按鈕,選擇要允許的程式:
    • FileZilla Server: C:\Program Files (x86)\FileZilla Server\FileZilla server.exe
    • FileZilla Server Interface: C:\Program Files (x86)\FileZilla Server\FileZilla Server Interface.exe
設定完成後的畫面如下:
2
接下來只要知道 FileZilla Server 所在電腦的 IP 位置,就可以在任何一台有連網的電腦上用指定的帳號密碼連進 FileZilla FTP Server 啦!
另外補充:如果不想要記 What Is My IP Address 網站的網址,也可以執行 Windows command prompt (Windows鍵+R,執行「cmd」),而後執行「ipconfig」指令:
0.1

2010年6月6日

如何批次將 Yahoo 信箱中的行事曆匯入到 Outlook

上週剛好被問到這個問題,原本想說按照Yahoo網站上面的匯入/匯出說明來操作,應該很容易,但是我怎麼也找不到「編輯行事曆...」按鈕在哪裡。之後又找到 Google 日曆的說明:從其他的應用程式移轉活動,看起來很簡單,但是在 Yahoo 信箱的中文介面中,點選右上角的「功能設定」以後,畫面如下:
a
仔細一看就會發現:根本就沒有「匯入/匯出」功能阿!
這時後有個同事發現了一個絕招:先把 Yahoo 帳戶的慣用語言改成英文,就可以使用匯入/匯出功能了!操作步驟如下:
步驟一:修改 Yahoo 帳戶的慣用語言為英文
進入 Yahoo 網站首頁,點選左下角「我的」類別中的「會員中心」,並以 Yahoo 信箱的帳號密碼登入。
clip_image002
步驟二:設定此 Yahoo 帳戶的慣用語言為英文
在會員中心的「帳戶設定」中,點選「設定語言、網站、時區」
clip_image004
步驟三:將慣用語言設定為「Yahoo! U.S. in English
  1. 在「地區網站和語言」下拉式選單中,通常預設為「Yahoo! 奇摩」,往上捲動即可找到「Yahoo! U.S. in English」。
  2. 選擇此設定後,畫面會馬上變成英文,之後再按右下角的「Save」按鈕即可。
  3. 確認儲存完畢後,點選左上角的登出按鈕,登出會員中心。
clip_image006
步驟四:進入 Yahoo 信箱的行事曆設定畫面
  1. 登入 Yahoo 信箱,此時介面應為英文。
  2. 點選左下角的「Applications」中的「Calendar」,進入行事曆畫面。
clip_image008
步驟五:進入行事曆選項畫面
1. 點選右上角的「Options」連結。
clip_image010
步驟六:進入匯入/匯出 (Import/Export) 畫面
1. 點選畫面中間,Management 類別中的「Import/Export」連結
clip_image012
步驟七:將 Yahoo 行事曆資料匯出為 Outlook 格式
  1. 點選「Export to Outlook」中的「Export」按鈕
  2. 此時會跳出檔案下載對話視窗,按「儲存」,並記住將檔案存到哪個地方
    (預設檔名為「Yahoo.csv」)
clip_image014
步驟八:開啟Outlook,選擇「檔案」-->「匯入及匯出」
clip_image016
步驟九:在「匯入及匯出精靈」中,使用預設值:從其他程式或檔案匯入,之後按「下一步」
clip_image018
步驟十:在「匯入檔案」精靈中,向下捲動到最下面,選擇「逗點分隔值(Windows)」後,按「下一步」
clip_image020
步驟十一:在「匯入檔案」精靈中,點選「瀏覽(R)...」按鈕,選擇剛剛存好的Yahoo.csv 檔案,按「下一步」
clip_image022
步驟十二:在選取目的資料夾視窗中,選擇「行事曆」
b
注意:若沒有正確選擇「行事曆」資料夾,會因為資料格式不符而無法正確匯入行事曆資料!
步驟十三:需勾選「匯入”Yahoo.csv”至資料夾:行事曆」左邊的方塊,而後點選右邊的「對應自訂欄位」按鈕,以設定欄位的對應
clip_image026
步驟十四:以拖拉的方式,將左邊的英文名稱拖曳到右邊的中文名稱
(這個步驟最重要,沒有設定好欄位名稱對應的話,資料就無法正確匯入!)

clip_image028
設定 Description 欄位的對應時,右邊的欄位清單要往下拉到「描述」欄位:
clip_image030
步驟十五:自訂欄位設定完畢後,點選「完成」按鈕,就會開始匯入行事曆資料。
clip_image032
如此就可以批次將 Yahoo 信箱中的行事曆資料匯入到 Outlook 啦!(也可以另外把匯出的 .csv 檔做備份)
整個操作過程中最關鍵的步驟是:
  1. 要把 Yahoo 帳戶的慣用語言改為英文,才有「Import/Export」功能可用
  2. 在 Outlook 的匯入檔案精靈中,要確實設定「自訂欄位對應」,才能正確匯入資料
希望這篇文章對有須要的朋友會有幫助 :D

2010年6月4日

[ASPNET] 客製化傳入 DataSource 控制項的參數

坎尼最近玩了一下許久未用的 DataSource 控制項
對於傳入的 Parameter 有些疑問 (見下圖)
op03如果是用精靈視窗,Control 會自動帶入預設的 Property
若是想要用其他的屬性來當作參數值該怎麼辦呢?

I. 取得資料來源

這邊坎尼用到了前幾天講的技巧,建立了一個暫存表並回傳查詢值
op01
另外還用了 SQL Server 2008 才有的 Mutli-Insert 語法:
在 Values 後面,以 「,」隔開 要建立的值

最後再回傳符合條件的查詢結果
可以看到範例中是用 Like,所以要記得加 %

II. 實戰

在畫面上放一個 DropDownList,當作查詢條件的傳入值
另外再放一個 GridView 來呈現資料
op02建立一個 ObjectDataSource
並用精靈選擇 DropDownList 當作參數值來源
op03預設是用 .SelectedValue 屬性當作傳入值
但以上面 DropDownList 目前的設定來看,會查不到任何資料

所以坎尼偷偷的切換到 Source 視窗
靜悄悄地把 SelectedValue 改成 SelectedItem.Text
op04 
按下瀏覽來查看一下成果
op05
狸貓換太子成功!!!  收工!

III. 小結

了解可以自定要傳入的屬性當參數後
DataSource 控制項在使用上也能更有彈性 :)

2010年6月1日

[ADO.NET] 善用 SqlDataAdapter 執行大量指令並傳回查詢資料

今天來介紹一下好用的 DataAdapter

I. 前言

很久很久以前,坎尼常遇到一個問題
「新增完一筆資料之後,要回傳該資料的ID」

如果 ID 是自己取 Max + 1 就還能控制
但要是遇到是用 sequence 方式建立的流水號
往往還要拆成兩段語法,建立完資料之後再取出

其實大可不必那麼麻煩,可以將 SQL Statement 串接在一起
(記得用 ; 隔開不同的指令)
再用 SqlCommandSqlDataAdapter 執行即可

II. 實戰

下圖綠色框部分,用 Sql Server 提供的 Temp Tables 語法
分別建立了兩個臨時資料表,並各加入兩筆資料
再用 SELECT 語法將兩個資料表 JOIN 的結果回傳
ms01既然 CreateInsert 語法都在 SelectCommand
參數當然也是要加進 SelectCommand 裡 (見上圖藍色框)
記得不要放到 UpdateCommand 或 InsertCommand 去

實際執行情況:確實建立了 Table 並取得 JOIN 成功的資料
ms03

另外坎尼又做了小小的測驗,驗證一下臨時資料表有沒有被砍掉
ms02 
事實證明,在上一次 .Fill 結束之後,暫存資料表是會自動清掉
而 Temp Table 的定義是:只存在該使用者連線時
ms04 
這表示 DataAdapter 在 .Fill 之後就會自動把連線關閉
下一次的 .Fill 其實是另外再重新開啟另一個連線

III. 小結

坎尼以前常看到有人用 DataAdapter
卻在執行前後加上 Connection.Open() 及 Connection.Close()
其實這些動作都是不必要的

DataAdapter 在執行時,都會檢查目前和 DB 的連線
執行結束後即會自動關閉與 DB 的連線

希望這些觀念對讀者們有幫助 :)

Google Spreadsheet 裡用規則運算式

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