Visual Studio 2008中的JavaScript IntelliSense

在我們使用VS2008(Visual Studio 2008)中,排除語言(C#, VB.NET)等不談,其中最重要的就是IntelliSense功能,而在VS2008裡你可以發現,不論是本身的語言支援外,連CSS與JavaScript都有支援。而IntelliSense包括了四項功能:

  • 列出成員( List Members )
  • 參數資訊( Parameter Information )
  • 快速諮詢( Quick Information )
  • 自動完成文字( Complete Word )

這四項功能,我認為每一樣都很重要,而且非常實用。

其中VS2008之中JavaScript支援是指原JavaScript內建物件成員的支援,如Array、String、Math、Date、Number等內建物件,這提供我們在撰寫JavaScript程式碼時極大的便利性,這一點是一般文字編輯器所做不到的。

But,如果是我們自行撰寫的JavaScript Function,是否也能像原JavaScript內建物件一樣支援IntelliSense,這就是今天的重點。


in-line撰寫JavaScript Function

in-line就是說在HTML中的<head>...</head>區段中加入<script type ="text/javascript">...</script>區段,然中在<script>區段中加入自行撰寫的JavaScript Function:



function showName(firstName, lastName) {
    alert("First Name :" + firstName + ", Last Name :" + lastName);
 } 


當你稍後引用時,就能發現VS2008會自動將你撰寫的Function showName()資訊加入IntelliSense之中,讓你享受IntelliSense所帶來的方便。不過在內嵌的JavaScript IntelliSense目前只能提供「參數個數」及「名稱資訊」。


在外部*.js中提供快速諮詢及參數資訊之說明文字提示

    這部份我先說,我也不知道為什麼VS2008中在內嵌的JS裡無法使用以下提供的方法,以下提供的方法只能在外部獨立的JavaScript檔案使用。這個方法正式名稱為「XML Code Comment」(XML程式碼註解)。

我們先在外部*.js中新增Function,然後在Function加入XML程式碼註解。

  • ///<summary></summary>,快速諮詢資訊
  • ///<param name="參數名稱" /></param>
  • ///<returns type="型別"></returns>,回傳值資訊
Tag之前都必須加上三條斜線(///),不可省略。


function showNameTime(firstName, lastName) {
    ///<summary>顯示使用者的姓名</summary>
    ///名字</param>
    ///姓名</param>
    alert("First Name :" + firstName + ", Last Name :" + lastName );
}
function getTime() {
    ///<summary>目前時間</summary>
    ///<returns type="string">回傳hh:mm:ss格式</returns>
    var date = new Date();
    var dateTime = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
    return dateTime;
} 

現在把這個外部*.js引用到使用的網頁中(*.html, *.aspx),然後在需要使用的地方打上Function Name,你應該就可以看到與內嵌不一樣的效果,是完整度更高的JavaScript IntelliSense。


多個*.js檔案之間的JavaScript IntelliSense參考

既然這個 「XML程式碼註解」的方法,只能使用在「外部*.js」,那如果是在多個*.js的情況下,那是否可以「互相」參考後來產生對方*.js的JavaScript IntelliSense,答案是可以。

showName.js裡有Function showName(),今天我有另一個getTime.js需要使用到showName.js,我想讓getTime.js支援showName.js的JavaScript IntelliSense,你只需要在getTime.js的第一行加入:


///<reference path="showName.js" />

然後你就能發現在撰寫getTime.js時也能參考到showName.js裡的IntelliSense,而且這種參考是可以雙向的,在showName.js中如果需要使用到getTime.js的Function,你也能在showName.js的第一行使用這個XML程式碼註解的方法。


強制更新JavaScript IntelliSense

也就是有時候如果你已經依照上述方法設定完成,但VS2008還來不及更新JavaScript IntelliSense,我們也可以手動更新這個JavaScript IntelliSense:

「編輯」→「IntelliSense」→「更新JScript IntelliSense」

這樣就可以命令VS2008立即更新JavaScript IntelliSense,讓我們馬上可以使用JavaScript IntelliSense所帶來的便利。

ASP.NET網頁快取(Cache)架構圖

以下1什麼1.1什麼的看不懂,請直接拉到下方去吧!

Cache快取

參閱: Cache Configuration,快取組態, Cache Removal,快取移除

1. Page output caching網頁輸出快取

1.1 Full page caching完整網頁快取

1.1.1 <%@ OutputCache Duration="3600" VaryByParam="None" %>

1.1.2 Response.Cache

1.1.2.1
        1. Response.Cache.SetExpires(DateTime.Now.AddSeconds(3600))
        2. Response.Cache.SetCacheability(HttpCacheability.Public)

1.1.2.2 Response.Cache --> Page.Response.Cache --> HttpResponse.Cache --> HttpCachePolicy

1.2 Partial page caching部分網頁快取

1.2.1 Control caching

1.2.1.1
        1. 只快取指定的區塊
        2. User Control, *.ascx

1.2.1.1.1
          1. 於*.ascs加入指示
          <%@ OutputCache Duration="3600" VaryByParam="None" %>

1.2.1.1.2
          2. 於*.ascs.vb加入PartialCachingAttribute類別
          _    '<-- 指定使用者控制項快取時間
          Partial Class UserControls_Name ...

1.2.2 Post-Cache Substitution快取後置換

1.2.2.1
        1. 指定的區塊不要快取
        2. Substitution
        3. AdRotator

1.2.2.1.1 2.1 Substitution中必須使用「Shared」共用/靜態方法

1.2.2.1.2 3.1 AdRotator內部已實作快取後置換

2. Application data caching應用程式資料快取

2.1 Key / Value (索引鍵/數值)

2.1.1
      Cache("FirstName") = "KingKong"
      Cache("LastName") = "Bruce"

2.1.1.1
        1. Response.Cache屬性 --> System.Web.HttpResponse.Cache
        2. Cache("")物件 --> System.Web.Caching.Cache類別

2.2 Cache.Add()

2.2.1
Public Function Add( _
key As String, _    '快取資料項目索引鍵
value As Object, _    '要加入至快取的項目值
dependencies As CacheDependency, _    '相依性,如無為Nothing
absoluteExpiration As DateTime, _        '絕對期限
slidingExpiration As TimeSpan, _        '滑動期限
priority As CacheItemPriority, _        '優先權
onRemoveCallback As CacheItemRemovedCallback _    '當物件從快取移除時,會呼叫委派(如果有)
) As Object

2.2.1.1 Cache.Add()方法無多載

2.2.1.2
        1. 絕對/滑動期限兩者只能選擇一個來使用
        2. 如使用absoluteExpiration則slidingExpiration參數必須為NoSlidingExpiration
        3. 如使用slidingExpiration則absoluteExpiration參數必須為NoAbsoluteExpiration

參閱: Expiration,資料過期 (絕對/滑動期限)

2.2.2
Cache.Add("UserName", txtUserName.Text, Nothing, _
System.WebCaching.Cache.NoAbsoluteExpiration, _
System.Web.Caching.Cache.NoSlidingExpiration, _
System.Web.Caching.CacheItemPriority.Default, _
Nothing)

2.3 Cache.Inser()

2.3.1
1. Cache.Insert(key, value)
2. Cache.Insert(key, value, dependencies )
3. Cache.Insert(Key, value, dependencies, absoluteExpiration, slidingExpiration )
4. Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback )

2.3.1.1 Cache.Insert()方法本身為多載型式

S1.
1. 針對ASP.NET Page頁面輸出的HTML進行快取。
2. 快取HTML物件是「視覺化」的物件內容。
3. 多使用<%@ OutputCache%>宣告。
(Page output caching網頁輸出快取)

S2.
1. 針對應用程式內的資料快取(DataSet, Key/Value, ...)
2. 必須使用 Cache(" ") Is Nothing 判斷是否有快取資料,僅使用 IsPostBack 來判斷,會有問題
(Application data caching應用程式資料快取)

A1. Cache Configuration,快取組態

參閱: Cache快取

A1.1 Machine.config/Web.config

A1.1.1 網頁輸出快取組態

A1.1.1.1

A1.1.1.1.1 影響整個網站所有頁面

A1.1.1.2

A1.1.1.2.1 只影響套用的頁面

A1.1.1.3 個別網頁(Individual Page)

A1.1.1.4 使用者控制項

A1.1.2 快取API組態設定

A1.1.2.1

A1.1.2.1.1 影響網站全域應用程式

A1.1.3 SQL快取相依性組態設定

A1.1.3.1

A1.1.3.1.1 只影響套用的頁面

A1.2 <%@ OutputCache CacheProfile="Cache3600Seconds" VaryByParam="None"%>

A2. Cache Removal,快取移除

參閱: Cache快取

A2.1 自動移除

A2.1.1 Scavenging,記憶體不足

A2.1.1.1 CacheItemPriority

A2.1.1.1.1 NotRemovable > High > AboveNormal > Normal(Default) > BelowNormal > Low

A2.1.2 Expiration,資料過期

參閱:
1. 絕對/滑動期限兩者只能選擇一個來使用
2. 如使用absoluteExpiration則slidingExpiration參數必須為NoSlidingExpiration
3. 如使用slidingExpiration則absoluteExpiration參數必須為NoAbsoluteExpiration (絕對/滑動期限)

A2.1.3 Dependency,相依性改變

A2.1.3.1 1. Key Dependence
    一個快取項目相依於其他數個快取項目

A2.1.3.1.1 直接使用CacheDependency類別

參閱: 2. File Dependence
    相依於外部檔案

A2.1.3.2 2. File Dependence
    相依於外部檔案

參閱: 直接使用CacheDependency類別

A2.1.3.3 3. SQL Dependence
    相依於MS SQL Server中資料表的變更

A2.1.3.3.1 使用SqlCacheDependency類別

A2.1.3.4 4. Aggregate Dependence
    彙總相依性,相依於多個項目

A2.1.3.4.1 使用AggregateCacheDependency類別

A2.1.3.5 5. Custom Dependence
    在自己程式碼中建立的相依性設定。

A2.1.3.5.1 自行繼承CacheDependency類別來實作符合需求的相依性類別

A2.2 手動移除

A2.2.1 Cache.Remove("key")


請參考:
1. http://share.xmind.net/kkbruce/cache-cache-1/

2.EmbedViewer


3. PNG圖下載

結婚要補稅

  你有在工作嗎?
  你有在賺錢嗎?
  你的收入需要報稅嗎?

  只能說,我不好好讀書,而且是全台灣最重要的一本,「萬萬稅」的那一本,我能生誰的氣?

  話說,我在9x年1月結婚,日子一切平安順利,而在同年5月是每個有工作的人最應該盡「義務」的時候,「我」這個豬頭,也沒有想那麼多,就給他「合併」申報下去,結果算一算,還不錯,我們小倆口的收入還未高到要交稅,當然,交不了稅也不知道是要高興還是傷心?

  誰知,這個月初收到國稅局的通知,說要補交我那9x年那年的稅金…都已經是多久以前的事了,是詐騙的嗎?上網查了查國稅局的電話,直接打過去問比較保險。

  結果…我好傷心,我這個豬頭,我…不能怪?aiwa?這個國家的可惡可稅之處。

故事:

  2009年1月小布與小雪結果,同年5月報稅時,小布心想,我們所得稅的計算是從前年5月到今年4月,也就是說所得稅計算是從2008年5月1日到2009年4月30日止,而小布與小雪是在這個計算期間內結婚,所以很直覺的在2009年5月使用了電子申報申請了兩人「合併申報」的資料。

  時間~咻~咻~咻,二年後,2011年9年小布收到一張國稅局的補稅通知,小布看了看實在看不懂,而且還是補二年前的稅,有沒有搞錯?還是這又是詐騙術?小布心想,還是上網查一下國稅局的電話(不敢打單子上的電話),直接打過去問比較快。

  嘟~嘟~嘟,你好,這是國稅局。
 
  小布表明身份及來意後,國稅局:好的,我查查。

  「小布先生,經過我們的查詢,是沒有錯誤,因為你是在09年1月結婚,所以你在09年的所得稅不能用合併申報,但如果你是在08年結婚的話就可以。」國稅局回答。

  小布聽了真的有點不敢相信,回問怎麼會這樣,國稅局只淡淡回了一句:「沒辦法,法令就是這樣規定,而且新婚的很多人有你這樣的情況,通常我們是會罰款,但碰到這種情況的,我們通常都會通融,只追原本的稅金。」

  在追交的過程裡,因為沒有「單據」(2009年已寄出),所以小布所有的扣除額都是用最低來計算,也算是變相的罰款,所以心裡有萬個「十日十八干」及億個「林娘卡好」,但只能怪小布自己第一次結婚,第一次合併申報。

  可憐的小布,花錢買「合併申報」的經驗。

  以上故事,純屬事實,如有雷同,絕非巧合。

數位式競爭--全球軟體公司的致勝策略(1)--前言

  Secrets of Software Success:Management Insights from 100 Software Firms Around the World~By Detlev J. Hoch, Cyriac R. Roeding Gert Purkert, Sandro K. Lindner, Ralph Muller

  這本書為民國89年出版,已經在我書架上很多了年,是我讀大學時的教科書,老師花了一個學期就只上這本書,當時讀起來沒什麼感覺,頂多只是為了交報告而讀,但很奇怪,它就是一直在我的書架上,雖然十多年來,書架上的書已經換了好幾回,尤其是資訊類的書,換的速度之快連我都怕,不過一本好書一定有存在的價值,不會因為時間的變動而有任何改變。

  我每天可以說都在與技術文件為「舞」,只是不知是我看它跳還是它看我跳。就這樣有一天,不知為何,好像「它」在跟我招手,然後說,來看看我吧,離上次你讀我已經是九年多前的事了,我能給你一些「明牌」!

  古人說:「不經一事,不長一知。」

  你沒有經歷過的事,說再多感受就是有限。但九年後的今天重讀本書,真是感受良多,這本書應該是十年前版的「由A到A+」。我一直很佩服國外的研究學者,能花那麼多時間、精神來研究出原本為「隱性」的知識,讓想要更上一層樓的人可以有方法可循。

  看完這本書後,讓我心有戚戚,十多年前的故事,現在每天還是在不斷重覆發生,不管是成功的故事,還是失敗的故事。我想這可能是知識的傳遞、了解到最後的落實還有很大一段差距。如果你從事軟體相關產業,而還沒有看過這本書,我非常建議你買來看看(我不知道還買不買的到)。

Vista要不到DHCP IP-Part2

  在「Vista要不到DHCP IP」說著一個目前無解的問題,也查不到什麼原因。

  新採購的電腦,原裝都已經是Vista,還可以升級為Windows 7,但依然會碰到要不到DHCP IP的問題,不過這一次花了點時間測試,發現以下情況:

  1. Vista ↔ Switch ↔ Router
  2. Vista ↔ New Switch ↔ Router
  3. Vista ↔ Router
  在不經過Switch的情況下,或使用較新的Switch(5 port,購買一年內),Vista就可以正常要得到DHCP發出的IP,所以我合理猜測是Vista與公司這些「舊」型的Switch相容性不佳所造成。

  但我們也不可能馬上換一台16/24 port Switch,所以還是要想辦法解決。
網路上有人提供把TCP/IP中IPv6選項移除。(我測試是沒有用)

提供解決Vista要不到DHCP IP的方法

方法一:更改網路卡速率



  電腦 → 管理 → 裝置管理員 → 網路介面卡 → 選擇NIC → 內容 → 進階 → 連線速度與雙工模式(每張卡翻譯不一樣) → 數值 → 隨便選一個

  網路卡會自動重新設定,然後你就可以看到網路卡正常運作。

  我想(猜測),我們現在的網路卡都已經是10/100/1000的模式,但公司舊型Switch還是在10/100,在網路卡偵測Switch/Router的速率時,產生了問題,以造成了你會發現網路卡有發出的封包,但完全沒有回應(接收)的封包。

  但這個設定方法還是有個麻煩的地方,也就是只要電腦重開機,你就必須再重新設定一次,改變網路卡的連線速度。這個地方我想還是跟上面一樣,雖然我們設定了網路卡的速率,但Vista預設在電腦啟動時,還是會去「偵測」Switch/Router的速率,結果又造成了問題。

方法二:加裝網路卡



  現在的電腦主機板已經很少沒有內建網路卡,但如果你手邊還有10/100的網路卡,或10/100/1000的網路卡(這個我沒試過),那就不要使用主機板內建的網路卡,自己加塊網路卡,目前我都可以使用這個方法正常解決這個「不知道原因」的問題。