我的雲端生活網 - Life+

Saturday, November 7, 2009

Oracle-Sun 全新資料庫發表

今年11月4日於台北國際會議中心,昇陽公司發表 Oracle 和昇陽合力發展的資料庫平台 Exadata 。 Exadata 沿襲並整合了昇陽過去十大創新技術,提供高速、平行的大量資料處理功能。

以往的在線交易處理 (OLTP) 可能在硬體或儲存體方面遭遇瓶頸。昇陽公司運用 Chip Multi-Thread 特製晶片減少 Exadata 平台所需的處理器數量,並達到省電需求。在資料儲存方面,使用運行資料壓縮和智慧快取二項技術,解決輸入與輸出的瓶頸。

Exadata 是 Sun SPARC (硬體) 、Sun Solaris (作業系統) 、Java (虛擬機) 、及 Oracle (資料庫) 的完美組合,並且提供多種層次的虛擬化平台,能夠建立虛擬的分散系統。基準測試 (benchmark) 結果,昇陽使用9個機架的 Exadata 系統做到一個TPC-C,而 IBM 需要使用56個機架才做到一個TPC-C。 Exadata 的效能顯得較高,並且耗電率顯得較少。不過,昇陽公司大中華區系統產品事業部高級技術總監潘榆奇先生指出,每一家公司根據基準測試選購產品或方案時,應該先針對自己的專案需求選擇要使用哪些基準測試,才能做有效的決定。

據言 Oracle 即將併購 Sun 公司。而目前發表 Exadata 時,二家還是各自獨立的公司。未來發展如何,「桃李不言,下自成蹊,」可待結果自明。

以上說明及描述僅根據2009年11月4日本人參與昇陽公司舉辦的產品說明會之聽講摘要。

Friday, November 6, 2009

邏輯程式設計 Prolog

最近花不少時間重新看 Prolog 和 Erlang 的程式寫法,感想是,邏輯程式工具的威力真強。

Prolog 是一種老派的邏輯式程式語言,它的目標是執行邏輯系統。邏輯系統是一些事實和一些規則組成的一組「資料庫」,在系統定義範圍內,可以找到有一些情況被滿足。例如最簡單的三段論法說:

morale(X) :- man(X).
man(socrates).

?- man(socrates).
yes
?- man(me).
no

以上程式中,大寫符號是變數,小寫符號是常在詞彙。句子呈現 X :- Y 是規則,讀做 X if Y ,在邏輯表達式是寫成 X <- Y 。另一種普通的句子是事實。而末尾有 ?- 開頭的,是查詢句。根據以上程式,有些對邏輯一知半解的會大叫:「喔!原來我不道德!」但只是因為以上的三段論與現實的認知稍有差別:邏輯句子表達的是語意的最基本部份,但是日常用語的語意結構非常複雜。

Prolog 程式只要定義幾個句子,執行器就會找出一些滿足這些句子的情況。邏輯推論也是如此。設想有個句子定義可以從一列資料的某個位置取出一項資料:

element_at([X|_], 1, X).
element_at([_|Y], N, Z) :- element_at(Y, N1, Z), N is N1 + 1.

第一句說,對開頭為X的一列資料取第一項,答案是X。第二句則使用了遞迴定義。 (第二句讀作:(右邊) 如果 Y 的第 N1 位置是 Z ,則 (左邊) Y 前面多一項資料,這一列的第 N 位置是 Z 。) 以這樣的寫法,除了可以從一列裏指定位置取得資料之外:

?- element_at([a,b,c,d,e], 2, X).
X = b

還可以查詢在什麼位置可以找到指定的資料:

?- element_at([a,b,b,c], N, b).
N = 2;
N = 3

程式的評估,基本上是反覆檢查可以成立的句子,於是可以將所有的情況一筆一筆找出來。所以,寫一些列出各種情況的程式就變得很簡單。例如,寫個組合程式:

combination(0, _, []).
combination(_, [], []).
combination(1, X, [Z]) :- element_at(X, _, Z).
combination(N, [X|Y], [X|Z]) :- N > 1, N1 is N - 1, combination(N1, Y, Z).
combination(N, [_|Y], Z) :- N > 1, combination(N, Y, Z), length(Z, N).

