blogspot.com-GA4

星期四, 12月 25, 2008

alert加斷行符號

找了很久 ,但是...沒錯只要下面這樣子...

alert('您有*欄位未填,請回上頁填寫。\r\nItem(s) with * unfilled. Please return to the previous page.');

告知網路搜索引的文件 Robots.txt - 網路搜尋技術

今天在跟朋友聊天的時候聊到了,最近google 就是因為搜尋功能太強了,反而造成小網站入口網,流量不大,但是內容都被google 搜尋出來,大家都只看內頁,反而造成小網站的可見度降低,但是內容都暴光的問題,因此得知了一種網路默許搜索文件「robots.txt」

以下是簡單的說明:

robots.txt 是以簡單的 ASCII文字檔 robots.txt 以此小寫字母的文件檔案存放於網站根目錄中,告知進入的網路搜尋引擎,網站裡面可以被搜詢和禁止的內容部份,下面稍微簡單列一下用法:

1. 最簡單的網頁告知禁止抓取內容
<meta name="robots" content="noindex,nofollow" />

這個協定也不是一個規範,而只是約定俗成的,通常搜索引擎會識別這個元資料,不索引這個頁面,以及這個頁面的鏈出頁面。



2. 使用robots.txt 規範

讓所有機器人訪問所有檔因為通配符"*"明所有機器人:
User-agent: *
Disallow:


攔截所有的機器人:
User-agent: *
Disallow: /


禁止所有機器人訪問特定目錄:
User-agent: *
Disallow: /cgi-bin/
Disallow: /images/
Disallow: /tmp/
Disallow: /private/


僅禁止壞爬蟲訪問特定目錄:
User-agent: BadBot
Disallow: /private/



相關資料
維基百科
Googlebot

星期日, 12月 14, 2008

html 轉unicode 顯示

最近在網站中要顯示中文,於是上網找了轉碼的方式,
以下是資料來源:

Unicode and HTML

來源:JavaWorld

