ソラマメブログ

  

Posted by at

2007年12月30日

SLアイテム検索ページ仮実装しました

これまでに投稿した記事にあるlibsecondlifeを使った情報収集を使って、
Secondlife内のアイテムの一部が検索できるページを仮実装しました。
http://www.march.awk.jp/itemInfo/itemCondition.php


Secondlife内で販売されているオブジェクト(以下、商品)に
関する情報を自動的に収集して本システム内のデータベースに格納し、
WEB画面から検索し販売場所にテレポートできるようにするシステムです。
公式ビューアでの検索に比べ、商品情報だけが検索できますが、
私が立ち寄る店限定なので、アイテム数は超少ないです。



あきらかなバグや情けない問題も含んでいますが、
こんな事もできるというサンプルとして公開します。

各商品のパッケージに使われている画像をサムネイルとして使わせてもらっていますが、
それぞれの権利は各持ち主にありますので、転載などはご遠慮ください。
また、何か問題あるようでしたら削除しますので、リプライやIMなどで
連絡をお願いしますm_()_m
  
タグ :libsl


Posted by march at 15:52Comments(0)libsecondlife

2007年12月30日

紋付買った

紋付を買おうとして公式で検索したら、Nagasaki BAKUMATSUがHITしたので行った。
250L$で、満足できるものだった。
たまたまいらっしゃったAccura先生らとちょっとおしゃべりして新年の挨拶したり。
これから撮影に行ってきます。
  
タグ :MONTSUKI


Posted by march at 15:10Comments(0)

2007年12月27日

SL紅白2007での会場の人数


SL紅白2007に行ってきました!
自宅でライブに参加できるなんて思ってもいませんでしたが、
ハイテンションな曲あり、癒される曲あり、笑える曲ありと、
とても楽しい時間をすごすことができました。
Stickamやネットラジオでも中継されていたようで、多くの人が
同時に同じ映像を見て空気を共有できるのはいいですね。



SL紅白2007の会場の人数を調べてみました。
パフォーマンスについて知りたい方は公式ページをどうぞ。
http://help.secondlife.com/jp/guides/stats.php



SIMリセット後の19:30に会場に行ってみたのですが、
すでに30人ほど入っています。スタッフの方もいるのでしょうが、
中にはもっと前に会場入りした人も居るようです。

その後も順調に増え続け、開演の21:00(4:00)にはほぼ60人に達しました。

しかし白組のトップバッターのうまのすけさん、赤組のトップバッターの
SpaceWindが歌い終わった21:40ごろから徐々に人が減り始めました。
この時には音声ストリームが一度切れて、再度再生ボタンを押さないと
聞こえない状態でした。

次の変化は22:45ごろ、ZEROのメンバーが歌い終わった後のトークの時から
急に増えています。
この山ではテレポート遅延やRez遅延が断続的に23:15頃まで続き、
(保留アップロード/保留ダウンロードが1を越えています)
会場では歩けない人や、音声ストリームにつながらない人が出ました。
ピークはPlastic Soul Bandの特別編成ビデオの上映+ルーシーさんのダンス
の時で、23:08には最高人数82人に達しました。
この頃には隣接SIMもあわせると約130人の人がこのSIMを見ており、
それらの人にアバターの情報を届けなければならないこのサーバの
パフォーマンスはそれまで80%程度を保っていたのに10%程度まで低下しました。
会場はアーティストの生声の呼びかけにチャットで答えたりと大変な盛り上がりでした。
この山はThe Black Stripesの演奏が終わる頃までつづきました。

その後は人数は多くスポット的に重くなるときがあるものの
大きな擾乱はなく、24:30のエンディングを迎えました。


今回多くの観客をひきつけたPlastic Soul Band、The Black Stripesの
ライブでは、今後も同様の高負荷に対する対処が必要かもしれません。
スタッフの皆様、お疲れさまでした。


Dilationのグラフ。1.0が最高のサーバパフォーマンス。



フレーム時間のグラフ。
重いときはネットワークやグラフィック関連の処理時間が延びている。


karuizawaシムの重さと比べてみると面白いかもしれません。
http://march.awk.jp/simstat/condition.php


生データが欲しい方がいらっしゃいましたら声をかけてください(^_^)
この記事に関する批評もお待ちしています。  


Posted by march at 12:02Comments(0)