第四句只考慮一列的第一個元素X參與在答案中的情況,而第五句純粹考慮第一個元素不參與在答案中的情況。 (第四句讀作: (右邊) 如果對 Y 取 N1 個元素的一種組合是 Z ,則 (左邊) 對 Y 前面加了一項 X ,取 N 個元素的一種組合,就是 Z 前面也加 X 。因果關係!) 寫程式時,考慮答案只考慮各種情況的其中一種,但程式執行時, Prolog 就像內建迴圈機能一樣,反複將各種情況一樣接著一樣列出來:

?- combination(3, [a,b,c,d,e], X).
X = [a,b,c];
X = [a,b,d];
X = [a,b,e];
X = [a,c,d];
X = [a,c,e];
......

跟 Erlang 比較, Erlang 程式沒有反覆測試每一條句子的執行方式,因為 Erlang 是函數式語言,函數的特性是從多個輸入也必須只對應到一個值。不過, Erlang 也是經由長期用 Prolog 慢慢開發完成的。這是我拿 Prolog 和 Erlang 對照檢視的原因。

Erlang 的組合程式:

combination(0, _) -> [[]];
combination(_, []) -> [[]];
combination(1, X) -> [ [Z] || Z <- X ];
combination(N, [X|Y]) -> [ [X|Z] || Z <- combination(N-1, Y) ] ++
[ Z || Z <-combination(N, Y), length(Z) == N ].

(第四句讀作: (左邊) 想求得 Y 列前面有個 X 的資料取 N 個元素的各種組合情況,先求 (右邊) 可能是對 Y 求 N-1 個元素的各種組合情況,再將 X 套到每個組合情況之前,或者是直接求 Y 中取 N 個元素的各種組合情況。至於末尾檢查 length(Z) == N ,是要克服後半程式結果的不一致情形。)

執行結果:

> test:combination(3, [a,b,c,d,e]).
[[a,b,c],
[a,b,d],
[a,b,e],
[a,c,d],
[a,c,e],
[a,d,e],
[b,c,d],
[b,c,e],
[b,d,e],
[c,d,e]]

Erlang 缺乏逐步列出各種情況的機能,所以要列出全部的組合情況,用 Erlang 必須把各種答案都算出來,並收集成一列。寫 Erlang 程式顯然比寫 Prolog 程式更辛苦一點點,不過, Erlang 提供 List Comprehension 表達法,使這個組合程式也變得稍微簡單一點點。

Tuesday, November 3, 2009

用Erlang做個文書編輯器

11月1日在Erlang Programming論壇發起一陣討論,談到用Erlang寫文字編輯器的疑問(見1.) 。Ted問到,據說Erlang是分散處理及容錯都很好的語言,那麼如果寫文字編輯器,有什麼並行方面的好處?Mats說,如果有分散處理能力,很好,他常在寫東西到一半必須把半成品備份,這樣可以保留他許多編輯的狀態。

Jayson回答,Erlang雖然不錯,但是講到字串處理真是麻煩透了。倒不如使用JRuby或Clojure之類,建立在Java基礎上的語言。接著,Erlang的發明人Joe答覆了,他指出Erlang做列式的資料處理真是超快的。文字編輯器所需要的文字處理,那些在C++看成string的東西,在Erlang只要把它看成list就做得很棒了。他還說,用C寫文字編輯器才是痛苦的事。最麻煩的undo功能,C語言寫起來要擔心stack中儲存的狀態有沒有改掉,而用Erlang做起來很簡單,因為語言特性比較少有狀態改變。

另外,對於載入及搜尋大檔案方面,Joe指出如果你不會寫大檔案處理的功能,這不是語言方面有問題,而是你缺少演算法的知識。他曾經需要處理gigabytes的檔案,讀過 "Managing Gigabytes" 一書之後,實作了gamma encoding就解決了問題。

Luke Gorrie有個用Erlang寫的仿Emacs。(見2.)

1. Erlang for Programming a Text Editor, discussions from Erlang Programming group at Google groups, url: http://groups.google.com/group/erlang-programming/browse_thread/thread/a6c93367b439a284?hl=en .
2. Luke Gorrie, Ermacs (software), http://fresh.homeunix.net/~luke/ermacs/ .

