Saturday, December 29, 2007

My work-around for flash player 9.0.115 loadPolicyFile()

上一篇說了一堆,想想還是把我的 code sample 放上來好了~

var playerVersion:String = System.capabilities.version;
var bkidx:Number = playerVersion.indexOf(" ");
var platform:String;
var majorVersion:String;
var minorVersion:String;
if (bkidx >= 0) {
    platform = playerVersion.substring(0, bkidx);
    var secondHalf:String = playerVersion.substring(bkidx+1,
                                         playerVersion.length);
    var vers:Array = secondHalf.split(",");
    majorVersion = vers[0];
    minorVersion = vers[2];
}

var drcID:Number:
function doReadlConnect(server, port) {
    clearInterval(drcID);

    // do real stuff here
}

function myConnect(server, port) {
    System.security.loadPolicyFile("
http://"+server+"/crossdomain.xml");
    System.security.loadPolicyFile("xmlsocket://"+server+":"+port);

    var sock:XMLSocket = new XMLSocket();
    sock.connect(server, port);
    sock.onConnect = function() {
        this.close();
        delete this;
    }

    var waitms = 1000;
    if (majorVersion == "9" && minorVersion == "115")
        waitms = 5000; // special for 9.0.115
    drcID = setInterval(this, "doRealConnect", waitms, server, port);

}

注意,這只是節錄出來的 sample,不要照抄去用... XD

buggy loadPolicyFile() in flash player 9.0.115

最近公司的程式被回報在某些 flash player plugin 上會出問題,進一步發現問題只在 9.0.115 才發生,跑 flash player 9.0.45, 9.0.47 都正常。

到 Adobe devnet 看了才知道 9.0.115 在 security 控管上有了新的方式,有興趣的可以看這裡,這版還只是第一階段變動,未來還有第二階段。

由於我們的程式需要開 XMLSocket 連線到其他機器的特殊 port (低於 1024),所以只能使用 loadPolicyFile() 來取得 XMLSokcet 的開啟權限。但是這個動作在 flash player 9.0.115 卻有問題~

根據 Adobe 文件,9.0.115 在 XMLSocket 開啟時會先連去目標 server 的 port 843 試圖取得 meta policy file,若是該 port 沒有回應,則會歷經一個 3sec 的 timeout,然後才改連到目標 port 並發出 "<policy-file-request/>" 的命令要求下載 policy file。

然後~

才會允許 XMLSocket 連線...

如果想要避免連往 port 843 的 3sec timeout,就必須在程式中先下 System.security.loadPolicyFile() 主動去取得 XMLSocket policy file,那麼就能馬上接著開啟 XMLSocket 連線了。

但是,很可惜,事實上在 9.0.115 中 loadPolicyFile() 根本就不會動作!

9.0.115 完全不會去執行 loadPolicyFile() 取得 policy file,而是只會等到程式在做 XMLSocket:connect() 時,才開始進行到 port 843 取 policy file 的一連串流程...

結果就是,程式必須等將近 5sec 之後,才能正常地進行 XMLSocket 連線~
很囧~

想要在 9.0.115 中正常開啟 XMLSocket 連線的辦法,目前就只能先做一次 dummy connecting 讓 player 開始進行要求 policy file 的流程,然後等待約 5sec 後才做真正的連線,那麼程式就能運作了...

所以咧,我只好在程式中判斷 flash player 版本 (可以使用 System.capabilities.version 取得),然後針對 9.0.115 做這個 5sec waiting。

很可笑的 bug,浪費我不少時間在確認 loadPolicyFile() 在各版本 flash player 是否有正常動作。只能希望下一個版本會改進了。

有些人也遇到這個問題,相關討論在這裡
本來想上去留言我的解決方式,但是還要開帳號,還是算了... 懶~~

Saturday, December 22, 2007

一張有關 Meeya 的照片

最近台灣新社群網站 Meeya 的事情正鬧得沸沸湯湯的,有興趣的人可以到 funp 搜尋 meeya 就能看到一大堆,我當然就不多廢話。

只是剛剛在 Filckr 上看到了張有趣的照片,是 Meeya 某個加班的夜晚拍的吧。

畢竟照片不是我拍的,也不知道會不會不見,抓了張 snapshot 下來

看起來是正在用 Araxis Merge 比對 php 程式,只不過,不知道哪一邊是 facebook 的程式?哈,開開玩笑罷了,可以看出來右邊只有多了 debug code 啦~

 

meeya-araxis-merge

Monday, December 17, 2007

[單車] 新店 -> 平溪 -> 福隆 -> 羅東, 123km

從上個月就跟堂哥在討論找假日騎單車去羅東,可以從平溪去,北宜回來,應該會很不錯。

好不容易,安排好時間,打算 12/15 出發。
可以這個週末似乎不是什麼良道吉日~整個週末都是一副晚娘般的陰雨天...

本來就討厭雨天出門的我,還決定如果雨太大就不玩了~

還好當天 6:30am 出門前,天氣只是陰陰的,沒雨。
7:00am 約在木柵動物園門口,同行的還有幾位其他的朋友。

muzha-luodong

借了堂哥的 eTrex 放到我車上,上頭已經載入了昨天他設定的沿路分段 tracks,我們一路 follow eTrex 的 track back 走,事實證明真是好用!Thumbs-up 沒有多餘的道路資訊,忠實地告訴我們該往哪個方向走,還有多遠的距離到達下個 check point,還幫我們紀錄下航跡,搭配上 MapSourec,eTrex 真是便宜又好用!

在轉上 106 縣道時,堂哥的在地同事,事前建議了另一條路線,雙十路,沿著基隆河的另一邊走,今天低沉的雲霧恰好地放在鄰近的山頭上,給了我們不一樣的美景,在這裡騎著單車,不會特別感受到山路的彎折,那麼剛好地可以沿路賞景,舒服~

不到兩小時,我們就抵達了預定的中途會合點,莫內咖啡。在這裡,當然是滿場的高檔重機。其實,就在剛剛的路上,還遇見了三輛法拉利...菁桐車站

途中經過菁桐車站,繞進我以為沒有路的老街,我們牽著單車悠閒逛街,遇見在此拍照的師徒(我自己以為的),問我們怎麼不騎呢?這樣的氛圍,當然是要用牽的慢慢逛,才適合呀~出了老街,沿著鐵路,我們踩上踏板,從另一頭轉回 106。

 

在莫內咖啡,邊喝咖啡邊聊天,等著另外三位女車友來會合。她們帶小折搭火車上山,打算輕鬆享受 106 下坡回台北。打屁了一個多小時後,我跟堂哥與其他人道別,兩人往福隆出發,目的地:羅東。

一路到福隆,仍然是享受,只是肚子餓得厲害,還好剛剛好在 12:00 到達福隆車站,吞下一個便當,買個 7-11 的熱伯朗咖啡,打個屁,後面才是辛苦的開始...

北關的 T2,後面就是我堂哥

其實,離開 106,台 2 丙,接上台 9 省道後,真的是苦難...Sad


沿路大卡車多到不行~雨又開始下,滿地水漬,不但被自己的車噴的一身,也被從旁呼嘯而過的卡車噴得髒兮兮... 我甚至還能感受到卡車的 slipsrteam,真的拉了我一下咧 Orz

20km 後到了北關,我們的車子真是慘不忍睹啊... 更不用提我的屁股了,被水噴到內褲都溼了咧~

接下去的路就沒什麼特別了,除了新發現的 191 縣道,可以帶我們避開礁溪,頭城還有宜蘭市區的台 9 車潮。我們就只能與自己的屁股痛,雙腿酸痛還有不時迎面撞來的飛蟲奮戰,盡力往羅東前進。

終於在下午 5 點多,剛剛天黑時,我們抵達了羅東運動公園!(歡呼)
好慘的 T2總騎乘里程約 123km,騎乘時間 6.5hr,總花費時間 11hr,均速 18km/hr。

晚上與羅東的親戚吃個爽快的大餐,洗個澡,上床睡覺,真是爽啦! HaHa~
真是愉快的一天~

最後,真是要稱讚這台 KHS F20-T2,真是好騎,只是隔天我的鏈條就生鏽給我看了...Crying

Monday, December 10, 2007

Fonera FON_AP 連線有問題!

今天收到登錄 Fonera 可以抽 iPhone 的 email,才發現我的 Fon AP 居然已經是斷線狀態好一段時間了!?看來是因為我把 ISP 從 Seednet 換到 FTTC 之後就斷了...

本來以為只是重新設定一下就好,但是卻發現奇怪的現象,就是使用 MySpace private network 可以正常使用 Fonera,但是使用 FON_AP public network 卻取不到 IP address,只得到一個 "Limited/ no connectivity" 狀態 >"< Stormy Cloud

搞了老半天,沒有進展~最後終於在 FON Boards 找到了答案。

簡單說,就是 Fonera 在 public network 模式中,會用 hostname 而不是 IP address 去查詢 FON 自己的 DNS。然後透過他自己的 DNS server 來做進一步的動作。而光是在這個步驟就失敗了,因為這種行為會被某些 ISP 擋掉...Confused

ps: 以上我沒辦法證實 Tongue out

總之呢,解決方式也挺簡單~就是把 Fonera 的 network interface 不要使用 DHCP,而是使用指定的 FON DNS server IP address 213.134.45.129 就行了。

so,先在我的 WAN router 上查好我的 Fonera 所經由 DHCP 分配到的 IP address,然後到 Advanced 的 Internet Connection Settings 改成 Static IP 設定,填入指定的 IP 等資訊,最重要的是 DNS server 要設成 213.134.45.129,如下圖!

 FON Internet Setting

搞定收工