2007年12月27日

セカンドライフでもの作りしたい人が読む本

以前から噂されていた、ikukoさんがとりまとめている本が
1月10日についに発売されます!

http://www.amazon.co.jp/dp/4798114367/
クリエイターズ Second Life セカンドライフでもの作りしたい人が読む本 (大型本)
Shooting Oh (著), Ryuji Duell (著), Kuranosuke Kamachi (著), viola Congrejo (著),
ikuko spinotti (著), katsuzo Boa (著), Mika Mip (著),
Hidenori 'GOTTi' Glushenko (著), Eitaro Igaly (著)

未発売なんでまだ現物を見ていないですが、クリエーター向けの本との事なので、
期待が持てそうです。
私のメッセージボードも載っているはずです。
#記事を書いてくれないかと打診があったのですが、RLで大変な状況だったので
#泣く泣く辞退したのでした。


みんな、買ってね~(^_^)
  


Posted by march at 09:34Comments(0)

2007年12月26日

アイテム情報収集の説明の下書き

書きかけですが、アイテム情報収集のサイトに関する説明の下書きです。


★SecondLife商品情報自動収集システム
2007-12-28
march Korda

1.本システムの概要
  本システムは、Secondlife内で販売されているオブジェクト(以下、商品)に
  関する情報を自動的に収集して本システム内のデータベースに格納し、
  WEB画面から検索し販売場所にテレポートできるようにするシステムである。

2.仕組みの簡単な説明
2.1.
  本システムには大きく2つの処理がある。
  (1)SIMに接続し、商品の情報を取得して、本システムのデータベースに格納
    する
  (2)ブラウザから商品検索条件を受け取り、該当する商品情報をブラウザに返
    却する
2.2.データフロー
  図1を参照

3.収集するデータ
3.1.収集項目
  0L$以上で販売されている商品に関する以下の情報を収集する
  ・名前
  ・説明書き
  ・置かれている場所(SIM名+X値+Y値+Z値)
  ・販売価格
  ・販売形式(Original/Copy/Contents)
  ・使用されているテクスチャのうちの1つのUUID
  ・使用されているテクスチャのうちの1つの画像
  ・商品のオブジェクトUUID
  ・所有者のUUID
  副次的に以下の情報を付加する
  ・アイテムID(本システムの内部管理用の番号)
  ・情報収集日

3.2.収集場所
  あらかじめ指定した場所にテレポートし、その近所にあった商品の情報を
  収集する。
  これは他人のプライベートエリアに進入しないための配慮であると共に、
  有名店や注目店の情報のみを取得するためである。

4.課題
  ・箱詰めされていない商品の場合、テクスチャを見ても商品の外見が分から
   ない。
   (例:ぬいぐるみの実物を置いて販売している場合、ぬいぐるみの材質(使っ
   ているテクスチャの代表)は分かるが、そのぬいぐるみが犬なのか熊なのか
   は分からない)
  ・TP地点の近くにあるのに情報収集できていないアイテムがある
  ・UUIDを指定しても取得できないテクスチャがある
  ・検索をLIKEの中間一致でおこなっているため、レコード数増加により
   性能が劣化する
  ・商品をRezするタイプのベンディングマシンがあると、
   RezするたびにUUIDが異なるため、異なるアイテムと見直してしまい、
   同じ商品が複数登録される。

5.開発者向け資料
5.1.構成技術
  ・Secondlifeからのデータ収集にはlibsecondlifeを利用した。
  ・libsecondlifeのドライブにはIronPython(FePy)を利用した。
   選定の理由は、Secondlifeに接続して手探りでlibsecondlifeの挙動を
   確認する際に対話型言語の方が開発スピードが速くできると考えたためで
   ある。
  ・サーバ構成ソフトはmysql+PHPとし、当節の一般的な環境で構築できること
   を目指した。
  ・サムネイルの作成にはImageMagickを利用した。

5.2.ファイル・ディレクトリ構成
5.2.1.収集用PCディレクトリ/ファイル構成
5.2.2.サーバディレクトリ/ファイル構成
5.2.3.CSVファイル
5.3.データベース構成
5.3.1.テーブル一覧
5.3.2.テーブル構成
5.3.3.データの重複判断と更新
  同一商品(オブジェクトのUUIDが同じ)を別な収集日に収集した場合は、
  収集日が古いほうを削除する
