豪鬼斯特的開發筆記

星期四, 2月 08, 2007

賽局理論

摘錄自澎立人醫師

賽局理論 乃緣於西方世界探討兩個經濟個體之間當有利害衝突時,謀略運用之學。賽局理論又稱「博奕理論」(Game Theory)又可稱為「互動決策理論」,亦即針對一群決策者在決策時,所面臨的問題與戰略行為,所進行的一套有系統強有力的策略式互動行為 (interactive behavior) 分析工具方法,本學門領域的研究發展價值,於1994年由諾貝爾獎予以肯定。

賽局理論是一種策略思考,提供了一套系統設定的數理分析方法,尋求在利害衝突下的最適因應策略,透過策略推估,尋求自己的最大勝算或利益,從而在競爭中求生存。

「我的計算必須考慮你的計算,而你的計算也考慮了我的計算」,為一門研究 「多人決策」之間的問題。賽局中的每一個人的決策,會受到賽局中其他人的影響。人生無處不權謀,賽局理論提供系統的方法,來分析這種相互影響的策略。藉形 式化的推理,來決定賽局者為了要理性地追求其利益,會採取何種決策,以及如果他們真的如此選擇,會產生什麼結果。比如兩軍對峙或百家爭鳴,如何知己知彼, 達成對其有利之形勢與環境或目標。

零和

賽局理論發展係1928年匈裔美籍數學家馮諾曼(Von Neumann, John)(1903-1957)首先證明基本的「壞中取小」定理,才被確立,此定理適用於設定只敵我兩方對峙競爭的「零和(zero-sum)」賽局, 在此情形下所獲得的利益值,恰為對方所獲負數之虧損值,而對峙雙方所各獲得之值相加,則等於零。

1944年這位 "數學家兼電腦的發明人" 馮諾曼著的『賽局理論與經濟行為』問世,進一步闡釋他的 零和理論,才正式奠定了現代賽局理論的基礎而發揚光大,馮諾曼可堪稱為「賽局理論」發明人。將賽局分為「規範性賽局」(rule-based games) 與「自由式賽局」(freewheeling games)等兩類,前者的參賽規則明確且參賽者的各種反應是可預知的,但後者沒有明確的規則限制,參賽者互動可有較大的變化空間。

「自由式賽局」的原則是,每位參賽者所贏得的不能超過他對於整場賽局的貢獻(you can not take away more than your added value)。所以重點將在於如何在賽局中創造價值(added value),而不是如何掠奪自他人的成果。由於經常需要所有參賽者齊心協力經營這場賽局,才能增加整體賽局的價值,並使每一個參賽者獲得較大的報酬。因 此當一場賽局的獎賞,要靠其他參賽者的配合才能獲得,則就比較會採行合作雙贏的策略。

賽局理論的發展,繼而由電影「美麗境界」主人翁,被譽為是20世紀下半葉「最傑出的數學家」的美國 普林斯頓大學 的納許(John Forbes Nash Jr.) 提出『Non-cooperative Games』博士論文,以研究設定「多人非合作」之賽局為論述,後來被稱「納許平衡」的概念,為日後「非合作賽局理論」 和「交易理論」 (bargaining theory)作了奠定性的貢獻。

因此納許 於1994年與 加州柏克萊大學的哈桑尼(J.C.Harsanyi)及 德國波恩大學的賽爾登(R.Selton)等賽局理論研究者 共同獲得諾貝爾經濟學獎。

「納許平衡」的涵義表示,在多人競爭的情況裡,有些參賽者會結盟以對抗他人;有些賽局可能有無限多種策略;還有非零和賽局。從這些賽局的數學分析可以得到 混合策略的組合的平衡解,假設每位參賽者都堅持其平衡方式,每位參賽者都有一個解,每人都沒有理由偏離這組解。數學家納許證明,多人、非合作、有限策略的 賽局都有至少一組平衡解。

囚犯困境

「囚犯困境」(prisoner*s dilemma),係由弗拉德(Merrill Flood )在1951年所提出,之後由塔克(Albert W.Tucker)加以明確公式化和命名。所謂「囚犯困境」,是說遊戲雙方可能合作,也可能不合作,描述真實世界是既競爭又合作的常態,證明個人以自我利 益為出發最後結局,可能是「雙贏」或「雙輸」。
警察隔離審訊兩名共犯案例,警察審訊囚犯採取抗拒從嚴,坦白從寬的策略,因囚犯被隔離時,多害怕對方招了而自己沒招時,會使自己刑責加重,對方則無罪開 釋,結果囚犯雙方最後皆採取認罪策略而雙雙被關進牢裡。納許以此證明人性在被隔離的限制因素下,產生的各謀自己利益的謀略,形成「囚犯困境」現象,反而造 成雙輸的局面。

這點應用到國際談判,要雙輸或雙贏是決定在兩方能否掌握充分資訊,瞭解敵情及有沒有溝通互信基礎。「納許平衡」雙贏與雙輸之一線之隔,更加提醒競爭者相互 間培養相互信賴、溝通、合作的重要。這種賽局雖然每個賽局者有一種 "優勢" 的策略可以在抵抗對方可能的反制策略下,使自己獲得最大得益(best pay-off)。可是如果雙方皆採 "劣勢" 的妥協策略,則每一方都可以獲得較好的利益(better pay-off)。