//將中文轉成 16 進位 unicode 表示法,會得到像是 \u4E2D
out.print("
中 16 ="+"\\u"+Integer.toHexString("中華".charAt(0) & 0xffff));

//將中文轉成 10 進位 unicode 表示法(中括弧請自行拿掉,這裡加中括號是怕此處網頁顯示不出unicode)會得到像是 [&#]20013[;] 的結果
out.print("
中 10 ="+"[&#]"+("中華".charAt(0) & 0xffff)+"[;]");
//或是 Integer.parseInt("4E2D",16) 也可以得到 20013

//將 unicode 轉回中文, 此處結果會是一個[中]字,當然,如果要將非 big 5 碼的 unicode 字寫入 ASCII 格式檔案中,是會變成亂碼的,所以輸出檔案格式要設定,如果是輸出在網頁上,就無所謂了
char c_Back = (char)Integer.parseInt("20013");
StringBuffer STSTR = new StringBuffer();
STSTR.append(c_Back);
out.print("
結果="+STSTR.toString());


發現這樣轉中文部份還是亂碼,暈了orz
不過發現在URL中,中文部份是正常的

用以下方法二:
java.net.URLEncoder.encode (tmpValue[1])
java.net.URLEncoder.encode (tmpValue[1],"UTF8")

不過還是不行阿,想想搞不好是因為在filter裡面有在進行轉碼的動作嗎?
拿掉之後測試還是失敗了,orz

是因為URL傳值的關係嗎?
被打敗了

星期五, 10月 24, 2008

程式設計師的格言

來源:程式設計師的格言(盜作不少)

譯自
http://www2.biglobe.ne.jp/~oni_page/other/etc/pr03.html
http://mixi.jp/view_community.pl?id=1772737

(版本2 2008/10/12更新)

譯註
SE是日本軟體公司裡程式設計師的頭子。自己不太寫程式,主要工作是跟客戶確認規格。
程式設計師多半自己不面對客戶。
跟PM又不一樣。(有什麼比較貼切的職稱翻譯嗎?)

—————

1
每天有24小時。
所謂的「今天之內」,是指到明天早上為止。

2
程式不會照自己所想的跑。只會照所寫的跑。

3
需求規格在程式寫完後才會敲定。
基本規格要客戶看到成品後才會決定。
詳細規格要使用者用過後才會確定。

4
我對軟體設計的方式導出的結論,有兩種方式。
一是把軟體設計得單純到很明顯不會有缺陷,
不然就是把軟體設計得複雜到沒有明顯的缺陷。
- C.A.R.Hoare

5
程式碼不要在開發現場寫! 去客戶那寫!
除錯不要在期限前做! 上線後再做!

6
畫面藍了。

7
先說「沒辦法」的人贏。

8
有意見的話你寫

9
要殺一個程式設計師不需要刀,改三次規格就好

10
首先要先懷疑別人,被懷疑的人或許會把問題解決掉。
(註:通常會「先懷疑自己」)

11
開發沒有終點。只有釋出(release)。

12
無論規格多晚才能確定,結案期限永遠不會變。
這是所謂的「期限守恆定理」。

13
客戶總是覺得水跟追加需求是不用錢的。

14
付錢愈計較的客人愈囉唆。

15
在排定開發行程時,總是視而不見一些連小學生都會的算數。
業務部門總是一堆不知道1+1=2的人。

16
一個人掛了大家都掛了。

17
bug過了一晚可能就變成規格了。

18
好的規格找一個天才不如找三個凡人。
爛的規格找一百個凡人不如找一個天才。

19
客製軟體中30%的價格用在確認規格上。
30%用在修改規格上。
30%用在找bug。
結果初期規格反映在價格上占的比例只有10%。

20
對客戶來說SE是部下,程式設計師是家畜。
對SE來說客人是錢,對程式設計師來說顧客是看不見的病毒。
除了弄完程式以外,沒有其他驅除的辦法。

21
顧客想受SE喜歡,要自己了解到系統開發需要時間與金錢,早點確定規格。
SE想受顧客喜歡,則要讓程式設計師討厭自己。

22
很多SE跟程式設計師都暗自想著有錢有閒的話什麼系統都想自己動手做,
不過都沒這種機會。

23
品質的劣化程度依規格改變的次數與規模而定。

24
業務是認為空想能夠實現的夢想家。
SE則是深信任何障礙都能突破的冒險家。
程式設計師則是被夢想家和冒險家拋到漆黑海裡的漂流者。

25
有才能的程式設計師第一次看到設計細節時,要先理解程式的目的。
接下來要設法讓SE了解到以指定的方法、工時並無法完成這個工作。

26
程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的無謀行動。

27
程式設計師聽了「把自己當作顧客去著想!」而開始思考。
啊,像夢一樣。

28
對於因為興趣而寫程式的人來說,所謂的技術是程式語言能力。
對於因為工作而寫程式的人來說,所謂的技術是邏輯思考能力與人際溝通能力。
程式語言可以看著手冊溝通,客戶不行。

29
程式系統在交貨之前會不斷縮小。
先用元件定義取悅老闆。
再拿經費概算要部長妥協現實的方案。
在運用會議中,課長會嘗識減少自己責任範圍。
在細節會議中,負責人會把範圍縮到自己記得的部分。

30
SE需要持久力,程式設計師需要爆發力。

31
準時離開公司,工作會變多。

32
完美的程式需要完美的時間與金錢。
聽說揮霍著美國的國家預算的NASA,也覺得時間跟錢不夠。

33
詳細設計要在程式碼的註解裡做完。
註解是唯一的自衛手段,至少要讓自己看懂。

34
還有時間看程式碼的話就執行他。
CPU跑得比腦細胞快。至少這時候可以休息。

35
程式的異常該稱為「bug」還是「規格上的限制」是看期限還剩多久決定的。

36
所謂便服日,好像社會上把他叫做假日
(註) 日本有些公司會有所謂便服日(不用穿西裝的日子),通常是星期五,但…

37
地獄持續一段時間後,充滿殺氣的怒吼會變多。
再持續一段時間,說話會變少但牢騷會變多,壟罩在凝重的氣氛裡。
再持續下去,反而會海闊天空,四周洋溢充滿活力的聲音。
這種狀態稱為「Programmer’s High」,也是倒下來的人開始出現的時候。

38
遠處的火災一定燒到這裡。

39
禱告,然後跑吧。

40
程式不是用腦記的,要用身體記住。

41
明天能放假的話死了也罷。

42
外面有下雨耶,昨天開始下的嗎?

43
若不能心靜不移,身體會掛。
若不讓自己殘忍,自己會被殺。

44
客戶會說謊,業務會作夢,SE會做白日夢。
程式設計師則惦惦。(愈來愈自言自語)

45
(日文文字遊戲)
SE總是不負責的說「別逞強」,
業務總是無理取鬧不准說「沒辦法」。

46
規格書就像航海圖,客戶則是洋流。洋流陰晴不定,航海圖就變垃圾。
程式設計師必須在沒有航海圖的海上憑自己的力量找到大陸。

47
再嘮嘮叨叨下去也是要付錢的。

48
多想個10秒鐘,你可以不說「嗯,這個做得到」。

49
人是無法從別人失敗記取教訓的動物。
砍成本、改規格、加需求、趕上線,從來沒有人從眾多失敗中記取教訓。

50
老手用來提振精神的魔法格言:
「不過比起以前來說算是…」
新人用來提起幹勁的魔法格言:
「把這件工作做完的話…」他們還不知道工作是沒有終點的。

51
所謂交案期限,是指開發現場從公司換到客戶那裡的日子。

52
程式、SE、經理不是職務。是逃不掉的責任。

53
業務是最難搞的客戶。

54
能夠迅速想到解法的程式設計師太多了。
他們能用一分鐘想到方法,用一天去寫程式。
不需要花一小時想到解法,再用一小時去寫程式。
- Jon Bentley

55
漂亮的規格,可以從沒有bug出現看出來。
明明爛的就是設計,為什麼是這樣…

56
上線後的除錯才叫做bug。

57
追加需求確定後交貨期限就無法確定,
交貨期限確定後追加需求就無法確定。
這稱為「追加需求與交貨期限的測不準原理」。

58
除三個錯就會冒出一個錯。
這稱為bug的無窮迴圈。

59
不祥的預感總會實現。
不過程式設計師不會去煩惱不祥的預感,那是SE的工作。

60
要解決地獄的辦法,就是客戶把錢交出來。

61
不懂電腦的操作者是發現bug的天才。而且無法重現。

62
每次開會就更改規格的客戶,
他的操作手冊要等到操作寫好的程式後才能寫出來。

63
搞不懂的時候,Currency(長整數)比Interger(整數)好用。
Variant(字串、數字都能存的萬能變數)又比Currency(長整數)好用。
安全第一。
(VB程式設計師如是說)

64
啊,那是微軟的規格。

65
程式設計師所不滿的規格也一定會讓客戶不滿。
(這是說程式設計師覺得難寫的地方常常是SE溝通有落差)

66
程式設計師需要的技能,
包括交涉、時程管理、業務分析、提案、設計、程式語言、架構、維護、使用。
SE需要的技能則減掉程式語言、架構、維護與使用。
專案經理需要的能力則再減掉業務分析、提案與設計。
業務需要的能力再扣掉時程管理。

67
正因為健康,才能做不健康的事。

68
規、規格、是規格啦。不過有一點跟規格不太一樣啦。

69
那是你說的規格。

70
開發室沒有窗戶,那是因為以前…

71
爛了也是因為規格。

72
SE: 真沒辦法。
PG: 也沒註解。
(碰到不知道是誰寫的程式,大家都束手無策的狀態)

73
為什麼你不能兩三下解決掉他啦。
因為之前兩三下搞定的東西也被你兩三下就否定了。

74
不會動的bug就只是普通的bug。(會動的bug則能視為規格)

75
今天好好清理bug,bug應該死光了吧。
咦?Windows也死了唷。

76
客戶不會去想最壞的情況。要他面對最壞的情況,他會認為是漫天開價。
SE則會顧慮最壞的情況,準備應付最壞的情況。
程式設計師比誰都早預料到最壞的情況,而無視最壞的情況。

77
唯一不產生bug的方法,就是不寫程式。
第二好的方法,就是在時程跟人員確定之後的每次改規格,都重新檢視過整個專案。

78
共同責任是程式設計師的責任。
管理職?那是啥?好吃嗎?我沒吃過耶。

79
如果可以改行的話,想找個準時下班不叫「逃跑」的工作。

80
對職業程式設計師來說,漂亮的程式是單純而自然的邏輯、簡單而基本的指令、豐富的註解,
也就是新手程式設計師也能馬上動手改的程式。
而要寫租這樣的程式,需要單純、簡單、美麗的規格。
但可惜客人總是喜歡搞很複雜。

81
設計者應該是不該要求製作者製作出超過設計以上內容的吧…

82
無論是做的比規格書裡的多,還是只照規格書裡的寫,SE都會找程式設計師的碴。
所以程式設計師只做規格書裡的寫的內容。

83
SE對程式設計師說的「常識」每三小時變一次。

84
自己看規格書。不能跑的是規格。

85
「沒辦法」是要看把一天當多少小時來算。
一天常常指的是3人日,一個月常常是指4.5人月喔。

86
工時要減掉一半的單體測試與一半的系統測試,
而交貨期則要另外加上上線後的兩個月。

87
能拿到錢的規格變更稱為「受理項目」,
拿不到錢的規格變更則稱為「SE的規格確認失誤」。
程式設計師是這麼看的。

88
累了。我想睡了。可以回家嗎。
(累了吧,我也累了。好累喔怎麼了。反正就是規格啦,管他的)

89
試圖降低成本的話,為了配合預算,品質會下降,不過漫天開價做出來的品質也不見得好到哪裡去。

90
REDO到底該怎麼唸一直搞不懂。是利斗嗎、李度嗎、R E D O嗎,難道是 red 零 嗎? 拜託加上注音吧。
(譯註:我比較煩惱 Linux)

91
有人在程式碼註解裡寫日記。像「今天是雨天…」,「想回家…」之類的。甚至還有「修改日: 2003/10/10 不能同意你更多」這種註解出現。說到這個,好像也看過「吃大便」這樣的註解。

92
小學生時第一次看到電腦
國中時第一次學會怎麼用
高中與大學學會程式語言
出社會後才發現自己走錯路

93
「不要讓老闆當業務比較好」

94
說來說去,要去研究根本不知道為什麼會動的東西為什麼不會動了,找拿破崙來也沒搞頭。

————————

ex 1
就算程式裡沒bug,編譯器會有bug。
就算編譯器沒bug,OS會有bug。
就算一切都沒bug,客戶會決定什麼是bug。

ex 2
規格與規格書是不同的東西。

ex 3
比期限更重要的是靈感與睡眠。

ex 4
比知識與經驗重要的是手冊與時間。

ex 5
能動就好了,能動的話…

ex 6
過了三天就是別人寫的程式碼。

ex 7 (大搜查線系列)
規格變動不是在會議室裡發生的!是在現場發生的!

ex 8 (大搜查線系列)
異常不是在模擬測試時發生的!是上線後才會發生的!

ex 9
漂亮的設計三天或許就膩了
骯髒的設計三天就習慣了

ex 10
bug與規格是一體兩面

ex 11
電腦裡沒有bug,bug常在人心。

ex 12
無論怎麼檢查,不管怎麼確認,上線前一晚就是睡不著。(RFC968)

ex 13
估價需要1%的經驗與99%的直覺

ex 14
沒有什麼事情比直接讓找不到任何bug的程式直接上線還要可怕的了。

ex 15
・『程式設計師』=能將SE條理不通的說明翻譯成程式碼的高手
・『SE』=與客戶討論改寫規格書、與程式設計師討論後再改寫規格書,程式出貨後還要繼續改寫規格書的人
・『PM』=每天修改自己定下的行程表的人
・『業界老鳥』=臉色蒼白缺乏表情的人
・『外包』=幫不會寫程式的正職員工寫程式的人
・『coding』=複製貼上的工作
・『單體測試』=指開始寫程式
・『除錯』=把程式碼註解掉的工作
・『新同事』=在火燒屁股的專案火上加油的人
・『出貨日』=把只完成一半的系統上線的日子
・『末班電車』=業界平均的下班時間
・『颱風假』=一年一度可以準時下班的業界假日

ex 16
當誰寫的程式碼跑出bug時,那個人大概都不在了(墨菲定理?)

ex 17
最終手段
「重開機」
意外的常常都很有效

ex 18
最強藉口
以前「那是硬體的極限」
現在「那是Windows的規格」

ex 19
「程式碼的可信度,不會比寫的人還可信。」

星期二, 9月 30, 2008

ODBC, OLEDB, ADO 的差異

http://gordonliwei.spaces.live.com/Blog/cns!CCE1F10BD8108687!2629.entry
作者:李維 Delphi專家
重點:ODBC, OLEDB, ADO 的差異


在我的認知中OLEDB應該不可能比ODBC快,為什麼?這是一個故事,也是ODBC,OLEDB,ADO和dbExpress各自發展的原因,因此我們需要對於這些資料存取技術的背景有一個簡單的瞭解。

ODBC當初是MS為了在Window下提供一個共通的資料存取技術而發展出來的,目的是突破當時三大資料庫廠商Oracle,Sybase和Informix對於MS的SQL Server的圍堵,此外MS也想藉由這個共通的資料存取技術幫助MS Access擊倒Lotus和Approach,因此最早的ODBC的策略是提供一個最小公約數API,讓一個標準可以存取所有的資料庫,因此在ODBC的初期ODBC的效率很緩慢,因為除了實作技術不成熟之外,當時MS SQL Server的功能也不好,因此以SQL Server為中心思想發展出來的最小公約數ODBC在存取其他資料庫時簡直慢的不想話,這也是為什麼後來Borland發展出了BDE/IDAPI之後在功能和效率方面都比ODBC好上一大截的原因。但是當MS Server SQL逐漸成熟,ODBC的實作技術也慢慢成熟之後,以最小公約數為發展中心的ODBC因為功能最簡單,因此負荷最小,到了最後ODBC的效率是最好的資料存取之一。

OLEDB是當時MS想把COM/DCOM/COM+技術推為Windows平台的唯一技術時發展出來的,如此一來在Window平台所有的通訊,資料存取和元件都以COM/DCOM/COM+為核心,因此一度Borland也準備以COM/DCOM/COM+發展IDE,資料存取等。MS當時為了這個原因,因此有了OLEDB,但是舊的ODBC怎麼辦? 因此又發展出了ODBC和OLEDB Adapter的技術,讓ODBC也可以執行在COM/DCOM/COM+的世界,讓資料存取端認為ODBC也是OLEDB。OLEDB為什麼不會比ODBC快? 因為OLEDB功能比較多,而且OLEDB是以Ole Automation封裝傳遞的資料,負荷比ODBC大,因此ODBC應該會比較快。

至於ADO則是後來MS為MS Access,MS SQL Server特別在Windows平台發展出來的存取技術,因為當時由於Internet/Intranet的沖擊,MS的COM/DCOM/COM+不適合使用在Internet/Intranet上,因此MS逐漸準備放棄COM/DCOM/COM+,這也是OLEDB的長日將盡之日,ADO接手演出之時。ADO和ODBC不同的地方是,ADO再也不是使用最小公約數為中心,而是完全以MS的資料庫為核心,這也是為什麼當ADO推出後其他廠商並不熱衷支援ADO,我記得當時Oracle拒絕推出ADO For Oracle,MS迫不得已自己為Oracle寫了ADO驅動程式,但是又慢臭蟲又多,而Borland也決定繼續發展BDE/IDAPI,只是為ADO做簡單的封裝處理,但Delphi/BCB仍然以BDE/IDAPI為核心資料存取技術。

由於ADO不是使用最小公約數為中心,因此功能比ODBC多太多了,例如資料連結池,執行緒池,可分段存取資料,資料存取到用戶端時不是把所有記錄中的資料存取到用戶端,而是只把Key存取到用戶端,一旦當用戶端實際需要整筆資料時才藉由Key把資料存取到用戶端。因此如果只是簡單的單一用戶端存取資料測試,ADO不一定會比ODBC快,但是應該差不多,不過在實際的應用中,ADO應該是比ODBC整體效率快,但是記得ADO是為了MS的資料庫而生的,因此如果是使用ADO在其他廠商資料庫上則不一定。這是為什麼一些資料庫管理工具如果是管理多種不同的後端資料庫,那麼大多仍然是使用ODBC,為什麼? 因為簡單,因此穩定一點,所以快一點。例如Embarcadero的產品就是使用ODBC來管理後端多種資料庫。

OK,討論到這裡你應該知道ODBC,OLEDB和ADO的使用時機了。

現在回到dbExpress,dbExpress是為了跨平台發展出來的資料存取技術,不是為了特定的資料庫,也不是只為了Window 32平台。dbExpress可以執行在Win32,.NET,Win64,Linux,可以存取MS,Oracle等以及CodeGear自己的InterBase和BlackfishSQL。而dbExpress是結合跨平台和一些目前用戶端先進的資料存取概念為中心,例如dbExpress也提供連結池,執行緒池等。

OK,因此如果你使用dbExpress和ADO來比較存取MS的資料庫,那麼一定是ADO快一點,為什麼? 因為ADO是為了MS的資料庫而生。
如果你使用dbExpress和ODBC進行單一簡單的資料存取比較,那麼ODBC快一點,因為ODBC功能少,負荷少。但是在比較多的用戶端進行比較複雜的資料處理時,dbExpress就比ODBC表現的好多了,這和ADO比ODBC是類似的。
如果你想使用一種統一的資料存取技術,不管對於什麼平台,什麼資料庫都有良好的執行速度,因此當你改變資料庫時你的執行效率仍然很穩定,那麼dbExpress是王者。
ODBC,ADO和OLEDB已停止開發,因此如果你想使用一種仍然在開發之中而且能夠應用在未來Win64和多核心,多執行緒的世界,那麼dbExpress是比較好的解決方案。

Sybase ASE 常見問與答

來源


ASE 安裝過程中,安裝程式一直停留在初始化資料庫這一步,無法繼續

這是一個莫明其妙的 bug,在初始化庫的過程中,tempdb 滿了!
  解決方法:
    此時,ASE 服務實際已經啟動,因此,可以通過 isql 登錄,然後修改 tempdb 的大小:
    1. 在命令行下鍵入以下命令,注意斜體部份用實際服務名代替:
     c:\>isql -Usa -S 服務名
    2. 鍵入下面下劃線的命令:
     1>alter database tempdb on master ="2M"
     2>go


為什麼生產環境不要設置 truncate log on checkpoint?
  有些用戶貪圖簡便,在生產環境中設置了 truncate log on checkpoint 。其原意不外是避免因寫滿日誌而導致的業務停頓。殊不知,這樣的設置可能帶來不可挽回的災難。因為當事務被截斷後,從最近一次全備到當前的事務均不可能再恢復了!如果這期間出現問題,如磁片損壞,則將導致大量資料丟失。
  在生產環境中,應通過配置合理的備份策略來進行全備和增量備份。典型的策略是每週一次全備,每天一次增量備份。用戶應根據自身應用的實際情況(資料量、資料增量、資料重要性等因素),合理調整,如改為一天兩次增量備份。如果需要大量導入資料,可能寫滿日誌,那麼可能臨時設置 truncate log on checkpoint,但需要注意的是:完成資料導入後,應立即取消此設置,並馬上進行全備。  


如何分離日誌與資料?
  1、備份資料庫,包括 master 和你要分離資料與日誌的應用庫(廢話,根據 Sybase ASE 系統管理員日常維護指南,這一步是必不可少,以至於不用寫出來的步驟);
  2、檢查日誌是否有單獨的存放設備,如有,則直接到第5步;
  3、增加一個設備:disk init .....;
  4、alter database db_name log on new_log_device=xxx
  5、sp_dropsegment logsegment, db_name, device_name
  6、查看是否已分離(sp_helpdb或sp_helplog);
   需要注意的是,執行 sp_helplog 會提示以下類似資訊:
No valid log device can be found to contain the starting logpage of 'xxxx', on database 'xxxxx'. Perhaps the segment mapping of database has changed recently. Please inspect the sysusages catalog and contact your system administrator.
  你大可不必緊張。段(segment)只是管理以後如何為物件分配空間,增加和刪除 segment 並不移動當前的已分配空間。日誌至少有一個擴充(extend)位於以前的 segment 上(還記得嗎,為物件分配存貯單元時,實際是以 extend 為單位的。)。如果當前 extend 被填滿,需要再為日誌分配時,ASE會在新的 segment 上分配(segment 約束它不得不這麼做)。此時,截斷日誌就可以回收以前分配的 extend 了。
  7、因此,如果不想看到 sp_helplog 的“錯誤輸出”,你可以創建一個臨時表,然後往面插入足夠的資料,然後截斷日誌;
  8、老規矩,也是很重要的一步:備份資料庫,包括 master 和你分離資料與日誌的應用庫。


如何刪除tempdb資料庫在master設備上的記錄?
摘自 hobbylu 的博客。
sp_dropsegment 'system','tempdb','master'
go
sp_dropsegment 'default','tempdb','master'
go
sp_dropsegment 'logsegment','tempdb','master'
go
begin tran
delete from sysusages where dbid=2 and segmap=0
go
update sysusages set lstart=0 where dbid=2(注意這裏僅僅只考慮了一個tempdb設備的情況)
commit
go


新安裝ASE或新建服務後,用戶端無法連接伺服器
  在安裝完 ASE 或新建服務後,伺服器上能使用 dsedit 連接資料庫服務,但用戶端無法連接。
  通常的原因是資料庫服務綁定了 127.0.0.1,使用 dsedit,或直接修改 interfaces 檔,綁定確實的 IP 即可。


新安裝ASE或新建服務後,無法連接備份伺服器
  在安裝ASE或新建服務後,試圖 load 或 dump 資料庫時,總是提示如下資訊:
Can't open a connection to site 'SYB_BACKUP', See the error log file in the SQL Server boot directory.
error code = 7205
  通常,這是由於 ASE 安裝/服務初始化程式的 BUG 導致的。在創建服務時,ASE 會創建一個名為類似 XXXX_BS 的備份服務,同時會在 master..sysservers 中插入一條對應記錄。以服務名 FLYBAEN 為例,下面是 interfaces 檔和 sysservers 中的記錄:
  interfaces 檔內容:
FLYBEAN_BS
master tcp ether FLYBEAN_LINUX 5001
query tcp ether FLYBEAN_LINUX 5001

sysservers 的記錄:(select srvname, srvnetname from sysservers where srvname='SYB_BACKUP')
srvname srvnetname
------------------------------ --------------------------------
SYB_BACKUP FLYBEAN_BS
  通常默認的備份伺服器就是 SYB_BACKUP 。在 load/dump 時,ASE 通過 sysservers 獲取備份伺服器對應 interfaces 的資訊,然後在 interfaces 檔中搜索該服務的實際位置(IP和埠)。在此例中,ASE 通過 sysservers 得到 interfaces 中的服務名為 FLYBEAN_BS,然後在interfaces 中獲取該服務的物理資訊。如果 ASE 無法通過 sysservers 中的 srvnetname 在 interfaces 中獲取相關資訊,則會報上面的錯誤。
  那麼解決辦法就是非常簡單的。
  方法一:修改 interfaces 檔,將服務名改為 sysservers.srvnetname 對應的值;
  方法二:修改 sysservers 中相應記錄的 srvnetname 的值為 interfaces 檔中的服務名。


如何配置異地備份?
  自 12.5.0(12.0是否支持待確認) 開始,ASE 支持異地備份,具體方法舉例如下:
  假設兩台 ASE 資料庫伺服器,分別為 A 和 B,資料庫服務分別為: SRV_A, SRV_A_BS; SRV_B, SRV_B_S 。我們要把 B 上的資料庫 DB_1 備份到 A 上。
  1. 修改 B 上的 interfaces 檔,增加 SRV_A_BS 的配置,如:
    SRV_A_BS
      master tcp ether A BS_PORT
      query tcp ether A BS_PORT
  2.用 isql 登錄 SRV_B,為 SRV_B 增加一個遠端服務:SRV_A_BS
    sp_addserver "SRV_A_BS",null,"SRV_A_BS"
  3.測試:dump database DB_1 to 在 A 上的路徑及檔案名 at "SRV_A_BS"

系統崩潰了,沒有備份,但設備檔還存在,如何恢復資料庫?
  有的時候,系統崩潰了,手上也沒有資料庫的備份或者是備份太舊了,但僥倖的是設備還在,並且是完整的,這時可以通過檔COPY的方式恢復資料庫。
  情況一、所有設備,包括 master ,均是完整的:
  這種情況是最簡單的,只需要先備份設備檔(包括master,copy 到安全的地方),然後重新安裝系統,建服務(保持頁面大小、編碼和排序與以前一樣),然後停止服務,按原目錄將所有設備檔拷貝回來,再重啟服務即可。新建的服務名可與舊服務不同。建議把 服務名.cfg 也複製過來,省掉參數配置。
   情況二、應用的設備是完整的,但沒有master了:
  方法一、這種情況下要恢復資料庫就需要原來的設備使用情況表了。重新安裝系統,建服務,然後按原設備情況建設備(大小、位置保持和原來一致),接下來根據記錄下來的設備使用情況建庫,順序以及佔用的空間要和以前的一致。然後停服務,將應用的資料庫設備複製回來,重啟服務即可。請參考Sybase ASE 系統管理員日常維護指南的建議,定期備份 master 資料庫。
  方法二、
  1.重新創建 master 設備
   buildmaster -dthe_full_path_of_master_device -sthe_size 12.5版本以下
   dataserver -b (Windows: sqlsrvr -b)12.5(含12.5)以上 
  2.檢查並修改 RUN_XXX 檔,指向新創建的 master.dat,並增加 -T3608
  3.命令行啟動服務
  4.調整 master 庫的大小(可選)
  5.重新構建 master..sysdevices 數據
   disk reinit name="device_name", physname="full_path_of_device", vdevno=device_no,size=size_of_device
  6.重新構建 master..sysusages 數據
   disk refit
  8.修改恢復回來的資料庫名
  9.使用 isql,安裝 master 和 model
  10.創建登錄和用戶
  11.去除 RUN_XXX 檔中的 -T3608 標誌,重啟動服務


忘記了sa的密碼,怎麼辦?
  修改RUN_XXXX腳本,在其後面添加 -psa,然後在命令行運行該腳本,ASE會給出重新生成的密碼,用此密碼登錄並修改。
  注意:修改密碼後,應及時去掉添加的-psa。


調整參數後,ASE 無法啟動
  這是由於參數配置不正確,導致無法啟動。可以通過直接修改配置檔,或者將系統自動備份的配置檔拷貝回來。
  配置檔位於 ASE 安裝目錄下,命名規則為:服務名.cfg,如:/opt/sybase/ASE-15_0/FLYBEAN.log。每次調整參數後,ASE 會將備份以前的配置參數,形成諸如 服務名.三位序號 的文件,如:FLYBEAN.001,每次備份,序號會加 1。


如何跨平臺移植 ASE 資料庫?
  此處的跨平臺是指硬體平臺,如 Sparc <-> X86,它們之間存在高低位元組順序不同的問題。
•   BCP in/out;
•   如果 ASE 版本為 12.5.3 及以上,則可以通過 Dump/Load 功能直接載入。
  
如果不小心直接刪除了日誌的設備檔,如何恢復資料庫?
  首先,應盡可能從作業系統中恢復被誤刪除的設備檔;  如果不能恢復,可創建一個和被刪除設備檔大小相同的新設備檔,然後運行 dbcc rebuild_log。  下面給出一個具體的測試用例:
-- 創建測試資料庫 test
use master
go
disk init name='test_dat_dev',physname='/opt/sybase/data/test_dat_dev.dat',size='50M'
go
disk init name='test_log1_dev',physname='/opt/sybase/data/test_log_dev1.dat',size='10M'
go
disk init name='test_log2_dev',physname='/opt/sybase/data/test_log_dev2.dat',size='10M'
go

create database test on test_dat_dev='40M' log on test_log1_dev='5M', test_log2_dev='2M'
go

-- 產生一些日誌
use test
go
create table test (
id int not null,
name char(20) not null
)
go
insert into test values(1,'aaaaaaa')
insert into test values(2,'bbbbbbb')
insert into test values(3,'ccccccc')
insert into test values(4,'ddddddd')
go


-- 創建另一個資料庫,我們需要一個與測試資料庫第一個日誌設備相同的設備檔
use master
go
disk init name='test1_dat_dev',physname='/opt/sybase/data/test1_dat_dev.dat',size='50M'
go
disk init name='test1_log1_dev',physname='/opt/sybase/data/test1_log_dev1.dat',size='10M'
go
disk init name='test1_log2_dev',physname='/opt/sybase/data/test1_log_dev2.dat',size='10M'
go

create database test1 on test1_dat_dev='40M' log on test1_log1_dev='5M', test1_log2_dev='2M'
go

-- 作業系統操作:刪除 test_log_dev1.dat,然後重啟 ASE
mv test_log_dev1.dat test_log_dev1.back

-- 檢查一下資料庫的狀態,然後停 ASE
select name, status from sysdatabases
go
shutdown
go

-- 作業系統操作:拷貝 test1_log_dev1.dat 為 test_log_dev1.dat,重新啟動 ASE
cp test1_log_dev1.dat test_log_dev1.dat

-- 修改測試資料庫狀態,並重新啟動 ASE
sp_configure 'allow update',1
go
begin tran
go
update master..sysdatabases set status=-32768 where name='test'
go
commit
go
sp_configure 'allow update',0
go
shutdown
go

-- 重建日誌,可選步驟
dbcc traceon(3604)
go
dbcc rebuild_log(test,0,0)
go
online database test
go

如何清除Sybase log

手動清除log記錄檔
dump tran 資料庫名 with truncate_only

trunc log on chkpt 選項說明

如果你的trunc log on chkpt開放了這個選項,當SQL SERVER自動執行checkpoint時會清除不活動的日誌,但是對於正在進行的事務,不會清除那些活動的事務日誌,所以如果你的事務定義過大,還是會造成日誌空間的增大。
解決方法:
1.增加log設備空間;
2.將大的事務劃分成若干個小的事務。

星期一, 9月 22, 2008

8.0之前的postgreSQL 修改欄位

postgreSQL說明

4.3) 如何更改一個欄位的資料類型?

在8.0版本裡更改一個欄位的資料類型很容易,可使用 ALTER TABLE ALTER COLUMN TYPE 。

在以前的版本中,可以這樣做:

BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;


你然後可以使用 VACUUM FULL tab 指令來使系統收回無效資料所佔用的空間。

星期二, 9月 16, 2008

最新的雲端運算技術

李開復博士的演講

相關新聞

沒想到雲端技術已經發展到這種程度了,
之前聽說的時候還有點覺得是天方夜譚,
不過看來這倒是未來發展的一個趨勢。

星期三, 9月 03, 2008

MSDN中文線上教學

MSDN線上教學

真的不得不說微軟這方面做得真的不錯,
有中文的資料可以參考,
如果要學好其他語言英文要好,
不過微軟就不用了,
會中文一樣可以有資源可以參考,
果然在巨人的腳下有差別.....

如果JAVA要好呢....勤練英文吧 ORZ

星期五, 8月 22, 2008

CSS 實現網頁分頁效果

來源:w3schools

就是在指定的地方加入css標籤,進行換頁的動作

參考範例:

<div STYLE="page-break-after: always;"> 第一頁 </div>
第二頁

<P style='page-break-after:always'>&nbsp;</P>
第二頁

星期四, 8月 14, 2008

用正規表顯示千位貨幣顯示方式

<script language="JavaScript">

<!--

n="1279834847944074100465236.33"

re=/(\d{1,3})(?=(\d{3})+(?:$|\.))/g

n1=n.replace(re,"$1,")

alert(n+"\r\n"+n1)

//-->

</script>

星期二, 8月 05, 2008

解 Java class 檔案的 version

轉載 了解 Java class 檔案的 major.minor version
http://hkdennis2k.homeip.net/2007/12/08/%E8%BD%89%E8%BC%89-%E4%BA%86%E8%A7%A3-java-class-%E6%AA%94%E6%A1%88%E7%9A%84-majorminor-version/

每個編譯出來的 class 檔案擋頭都會有編寫 該class 檔案編譯的version 已達到其相容性

星期五, 8月 01, 2008

2008年度 java top 5 技術

Carlos Perez: Top Five Java Technologies to Learn in 2008

完整文章:http://www.theserverside.com/news/thread.tss?thread_id=48270

Posted by: Joseph Ottinger on ? 30, 2008 DIGG
Carlos Perez has posted his list of the top five Java-based technologies to learn in 2008. They are:

* OSGi (a specification for dynamic modules for Java)
* The Java Content Repository spec, first appearing in the JCP in February 2002
* Google Web Toolkit (first released in May, 2006)
* Groovy (first released in May, 2004)
* Cloud computing (a concept designed around the use of virtual servers, or distributed computing without the use of EJB)

Java: 淺談 OSGi 標準-愛德華日誌 (轉)

Java: 淺談 OSGi 標準

參考來源:
愛德華日誌
維基百科

OSGi 起源於1999 年三月,是由一些家用閘道器相關產業廠商所組合而成的組織,目前約有八十餘家廠商加入。包括了 IBM、Sun、BMW、Motorola、Nortel、Nokia、 Philips、Panasonic、Sony、Toshiba、Echelon 等。目前最新的標準是OSGi Specification 3.0。

當初制定OSGi 標準的最主要的目的,是要為遠端的服務提供者 (Service Provider) 與本地端的設備 (Device) 之間提供完整的點對點服務傳送解決方案。因此,OSGi 定義了一個開放性的平台,使得遠端軟體服務供應商所提供的應用程式 及加值服務,能視使用者需求,隨時下載至靠近用戶的閘道器 (Gateway) 上,並且自動安裝執行,而這裡所指的閘道器通常是連接家庭網路(Home Network)、辦公室網路 (Office Network) 與廣域網路間的一個裝置,如機上盒 (Set-top Box;STB)、ADSL數據機、纜線數據機 (Cable Modem)、住宅區閘道器 (Residential Gateway)等。透過這個開放性的平台,不同廠商所開發出的服務軟體及設備都能互相溝通及搭配使用。

在 OSGi 網站上的 FAQ 中,指出 OSGi 應用方向包括:

  • Services in the Home:
    • Communication
    • Information/entertainment
    • Safety and security monitoring
    • Energy management and metering
    • Appliance diagnostics and servicing
    • Telemedicine and healthcare monitoring
  • Services in the Car:
    • Navigation
    • Emergency assistance
    • Mobile commerce
    • Information/entertainment
    • Vehicle diagnostics
    • Location-based services

Again, we see java succeeded in J2ME. We can see many big-name companies in the OSGi member name list which include many companies come from many industries.

最近 OSGi 在軟體業最為人雀躍的發展,莫過於 Eclpise Java IDE 支援 OSGi 標準。這是一個有趣的現象,本來是設計給其他產業的運用,卻在軟體業也有不凡的表現。這也讓我想起 Java 的發展歷史,本來也是為了 embedded 系統而設計,卻意外的在 internet 竄起的年代獲得各方的矚目,更在 enterprise application 中立於不敗之地...

JMXOSGi 在功能上的許多重疊之處,在國外已經有人討論過 (例如 Eclipse Embeds OSGi Based MicroKernelJMX vs. OSGi - The New Flavor of the Eclipse Runtime)。不過我認為重點是:

  1. JMX 本來設計的用途就只為了管理,我們不該把他拿來 (over use) 作為開發應用程式的元件 (那是 EJB 或 JavaBeans 該做的事)。但 OSGi 卻可以!
  2. JMX 多數用於 server 系統中,而 OSGi 卻不限於所開發的應用程式。你可以用它開發 embedded 系統、desktop 程式,甚至是 server 程式。

OSGi 不但提供了與 JMX 相似的容器管理能力,甚至它本身就是一套精密的 Framework。OSGi 採用Micro-Kernel 的架構,可以提供無限延伸的功能。OSGi 的 Bundles 線上更新功能、以及應用程式之微量記憶體執行能力,都是開發應用程式的利基。

OSGi 與 J2EE 在設計上,我覺得完全是兩種思維模式:J2EE 的思維是 build on large scale,OSGi 的思維是 build on dynamic scale。OSGi 以小搏大...

OSGi Resources:

註:

目前我看到與 OSGi 有關的 JSR 為:

  • JSR 8: Open Services Gateway Specification (OSGi)
  • JSR 232: Mobile Operational Management

星期四, 7月 31, 2008

使用dos指令檢查目前網路連線狀況 netstat tracert

使用dos指令檢查目前網路連線狀況的指令,
在dos 模式下
輸入 netstat -na

會列出目前所有的連線狀況
由這邊檢查目前此電腦的連線情況

輸入 netstat -no
列出有id的所有目前電腦的連線狀態

查詢指令詳細內容:netstat ?

netstat -o【得知哪個PID有使用網路資源,對映工作管理員處理程序,不明程式立刻知!】
netstat -a【顯示本機上的外部連線】
netstat -n【顯示本機上的外部連線(IP型態,但不顯示非TCP連線)】

tracert www.google.com.tw【檢查對此主機的連線路由。】

ping 168.95.1.1【檢查對此主機的連線狀況,有無延遲。】


編輯常駐程式是否啟動:執行→msconfig
登錄編輯程式:執行→regedit

Eclipse 外掛 Fat-jar 包裝引用jar檔

參考文章:http://redbug.twbbs.org/index.php/2008/07/28/397

1. 設定Fat-jar
help-> software updates -> Find and Install -> Search for new features to install -> new remote site

輸入 plugin 的名字和更新的來源:
Name: Fat Jar
URL: http://kurucz-grafika.de/fatjar

2.要export的Project上按右鍵,選"build fat-jar"
之後便會跳出選單,把你的Main-Class 設定好,按下一步。
接著把你要一起包進去的lib1.jar lib2.jar ...勾選,按下一步。
它就會幫你全部打包成一個xxx.jar檔,並放置於你的Project的根目錄下。
這個xxx.jar檔無論放在什麼位置,應該都是雙點便可執行的。


※原本jar包裝方式
java -classpath proj.jar;lib1.jar;lib2.jar Main-ClassName(沒有.class哦)

封裝方式

星期三, 7月 30, 2008

web本機測試工具

http://www.fiddler2.com/fiddler2/

測試的時候開啟程式會自動將本機的proxy 修改為本機進行系統測試動作

星期四, 7月 24, 2008

安裝Eclipse Web Tools Platform

以下是線上安裝教學
http://eclipse.cdpa.nsysu.edu.tw/technology/phoenix/demos/install-wtp/install-wtp.html

檔案下載路徑:http://www.eclipse.org/webtools/

改成 Eclipse 3.4 以後
1. 下載 wtp-R-3.0
2. 直接在 Help > Software Updates > 進入 Available Software 選擇妳要安裝的WTP部分

總體上來說 Eclipse 3.4 比 3.3 好用多了

星期四, 7月 17, 2008

如何做好 ASE 資料庫備份管理

資料庫備份指令
dump database <db_name> to “<device name for tape>|<file name>”

資料庫還原指令
load database <db_name> from “<device name for tape>|<file name>”

ex: 公司使用指令
dump database dbname to 'compress::d:\dbbackup\dbname_data_日期.gz'
load database dbname from 'compress::d:\dbbackup\dbname_data_日期.gz' online database dbname

資料庫與資料整合
倍力資訊股份有限公司 版權所有 http://www.mpinfo.com.tw 1
如何做好 ASE 資料庫備份管理
作者:倍力資訊第一事業部 系統顧問
張安翔 先生

在電腦應用中,為防止可能由於各種原因所造成的損失,經常要對各種文件
進行備份。在資料庫的應用中,所儲存的資料如果遺失或遭到損壞,則可能會產
生無法預測的結果,或造成無法彌補的損失,所以應該對資料庫儲存的資料定期
作備份,以減少因資料遺失或損壞所造成的損失。然而在具體的使用中,發現集
中式的資料管理有其優點,就是資料風險範圍大為縮小,但是相對的風險卻比較
集中。因此如何做好資料庫的備份管理,也成為相當重要的課題。

在實際應用中,資料庫備份主要功用不外乎作資料庫系統的回復、重建或資
料庫移轉(或許為資料庫系統新舊版本的轉移) 。然而資料庫備份策略在於維護
系統資料安全,好的備份策略應該考慮保證資料的安全,並且以操作簡便為原
則。基本的操作過程很簡單,說明如下:

1. 有哪些資料需要備份?
„ master資料庫(含交易日誌) :master資料庫中包含許多用來記錄系
統相關資訊的表格,ASE 就是利用這些系統表格來控制和管理使用者
資料庫及資料庫系統的整體運作。當修改了 master資料庫之後,就應
該備份 master資料庫。如果 master資料庫遭到了破壞,就可以輕易
地復原系統和恢復使用者的資料庫。當 master資料庫重建和恢復之
後,便能夠恢復其他的系統資料庫的備份和已存在的使用者資料庫;相
反地,如果現行 master資料庫沒有備份,那麼就必須重建全部的系統
資料庫。
„ user資料庫(含交易日誌) :顧名思義指的就是使用者自行建立用來存
放資料的資料庫。使用者資料庫則應該有計劃的備份。當新建資料庫、
新建索引或執行了一些沒有日誌的操作時,就應該去進行完整的資料庫
備份。
„ server configuration files:每建一個伺服器所對應的一個環境設定組態
檔(Sybase 目錄下 servername.cfg) ,裡面記載著伺服器的各個相關
的環境參數,將此一檔案複製出來,在未來伺服器復原時可使用它來回
復先前的設定環境。

2. 何時必須進行備份?

為了將系統安全且完整的備份,必須根據具體的環境和條件,制定一個資料庫與資料整合
完善可行並可確保資料庫系統安全的備份計劃。為了制定完整的備份計劃,
則須考慮下列幾項要件:
„ 確定備份的頻率。對於資料庫的完全備份,可以每個月、每周甚至每天
執行一次,相對地,交易日誌(Transaction log)的備份是每週、每天
甚至每小時備份一次。
„ 確定要備份的系統資料庫和使用者資料庫的內容。
„ 確定備份所使用的媒體,是使用硬碟備份、光碟備份或磁帶備份等。
„ 確定是使用允許使用者繼續操作的線上(online)備份,還是不允許使
用者使用資料庫的離線(offline)備份。
„ 確定備份儲存的地方是否安全。

3. 備份的前置作業

即使資料庫中有資料不一致的情況發生,dump database 命令仍然可
以成功的執行完成。雖然這並非必要性動作,但仍強烈建議使用者在備份資
料庫之前先確保資料庫的一致性,如此一來我們就可以保證所備份出來的資
料在資料頁鏈接及配置上都是正確的。

„ dbcc(DATABASE CHECK CONSISTENCY)資料庫一致性檢查

dbcc 用來檢查一個資料庫邏輯一致性和物理一致性,通常在下面的情
况下使用 dbcc:
1. 一般的資料庫維護
2. 確定當一個系統錯誤後可能損壞的範圍
3. 在備份資料庫之前
4. 懷疑資料庫受到損壞
dbcc 有兩個主要功能:可檢查分配表結構(命令 checkalloc、
tablealloc) 、可檢查頁的鏈接和頁與行上的資料指標(命令 checkdb、
checktable) 。指定表格可以用 checktable、tablealloc 執行dbcc 命令。指
定資料庫可以使用 checkdb、checkalloc 和 checkcatalog選項。

„ dbcc checkdb:檢查指定資料庫(database)的一致性,比對該索引
頁和資料頁是否有正確地被鏈接、索引是否保持正確的排序順序、所有
的指標是否一致。
„ dbcc checktable:檢查指定表格(table)之索引頁及資料頁是否被正
確地鏈接、索引是否保持正確的排序順序、所有指標是否一致。
„ dbcc checkalloc:檢查指定資料庫中的資料頁是否有被正確的配置,以
及是否有資料頁被配置但未使用,或是否有資料頁被使用但未被配置。 資料庫與資料整合
„ dbcc tablealloc:檢查指定表格的分頁是否有被正確的配置。
„ dbcc checkcatalog:系統表格的一致性檢查。
„ dbcc checkstorage:指定資料庫檢查,但需要先建立dbccdb 資料庫,
再進行資料的搜集與資料的分析,此方法可以有效的降低資料被 lock
的時間。

4. ASE 的資料庫備份與恢復

資料庫的備份(backup) :

dump命令的使用
„ dump database <db_name> to “<device name for tape>|<file
name>”:將指定的資料庫完全備份下來,其中包含了資料及交易日誌,
該命令執行完並不會清除已完成的交易日誌。
„ dump transaction <db_name> to “<device name for tape>|<file
name>”:僅備份交易日誌,備份後會清除交易日誌的內容。
„ dump database|transaction <db_name> to “<device name for tape>”
at <remote_backup server name>:將資料庫或交易日誌備份至遠端的
備份伺服器上,此一方法僅能備份至磁帶(tape)上。
„ dump transaction <db_name> with truncate_only:不作備份,只清除
已成功的交易日誌,且會產生此一命令的 log 記錄。
„ dump transaction <db_name> with no_log:不作備份,只清除已成功
的交易日誌,但不產生此一命令的log記錄(當log的儲存空間不足且
無法再延伸時,可使用此一命令來清除log記錄) 。
„ dump transaction <db_name> to “<device name for tape>|<file
name>” with no_truncate:只作交易日誌的備份,但不作清除交易日誌
的動作。在資料庫毀損不能使用的情況下,仍可利用此命令做到
up-to-minute 交易日誌的備份。

quiesce 命令的使用(為 ASE 12.0以上版本新增的命令)
使用 quiesce 命令在資料庫 on line 時,強迫執行禁止交易的動作,接著再
以檔案複製的方式來進行資料庫的備分。
„ quiesce database <tag_name> hold <db_name> for external dump:
執行禁止交易的命令。
„ quiesce database <tag_name> release:解除禁止交易的命令。

資料庫的回復(recovery) :
必須先建立好空的資料庫,與原資料庫的大小及配置必須要完全一樣。資料庫與資料整合
如是採實體檔案複製的備份方式,則將複製出來的檔案再拷貝並取代新建好
的空資料庫即可。如採 dump 的方式備份,則須以 load 的命令來將資料庫
作完整回復(包含交易日誌的回復) 。

load database命令的使用
load database 命令用來將先前所備份的資料庫重新載入系統,載入並同時
執行回復的程序,所以先前備份時尚未完成的交易都要被取消,已修改的資
料會被回復至原來的狀態。執行load database 命令時,系統會自動將資料
庫離線(offline) 。
„ load database <db_name> from “<device name for tape>|<file
name>”:執行資料庫的回復作業。
„ load database <db_name> from “<device name for tape>|<file
name>” at <remote_server_name>:利用遠端的備份伺服器來執行資
料庫的回復作業。

load transaction命令的使用
在你執行完load database 命令,已將先前的資料庫備份回復後,接著你就
可以使用load transaction 命令來將先前所作的交易日誌備份,依照時間順
序一一的載入,這樣就可以藉此重新執行交易日誌中所記錄的資料異動反應
至重建的資料庫中。

執行完load 的命令之後,資料庫的狀態為offline,須利用 online database
<db_name>來將資料庫的狀態變更成 online,方可正常使用。

經由dump 及 load 命令,我們可以執行資料的備份、載入和清除交易日誌
的工作,一個完善的系統必須靠完善的備份計劃及平日經常性的資料備份
來建立。所以備份工作非但不能不作,更要作得確實。

星期二, 7月 15, 2008

FreeBSD刪除特殊檔名檔案

1. 先列出含有id 的檔案列表
ls -li

19713124 drwxrwxrwx 13 root wheel 512 Dec 21 2007 Cust_update
19713148 -rw-r--r-- 1 root wheel 71871 May 17 20:44 Cust_update\tmpcustupdate\0800006.jpg
21857184 drwxrwxr-x 6 pgadmin wheel 512 Jul 7 09:36 Wksht
20090202 drwxr-xr-x 2 pgadmin wheel 512 Jul 25 2006 confirm

2. 利用find 指令在檢查查詢檔案是否正確

hinet(5:19pm pgadmin ms28)/DATA/data# find ./ -inum 19713148
./Cust_update\tmpcustupdate\0800006.jpg

3. 正確之後再加找出檔案刪除
hinet(5:19pm pgadmin ms28)/DATA/data# find ./ -inum 19713148 -exec rm -rf {} \;
hinet(5:20pm pgadmin ms28)/DATA/data# ls -l

刪除目錄方法
rm -rf '目錄'

刪除檔案
rmdir <DIR NAME>

建立目錄
mkdir <DIR NAME>

星期四, 7月 10, 2008

星爺的 - 功夫語錄

上網搜尋的"功夫語錄"~~

活了這麼久,星爺是在亞洲人中真的是所謂的"電影娛樂界"的第一把交椅,
幾乎每一部電影裡頭總會有那麼幾句經典,
句句真真正正的反映出人世冷暖

 
‧這麼漂亮的女人,就因為往地上吐了一口口水,就被你們給抓到這而來,還有王法嘛? 還有法律嘛?

‧殺人嘛,我整天都有這種想法的。

‧這個世界,滿街是錢,遍地都是女人,誰能夠下決心,誰就能爭贏,誰能夠把握機會,就出人頭地。

‧難道我學過如來神掌,也要告訴你嗎?

‧如果有一天讓你打通任督二脈,那還不飛上天阿?

‧警惡懲奸,維護世界和平這個任務就交給你,好不好?

‧會功夫也不是罪啊。

‧你看你,穿條紅底褲,白裏透紅 ,出來慶功阿。包塊尿布吧!

‧不要以為你長的帥,我就不打你。

‧記憶是痛苦的根源,你能忘記,是福氣。聽你這麼說,是暗藏唏噓阿。

.問君能有幾多愁,恰似一江春水向東流。

‧十二路譚腿,攻守並重,名不虛傳。

‧(洪家)鐵線拳,剛中有柔,可謂拳中之尊。

‧五郎八卦棍,千變萬化,高深莫測。

‧一曲肝腸斷,天涯何處覓知音。

‧這塊布料藝術成分相當高的。有多高啊? 三、四層樓那麼高。

‧不要擋著我看戲阿。

‧什麼大哥?你有沒有公德心? 大嚷大叫,街坊不用睡覺啊,人家明天還要上班呀。

‧能力越大,責任就越大,你避不了的。

‧What are you prepare to do ?(病句)你還是說中文吧?!

‧大哥,你還是寫中文吧,看不懂啊?!

‧看來這位先生,對戴眼鏡人士,有很深的成見阿。

‧我身為文員,戴金絲眼鏡,是很合理,也很合邏輯,我戴得好看,你為何一定要針對我呢?

‧幫忙是吧,地痞是吧,龍形是吧,虎形是吧?

‧我一看你的樣子,就知道你除了好事,什麼都敢做。

‧不正常人類研究中心 。

‧---終極第一殺人王火雲邪神,果然很有派頭。 ---虛名而已。

‧我是殺了很多人,無非是想找個能打敗我的人,但最後發現,一個都沒有。

‧塑膠拖鞋是標新立異了點,倘若修修邊幅應該有前途。

‧老伯,這是什麼?砂煲大的拳頭你見過沒有?不要逼我出手吧,我發起瘋來,連我自己也怕呀?!

‧拳頭無力,還說是黑社會?!

‧天下武功,無堅不破,唯快不破。

‧---這種氣勢,難道就是人稱神雕俠侶的... ---楊過! ---小龍女!

‧你到底想要我打他本人,還是打他老母,你搞得我好亂阿。

‧年輕人,難免會行差踏錯,能懸崖勒馬已算不錯。

‧ ---如果他能好好讀書,我看他將來不是醫生就是律師。 ---但是他的樣子比較像武師!

‧---你這是什麼拳法? ---你想學?我教你啊?!

‧就算殺了一個我,還有千千萬萬個我。

‧我們只是想安想晚年的小市民,平凡是福,"高手"兩個字實在不想在揹了。

.要成為絕世高手,並非一昭一夕,除非是天生武學奇才,但是那種人,萬中無一。

.看來,只有當年終極殺人王火雲邪神...才有這樣的煞氣。

.你是耕田的就不要學人單挑啦。

.自從維護世界和平的重任交到我肩頭的那一刻,我深深的感受到了責任和壓力。

. 聊得挺投緣,賠點醫藥費算了。   

.正邪不兩立…正所謂我不入地獄誰入地獄。(出現兩次)      

.本來我要用這10元念書,當個醫生、律師,但為了世界和平……唉!

業績不好的原因,主要有三個

今天 小陳傳來一個笑話,真的有貼切到.....


業績不好的原因,主要有三個.....

在『業務檢討』會議中,長官經過一長串地痛心致詞之後,希望會中同仁能夠有話直說、踴躍發言。

就在一片寂靜,要上不下的尷尬氣氛中,突然一股吼聲蹦出來。有一位主管激動地起立致詞,

他說:「我們業績搞不好的原因,主要有三個:

第一,是沒後臺,就像寡婦睡覺,上面沒人。

第二,是政策多又變得快,像妓女睡覺,上面老在換人。

第三,是內部不團結,就像和老婆睡覺,自己人老搞自己人……

星期六, 7月 05, 2008

檢查硬碟壞軌 dos指令教學

使用chkdsk

CHKDSK [volume[[path]filename]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]]

volume 指定磁碟機代號 (後接冒號),
掛接點或磁碟區名稱。
filename 只能用在 FAT/FAT32: 指定要進行分散程度檢查的檔案。
/F 修復磁片上的錯誤。
/V FAT/FAT32 模式: 顯示磁碟上每個檔案的完整路徑
及名稱。
NTFS 模式: 如果有清除的訊息,也一併顯示。
/R 找出損壞的磁區並復原可讀取的資訊。
(包含 /F)。
/L:size 只適用於 NTFS 模式: 將記錄檔大小變更為指定的 KB
數值。如果沒有指定記錄檔大小,就顯示目前的大小。
/X 如果必須的話,強制先解下磁碟區。所有在
磁碟區上開啟的控制代碼都會失效 (包含 /F)。
/I 只適用於 NTFS 模式: 不檢查索引項目。
/C 只適用於 NTFS 模式: 跳過資料夾結構的循環檢查。

使用 /I 或 /C 參數跳過某些磁碟區檢查,可以在執行

用 執行硬碟檢查 chkdsk C: /f /r

星期五, 7月 04, 2008

set rowcount 用DBCP會死的很難看

我在 tomcat 中設定了用DBCP的連線方式去做 connect Pool

有一條練現你在怎麼查詢資料比數總是只有三筆
因為再登入的時候需要做一些參數的取得動作
發現在登入頁面有下了以下的設定的影響

CallableStatement cstmt = pg.con.prepareCall("set rowcount 3");
cstmt.execute();

還好這部分是從頭到尾自己做的,
如果是別人做的讓我來查不知道幾時才會查到這個問題...

tomcat 設定servlet-mapping

在tomcat4.1.X 之後,如果你寫的servlet 會出現無法取得的狀況時,
就修改 tomcat\Conf\web.xml 的設定

在 web.xml 中你可以尋找以下程式區段

<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->


把 <!-- --> 註解刪除掉,然後再重新啟動你的tomcat就可以了

安裝tomcat Plugin

網路上以及書上所說的tomcatPlugin都有問題下,找到了以下的下載路徑,

我個人的安裝環境如下

eclipse 3.3.2
tomcatPluginV321.zip
tomcat5.5.26

基本安裝步驟 tomcatPlugin 如下︰

1. 先到以下網址下載最新的 tomcatPlugin,並放入 eclipse的 plugin 目錄中

2. 安裝 tomcat ,請到官方下載 .zip 的檔案,個人下載 tomcat5.5.26

3. 設定本機系統環境,將 JAVA_HOME、PATH、CLASS_PATH 加入

4. 開始測試tomcat是否可以執行

  • commad 模式進入 tomcat\bin 執行 startup.bat

  • 測試 http://localhost:8080/是否可以執行



5. 開啟eclipse,到這邊我個人開啟之後就已經有tomcat的啟動按鈕出現了,如果沒有的話請依照以下步驟設定

  • 工具列進入 window > Customize Perspective > Commands 頁籤,在這邊你可以看到tomcat選項

  • 把tomcat選項勾選,你會發現在toolbar中多了三個tomcat啟動控制項



6.開始設定tomcat版本

  • 工具列進入 window > Preferences > Tomcat

  • 選擇tomcat版本

  • 設定tomcat home C:\Program Files\Apache Software Foundation\apache-tomcat-5.5.26

  • 回到主畫面,點選tomcat啟動,這時候你的tomcat 就可以正常在eclipse中執行了

星期四, 7月 03, 2008

Java VM規格書

http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

此文件為了解整個VM的基礎理論,
如果想要對java語言要更深入了解就必須要先了解他的VM官方白皮書

各種語言都有其VM說明

網頁暫存清除

1) 在HTML頁面裡加入..

<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>


2) 在JSP程式頁首加入
// 網頁暫存取消
if (request.getProtocol().compareTo("HTTP/1.0") == 0 )
response.setHeader("Pragma", "no-cache");
else if (request.getProtocol().compareTo("HTTP/1.1") == 0 )
response.setHeader("Cache-Control", "no-cache");

