Feeds:
文章
留言

Archive for 2008 年 04 月

如果有程式 /example/ex01/index.py, /example/ex02/index.py 和 /example/ex03/index.py 分別對應到 http://cwchelloworld.appspot.com/example/ex01, http://cwchelloworld.appspot.com/example/ex02, 和http://cwchelloworld.appspot.com/example/ex03 ,在 yaml 中一般寫法為

– url: /example/ex01
  script: example/ex01/index.py

– url: /example/ex02
  script: example/ex02/index.py

– url: /example/ex03
  script: example/ex03/index.py

實際上你可以用正規表示法改寫為

– url: /example/(ex[0-9]*)
  script: example/1/index.py

如此可使設定檔更為簡潔~

Read Full Post »

Win32 版本的 gettimeofday

節錄自"Re: gettimeofday() on Win32"

#ifdef WIN32
/*
* Number of micro-seconds between the beginning of the Windows epoch
* (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970).
*
* This assumes all Win32 compilers have 64-bit support.
*/
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) || defined(__WATCOMC__)
  #define DELTA_EPOCH_IN_USEC  11644473600000000Ui64
#else
  #define DELTA_EPOCH_IN_USEC  11644473600000000ULL
#endif
typedef unsigned __int64 u_int64_t;

static u_int64_t filetime_to_unix_epoch (const FILETIME *ft)
{
    u_int64_t res = (u_int64_t) ft->dwHighDateTime << 32;

    res |= ft->dwLowDateTime;
    res /= 10;                   /* from 100 nano-sec periods to usec */
    res -= DELTA_EPOCH_IN_USEC;  /* from Win epoch to Unix epoch */
    return (res);
}

int gettimeofday (struct timeval *tv, void *tz)
{
    FILETIME  ft;
    u_int64_t tim;

    if (!tv) {
        //errno = EINVAL;
        return (-1);
    }
    GetSystemTimeAsFileTime (&ft);
    tim = filetime_to_unix_epoch (&ft);
    tv->tv_sec  = (long) (tim / 1000000L);
    tv->tv_usec = (long) (tim % 1000000L);
    return (0);
}

Read Full Post »

依據收入排行的前15名證照

Read Full Post »

Ajax 讀取二進位資料

今天看到"Reading binary files using Ajax"介紹透過 XMLHttpRequest 讀取二進位資料的方式,大略看了一下作法

首先對於有實作 XMLHttpRequest 的瀏覽器,在 send 之前必須先呼叫

req.overrideMimeType(‘text/plain; charset=x-user-defined’);

修改 MIME Type,之後 req.responseText 收到的資料則為 Raw Data,req.responseText.length 為檔案長度。讀取特定 byte 的方式為

req.responseText.charCodeAt(i) & 0xff
至於 IE 則比較麻煩必須透過 VBScript 處理,不過大致上步驟也差不多,在 send 之前先呼叫
xhr.setRequestHeader "Accept-Charset", "x-user-defined"
然後透過 xhr.responseBody 回傳的是 byte 字串,必須手動透過 AscB 轉換成 byte 陣列,後續讀取 byte 的方式則類似陣列索引方式 
fileContents[i]。
其他細節就自行參考 
http://www.heypage.com/nagoon97/BinFileReader/BinFileReader.js
不過,對於此功能我還沒想到可應用的地方 ~

Read Full Post »

Learning Agent For Air v0.6

加入線上更新功能,原本想將 Air 程式放在 Google Application Engine,可惜 GAE 目前單一檔案限制 1048576 bytes ~

003 002

目前 v0.6 版的主功能介面… 尚未解決頁面功能無法點選的問題~

004 005 006 007 008

Read Full Post »

AIR 程式線上更新

最近打算將線上更新功能實作到 Learning Agent For AIR,整理一下實現步驟

1. Web 存放版本資訊 XML 和 AIR 檔

2. 下載解析版本 XML

XMLHttpRequest + DOMParser

3. 取得目前應用程式版本

4. 比對版本,有新版本就下載存檔

URLRequest+URLStream+ByteArray

5. 更新程式

Updater

執行結果

001

Read Full Post »

拿到婚紗喜帖了 ^^

今天第一次去校稿,也拿到我的婚紗喜帖,距離我的婚期還有一段時間,想不到我已經拿到了喜帖,感覺有點怪

不過母親節也快到,剛好拿回家給家人欣賞 ^O^

雖然還沒有拿到照片的電子檔,只好先翻拍喜帖過過乾癮… 不過拍照技術不佳,部份拍起來有些失焦