Monday, November 2, 2009

用 MapReduce 處理大量工作

MapReduce是一種簡單的程式模型,只要知道map和reduce程式,系統會幫忙將map用在原始資料上,整理岀中繼資料,然後用reduce程式收斂這些中繼資料。

程式結構

Map是一個從 (key, list(value)) 對應到 list(key', value') 的函數。簡單說,對map輸入一列資料,map會將資料做一些前處理,然後把一個 key 跟每一筆資料配對。Map是使用者自己寫的程式。

Reduce是一個從 list(key', value') 對應到 list(value'') 的函數。簡單說,reduce是彙總函數,將許多 value' 收合為一個value'' 。 Key' 的存在,可能是用於樣式比對或額外附加資訊的需要。最後的結果仍是 list(value'') 是方便與其他 reduce 程式的輸出再做合併。

系統組成

系統使用相當多的工作單元分別消化map和reduce工作。工作單元可以分佈在許多台電腦中,並且工作單元彼此不共享記憶體資料。Map或reduce做完之後,將資料儲存在檔案系統中。只有一種特殊的工作單元稱為master,負責監看所有map和reduce工作單元的活動情況,並負責派遣map或reduce工作。

分散處理:Map和reduce工作單元各別處理自己的一段資料,做完時,將資料儲存在自己所在電腦的檔案系統,並將完成訊息和檔案位置資訊傳給master工作單元。Master工作單元可以再將中繼檔案或結果檔案的位置資訊傳給下一個map或reduce工作單元,指派下一階段的工作。

檔案儲存:檔案從來不整合成一個大檔案,而是以許多小檔案的形式存在許多台電腦中。電腦彼此之間不交換檔案流,節省網路頻寬。

容錯處理:如果有一些工作單元或電腦不活動並且沒有回應,master工作單元將已經指派去那些電腦的工作重新指派給其他工作單元。要重做工作的原因是,不回應的工作單元造成它所在的電腦檔案無法讀取。重做無效的工作最有容錯的保障。

實作案例

Google MapReduce是C/C++寫的。Hadoop是用Java實作的MapReduce平台,從其中擴充出HadoopDB和Hive等資料庫系統。CouchDB是用到MapReduce方法處理索引的文件式資料庫,用Erlang實作。Disco是Nokia開發的開源MapReduce平台,用Erlang實作,使用者必須用Python寫程式。

1. MapReduce, Wikipedia, http://en.wikipedia.org/wiki/MapReduce.
2. Jeffrey Dean and Sanjay Ghemawat, MapReduce: Simplified Data Processing on Large Clusters, Proceedings of 6th Symposium on Operating Systems Design and Implementation, 2004.

Sunday, November 1, 2009

msn機器人應用實例與相關整合應用

社群合作/軟體開發商/廣告行銷公司/學術探討...各行各業需整合/合作,

或是業務搭配...歡迎與我聯繫(sonet.all@gmail.com)



---

我們已有超過100個以上的企業/團體/活動使用 應用實例

---

<<系統整合與應用>>

新竹大學 (校務系統整合)

世新大學 (圖書館系統整合)

元智大學 (圖書館系統整合)

嘉南藥理科技大學 (資管系整合應用)

國立高雄海洋科技大學-電訊工程系 (RFID貴重儀器管理)

高盛理財資訊有限公司 (理財資訊傳遞與管理,與CRM系統結合)

雲林縣消防局 (系統log警示通知系統)

台南縣消防局 (系統log警示通知系統)

花蓮縣消防局 (系統log警示通知系統)

新竹縣消防局 (系統log警示通知系統)

屏東縣消防局 (系統log警示通知系統)

高雄加工出口區管理處 (系統log警示通知系統)





<<行銷與社群合作>>





數位時代

http://bnext.imoo.tw/  

癮科技

http://cool3c.imoo.tw/

我的貼身e管家

http://join.imoo.tw/gov/

瘋狂賣客機器人

http://crazymike.imoo.tw/

2010台灣茗茶、咖啡暨美酒展-展昭國際

http://join.imoo.tw/chanchao/

電丸公仔機器人

http://tgs.imoo.tw/index.php

熊貓機器人