5.3.4.シーケンスもどきの実装
5.4.画面構成
5.5.機能一覧
5.6.試験済み項目

  


Posted by march at 22:55Comments(0)

2007年12月25日

アイテム情報収集のページをちまちま直す。

アイテム情報収集のページをちまちま直す。
相変わらずテクスチャ情報の収集は成功率が低い。
いい情報だけをコンパクトに。というのもできていない。
例えば、あるSIMの中心地には絵を売っている店があるが、
ベンダーマシンは限られた空間に色々な商品を見せるために
20秒ごとにオブジェクトをRezしている。
(テクスチャの張り替えでなく)
そのためオブジェクトのUUIDが変わり、
オブジェクトIDが違えば違うアイテムだと認識するうちのシステムでは
同じ名前で同じ場所で同じテクスチャでオブジェクトIDが違うだけのレコードが
大量に格納される。というわけ。

テクスチャをそのまま載せるのはやめて、100 * 100 サイズのサムネイルにすることにした。
訴えられそうになったら消そう。

デザイン性ゼロとか検索結果の合計件数が出ないとかあるけど、
そろそろ時間切れなんでもうちょびっとやっておしまいの予定。

やってて楽しかったし宝くじ買った時みたいな淡い期待も抱けたんで、いいかー。という気分。  


Posted by march at 23:55Comments(0)

2007年12月22日

ひさびさにinした気分

フットサルの来期についての話し合いでinした。
接続テストや技術的な内容から離れて趣味で話ができるのはいいなーと思った。
SL内にも居ていい場所があるというのは心地よい。
話し合いの中で、箱状のコートの角にボールが行くと選手がボールを奪いに集まって団子になるから角を丸くしたらいいのではという話が出た時に、その場で物を見られるのは話が早くてよい。
シリンダーをカットして~とか言われてもわからんしw
  


Posted by march at 23:38Comments(0)

2007年12月21日

与太話-20071221

しばらく前の記事ですが。
井之上パブリックリレーションズ,米リンデンラボと戦略広報の正式契約
2007年10月2日
http://gihyo.jp/magazine/WSE/newshotline/vol14/0011

>(株)井之上パブリックリレーションズは8月1日,3D仮想空間セカンドライフを運営する
>米リンデンラボ社と正式に契約を結び,日本での戦略広報活動を展開することを開始した。
(略)
>今後,米リンデンラボ社と日本のユーザ,報道機関をつなぐ窓口として活動を展開していくとのこと。

トラブルの相談窓口や日本語対応に関する技術サポートを行うんだと勝手に思ってしまいましたが、
他の人に聞いても知らないというので、どうやらそうではなさそうです。

MagSLやメルチなど大手?も引き受けないところを見ると、公式サポートを名乗るには何か簡単にはできない条件があるのかも。  


Posted by march at 21:54Comments(2)

2007年12月19日

日本語で検索できるようにするパッチ

検索ウインドウで日本語で検索できないよ!というレポートが上がっていたので、
日本語で検索できるようにするパッチを作りました。
http://jira.secondlife.com/browse/SVC-1020



まだvoteが3でほとんど誰も注目していないようですが、
「入力が半角カナになっちゃうよ事件」(笑)のように
皆が必要だと思って投票すれば、正式リリースに組み込まれるかもしれません。


投票のしかたはこの辺のページが参考になります。

不満があればJIRAに投票
http://keimar.slmame.com/e65545.html

日本語入力おかしいと思ったらJiraで投票
http://movings.slmame.com/e65518.html

JIRAについて ~日本語環境のセカンドライフに困っていませんか - Chizzy Dilley のセカンドライフレポート
http://blogmag.ascii.jp/secondlife/2007/11/001060.html

Issue tracker-ja - Second Life Wiki
https://wiki.secondlife.com/wiki/Issue_tracker/ja




日本語で検索すると意外な発見があって面白いですよー

  
タグ :JIRA投票vote


Posted by march at 22:01Comments(1)viewer

2007年12月19日

日本語検索(SVC-1020)パッチ書き終わり

日本語検索(SVC-1020)について解析してパッチを書き終わりました。
こんな漢字で日本語も通ります。