//prevents caching at the proxy server
response.setDateHeader("Expires", 0);
//HTTP 1.1
response.setHeader("Cache-Control","no-store");


3) 在ASP程式裡頁首處加入..
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"

星期三, 7月 02, 2008

SQL Injection之解決建議措施及相關資訊彙整(主計處)

SQL Injection之解決建議措施及相關資訊彙整(主計處)

漏洞說明:
SQL Injection是一種未做好輸入查驗(Input Validation)的問題,即在撰寫應用程式時,沒有對使用者的輸入做妥善的過濾與處理,便將其組合成SQL指令,傳送給SQL server執行。因而若使用者輸入之資料中含有某些對資料庫系統有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,而造成入侵所帶來的損失。事實上,這樣的疏漏並不是資料庫系統的錯誤,而是程式設計師或軟體開發者的疏忽所產生的。

影響平台:
使用網站系統:Apache、IIS、Domino、Netscape

使用程式碼:
ASP、PHP、JSP

攻擊破壞SQL資料庫:
包括 MS-SQL、MySQL、Oracle、Sybase、DB2 等等

SQL Injection可能造成的危害:
透過SQL Injection操作資料庫,可以新增、更動或刪除資料庫的資料,造成資料遺漏或是不正確;如果操作資料庫的使用者權限為系統管理者,那麼還有可能造成其他更嚴重的破壞,例如奪取資料庫的控制權。