非合作賽局

而「非合作賽局」是指多人參與賽局的狀況,對於每個參與者來說,只要其他人不改變策略,他就無法改善自己的狀況。納許證明在每個參與賽局者都只有有限種策 略選擇,並允許混合策略的前提下,「納許均衡」一定存在。比如在商場競爭,對方不改變價格的條件下,既不能漲價,否則會進一步喪失市場;也不能降價,因會 出現賠本情況。於是兩家公司可以改變原先的利益格局,通過「談判」尋求新的利評估分攤方案,也就是所謂「納許均衡」。

而「納許均衡」也意味著兩敗俱傷的可能性,沒有一位參賽者能單方面背離該策略而獲利,在互不合作的前提下打價格戰,打到最後,出現一個均衡的結局是「無利 潤」,這是「非合作的博弈均衡」,大家互相擠壓、排斥,誰都想獲得最大的利益,但是最後誰都沒有獲得利益,指出從利己的角度出發,最後達到的結果卻是損人 不利己。

至於如何去協調或規範上述的策略設定,「納許平衡」解值似乎並未交待。因此同為諾貝爾獎得主德國波恩大學的賽爾登,提出著名的「顫抖的手」 (trembling hand)來檢測「納許均衡」,指出「納許均衡」解值不是唯一的;並以『次賽局完整均衡(Subgame perfect equilibrium)』的解值觀念,來證明「動態賽局」下可能的多重「納許均衡」;發現根據『次賽局完整均衡』的觀念,當有競爭領導者存在下可求得 「史達勃克」(Stackberg)解,即以前述寡佔市場產量決策為例,如果競爭領導者先決定產量,競爭追隨者在看到競爭領導者產量後,才決定要生產多 少。

在史達勃克的論述模型中,一個廠商實際上無法單獨選定價格,因市場價格還依賴於另一個廠商的量;在價格領導模型中,有一個假設,就是另一個廠商會追隨主導廠商的定價,即價格接受者以此價格滿足市場剩餘需求。這兩個模型的設置不同,因而均衡也不同。

另一位諾貝爾獎得主 哈桑尼將「貝氏學習法則」融入「納許均衡」的研究方法,應用上極廣,舉凡談判諮商、拍賣兢標、廣告訊息宣傳效果、產業組織理論等等均予以運用。而上述之寡 佔訂價模式,如果加入參賽者對競爭單位生產成本認知不確定,亦可利用哈桑尼的解值觀念,得到更為有趣的結論。

競合

上述經濟行為與賽局的密切關係,引出另個重要思考論點:企業管理學上的「賽局理論」與「囚犯困境理論」模型被應用在商場競爭,因而產生「競爭」的貢獻價 值。 一個企業經營的重要關鍵,原來「競爭」對企業成長的貢獻,遠比「穩定現況」對企業的貢獻更高。因為「穩定發展」會隨著產業競爭的轉型發生「空洞化」現象, 或自我戰鬥力漸趨衰弱;但是創造「競爭」,讓協調「談判」(bargaining)策略上桌,卻也是防止空洞化與增強共同利益創造之更精密佈局的良方。

這也導出了企業管理學上的賽局理論另一種更現實的「嚇阻標的」協調談判案例模型:市場知名領導品牌(或已累積高實力者),與新進品牌(尚未達競爭實力者) 同時考慮進入同一市場,在知名領導品牌進入市場,新進品牌競爭者不進入的情況下,知名領導品牌有100元利潤。如果新進品牌競爭者進入,但知名領導品牌不 進入的情況下,新進品牌競爭者有20元利潤;但是如果兩家都進入市場,則各賠了10元。

因此,如何以此「嚇阻標的」來嚇阻競爭對手的進入,就要去努力塑造有利的氣候,靠協調「談判」策略說服競爭者以「進入是沒有好處的」的訴求,來說服競爭者,如果堅持進入將會陷入『囚犯困境』中,屆時將進退兩難。

目前賽局理論在一般自由賽局追求雙贏的策略,稱之為『競合理論』(Co-opetition)。其基本作法即「異中求同」「同中求異」,頗值吾人深思玩味與實際應用。

標籤:

星期四, 1月 04, 2007

新手玩Ajax幾個留意地方

跨網域限制

Browser 不容許進行跨網域的XMLHttpRequest,甚至domain一樣,sub-domain不同,也不許可,跟Flash Player類似。同 domain和sub-domain,不同Port,沒有限制。至於本地測試連至任何網域,IE容許,Firefox不容許。解決跨網域限制,常用方面當 然跟Flash一樣,用一些Server-side Proxy程式負責載入跨網域數據。

XMLNode的Whitespace問題
即Flash 裡面必須加的一句ignoreWhite=true,目的防止XMLNode之間空格/Tab/Enter被當一個節點,影響XML Parsing。在 IE會自動忽略Whitespace,但Firefox不會,因此就好找一些Strip XML Whitespace的JavaScript程式將 Whitespace刪去,例如這個輕巧實用的AJAXLib。