現在のビューアでの問題点ですが、
ビューアで日本語を受け取ってから検索サイトに投げる前に「URLエスケープ」という処理が必要ですが、
そこがうまく動いていませんでした。


英数字や一部の記号以外はUTF-8にして1バイトずつ%をつける必要があります。
例えば「あ」はUTF-8では「E38182」なので「%E3%81%82」に変換します。

この処理を行う中で、バイト列を1バイトずつ扱う部分があるのですが、
その処理の中で1バイトをcharで取り出してU32(つまりunsigned int)に変換している箇所があり、
そこで符号拡張によりおかしくなっていました。
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E6%8B%A1%E5%BC%B5 などをご覧ください。
例えば、上記の「E3」は2進数では「1110 0011」ですが、先頭が1なため数字としては負の数になり、
内部で格納するときは「FFFFFFE3」2進数では「1111 1111 1111 1111 1111 1111 1110 0011」となります。
これを元に戻さないまま文字にしようとしていて「%FFFFFFE3」と変換されていました。
頭の%FFが空白のように表示されたため空振り時のメッセージとして「 FFFFE3」のように表示されました。

例えば「abあcd」で検索すると、「 Your search - ab FFFFE3 FFFF81 FFFF82cd - did not match anything」
のように、FFFFの前にだけ空白があくことが分かります。


解決方法ですが、必ず1バイトしか扱わないと分かっているため、0xFFでマスクして頭を0にしました。
ただ、ここ以外でもURLに動的引数を使うなど、URLエスケープが必要なケースがあるはずなので、
URLエスケープするための関数は別にしました。


あとは満足するまでテストケースを追加して、この説明を英訳してパッチと共に投げるだけですが、
JIRAのほうは投票が少ないようですね。
皆さん困っていないというよりは、日本語で検索できるはずだって知らないんじゃないでしょうか。
  


Posted by march at 12:56Comments(0)viewer

2007年12月18日

公式ビューアからの日本語検索(SVC-1020)

公式ビューアからの日本語検索がうまくいかないという報告が出ている。
http://jira.secondlife.com/browse/SVC-1020
It is not possible to retrieve it in Japanese.

llpaneldirfind.cpp 内を見ると、以下のようになっている。