SQL Injection的影響範圍:
只要有使用或連結資料庫的軟體、網路服務都有可能面臨SQL Injection的威脅。乍聽之下影響範圍似乎很大,但是大多數的商用軟體並不會有這樣的問題;比較嚴重的可能是網路服務部分,由於網站程式開發者的素質良莠不齊,或是對於資料庫的指令操作與系統管理不熟悉,所以只要有提供表單(Form)輸入介面的網站,都有可能面臨威脅。

解決之道與預防方法:
1. 對於字串的輸入加以過濾,並限制長度。例如 ' 或 " 這種單、雙引號都應該過濾掉,這樣可以避免輸入者利用 ' 或 " 這種單、雙引號截斷原本的SQL指令再插入自己的指令。過濾的方法依開發語言的不同而有不同的方法,以VB Script/ASP為例,過濾單引號的簡單方法為: SafeString = Replace(InputString, “'”, “''”)


2. 若輸入為數值資料則須確定其只輸入0~9之數字,若包含其他英文字母或符號則一律拒絕接受。

3. 對於前兩項的檢查必須寫在server端的程式上,如PHP、ASP及其他各種CGI程式,而不能將其寫於Java script或VB script等會於client端執行的程式上,因惡意使用者可將client端程式另存於本地端硬碟後,再將其修改以略過檢查。並且不要在server 上留有.bak或.old檔,若有.inc檔也不要取與主.asp相同或容易猜測之檔名,因為一般網頁伺服器會允許這些檔案的下載。

4. 加強資料庫帳號與權限管理,讓網站或軟體不以系統管理者的帳號連結資料庫,而對每個資料庫設定一組個別的帳號與強健的密碼,限制這組帳號僅能對該資料庫有讀寫權限。當面臨SQL Injection的侵入時,分權管理能夠限制損害的範圍,減少因為疏忽造成的損失。

5. 做好正確錯誤處理,最理想狀態是所有使用者輸入皆在程式設計者預期之中;若萬一出現非預期的情形也要做好例外處理,勿讓使用者直接看到系統傳回的錯誤訊息,以免惡意使用者由系統錯誤訊息中獲取過多資訊。

6. 全面檢視軟體的程式碼。這在一般商用軟體或應用軟體不太可能做到,但是可以詢問軟體廠商這類問題,以確保他們有進行檢查;網站程式的部分,可以請開發的程式設計師做一次全面性的檢查。

7. 各資料庫系統安裝時通常會有一些預先定義的Table,若確定這些Table並不需要使用到,最好予以刪除,以免惡意使用者利用這些Table獲取過多資訊。

8. 做好軟體開發控管。針對每個資料欄位的Input,確實做好檢查的工作,以降低開發出面臨威脅的程式或軟體。

相關網址:
1. SQL Injection FAQ:
http://www.sqlsecurity.com/faq-inj.asp

2. SQL Injection WhitePaper:
http://www.spidynamics.com/whitepapers/WhitepaperSQLInjection.pdf
3 『資料隱碼』SQL Injection的源由與防範之道
http://www.microsoft.com/taiwan/sql/SQL_Injection.htm

4. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(上)
http://www.microsoft.com/taiwan/sql/SQL_Injection_G1.htm

5. SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(下)
http://www.microsoft.com/taiwan/sql/SQL_Injection_G2.htm

星期四, 6月 26, 2008

form.elements的使用問題

今天在使用第一種鎖定頁面中輸入方塊 text & textarea 的時候,在某些頁面可以正常執行,但某些頁面不知道是什麼原因,查不到錯誤只好在改成下面的第二種方式

第一種 鎖定 text & textarea
function lostate(){
for (var i = 0; i < savform.elements.length; i++) {
var element = savform.elements[i];
if (['input', 'select', 'textarea'].include(element.tagName.toLowerCase())){
alert(element.tagName.toLowerCase());
//element.blur();
element.disabled = 'false';
}
}
}

第二種 鎖定 text & textarea
function lostate(){
for (var i = 0; i < savform.elements.length; i++) {
if (element.type =="text" || element.type =="button" || element.type =="file"){
element.disabled = "false";
}
}
}

星期五, 6月 20, 2008

對流血一週仍然不死的動物千萬不能大意(轉)


  1. 我和超人的唯一區別是:我把內褲穿在裏面了。
  2. 我不是隨便的人,但隨便起來就不是人。
  3. 我身在江湖,江湖卻沒有關於我的傳說……
  4. 寧願相信世間有鬼,也不相信男人那張破嘴!
  5. 水至清則無魚,人至賤則無敵。
  6. 騎白馬的不一定是王子,可能是唐僧;帶翅膀的不一定是天使,也可能是"鳥人"。
  7. 時間和乳溝一樣,擠一擠還是有的。
  8. 一山不能容二虎,除非一公和一母。
  9. 對流血一週仍然不死的動物千萬不能大意……
  10. 我,一個大學生的人生奮鬥目標:農婦,山泉,有點田。
  11. 一見鍾情,再而死,三而竭。
  12. 一個人並不孤單,想一個人時才孤單。
  13. 生,容易。活,容易。生活不容易。
  14. 流氓不可怕,就怕流氓有文化。
  15. 男人的謊言可以騙女人一夜,女人的謊言可以騙男人一生!
  16. 水能載舟,亦能煮粥!
  17. 你放心,看到你我連食欲都沒了,還談什麼性慾!
  18. 相親最大的好處是:如果日後婚姻出問題,你可以把責任推給媒人。
  19. 女人無所謂正派,正派是因為受到的引誘不夠;男人無所謂忠誠,忠誠是因為背叛的籌碼太低……
  20. 聰明的女人對付男人,而笨女人對付女人。

去年度的10個佳句:
10 . 問世間情為何物?一物剋一物。
09 . 避孕的效果:不成功,便成人。
08 . 錢不是問題,問題是我沒有錢。
07 . 喝醉了我誰也不服,我只要扶牆。
06 . 有錢人終成眷屬。
05 . 火煉金,金煉女人,女人煉男人。
04 . 一山不能容二虎,除非一公一母。
03 . 水能載舟,亦能煮粥。
02 . 鑽石恆久遠,一顆就破產。
01 . 我就像一隻趴在玻璃上的蒼蠅,前途一片光明,但是出路沒有。

其中 對流血一週仍然不死的動物千萬不能大意 原來是.......女人 Orz

星期二, 6月 17, 2008

Bad version number in .class file

Bad version number in .class file

今天發生的以上的錯誤訊息,
發現版本不合,
後來查出原因是因eclipse 預設的 JDK 版本的關西,
預設為系統中最新的版本,
因此編譯後放到 tomcat 上面去跑,會出現以上的錯誤,

在 eclipse 中,
window > References


修改 JDK Compiler 的版本即可

星期五, 6月 13, 2008

練英文聽力 - 轉

練英文聽力 : Cheers 快樂工作人

(1) http://www.englishbaby.com
星期一到五每天都有新的對話內容可以學習,也有錄音,錄音的速度近似美國人講話的速度,而且對話內容都是美國人最愛談論的內容,很棒的網站

(2) http://www.esl-lab.com
錄音的速度近似美國人講話的速度,網站的內容也多,練習聽力不可或缺的網站

(3) http://www.liveabc.com
目前有七百多句的英文常用句/俚話等,有錄音,也有中文解釋,可以好好利用

(4) http://www.freexinwen.com/chinese/eng/abc.htm
美國之音中文網,收錄四百多個美國習慣用語,有錄音,中文解說方面更為詳盡

(5) http://home.t-online.de/home/toni.goeller/idiom_wm/index.htm
雖然沒有錄音,解釋也都是全英文,但是我覺得它的版面設計的很好,很容易閱讀,不像很多網站會全部寫在一起,擠成一堆。

(6) http://www.geocities.com/thetropics/resort/5946/
英文烏龍笑話,雖然好像聽起來實用價值不高,但其實都是華人在美國發生的英文糗事,像是如果妳要照相照一個老外,他說他會break your camera,你一定會很生氣,覺得他很粗魯無理,但是他想說的只是,他不上相....跟弄壞你的相機一點關係也沒有

(7) http://engtap.greatnow.com
主要是練習聽力,指定一個topic請學生或是教授來談他們的看法什麼的,雖然不是全部都是美國人錄音,但是可以訓練聽不同口音的英文

(8) http://www.english-trailers.com
看電影的預告片來學英文,在看完預告片後還有填空題,讓你確定你剛剛聽到的是什麼字,很有趣的聽力練習方式

星期四, 6月 12, 2008

Google的 ajax 語系轉換

Google的 ajax 語系轉換

document 說明

星期三, 6月 11, 2008

java 轉換unicode

JDK 內附的 native2ascii tool

http://java.sun.com/j2se/1.4.2/docs/tooldocs/tools.html#intl

用來將多國語系轉換成為 unicode編碼格式,
可以在瀏覽器中顯示多國語系,

在 UTF8 編碼的jsp頁面中 include 頁面,
其中又包含有中文字,
可用這種方式先進行編碼動作,
在include之後瀏覽器可正常顯示

EX:

unicode到ascii的方式:
native2ascii -reverse 原檔名 轉換檔名

ascii到unicode方式:
native2ascii 原檔名 轉換檔名

範例
aaa.txt文件內容包括:中國
native2ascii aaa.txt bbb.txt
執行後變為:\u4e2d\u56fd

aaa.txt文件內容包括:\u4e2d\u56fd
native2ascii -reverse aaa.txt bbb.txt
執行後變為:中國

星期一, 6月 09, 2008

tomcat5.5連接DBCP