http://panda.imoo.tw/

3BEST的3寶機器人

http://blog.imoo.tw/?p=1262

重灌狂人MSN機器人

http://briian.imoo.tw/

極品專賣MSN機器人

http://join.imoo.tw/expro/

MSN天氣達人

http://www.tenki.tw/itenki/download/other.php

遊戲基地 MSN機器人

http://www.gamebase.com.tw/event/event_20100607_MSN/index.php

ezfly 行銷合作案

http://ezfly.imoo.tw

麗星郵輪 行銷合作案

http://starcruises.imoo.tw/page03.html

華納威秀MSN機器人

http://vieshow.imoo.tw/

狀態廣告

http://statusad.tw





---

msn機器人本身可以在 linux/win32 下運作,可廣泛支援大多數語言

(asp/asp.net/c#/java/perl/ruby/python/php/vb6/vb.net

...),本身提供soap/cgi/ado 介面操外部系統連接,互動選單可直接

支援一般web 程式

RFID 採用情況調查 (2009年度發表)

澳洲 Wollongong 大學研究人員在2009年下半發表了一篇調查報告,指出 RFID 方案採用及投資群的偏好項目。(見1.) 他們就 130 份 RFID 期刊的讀者做調查,客群包括批發商、零售商、通信、服務、通訊、製造、財務保險、採礦、行政與國防。有 39% 小企業 (20人以下) 、21% 中型企業 (20人到200人) 和 40% 大企業 (200人以上) 。從調查的 21 項目中,最廣為據以投資的項目是:
  1. RFID的採用改善資料品質、可信度和及時性。
  2. 高層管理者的贊助,提供投資的可能。
  3. 改善供需的結盟。
較不影響RFID採用決策的是:
  1. 威脅隱私。
  2. 威脅到安全方面。
  3. 工程標準模糊不定。
調查結果顯示,對方案採納人來說,主要的認知是採納RFID方案獲得策略優勢。而對於未採納者,主要的認知是採用成本及連帶成本過高。

1. SF Wamba, B Keating, T Coltman, K Michael, RFID Adoption Issues: Analysis of Organizational Benefits and Risks, working paper series.

最早的對話系統 Eliza

Eliza 是人工智慧領域很有名並很出色的對話程式,模擬心理醫生與人對話。對話的例子像這樣(http://tadhg.com/wp/1997/12/31/a-dialogue-with-eliza/)或那樣(http://osiris.sunderland.ac.uk/cbowww/AI/AI/eliza.html)。Eliza 被一般自然語言處理的教科書當做最基本的例子,因為它沒有建立完整的句子結構、也沒有資料庫更新、更沒有機器學習,卻能夠處理與人對話的工作。它怎麼做到呢?

Natural Language Understanding (見1.) 1.3 節 (第7頁) 指出,Eliza 內建關鍵詞資料庫,每一筆記錄以 keyword, rank, pattern, outputs 等欄位分別表示:輸入句中存在哪個關鍵詞,順序等級,句子符合的樣式,以及應該輸出的對話。例如: (alike, 10, ?X, In what way?), (alike, 10, ?X, What resemblance do you see?), (are, 3, ?X are you ?Y, Would you prefer it if I weren't ?Y?), (are, 3, ?X are ?Y, What if they were not ?Y) ...... 問號開頭的符號 ?X 和 ?Y 是變數。

對話處理方式是先比較輸入的句子符合資料庫哪些筆記錄的樣式,找到相對的關鍵詞。如果關鍵詞很多,就挑選一個順序等級最大的。以挑選的記錄,使用它指定的輸出句子當做回答句。接著,處理下一輸入句。

Eliza 系統成功的意義,或許是,電腦系統可以不懂人輸入的句子是什麼意思、也可以不關心人輸入句子表達的重點,卻只要在人輸入句子時即時運用自己現有的對話知識,用另一個句子回答人。而回答的句子恰好能引發人的對話思考。人類也像 Eliza 一樣,自己懂得什麼,才能夠答什麼。Eliza 系統的優點是很容易實作,人們不必充份懂語言學,就能建立一套聰明的對話系統。

1. James Allen, Natural Language Understanding, The Benjamin/Cummings, 1995.

Blog Archive