有什麼Browser支援XMLHttpRequest

Konqueror

Microsoft Internet Explorer (and derived browsers) 5.0+ (Mac OS 版本不支援)

Mozilla/Mozilla Firefox (and derived browsers) 1.0+

Netscape 7.1+

Apple Safari 1.2+

Opera 7.6+

Opera Mobile Browser 8.0+
Safari與中文
用UTF-8去作為編碼已經是必然的事,但我發現某些中文字在Safari會使XML Parsing出現問題,納悶中...

IE Image Cache Bug
當IE設定了「每次查閱畫面時」,所有動態產生圖像都會被再載入一次,詳情可以由此網頁開始看起。
http://www.ahinea.com/en/tech/ie-dhtml-image-caching.html

本文章由luar發表。

星期一, 10月 02, 2006

驗證某個輸入框是否為EMAIL格式

<script type="text/javascript">
<!--
function check(){
if(!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(document.getElementById("email").value)){
alert("錯誤的Email格式");
return false;
}
return true;
}
//-->
</script>
<form onsubmit="return check()">
<input type="text" name="email" id="email" />
<input type="submit" />
</form>

星期日, 10月 01, 2006

轉載:台灣ADSL的架構

假設台灣只有三家 ISP , Hinet / Giga / So-net 好了

  A --- Hinet ------ Giga --- B
      \     /
       \     /
        So-net
         |
         C

1. 在這三家ISP 都有放各自養的 content (網站 A / B / C)

2. 如果 Hinet ADSL 用戶要連到 A 當然沒問題, 很快
    Giga ADSL 用戶要連到 B 當然沒問題, 很快
   So-net ADSL 用戶要連到 C 當然沒問題, 很快

3. 如果 Hinet ADSL 用戶要連到 B 或 C 呢?

  Hinet 必須要付錢拉電路到 Giga 或 So-net

  其他二家同理可證

  每 1 Gbit 的電路維護費用約 50 萬, 由互連的二家共同分擔

4. 因此如果三家都差不多大, 那麼基本上用戶的 ADSL 都會很便宜又快
 因為 ISP 會努力拉客戶, 提升品質, 降低價格, 例如現在的日本與韓國

5. 如果有一家獨大, 像今日的台灣 Hinet

 變成 Hinet 向用戶收取高額的 ADSL 費用 ( 2M/256 要 840 元, 在日本可買到12/1M)

 同時 Hinet 再向 So-net 等其他 ADSL 收取 NT.7500/MB 的費用, 電路費另計

 光是以無名現在 2Gbit 的流量, 一個月就要付 1500萬給 Hinet

 因此 Hinet 二手收錢, 造就了 Hinet 一年有近 2000 億的營收

 也阻礙了台灣 content 業者的發展

6. 在每個月繳的 ADSL 費用中, 440 元是電路費, 這是 Hinet 過去五十年來

 在電信局時代就用國家的錢架設好的電話線路, 現在卻只有 Hinet 可以用,可以收錢

7. 那要怎麼辦呢?

 如果用 Hinet ADSL 的用戶可以轉移一半到另一家 ADSL

 那麼 Hinet 就會知道, 要降價或提升品質

入侵偵測系統 IDS(Intrusion Detection Systems)

入侵偵測系統 IDS(Intrusion Detection Systems)

網路型入侵偵測系統(Network-based Intrusion Detection Systems)
主機型入侵偵測系統(Host-based Intrusion Detection Systems)

為了方便,以下將以 IDS 來代表入侵偵測系統的簡稱。

網路型入侵偵測系統(以下以網路型 IDS 簡稱)
主機型入侵偵測系統(以下以主機型 IDS 簡稱)

*前言:

在一個網路防禦網裡,IDS 並不能保證你所在網域的安全性,通常 IDS 還需要
與防火牆、安全人員所制定的安全策略、網路弱點稽查、權限稽核做結合,才
能對整個網域做完整的保護措施。

*正題:

一個 IDS 的主要功能有三點,第一是監視目前狀況,第二是偵測的動作,第三
是反制方法,而以下所會談到的,主要是第二、第三點,關於監視的方法與原理
,請有興趣的讀者自行查閱 sniff/sniffer/sniffing/broadcast 等關鍵字。而
要達到這三種功能,我們可以從異常狀況的發生、攻擊事件的確認、可疑事件的
綜合分析等方法去達成。

大部份的入侵偵測系統都是以特徵模式(signatures)來辨別是否為蓄意的入侵或
有攻擊的意圖。以採集資料的方式來區分的話,可以將入侵偵測系統分為以監控
網路封包為主的網路型入侵偵測系統,以及以監控系統紀錄檔來做判斷的主機型
入侵偵測系統。

網路型 IDS:

(A). 運作方式:
在網路的必經節點上過濾所有封包,並即時將這些封包加以分
析比對,比如分析封包 header 的資料時,可以偵測到如
source route、out of band、fragmented packet(teardrop)
land(same ip, port)等攻擊,在分析封包內容時,可以偵測到
如木馬程式的特定指令、如含有 shellcode 的攻擊程式、含有
特定 cgi/php/asp 程式漏洞的特殊指令。

