移除Visual Studio 2005與2008

移除2005:http://msdn.microsoft.com/zh-tw/library/ms246604(VS.80).aspx
重點在2.2.2.4節:

2.2.2.4. 手動解除安裝 Visual Studio 2008。


您必須按照下列順序解除安裝 Visual Studio 2008 元件。
開啟 [新增或移除程式] (Windows Server 2003 和 Windows XP) 或 [程式和功能] (Windows Vista 和 Windows Server 2008)。

  1. 移除 [Microsoft SQL Publishing Wizard]。
  2. 移除 [Crystal Reports Basic for Visual Studio 2008]。
  3. 移除 [Visual Studio 2008 版 (x64) Crystal Reports Basic 64 位元執行階段]。 只有在 64 位元的電腦上安裝了 Visual Studio 時,才需要執行這個步驟。
  4. 移除 [Microsoft Windows SDK for Visual Studio 2008 SDK 參考組件和 IntelliSense]。
  5. 移除 [Microsoft Windows SDK for Visual Studio 2008 .NET Framework 工具]。
  6. 移除 [Microsoft Windows SDK for Visual Studio 2008 Win32 工具]。
  7. 移除 [Microsoft Windows SDK for Visual Studio 2008 標頭和程式庫]。
  8. 移除 [Microsoft Windows SDK for Visual Studio 2008 工具]。
  9. 移除 [Microsoft Visual Studio 2008 遠端偵錯工具]。 只有在 64 位元的電腦上安裝了 Visual Studio 時,才需要執行這個步驟。
  10. 移除 [Microsoft SQL Server 2005 Express Edition]。
  11. 移除 [Microsoft SQL Server Native Client]。
  12. 移除 [Microsoft Device Emulator 3.0 版]。
  13. 移除 [Windows Mobile 5.0 SDK R2 for Smartphone]。
  14. 移除 [Windows Mobile 5.0 SDK R2 for Pocket PC]。
  15. 移除 [Microsoft SQL Server Compact 3.5 For Devices]。
  16. 移除 [Microsoft SQL Server Compact 3.5 設計工具]。
  17. 移除 [Microsoft SQL Server Compact 3.5]。
  18. 移除 [Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime]。
  19. 移除 [Microsoft Visual Studio Tools for the Microsoft Office system (Runtime 3.0 版)]。
  20. 移除 [Microsoft .NET Compact Framework 3.5]。
  21. 移除 [Microsoft .NET Compact Framework 2.0 SP2]。
  22. 移除 [Microsoft Visual Studio]。
  23. 移除 [Microsoft Visual Studio 網路撰寫元件]。
  24. 移除 [Microsoft Document Explorer 2008]。
  25. 移除 [Microsoft Visual Studio 2008 64 位元必要條件]。 只有在 64 位元的電腦上安裝了 Visual Studio 時,才需要執行這個步驟。
為什麼要移除?當然是為了升級至Visual Studio 2010。

牙醫師,您好!

牙齒,是我一生最大的敗筆。

小時候不懂事,不愛刷牙,現在30出頭歲就已經有3分之1 到2分之1的牙是壞的,一生看最多次的醫生是牙醫。所以當小朋友出生後,我一直非常認真的保護及照顧他們的口腔及牙齒。

大 寶貝的牙齒已經長齊了,一直想帶她去塗氟,剛好上週有空所以就帶著大寶貝去找牙醫師。在等待的過程裡,明明是預約4點半,但已經4點快45分了怎麼還沒換 我們,平常我看診時間都很準時,等到小姐叫我去診間時,牙醫師剛處理完前一個小朋友,可能是小朋友不像大人那怎乖,時間比較難掌控。

終 於換我們了,牙醫師先是過來,說了聲對不起,讓我們等那怎久,我回答說沒關係,然後牙醫師很有禮貌的伸出手來,我心想小兒的牙醫師怎麼那麼有禮貌,所以我 會很有禮貌的回應他,伸出手如牙醫師「握手」,牙 醫師先是有點「怔」了一下,然後對我說:「我 是要你手上的病歷!」 媽呀!當下…


牙醫生先是問了一堆問題,做了一 些記錄,然後才開始檢查、塗氟,

簡單記錄寶貝要改進的地方:
  1. 一歲後,不要用奶瓶喝 mike(不要喝配方奶,喝牛奶)。
    用杯子喝。
  2. 不要吃奶嘴。

