Feeds:
文章
迴響

Archive for 2008 年 05 月

雖然 Javascript 和 ActionScript 用了一段時間,可是我發現對於 delete x 和 x = null 的差別並不是這麼的清楚。目前 ECMAScript 的 Engine 大部分都使用 Reference Count 方式來實作 GC,那當我呼叫 delete x 時,是否就不需要呼叫 x = null 來切斷 Reference 呢?

根據 ECMA-262 的規格書描述 delete 行為如下:

1.   Evaluate UnaryExpression.
2.   If Type(Result(1)) is not Reference, return true.
3.   Call GetBase(Result(1)).
4.   Call GetPropertyName(Result(1)).
5.   Call the [[Delete]] method on Result(3), providing Result(4) as the property name to delete.
6.   Return Result(5).

* [[Delete]]  的意思是從 object 移除指定的 property

老實說,從這段規格描述我無法確切看出是否切斷 reference。

另外,在 "10,delete关键字和类成员"這篇文章針對 ActionScript 的 delete 提出解釋,其中有一個蠻好的範例摘錄如下:

var a:Object = new Object();
var b:Object = a; // b和a引用同一個new Object();
delete a;
trace(b); // 輸出[object Object] – 在內存中還是存在
delete b;
// GC將回收object

由該篇文章的描述,delete x 的指定會切斷 reference 並且將變數(or 物件成員)名稱移除,因此,當呼叫 delete x 無需呼叫 x = null 切斷 reference。

至於這兩個語法要如何抉擇就看你的應用,如果你的變數不再使用,可以明確透過 delete x 指令移除,如果還重複使用,就使用 x = null。

以上只是我目前收集到的結論,也許內容有誤,煩請指正~

廣告

Read Full Post »

使用 -1 當作參數,如下:
var cam:Camera = Camera.getCamera(-1);
var mic:Microphone =Microphone.getMicrophone(-1);

Read Full Post »

用 BCB 撰寫了一個 ActiveX 元件,該元件內嵌到 IE 網頁中,假如滿足以下條件

1. IE 安裝 IE Developer Toolbar

2. 以另開新視窗方式開啟含有 ActiveX 的網頁

當關閉 ActiveX 網頁再重新另開心視窗時,ActiveX 就無法啟動。當我用 BCB Debugger 除錯之後發現,ActiveX 建構子的參數為 null,一直不瞭解原因為何?而且只要將 IE Developer Toolbar 關閉之後,一切又都正常~

就這樣… 我忽略了該問題直到今天,因為追查其他問題,發現每次都要重新開啟 IE 真是極度的不方便,於是又嘗試重新追查一下

我想起來 IE 上的記憶體管理機制並不很理想,又 GC 採用的是 Reference Count,所以我猜想會不會是因為循環參照導致元件的資源沒有釋放,另開心視窗時,IE 繼續使用未釋放的元件,導致元件無法正常運作。於是我很仔細的將程式掃過一遍,將所有與元件相關的 Reference 全部移除,果然就沒有出現該問題。

不過為什麼 IE Developer Toolbar 關閉時,該問題不會發生?這個我就不清楚了

如果有人知道這方面的問題細節,可否告知一下…. 謝~

Read Full Post »

最近許多 Blog 都在談論 FP10 的新功能,從官方的影片你也可以看到許多很炫的視覺效果,不過,我比較感興趣的的 RTMFP(Real Time Media Flow Protocol) 。

RTMFP 是新支援的通訊格式,目前收集到的資訊只有1)訊息封包在 UDP 協定上 2) 訊息會加密,其他更詳細的訊息可能要等官方釋出。不過就資料封裝於 UDP 這點來說,傳輸速度會較原來的 RTMP 快速,但 UDP 的資料並不保證一定能夠送達,也就是資料傳輸過程封包可能會遺失。不過對於音訊和視訊來說,幾個封包的遺失是可接受,如果用於檔案傳輸一類需要資料完整性的應用就需要自行處理。使用此通訊協定需要伺服器的支援,目前僅官方的 FMS 有支援, Open Source 的 Red5 還沒有看到類似的功能,希望未來也能夠提供類似的機制。

Read Full Post »

MSN 傳來的連結不要亂點

今天打開 MSN 就收到一位熟悉朋友傳來的 MSN 訊息,給了我一個 http://james.wpliu.ch3ck4ds.info 連結就離線了

平常不太熟人給的連結我也不太點,不過因為我昨天才請教他一個問題,我原以為是要給我參考的網站,網址看起來有點怪,不過開頭是他的英文暱

稱,我就點開來看,想不到卻重導到 http://m0bil3.info/indexxx.php 這個奇怪網站,出來的畫面是

003

我沒有細查這個網站,不過感覺九成是一個騙取 MSN 帳密或 ICQ 帳密的網站。

所以,別人傳來的網站,記得先跟對方確認是什麼資料,然後系統防毒、防木馬軟體也開啟時,才比較可以安心點選。

不過,如果他要你輸入帳密,那你就要小心,免得你的資料就被釣走了~

總之,帳密除了官方網站使用之外,其他網站不要隨意使用,免得資料都被竊取走了。另外,定時更換密碼也是一個蠻好的防護措施~

對了,如果對放送給你的奇怪的網址,請對方掃描一下他的電腦是否被安裝了奇怪的木馬程式,免得你的其他朋友也一同受害…

Read Full Post »

Flash/Flex 基於安全性考量,不允許透過程式直接存取硬體資源,所以當你的程式要使用 Camera/Microphone 都會詢問使用者是否允許,如果程式要事先判斷使用者是否已經允許取用 Camera/Microphone 然後進行一些處理,這在 Flash/Flex 當中是允許的,以下是 Camera/Microphone 的狀態判斷程式片段,如要更詳細的說明可參考[1]:

Camera

var cam:Camera = Camera.getCamera();
cam.addEventListener(StatusEvent.STATUS, Camera_onStatus);

// 即時偵測
private function Camera_onStatus(event:StatusEvent):void{           
    if (event.code == "Camera.Muted"){
        // 不允許存取
    }else if(event.code == "Camera.Unmuted"){
        // 允許存取
    }               
}

// 自行確認
public function EnabledCamera():Boolean{
   return !cam.muted;  
}

Microphone

var mic:Microphone= Microphone.getCamera();
mic.addEventListener(StatusEvent.STATUS, Microphone_onStatus);

// 即時偵測
private function Microphone_onStatus(event:StatusEvent):void{           
    if (event.code == "Microphone.Muted"){
        // 不允許存取
    }else if(event.code == "Microphone.Unmuted"){
        // 允許存取
    }               
}

// 自行確認
public function EnabledMicrophone():Boolean{
   return !mic.muted;  
}

參考資料
[1] Adobe, "偵測存取攝影機的權限"

Read Full Post »

原來要將 tuple/dict 傳遞給下一個函數需要加上 */**,真是直覺…. 怎麼昨天想這麼久~ 以下是一個測試範例

def test (s, *args, **kwargs):
    print ‘s’
    print s
    print ‘args’
    print args
    print ‘kwargs’
    print kwargs
    test2(s, *args, **kwargs)

def test2(s, *args, **kwargs):
    print ‘s#2’
    print s
    print ‘args#2’
    print args
    print ‘kwargs#2’
    print kwargs   
#
test(u’connect’, ‘a1’, ‘co’, ‘a2’, ‘aaaaaaaaaaaaaaaaaaaaaaaaaa’, ‘a3’, 123, encoding = 0, context = None)

執行結果

2008051301

Read Full Post »

Older Posts »