在做分析比對的模組上有以下四種的攻擊特徵比對模式:

(1). 特殊的位元組、模式比對
(2). 事件發生頻率,及頻率是否超過所設的門檻值
(3). 可疑事件的關聯性
(4). 統計結果上的異常例外數值

而在比對出符合的攻擊模式後,反應模組會有通知、警告以及
做出反制行動等功能,通常會是通知管理者、切斷可疑連線或
或紀錄可疑連線以做為攻擊證據搜集、研究用。

(B). 網路型 IDS 相對於主機型 IDS 的優(缺)點:

(1). 集中注意於一網路節點:
網路型 IDS 因為只需設置在一網路必經節點上,而不像主機型
IDS 必須設置於網路上的每一台主機,在管理和成本考量上都
是較理想的。(相對的,若只設網路型 IDS 也會因為只靠唯一
一層防護而需要冒較高的風險,而且網路型 IDS 如果沒有與應
用程式結合運用的話,一遇到加密的點對點連線就沒輒了)

(2). 攻擊者較難除去進行攻擊後留下的封包證據:
因為網路型 IDS 所採取的是即時的收集封包,攻擊者要抹滅曾
進行的攻擊證據更加困難。而這些收集到的封包證據也有助於
辨認攻擊者。而在主機型 IDS 上,通常他們所用的紀錄檔或是
稽核檔案,都可能會被攻擊者入侵後修改,而造成主機型 IDS
失效。

(3). 即時反應,減緩攻擊者造成的傷害:
因為網路型 IDS 所採取的是即時收集封包,即時進行反制,可
以在第一時間通知、反應,避免給與攻擊者過多時間進行攻擊
行動。比如當一個惡意的 tcp 連線被偵測到時,網路型 IDS 可
以隨即送出一個 tcp reset 封包以截斷這個連線。而主機型的
IDS 因為是採定時檢查的方式,較易遭受到阻斷攻擊而導致主機
當機、無法繼續運作。

(4). 較大的彈性空間:
網路型 IDS 可以選擇和主機型 IDS 一樣放在防火牆內部;但是
也可以選擇放在防火牆外部,這點也是主機型 IDS 無法做到的
,而此時無論成功通過防火牆或被防火牆擋下的攻擊事件,都會
被網路型 IDS 偵測、紀錄下來,以獲得更多關於攻擊者的資訊。
除此之外,網路型 IDS 也不需要像主機型 IDS 要考慮到主機平
台是否支援此 IDS 的因素。

(5). 匿蹤、隱形的能力:
相對於主機型 IDS,網路型的 IDS 可以不設定網路介面的位址
(IP address),也就是達到隱形於網路,同時又能截取所有網路
封包的資訊。而主機型 IDS 可能就是攻擊者的攻擊目標之一,
攻擊者可能針對主機型 IDS 重要的檔案進行移除或更改。

主機型 IDS:

(A). 運作方式:

檢查主機所收集到的系統紀錄檔資料,以找出可疑的攻擊資料。在收
集到新的紀錄資料時,IDS 比對可疑的攻擊模式,若有符合攻擊模式
特徵(比對方式同網路型 IDS 四點),則通知管理人員並做出適當反
制措施。

現行的主機型 IDS 除了稽核系統紀錄檔以外,也會定時(ref: time
trap, event trap)對重要的系統設定檔、執行檔進行計算稽核值
(checksum hash, md5)的比對,以確定重要的檔案未受到惡意的更
改。
而 IDS 的反應速度也就決定於所訂定的檢查頻率、或 event trap
產生(e.g open or modify a file)的反應時間。當發現攻擊行為時
,可以有結束使用者連線,停止使用者權限等反制動作。

而現行的主機型 IDS 也有在特定的 port 上進行網路封包檢查,
算是結合主機型與網路型 IDS 功能的一種方式,而網路型與主機
型相互結合也是 IDS 發展的趨勢之一。

(B). 主機型 IDS 相對於網路型 IDS 的優(缺)點:

(1). 對於攻擊事件的影響有較詳盡的紀錄:
因為主機型 IDS 是將攻擊者所造成的系統改變紀錄下來,因此可
以得知更多關於攻擊者對特定主機入侵事件造成的影響,及更準
確的紀錄攻擊行動的成敗。這部份的紀錄也可以和網路型 IDS 所
能即時測知的預警紀錄互相對照比較。主機型 IDS 通常有個別使
用者的上線紀錄,重要檔案的增刪修改紀錄,使用者權限改變的
紀錄,使用者連線到哪裡的紀錄,系統對外開啟的 port 紀錄等
,都是網路型 IDS 很難做到的。

(2). console 安全防護:
這是主機型 IDS 可以防護的範圍,而網路型 IDS 就無法做到這
點防護。

(3). 點對點連線的防護:
目前有許多的點對點連線因為採取加密處理,而無法在網路型
IDS 上做到完全的檢查,除非利用網路架構來解決(ref: reverse
proxy),此時就可以在主機型 IDS 上對連線資料做稽核檢察。

(4). 不需另外新增主機硬體:
主機型 IDS 只需要在主機上另外安裝新的軟體,而不像網路型
IDS 需要另外新增主機硬體設備。