檢查中大寶貝牙齒有外翻情況,當下最急的是「不要吃奶嘴」,牙醫師說:「奶嘴」是所有項目中最難「戒」的。當下是 有點擔心,不過寶貝就是寶貝,非常不簡單。

晚上睡前的挑戰來了,我們平常在家是不給大寶貝吃奶嘴的,而是睡前才給她 吃,睡著了我們就拔起來。睡前大寶貝對著我們說:「嘴嘴、嘴嘴」「嘴嘴、嘴嘴」,我們摸摸她的牙齒,然後很理性跟她說:「牙醫師說,你牙齒壞了,妳不能吃 嘴嘴了,知不知道,好不好?」結果大寶貝居然回答:「好」,而且真的沒有吵鬧,頂多是在床上躺一躺,然後又爬起來問:「嘴嘴咧?」我們就在回答一次:「牙 醫師說,你牙齒壞了,妳不能吃嘴嘴了,知不知道,好不好?」她就會回答說:「好」然後有點失望的躺回床上。

大寶貝的 寶貝(奶嘴),牙醫師口中最難戒的,我和婆婆都驚訝,她皮很皮,她乖很乖,她一歲八個月,就能有如此的表現,我相信,她未來一定不簡單。

戒奶嘴,一天完成。

MSDN訂閱啟用及下載

如果你不清楚MSDN訂閱及TechNet Plus訂閱的差異,請參考這一篇:「比較 MSDN 與 TechNet Plus 訂閱」,兩者目標不一樣,價格也差很多,So...看清礎。

如果公司有在開發.NET Framework程式,那一定要有Visual Studio這套開發工具,單買實在不夠吸引人,就像很早之前寫ASP網頁時,大概都是買Dreamware一樣,但你能有更好的選擇,就是加一點點錢買「Visual Studio Professional with MSDN」,然後透過大量授權Open Value方案還可以三年分期付款,實在很划算,如果你第二年再續約的話,還會幫你升級更上級的版本,例如,第一年買Professional,第二年續約會升級為Premium。

MSDN訂閱使用上比較麻煩,你必須先到「大量授權服務中心」去建立一個可以設定MSDN訂閱帳號(Email),然後此Mail會收到啟用信,再依啟用信的內容到「MSDN的啟用訂閱」來啟用此Mail帳號,再來就可以登入MSDN訂閱下載了。

ps.. 大量授權服務中心的所有設定都會有「時間差」,也就是說都不是「即時」的,通常設定完都會跟你說要等N個小時。

第一次下載發生一個問題,我要下載Windows Vista及Windows 7時,我選擇語言為:「Chinese - Traditional」,非常奇怪的都找不到資料,只有一個「Windows Automated Installation Kit for xxx」的下載項目,但其他語言都能正常出現所有完整下載項目。

我確定我買的MSDN訂閱可以下載這些項目,最後沒辦法只好去寫信去問(twwpo@microsoft.com),結果得到一個我都沒想到的答案:
感謝您連繫台灣微軟客服中心,敝姓?,很高興能夠為您服務。關於您詢問事項:MSDN下載一事,由於台灣地區語系分為Chinese–Taiwan與Chinese-Traditional語系兩種,請點選語言選項更換語系即可檢視所需軟體清單,若是後續您仍有其他問題,歡迎您再來信或來電洽詢,謝謝您。
看圖吧:


很直覺我們都會選「Chinese-Traditional語系」,也不會去往下拉,誰會去想還有一個:


「Chinese–Taiwan」,Taiwan我喜歡,但正體中文還有分台灣不台灣,真怪。未來如果你有機會使用MSDN訂閱,切記選「Taiwan」哦!不然會像我「找不到、找不到、還是找不到!」

Exchange 2003轉送(Mail Relay)設定有漏洞

話說昨天發現公司Exchange Server不正常,連入一看~媽呀,怎麼SMTP有一堆連線!而且每秒都有數筆到數十筆數SMTP連線,而且"佇列"中有一堆發不出去信,而且查了佇列中的信件,我非常確定都是"廣告信"、"色情信"之類。


Exchange SMTP Session

呀!怎麼會這樣,我們的Mail Server被當成轉寄跳板。但查Log看起來都是正常連線,連線IP是內網的IP,所以我們在Exchange中轉送(mail Relay)限制設定不會擋下此IP的轉送。但非常怪奇的是這個內網IP是我們的Gateway Router,Router也會中毒發垃圾信嗎?不"太"可能!