這幾天在弄DBCP的環境
環境:tomcat 5.5、jdk1.5、windowXP SP2
DBCP JAR:commons-dbcp-1.2.2.jar、commons-collections-3.2.jar、commons-pool-1.3.jar
參考文章 TOMCAT

1. 設置 conf\server.xml 在 <Host> ... </Host> 加入以下設定
  1. <Context path="" docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/ROOT"
  2. debug="5" reloadable="true" crossContext="true">
  3. <Resource name="jdbc/hxxg" auth="Container"
  4. type="javax.sql.DataSource"
  5. maxActive="100" maxIdle="10" maxWait="10000"
  6. username="syxxxx" password="_yoxxxx"
  7. driverClassName="com.sybase.jdbc3.jdbc.SybDriver"
  8. url="jdbc:sybase:Tds:172.17.1.5:5000/hxxg?autoReconnect=true"/>
  9. </Context>

以上 在 docBase 設定裡面 如果是 ROOT 目錄下的網站就要設定絕對路徑,
如果是 在 webapps 下的 hxxg 目錄的話,設定成
<Context path="/hxxg" docBase="hxxg" ....

2. 設置網站 WEB-INF/web.xml ,在 <web-app> ... </web-app> 加入以下設定,設定對應jdbc來源
  1. <resource-ref>
  2. <description>DB Connection</description>
  3. <res-ref-name>jdbc/hxxg</res-ref-name>
  4. <res-type>javax.sql.DataSource</res-type>
  5. <res-auth>Container</res-auth>
  6. </resource-ref>


3. 測試連線方式1,使用 DataSource 連接
  1. <%@page import="java.sql.*"%>
  2. <%@ page import="javax.sql.*" %>
  3. <%@ page import="javax.naming.*" %>
  4. <%@page contentType="text/html;charset=big5"%>
  5. <%
  6. try {
  7. Context initContext = new InitialContext();
  8. Context envContext = (Context)initContext.lookup("java:/comp/env");
  9. DataSource ds = (DataSource)envContext.lookup("jdbc/hxxg");
  10. Connection conn = ds.getConnection();
  11. if(!conn.isClosed())
  12. out.println("資料庫連線測試成功!");
  13. Statement stmt = conn.createStatement();
  14. conn.setAutoCommit(false);
  15. ResultSet rs = stmt.executeQuery("select loginid,password from wb005 ");
  16. while(rs.next()){
  17. out.println("loginid:"+ rs.getString("loginid")
  18. +":password:"+ rs.getString("password"));
  19. }
  20. conn.commit();
  21. conn.close();
  22. }
  23. catch(SQLException e) {
  24. out.println(e.toString());
  25. }
  26. %>

4. 測試連線方式2,使用 jstl 連接
  1. <%@taglib uri="http://java.sun.com/jsp/jstl/sql"
  2. prefix="sql" %>
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
  4. <sql:query var="rs" dataSource="jdbc/hxxg">
  5. select loginid, password from wb005
  6. </sql:query>
  7. <html>
  8. <head>
  9. <title>DB Test</title>
  10. </head>
  11. <body>
  12. <h2>Results</h2>
  13. <c:forEach var="row" items="${rs.rows}">
  14. loginid ${row.loginid}<br/>
  15. password ${row.password}<br/>
  16. </c:forEach>
  17. </body>
  18. </html>

主要SQL語法詳解

主要SQL語法詳解

CREATE DATABASE database_name [WITH LOG IN 「pathname」]


建立資料庫。

database_name:資料庫名稱。

「pathname」:事務處理日誌檔案。

建立一database_name.dbs目錄,存取權限由GRANT設定,無日誌檔案就不能使用

BEGIN WORK等事務語法(可用START DATABASE語法來改變)。

可選定當前資料庫的日誌檔案。

如:select dirpath form systables where tabtype = 「L」;

例:create databse customerdb with log in 「/usr/john/log/customer.log」;



DATABASE databse-name [EXCLUSIVE]

選擇資料庫。

database_name:資料庫名稱。

EXCLUSIVE:獨佔狀態。

存取當前目錄和DBPATH中指定的目錄下的資料庫,事務中處理過程中不要使用此語法。

例:dtabase customerdb;



CLOSE DATABASE


關閉當前資料庫。

database_name:資料庫名稱。


此語法之後,只有下列語法合法:

CREATE DATABASE; DATABASE; DROP DATABSE; ROLLFORWARD DATABASE;

刪除資料庫前必須使用此語法。

例:close database;


DROP DATABASE database_name


刪除指定資料庫。

database_name:資料庫名稱。

使用者是DBA或所有表的擁有者;刪除所有檔案,但不包括資料庫目錄;不允許刪除當前資料庫(須先關閉當前資料庫);事務中處理過程中不能使用此語法,通過ROLLBACK WORK 也不可將資料庫恢復。

例:drop databse customerdb;



CREATE [TEMP] TABLE table-name (column_name datatype [NOT NULL], …)

[IN 「pathname」]

建立表或臨時表。

table-name :資料表名稱稱。

column_name:字段名稱。

data-type:字段資料類型。

path-name:指定表的存放位置

TEMP用於指定建立臨時表;資料表名稱要唯一,字段要唯一;有CONNECT權限的使用者可建立臨時表;建立的表預設允許CONNECT使用者存取,但不可以ALTER。


例:create table user

( c0 serial not null, c1 char (10),

c2 char(2),

c3 smallint,

c4 decimal(6,3),

c5 date

) in 「usr/john/customer.dbs/user;



ALTER TABLE

ALTER TABLE table-name

{ADD (newcol_name newcol_type [BEFORE oldcol_name], …) | DROP (oldcol_name, …)

| MODIFY (oldcol_name newcol_type [NOT NULL], … )}, …

修改表結構。

table-name:資料表名稱稱。

newcol_name:新字段名稱

newcol_type:新字段類型

oldcol_name:老字段名稱

可以使用單個或多個ADD子句、DROP子句、MODIFY子句,但某個字句失敗,操作即中止;原字段是NULL,不允許MODIFY為NOT NULL,除非所有NULL字段中均非空,反之可以;ALTER使用者是表的擁有者或擁有DBA權限,或被授權;事務中處理過程中不要使用此語法。

例:alter table user

add ( c6 char(20) before c5);



RENAME TABLE oldname TO newname

修改資料表名稱。

oldname:原名稱。

newname:新名稱。

RENAME使用者是表的擁有者或擁有DBA權限,或被授權;事務中處理過程中不要使用此語法。

例:rename user to bbb;



DROP TABLE table-name

刪除表。

table-name:資料表名稱稱。

刪除表意味著刪除其中所有資料、各字段上的索引及對表的賦權、視圖等;使用者不能刪除任何系統目錄表;語法使用者是表擁有者或擁有DBA權限,事務中處理過程中不要使用此語法。



RENAME COLUMN table.oldcolumn, TO newcolumn

修改字段名。

table.oldcolumn:資料表名稱及原字段名稱

newcolumn:新字段名稱。

語法使用者是表的擁有者或擁有DBA權限或有ALTER權限的使用者,事務中處理過程中不要使用此語法。

例:rename column user.c6 to c7;

CREATE VIEW view-name column-list


CREATE VIEW view-name column-list AS select_statement [WITH CHECK OPTION]

建立視圖。

view-name:視圖名稱。

column-list:字段列表。

select_statement:SELECT語法。

以下語法不使用視圖:ALTER TABLE,DROP INDEX,ALTER INDEX,LOCK TABLE,CREATE INDEX, RENAME TABLE;視圖將延用基表的字段名,對表達式等虛字段和多表間字段重名必須指明標識其字段名;若對視圖中某些字段命名,則所有字段都必須命名;視圖中資料類型延用基表中的資料類型,虛字段起訣於表達式;不能使用ORDER BY和UNION子句;對視圖中所有的字段要有SELECT權限;事務中處理過程中使用此語法,即使事務回滾,視圖也將建立,不能恢復。

例:create view v_user as select * from user where c1 = 「B1」;



DROP VIEW view-name

刪除視圖。

view-name:視圖名稱。

使用者可刪除自己建立的視圖;視圖的後代視圖也被刪除;事務中處理中不要使用此語法。

例:drop view v_user;

CREATE INDEX


CREATE [UNIQUE/DISTINCT] [CLUSTER] INDEX index_name ON table_name

([column_name ASC/DESC],…)

建立索引。

index_name:索引名稱。

table_name:資料表名稱稱。

column_name:字段名稱。

UNIQUE/DISTINCT:唯一索引。

CLUSTER:使表的實際存放順序按索引排列。

ASC/DESC:升序或降序,預設升序。

語法執行時,將表的狀態置為EXCLUSIVE;復合索引最多包含8個字段,所有字段長度和不得大於120字節;事務中處理過程中使用此語法,即使事務回滾,索引將建立,不能恢復。

例:create cluster index ix_user on user(c5);



ALTER INDEX index-name TO [NOT] CLUSTER

修改索引性質。

index-name:索引名稱。

TO [NOT] CLUSTER:去掉或加上CLUSTER屬性。

語法執行時,將表的狀態置為EXCLUSIVE;事務中處理過程中使用此語法,即使事務回滾,索引性質將改變,不能恢復。

例:alter index ix_user to not cluster;

DROP INDEX index-name


刪除索引。

index-name:索引名稱。

語法使用者是索引的擁有者或擁有DBA權限,事務中處理過程中不要使用此語法,否則事務無法恢復。

例:drop index ix_user;



CREATE SYNONYM synonym FOR table-name

建立同義名。

synonym:同義名

table-name:資料表名稱稱

資料庫的建立者可以使用同義名;沒有賦予同義名權限的使用者不能使用同義名;同義名不能和資料表名稱相同;事務中處理過程中不要使用此語法。

例:create synonym user_alias for user;



DROP SYNONYM synonym

刪除同義名。

synonym:同義名

可以刪除自己建立的同義名;事務中處理過程中不要使用此語法,否則無法恢復。

例:drop synonym user_alias;



UPDATE STATISTICS [FOR TABLE table-name]

更新資料庫的統計數字。

table-name:資料表名稱稱

此語法僅作用於當前資料庫;可提高查詢效率;只有執行此語法,才改變統計資料。


例:update statistics for table user;

GRANT {DBA|RESOURCE|CONNECT} TO {PUBLIC|user-list}
授權命令。

PUBLIC|user-list:全部或指定的使用者。

三種權限居且僅居其一,事務處理過程中不要執行GRANT語法。

例:grant resource to pulbic;

GRANT tab-privilege ON table-name TO {PUBLIC|user-list} [WITH GRANT OPTION]


授表級權限。

tab-privilege:表級權限。

table-name:資料表名稱稱。

PUBLIC|user-list:全部或指定的使用者。

[WITH GRANT OPTION]:表示被授權使用者有否權限進行二次授權。

使用者可以在自己建立表達式或被[WITH GRANT OPTION]准許的表中進行賦權;限定越多的權限優先級越高。

例:grant update(c1,c6) on user to dick with grant option;



附(INFORMIX的權限)

(1) 資料庫的權限(控制對資料庫的瀏覽以及資料庫中表的建立和刪除)


DBA權限:全部權利,修改系統表,建立和刪除表與索引、增加和恢復表資料,以及授予其他使用者資料庫權限等;

RESOURCE權限:允許對資料庫表中的資料進行存取,建立永久性表以及索引。


CONNECT權限:只允許對資料庫表中的資料進行存取,建立和刪除視圖與臨時表。

(2)表級權限(對表的建立、修改、檢索和更新等權限)


ALTER:更改權限

DELETE:刪除權限

INDEX:索引權限

INSERT:插入權限

SELECT [(cols)]:指定字段或所有字段上的查詢權限,不指明字段預設為所有字段。

UPDATE [(cols)] :指定字段或所有字段上的更新權限,不指明字段預設為所有字段。

ALL [PRIVILEGES]:以上所有表級權限



REVOKE {DBA|RESOURCE|CONNECT} FROM {PUBLIC|user-list}

收權命令。

PUBLIC|user-list:全部或指定的使用者。

三種權限居且僅居其一,事務處理過程中不要執行GRANT語法。

例:revoke resource from john;

REVOKE tab-privilege ON table-name FROM {PUBLIC|user-list}


收表級權限。

tab-privilege:表級權限。

table-name:資料表名稱稱。

PUBLIC|user-list:全部或指定的使用者。


[WITH GRANT OPTION]:表示被授權使用者有否權限進行二次授權。

使用者只能取消由其本人賦予其他使用者的表級存取權限;不能取消自己的權限,對SELECT和UPDATE作取消時,將取消所有表中字段的SELECT 和UPDATE權限。

例;revoke update on user from dick;



LOCK TABLE table-name IN {SHARE|EXCLUSIVE} MODE

記錄級加鎖和表級加鎖或檔案加鎖。

table-name:資料表名稱稱。

SHARE:允許讀表中資料,但不允許作任何修改

EXCLUSIVE:禁止其他任何形式瀏覽表

每次只能對表瑣定一次;事務處理過程中,BEGIN WORK後立即執行LOCK TABLE以取代記錄級加鎖,COMMIT WORK和ROLLBACK WORK語法取消所有對表的加鎖;若沒有事務處理,鎖將保持到使用者退出或執行UNLOCK為止。

例:lock table user in exclusive mode;



UNLOCK TABLE table-name

取消記錄級加鎖和表級加鎖或檔案加鎖。

table-name:資料表名稱稱。

例:unlock user;

SET LOCK MODE TO [NOT] WAIT

改變鎖定狀態。

TO [NOT]:等待解鎖,有可能被死鎖或不等待並提示錯誤訊息,表示此記錄被鎖,預設值。

瀏覽一個EXCLUSIVE狀態下的記錄,將返回一個錯誤。



START DATABSE db_name [WITH LOG IN 「pathname」]

啟動事務處理。

「pathname」:事務處理日誌檔案。

執行該語法前,需要先關閉當前資料庫。

例;clost database;

start databse customer with log in 「/usr/john/log/customer.log」;



BEGIN WORK

開始事務。例:begin work;



COMMIT WORK

提交(正常結束)事務。例:commit work;



ROLLBACK WORK

回滾(非正常結束)事務。例:rollback work;



SELECT

SELECT select_list FROM tab_name|view_name

WHERE condition

GROUP BY column_name


HAVING condition

ORDER BY column_list

INTO TEMP table_name

查詢語法。

select_list:選擇表或*

tab_name:資料表名稱稱

view_name:視圖名稱。

condition:查詢條件,可使用BETWEEN、IN、LIKE、IS NULL、LIKE、MATCHES、NOT、

AND、OR、=、!=或<>、>、 >= 、<=、<、ALL、ANY、SOME

column_name:分群組字段名稱

condition:群聚條件

column_list:排序字段列表,預設ASC,可指定DSC;排序時,NULL值小於非零值。


table_name:臨時資料表名稱稱

例:略

附(常用函數)

(1)集合函數:

count(*)、

sum(資料項/表達式)、avg(資料項/表達式)、max(資料項/表達式)、min(資料項/表達式)

count(distinct 資料項/表達式)、sum(distinct資料項/表達式)、avg(distinct資料項/表達式)

(2)代數函數和三角函數

HEX(資料項/表達式)、ROUND(資料項/表達式)、TRUNC(資料項/表達式)、


TAN(資料項/表達式)、ABS(資料項/表達式)、MOD(被除數,除數)

(3)統計函數

標準差,stdev()、方差,variance()、範圍,rang()

(4)時間函數

DAY(日期/時間表達式):返回數字型

MONTH(日期/時間表達式):返回整數

WEEKDAY(日期/時間表達式):0


DATE(非日期表達式):返回日期型

EXTEND(日期/時間表達式,[第一個至最後一個]):返回指定的整數

MDY(月,日,年):返回日期型

CURRENT:返回日期型

(5)時間函數

ROUND(),四捨五入。如:ROUND(10.95,position)position進行四捨五入的前一位置

TRUNC(),截取。如:TRUNC(10.95,0)position截取的位置

INFORMIX臨時表在下列情況下自動取消:

A.退出資料庫瀏覽工具(如DBACCESS)

B.SQL通話結束(DISCONNECT)

C.發出取消表語法

D.退出程式時

INSERT
INSERT INTO view_name|table_name [(column_list)] VALUES (value_list)

或 INSERT INTO view_name|table_name [(column_list)] select_statement

插入資料

view_name|table_name:視圖名或資料表名稱稱

column_list:資料項列表。

value_list:值列表

select_statement:查詢語法。

例:略



DELETE FROM view_name|table_name WHERE search-conditions
刪除語法。

view_name|table_name:視圖名或資料表名稱稱

search-conditions;刪除條件

例:略


UPDATE
UPDATE view_name|table_name SET column_1 = value_1ist WHERE search_conditions

或UPDATE view_name|table_name SET column_1|* = value_1ist WHERE search_conditions

更新資料語法。

view_name|table_name:資料表名稱稱或視圖資料表名稱稱

value_1ist:字段值

search_conditions:更新資料的條件


例:略


CHECK TABLE table-name
檢查索引語法。

語法使用者是表的擁有者或擁有DBA權限;不能對systable使用此語法。

例:略


REPAIR TABLE table-name
修復索引。

語法使用者是表的擁有者或擁有DBA權限;不能對systable使用此語法。

例:略


LOAD FROM 「file-name」 INSERT INTO table_name [(column_name[,…])]
將文本資料栽入表中。

例:load form 「aa.txt」 insert into user;


UNLOAD TO 「pathname」
將表中資料卸為文本。

例:unload to 「aa.txt」 select * from user;


INFO
系統訊息查詢。

INFO TABLES:得到當前資料庫上表的名字。

INFO columns FOR table_name:指定表上的字段訊息。

INFO INDEXES FOR table_name:指定表上的索引訊息。

INFO [ACCESS|PRIVILEGES] FOR table_name:指定表上的存取權限。

INFO STATUS FOR table_name:指定表的狀態訊息。


例: info tables;

星期五, 6月 06, 2008

聰明說話35招(轉)

職場的應對進退要小心,以下歸納出35項國內外溝通專家的建議,幫助你學會說對話,贏得好人緣,拉抬職場身價。

文/吳凱琳 圖/50cc
2008年6月 Cheers雜誌

讚美時,你該說……
1.讚美行為而非個人。

舉例來說,如果對方是廚師,千萬不要說:「你真是了不起的廚師。」他心裡知道有更多廚師比他還優秀。但如果你告訴他,你一星期有一半的時間會到他的餐廳吃飯,這就是非常高明的恭維。

2.透過第三者表達讚美。

如果對方是經由他人間接聽到你的稱讚,比你直接告訴本人更多了一份驚喜。相反地,如果是批評對方,千萬不要透過第三者告訴當事人,避免加油添醋。

3.客套話也要說得恰到好處。

客氣話是表示你的恭敬和感激,所以要適可而止。有人替你做了一點點小事,你只要說「謝謝。」、「對不起,這件事麻煩你了。」至於「才疏學淺,請閣下多多指教。」這種缺乏感情的客套話,就可以免了。

4.面對別人的稱讚,說聲謝謝就好。

一般人被稱讚時,多半會回答「還好!」或是以笑容帶過。與其這樣,不如坦率接受並直接跟對方說謝謝。有時候對方稱讚我們的服飾或某樣東西,如果你說:「這只是便宜貨!」反而會讓對方尷尬。

5.有欣賞競爭對手的雅量。

當你的對手或討厭的人被稱讚時,不要急著說:「可是……」,就算你不認同對方,表面上還是要說:「是啊,他很努力。」顯示自己的雅量。
批評時,絕不要……

6.批評也要看關係。

忠言未必逆耳,即便你是好意,對方也未必會領情,甚至誤解你的好意。除非你和對方有一定的交情或信任基礎,否則不要隨意提出批評。

7.批評也可以很悅耳。

比較容易讓人接受的說法是:「關於你的……,我有些想法,或許你可以聽聽看。」

8.時間點很重要。

千萬不要在星期一早上,幾乎多數人都會有「星期一憂鬱」的症狀。另外也不要在星期五下班前,以免破壞對方週末休假的心情。

9.注意場合。

不要當著外人的面批評自己的朋友或同事,這些話私底下關起門來說就好。

10.同時提出建議。

提出批評之外,還應該提供正面的改進建議,才可以讓你的批評更有說服力。
回話時,要小心……

11.避免不該說出口的回答。

像是:「不對吧,應該是……」這種話顯得你故意在找碴。另外,我們也常說:「聽說……」,感覺就像是你道聽塗說得來的消息,有失得體。

12.別回答「果然沒錯!」

這是很糟的說法,當對方聽到這種回應時,心中難免會想:「你是不是明知故問啊?」所以只要附和說:「是的!」

13.改掉一無是處的口頭禪。

每個人說話都有習慣的口頭禪,但會容易讓人產生反感。例如:「你懂我的意思嗎?」、「你清楚嗎?」、「基本上……」、「老實說……」。

14.去除不必要的「雜音」。

有些人每一句話最後習慣加上「啊」等語助詞,像是「就是說啊」、「當然啦」,在比較正式的場合,就會顯得不夠莊重穩重。

15.別問對方「你的公司是做什麼的?」

你在一場活動遇到某個人,他自我介紹時說自己在某家公司工作。千萬別問:「你公司是做什麼的?」這項活動也許正是他們公司舉辦的,你要是不知道就尷尬了。也不要說:「聽說你們做得很好!」因為對方可能這季業績掉了3成。你應該說:「你在公司擔任什麼職務?」如果不知道對方的職業就別問,因為有可能他沒工作。

16.別問不熟的人「為什麼?」

如果彼此交情不夠,問對方「為什麼?」有時會有責問、探人隱私的意味。例如,「你為什麼那樣做?」、「你為什麼做這個決定?」這些問題都要避免。
做面子,給別人……

17.別以為每個人都認識你。

碰到曾經見過面,但認識不深的人時,絕不要說:「你還記得我嗎?」萬一對方想不起來,就尷尬了。最好的方法還是先自我介紹:「你好,我是×××,真高興又見面了。」

18.拒絕也可以不失禮。

用餐時,若主人推薦你吃某樣你不想吃的東西,可以說:「對不起,我沒辦法吃這道菜,不過我會多吃一點××。」讓對方感受到你是真心喜歡並感謝他們準備的食物。如果吃飽了,可以說:「這些菜真好吃,要不是吃飽了,真想再多吃一點。」

19.不要表現出自己比對方厲害。

在社交場合交談時,如果有人說他剛剛去了紐約1星期,就不要說上次你去了1個月,這樣會破壞對方談話的興致。還不如順著對方的話,分享你對紐約的感覺和喜愛。

20.不要糾正別人的錯誤。

不要過於雞婆地糾正別人的發音、文法或事實,不僅會讓對方覺得不好意思,同時也顯得你很愛表現。

21.不懂不要裝懂。

如果你對談話的主題不了解,就坦白地說:「這問題我不清楚。」別人也不會繼續為難你。如果不懂還要裝懂,更容易說錯話。

看臉色,別衝動……

22.掌握1秒鐘原則。

聽完別人的談話時,在回答之前,先停頓1秒鐘,代表你剛剛有在仔細聆聽,若是隨即回話,會讓人感覺你好像早就等著隨時打斷對方。

23.聽到沒有說出口的。

當你在傾聽某人說話時,聽到的只是對方知道、並且願意告訴你的。除了傾聽,我們還必須「觀察」。他的行為舉止如何?從事什麼工作?如何分配時間與金錢?

24.時間點對了,什麼都對。

當你有事要找同事或主管討論時,應該根據自己問題的重要與否,選擇對的時機。假若是為個人瑣事,就不要在他正埋頭思考時打擾。如果不知道對方何時有空,不妨先寫信給他。
去尷尬,有方法……

25.微笑拒絕回答私人問題。

如果被人問到不想回答的私人問題或讓你不舒服的問題,可以微笑地跟對方說:「這個問題我沒辦法回答。」既不會給對方難堪,又能守住你的底線。

26.拐彎抹角回絕。

許多社交場合,喝酒總是無法避免。不要直接說:「我不喝酒。」掃大家的興。不如幽默地說:「我比較擅長為大家倒酒。」

27.先報上自己大名。

忘記對方的名字,就當作是正式場合,向對方介紹自己的名字或拿出名片,對方也會順勢報上自己的大名和名片,免除了叫不出對方姓名的窘境。

28.不當八卦傳聲筒。

當一群人聊起某人的八卦或傳言時,不要隨便應聲附和,因為只要說出口的話,必定會傳到當事人耳中。最好的方法就是不表明自己的立場,只要說:「你說的部份我不太清楚。」

29.下達「送客令」。

如果你覺得時間差不多該結束談話或送客,但對方似乎完全沒有要起身離開的意思,可以說:「不好意思,我得打通電話,時間可能有點久……」,或是:「今天真的很謝謝你來……」。你也可以不經意地看看自己的手錶,讓對方知道該走了。

30.讓對方覺得他很重要。

如果向前輩請求幫忙,可以說:「因為我很信任你,所以想找你商量……」讓對方感到自己備受尊敬。
評部屬,要恰當……

主管如何和部屬溝通,才能說得恰到好處又不傷關係?資誠企業管理顧問公司進行內部教育訓練時,教導新手主管5項溝通守則。

31.直接描述現狀。

和部屬意見不同時,不要直接批評,而要說明不同點在哪。

32.尋求解決。

如果部屬績效不佳,應該要詢問他可以如何解決,不要採取威脅態度。

33.主動表達幫忙。

如果一時之間無法解決部屬的問題,不要說「這種事先不要來煩我」,而是告訴他「我知道有誰可以幫忙」。

34.說話語氣要平等。

主管切忌說「我有十幾年的經驗,聽我的就對了。」比較好的說法是:「這方法我用過,而且很有效,你要不要試試看?」

35.彈性接納部屬意見。

即使你心有定見,也不要對部屬說:「這些建議都考慮過了,不必再多說。」還是應該給部屬機會,對他說:「關於這個問題,我已有了腹案,不過仍想聽聽你的看法。」

星期五, 5月 30, 2008

temptable 使用說明

在進行分頁時可以利用temptable 達成分頁的方式,
temptable 會在連線close之後清除

select rowid=identity(12), column_name into #temptable1 from tablename

select column_name from #temptable1 where rowid >xxxx and rowid < yyyy

PS.
1. # 一定要加,才會是暫存temptable
2. temptable的名稱為 temptable + id 的方式產生

Index & Performance

來源:http://www.souzz.net/big5.php?/html/database/SYBASE/10584.html

在應用系統中,尤其在聯機事務處理系統中,對數據檢索及處理速度已成為衡量應用系統成敗標準。而采用索引來加快數據處理速度也成為廣大數據庫用戶所接受的優化方法。

  索引的使用效果不僅僅依賴于SQL Server的優化策略,在相當程度上也依賴于應用程序的設。怎樣正確地使用索引,不能一概而論,究竟是讓索引滿足程序設計的需要,或是程序設計遵循已建立的索引,這兩者是相符相承的。只有正確地使索引與程序結合起來,才能產生最佳的優化方案。

  建立索引的目地是為了優化檢索速度,如果檢索所需要的時間過長,便有理由懷疑是否索引不存在或者優化器沒有使用索引。尚若是索引不存在,那麼就要取決于用戶是否願意用空間來換取時間,使用索引來解決檢索速度慢的問題。如果優化器未使用表上已有的索引,那麼要分析為什麼,關于這一點將在後一點篇幅來說明如果update的效率很低,很可能是由于表上有太多的索引需要維護,從而浪費了時間。

優化器怎樣使用索引

Table scan

  如果表上沒有任何索引,那麼檢索將采用Table Scan方式進行,其所用時間主要依賴于表的大小。

  例如︰

- dbcc checktable 測出表佔76923頁
-系統每秒讀取50頁
-76923頁/50頁/秒=1538秒 (大約25分鐘)

  如果系統有比較大的cathe,某些數據可能由于以前已被讀到內存,那麼讀取數據時間可能會低于估計的時間。一般情況下,Tablescan檢索是由于表上沒有ClusteredIndex或者優化器認為,表中將有20%的數據做為結果追回。

使用索引(條件為指定值)

索引中包含指定記錄的值及地址,SQL Server不必做全表掃描。

  例︰ select * from title where title_id="mc3021"



當優化器認為讀取索引頁I/O加讀取數據頁I/O比做Table Scan效果更好時,檢索將使用索引。

使用索引(條件為某範圍內值)

例︰

select * from titles
where title_id >"BU1032"
and title-id <"mc3032"



如果數據是排序的(有Clustered索引),索引將被用來限制數據的掃描範圍。

使用索引避免檢索排序所需要的時間。

例︰

select * from titles
order by title_id



對Clustered索引來說,如果索引順序與Server順序一致,那麼上面的查尋不需要重新排列返回結果。但是,若數據存儲本身是升序排列,而查尋要求降序排列,那麼索引對加快查尋沒有任何作用。

  對于Non-Clustered索引,優化器將判斷查尋Non_Clustered索引頁,找到滿足條件的數據進行排序是否比Table Scan更快,優化器將找出最佳結果。從以上幾例可以看出,並非在表上建立了Clustered或on-Clustered索引之後,就一定會被使用,優化器是否使用索引取決于數據的查尋命令,SQL Server將從幾個檢索方案中選擇最佳的一個。

在什麼樣的條件下才選擇Clustered索引呢?

  選擇什麼樣的索引基于用戶對數據的檢索條件,這些條件體現于where從句和join表達式。如果你的應用與以下情況相符,你可以考慮選擇Clustered索引。

主鍵時常作為where子句的條件