*閃躲(攻擊) IDS 的方法:

以下討論的各種攻擊方法,主要是針對網路型 IDS 。

目前有一種攻擊程式會在連線當中釋放出誘敵的假封包(FIN or
RST flag in TCP, but with incorrect sequence number),使
得部份會保留連線狀態資料的網路型 IDS 錯認為該連線已結束
,逕而開始真正的攻擊動作。當然,對於直接截取所有封包,而
未做連線動態資料的網路型 IDS 就較不受影響。

第二種在實用上的攻擊程式則是在連線成功後,先送出大量的假
封包(mass packets with wrong sequence numbers)藉此把某些
網路型 IDS 的封包資料緩衝區塞滿,接著再進行實際的攻擊動
作。當然,對於未設定封包資料緩衝區大小上限的網路型 IDS
這招就無效了,但是無大小上限的實作方式可能就比較需要更聰
明的做法來達成,否則遇到傳輸量大的連線必定會變成阻絕攻擊
的受害者。但若是以遭到阻絕性攻擊與入侵攻擊兩者的權衡輕重
來看,是仍有很多討論空間的 :)

第三種在實用上的攻擊程式是利用封包分段的方式,躲過不檢查
分段封包的網路型 IDS,或者是不會將分段封包重組的網路型
IDS 也無法查覺躲在分段封包(包括 IP 層與 TCP 層)中的攻擊
程式碼。(tcp is aware of mtu value, fragmentation
example: first 8 bytes tcp header packet, the following
packets are all sized to be 32 bytes data)。對於會經過
不允許封包分段的網路節點,或者對方是會將過小封包丟棄的
網路型 IDS ,此種攻擊法則會失效。

第四種在實用上的攻擊程式是在連線之後,送出許多符合目前
連線的 SYN 封包,就作業系統本身並不理會這種封包,但是對
於會記錄連線狀態的網路型 IDS 而言,則會誤以為是新的連線
產生,而與新的封包序號做同步的動作(sequence number sync)
,在連線 timeout 之前攻擊方再送出一個新序號的 RST 封包
,如此就可以讓此 IDS 以為連線已斷,但是事實上真正的行動
才正要上演...

第五種攻擊是在真正的連線之前,先在攻擊主機上 bind 固定一
個 port,再藉同一個 port 做接下來的動作: 送出誘敵的 SYN
封包,而這個封包的 checksum value 我們故意亂填,只要這
個 IDS 沒有檢查 checksum 值就會以為已經有連線產生(sync
with first SYN),而之後真正的連線封包,反而在 IDS 內被
認為是無效的垃圾封包。

第六種是混合型,一開始的情形與第一種攻擊類似,但是接下來
送出錯誤 checksum 的 FIN/RST 封包讓未檢查 checksum 的
IDS 以為該連線已斷,接下來就開始實際的攻擊動作。

第七種也是以上的混合型,在對 IDS 送出大量 checksum 錯誤
的封包,使 IDS 誤判,以躲過 IDS 的偵測。

第八種是藉由計算實際上到目標主機的 TTL 值,再以此值減一
(通常就是 IDS 所在位置)送出 FIN/RST/Data 封包藉以讓 IDS
以為該連線已無效,再進行真正的連線。

綜觀以上這些攻擊方法,主要是針對網路協定底層的可能問題
如 checksum、sequence number sync、TTL、fragment 等等的
封包 header 資料一一進行試驗破解,另外還有許多在網路協
定應用程式層面的攻擊尚未介紹,以下我們再來看看另類的攻
擊包裝的可能方法。

第一種,類似 fragment 封包分段的作法,就是將攻擊的程式
分成多段來執行,可以把第一次連線、第二次連線先放上片段
的攻擊程式碼,再等到第三次攻擊才進行真正的執行動作。

第二種,也是類似封包分段的作法,但是我們可以用不同來源
的連線組成真正要執行的程式碼,等到程式碼都上傳完畢再執
行。

第三種,利用不同的編碼方式代表同義的字元,比如用二進位
或十六進位的方式來代替一般的字元,用 ISO 8859-1 的
&=34 或 &quot 來代表 " ,這些在網頁處理的
漏洞攻擊上,常常扮演著重要的角色。

第四種,用變數名稱代表重要的資料、檔案,用 shell script
的名稱來代表要執行的惡意程式,用不同的程式代表同樣的功
能,比如 `echo *' 代表 `ls'

第五種,使用加密資料來傳輸,到達目的地之後再將資料解密

第六種,先嘗試把 IDS 所在的主機平台設定為第一攻擊目標,
在 IDS 動作前就先取得權限,或是在網路型 IDS 運作前就將
該主機平台以阻絕性攻擊癱瘓。

第七種,先以大家較熟的"經典"級的攻擊從假的來源位址發動
,以大量的攻擊封包讓 IDS 的 audit record 佔滿該 IDS 的
稽核資料庫。

*IDS 未來的發展方向:

(1). 網路型和主機型 IDS 兩者的整合。
(2). 整合的事件紀錄資料庫,整合的事件報告,潛在的攻擊事件紀錄。
(3). 整合的事件處理線上回應,整合的安裝程序。

