2010年1月29日

[VS2010] 找尋 Method 之間的關係 – Call Hierarchy

很久很久以前,坎尼一直有這個困擾:
「如何在茫茫程式海中找尋叫用某 Method 的對象?」
坎尼大多是用 Ctrl + F 苦命的尋找
或許是發現像坎尼這樣的笨蛋太多了,所以 VS2010 加了新功能
以避免更多的坎尼出現

I. How to use Call Hierarchy

首先,坎尼以上一篇例子中的 Class 來示範
ch01
當一個新進維護人員發現 Talk_to_Man() 邏輯有些許問題
但若是直接修改不知影響層面有多大
所以最好的方式是:
先找出有相依性的 Method 來進行修改風險及工作量的評估

「但要怎麼尋找呢?」
還好新人小坎尼看過坎尼這篇
於是就在 Talk_to_Man 上按下右鍵,選擇 View Call Hierarchy
ch02 接著 VS2010 會在 Call Hierarchy 的視窗中顯示分析結果
「哦哦,原來叫用的 Method 只有 Couple() 」
ch03 還可以將呼叫被呼叫的 Method 打開,繼續往下了解其相依性
(當然可以不斷地打開樹的節點,這邊坎尼就不多做說明了 )
ch04如何,很簡單吧? :)

II. 小結

大型專案往往有數萬行以上程式碼
人員在開發及維護上,若是遇到有交接等情形,常會遺漏許多未被告知的資訊

尤其像是本篇所講,為了避免牽一髮而動全身
先做一些分析及評估是必要的,工具此時就能派上用場了 :)
強大的 Visual Studio 再次顯靈

2010年1月28日

[VS2010] 自動產生的 Sequence Diagram

以前老師常教,先把 SA/SD 做好再來寫程式
但實務上往往是先寫好程式再回去把文件補完 XD
連坎尼以前上生管時,老師也這麼吐槽自己的學生

好了,前提講完了,本篇要來介紹的是 VS2010 的功能:
Generate Sequence Diagram

I. Find A Man

首先,先來看一下坎尼虛擬的程式碼
seq01此程式碼的目的就是找到一個新的個體 (路邊隨便一個男人)
seq02
接著請他進行拍照的動作
拍照完就對他說謝謝,順便閃瞎他

II. Auto Generate Sequence Diagram?

OK,有了以上的程式碼,此時就可以來進行分析的動作

首先在要進行分析的 Method 上按右鍵
可以看到 Generate Sequence Diagram 的選項
seq03點選此項功能後,會出現設定對話方塊
主要是分成三塊:要分析的層級、內部呼叫的相關方法、外部載入的相關方法
seq04設定好之後按下 OK
Visual Studio 就會開始進行分析,分析完之後就會自動產生 Sequence Diagram
seq05理性的 Visual Studio 把可憐路人的一生表露無遺
如何,很簡單對吧 :D

III. Conclusions

有了這個新功能之後,都可以先寫完程式再來補文件啦 (誤
雖然工具會愈來愈方便,各位在做專案時還是要努力的先做好分析喔  :)

今天就介紹到這邊,大家下次見 :)

[VS2010] Intellisense 補充 & Vertical Selections

本篇坎尼會補充一下 Intellisense 在之前的文章內容裡沒提到的部份
另外介紹 Visual Studio 2010 加入的新功能

I. Intellisense 的 Pascal Naming Search

之前坎尼在 Visual Studio 2010 beta2 小用心得
有稍稍介紹了一下新的 Intellisense 的 Filter 式搜尋

還記得坎尼當時提的例子嗎?
「vs2010 的 Intellisense 是用 like % + 關鍵字 + %」
其實這個講法是有問題的

