2007年1月30日 星期二

K論文之自言自語

CHARM: frequent item sets
PrefixSpan:frequent sequence
CloSpan:Closed frequent sequence
BIDE:Closed frequent sequence with more efficeint pruning method.

mining frequent sequences vs. mining frequent item sets
frequent sequence mining has to take ordering of items into consideration. It's more comlicated than frequent item sets mining

PrefixSpan vs. CloSpan
With similar data structure, which is prefix search tree, expands the frequent sequence along the prefix tree.
BUT! CloSpan mines only "Closed" sequence, which means no super sequence with same support. Based on this characteristic, Clospan can prun the search tree more efficiently than prefixspan. (i.e. s1 c s2, and with the same size of projected database, means the subtree of s1 and s2 is exactly same.)

CloSpan vs. BIDE
Both use prefix search tree. But BIDE needs no candicate and filtering process. It uses forward extension event checking and backward extension event checking to exam if a sequence is closed. And uses backscan, a more aggressive pruning method than clospan, to prun the search tree.
why we say backscan is more aggressive? because it needs not to exam the previous mined sequence. Intead, it exams only within current projected database.

2007年1月29日 星期一

js 之邊走邊接case

javascript 這種語言真的超活
var obj = new Object();
obj[methodname] = function mymethod(){;}


然後...
obj.methodname();
等同於執行 mymethod(這樣也行=口=)
你可以把function由此法動態的attach到任一物件上。

這個寫法用來實作事件的註冊超級乾淨
因為有種情形是,你希望你的物件在某種情況下,例如 新增、刪除、修改
能做一些事,來反應物件的改變,但是這些事是啥事則希望能夠動態指定

這時code 的長像就像這樣
function myobj(){
var myobjhandler = new Object();
this.registerEvent = function(event, handle){
myobjhandler[event] = handle;
}
...........
this.fireevent = function (){
myobjhandler.event();
}


}

2007年1月26日 星期五

要常常記得的事

前幾天轉台到極道鮮師
剛好聽到一段話
是久美子的外公和她在談一個彆忸的小孩

「....人這種動物 哭的時候 不一定悲傷 笑的時候 不一定開心 
要了解一個人的優點 必需用心...」

謹記謹記
對於自已親愛的朋友、家人
你有多用心觀察呢?

現在的人太忙、忙到只有時間看到表象
往往忘了用心在值得的人身上
一家人在一起,不見得比一個人更不孤單

尾巴希望 能了解身邊的人的好,並且記住它們


2007年1月24日 星期三

嬰兒的野心

小嬰兒也有野心嗎?
有的有的! (手)
(1) 大家都愛我
(2) 常常帶我出去玩
(3) 把我舉高高,這樣才能看到大家
還有嗎...?還有喔
小嬰兒的野心其實很大喔~

Java Script 的你與我

目前手上的AP有個迷人(磨人)的特性,就是
Js有邏輯, 而html的頁面操作是與Js的邏輯是相關的
大家討論後,為了把物件的責任切清楚,設計上用了很多callback
怎麼說?
就是在html裏埋了一些 js 的 function
function updateHtml(){
//去和Dom打架
}
然後把這個function註冊到後端物件去跑...
比如
function runUpdateHtml(callback){
//先和邏輯打架
callback(); //再更新頁面
}
這麼一來html端的邏輯和後端的邏輯就可以切得比較乾淨了^0^

socket socket socket

最近的網路作業要寫一個Instant Messaging Server
其中令人頭大的一點,就是要做容錯處理
當Client 連上來立即斷線,或呆呆的啥都不幹時
Server 要把它們踹開,服務其它嗷嗷待哺的Clients

經過詢問Guru 後
決定三種解法

將socket 讀取變成 Non-blocking mode (via fcntl)
int flags = fcntl(*new_con, F_GETFL, 0);
fcntl(*new_con, F_SETFL, flagsO_NONBLOCK);
再搭配計時器

設定socket 的recieve timeout
setsockopt(servSockFD,SOL_SOCKET,SO_RCVTIMEO,&timeval,sizeof(timeoutVal));
動都不動... =口=

經過Guru開釋,發現以下資訊

SO_RCVTIMEO and SO_SNDTIMEO
Specify the sending or receiving timeouts until reporting an
error. They are fixed to a protocol specific setting in Linux
and cannot be read or written. Their functionality can be emu-
lated using alarm(2) or setitimer(2).

總之就是咧 linux 不給改socket 的 SO_RCVTIMEO, 建議自已用select 做polling...當下決定棄城而逃

Blocking mode 的讀取配合另開thread 的計時器

OK, 這純粹是因為Blocking mode效能優於Non-blocking mode, 所以只是想想,倒沒有真的實作。

最後尾巴是理所當然、偷懶的用了第一種解法,不過怎麼看 select + polling 才是王道!改天應該要來研究一下

ajax 同步選項

在Ajax 的實作裏,異步一直是吸引人的特點
但有的時候,同步的操作在維護整體邏輯的正確性上比較容易

If your application needs to be compatible only with IE ...
Ajax call的同步模式,可以使用
req.open("GET", url,false);

不過有個傷腦筋的問題,false 的選項在Firefox裏是不支援的!
而且,另一個隱微但傷腦筋的地方是
在callback 裏被調整的變數直到下一個"新的" function call之前,都不會更新
所以目前的解法是
在callback把一缸子要一起解決的邏輯給run完(就當成是一個transaction一般看待)!
好吧...既然AP附在瀏覽器上 就也只好在屋簷下低頭
不過還是覺得Ajax 雖然開放了異步的便利性,但還是應該提供傳統的同步實作啊啊啊....