星期三, 8月 16, 2006

轉載:Google Map的URL計算

寫的重名了,Pany的原文:http://panyee.cnblogs.com/archive/2006/04/27/386914.html

只是用了下覺得演算法不太對。

後來又找了下以前收集的在南京大學小百合BBS上的資料,找到了些有用的東西,摘錄一些有用的文字

Google衛星地圖 256x256大小的jpeg圖片拼接而成,每塊圖片的URL格式為“http://kh.google.com/kh?v=2&t= trstrqqstsrqttsttq”樣。參數v與圖片關係不大,主要是參數t起作用,它是“qrst”4個字元排列而成的字串。為獲取某經緯度的 URL,就需要把經緯度轉化為“qrst”字串。 Google衛星地圖在zoom=1時,全球就為一個256x256的圖片,它的中心經緯度為(0,0)URL“http: //kh.google.com/kh?v=2&t=t”zoom=2時裂化為4塊,每塊的編號為:左上”t=tq”,右上”t=tr”,右下 “t=ts”,左下”t=tt”。依此類推,每放大一倍,每一小塊都裂分為四,從左上到右下順時針按qrst編號,裂分後的編碼為裂分前的編號上小塊的編 號。

摘錄一個網頁:http://intepid.com/stuff/gmkh/,在這個網頁上輸入一個座標和縮放級別就可以顯示地圖,並顯示從世界圖到詳細圖的逐層計算。

摘錄兩個代碼,一個是上面這個網頁中的JS代碼,一個是小百合論壇上說的另一中Delphi的演算法。

原文:http://www.3snews.net/html/30/730_itemid_2253.html

星期一, 7月 17, 2006

【AJAX】顧慮執行環境之建立XMLHttpRequest物件的方法

//

function createHttpRequest()
{
if (window.ActiveXObject) {
// Win IE
try{
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return null;
}
}
} else if (window.XMLHttpRequest){
// Windows以外的Ajax瀏覽器
return new XMLHttpRequest();
} else {
// 非上述環境
return null;
}
}

星期五, 3月 17, 2006

【GIS】產生ArcGIS Geometric Network資料的方法

Geometric Network的資料主要用於進行路網分析
例如最短路徑搜尋
產生的方式可以使用ESRI產品中的ArcCatalog

所需基本資料:道路圖、空的GeoDB(*.mdb)

操作步驟:
1. 在GeoDB內新增空的Feature Dataset (設定坐標系統) 並且命名為"JJ"
2. 加入道路圖層至新增的Feature Dataset
3. 在JJ Dataset裡面新增Geometric Network
4. 選擇"Building a geometric network from existing features
5. 如果道路圖的欄位中有其他路網成本資訊,可以增加在Weight值

星期二, 3月 07, 2006

【FLASH】Flash 與 GIS坐標系統轉換機制

由於TM2度坐標系統的圖資是以等比例縮放方式匯入FLASH的專案中,
亦即XScale = YScale,所以只需要計算出tScale比例參數,與△x△y等參數,即能求得TM2度與FLAS坐標系統的轉換公式。以下為求解步驟:

(求解前必須將全省行政區界圖匯入至FLASH專案中)
1. 求出tScale比例參數
 tScale = 273880 / ._width

2. 求出
△x
 
△x = _x - (76910 / tScale)

3. 求出
△y
 
△y = (_y * (-1)) - (2422338 / tScale)

當求解出以上三項參數後,TM2度轉換為FLASH後的坐標可以用以下公式計算:
 
 Flash_X = (TM_X / tScale) +
△x
 Flash_Y = [(TM_Y / tScale) +
△y] * (-1)

星期四, 3月 02, 2006

【GIS】經緯度轉TM2原始碼

以下為Visual Basic原始碼

Public Function TransTM2(ByVal inx As Double, ByVal iny As Double) As Double()

Dim x, y As Long

Dim dLt, c, v, e2, La As Double
Dim dx, dy, yd As Double
Dim ma, mb, mc, md, mn, wg, ws As Double
Dim a As Double
a = 6378160
Dim b As Double
b = 6356774.7192

Const PI As Double = 3.1415968

La = iny * PI / 180 '緯度轉換弳度

dLt = (inx - 121) * Math.Cos(La) * 3600 * PI / 648000 '{經度轉換弳度乘以arc1"}

e2 = (a * a - b * b) / (b * b) '{第二離心率}

c = (a * a) / b
mn = (a - b) / (a + b)
ma = 1 + 3 * mn * (-1 + 7 * mn * (1 - mn / 0.679) / 4)
mb = (ma - 1) / ma + 0.00000000004
mc = -2.5 * mn * (1 + mn / 0.539)
md = 1.234 * mc
ws = e2 * (Math.Cos(La) * Math.Cos(La))
v = Math.Sqr(1 + ws)

'計算X軸座標
dx = c / v * dLt * (1 + (dLt * dLt) / 6 * (1 - (Math.Tan(La) * Math.Tan(La)) + ws + (dLt * dLt) / 20 * (5 + (Math.Tan(La) * Math.Tan(La)) * (Math.Tan(La) * Math.Tan(La)) - 18) + 15 * ws * (1 - 4 * (Math.Tan(La) * Math.Tan(La)))))
x = (250000 + 0.9999 * dx)