在上一篇 [VS2010] 好用的 Navigate To 裡有講到
Navigate To 是支援 Pascal 命名方法的 Filter 搜尋
當然,Intellisense 也不例外,特在此補充一下 (見下圖
Intellisense01 

II. Vertical Selections

看字面上的意思,Vertical Selections 就是可以直著選,但要怎麼做呢???

首先,在 VS2010 的環境中,按住 Alt 不放
再用滑鼠就可以圈選原始碼中的任何一個區塊
就可以看到該區域呈現被選取的狀態
vertiSel
此時只要輸入要更改的 Source Code
整個區塊就會一起被更改 (見下圖
vertiSel02
這個功能很適合一次大量修改同類型的 Code,是不是很方便啊? :)

III. Conclusions

很高興 Tim 可以回來繼續分享心得
未來可能會出現較多其他非 MS 的相關文章
但本 blog 還是承襲舊名 .NET 碎碎念,請大家繼續支持 :D

2010年1月23日

SecureCRT Solaris/Linux console 的顏色配置

前陣子由於剛換工作,因此偷懶沉寂了一段時間,這段時間內學到的東西跟以前在 MS 的世界有很大的差異,主要是 Linux, shell script 和 Perl,最大的收穫是慢慢開始熟悉 Regular Expression (Regex, Regexp),未來會再慢慢把心得整理出來。以下先分享昨天調整 SecureCRT console 顏色配置的心得~

什麼是SecureCRT


SecureCRT 是一款可以用來遠端連線到 Linux/Unix/Solaris 系統的軟體,官網在這裡,註冊後可下載30天試用版。它提供了加密資料傳輸、ssh 連線、認證等等的功能,但我覺得它跟 PuTTY 最大的差異在於 PuTTY 沒辦法以自訂資料夾的方式來管理需要常常連線的眾多主機資訊 (Session),如果系統管理者需要管理大量主機,SecureCRT 的 Session 管理功能是更方便好用的 (稍後會補充如何找出 Session 設定檔存放的位置),但是 SecureCRT 要授權費,PuTTY 是 free 的…

SecureCRT 的 Session 管理功能如下圖,可儲存大量主機的連線設定:
SecureCRT_ConnectDialogueManySites


SecureCRT console 顏色配置
接下來進入本次分享的重點-console 的顏色配置。雖然 SecureCRT 很方便好用,但是跟 PuTTY console 預設的黑底白字不同,SecureCRT 的 console 預設是白底黑字的,若要長時間使用,感覺很傷眼睛,幸好這個顏色的配置是可以調整的,以下是調整的方式 (參考:SecureCRT linux vim 顏色設置):

預設的白底黑字 console:
SecureCRT_DefaultColorScheme


Linux 系統
在 Connect 對話視窗中,選到要變更配置的 session 後,點選 Properties:
SecureCRT_ConnectDialogue

在Terminal –> Emulation 下的 Terminal 選擇:Linux,此時會自動勾選右邊的 ANSI color
SecureCRT_LinuxColorScheme


Solaris系統
在 Connect 對話視窗中,選到要變更配置的 session 後,點選 Properties:
SecureCRT_ConnectDialogue

在Terminal –> Emulation 下的 Terminal 選擇:VT102,此時要自己手動勾選右邊的 ANSI color
SecureCRT_SolarisColorScheme

調整好設定以後重新登入主機,畫面就會變成黑底白字了:
SecureCRT_ModifiedColorScheme
這樣應該對眼睛比較好 :) (而且可由不同顏色來區別檔案的性質)


補充:SecureCRT 的 Sessions 設定檔位置
以下是 SecureCRT 儲存 Sessions 設定檔的位置:
SecureCRT_ConfigurationFolder

若需要快速的在另一台機器上建立 SecureCRT 的環境,可以直接到這個目錄下把「Sessions」資料夾下的 .ini 檔案複製到另一台機器,如此在交接的時候也很方便,不用重新手動建立 session,特別是對於要管理大量主機的管理者而言。

要注意的是通常管理者會把帳號密碼記憶起來 (如下圖),在複製設定檔之前應該先用文字編輯器把 .ini 檔案中的帳密清掉,強迫下一個使用者重新輸入自己的帳密。
image

(可能之後會抽空寫個 script 自動把大批 .ini 檔案裡面的帳密清掉 … 當做練習 Perl :p)
以上是一些心得分享,如果有錯誤的地方還請各位前輩指正 ^O^

2010年1月21日

[VS2010] 好用的 Navigate To

坎尼最近在 Is This Thing On? 看到個好用的功能:Navigate To
(請參考 How to use Navigate To -- vstipTool0006)
本來以為是 Source Code 右上角導覽下拉選單的快速鍵版本
後來試玩了一下,發現是坎尼太膚淺了 XD

I.功能介紹

首先,打開任何一個 Visual Studio 2010 專案按下 Ctrl + ,
會彈跳出 Navigate To 的視窗
在上方的搜尋框鍵入想要尋找的 Method Name
navto01
可以看到下方會出現 Method 相關資訊

