Ajax with Classic ASP using jQuery(代替远程脚本)

Standard

My simple article on Ajax with Classic ASP is one of the most popular on this site. So I thought it’s about time I updated it to show how to use jQuery to Ajaxify a Classic ASP page.

First of all, why use jQuery when the previous article works? Well, jQuery is a library that is designed to help web developers work with Javascript in a much more streamlined way. Internally, it handles a lot of the nonsense that developers have to work with in terms of cross-browser incompatibilities and it’s syntax and chaining abilities generally results in far less code being written. A lot more information about jQuery can be found here along with the downloads.
The scenario I shall use will stay the same – an initial Select box containing the Company Names from the Northwind database, with the address and other details being retrieved asynchronously when a company is selected. These will be displayed in a specific area on the page. There is one difference – apart from the use of jQuery – in that the data relating to the company details will be generated as a JSON string, rather than a snippet of html. But let’s start with the page that the user will see:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<%
strConn = "Data Source=127.0.0.1;Initial Catalog=NorthWind;Integrated Security=SSPI;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn
Set rs = Conn.Execute("SELECT [CustomerID], [CompanyName] FROM [Customers]")
If Not rs.EOF Then
arrCustomer = rs.GetRows
rs.Close : Set rs = Nothing : Conn.Close : Set Conn = Nothing
%>
<form>
<select name="CustomerID" id="CustomerID">
<option> -- Select Customer -- </option>
<%
for i = 0 to Ubound(arrCustomer,2)
    Response.Write "<option value=""" & arrCustomer(0,i) & """>"
    Response.Write arrCustomer(1,i) & "</option>" & VbCrLf
next
%>

</select>

</form>
<%
Else
  rs.Close : Set rs = Nothing : Conn.Close : Set Conn = Nothing
  Response.Write "<p>Something bad went wrong</p>"
End If

%>
<div id="CustomerDetails"></div>
</body>
</html>

The VBScript connects to a local SQL Server Northwind database and obtains the ID and the Company Name for all the Customers. Assuming that they were retrieved succesfully, they are placed in an array through the RecordSet.GetRows() method. The array is iterated through, and elements are dynamically added to the page with the ID as the Value, and the CompanyName as the text that the user sees. In the original example, the had an onchange event handler hard-coded in it. This time it doesn’t. jQuery is all about “unobtrusive” Javascript and has a nice way to manage the registration of an event handler with an html element. But before we get to the Javascript, we’ll deal with the code that returns individual Customer Details. This will be a separate .asp file called FetchCustomers.asp:

This is a fairly standard piece of VBScript data access. It connects to the database and retrieves the company record associated with the CustomerID value passed in the QueryString. It uses parameters to protect against any chance of SQL Injection. If successfully retrieved, a JSON string is constructed from the record. All the doubling of quotes in the VBScript code makes it difficult to see exactly what the format of the output will be, so here’s how it would appear if the record was for GROSELLE-Restaurante:

{“j”:[{“__type”:”Customer”,”CompanyName”:”GROSELLA-Restaurante”,”Address”:”5ª Ave. Los Palos Grandes”,
“City”:”Caracas”,”Region”:”DF”,”PostalCode”:”1081″,”Country”:”Venezuela”,”Tel”:”(2) 283-2951″}]}

This is a Javascript object, which I have called j, which contains one property. The property is an array of nested Javascript objects. This array only contains one element or object, which has a number of properties with their values set. Now it’s time to look at the Javascript that will be responsible for calling the page, passing the querystring values and managing the JSON that’s returned in the Response:

$(function() {
   $('#CustomerID').change(getCustomer);
});

function getCustomer() {
$.ajax({
type: "GET",
url: "FetchCustomer.asp",
data: "CustomerID=" + $('#CustomerID').val(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
var customer = (typeof response.j) == 'string' ? eval('(' + response.j + ')') : response.j;
$('#CustomerDetails').empty();
$('#CustomerDetails').append('

' + customer[0].CompanyName + '
' +
customer[0].Address + '
' +
customer[0].City + '
' +
customer[0].Region + '
' +
customer[0].PostalCode + '
' +
customer[0].Country + '
' +
'Tel: ' + customer[0].Tel + '

');
}
});
}

After linking to the minimised jQuery file that’s available from Google Code, we get to the script that it specific to the page. The first instruction finds the element with the id of CusomterID (which is the , and adds an event handler to the onchange event. In this case, the getCustomer() function is called. Then the getCustomer() function is defined. Using jQuery’s built-in AJAX functionality, a GET request is prepared which calls the FetchCustomer.asp page. The selected value from the list is passed in as a QueryString parameter. If the call is successful, the Response is first validated then eval() is used to deserialise the JSON string back into Javascript objects.
From there, the div with the id “CustomerDetails” is cleared of any existing content, and the properties of the customer object are written to the div instead.
Whether you return JSON or formatted html is up to you. JSON carries a significantly smaller overhead in terms of payload over the network, but requires more code to manage on the client. Sometimes you may have no choice, for example if you are usig an external web service that returns JSON. In this case, as you have no control over the returned content, you should not use eval() to deserialise the JSON string. If you dig around among the jQuery plugins, you will find some that have been created purely to validate and deserialise JSON of unknown origin safely.

易筋洗髓經

Standard
    易筋洗髓經‧又訣(三等)

〔原文〕
入手起功,漫用呼吸。未納菁英,先吐濁積。一吐一納,生新去余。行至坐身,乃用呼吸。學成之後,清濁分析。初勢既畢,呼吸如式。恐有濁礙,酌量追逼。一圖數圖,多寡不拘。俟濁盡淨,呼吸隨及。純清無濁,功起即起。
〔譯文〕
凡是練初步的立身動功時,不要隨便運用呼吸法。在這些功法中,雖名為呼吸,其實都是配合呼吸的吐納法。前面「呼吸論」講過,要「先吐納,後呼吸」。因為初步練功的人,身內有濁氣阻礙,菁英之氣是無法進入的。故在未納入菁英之氣前,先吐積聚的濁氣,然後再納清新之氣。這樣一吐一納,體內清新之氣不斷生長,而多餘的濁氣則不斷排除。當練功到坐功的階段,才可以運用呼吸法。按照這個程序漸進修煉,到進行坐功時,體內運用呼吸法,清升濁降就較明顯。

當然,立身的動功和坐身的靜功是相間為用的。一般說,練完動功再練靜功,就可用上述呼吸方法。不過,初步練動功,一個勢子下來,濁氣不一定能排完。故而在靜功之初,也還可以加適當吐納法,把濁氣排盡。選擇立身動功,可選一個連續做,也可以選擇幾個一個接一個做,總之要等濁氣排盡,才可以行靜功呼吸法。到體內沒有濁氣皆是純清之氣時,一入靜功,內氣的陰陽升降即刻就能出現。

按:要達到「純清無濁,功起即起」的內氣陰陽升降,是要經過一定階段的動功靜功修煉過程。而這個過程因人而宜,沒有準確的時間界定。一般說,身體素質好,領悟能力強,能平心靜氣,消除雜念,就來得快,反之則來得慢。再者,內氣升降循環是真實現象,而有些氣功教人以意運氣,常不免出現有意而無氣的假循環空轉周天,此須學者認真體悟,切莫誤入歧途。

    易筋洗髓經‧呼吸訣(次第)

〔原文〕
一呼水生,一吸火聚。再吸再呼,火騰水起。三度交關,坎離相濟。吸七呼七,週而復始。二七十四,重複不已。三七二一,三復功畢。九九八一,純陽至極。運行三百,六十五氣。往來無窮,周天之紀。先吸後呼,達摩真諦。圖曰呼吸,俗語如此。導引內功,呼吸第一。無多無少,不徐不疾。氣不可湊,志不可移。亦不可餒,無過不及。出入不聞,定氣調息。

〔譯文〕
呼吸法的妙用是,呼為生水,吸為聚火。(按:水為精,火為神。生水即生精,聚火即聚神。)呼吸的連續運用,在於精要活,神要靈,這叫做火騰水起。在功中,呼吸法一般要經過三次,方能達到坎離相濟,即精神相濟。每一次中,意識著重在吸上七次,然後著重在呼上七次(按:所謂著重,只是觀察而已,非為著意或督促呼吸。)這樣,每一次就有七呼七吸共十四次。說是次數,其實並沒有間隔,是不斷重複。這樣做三次,就有三七二十一對陰陽呼吸。做夠這三次的反覆呼吸,方可收功。日日堅持行功,會使身中濁陰漸消,純陽漸長。當濁陰消盡的時候,就是純陽圓滿至極的時候。陽數最大者為九,純陽至極乃是最大陽數相乘所致,故稱九九八十一度數。一年有三百六五天,天天行功,一日合一日之身內周天,一年合一年自然周天,所以這周天之紀就是往來無窮。周天能往來無窮,不就能生生不息嗎?

呼吸法是先用吸後用呼,這是達摩祖師呼吸法的真諦,不能錯用。雖然圖徑上說是呼吸,它的內含是調節陰陽,升清降濁,因為人們說呼吸容易懂,就用了呼吸這個說法。在引導內功中,調節呼吸是第一重要的。(按:這裡強調呼吸法在導引內功中使用,十分得當,此是為一般初學者所設之法。若內藥已產,一入功便可心腎相交,便無需導引,無需再用呼吸法也。)呼吸法關鍵在順其自然,一呼一吸,既不能多,也不能少,既不要慢,也不要快。人體本有呼吸的自然調控系統,只能順應它,而不能為了湊夠呼吸法規定的次數而加速。功夫的完成不是靠湊數,而是靠堅定不移的意志。

呼吸法固然是順其自然,然而又不能撒手不管,如果撒手不管,那還要呼吸法做什麼,那不過跟常人不練功的呼吸是一回身。那種做法只能是餒氣。順其自然就是既不能過多,也不能達不到目標。

呼吸法要循序漸進,先是外呼吸,比較短,比較粗,漸漸轉入內呼吸,就漸漸長、漸漸細。最後,外不入,內不出,鼻孔無絲毫呼吸的感覺,這才達到了定氣調息的目標境界。

按:呼吸之出入不聞狀態,就是胎呼吸狀態。胎呼吸狀態境界有三大遞進層次:第一層次,澎湃鼓蕩;第二層次,細蘊潤澤;第三層次,空明通徹。

    易筋洗髓經‧呼吸歌(總訣)

〔原文〕
一吸通關,一呼灌頂,一屈一伸,一濁一清。雷鳴地震,清濁攸分,一升一降,一陽一陰。上下順逆,陰陽交生,河車搬動,轆轤時行。三百六五,運煉丹成。

〔譯文〕
吸,可以使丹田氣沿督脈上升而通關;呼,則可使濁氣下降,腦部空虛,從而為督脈氣上升灌頂創造了條件。吸為屈縮,呼為伸放,呼吸一直在做清升濁降的工作。呼吸可使內氣鼓蕩起來,就像大自然發生的風雷,能把大地催震動搖,這種對身體的催震動搖,可以使體內清濁不分、陰陽不調的狀態改變分佈結構,恢復到陰陽清濁各而有序的狀態中去。呼吸的作用是不斷的一升一降、一陰一陽,上為逆,下為順,這種順逆的方法會使陰陽交生。丹道的呼吸法,就稱為河車搬運法。周旋無間,就像井上轉動的轆轤。自然中,地球繞太陽轉一週是三百六五天一個週期,它會年復一年地這樣周轉,體內元氣也會沿任督二脈做這種三百六五天似的週期運轉。周天運行正常,叫做周天通,這種周天通的不斷運煉,可以達到丹成境界。

按:「三百六五」之說,也可視為丹功在一定階段層次,再經過一年三百六五天傚法自然的修煉,完成丹道的一種層次效應。

    易筋洗髓經‧呼吸論

〔原文〕

    呼吸與吐納有異,呼吸是吸下呼上,吐納是吐出納入。吐納可分清濁而不可合陰陽,呼吸可合陰陽並可分清濁。易筋洗髓工夫吐納少,呼吸多。先吐納,後呼吸。呼吸有順有逆,順以運一身清氣,逆以合兩儀清氣。用法次第規模,譯各圖說及歌訣中。

〔譯文〕
呼吸法與吐納法是有區別的,呼吸是吸自於下呼自上,吐納是吐為出納為入。吐納對於氣來說可以分出清濁,如納入的為清氣,吐出的為濁氣,但這一吐一納不能合於陰陽。而呼吸可以合於陰陽分出清濁。如吸為升,升為升清氣;呼為降,降為降濁氣。易筋洗髓的功夫中,吐納少,因為它不合陰陽,呼吸多,重在調和陰陽。雖然吐納不合陰陽,然而對入門也有作用,故而把吐納法用在前面,把呼吸法放在後面。呼吸法有順呼吸和逆呼吸,順呼吸可以運一身之清氣,逆呼吸則合陰陽兩儀的清氣。關於呼吸法的先後次第用法,以及運用的規模,詳見各有關圖說及歌訣。

    易筋洗髓經 古本詮釋

夫人之一身,內而五臟六腑,外而四肢百骸,內而精氣神,外而筋骨肉,共成其一身也。如臟腑之外,筋骨主之。筋骨之外,肌肉主之。肌肉之內,血脈主之。週身上下動搖活潑者,此又主之於氣。是故習練之功,全在易筋培養氣血為要。欲求易筋之道,需求新陳代謝,欲求新陳代謝,在於汗液,汗液不出,肌肉筋骨氣血,都不起變化。是故要出汗,初行功始見汗,是為微汗,微汗後當加功倍練,要出大汗,是為大汗,大汗後有汗,是為微汗,經過三層出汗水,全身氣血大變矣。初期三年為小期,十年為大期,小期能易筋肉,大期能易氣血。待到二期三期,定達上乘矣。練到骨節通靈處,週身龍虎任意行。「龍者為氣,虎者為血。氣使血行,週身貫通,所謂渾元一氣。」

〔原文〕

通關一法,非駕陰陽二竅不行。陰陽二竅,乃水之河車,火之輪車,一身氣道之樞紐。陰竅起,則後三關可直衝上頂;陽竅駕,則前三關可直貫注底。翻陰竅、翻陽竅時,氣又可翻下逆上。分而言之,陰竅起於根,舉於足。陽竅起於肩,駕於手。合而言之,陽陰竅皆起於足,應於手。陰竅起則任督通,陽竅駕則鵲橋、尾閭應。陰陽竅上下交應,則吸可到底,呼可至巔。上下順逆,錯綜變幻,如意運行,轆轤轉而玉環活,氣通關竅無阻滯,亦無障蔽。故古人云:掌合指立,陰陽竅通。

〔譯文〕

疏通週身關竅的方法,非憑借陰陽二竅筋脈的運行不可。以內丹必用逆行之法而言,陰陽二竅,就如同農夫抽水倒灌的河車,和戰場上將火引燃於對方的載火輪車,它們確是一身氣道疏通的樞紐、關鍵。陰竅逆用是由下往上升,用陰中之陽,主動,所以陰竅脈動則可通督脈上尾閭、夾脊、玉枕三關(按:亦有言尾閭、命門、夾背為三關者。此是人身難通之竅,故稱關。總之,何處不通,難通皆為關)而直達頭頂;陽竅逆用是由上往下降,用陽中之陰,主靜,所以陽竅脈動可融貫前三關(按:《黃庭經》指鼻、目、心。也可指上、中、下三丹田。總是泛指,不必拘泥。因人之關竅通與不通,也有大致相同之處,也有不同之處。何處不通,何處則為關也)而直通貫於底。陰陽竅的運行,使內氣在體內翻下逆上周流循環不斷。若分別言陰陽竅的各自主要作用,陰竅起於腳底,舉於腿;陽竅起於肩,駕於手。若合起來言它們的作用,陰陽竅都起於腳,應於手。陰竅脈的勃動可使任督二脈通,陽竅脈的行駛則使任督升降交接處的鵲橋、尾閭應合。陰陽竅上下交相呼應運行,內氣由吸而上行,可從最底處發起;內氣由呼而下行,可從最高處下降。陰陽竅的發動是上下順逆,錯綜變換,達到真息時便如意運行。這種狀態就像轆轤的轉動不可分別上下順逆,總是靈活不停,故而體內周天這個玉環就是活的,氣道上任何關竅都無阻滯,也無故障或蒙蔽之處。所以古人說:掌合指立,陰陽竅便通。

按:此最後一句,乃是指和尚打坐練功的姿態。和尚打坐,雙掌相合,立於胸前,此乃用以來接通陰陽二竅。不過,此句又是借這一姿勢來說明陰陽竅相接的作用,不可認為僅用此一姿勢便得妙用。內丹之法最講辯證活用,一拘泥便致誤,可不慎乎!又,此篇言運功,乃言內氣非駕陰陽二竅的狀態,非指具體的方法。

    易筋經說

《易筋經》練其功法,可使人「臂腕指掌,迥異尋常。以意努之,硬如鐵石。併其指可貫牛腹,側其掌可斷牛項」。這種效能,非一般之勇力,而是靠氣。故非外壯,而是內壯;非一般之勇力,而名為神勇。〈內壯篇〉說:

內與外對,壯與衰對。壯與衰較,壯可久也。內與外較,外勿略也。內壯言堅,外壯言勇,堅而能勇,是真勇也。……凡練內壯,其則有三:一曰守中道。守中者,專於積氣也。……守之之法,在乎含其眼光、凝其耳韻、勻其鼻息、緘其口氣、逸其身勞、鎖其意馳、四肢不動、一念冥心。……守在於是,則一身之精氣與神俱注於是。……二曰勿他馳想。……三曰持其充周。……氣既積矣,精神血脈悉皆附之。守之不馳,揉之且久,氣唯中蘊而不旁溢,氣積而力自積,氣充而力自周。

內壯,是靠守中積氣,以達到積力之效的。〈總論〉更申言易道與陰陽二氣之運,把「易筋」之「易」推原其義到《易經》上去:

其所言易筋者,易之為言大矣哉!易乃陰陽之道也,易即變化之易也。易之變化,雖存乎陰陽,而陰陽之變化,實有存乎人。……人勿為陰陽所羅,以血氣之軀,而易為金石之體。

《易筋經》講內功、論內壯、說積氣,所要達到的,仍是剛的效果。在具體功法方面,它也不純用導引。而是以藥洗、服食、揉打來配合意守養氣。

所謂藥洗,是用湯藥來洗身體,幫助筋骨堅實。服藥與揉打則一內一外,所謂「外資於揉,內資於藥」。揉,即按摩之法,以揉按心臍之間為主。心臍間的膜,不容易揉按到,則用杵搗槌打。「般剌密諦」對此亦特加按語解說云:

易筋以練膜為先,練膜以煉氣為主。然此膜人多不識,不可為脂膜之膜,乃筋膜之膜也。脂膜,腔空中物也。筋膜,骨外物也。筋則聯絡肢骸,膜則包貼骸骨。筋與膜較,膜軟於筋。肉與膜較,膜勁於肉。膜居肉之內,骨之外,包骨襯肉之物也。其狀若此。行此功者,必使氣串於膜間,護其骨、壯其筋、合為一體,乃曰全功。這才是《易筋經》獨特的功法與見解。

也許可以說槌打為天竺按摩導引法之特色,而《易筋經》就是發展了這個特色。按摩槌打,是揉按、杵搗、槌打,漸次加重的。木杵、木槌之外,尚要輔以石袋、石杵。木杵、木槌,用於有肉處。骨縫間,則用石袋、石杵。它與道家運氣法不同之處,在於道家主要靠存想,以意運氣,讓氣流走於任督二脈;它不是如此,而是在揉打時,意注於揉打之處。所以揉打至何處,意與氣也就到了那個地方。先揉於前身心下臍上,「功至二百日,前胸氣滿,任脈充盈;則宜運入脊後,以充督脈」。共行功十二個月。

按月行功,是宋代發展出來的導引法,相傳出於陳摶。《易筋經》沿用了這種按月行功的觀念,所以內中有〈初月行功法〉、〈二月行功法〉、〈三月行功法〉、〈四月行功法〉、〈五六七八月行功法〉、〈九十十一十二月行功法〉六篇。

經此十二月行功並服藥洗藥之後,神功已成,氣滿於內,但還有兩事需要補充:

第一件事,揉打積氣,只在前胸後臂,故氣僅充於身體上,還不能把氣運到手上,所以接著要練手:一是仍用揉打之法,用石袋從肩頭往下打,直至小指尖再用手搓揉;二是用藥洗;三是藥洗後加以鍛練。先努氣生力,然後用黑豆綠豆拌在斗中,用手去插,以磨礪其筋骨皮膚。

第二件事,是要學習賈力運力的姿勢和方法。全身積氣,殆如水庫蓄水,水既蓄滿,便須學怎麼行水用水,此所以又有〈賈力運力勢法〉篇。此類勢法,其實就是八段錦、十二段錦之類導引動功,也有些版本稱之為「易筋經十二勢」:韋陀獻杵三勢、摘星換斗勢、倒拽九牛勢、出爪亮翅勢、九鬼拔馬刀勢、三盤落地勢、青龍探爪勢、餓虎撲食勢、打躬勢、掉尾勢等。這些勢,其實均非攻擊或禦守的架勢及招式,而是導引的姿勢。

– 摘自 佛光大學校長 龔鵬程 論文《達摩《易筋經》論考》

本人注:易筋經習煉五大步驟 – 揉、戳、鎚打、布氣(炁)、竄氣(炁)。

SQL Server 2000 实现Row Number

Standard

思路很简单,使用一列没有重复值的列作为参考。排序后计算在此行前的行数加一就是该行号:

比如:

select (select count(1)+1 as rownum from employees t2 where t2.fullname<t1.fullname) rownum ,* from employees t1 order by t1.fullname

C#实现Runas

Standard

某些场合执行某个程序需要比当前操作系统登录用户更高的权限。微软提供的Runas完成这一需求,但是runas不能自动传入密码,这在自动处理时很不方便。因此考虑自己编写一个工具。
此时可以通过调用CreateProcessWithLogonW API实现。

关于H1B美国报税一些注意事项(转载)

Standard

初到美国,报税是重要的一件事,也是麻烦的(对于我)。在网上找到一些中文的内容,转过来,以供参考。

——————————————(张哲瑞联合律师事务所 张大钦律师)——————————————————————–

很多在美国生活的外国人都曾存有一个疑问:我要不要向美国政府报税。 这个问题答案因人而异。 但总体上说,大部分外国人(包括F, M, J, H1B, L-1, O-1,TN等等),如果在美国境内有收入,都应该报税(filing tax returns)。 只不过,不同的报税身份,会有不同的报税义务,要求和方法。
每一年的个人所得税应在下一年的4月15号之前申报完毕。4月15号快到了, 张哲瑞律师事务所在这里提醒广大的移民要在截止日期前完成2008年的报税。如果您不能在2009年4月15号之前报清2008年的税,您可以向税务局(IRS)申请 两到四个月的宽限期。

人在社会, 有两样东西,你一生是逃不脱的: 一个是死亡,另一个是纳税。 粗略算一下,你会知道,您每天的劳动收入,有相当一部分其实是给了政府。你的薪酬,还没有挨着您口袋就给政府预先缴扣了。 到了口袋的部分,在流转的过程中层层盘剥,雁过拔毛。如果您买了房子,就得缴纳地税;开了车子,就得缴纳汽油税;每天到超市买东西,就得交销售税;存了点钱在银行里,就要交利息税;拿去投资,赚了钱,可能要交利得税。 一辈子攒了点钱不容易,想给子孙后代留着,还要交遗产税。 这样下来,一年十二个月,大概有二到五个月,人们是给政府义务打工去了。 当然,税收是取之于民,还之于民的。廉洁高效的政府,其税收相当部分应该是最终返还了人民。正所谓: 我为人人,人人为我。  然而,此口袋出,彼口袋入。人们会习惯地希望,我的口袋少出一点,别人的口袋少入一些。 因此, 一样简单不过的税收原理,(I-D)R – C = T , 到了每个人的帐本上,算法就不一样了。

这种算法的差异,跟每一个人的身份和状况有关。 在移民法上,在美国的外国人可以分为三种身份:移民 (immigrant),非移民 (non-immigrant)和未经登记的移民 (undocumented)。 在税法上,在美国的外国人只分为两类: 定居外国人(resident  alien)  和非定居外国人(non-resident alien)。 虽然税务局在界定外国人纳税义务时,有参照移民法上的一些定义,但是,切不可把移民法的定义和税法的定义混同起来。

根据美国税法,定居外国人(resident  alien)和美国公民的报税是类似的 —— 要就全球范围内的收入向美国政府报税。而非定居外国人(non-resident alien)则只需要就美国境内产生的收入报税。此外,resident  alien和non-resident alien的税项,税率,减免范围和征收方式也不一样。其中一个重大区别是:resident alien 要缴纳social security tax 和Medicaid 的, 而non-resident alien则不需要。 光这一项,就意味着7.65% 的赋税差别。当然,Resident 也有好处。 Resident 在收入抵扣(deduction)方面比non-resident 更优惠, 在享受公众设施(如大学学费)方面也更实惠。

一般地,绿卡持有人, 从I-485批准之日起,或者从持移民签证登陆美国之日起,肯定是税法意义上的 “resident” 了。 绿卡人士(永久居民)应该就全球范围内的收入向美国政府报税,这点是毫无疑问的。移民法上的永久居民(lawful permanent resident)一定是 税法意义上的定居外国人 (resident alien); 但是,税法上的resident 则并不一定是移民法上的lawful permanent resident。 譬如说, H1B 没有绿卡, 但是H1B有可能是 “resident ”。 叫很多人想不到的是, 一旦H1B 满足了“resident ”的要件或者自愿选择成为 “resident ”, 他们就应该向美国政府报告他们的全球收入了。

非绿卡外国人要成为“resident ”, 有两种途径,其一是满足“substantial presence test”.  另外一个途径是在报税时自愿选择成为 “resident ”.  后面的情况通常见于H1B的头一两年。由F-1转成H1B的那一年,前一段是F-1, 后一段是H1B, 报税是你可以按“dual status” 来报;在某种条件下,你也可以选择按 “resident” 来报。 另外, 如果夫妻一方是H1B, 要按 resident 来报税,那么另一方,不管是在F-1 还是H4, 都可以夫唱妇随地按照resident  来联合报税。

前一种途径,按substantial presence test程式来测试,如果过去三年内,您有183“天”或更多的时间身在美国,您应该按“resident ”报税。

测试程式如下:
• 本纳税年度内有31天置身美国,并且
• 本纳税年度和此前两年度,累计有183“天”在美国,“天”的算法是:
本年度内的1天算1天,去年的一天算1/3 天,前年的一天按1/6天算。

举例说, 张三,非绿卡人士,2000年第一次到美国,从2000到2003年,每年都在美国122天。 按照以上的程式测试, 张三在2000年应该是“non-resident”。 张三在2001年还是“non-resident”因为累计的天数是122+122×1/3=162.6. 但在2003年, 张三应该按 “resident” 报税因为累计天数达到183天。 (122+122×1/3+122×1/6=183)

这测试不适用于处于F, M, J身份下的学生,交换学者和他们的附属配偶。 因为美国的税法给了这几种人一些例外豁免(exemption). 通常地,F-1 学生在美国的头五年和J-1 访问学者的头两年会被视为“non-resident”。F, M, J 等非定居外国人(non-resident alien),通常只需要就美国境内的FDAP收入 (fixed or determinable annual or periodical gains, profits and income) 报税。FDAP 收入包括:薪资wage and compensation, 利息interest, 分红 di idends,租金 rents, and 版税royalties recei ed from US sources. 但炒股赚的钱和房屋买卖所获得的利得 (capital gain)有可能不包括在FDAP里。此外, ECI 收入 (Income of non-resident alien that is Effecti ely Connected with the conduct of a U.S. trade or business)也是要报税的。  需要提醒的是, 根据中国和美国的双边条约,在美国的F, M, J中国学生学者,其收入低于5000美元的部分,是可以根据条约免税的。

有人认为,凡是学校发的奖学金都是不用报税的,这是误解。Scholarship 和 Grant可能是FDAP收入, 有可能要报税。 但是,税法对奖学金在税率和抵扣有一些优惠规定。
寻找准确的答案,您可以访问税务局网站里的相关法律:http://www.irs.go /businesses/small/international/index.html

在模棱两可的状况下,是按“resident”还是按“non-resident”来报税更实惠呢? 答案因人而异。 但最重要的一条是:正确报税最实惠。 错误报税后果最严重。如果绿卡人士错误地按“non-resident”报了税,这可能导致失去永久居民的身份。如果一个在OPT阶段的学生选择了按“resident”来报税,他就要多缴纳社会保险金和医疗金。要知道,如果一个外国人(包括H1B)离开了美国,他给美国政府缴纳的社会保险金和医疗金是无法在退休时享受到的,而且也不可能向美国政府去索回。

移民局在很多问题上会审查申请人或受益人的税收记录。 譬如说, 在某些I-140移民申请,移民官要看雇主的报税和外国雇员的报税来确定雇主是否有足够的财政能力来支付外国雇员承诺的薪水。很多I-485调整身份的案子, 移民官要看经济担保人的报税来确定申请人是否有足够的经济来源来支持自己和家庭以不至于成为公众负担。虽然,移民局不大可能主动从税务局调取申请人的税收记录。 但, “Honesty is the best policy.”如果一个人因报税失误被罚款或被定罪,那么他的绿卡申请或入籍申请有可能受影响。

很多新移民在报税的问题上不够审慎,因小失大。这苦果, 连一些聪明杰出的美国公民也概莫能外。 君不见, 奥巴马提名的内阁官员,至少有四个栽在报税问题上, 最后不得不撤回了提名。就连当今叱咤风云的美国财政部长也险些在报税问题上葬送了美好前程。

在美国,报税是检验一个社会成员责任操守和诚信良知的试金石。 新移民追求美国梦想的同时,一定要记住,每一个梦想,都饱含着付出。 每一份权利,都意味着义务。

如果您决心要在美国这片土地上谋求发展的话,请从履行纳税的义务开始吧。 报税是一个多还少补的过程。 跟政府结帐,不一定总是你吃亏。 有些时候, Uncle Sam还要倒贴钱给你呢。

报税不是难事。很多大学社区有免费报税的服务。 你可以从邮局拿到表格,从移民局下载表格,或者从网上购买智能软件来报税。 此外,你也可以通过报税公司(如,TurboTax  和H&R Block )或专业人士来协助报税。  如果要长期在美国生活,对报税的知识多了解一些总归是有好处的。 

在报税表格方面,Resident 应和美国公民一样使用1040表, 1040A表 或1040EZ表。 Non-resident 应使用1040NR表或 1040NR-EZ表。 从谨慎的角度来看, F, M, J的学生学者,只要在美国有工作收入, 他们都应该要报税。 H1B, O-1 , L-1, TN等符合“substantial presence test”的外国人士有可能要就全球范围内的收入报税。

在此需要声明的是:我本人不是税务律师,上面的介绍只是围绕着移民话题展开的宽泛而谈。 如果有拿捏不准的地方, 你可以查阅税务局的FAQ. http://www.irs.go /faqs/index.html
复杂的状况,最好请教专业会计师,税务律师或者直接联系税务局。 美国的税务局挺亲民的, 您可以随时给他们打电话,去信或发电子邮件。联络办法如下:
http://www.irs.go /help/article/0,,id=96730,00.html 根据我的经验,税务局的客服做得不错,有函必复,回信及时。

要知道, 在一个民有民治民享的社会里 (A go ernment of the people, by the people and for the people), 税收确定了people 和 go ernment之间的从属关系。   一旦交了税, 您就可以以“纳税人”自居了。某种意义上, 你就是这个国家的主人了。 身为纳税人的您,有权利要求美国总统和国会向你报告, 为你的每一个dollar负责。

移民们,抓紧时间报税吧! 报税以后,您就可以给奥巴马写信劝他从伊拉克撤兵,敦促他别浪费你们这些纳税人的钱了。

————————————————-陳聰胤會計師———————————————————————

稅是無所不在的,人生除了生老病死必經過程之外,稅也是逃不掉的。住在米國不論你是否為米國公民,若有收入就必須報稅。在米國上班是雙週薪制的,每兩週領一次薪水,聯邦稅,州稅,等都把你扣走了。每年4月15日之前,你必須就去年所得,做個總結報稅。報稅的結果是,多退少補。每年年初大概這個時候,你會收到公司寄來的W2 Form,就是提醒你報稅季節到了。以2006 年來講,若你單身,年所得不超過8450美金,你是免繳所得稅的。以留學生而言,若你有一點獎學金或打工的收入,且有小孩子的,即使你可能全年被扣的聯邦稅(Federal income tax withheld)不到一千元,你也可以退稅超過千元,簡直是一個社會福利。原來米國為了有小孩的低收入家庭,立了一個稅法叫Earned Income Credit (EIC),鼓勵大人出去工作,低收入家庭,除了扣稅可全數退回之外,還可獲得補助。
所得稅表格可以在圖書館及郵局免費拿。單身沒小孩的上班族只要用1040EZ form即可,有小孩的用1040A,自己有房子,每月付貸款的,就必須要填最複雜的1040表了。這些1040表只是總表,副表(Forms and Schedules)還有很多種。1040EZ最簡單,只需填1040EZ的人,不用花錢買報稅軟體,報稅軟體很多種,以Turbo Tax及Tax Cut較普遍。報稅軟體一套少則30元,一百多元的也有,一百多元的是給幫人報稅的人用的,一般人用30塊錢的就可以了,稅法每年改,所以軟體也要每年買。用報稅軟體報稅,填表不會比較快,尤其是如果你是第一次用。你要花不少時間學怎麼使用,但退稅會比較快。電子報稅(e-filing)是以後的趨勢,我們每天上網傳電子郵件,報稅還用手填郵寄,是蠻落後的。在這分工的社會也有會自己換車子機油的,但是報稅給人報,跟車子壞了給人修,是同樣的一個道理的。

两个1040NR-EZ填写例子:

tax_f1040nre_example

EZ-J1scholar

遙遠的呼喚(zt)

Standard

或許這是很多人都有的故事經驗,抬頭遙望天空的繁星,夏日明亮的銀河是一條通往仙境的道路,聽說天有九重,總是有著美麗的憧憬,那裡住著聖人、佛和神仙,還有美麗的亭台樓閣與怡人的風景,消遙自在、詩書琴棋畫,無憂無慮的生活著。
 
當每個嬰兒來到這個世上,父母總是賜給他的名字,爾後不斷的呼喚,引導他認識新的事務,『識神』發達了,也因此逐漸淡忘並疏遠了來自遙遠的呼喚,『元神』逐漸削弱了,這就是存在於地球表面空間的人類。
 
『元神』是世人連通元始生身父母的臍帶,無形能量的臍帶,有朝一日必須透過這一條臍帶回到另一個存在。即使活在現世也必須透過這一條臍帶,才能獲得『般若大智慧』。世人散生娑婆世界,有了『識神』就生出了貪瞋痴的慾望,忘卻了回家的路徑,因此,耶穌教有『天父』之說,一貫道有『無極姥姆』之說,道教有『一炁化三清』之說,無非警示世人透過『元神』找到回家的路。

道教告訴大家現有的宇宙是由一炁化三清而來:
一化無形天尊即玉清元始天尊:由混洞太無元之青氣,化生為天寶君,又稱元始天尊。居清微天玉清境,故稱玉清。祂是掌管天庭的。
二化無始天尊即上清靈寶天尊:由赤混太無元玄黃之氣,化生靈寶君,又稱靈寶天尊,居禹餘天上清境,故稱上清。祂是掌管地界的。
三化梵形天尊即太清道德天尊:由冥寂玄通元玄日之氣,化生神寶君,又稱道德天尊,即太上老君,居大赤天太清境,故稱太清。祂是掌管人界的。
 
倘若按照道教的說法,無疑的天可能有三重空間。但是,自從人類發明火箭和太空船以後,發現月亮上面沒有住著嫦娥,佛教的西方極樂世界也不見了,因為地球只是太空中運轉的圓球。美麗的憧憬開始蒙上一層解不開的陰影。
 
對於這個世界,一般我們知道有長、寬、高三度空間,再加上時間,總共是四度空間。哈佛大學教授麗莎藍道爾說:「我認為(地球上)存在五度空間,等其他的次元,只是它們隱藏得很好,所以我們看不到而已。」
 
有人說:時間不變的固定為一次元、三次元空間就是所謂三度空間。假使我們以生活於其間的三次元空間為一重宇宙的空間,九次元空間分成三個三度空間,就有三重宇宙的空間。我們所知道的空間只有三度,那麼九度空間要怎麼樣來想像呢?有人認為我們的空間以外,還有平行空間存在。倘若把九度空間其中的三度當成一個軸,九度空間就成為三個軸。然而時間呢?因為宇宙中,時間不可能在這個空間與另外一個空間不同,否則有時候,從這個空間到另一個空間,再回來的話,變成時光倒流,這個不大合理,因此時間不會各自分段,所以把時間當成事件前後的同一共通性的計量標準。超弦理論的十次元時空的宇宙架構,可以看成三重的三次元空間和共用的一次元時間,合稱為三重宇宙的時空架構。如果以這種三重宇宙的時空架構,來探討一些目前科學上沒有辦法解釋的問題,就容易的多。當然這種觀點也只是世人一廂情願的看法。
 
有了三重宇宙時空架構的話,我們所看到的這個宇宙,只是整個宇宙的三分之一的空間而已,另外還有三分之二的空間看不到。
 
關於空間的概念,比方來說:一度空間的人類碰到前方的障礙只能後退或停止不前,因為他的世界是直線;二度空間的人類碰到障礙則知道繞道而行,因為他有面的概念;三度空間人類則會爬上那個障礙走過去,因為他有高度的概念;四度空間人類我猜會選擇回到或跨越到沒有那個障礙阻擋在前面的時間。那麼另外的幾度空間呢?
 
地球人類大都是以自己所見為信任的準則,人類不能避免習慣以直線的長、寬、高三度空間為想法,去思索另一次元的時空,這絕對患了一個很大的錯誤!宇宙之間的星球都以圓滾方式、以中軸傾斜角度自轉,以橢圓軌道作公轉,這就是拋物線方式、螺旋方式的前進方式。不但如此,整個宇宙也在向南前進中。易經的地風升卦說:『升,元亨,用見大人,勿恤,南征吉。』儘管他人並不一定做如此解釋。當然人們仍會不斷的思索探究神秘的高層異次元空間。
 
再說,愛因斯坦的質能方程式說明:物質就是能量。物理學家已經證明,我們這個世界上所有的固體都是由旋轉的粒子組成的,包括核子、中子、質子和外層的電子。這些粒子有著不同的振動頻率,粒子的振動使我們的世界表現成目前的樣子。我們人身的細胞也是如此結構。科學家已經測量過,人在不同的體格和精神狀態下身體的振動頻率,結果讓人大開眼界。
 
比如說,邪念會導致最低的頻率;當人想著下流的邪念,人體就在削弱自己。漸高依次是惡念、冷漠、痛悔、害怕與焦慮、渴求、發火和怨恨、傲慢,這些全都對人體有害。但『信任』是中性的,信任有益於人身。再往上的頻率依次是溫和、樂觀、寬容、理智和理解、關愛和尊敬、高興和安詳、平靜和喜悅,開悟為最高最快的頻率。
 
有人進一步的研究顯示,特瑞莎修女(1910-1997,獲1997年諾貝爾和平獎)的時候,當特瑞莎修女走進屋子裏的一瞬間,在場所有人的心中都充滿了幸福,她的出現使人們幾乎想不起任何雜念和怨恨,此時特瑞莎修女具有很高很快頻率。最高頻被稱為是神的意志或精神,這是絕對力量的頻率,甚或更高。傳說耶穌在村子裏的出現使圍上來的人們心裏除了耶穌什麼都沒有。善念的高頻率振動是否就是通往異次元時空的路徑?因為他們最終成為了『神』。
 
又有科學界研究太陽散發出來的微中子,科學家提出或許微中子是外星文明的通訊工具,因為星際通訊需要穿越遙遠的距離而不受干擾,且須具方向性,而微中子可以穿透所有物質星球,甚至穿透越數光年厚的鉛而不受阻擋,照樣穿透。此外,微中子偵測器的偵測能量帶極寬,或許是外星文明通訊的最好選擇,然而這也只是猜測。
 
我們以三重宇宙的觀念來看,倘若將微中子看成可以貫穿三重宇宙的每個空間,那麼則從太陽輻射出來的微中子,當然可以平均散發於全部宇宙的每個空間,而輻射到我們這一重宇宙的微中子,當然也只有三分之一而已,其餘三分之二散發於另外二重宇宙的空間。科學家已作了多次的實驗,發現地球實際接收到的微中子只接收到三分之一,其餘三分之二的太陽微中子不曉得那裡去?這個問題成為粒子天文領域上的一個大秘密,已困惱了四分之一世紀。
 
因為我們的地球只是在這三度空間裏,另外還有二個三度空間,即另外有二重宇宙,與我們同時存在;換句話說,任何一點的座標數有九個,其中三個座標是我們所知道的三度空間,其他六個座標是在另外的空間裏,目前我們沒有辦法去探求。
 
又有醫學界研究許多頻死經驗的人,一致的結論是「人死了以後 ,他的靈魂會飄過一個漆黑的隧道,到達一個光明的世界 。」
 
他們提出的看法,人死後的靈魂可能由現實的宇宙,穿出人類的空間,進入另一重宇宙的空間,那裡有無形的光明世界,就是在我所講的三重宇宙中,和我們不同的其中一重而已,將來我們也要到那個地方去,那裏才是真正的歸宿。
 
人類應該『享受直覺、相信科學』,識神賦予人類的謀生的機能,在世也需要具有精靈敏捷的頭腦,才能圓滿地處理世務,才能提升生活的品質;但也不能忽略元神的作用,元神不但賦予人類智慧,也能賦予人類產生靈感,進而感通宇宙的訊息,甚至是靈魂通往高層異次元時空的路徑。那遙遠的路徑,都是人類對外感官無從察覺的極微小的蜷曲的方向。活生生的人體的機制是非常完整的,人體以絕對性的機制配合著宇宙運行機制,只是人類在世大都只運用一半,就是『識神』,另外的一半必須關閉『識神』然後才能開啟『元神』的運作,這就是和宇宙合體運作的法訣。
 
禪門道派的法脈源自『崑崙山』屬於崑崙道脈,開傳始祖號為雲磐,居住崑崙山清靜宮玄金殿,剛入門時居於好奇,翻遍地理和典籍,從西藏到新疆、青海整條崑崙山脈,詳細閱讀和崑崙相關的風景、湖泊、廟宇、仙蹤典故,總是希望有朝一日能參訪謁祖,並體會一下仙山的靈氣。即使無法達成願望,做做白日夢也算給自己來些安慰。
 
世間事一切隨緣而生,經歷幾翻考驗,當萬緣復歸靜寂,透過某個微細的縫隙,跨越蜷曲的路徑,崑崙實在是一處極其美麗祥和的國度,崑崙其實是在高層異次元時空的其他的地方,是宗教的源頭,也是智慧的泉源,過去也曾由那裡傳出其他門派,也曾有西藏的喇嘛、印度的神秘家去過,並被報導出來。宇宙瞬息萬變,世事無常,當初各門各派各宗各教祖師們慈悲的傳法,或許有著當時的時空背景的需要,而身為後輩的人們呢?是否能繼續順著那條無形能量的臍帶,解讀來自遙遠的訊息,庇蔭人群趨吉避凶,繼承各祖師慈悲的關懷呢?
 
根據所知,人類居住的太陽系正在靠近宇宙中的一條光子帶,穿越光子帶我們會從三度空間進入高度異次元空間;伴隨發生的巨大變動,包括整個太陽系的電磁場以至人類自身的細胞、身體及意識層次的改變。光子帶中含有密集及高震動力的光子,所以產生的震動力非常強,物質本來是由光分子合組而成的,一旦被其影響,光子會改變人體的結構,我們的震動力將會瞬間被提升,身體變的較透明及輕盈,意識等級也將會被提升,不過不到程度的生命體將難以承受,原因和身上的頻率有關。
 
不但人類身上的頻率受影響,地球內部的磁場也在改變,這些改變在在影響人類的健康,有影響人類生活的環境,世界衛生組織的資料說,氣候暖化與變遷已造成每年至少十五萬人因瘧疾、腹瀉、營養不良及漲水傷害而死亡,這只是變遷的一部分,還有更多潛在的危機,這其中半數將會發生在亞太地區。
 
看得到的,在氣候暖化的影響之下,瘧疾帶原蚊已開始遷徙,出現在過去不曾出現的地區,如朝鮮和巴布亞新幾內亞的山區;至於登革熱,雖然未有證據指向亞洲的高病例與氣候暖化有直接關聯,但氣溫的升高及失常的降雨及產生的寒害已被證實扮演一定的角色。此外,亞洲巨型城市如加爾各答及馬尼拉的數以千萬計居民,將受到河流及沿海水患的威脅,南太平洋島嶼國家則將面臨海平面上升、土石流、頻繁的颱風及水荒等災害。

Deep clone an object in .NET

Standard

There are two types of object cloning; deep and shallow.

A shallow clone creates a new instance of the same type as the original object, with all its value-typed fields copied. However, the reference type fields still point to the original objects; and so the “new” object and the original reference to the same object. On the other hand, a deep clone of an object contains a full copy of everything directly or indirectly referenced by the object – and so you get a “true” copy.

One of the easiest ways to deep-copy an object is to serialize the object into memory and de-serialize it again – although this does require the object graph to be serializable. Here’s a handy code snippet to do this:

public static object CloneObject(object obj)
{
    using (MemoryStream memStream = new MemoryStream())
    {
        BinaryFormatter binaryFormatter = new BinaryFormatter(null, 
             new StreamingContext(StreamingContextStates.Clone));
        binaryFormatter.Serialize(memStream, obj);
        memStream.Seek(0, SeekOrigin.Begin);
        return binaryFormatter.Deserialize(memStream);
    }
}

You could then implement the ICloneable interface on your object like so:

public class MyObject  : ICloneable {
    public object Clone()
    {
        return ObjectUtility.CloneObject(this);
    }
    ...
}

VBScript-数组排序

Standard

Sub ArraySort(aArrayToSort, sOrder)
‘This script is provided under the Creative Commons license located
‘at http://creativecommons.org/licenses/by-nc/2.5/ . It may not
‘be used for commercial purposes with out the expressed written consent
‘of NateRice.com
‘This Sub will sort the array passed as aArrayToSort
For i = UBound(aArrayToSort) – 1 To 0 Step -1
For j = 0 To i
If aArrayToSort(j) < aArrayToSort(j+1) And sOrder = “desc” Then
sTempStr = aArrayToSort(j+1)
aArrayToSort(j+1) = aArrayToSort(j)
aArrayToSort(j) = sTempStr
ElseIf aArrayToSort(j) > aArrayToSort(j+1) And sOrder = “asc” Then
sTempStr = aArrayToSort(j+1)
aArrayToSort(j+1) = aArrayToSort(j)
aArrayToSort(j) = sTempStr
End If
Next
Next
End Sub

Sub DoubleArraySort(aArray1ToSort, aArray2ToSort, sOrder)
‘This script is provided under the Creative Commons license located
‘at http://creativecommons.org/licenses/by-nc/2.5/ . It may not
‘be used for commercial purposes with out the expressed written consent
‘of NateRice.com
‘This Sub will sort the array passed as aArray1ToSort,
‘the values in aArray2ToSort, will not be sorted, but
‘will be reordered in the same relational order as
‘aArray1ToSort
For i = UBound(aArray1ToSort) – 1 To 0 Step -1
For j = 0 To i
If aArray1ToSort(j) > aArray1ToSort(j+1) And sOrder = “desc” Then
sTempStr = aArray1ToSort(j+1)
aArray1ToSort(j+1) = aArray1ToSort(j)
aArray1ToSort(j) = sTempStr

sTempStr = aArray2ToSort(j+1)
aArray2ToSort(j+1) = aArray2ToSort(j)
aArray2ToSort(j) = sTempStr
ElseIf aArray1ToSort(j) < aArray1ToSort(j+1) And sOrder = “asc” Then
sTempStr = aArray1ToSort(j+1)
aArray1ToSort(j+1) = aArray1ToSort(j)
aArray1ToSort(j) = sTempStr

sTempStr = aArray2ToSort(j+1)
aArray2ToSort(j+1) = aArray2ToSort(j)
aArray2ToSort(j) = sTempStr
End If
Next
Next
End Sub

Debugging client JavaScript in VS 2005

Standard

Client Java Script is one of the most important things in web development but not the best and easiest to develop. Building of bigger and more complicated scripts, especially using DOM model or form field values can cause a lot of frustration and head pain. Moreover, JavaScript debugging is not easy and obvious as should be. But there is a hope.

One of less known features of Visual Studio 2005 is Script Explorer, hidden in Debug menu where appears only when the debugger is running. This great tool allows easily debug JavaScripts.

Before start, we should ensure that client script debugging is not disabled in IE as it is by default. Suitable options are located on Advanced tab of Internet Options where both script debugging checkboxes should be unchecked.

We can come back to Script Explorer. As it was written before, it appears only while the debugger is working. So after starting project we can go do Debug->Windows where should be Script Explorer. Sometimes, don’t know why, it doesn’t so in this case we have to find it manually. Staying in debug mode right click on tool bar and go into Customize. Then select Debug in Categories on the left side of window and find Script Explorer on the right. Just drag it to Debugging toolbar.

After opening Script Explorer panel we will se the tree of active JavaScripts. At the first level are scripts that are imported from external sources or embedded in the page. There are also auto-generated scripts like postback scripts as well. By double-clicking on the selected script it will open in the main window.

At this moment, we can debug it in well known way using breakpoints, steps, Watch and QuickWatch, just like in the server side, including context variable browsing.

Breakpoints can also be set up in external *.js files before project will be loaded. Then, after loading project, the breakpoint will be activated by debugger. Note, that it is only possible to *.js files not for scripts embedded in pages. These scripts are available for debugging only after loading page.