'計算Y軸座標
wg = La + mb * (Math.Cos(La) * Math.Cos(La)) * Math.Tan(La) * (1 + mc * (maht.Cos(La) * maht.Cos(La)) * (1 + md * (maht.Cos(La) * maht.Cos(La))))
yd = wg * c * ma
dy = yd + c / v / 2 * Math.Tan(La) * (dLt * dLt) * (1 + (dLt * dLt) / 12 * (5 - (Math.Tan(La) * Math.Tan(La)) + ws * (9 + 4 * ws) + 2 * (dLt * dLt) * (1 + (Math.Tan(La) * Math.Tan(La)) * ((Math.Tan(La) * Math.Tan(La)) / 60 - 1))))
y = 0.9999 * dy


Dim coord(2) As Double
coord(0) = x
coord(1) = y
TransTM2 = coord

End Function

以下為Visual C++ 程式碼

POINT TransTm2(double inx, double iny) {

double dLt,c,v,e2,La;
double dx,dy,yd;
double ma,mb,mc,md,mn,wg,ws;
double a=6378160.0;
double b=6356774.7192;
POINT temp;
const double pi = 3.1415968;
La=iny*pi/180;//緯度轉換弳度
dLt=(inx-121)*cos(La)*3600*pi/648000;//{經度轉換弳度乘以arc1"}
e2=(pow(a,2)-pow(b,2))/pow(b,2);//{第二離心率}
c=pow(a,2)/b;
mn=(a-b)/(a+b);
ma=1+3*mn*(-1+7*mn*(1-mn/0.679)/4);
mb=(ma-1)/ma+0.00000000004;
mc=-2.5*mn*(1+mn/0.539);
md=1.234*mc;
ws=e2*pow(cos(La),2);
v=sqrt(1+ws);
//計算X軸座標
dx=c/v*dLt*(1+pow(dLt,2)/6*(1-pow(tan(La),2)+ws+pow(dLt,2)/20*(5+pow(tan(La),2)*(pow(tan(La),2)-18)+15*ws*(1-4*pow(tan(La),2)))));
temp.x=(long)(250000+0.9999*dx);
//計算Y軸座標
wg=La+mb*pow(cos(La),2)*tan(La)*(1+mc*pow(cos(La),2)*(1+md*pow(cos(La),2)));
yd=wg*c*ma;
dy=yd+c/v/2*tan(La)*pow(dLt,2)*(1+pow(dLt,2)/12*(5-pow(tan(La),2)+ws*(9+4*ws)+2*pow(dLt,2)*(1+pow(tan(La),2)*(pow(tan(La),2)/60-1))));
temp.y=(long)(0.9999*dy);
return temp;
}

星期四, 1月 26, 2006

【網站】無障礙網路空間的定義

【What? -什麼是無障礙網路空間? 】

關於「無障礙網路空間」的3個W,首先就是「What?」-什麼是無障礙網路空間?它跟無障礙設施例如導盲磚、坡道斜板等殘障設施,讓殘障者使用方便的意思差不多嗎?概念相同,但不完全如此!你有沒有看過有些網頁,字型設的很小很小,或是網頁的底色跟字的顏色很接近,要閱讀網頁內容時,覺得很吃力?你有沒有看過有些網頁,有好大一個區塊,感覺它不停的在閃爍,沒多久眼睛就覺得很不舒服?還有些網頁,被點選的區域或是文字非常非常的小,讓滑鼠很難瞄準點選?這些網頁,對於擁有正常視力的你我而言,閱讀或是使用起來都很吃力了,更何況是看不見、或是聽不到的人呢?所以,簡單來說,無障礙網路空間,就是讓每個人-無論是否有身體上的缺陷,讓每個頁面在不同的瀏覽器上,使用或是閱讀網頁內容時,都覺得很方便、很好用。

【Who? -無障礙網路空間是為什麼樣的人設計的? 】

第二個問題「Who?」-無障礙網路空間是為什麼樣的人設計的?網路的使用者除了一般人以外,還有可能是視覺障礙(包括全盲、色盲、弱視等)、聽覺障礙(全聾或是重聽)、行動或有認知障礙、對閱讀或是文字理解有困難的人。另外,使用者有可能無法使用滑鼠或是鍵盤,例如有些觸控式導覽機台(Kiosk)的操作方式都是點選(Click)的方式,沒有滑鼠中拖曳(Drag)的功能;還有有些電腦老舊、或是不同的作業系統、不同的瀏覽器、不同的文字語言、連線的速度過慢等等,這些狀況都會使網頁資訊的讀取產生或多或少、或大或小的問題。所以無障礙網路空間的設置,是在製作網站時,要考量以上這些諸多情形,採取「可及性(Accessibility)」的設計,讓不同的使用者、不同的連線狀況下,都能順利讀取網頁資訊。

【Why? -為什麼要推廣無障礙網路空間? 】