也可以在搜尋框內鍵入大寫字母尋找用 Pascal 命名法的 Method
navto02
另外就算詞彙之間有 _ 也照樣可以找到
navto05
不過找尋首字母只對大寫字母有效 (Case-Sensitive?)
navto03 
navto04
最酷的可以在專案任何一個角落打開 Navigate To
找尋方法的所在 Anytime, anywhere!!!
navto05

II.小結

visual studio 2010 是值得期待的新開發工具 (除了記憶體吃比較兇一點外)
還沒用過的讀者推薦快去試用看看吧 :D

另外推廣一下,點部落目前在辦VS2010 修練大會,有興趣的人快去參加吧 :)
參考資料:
How to use Navigate To -- vstipTool0006

2010年1月10日

[資安] 系統上線後該注意事項

今天坎尼在登入某網站的時候,大概是 Session 到期
所以網頁要求坎尼重新輸入帳密
沒想到重新登入後,出現了以下的畫面

ㄟㄟ,這不對吧,把資訊跟使用者講也就算了
Table Name Column Name 都跑出來了
今天是無心的使用者還好,如果是惡意的使用者...

最近坎尼剛好有玩到 CAT.NET 做靜態源碼分析
也遇到有一條剛好是  Response.Write(Exception.Message)

CAT 給的 Resolution
「Do not provide the user with specific exception information」

「不要提供使用者太多明確的資訊」