另外,今晚非常感謝 Rita 和 Grace 的協助,讓我們美編校稿過程相當順利且舒服…. 也非常感謝陳真總監為我們製作的相片目錄,我們非常喜歡…

相當期待最後的成品~~~~~~~

Read Full Post »

玩 Red5 似乎不免俗的都會寫個聊天室程式,有點像 Hello World 程式的感覺,我想主要是為了測試 Red5 的資料交換,資料交換算是 Red5的基本功能,內部已經由 ApplicationAdapter 類別實作了,所以,內付範例的 SampleChat 就直接由該類別負責處理,所以,你會發現 webapps/SOSample 只有設定檔,卻沒有任何程式。

聊天室這類的程式片段網路太多,我就秀一下我的執行畫面~

 b02

以下是延伸應用,與我的電子白板整合

b03

Read Full Post »

我想要寫一個 Flex 3 程式,能夠與 Red5 內付的 SimpleChat 程式交換資料。

我原以為只要將 Flash 程式片段經過 Flex 3 稍微改成 AS3 的語法即可,可是一直卡在可讀取 SimpleChat 資料卻無法寫入。

網路上有許多這類的程式片段,不過大部分都是 Flash 不然就只針對 LSO 進行解說。即便是 Adobe 官方文件對 RSO 也沒有太多的著墨。

也因為這樣,居然花了我一個工作天的才測出這個簡單程式。

這個問題主要發生在 Flex 3 要讓 Server 同步 SharedObject 資料,必須使用 SharedObject.setProperty("name", value); 而不能直接使用 SharedObject.data["name"] = value;

以下就是我簡化後的測試程式

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="343">
    <mx:Script>
        <![CDATA[
        import com.live.spaces.chuiwenchiu.net.MyNetConnection;
        public var conn:MyNetConnection = new MyNetConnection();
        public var so:SharedObject = null;
        private  function btnStart_click():void{

            conn.addEventListener(NetStatusEvent.NET_STATUS, function onStatus(e:NetStatusEvent):void{
                if (e.info[‘code’] == "NetConnection.Connect.Success"){
                    so = SharedObject.getRemote("SampleChat", conn.uri, false);
                    so.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function(e:AsyncErrorEvent):void{
                        var msg:String = e.error.message;
                    });
                   so.addEventListener(SyncEvent.SYNC, function(e:SyncEvent):void{
                        if (so.data["SampleChat"] == undefined){
                            return;
                        }                       
                        txtData.text += so.data["SampleChat"] + ‘n’;

                    });
                     so.connect(conn);   
                    btnSend.enabled = true;                                
                }else{
                    trace(e.info[‘code’]);
                }           
            });               
            conn.connect("rtmp://localhost/SOSample");   
        }       
        private function btnSend_click():void{
            if (txtMsg.text.length == 0){
                return;
            }
            so.setProperty("SampleChat", txtMsg.text);
        }           
        ]]>
    </mx:Script>
    <mx:Button x="23" y="10" label="Connect" click="btnStart_click()" />
    <mx:Button id = "btnSend" x="218" y="229" label="Send" enabled="false" click="btnSend_click()"/>
    <mx:TextArea x="23" y="40" id="txtData" width="187" height="181"/>
    <mx:TextInput x="23" y="229" width="187" id=’txtMsg’/>
</mx:Application>

執行結果

 20080423

Read Full Post »

AIR 1.0 Bug?

今晚撰寫 Learning Agent For Air,有個功能一直沒有反應,追查了很久才發現問題,我將問題簡化成如下

<html>
    <head>               
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >       
        <script type=’text/javascript’ language="javascript">    
        var divContent = null;
        function body_onload(){
            divContent = document.getElementById(‘divContent’);
            divContent.innerHTML = ‘<input type="button" onclick="a(1)" value="test">’;
        }

        function a(){           
            divContent.innerHTML = ‘<input type="button" onclick="alert(1)" value="new test">’;
        }
        </script>
    </head>

    <body  topmargin="0" leftmargin="0" onload=’body_onload()’>
        <div id = ‘divContent’></div>       
    </body>   
</html>

在 Safari 3.1.1, IE 6.x 和 Firefox 2.x 啟動時會顯示一個 test 按鈕,當我按下按鈕之後,按鈕文字會變為 new text,當再按一下按鈕時會顯示 1。

可是上述程式在 AIR 上面跑就是不會出現 1 @_@

不知道是不是 sandbox 關係…. 不過沒看到任何錯誤訊息~

Read Full Post »

Older Posts »