為什麼要推廣無障礙網路空間?資訊發達的時代,網路讓每個人搜尋資料、獲取知識的空間變大、速度加快,尤其是各國的政府機關也紛紛架設官方網站,透過網路機制,民眾可以很方便地上網申辦證照、繳交各種費用等等;學校更是利用網路功能註冊、加退選修課程、繳交作業、報名各種入學考試等等。在這種情形下,網路無異是一種公共空間,如果政府機關以及學校的公眾資訊取得對某些民眾而言是種障礙,那麼公民的平等權,例如就業、接受教育等權利,就被忽視了。另一方面,科技發展越來越快速,上網的工具不再只限於桌上型電腦;手機、PDA等設備,也漸漸成為上網讀取資訊的工具。這些工具的視窗大小不再是4:3的比例,瀏覽器也不一定是IE、Netscape,要如何讓不同的上網工具、不同的視窗大小、不同的瀏覽器都可以讀取網頁資訊,也是推廣無障礙網路空間的重要課題。

星期一, 1月 09, 2006

【Ajax】什麼是Ajax

Ajax 即是「Asynchronous JavaScript + XML」,是一種非同步的技術,表面上看來是「非同步」、「JavaScript 」、「XML」這三種東西所組成,重點在於AJAX能夠將WEB Browser與AP Server串起來,但這用Default的ASP或ASP.NET來說似乎"不可能",因為Web是無狀態,故Browser和Web Server之間是不會有任何連線,且Javascript要和.NET Code無礙地融合也不太可能,但透過AJAX可使得Javascript能夠自由自在呼叫C# Code或VB.NET Code,然後還能回傳.NET型別物件如DataSet供Javascript來處理,而非同步的部分是可以擺脫Postback大笨牛式的將整個頁面 資訊回傳處理,故可以和Postback大笨牛Say bye bye,動作靈巧得不可思議!

例如 Google 的 Gmail 信箱服務,沒有像一般的 Web-Based 介面那樣每次執行一個動作就需要重新 reload 一次畫面,使得整個使用的經驗變的比較 Friendly。讓Web Application的操作能像桌上型電腦中一般的應用程式,達到RIA的同樣目地。

什麼是RIA?
Rich Internet Application的縮寫,由Macromedia在2002/03提出,主要的精神在於將部份的網頁處理交給用戶端的瀏覽器負責執行,介於網頁應用程式與統的桌面應用程式的處理方式。


傳統Web Application 與 Ajax Web Application 比較




使用Ajax的最大優點就是能在不重新整個頁面的前提下維護資料。這使得Web應用程式更為迅捷地回應使用者交互,並避免了在網路上發送那些沒有改變的資訊。

Ajax 不需要任何流覽器外掛元件,但需要使用者允許JavaScript在流覽器上執行。就像DHTML應用程式那樣,Ajax應用程式必須在眾多不同的流覽器和平臺上經過嚴格的測試。隨著Ajax的成熟,一些簡化Ajax使用方法的程式庫也相繼問世。同樣,也出現了另一種輔助程式設計的技術,為那些不支援 JavaScript的使用者提供替代功能。

對應用Ajax最主要的批評就是,它可能破壞流覽器後退按鈕的正常行為。在動態更新頁面的情況下,使用者無法回到前一個頁面狀態,因為流覽器僅能記憶歷史記錄中的靜態頁面。一個被完整讀入的頁面與一個已經被動態修改過的頁面之間的差別非常微妙;使用者通常會希望單擊後退按鈕能夠取消他們的前一次操作,但是在Ajax應用程式中,這將無法實現。開發者們想出了種種辦法來解決這個問題,大多數都是在使用者單擊後退按鈕訪問歷史記錄時,通過創建或使用一個隱藏的IFRAME來重現頁面上的變更。(例如,當使用者在Google Maps中單擊後退時,它在一個隱藏的IFRAME中進行搜索,然後將搜索結果反映到Ajax元素上,以便將應用程式狀態恢復到當時的狀態。)

一個相關的觀點認為,使用動態頁面更新使得使用者難於將某個特定的狀態保存到收藏夾中。該問題的解決方案也已出現,大部分都使用URL片斷識別字(通常被稱為錨點,即URL中#後面的部分)來保持跟蹤,允許使用者回到指定的某個應用程式狀態。(許多流覽器允許JavaScript動態更新錨點,這使得 Ajax應用程式能夠在更新顯示內容的同時更新錨點。)這些解決方案也同時解決了許多關於不支援後退按鈕的爭論。

進行Ajax開發時,網路延遲——即使用者發出請求到伺服器發出回應之間的間隔——需要慎重考慮。不給予使用者明確的回應,沒有恰當的預讀數據,或者對 XMLHttpRequest的不恰當處理,都會使使用者感到延遲,這是使用者不希望看到的,也是他們無法理解的。通常的解決方案是,使用一個視覺化的元件來告訴使用者系統正在進行後臺操作並且正在讀取資料和內容。

Implement AJAX有幾種方式:
1.完全手工自己打造AJAX-->但可能對大多數人而言太困難也太耗時
2.使用微軟callback方式-->只支援ASP.NET 2.0,目前已可實作
3.使用AJAX現成Library-->我最欣賞這方式,快速容易
4.期待微軟已進行的Altas Project-->但只支援ASP.NET 2.0,且連實際可用的影子都還沒

相關參考資料: