Second Life in Japan
Advertisement

Scripters_cafeログ


08/05/17[]

Fakeさんが独自に複数人数対応のLingr転送スクリプトを作られたとのことで、オフィスアワーに来た人でテストしました。

最初Lingr側の反応が悪く、発言が反映されるまでにややタイムラグがありましたが、途中から反応もよくなり、またスクリプト側がエラーになることもありませんでした。(10人以上が同時に接続しても、まだスクリプトのメモリには余裕がある状態でした)


08/04/19[]

1つのスクリプトのみで複数の人数を処理しようとしているLingr転送スクリプトですが、同時に4人や5人が入室したところでstack-heap collisionが発生してしまうというショボイスクリプトでしたので、このスクリプトのソースをオフィスアワーのネタとして提供しました。


いくつか追加で検証が必要な内容もありますが、幸い?このソースにツッコミどころが多かったので、改めて LSL の挙動を調べて今までGOTTiが間違って思い込んでいたことがあるのが判明したりしました。


このスクリプト自体は、いくつかの挙動を再検証後、1から書き直したいと思います・・・。



08/04/05[]

前回、リスト管理部分を少し改良?したLingr転送スクリプトですが、今回のオフィスアワー時にみなさんにログインを試してもらったところ、結局5人くらいがログインしたところでやはりstack heap collisionが発生してしまいました。


ライブラリ関数を使用しない単純な連結処理などでは、連結処理ハックを使うことでメモリ領域を節約できるのですが、要素の値を書き換える部分ではどうしても余分な領域が必要になってしまうようです。


結局今のLSLのバイナリコードでは、要素数の多いリストを扱うと設計上のシンプルさ以上に処理速度やメモリの無駄といった大きなデメリットが発生してしまうため、要素数の少ないリストに分割するような設計が必要そうです。


Monoだとセッションが切れる[]

少し前のバージョンのMonoでは、Lingrへのログイン処理(スクリプト内部ではリスト処理)部分で実行時の例外が発生していたのですが、それが修正されたようなので再度Monoでテストしたところ、Lingrへのログインと発言までは正常に行われました。

ただし、Lingrのセッションを維持する処理が正常に動作していない?のか、放置しているとすぐにセッションが切断されてしまいました。 (メイングリッドのLSL2ではセッション維持できています)


こちらの現象については追加調査が必要そうです。



08/03/29[]

各アバターが1個ずつスクリプト入りのオブジェクトを必要とするのはいろいろ不都合なので、1つのスクリプトでその場にいる人のチャットをすべてLingr転送するスクリプトを作ってみました。

  • タッチ+ダイアログで入室・退室の管理
  • タッチ+ダイアログからブラウザでLingrにアクセス


このスクリプトをオフィスアワーでテストしようとしたのですが、早い段階でstack-heap collisionが発生してしまいました。

このスクリプトでは、各アバターごとにLingrへの接続セッション、入室チケット、およびそれらの処理に伴うllHTTPRequestの処理キーをリスト変数で管理しているのですが、入室処理時に何度かリスト変数の書き換えを行っている部分で無駄が多かったようです。


そこで、リスト変数を書き換える処理にハックを追加したところ、少し状況が改善されました。

listやstring連結時のブードゥーマジック


現時点で何人までいけるのかテストできていませんが、リストを扱う部分はさらに最適化が必要そうです。


要素の値の書き換えが必要なリスト変数を扱う場合は、何らかの方法で書き換え時のテンポラリ変数のサイズが小さくなるような工夫が必要と思われます。

今回のLingr転送スクリプトでは、リスト変数を擬似的に2次元配列のように扱っており、1つのリスト変数そのものが巨大になっています。このような巨大なリスト変数を作ってしまうと、リストの要素を書き換える場合に常に同じサイズ以上の空き領域が必要になってしまいますから無駄が大きくなってしまうようです。


※こんな議論以前に、どうもLingr側が実用的な速度で応答してくれないので、 ※Lingr転送スクリプトはお蔵入りになる可能性が高いですが・・・。



08/03/15[]

オフィスアワーの開始前に、GOTTiの思いつきでLingrの画面をインワールドのメディアURLに設定して遊んでいたのですが、インワールドから直接書き込みできないかな、というところから、LingrのAPIを調べてみることに。


そうこうしているうちにFakeさんとGOTTiがインワールドのチャットをLingrに転送するスクリプトを書き始める。

シンプルなAPIなので、割と短時間でそれっぽいものが完成。


放置しておくとLingr側のセッションが切れたりするので、セッションが切れないようにしたり、2重ログインにならないような制御や退室の処理などを追加する必要がありますが、単にインワールドの発言が転送されるだけでもかなり遊べました。

実際、インワールドでカフェにいた方たちとは別に、その場にいない方がLingr側で会話に参加してくるということがあり、これはこれで面白かったです。

Lingrはウェブアプリケーションなのでウェブブラウザさえあればどこでも使えるという手軽さと、APIが公開されていて自分が作ったアプリケーションに統合できるというのが面白いところですね。


Second Lifeのインワールド側では、テキスト表示インターフェイスを作りづらいということがあって、Lingr側の発言をLSLで表示するというのは今のところ(使い勝手の良い見た目という点で)厳しそうです。

メディアURLに指定すれば、インワールドでほぼそのままLingrのチャットルームを見ることができるので、現時点ではコレが限界でしょうか。


このLingr連携の使いどころは未知数ですが、カフェでのオフィスアワーの簡易議事録にもなる(途中参加の人に見てもらう)ので、スクリプトを強化して次回からも利用したいと思います。

Advertisement