的確,尤其像已經用 try catch 處理,卻又將錯誤訊息顯示給使用者看
坎尼可以了解有時就是為了方便除錯,但可能為系統開了個大洞而不自知
(不過上面的實例看來是連例外都沒補捉 ="=

雖然可以說都用 Parameter 做處理,可以避免所有危險字串
今天可以防不代表明日就擋的下來


所以一旦除錯做完就記得把這類的動作給拿掉
免的日後資料外洩說不定還會吃上官司

小小一點感觸  :(

[VS2010] 在 Visual Studio 中加入 InstallShield 專案

坎尼看到 soma 的文章
Building setup and deployment packages in VS 2010

想說沒用過 InstallShield,所以動手來裝裝看

I. Install And Create InstallShield's Project

首先,打開 vs2010 beta2 (還沒裝? 快下載體驗一下吧 :D
(i) 選擇新專案 -> Other Project Type -> InstallShield 2010

(ii)若是第一次打開,visual studio 會自動導到 InstallShield 的網頁
(這邊填些資料就可以下載了

(iii) 下載畫面,下載完請執行安裝檔進行安裝 (vs2010 可以不用關


(iv) 確認安裝成功之後,重覆 (i) 的動作,這次真的跳出 InstallShield 專案啦
(可以看到圖示和第一張抓圖不同


嘩~ 感覺畫面還蠻酷炫的,不知道和以前的版本一不一樣?
這要請用過的人出來說明一來啦  :)


II. Conclusion

坎尼還真的沒玩過用 InstallShield 做安裝檔
以後要是有什麼產品要發佈,就用這個來做好了 哈 :D
不過話說回來,原本的 Setup 專案不知道有沒有什麼突破?

2010年1月5日

[Share] 學習 Chart Control 的資源

今天來介紹些學習 Chart Control 的資源



I. Blogs

Alex Gorev's Weblog
Alex 為 Chart Control Forum 的板主
之前在 Dundas 服務了八年,目前在 SSRS Data Visualization team 工作,
SSRS 及 .NET Framework 裡的 Chart Control 也是來自於這個 team 的研發


Scott Mitchell's blog
Alex 最新一篇推薦的 blog
待會兒會介紹這個 blog 幾篇文章的內容


II. Introduction

現在就來介紹 Scott Mitchell 的幾篇文章,補充一下坎尼 blog 上沒寫過的 XD


(i) Programmatically Generating Chart Images
之前坎尼也介紹過如何匯出 Chart 圖片
Scott 這篇又更加深入的教大家如何加上浮水印
以及如何直接用 email 把 Chart 圖片發送出去


(ii)Adding Statistical Formulas
Scott 在這篇教大家怎麼加入統計公式
主要是利用 Chart 底下 DataManipulator.Statistics 裡提供的靜態方法
另外 DataManipulator 還提供 Financial Formula 的運算,有興趣的人可以看看


(iii)Enhancing Charts With Ajax
坎尼有介紹過替 Chart 加上 javascript 事件
其實把事件替換成 Ajax 方法的呼叫即可
這篇 Scott 教的剛好是坎尼沒介紹的 Ajax 互動事件
想讓使用者有更好的體驗,一定不能錯過此篇



III. Conclusion

參考連結:


2010年1月2日

[Other] Plurk API 使用心得

plurk 在前陣子推出了官方API
坎尼就來講一下小小試玩心得吧

首先是 API 網址 http://www.plurk.com/API
這邊要注意的就是 API 是大寫不是小寫 (話說小寫還真的有人註冊

接著就是的 API 說明部分  (見下圖

藍色部分為 API 呼叫的網址

綠色部分提醒使用者要先登入

紅色的部分為要傳入的 GET 參數,這邊分為 Required Optional
Required 的變數一定要給予正確的值,不然就會回傳 Error Text

Optional 可隨使用者高興給值
但注意的是,Optional 參數不能給空值,否則就會回傳 Error Text
 ex. http://www.plurk.com/API/Timeline/getPlurks?api_key=123&limit=
上面這句會因為 limit 為空發生錯誤回傳

底下黃色部分則為回傳的資料格式,皆為 json 格式的字串

補一張試玩後的成果

沒想到坎尼的第一噗是這麼無聊的故事接龍啊.....

參考網址:
http://www.plurk.com/API
[C#]玩玩Plurk API(Official版)

[C#] ++ operator 探討

上一篇講的太模糊了,所以來補充一下 ++ 的用法
(此篇所講的也可套用至 --、** 等其他運算子中)

I. 題目

題目定義:以 z = 0 為起始,進行算式的 print 動作
注意!! 每個算式開始,z 都會先歸零
  1. z++ + z
  2. z + z++
  3. z + z++ + z
  4. z++ + z++
  5. z++ + z++ + z  
  6. ++z + z++
前兩題為上一篇出現過的題目 (不過 Tim 說他不懂,所以再講一次)
後面四題就是坎尼自己亂寫的,有興趣的人先不要往下看,自己算算看
為了方便理解,坎尼會用 z1、z2、z3 來代替該出現順序的 z 值

II. 解說

Q1. z++ + z
z = 0 , z1 = z++ , z2 = z
z1 = 0  (z++ 執行,但 z1 的值仍為 0)
z2 = 1  (因為前一個數為 z++,所以到這邊時 z=1,得到 z2 = z = 1)
z1 + z2 = 0 + 1 = 1 => 得到 列印值 = 1 , z = 1 

Q2. z + z++
z = 0 , z1 = z , z2 = z++
z1 = 0
z2 = 0 (z++執行,但 z2 的值仍為 0)
z1 + z2 = 0 + 0 = 0 => 得到 列印值 = 0 , z = 1

Q3. z + z++ + z
z = 0 , z1 = z , z2 = z++ , z3 = z
z1 = 0
z2 = 0 (z++執行,但 z2 的值仍為 0)
z3 = 1 (因為前一個數為 z++,所以到這邊時 z=1,得到 z3 = z = 1)
z1 + z2 + z3 = 0 + 0 + 1 = 1 => 得到 列印值 = 1 , z = 1

Q4. z++ + z++
z = 0 , z1 = z++ , z2 = z++
z1 = 0 (z++ 執行,但 z1 的值仍為 0)
z2 = 1 (z++執行,且前一個數為 z++,故 z2 的值為 1)
z1 + z2 = 0 + 1 = 1 => 得到 列印值 = 1 , z = 2

Q5. z++ + z++ + z
z = 0 , z1 = z++ , z2 = z++ , z3 = z
z1 = 0 (z++ 執行,但 z1 的值仍為 0)
z2 = 1 (z++執行,且前一個數為 z++,故 z2 的值為 1)
z3 = 2 (因為前一個數為 z++,所以到這邊時 z=2,得到 z3 = z = 2)
z1 + z2 + z3 = 0 + 1 + 2 = 3 => 得到 列印值 = 3 , z = 2

Q6. ++z + z++
z = 0 , z1 = ++z , z2 = z++
z1 =1 (++z 運算前即會執行,得到 z = 1)
z2 =1 (z++執行,但 z2 的值仍為 1)
z1 + z2 = 1 + 1 = 2 => 得到 列印值 = 2 , z =2

III. 小結

以上各題用程式的執行結果
列印出來的第2個值為計算完的 z 值 (可對照上列算式結果)

如果還有不清楚的部分歡迎留言討論 ^^

Google Spreadsheet 裡用規則運算式

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