某一列經常以這樣的格式出現在where表達式中(x<=column <="y)"

某一列非常頻繁地被訪問

某列被用作order by或group by

某列很少被改寫

某列常出現在join中。

Non-Clustered常被用在以下情況︰

某列常用于Aggregate函數(如Sum,....)

某列常用于join,order by,group by。

查尋檢索出的數據不超過表中數據量的20%。

索引覆蓋

  檢索覆蓋是指Non_Clustered索引項中包含查尋所需要的全部信息。這種索引之所以比較快也正是因為索引頁中包含了查尋所必須的數據,不需去訪問數據頁。如果Non-Clustered索引中包含結果數據,那麼它的檢索速度將快于Clustered索引。覆蓋索引的缺點︰由于索引項比較多,要佔用比較大的空間。而且update操作會引起索引值改變。

SQL Server對索引的限制

每個表上最多僅能有一個Clustered索引。

如果表上有一個Clustered索引,最多還能有249 Non-Clustered索引。

當沒有Clustered索引時,則可有250個Non-Clustered索引。

索引最多建立在256個列上。

當索引被創建時,SQL Server需要120%的附加空間。

索引維護

  隨著應用系統的運行,數據不斷地發生變化,當數據變化達到某一個程度時將會影響到索引的使用。上面講到,某些不合適的索引影響到SQL Server的性能,這時需要用戶自己來維護索引。一種方法是刪除老的索引,重新建新的索引。另外一種方法是保持索引統計有效(使用命令update statistics),在以下情況下需要重新索引。

使用數據模式發生了較大變化。

某段時間內有極大量的數據插入。

SQL Server排序改變。

dbcc發現索引錯誤。

  當重建Clustered索引時,這張表的所有Non-Clustered索引將被重建。

維護索引統計表︰

  數據庫擁有者必須用命令維護統計表。 update statistics table_name [index_name]

索引優化調整

  用這條命令可以改善創建索引的性能,減少建索引所用的時間。 sp_configure "extent i/o buffers",nnnn帶來的影響是增加了extent i/o buffers大小,在SQL Server使用內存不變情況下,減少了procedure和data cathe,而且同一時刻僅有一個用戶能用到extent buffer。

星期四, 5月 29, 2008

escape,encodeURI,encodeURIComponent

在Javascript若是要傳遞中文參數(Get)的候時,是用函式去做參數的編碼。

以下部分是網路找到的編碼方式:
javascript 中 escape,encodeURI 區別?

js對文字進行編碼涉及3個函數:escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent

1、   傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字元截斷。                            

例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u= +encodeURIComponent("http://cang.baidu.com/bruce42")+">退出</a>');</script>

2、   進行url跳轉時可以整體使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、   js使用資料時可以使用escape

例如:搜藏中history紀錄。

4、   escape對0-255以外的unicode值進行編碼時輸出%u****格式,其他情況下escape,encodeURI,encodeURIComponent編碼結果相同。


最多使用的應爲encodeURIComponent,它是將中文、韓文等特殊字元轉換成utf-8格式的url編碼,所以如果給後臺傳遞參數需要使用encodeURIComponent時需要後臺解碼對utf-8支援(form中的編碼方式和當前頁面編碼方式相同)

escape不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不編碼字元有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字元有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
escape() 方法:
所有空格、標點符號、重音字元,以及任何其他非ASCII字元都編碼改爲"%XX"的形式,xx是16進制數位所代表.
escape和unescape的編碼和解碼功能, escape返回16進制編碼的一種ISO拉丁字元集. unescape的功能將具有特殊值的16進制編碼轉換爲ASCII字串
舉例:
escape('!@#$%^&*(){}[]=:/;?+\'"'):
結果:%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22

encodeURI() 方法
    Encodeuri方法返回一個編碼後的URI. 因此,如果你將其結果用Decodeuri方法,原始的串會返回. Encodeuri的方法並不對以下字元編碼:":"、"/"、"; "、"? ". 但可以使用 encodeuricomponent 的方法對這些字元進行encode. 
    encodes,一種 Uniform Resource Identifier (URI)(URI)逐一替換某些字元,描述爲UTF-8編碼的特點.
    例如 :
    encodeURI('!@#$%^&*(){}[]=:/;?+\'"'):
    結果:!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+'%22

encodeURIComponent() 方法:
encodeuricomponent 方法返回一個編碼的URI. 因此,如果你將decodeuricomponent,原來的串會返回. 由於所有文字encodesencodeuricomponent方法都會進行編碼,所以要小心,如果存在路徑等串例如: "/FOLDER1/FOLDER2/DEFAULT.HTML". 加密後並不會,如果作爲一個網路服務器的請求將會失效. 使用這種方法Encodeuri當字串超過一個以上URI組成.
    encodes,一種 Uniform Resource Identifier (URI)(URI)逐一替換某些字元,描述爲UTF-8編碼的特點. 
 例子:最簡單的方法就是看它們加密這些字元後生成的代碼.
encodeURIComponent('!@#$%^&*(){}[]=:/;?+\'"'):
結果 !%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B'%22 

什麽時候適合用什麽方法?

escape() 方法不會加密 + 在伺服器端會被解析爲空格以及在表單forms區域中的spaces.基於這樣的縮減方式,你應該盡可能的避免使用這種方法,二選一的話,最好的經常使用 encodeURIComponent().

escape() 不會加密: @*/+

使用encodeURI()  比 escape() 稍專業化,它是針對URIs編碼的 .一個做爲querystring的反面, 屬於URL的一個部分.使用這種方法是當你需要將一個字串轉換爲URIs資源標識以及需要某些字元保持非encode狀態.請記住, 這個' 字元是不會進行編碼的,因爲它本身就包括在URIs裏.

encodeURI()不會加密: !@#$&*()=:/;?+'

最後, encodeURIComponent() 方法用在大多數cases中,當你需要對一個單獨URIs部件進行編碼,這種方法可以加密某些特殊用於的URIs的字元,因此大部分部件可以包含在裏面. 記住, ' 字元本身就包括在URIs裏,所以不會此方法不會對其進行編碼.

encodeURIComponent() 不會加密: !*()'

星期三, 5月 28, 2008

ZK相關資料

ZK vs. Ajax JSF

ZK圖表

ZK for JSF

ZK DEMO

推薦TOEIC學習網站

推薦TOEIC學習網站
1.【推薦網站名稱】:多益補給站
【網站網址】:http://toeic.barry.com.tw/
【網站所用語言】:中文
【推薦原因】: 網站中有很多多益準備的方法,很適合想自學多益的大大,也提供TOEIC的參考書籍.

2.【推薦網站名稱】:English club
【網站網址】:http://www.englishclub.com/
【網站所用語言】:英文
【推薦原因】:這個站有提供TOEIC 考試的基本架構,對於完全不了解TOIEC的人來說,可以對TOEIC
有進一步的了解。除此之外,還有提供不錯的TOEIC TIPS

3.【推薦網站名稱】:English-test
【網站網址】:http://www.english-test.net/toeic/index.html
【網站所用語言】:英文
【推薦原因】: 這個站提供免費的單字測驗,可測驗你對單字的熟悉程度。除了TOEIC外,還有其他
的英語能力檢定。

4.【推薦網站名稱】:TOEIC 台灣官方網站
【網站網址】:http://www.toeic.com.tw/
【網站所用語言】:中文
【推薦原因】: 這網站裡頭有TOEIC報考相關資訊以及官方出版的TOEIC書籍 ,是必備的工具;裡面也
包含TOEIC測驗記分方式,與報名的相關資訊。

5.【推薦網站名稱】:批踢踢實業坊-TOEIC板
【網站網址】:telnet://ptt.cc
【網站所用語言】:中文
【推薦原因】: 台灣第一大BBS站,裡面的自學版提供非常多關於TOEIC的心得與經驗談,很適合上去問
一些關於TOEIC的問題
PS. 建議使用PCMan軟體上此站 http://pcman.ptt.cc/

星期一, 5月 26, 2008

Spring2.5設定方式的快速索引表

Spring2.5設定方式的快速索引表

http://refcardz.dzone.com/refcardz/spring-configuration

多國語言第三方元件

今天在KTOP不小心看到的
本來是在搜尋MMString 是什麼

第三方元件
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=28843

星期四, 5月 22, 2008

製作RSS

java官方工具
網址:https://rome.dev.java.net/

Using RSS in JSP pages
範例說明

星期三, 5月 21, 2008

script倒數計時

來源:藍色小鋪

<script>
var digit = 100;
function cd() {
if(digit <= 0) return;
document.getElementById("count_down").innerHTML = digit;
digit --;
}
window.onload = function() {
setInterval(cd, 1000);
}
</script>
<div id="count_down"></div>

MSSQL2005認證 MCITP

MSSQL2005認證 MCITP

在SQL2005的MCITP又分2種,資料庫的系統管理員or開發人員
http://www.microsoft.com/taiwan/learning/mcp/mcitp/dbadmin/
http://www.microsoft.com/taiwan/learning/mcp/mcitp/dbdev/

vs.net2005的證照叫做mcpd,mcpd又分3種,Web程式專家 or Windows程式專家 or 分散式應用專家
以下為相關連結
http://www.microsoft.com/taiwan/learning/mcp/mcpd/default.htm

javascript的==與=== (轉)

來源:JavaWorld

=== 是 javascript 1.3新增的 Operator(Strict Equals Operator),和 == 不同的地方在於,除了值相等之外,型別也要相等。

以下面程式為例 false == 0為 true,因為最後會轉成數字做比較,所以0==0。
而false === 0為 false,因為一個是Boolean,一個是Number,因此不相等。

<html>
<body>
<script type="text/javascript">
alert("false == 0: "+ (false == 0)); //true
alert("false === 0: "+ (false === 0)); //false
alert("undefined == null: "+ (undefined == null)); //true
alert("undefined === null: "+ (undefined === null)); //false

var A = 5;
var B = "5";
alert("Type of A: "+typeof A);
alert("Type of B: "+typeof B);
alert("A == B: "+ (A == B) ); //true
alert("A === B: "+ (A === B) ); //false

alert("A != B: "+ (A != B) ); //false
alert("A !==B: "+ (A !== B) ); //true
</script>
</body>
</html>

結論是需要"精確"比對時,可以改用 ===或 !==

星期一, 5月 19, 2008

從賭徒到不敗天王 - 葛洛斯 (轉)

從賭徒到不敗天王

他三十年都戰勝市場,華爾街說他是「安靜的巨鯊」

曾經,他是個只有200美元盤纏,在拉斯維加斯的小賭徒。現在,他是全球最大債券基金操盤手,手下掌控8千億美元資金,是亞洲四小龍總預算的兩倍。巴菲特每月都期待他的投資展望報告……

文/單小懿

「請用一句話形容你自己?」

他頓了一下,兩隻拇指互相摩擦,指尖有磨損痕跡,然後,緩緩從口中吐出這句話:「易受傷的(vulnerable)。」

不可置信的我們,反問了他兩次:「vulnerable?」

「是的,易受傷且充滿不安全感(vulnerable and insecure)。這是我用來描述自己的話。」

眼前這個瘦高、謙遜的人,在金融市場喊水會結凍。

他,是全球最大一檔債券基金(Pimco總報酬基金)的操盤手。

他,掌管的資金達八千一百億美元(約合新台幣二十五兆元),是股神巴菲特的四倍,可以蓋四百三十一座台北一○一大樓。

他,更是唯一摘下三次晨星(全球基金評鑑龍頭)最佳固定收益基金經理人的人,三十年績效打敗大盤。

易受傷的人?三十年不敗的投資天王?

來源:商業周刊

沒錯,是同一個人。

他,叫做葛洛斯(William H. Gross),是太平洋投資管理公司投資長,又被譽為債券天王(the Bond King)。

四十年前,他,只是個帶著兩百美元盤纏,在拉斯維加斯賭桌上拚命的小賭徒。如今,他的身價近十三億美元(約合新台幣四百億元),在美國加州的拉谷那海灘擁有兩萬平方呎(約五百六十坪)的豪宅。

這,是一個小賭徒變成手握二十五兆資金天王的故事。他的一生,都在與情緒作戰,因為他「認識自己」、「踢掉自大」,而能站在迎風的浪頭上,持續三十年。

繼巴菲特股東會後,《商業周刊》採訪團隊繼續往西岸移動,本週,我們到了美國加州的新港(Newport)。

這裡,是加州僅次於比佛利山莊的豪宅區。此地居民既擁財富,也具藝術氣息,他們坐擁面對太平洋的私人海灘、宜人陽光、棕櫚樹、高爾夫球場、高密度的藝廊……。

離華爾街三千哩的「海灘」進出市場低調,動向受全球矚目

我們走進一棟白色建築物,它只有四層樓高,毫不起眼。然而,位於三樓的交易室,卻被人們稱做「海灘」(The Beach),與三千哩外的 「大街」(The Street,即華爾街)遙遙相望。

「海灘裡正在做什麼?」人們總愛猜測「海灘」的秘密,不亞於他們關心巴菲特的收購案、聯準會在秘密會議做的決議。海灘,正是Pimco(The Pacific Investment Management Company,太平洋投資管理公司)的作戰總部。「海灘」之地位,不只在於其操控的龐大資金,而是裡頭有一位市場先知──葛洛斯,以精準的長期趨勢預測見長。

最經典的事件莫過於二○○○年二月底。突然,華爾街一陣騷動,一連串債券買盤湧現,美林、高盛等投資銀行的交易廳耳語著:「葛洛斯進場了,『海灘』現身了!」如同野火燎原般,市場瘋狂搶進債券,幾小時後,債券價格扶搖直上。幾天後,也就是三月份,美股觸頂,從此未再回到高點,這就是大家所熟知的科技泡沫大崩盤。當然,股市崩盤,也揭開了債市多頭的序幕。

債市與股市,就像翹翹板一樣,當股市籠罩烏雲時,債市便陽光普照,因此,即使葛洛斯操作的是債市,他的一舉一動,仍吸引全球目光。因為部位龐大、進出快速低調,他率領的部隊也被形容為 「安靜的巨鯊」(Quiet Sharks)。

求學時為了一個賭注 六天跑兩百公里,腎破裂還是照跑

走進Pimco交易室,我們被要求禁語,交易員們緊盯盤面,空氣緊張而凝結。交易室左邊,就是天王葛洛斯的辦公室,是個四坪不到的小房間。然而,回到最早的問題,這位容易受傷的先生,如何三十年不敗?

線索要回到葛洛斯辦公桌後的肖像畫之一,傑西‧李佛摩(Jesse Livermore),他的投資偶像。李佛摩是史上最有名的投機客,從一個號子裡的擦黑板小弟起家,到叱吒華爾街的金融大亨,一生八次大起大落,最後自殺。

三十年來,葛洛斯的辦公室裡,始終掛著李佛摩的照片,以及他的名言:「 投資人必須提防很多東西,尤其是自己。」(An investor has to guard against many things, but most of all against himself.)凡是人,都有情緒;葛洛斯、李佛摩,因為易感,甚至比一般人更容易受影響。

因此,李佛摩倡導認識自己,葛洛斯也以此惕厲自己,在生活、投資上發展出一套高度自律的系統,藉以打敗情緒。

葛洛斯出生於美國中部的小康家庭,雖然內向,被人稱為獨行俠,內心卻無比好強。大學時代,在朋友的起鬨下與人打賭,從舊金山跑到加州卡梅爾(Carmel)。為了贏得賭注,即使跑到最後五哩路時,他的一個腎臟已經破裂,他還是堅持繼續跑,在六天內,跑完一百二十五哩(約兩百公里),跑完後立刻被送進醫院。

這股強烈要贏的欲望,讓他專注的做每一件事。好友、MSN Money財經作家提摩西(Timothy Middleton)形容,為葛洛斯贏得桂冠的技術都有一個共同點:嚴格而專注的自我要求。大學畢業那年,一場車禍改變了葛洛斯的命運。住院療養時,他讀到加州大學教授索普(Edward O. Thorp)所著《打敗莊家》(Beat the Dealer)一書,教人用記牌方式在二十一點撲克牌遊戲獲勝。出院後,他帶著兩百美元到賭城試身手。

從賭桌悟出投資心法 短暫損失會因長期趨勢有利而攤平

為了盡量保存賭本,他住進一天只要六美元的印地安飯店,每天走路到拉斯維加斯大道上的四后賭場(Four Queens),找免費食物吃。

一開始,葛洛斯受不了周圍環境的菸味和酒氣,經常無法集中注意力;如果運氣不好,幾小時,甚至一、兩天都沒贏,他會沮喪的不敢回到賭桌上。有時,他經常這裡玩幾把,再換到另外一張桌子,或者到處觀察,哪個發牌員比較會帶來好運。

後來他發現,一直換賭桌,根本無法記住莊家已經出了哪些牌,也就無法預測牌盒裡還有哪些牌。而且,暫停會打斷賭博的節奏和專注。

因此,葛洛斯決定長期抗戰,每天在賭桌待上十六小時,連賭四個月。其間,就算他輸了大注,也從不退場,繼續留在牌局中,用兩美元下注。就這樣,當初的兩百美元盤纏,竟然翻了五十倍,成為一萬美元。

這個小賭徒,不只贏得大學學費,還奠定了終生受用的投資心法。

與一般賭徒不同,葛洛斯並非愚蠢、毫無紀律、純粹賭運氣。他建立起一套評估未來事件的機率(也就是投資上的風險),將其分為兩種:長期與短期。如果用二十一點比喻,留在牌盒裡未發的牌,代表的就是長期機率;而莊家所發的下一張牌,則是短期機率。

當你記住莊家已經發出哪些牌,就掌握了長期機率,你可以算出,牌盒裡是點數大的牌多,或點數小的牌多。因此,莊家接下來會發出什麼牌?你猜中的機率因此提高,也可據此決定是否補牌。

「我從賭桌上瞭解,當你看到勝利機會倒向自己時,一定要持長期觀點。因為短暫壞運所造成的損失,會因長期趨勢有利於你而被攤平。」葛洛斯悟到,即便出錯,只要對的次數加起來多於平均,你就可以打敗莊家。

葛洛斯從牌桌上,發展出的「長期觀點」,也是他後來投資策略的主軸:「用長期觀點打敗人性中的貪與怕」。

他說:「把注意力關心未來三到五年,等於在心裡給自己打了個暗號,告訴自己投資不是賭博,而是建立長期布局,這同時也幫助你降低在進行投資決定時,產生的貪跟怕。」而且,「當機率有利於你時,要下大注」。

葛洛斯曾寫道:有次我被一堆無解的難題纏住了,一個老朋友對我說:「記得兩件事:一、別為小事抓狂;二、全都是小事。」這兩句話已變成他一連串自我反思的源頭。

凡常陷入瑣碎小事泥淖中的人,不可避免總是當輸家,但專注在長期趨勢藍圖的投資人,可以改善投資機會的優勢,甚至不輸專家。早在他擔任基金經理人之前,便習得此事。

交易債券第一人 將微利投資工具改造成高報酬商品

帶著長期觀點的思考架構,二十八歲那年,他找到第一份工作:太平洋保險公司的債券分析師。 「剪息票(clipping coupon),是我的第一份工作。我每天剪下債券的息票,貼在紙上,然後寄去對方公司,他們就會給我們利息。」

當時,債券投資被視為「孤兒寡母領取利息」的投資工具,平淡無奇。因為在那之前的一百多年,美國的通貨膨脹率每年平均只有○‧六五%,債券價格從不波動。買下債券的投資人,只要定期把息票剪下來,寄回給發行債券的公司,收取利息,到期時領回本金即可。

但是,情況有了改變。一九六○年代,通貨膨脹出現,從一%逐漸往上升,直到一九七○年的六%。物價上揚,債券的利息不再能支付孤兒寡婦的生活所需,債券不再保值,價格大幅下跌,甚至腰斬!

市場徹底改觀,債券從「世界上最安全的投資」,被譏諷為「充公券」(certificates of confiscation)。

「時勢」出現了,但還得要有「英雄」才能造時勢。葛洛斯回憶:「做了六個月,我覺得好無聊,我說不要再剪貼了,(我們)來交易吧。」

「我老闆說好,非常支持我。但這是很大的風險,沒人這樣做過。我們的競爭者認為我們瘋了。」當時,這種把債券當成股票,在市場上買賣的做法,被視為異端。

「因為我很年輕(笑),想事情不一樣。老一輩的人,不願意去看新主意。」當時,一流的高手拚命往股市擠,進債券市場的人,不是二軍,就是「老一輩的人」。

低度競爭的市場,碰上年輕的冒險家,以及大環境的轉變,於是,債券天王誕生了。

葛洛斯,成為第一個把債券拿來交易的人,改寫歷史。

「他對投資界最大的貢獻就是,看出債券可以拿來交易,並非只是持有。」經濟學家、前聯準會成員彼得‧伯恩斯坦(Peter Bernstein)評論,「當時(一九七二年)關於新形態債券交易的學理不過才問世,但葛洛斯卻已開始積極的投資策略……,堪稱積極型固定收益管理的前鋒。」

接著,葛洛斯像在賭場找機會一樣,在全球市場找尋高報酬的債券投資機會,「找到機會就下大注」。他發現有一種交易極冷清的私募配售債券,不受主管機關監督,他利用市場交易量少、缺乏公開報價平台的環境,在買賣資訊不對稱的狀況下套利。

有一次,葛洛斯左手拿起電話買進兩百萬美元公司債,每單位價格為七十九美元,右手馬上電話報價賣出,但談成的價格是八十九美元,幾秒鐘之內便賺進二十萬美元的利潤,而且風險極低。

這種新形態的債券套利模式,讓葛洛斯在代操業大出風頭,每年平均報酬率均超過一○%,甚至曾高達一八%,打敗股票大盤。 因為成績亮麗,他拿下第一大電信公司:美國電話電報公司(AT&T)的代操資格,讓他成為市場當紅炸子雞。

十年征戰市場,葛洛斯在賭桌上得到的「長期觀點」,越加成熟。他發現,「三至五年的長期觀點,足以消除我每日情緒起伏,並專注於未來重要的總經趨勢。」

靠作息自律控制情緒 要求員工即使交易成功也不能歡呼

為了遠離情緒,葛洛斯的投資偶像李佛摩,刻意讓自己「孤獨」,把在百老匯的辦公室搬到第五大道,「我要遠離華爾街的氛圍,在一個聽不到任何明牌的地方。」「股市是一個需要全神貫注的大挑戰,絕不能懶散。」

葛洛斯也如此。在生活作息上,他每天早上四點半起床,打開桌上的彭博系統,檢視前晚行情,翻翻報紙,吃完妻子為他準備的麥片粥和水果後,六點鐘準時開車十分鐘到公司。早上九點,是紐約的午餐時間,葛洛斯便過馬路到對街的萬豪酒店,由私人教練指導他做瑜伽。

「每天我去做瑜伽,都可以自省,可以讓我平靜。當我回來的時候,就能使我想得更長。我相信你如果能夠越平靜,你就是越好的投資人。」

四點以後,東岸債市打烊,葛洛斯到鄉村俱樂部練一下球,然後回家,七點半就寢,睡覺前,他會先看一小時左右的書才睡覺。這樣的作息,他維持至少二十年。

葛洛斯不僅自我要求甚嚴,也要求旗下基金經理人跟他一樣自律、長時間工作,並控制情緒,即使再大的交易成功,都不能歡呼。好友提摩斯形容:「他讓辦公室安靜得像在辦喪禮,因為他厭惡任何會分心的事,這有時會讓同事抓狂。」「他直挺挺的坐著,像停在藤架上的螳螂,專注的看著電腦螢幕。」

曾在Pimco擔任過工程師、現任中國皇后資本(香港)創辦人粟耀瑩便回憶,交易室早上四點半就有人在,到了五點半全員到齊,六點進來就算晚了。「這裡有一個非常兢兢業業的投資文化,和軍隊差不多,重視紀律。」

葛洛斯的紀律也顯現在長期趨勢的觀察。他每天花上好幾小時在辦公室思考、不發一語。中午,他固定與全公司一百多位基金經理人討論全球趨勢,甚至高薪聘用十四個數學博士寫數學程式,計算未來趨勢的各種風險,然後再根據風險程度,分散投資到公債、公司債、到各種衍生性金融商品,降低風險。

一旦確認長期趨勢,葛洛斯等到機會就下大注。一九八一年九月,他就成功抓住後來二十年的債市多頭,打了漂亮的一仗。

當時,石油危機後造成嚴重通膨,聯準會連續升息超過一五%,葛洛斯判斷:「未來三到五年」降息機率遠高於升息,他開始逐步加碼長天期債券,經過模型計算風險,確認降息機率最大時,布局完成。兩個月後,聯準會果真開始降息。接下來的一九九七年俄羅斯金融危機、二○○○年的美股科技泡沫等戰役,都是如此。

提早布局,每次都讓葛洛斯大有斬獲。他回憶每次大賺,都是因為遵守李佛摩所說:「大錢不是在買進或賣出時賺到的,真正的大錢總是在等待時賺來的。」(Big money was never made in the buying or the selling. The big money was always made in the waiting.)

長期打敗大盤的績效,讓歐洲最大保險集團德國安聯集團(Allianz Group),決定在二○○○年買下Pimco,並以五年、兩億美元的天價「金手銬」,留住葛洛斯,他因此成為當時薪水最高的債券基金經理人。

儘管葛洛斯極度自律,三十年幾乎沒看錯方向,但他坦承,一九八七年,道瓊指數崩盤,一天跌掉二○%時,他被股市重挫震驚,忘記逢低買進公司債,錯失投資機會;同樣的事件,在九一一事件時重演。

「那天我一大早五點半,飛車衝到公司,腦中唯一想到的事情就是『賣』,快點把手上全部債券賣掉,甚至想我們當初幹嘛買這麼多。但我卻忘記慘跌的是股市,而非債市。」「此時人們想要安全的東西,對債市根本是利多。」

葛洛斯說:「我錯在太過沉浸在那天的突發事件」,「那證明了我也是人類,人類行為是不完美的,如果我能那麼完美,我的資產應該會有現在的兩倍。」他笑著對我們說:「最好的教訓是,不要有太情緒化的反應,應該要更冷靜、頭腦更中立些,雖然那很困難。」

率先看出次貸風暴 熬過九個月同業訕笑、媒體奚落

葛洛斯用長期的觀點、規律的生活,讓自己三十年來,不被市場巨浪吞噬。儘管如此,看得遠,也讓他付出先知的寂寞代價。

二○○六年最是經典。那時,葛洛斯觀察到房價漲到太高,甚至派出幾十個員工,到全國各地假裝成要買房子的人,查看當時房屋市場的狀況,之後他決定,砍掉、也不再買進次貸商品。

然而,他當時的看法引來市場嘲笑:「我們還在賺高配息,Pimco卻在賺低配息,買國庫券(編按:國庫券是國家發行的票券,利率低、但風險也很低)。Pimco過時啦、Pimco錯啦。」

人們說他太悲觀,他的績效也掉到同類基金排名的後四分之一。從第一名掉到後段班,葛洛斯心情不由得落到了谷底,不但上班時改走樓梯,不搭電梯,以避開人群;績效最差的那段時間,他乾脆休長假轉換心情。

「那九個月、真的、非常、悲慘。」葛洛斯加重語氣,苦笑著:「每次回到家,我就跟太太講,也許我太老,被潮流淘汰了,也許我已經喪失了手感(手抓抓桌緣)。」他當時的心境「就像洋基隊沒打進世界大賽一樣失落。」

每一天,媒體、對手的訕笑,如芒刺在背,如何度過?

「我只有『繼續』(加重語氣)不斷的檢視自己三到五年內的看法;『繼續』研究;『繼續』派人到全美國各地去假裝買房子的人;『繼續』去確認自己原來的觀點是否很愚蠢,儘管我們對自己的看法和想法有信心。」

葛洛斯說了四次「繼續」。這就是天王三十年不敗的關鍵:持續以長期觀點,維持紀律。

去年下半年,次貸風暴爆發,美股大跌,市場才證明葛洛斯是對的。也因此,他的桂冠再添一頂,二○○七年第三度贏得晨星基金固定收益最佳經理人獎,這也是史上唯一有此殊榮的人。

他描述後來居上的心情:「就像老虎.伍茲前十五洞一直落後,最後打了Birdy一樣開心。」

今年四月十三日,是葛洛斯的六十四歲生日,他用披頭四經典名曲「當我六十四歲時」(When I'm Sixty-four),傳達心情。他說,自己也很嚮往蒔花養鳥的閒情,妻子也希望他退休,「但只要想到現在全球經濟如此震盪,我就覺得興奮不已。」

戰勝市場起伏的基因,就在他的血液裡。「求勝的欲望一直在那。我就是對於成功有無法滿足的欲望,需要維持在不敗。因為每天都是一盤新局。」他笑說。

投資市場,就像全世界最大的金礦,這個金礦天天開門,每個人都可以進場一窺究竟。然而,當某天結束的鈴聲響起,總是有人從乞丐變成王子,或從王子變乞丐。關鍵只在於:誰能戰勝自己。

葛洛斯,就是那個打敗自己,從小賭徒變成投資天王的人。

*一分鐘看葛洛斯(William H. Gross)

出生:1944年4月13日
學歷:杜克大學心理系、加州大學洛杉磯分校企管碩士
開始操盤:28歲
現職:太平洋投資管理公司創辦人暨投資長
年薪:最高時固定薪資為年薪4,000萬美元(不含紅利和手續費收入)
身價:13億美元(約合新台幣400億元)
地位:全球最大債券基金經理人,規模超過1,000億美元
紀錄:唯一贏得3次晨星最佳固定收益基金經理人
成功預言:1981年預言20年債市多頭;1999年預言網路泡沫;2006年預言次貸風暴

*一分鐘看Pimco

全名:The Pacific Investment Management Company,太平洋投資管理公司
創辦人:比爾‧葛洛斯(Bill Gross)、詹姆士‧穆茲(James Muzzy)、比爾‧波禮克(Bill Podich)
總資產:8,120億美元( 約合新台幣25兆元 )
員工數:1,000人(基金經理人僅100多人)
前身:太平洋保險公司基金部門,500萬美元起家
獨立:1982年獨立成基金公司,《富比世》百大企業8成由 Pimco 為其代操
轉型:1987年從法人代操跨足共同基金領域,開放一般人募集
購併:2000年被德國安聯集團以高價購併

*全球最大基金操盤手!──葛洛斯大事紀 

萌芽期 1944.4.13:出生於美國俄亥俄州中途鎮 性格養成
'54:移居舊金山。
'62:十八歲進入杜克大學心理系就讀,輔系為希臘文。
'65:跑了六天馬拉松,膝蓋受傷
'66:在拉斯維加斯用兩百美元贏了一萬美元,奠定投資思維。

創新期 一戰成名
'72:二十八歲時擔任太平洋保險公司的債券分析師,開啟主動式債券交易風格。
'77:接受AT&T委託管理固定收益,成美國西岸最大企業代操投資公司。
'80:三十六歲預測聯準會反通膨立場,看準債市多頭,成功第一役。
'82:Pimco獨立營運,它的總資產為二十億美元。

成熟顛峰期 初掌大位
'87:四十三歲接手操盤Pimco總報酬基金,現在是全球最大的債券基金。
'97:出版唯一一本書《Everything you've heard about investing is wrong!》。
'98:五十四歲獲晨星基金機構評選為最佳固定收益基金經理人。

預測神準
2000:德國安聯集團以三十五億美元買下Pimco七成股權,個人年收入四千萬美元。成功預測網通股泡沫化,二度獲選晨星最佳固定收益基金經理人。
'03:《財星》選出企業二十五位最有影響力人士,第二名巴菲特,第十名葛洛斯。
'06:六十二歲時,預測美國次貸危機。

史上第一
'07:三度獲選晨星最佳固定收益基金經理人,也是史上第一位三度獲頒此獎的人。

*小辭典 什麼是債券?

文/單小懿

債券(bond),是由國家、金融機構、企業等為了籌集資金向投資人出具,保證在一定期限內按照約定的條件,到期還本付息的有價證券。

債券具有以下特性:

一、償債性:有固定償債期限,發行人必須按約定條件償還本金並支付利息。
二、流通性:可在自由市場上自由流通。
三、安全性:債券有固定的利率,與企業績效沒有直接聯繫,收益穩定,風險較小。此外,在企業破產時,債券持有者享有優先於股票持有者對企業剩餘資產的索取權。
四、收益性:債券的收益主要表現在兩方面,一是債券定期或不定期的利息收入,二是利用債券價格的變動,買賣債券賺取差額。

債券的價格則與到期日、票面利息、市場利率、發行者信用、流動性等有關。

*3大投資名家操盤哲學

葛洛斯William Hunt Gross
太平洋投資管理公司創辦人暨投資長
江湖地位:債券天王;全球最大債券基金經理人
資金規模:公司總資產8,120億美元
績效:從1987年起,平均每年為客戶賺進10%的報酬率
操作哲學:3到5年觀點為主,搭配半年到1年循環觀察,調整部位
名言:長期的觀點幫助你克服貪婪與恐懼

巴菲特Warren Buffett
波克夏‧海瑟威公司執行長
江湖地位:股神
資金規模:公司市值超過2,000億美元
績效:投資波克夏‧海瑟威40年,股價漲幅1萬倍
操作哲學:評估企業本身,不理會股價,不擔心總體經濟情勢
名言:當所有人貪婪時,我恐懼;當所有人恐懼時,我貪婪

彼得.林區Peter Lynch
富達投資集團研究顧問
江湖地位:基金天王:曾是最大股票基金(麥哲倫基金)經理人
資金規模:操盤期間基金規模最大至140億美元
績效:操盤期間(1977-1990)的平均年報酬率達29%
操作哲學:草根調查選股法
名言:股市要求堅定的信心,沒有信心者必將滅亡。不要聽信專家

氣喘是有機會根治的 ! (轉 yahoo知識家)

要多多照顧自己身體拉XD
今天親愛珊幫我找的 貼心:P

http://tw.knowledge.yahoo.com/question/question?qid=1406071500443

氣喘是有機會根治的 !
只要找到好的「疏導法」醫師好好的將你肺中的痰好好化乾淨,相信你朋友的氣喘是有機會受到良好控制的,甚至斷根
所謂遺傳指的是過敏性氣喘,遺傳的是過敏性體質,因為對花粉、黴菌或璊虫等過敏,引起支氣管收縮,而引起氣喘,過敏性氣喘大多小時候二三歲就已發病,而且還可能連帶有過敏性鼻炎、異位性皮膚炎,
!!!!!
有一種有機會根治且常見的後天性氣喘,叫「支氣管炎性氣喘」,如果你是這類的病人,建議你趕快找一位「疏導法」的醫師,幫你好好化痰,是有機會根治的,其原理如下:
平時感冒所引起的痰液,都必須想辦法加以化淨清除,否則時間一久,等到濃濃的痰液其中的水份蒸發後,殘留下的黏液會如同油漆般塗抹在氣管內壁;
一次感冒塗一層,兩次感冒塗兩層,經過多次感冒後,便會在氣管內壁形成類似動脈硬化般厚厚的狹窄內腔,當空氣經過狹窄的氣管內腔,便會產生咻咻的聲音,甚至分泌的痰液很容易堵住氣管,而引起胸悶及呼吸困難,這就是「支氣管炎性氣喘」,也就是一般所謂的「後天性氣喘」,(相對於過敏性氣喘的「先天性氣喘」 ), 尤其是小孩子很常見,
這種支氣管炎性氣喘,只要在尚未造成不可逆的結果如支氣管擴張症、肺氣腫等之前,有耐心的將痰液好好清除化淨,就如同清除臭水溝的污泥一般,便可以長治久安,形成所謂的「根治」,
很多事情不是不可能,而是需要時間與堅強的信心,即便是過敏性氣喘,也是要把感染或過敏引起的痰液化除乾淨,因為平時保留最大的氣管空間,即使過敏氣喘發作,氣管雖然收縮,也還有氣管空間,不致於完全阻塞而呼吸困難。
總之對於咳嗽及氣喘的治療,一定要本著「治咳痰為先」及「大禹疏導法」的治療原則,以化痰為主,止咳制喘為輔,唯有將氣管中的黏液清除乾淨,才能真正止咳制喘。
其他請參考
http://www.wretch.cc/blog/smith451207
並建議你從前面第一篇讀起,就知道整個概念,
參考資料

祝仁樂

星期六, 5月 17, 2008

UltraEdit設定語言標示

設定方式

1. 在UltraEdit的官網抓取你要顯示的語法
http://www.ultraedit.com/downloads/extras.html

2. /L20"JSP" Nocase Noquote 在文字檔中最前面的是語法選項,
不過不知道是不是因為我用的是 中文化版,只能設定一種語言

3. 在UltraEdit工具列 > 進階配置
A. 會出現小視窗(左邊資料夾選擇): 邊輯器顯示 > 語法突顯
B. 此時右邊顯示設定:選擇檔案來源,瀏覽選擇要插入的語法標示檔案

4. 此時點下套用,就完成設定了

星期五, 5月 16, 2008

■ Javascript Technique (轉)

來源:WEB2.0■ Javascript Technique
Lightbox & Image Gallery
Ajax-Based
www.huddletogether.com
[Note]
www.HuddleTogether.com
2.0版當 IE 關掉左側我的最愛時,最右側背景會缺一長條塊黑影
JonDesign's SmoothGallery
[Note]
smoothgallery.jondesign.net
Slideshow
Ajax Photo Gallery
[Note]
www.agilegallery.com
Require XML file output by Picasa (須上傳照片到Picasa網站)
Grey Box
[Note]
orangoo.com
display websites, images and other content
Litebox
[Note]
www.doknowevil.net
Multifaceted Lightbox
[Note]
www.gregphoto.net
Slightly ThickerBox
[Note]
www.jasons-toolbox.com
1.7 版測試時,Opera 有 bug,無法顯示圖片。IE 會閃圖後才出現。
Slimbox
[Note]
www.digitalia.be
ready to launch, no waiting for all images loaded
temporary hides flashs & videos
no use a 1pix transparent gif image & simple CSS (no CSS hacks)
not compatible with the old IE5.5
Suckerfish HoverLightbox Redux [Suckerfish HoverLightbox]
[Note]
mondaybynoon.com
LightWindow
[Note]
stickmanlabs.com
可顯示Flash、影片檔、外部網頁
Lytebox
[Note]
Album & Slideshow
iBox
[Note]
www.ibegin.com
可看影片檔
大圖會隨卷軸自行移動,因此大圖若超過瀏覽器外,則無法看見被切掉的部份。
Smoothbox
[Note]
gueschla.com
大圖會隨卷軸自行移動
YUI Based Lightbox
[Note]
thecodecentral.com
Imago
[Note]
codeboje.de
支援 xml 設定、Flickr&Smugmug
photoViewer
[Note]
nicora.net
based on YUI library
Easily skinned, auto-centered, slide show, XML files, absolute&relative position
carousel
[Note]
billwscott.com
支援 Vertical Orientation、Slide Show、Module Scrolling、Module Tabset 效果沒有 lightbox 效果。
Demo 部分在出大圖後須按上一頁返回,此時 thumbnail 會跑回第一頁。
multibox
Lightbox
slideshow
[Note]
www.phatfusion.net
可開啟swf、movie、mp3等格式
FrogJS Javascript Gallery
[Note]
www.puidokas.com
a different way of showcasing galleries(best used when a page-by-page gallery is needed, as is the case with photo stories)
Galleria [homesitelightweight gallery]
[Note]
monc.se
AJAX Image Gallery powered by Slideflow (like Cover Flow)
[Note]
mediaeventservices.com
JaS gallery
[Note]
www.robertnyman.com
MooFlow
[Note]
www.outcut.de
支援 mouse wheel、reflections、UI skinable via CSS
Shadowbox
[Note]
mjijackson.com
支援 photo resize、thumb gallery、client-side image maps
可開啟 flash、movies、web pages
mooCicle
[Note]
www.thedeveloperinside.com
類似 slideshow、無縮圖
jqGalViewIII (proof of concept)
[Note]
benjaminsterling.com
Live Thumbnail
[Note]
diverged.org
超級陽春(沒有說明文件、下載點,效果差強人意)

[Note]
minishowcase
[Note]
minishowcase.frwrd.net
php/javascript online photo gallery, powered by AJAX
自動製作縮圖
Pyxy-gallery
[Note]
fennecfoxen.org
AJAX image gallery in PHP and JavaScript
zenphoto
[Note]
www.zenphoto.org
require PHP 4.10+ with GD support & MySQL 3.23+
Automatically generated thumbnails
Video support for Flash Video
沒有 lightbox 效果
(E)2 Photo Gallery
[Note]
www.e2interactive.com
XML Driven, 須 PHP 配合
photo folder
[Note]
livepipe.net
requires PHP 5+ & GD image library
縮圖有捲軸做移動

[Note]
AJAX Slide Show
[Note]
www.google.com
Couloir Slideshow
[Note]
www.couloir.org
photo slideshow of Flash-like behavior
TripTracker
[Note]
slideshow.triptracker.net
JavaScript image viewer with an animated slideshow feature
jQuery Cycle Plugin
[Note]
www.malsup.com
slideshow plugin
多種轉景
FlickrShow - Simple Javascript Slideshows
[Note]
www.flickrshow.com
Slideshow
[Note]
www.electricprism.com
Ajax SlideShow
[Note]
slideshow.webtwo.ws
XML Based Configuration、Flickr.com compatible
slideViewer
[Note]
www.gcmingati.net
下方圖片張數索引自動生成,無法使用縮圖
noobSlide - mootools
[Note]
efectorelativo.net
可用縮圖選擇、多種轉景效果

[Note]

[Note]
CSS-Based
A Photograph Gallery Tutorial [Demo1Demo2Demo3Demo4Demo5]
[Note]
www.cssplay.co.uk/menu/gallery.html
CSS Image Gallery
[Note]
www.dynamicdrive.com/style/csslibrary/item/css-image-gallery/
Photo Showcase
[Note]
mikecherim.com
Hoverbox
[Note]
sonspring.com
xImgGallery
[Note]
cross-browser.com
easyAlbum
[Note]
tjkdesign.com
Highslide JS
[Note]
vikjavev.no
Only non-commercial free
可顯示 flash、iframe
ImageGal
[Note]
dasme.org
PHP script
Satellite
[Note]
design.tedforbes.com
結合 PHP & Yahoo Flickr
Dhonishow
[Note]
lifedraft.de
inline gallery
DropProof
[Note]
www.bigfolio.com
PHP tool for simple image proofing
Bug: 大圖一定會顯示在最上方,須自行捲動scrollbar
CSS Photo Shuffler
[Note]
iamacamera.org