void LLPanelDirFindAll::search(const std::string& search_text)
{
if (!search_text.empty())
{
// Replace spaces with "+" for use by Google search appliance
// Yes, this actually works for double-spaces
// " foo bar" becomes "+foo++bar" and works fine. JC

// Since we are already iterating over the query,
// do our own custom escaping here.

// Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
const char* allowed =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
"0123456789"
"-._~$+!*'()";

std::string query;
std::string::const_iterator it = search_text.begin();
for ( ; it != search_text.end(); ++it )
{
if ( std::isspace( *it ) )
{
query += '+';
}
else if(strchr(allowed,*it))
{
// The character is in the allowed set, just copy it
query += *it;
}
else
{
// Do escaping
query += llformat("%%%02X", *it);
}
}

std::string url = gSavedSettings.getString("SearchURLQuery");
std::string substring = "[QUERY]";
url.replace(url.find(substring), substring.length(), query);
(略)


いまRFC1738 の日本語版を読んでいる。

ちなみに、「À」はUTF-8では「C3 80」である。
http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=C0
この1文字を検索したときのエラーは
---
Your search - FFFFC3 FFFF80 - did not match anything we could find within Second Life.
Nothing was found in Second Life containing "FFFFC3 FFFF80".

Suggestions:

* Make sure all words are spelled correctly.
* Try different keywords.
* Try more general keywords.
---
である。
  


Posted by march at 12:29Comments(7)viewer

2007年12月16日

与太話-20071216

バーチャル世界を相互に連結させる
Interconnecting virtual worlds
http://mrtopf.de/blog/web20/interconnecting-virtual-worlds/

オープンな標準を決めて、皆がそれに準拠して自分のバーチャルワールドを実装すればいいんじゃね?という話らしい。
Web3.0という呼び方は聞いたことがない。
そもそもやりたい事やできることが違うので、共通化できるのはチャットやIMや音声配信みたいに、使う符号体系が少ないものだけなんじゃないかと思う。あるいはサブ規格で物体やアバターの外見や位置情報なんてのもできるかも。

下位のレイヤの事も知っておかないとなぁ。  


Posted by march at 13:27Comments(0)

2007年12月14日

Open source meeting に行ってみた。

Open source meeting に行ってみた。
http://wiki.secondlife.com/wiki/Open_Source_Meeting
Open source meeting - Thursday, 2pm PT in Hippotropolis

今回はアジェンダが出ていなくて共通に議論できるネタが無かったのかも。
GStreamerやopenAL(フリーのマルチメディア/オーディオのライブラリらしい)で動きがないけど、
誰かTofuの人を突付いてる?という話が最初に出た。
あとは、WEBの問題点について、JIRAを見ていった。
https://jira.secondlife.com/secure/IssueNavigator.jspa?sorter/field=votes&sorter/order=DESC
バグ管理は面倒だが手際よくできれば負担は減るなぁというのが感想。
以下は気になった話と個人的感想。
バグの内容や経過はそれぞれのページを見てくださいな。


https://jira.secondlife.com/browse/WEB-107
jira is very slow to respond to http requests
JIRA遅いよね。という話。DBバージョンアップしたけど早くなってない?という感じ。
個人的には今はちょっと早くなった気がするけど、朝だから回線がすいているせいかも。

https://jira.secondlife.com/browse/WEB-373
Jira session handling seems newly broken.
ブラウザで複数タブを開いていると検索結果とかがごちゃごちゃになるけど?という話。
自分は気になった事がないが、前からそうらしい。

https://jira.secondlife.com/browse/WEB-272
Cannot add portlet
ドイツ語でfirefoxでログインした後、画面遷移によってはjavaのぬるぽエラーがでるとのこと。
ちょっとやってみたけど再現しないなぁ。
うちのIEだとHomeのページ(https://jira.secondlife.com/secure/Dashboard.jspa )の右半分が出ないんだけど。。。
とか言ってしまったが、ログインしたらちゃんと表示されたのは君と僕だけの秘密だ(汗)


で、余計なチャチャ入れをしてRobさんに怒られたのでありました。
  


Posted by march at 08:33Comments(0)

2007年12月14日

販売価格の最大は2147483647

販売価格の最大は2147483647(2^31-1) LSLのinteger型の大きいほうの最大値と一緒。
最小値は0でマイナスにはできない。
  


Posted by march at 06:16Comments(0)

2007年12月13日

libsecondlifeサンプル - 画像の取得

テクスチャのUUIDを指定して、テクスチャ画像をJPEG 2000形式でAsset serverから
取得しファイル等に保存することができます。

処理の流れは以下のとおりです。
1.あらかじめテクスチャデータ処理用のハンドラを登録しておく
2.client.Assets.RequestImage関数を使ってリクエストを出す
3.ハンドラの関数でファイルや変数に保存する

以下はサンプルコードです。

#libsecondlifeのロード
import clr
clr.AddReferenceToFile("libsecondlife.dll")
import libsecondlife
import time
import os

#ログイン情報の設定
firstName = 'abcd' #苗字
lastName = 'efgh' #名前
passWord = 'ijkl' #パスワード

#イベント待ち合わせ用クラスの定義
class EventTracker:
def __init__(self):
self.data=False
def Clear(self):
self.data=False
def Set(self):
self.data=True
def Wait(self):
while not self.data:
time.sleep(0.1)
def WaitTimeout(self, s):
t = time.time()
while not self.data:
time.sleep(0.1)
if(t < time.time() - s):
print 'event timeout',
break
else:
#print 'wait,..', t, s, time.time(),
pass

#テクスチャデータ処理用のハンドラの定義
def ImageReceivedHandler(image, asset):
print 'image.ID=', image.ID, 'image.Success=', image.Success
if(image.Success):
#jp2ファイルとして出力
fp_out = open((image.ID).ToString() + '.jp2', 'wb')
for i in range(len(image.AssetData)):
fp_out.write( chr(image.AssetData[i]) )
fp_out.close()
print 'wrote ', len(image.AssetData), 'bytes'
event.Set()

#初期設定
event = EventTracker()
client = libsecondlife.SecondLife()
client.Assets.OnImageReceived += client.Assets.ImageReceivedCallback(ImageReceivedHandler)

#接続
client.Network.Login(firstName, lastName, passWord, '', '')
time.sleep(10)

#実際の処理(1つずつテクスチャを取得)
imageUuidList = [
'13c20952-8cce-27a8-8e18-05c19bc59147', #clownfish(244 Free Textures -04/04-(YadNi s Junkyard))
'dc22d88c-6e8d-0203-e637-fc1b9f4ebe0b', #BirthdayCard-PACKAGE
'f05dd50c-92f1-3575-f00c-527bcb9b46c4' #unicode-0x30-sazanami-gothic-transparent
]
for i in range(len(imageUuidList)):
event.Clear()
imageType = libsecondlife.ImageType.Baked
resultUuid = libsecondlife.LLUUID(imageUuidList[i])
requestImageRet = client.Assets.RequestImage(resultUuid, imageType, 100000.0, 0)
event.WaitTimeout(30)
time.sleep(1)

#切断
client.Network.Logout()

こんな画像が取得できます(私が配布しているメッセージカードの販売箱のテクスチャです)


・他にも、RequestImages関数としてリストで渡して複数テクスチャを一度に受け取る関数もあります。
 AssetManager.csを参照してください。



注意!
画像に関する権利は画像の作者や画像の管理者にあります。
簡単にコピーが取れるからといって、他人の画像を勝手に自分の商品として売ったりしないよう注意しましょう。

  


Posted by march at 15:31Comments(0)libsecondlife

2007年12月13日

karuzawaシムパフォーマンス収集・ダウン(復旧)

http://march.slmame.com/e72199.html でお知らせしたkaruizawaシムのパフォーマンス収集は、2:30-8:30の間停止していましたが復旧しました。
  


Posted by march at 08:37Comments(0)

2007年12月13日

2007年12月12日

コーヒーメーカー

仕掛け入りのコーヒーカップで、関係者用サイトが更新されるとコーヒーが注がれて湯気が出る。店においても違和感ないし知らない人は気がつかない。関係者だけに通知するにはいい仕掛けだ。  


Posted by march at 21:35Comments(0)

2007年12月12日

libsecondlifeサンプル - オブジェクト情報取得


オブジェクトがRezされたり更新されたり削除されたりした場合に、
そのオブジェクトの情報を取得することが出来ます。

オブジェクトの情報には、以下の情報が含まれています。
右クリックしてパイメニューの「Edit」で得られる情報はほぼ取得できそうです。
・基本的な情報(LLObjectクラス)、
 UUIDや置かれている位置やテクスチャUUIDなど
・プロパティ情報(ObjectPropertiesFamily構造体、ObjectProperties構造体)、
 名前や販売種別や販売価格など
・プリム情報(Primitiveクラス)、
 テーパ角度、物理属性か否かなど


オブジェクトの情報の取得は以下の流れです。
(他にもっとスマートなやり方がありそうですが…)
前にこのBLOGでも少し書いた、0L$以上で販売しているオブジェクトの情報の取得は
このやり方です。

1.取得したいオブジェクトのある場所にログイン/テレポートする
2.OnNewPrimイベントでオブジェクトのUUIDを得る
3.RequestObjectPropertiesFamilyで上記のUUIDのオブジェクトのプロパティを要求する
4.OnObjectPropertiesFamilyイベントでプロパティを得る

・この方法では、近くにあるはずのオブジェクトの情報が取得できていない
 場合があります。
 公式クライアントで見たときのように、アバターの体の向きを変えたり
 歩き回ったりすればいいのかも知れませんが、未調査です。
・OnNewPrimは名前のとおり新しいプリムを発見したときに発生するイベントなので、
 既にログイン/テレポートしてから時間がたった後で
 自分の周囲にあるオブジェクトのUUIDを得ようとする場合には使えません。
・OnNewPrimイベントは1オブジェクトごとに発生するので、
 数分で数千回~数万回程度呼ばれる場合が多いため、いったん配列などに入れて
 イベントハンドラ外で非同期に処理したほうがいいかもしれません。
・プロパティ情報を要求してもOnObjectPropertiesFamilyイベントが発生せず
 情報が得られない場合があります。
・スレッドプールが不足した旨のエラーで落ちる場合があります。
 0.3.1リリースノートにあるようにlibsecondlife側の問題です。
 http://www.libsecondlife.org/wiki/libsecondlife:Release_Notes/0.3.1


以下はサンプルコードです。

#libsecondlifeのロード
import clr
clr.AddReferenceToFile("libsecondlife.dll")
import libsecondlife
import time

#ログイン情報の設定
firstName = 'abcd' #苗字
lastName = 'efgh' #名前
passWord = 'ijkl' #パスワード

#各オブジェクトの情報
primSummary = {} #オブジェクトの基本的な情報
sims = {} #オブジェクトの置いてあるSIM
primProperties = {} #オブジェクトのプロパティ情報

#イベント待ち合わせ用クラスの定義
class EventTracker:
def __init__(self):
self.data=False
def Clear(self):
self.data=False
def Set(self):
self.data=True
def Wait(self):
while not self.data:
time.sleep(0.1)
def WaitTimeout(self, s):
t = time.time()
while not self.data:
time.sleep(0.1)
if(t < time.time() - s):
print 'event timeout',
break
else:
#print 'wait,..', t, s, time.time(),
pass

#新規オブジェクト検出イベント処理用のハンドラの定義
def NewPrimHandler(sim, prim, regionHandle, timeDilation):
#オブジェクトの情報を辞書に格納
global sims, primSummary
if(primSummary.has_key(prim.ID)):
return
sims[prim.ID] = sim
primSummary[prim.ID] = prim
#プリムの基本情報の取得
#print client.Objects.RequestObject(sim, prim.LocalID)
#プリムのプロパティ情報の取得
client.Objects.RequestObjectPropertiesFamily(client.Network.CurrentSim, prim.ID)

#オブジェクト情報取得イベント処理用のハンドラの定義
def ObjectPropertiesFamilyHandler(sim, properties):
global primSummary, primProperties #, gItemPointer
if(primProperties.has_key(properties.ObjectID)):
return
primProperties[properties.ObjectID] = properties

#初期設定
event = EventTracker()
client = libsecondlife.SecondLife()
client.Objects.OnNewPrim += libsecondlife.ObjectManager.NewPrimCallback(NewPrimHandler)
client.Objects.OnObjectPropertiesFamily += libsecondlife.ObjectManager.ObjectPropertiesFamilyCallback(ObjectPropertiesFamilyHandler)

#接続
client.Network.Login(firstName, lastName, passWord, '', '')
time.sleep(10)

#実際の処理(10秒まって、周囲のオブジェクトの情報を出力)
client.Objects.OnNewPrim -= libsecondlife.ObjectManager.NewPrimCallback(NewPrimHandler)
time.sleep(10)
for i in primSummary.keys():
#オブジェクトの基本的な情報の出力
print 'sim =', sims[i]
print 'prim.Position =', primSummary[i].Position
print 'prim =', primSummary[i]
#オブジェクトのプロパティ情報の出力
if primProperties.has_key(i):
p = primProperties[i]
print 'Name =', p.Name
print 'Description =', p.Description
print 'SaleType =', p.SaleType
print 'SalePrice =', p.SalePrice #@see ObjectManager.cs #Not / Original / Copy / Contents
print 'Category =', p.Category
print 'GroupID =', p.GroupID
print 'LastOwnerID =', p.LastOwnerID
print 'ObjectID =', p.ObjectID
print 'OwnerID =', p.OwnerID
print 'OwnershipCost =', p.OwnershipCost #0.3.0
print 'Permissions =', p.Permissions #0.3.0
else:
print 'no propertiesFamilly'
print '---'

#切断
client.Network.Logout()


以下のページも参考になります。
http://www.cs.unc.edu/~rgayle/Comp790-058/lectures/Comp790-BotsAndPlanning.ppt
  


Posted by march at 12:25Comments(0)libsecondlife

2007年12月11日

LSLシンタックスハイライトのテスト

sabro さんのブログでLSLのシンタックスハイライトツールについての投稿があったので、
そこから色々たどって見ながら表示を変えてみました。

http://sabro.slmame.com/e30094.html
http://weblibrary.s224.xrea.com/weblog/web20/blog/dpsyntaxhighlig.html
http://code.google.com/p/syntaxhighlighter/


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

touch_start(integer total_number)
{
llSay(0, "Touched.");
}
}


改行を「 & # 1 0 ; 」に変換しないと行末に「 < B R > 」がついてしまうらしい。
「 & # 1 0 ; 」は実体参照と言うそうな。
見映えが良くなるのですが、変換は面倒である。
  


Posted by march at 19:02Comments(4)