Adsense

2007年12月19日水曜日

LSL 日本語処理・・・本当に幸せになるかも

以前ご紹介した Alissa さんの日本語対応 SL Viewer 「その場入力」 ですが、、、ものすごいことになりました。

というのも、、、LSL で日本語を直接扱うことができるようになったんです。

これ、、、ものすごくインパクトが大きいんですよ。list 型のオブジェクトに直接日本語を入れることもできるんです。

この利点は

1) 日本語のメッセージがどんなものかをエンコードされていない「文字(=日本語)」で確認可能
2) エンコードされた文字数よりも少ないのでメモリの節約になる
3) デコードするための関数がいらないので、その分処理の高速化とメモリの節約になる

ほんと・・・すごいです!
そこでどのくらいメモリの節約になるかを試した結果が以下です。

Alissa バージョンだと以下のように LSL を書くことができます。

--- LSL code begin -------------------------------------------

list msgList = ["これはテストです","日本語がリストに入ります",
"Alissa さんサイコー","メモリの節約にもなります","確認も楽です"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llList2String(msgList,i));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}

--- End of source ---------------------------------------------

最後に FreeMemory をとって Say してますが、その結果は以下。
image
15,695 バイトのメモリが残った状態ですよね。
これを従来の Base64 を使った処理にします。ソースと結果が以下。
-----------------------------------------------------------------------------
list msgList = ["44GT44KM44Gv44OG44K544OI44Gn44GZ","
5pel5pys6Kqe44GM44Oq44K544OI44Gr5YWl44KK44G+44GZ",
"QWxpc3NhIOOBleOCk+OCteOCpOOCs+ODvA==",
"44Oh44Oi44Oq44Gu56+A57SE44Gr44KC44Gq44KK44G+44GZ",
"56K66KqN44KC5qW944Gn44GZ"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llBase64ToString(llList2String(msgList,i)));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}
------------------------------------------------------------------------------

image
15,614 バイトのフリーメモリーw
これを URLEscape にすると・・・・
-----------------------------------------------------------------------------
list msgList = ["%E3%81%93%E3%82%8C%E3%81%AF%E3
%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81
%99","%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81
%8C%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AB
%E5%85%A5%E3%82%8A%E3%81%BE%E3%81%99",
"Alissa%20%E3%81%95%E3%82%93%E3%82%B5%E3%
82%A4%E3%82%B3%E3%83%BC",
"%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E7
%AF%80%E7%B4%84%E3%81%AB%E3%82%82%E3%81
%AA%E3%82%8A%E3%81%BE%E3%81%99",
"%E7%A2%BA%E8%AA%8D%E3%82%82%E6%A5%BD%E3
%81%A7%E3%81%99"];

default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }

    touch_start(integer total_number)
    {
        integer i;
        for(i=0; i<5; ++i) {
            llSay(0, llUnescapeURL(llList2String(msgList,i)));
            llSleep(0.5);
        }
        llSay(0,(string)llGetFreeMemory());
    }
}
---------------------------------------------------------------------------

image
こんな単純なスクリプトでも、日本語のためのテキストのバイト数と、ちょっとだけどデコードする関数分のメモリの節約が・・・
なんと、最大 15,695 -> 15,337 で 358 バイトも節約w
すばらしい・・・
みんなで JIRA にいって、「早く Alissa さんのコードを採用して~」と書き込みしたいくらいw
ほんと、Alissa さん、良い仕事してます!
で・・・ この修正は Alissa さんが Linden の JIRA に投稿してます。
Payment Info User じゃないとだめかもしれませんが、、、、みんなで(といっても、日本の人だけしかわからない・・・だから・・)これがすばらしい!と投票しませんか。
まず、、、JIRA の Alissa さんの投稿のページにいきます。
http://jira.secondlife.com/browse/VWR-3857

[追記] Voting(投票) するには SL のアカウントでログインする必要があります。

以下の画面で赤で囲んでいる [Voting] をクリックします。
image
以下の画面で赤で囲んでいる [Add] をクリックします。

image
これで完了ですー
Alissa さん、本当にありがとうー