內網有人中毒嗎?公司所有電腦都有安裝防毒軟體,但不無可能,我緊急發出通知,中斷所有Client網路,只留下Exchange與Router的線路,原本想一台一台找是那一台Bingo了,結果"嚇一跳",Exchange的SMTP還在發信,Server中毒嗎?被入侵嗎?直覺是不太可能,Service Pack我都有乖乖上,而且有防火牆保護,防毒軟體也正常運作,沒有任何中毒訊息,實在看不出有任何異狀!!!


我一直在想那個連線IP的問題。看著看著想出了原因。各位先參考這篇「如何開啟 Exchange 的轉送設定(Mail Relay)」最後第五點的圖片,你會發現它是設定整個網段,而Exchange 2003的資料也是這樣教,那當然我們就這樣設,而且"多年"來也沒出事。

今日不出事,不代表明天就沒事。

原因很簡單:Spamer → Router → Mail Relay Server

這些Spamer會一直Scan網路上所有的Mail Server,然後找「替死鬼」,也就是Mail Relay有問題的Mail Server,然後透過這些Mail Server來幫忙來寄送垃圾信,人家反查時就會查出「人是你殺」(台)這種戲情!

從Router Forward進來的封包會帶「Router內網的IP」,而Router的內網IP也含在整個網段裡,所以Exchange Server認為是正常的要求就幫你轉寄了。Spamer成功達到目的,而我也成為受害者。

最後修改SMTP 轉送設定:


SMTP轉送設定(12)

SMTP轉送設定(2)

SMTP轉送設定(3)

IP的設定是讓你方便,但你最好改使用以上的設定,一個一個加入,只給必要的IP轉送的權限。如果一個一個加入對你來說有管理上的麻煩,那最好把「不考慮上述清單…」取消勾選,只讓通過權限認證的使用者才可以轉送。

Visual Basic -- 區域型別推斷

區域型別推斷(Local Type Inference)


區域型別推斷是讓你在宣告區域變數時,可以不必使用As宣告其明確型別的一種語法。

程式一:區域型別推斷
Dim Name = "KKBruce"
Dim Height = 173
Dim Friends = New String() {"Mary", "Kelly", "Cindy"}

在Dim之後沒有As Type的宣告,Visual Basic的Compiler會透過後面的值或運算式(Expression)來判斷型別,例如"KKBruce"這個值很明顯是"字串(String)型別",所以Name變數的型別就會是"String"。所以這樣判斷的動作我們稱「區域型別推斷(Local Type Inference)」。

隱含型別(Implicitly Type)

程式一裡的Dim Name與Dim Height稱它「隱含型別區域變數」,因為從宣告程式碼本身是看不出型別,而必須經過"區域型別推斷"的動作後才能判定型別,所以稱"隱含"不是沒有型別。

程式一裡的Dim Friends稱它「隱含型別陣列」,單從Dim Friends是無法判定,因為後面的值是「數值陣列」,經過"區域型別推斷"後,Dim Friends就會成為「數值陣列」型別。

匿名型別(AnonyMous Type)

匿名型別會與隱含型別一起使用。

程式二:匿名型別
'Dim person為隱含型別
'New With {...}為匿名型別
Dim person = New With {.Name = "KKBruce", .Height = 173}
Response.Write(person.Name) '結果為KKBruce
Response.Write(person.GetType())

你會發現New With本身沒有"型別(Type)"所以稱「匿名型別」。別外可以發現此person物件,裡面包含了String型別和Integer型別(它到底是String還是Integer?),這在以前是做不到的。而person到底是什麼型別?我們可以從person.GetType()得知,Visual Basic會在Compiler時給它一個「VB$AnonymousType_0`2[System.String,System.Int32]」的匿名型別,此匿名型別裡有String及Int32兩個複合型別。


實例

以上不論是區域型別推斷、隱含型別、匿名型別,有很大一部份都是為了LINQ及.NET Framework 4所準備,但在一般情況下,也是可以使用。

程式三:隱含型別取得所有網頁上控制項
'c是隱含型別
For Each c In Me.Form.Controls
    If TypeOf c Is TextBox Then
        ' Do Some thing ...
    End If
Next

原始的c應該是「c As Control」(或是使用c As Object),但這裡使用了隱含型別來替代,透過這個For Each方法,可以取得目前網頁上所有控制項,然後再進行應用。