コメントやトラックバック、FriendFeedやTwitterでのツッコミは大歓迎です!
携帯用 by Google

Search

Profile & Feeds

GOTTi
GOTTi@iNNX
FriendFeed - gotti twitter - hidenorigoto flickr - GOTTi mixi - hidenorigoto facebook - hidenorigoto last.fm - hidenorigoto
最近は、PHPのMVCフレームワーク「symfony」関連の活動と、多治見IT勉強会などをやっています。
Googleプロフィール
ブログへのコメントやツッコミ、twitterやFriendFeedでのreplyなどお気軽にお願いします!

Latest Posts

369件のエントリ

Category

iNNX Links

Other Links

Friends Links

258 件中 1 ~ 5 件目 (全 52 ページ)

LSL Convention Japan 2009 閉幕しました

2009/10/19 02:05 add to hatena hatena detail hatena detail

今年のLSLCONが無事終わりました。

振り返ればいろいろ準備不足な点がまだまだ浮かんでしまいますが、それでも、私は今年のLSLCONで自分が担当した作業に、自信を持って合格点をつけたいです。

このようなイベントは、決して誰か一人の人間が努力して運営できるものではありません。

特にLSLCONでは、多くの展示作品の出品に支えられている部分が大きいです。


運営メンバーだけでなく、より多くの人が、「来年もLSLCONがあるといいよね」と考え、行動することで、このイベントが継続していくはずです。

私は、(セカンドライフが続いている限り) LSLCONが続いて欲しいなと強く願っています。

2009/10/19 02:05 add to hatena hatena detail hatena detail コメント

LSLCONって結局何がしたいの?

2009/10/02 05:37 add to hatena hatena detail hatena detail
Snapshot_001

10月になりました。私にとっては「LSL Conventionの月」です(笑

2007年に始まったこのイベントも今年で3回目です。


私は、昨年に続き今年も運営っぽい位置でこのイベントに参加しています。昨年あたりからの強いSL逆風?で、「今年は展示作品の応募は寂しくなるんじゃないかなぁ」などと弱気な予測を立てていたのですが、蓋を開けてみると60作品以上も応募があり、まだまだセカンドライフでスクリプトを書いている人はたくさんいるんだなぁと驚いていたりもします。

さて、そんなLSLCONですが、スクリプターさんから「前に見に行ったけど驚くようなスゴイ作品はなかった」というような声をたまーに耳にすることがあります。展示への出品をお願いしても、そういった理由で参加していただけない方などもいらっしゃるようで、ちょっと残念に思ったりしていました。(私たちの説明がまだまだ至らないという理由もあると思います)

ただ、正直に書きますと、私自身も2007年に第1回LSLCONのただの観客だった頃は、同じような感想を持っていました。


実際のところ、一通り「LSLでできること」が分かってしまうと、スクリプト作品を見て「そんなことができるのか!」と驚くことはほとんどなくなり、「あー、これはあの関数を使ってごにょごにょ」と作り方まで分かってしまうんですよね。そして、「自分にも作れるし、たいしたことないなぁ」という感想ばかりになってしまいがちです。


では何故、私や他の運営スタッフが自分たちの多大な時間を割いてこのイベントを続けているのでしょうか。


LSLではいろいろな事ができるので、展示作品はいくつかのカテゴリーに分かれています。例えば「アミューズメント」だったり「ツール」だったり。そして、特定の分野、例えば「乗り物」に特化したスクリプトばかりを書いている人もいれば、全般的にいろいろやっていたりする人もいたり、アニメーション関連ばかりをやっている人もいたりします。そのようないろいろな人の作品が一堂に会するのがLSL Conventionの展示です。

特定の分野に特化したスクリプトばかりを書いている人には、その分野での何らかのノウハウだったり、こだわりなどがあったりします。また、スクリプトを使うユーザーも様々で、分野によってはユーザーが「使いやすい」「一般的」と捉える機能に差があったりもします。 

このような、機能的にただLSLの関数などを組み合わせて機能を実現するという部分以外のノウハウだったり、目線や価値観などを、得ようと思う人にとってはたくさん得られるのがLSL Conventionの展示(およびイベントそのもの)だと私は考えています。


このように書くと、何かを求めているスクリプターにとっては「不親切なイベント」なのかもしれませんね。
でも、「受け身のままでは楽しめない」という点は、Second Life住人なら頷いていただける方が多いんじゃないかと私は思っています。


スクリプトを書いている方なら、是非とも会場に足を運んでいただいて、スクリプター同士で苦労話に花を咲かせたりしてみてはいかがでしょうか?


そんなLSL Convention Japan 2009は、10月10日(土)からです! 

お楽しみに!


※「運営に参加するともっと楽しいよ」という話もいつか書きます・・・いつか・・・;;


関連ブログ・リンク:


2009/10/02 05:37 add to hatena hatena detail hatena detail コメント

メタバースの将来を考えるなら読んでおきたい一冊「アーキテクチャの生態系」

2009/09/17 21:47 add to hatena hatena detail hatena detail
アーキテクチャの生態系

私は本を読むのが遅い+普段の生活ではあまり本を読まないのですが、たまに電車移動があると、何かしらの本を読みます。(自宅最寄り駅から名古屋駅まで1時間あるので、本を読むには最適なのです)

先日のOSC NagoyaPHPカンファレンスへの東京遠征の電車移動の時間で、ようやく「アーキテクチャの生態系」を読み終えました。この本の内容は多くのSecond Lifeユーザーには興味深いものだと思います。以下私の感想などをまとめてみます。


■「アーキテクチャ」とは何か

本書のタイトルでも使用されている「アーキテクチャ」という言葉ですが、これは本を読んでいただくのが一番なのですが、例えば以下のような説明がなされています。

ネット上のウェブサービスもまた、情報技術(IT)によって設計・構築された、人々の行動を制御する「アーキテクチャ」とみなすことができます。
(第一章 アーキテクチャの生態系とは? P14)

この説明ではネットサービスに限定した言い方をしていますが、もっと広義に、例えば「飲酒運転を減らすために、飲酒運転の罰金を増やす」というのもアーキテクチャの1つだと書かれています。

つまり、「~してはならない」と言葉だけでルールやマナーをあいまいに伝えるのではなく、「~しなければ××というペナルティがある」という、より厳密でシステマティックな方法を採用して人間の行動を制御している仕組みをアーキテクチャと呼んでいるようです。


■アーキテクチャの視点でサービスを比較

本書の面白いところは、こういった「アーキテクチャ」という視点でいくつかのサービスを比較している点でしょう。例えば以下のようなサービス(システムおよび現象)がアーキテクチャという視点で細かく分析されています。

  • Google
  • ブログ
  • 2ちゃんねる
  • ミクシィ
  • P2P(ナップスター、WinMX、ウィニー)
  • ツイッター
  • ニコニコ動画
  • Second Life
  • 初音ミク
  • ケータイ小説

ニコニコ動画をやや持ち上げすぎな印象もありますが、それを差し引いても、この「アーキテクチャ」という視点での分析はとても興味深いです。(2ちゃんねるやニコニコ動画が良くできている、と改めて思わされます)


■感想

昨今では、セカンドライフがマーケティングや経済関係のブログなどに取り上げられる際には、必ずと言っていいほど「過疎」「人がいない」といったキーワードとともに語られます。閑散としている(人口密度が低い)ことの善し悪しそのものについてはここでは論じませんが、本書の分析では、セカンドライフのような仮想世界サービスは「閑散としてしまうアーキテクチャ」であると分析されており、そのようになってしまう(見えてしまう)のは必然ということになっています。

この点は、セカンドライフである程度「生活」したユーザー(住人と呼びましょう)なら、以下のような反論をしたくなると思います。

  • 住人同士で遊ぶには人が密集していない方がよい(軽い)
  • イベントなどに参加すれば、人は(ある程度)たくさんいる
  • wassrやブログポータル、SNSなどで、友達を探せる

たしかにその通りなのですが、これらはほとんどが「セカンドライフの外側」のサービスであって、セカンドライフそのものの仕組みではないんですよね。もちろん、セカンドライフにも検索の機能が内蔵されていて、それを使ってお店や人気の場所、グループなどを探すことはできます。ですが、(全体としては)これらの機能はあまり上手く活用されていないと私は考えています。

また、この検索機能が今の延長線上で強化(例えば日本語が*普通に*使える、など)されたとしても、やはり「ユーザーが能動的に探す」ことをしなければならない点は変わりませんよね。


「ではどうなっていればよいのか」というところまでは、具体的にイメージするのは難しいのですが、例えばFriendFeedで「友達がコメントした(自分の購読者じゃない人の)エントリが見える」というようなアーキテクチャにヒントがあるんじゃないかと私は考えています。

そのような「人と人とのつながりを支援する仕組み」だったり、「人の活動の見える化(作ったモノそのものという以外で)」などが「アーキテクチャ」として組み込まれたサービスが、次の世代のメタバースなんじゃないかなと私は想像しています。


※こういった追加機能や仕組みをサードパーティがアレコレできるというのがSecond Lifeの(そしてTwitterの)良い点なのでしょうけど、サードパーティ製のものはそのままでは「アーキテクチャ」にはなれないんですよね。サービスの全ユーザーがそれを使っているという状態にならない限り。



「次の世代のアーキテクチャ」を持つ仮想世界にセカンドライフが進化するのか、それとも他のサービスが出てくるのか、またはセカンドライフが今のアーキテクチャのまま広く受け入れられるようになるのか、結論が出るには数年かかりそうですね。



書評リンク:

2009/09/17 21:47 add to hatena hatena detail hatena detail コメント

サーバー1.27で、いよいよHTTP-INがメイングリッドに

2009/07/11 10:49 add to hatena hatena detail hatena detail

セカンドライフのメイングリッドのサーバー(SIM)のバージョンアップが今月行われて、1.27になりますが、このバージョンアップにはLSL関連で久々に大きな機能追加が行われています。それが「HTTP-IN」と呼ばれている機能です。


HTTP-INは何か?というのを端的に説明すると、「これまでのXML-RPCをHTTPでできるようにした」ものです。

具体的には、以下のようなことができるようになります。

  • プリムに割り当てられたURLを使用してアクセスする
    • Second Life内部ではLSLのllHTTPRequestを使用してアクセス可能
    • Second Life外部からも同様にアクセス可能
  • URLにアクセスがあると、スクリプトに「http_request」イベントが発生します。
    • このイベント内で何らかのスクリプト処理を行って、レスポンスとして返すことができます。
    • 例えば、イベントが発生した時点でセンサーを起動して、その時点で周囲にいるアバター名の一覧をレスポンスとして返すことなどもできます。

HTTP-INで割り当てられるURLは、例えば以下のようなものです。

このURLの「sim3893」という部分は、リージョンのホストに対応しています。つまり、SIMが変わればURLも変わります。

実際には、URLのハンドリングがちょっと難しいので、そこを理解しておかないと利用するのが難しそうです。以下に、URLが無効になってしまう例を挙げます。

  • スクリプトがリセットされた時
    • スクリプトを書き換えて保存した場合も同様です
    • state_entryイベントで処理します。
  • スクリプトの入ったプリム/オブジェクトをtakeした時
    • takeした瞬間に無効になります。再度rezしてもダメです。
    • on_rezイベントで処理します。
  • リージョンが再起動した場合
    • changedイベントのCHANGED_REGION_STARTイベントが発生します。
  • アバターが身につけているオブジェクトの場合、テレポートしたりSIMを超えた場合
    • changedイベントのCHANGED_REGIONまたはCHANGED_TELEPORTイベントが発生します。

このように、URLが頻繁に変わってしまいます。

以下、HTTP-IN関連で追加された関数・イベント・定数の一覧です。

  • llRequestURL HTTP-IN用のURL割り当てを要求します。URLが割り当てられるとhttp_requestイベントが発生します。
  • llRequestSecureURL llRequestURLと同様ですが、HTTPSプロトコル用のURLが割り当てられます。
  • llReleaseURL 割り当てられたURLを明示的に解放します。
  • http_request URL割り当て完了時、およびURLへのアクセスがあった場合に発生します。
  • llHTTPResponse HTTPリクエストに対して、レスポンスを返します。
  • llGetHTTPHeader HTTPリクエストのいくつかのヘッダを取得します。
  • llGetFreeURLs スクリプトで割り当て可能なURLの数を取得します。
  • CHANGED_REGION_START リージョンが再起動したときに発生するchangedイベントのフラグです。


現在はまだNew Script SIMはバージョンアップされていないようなので、今日のスクリプターの会ではどこかバージョンアップされているSIMに移動して、HTTP-INをアレコレ試してみたいですね。


関連リンク:



2009/07/11 10:49 add to hatena hatena detail hatena detail コメント

ドアのスクリプトサンプル - 滑らかに開閉するドア

2009/07/05 11:41 add to hatena hatena detail hatena detail

さて、ドアシリーズもこのエントリで多分最後ですが、先のエントリのドアを「滑らかに(ゆっくり)開閉する」バージョンを作成してみました。

どういった動きなのかは、以下のムービーをご確認ください。

スクリプトは、以下のようになっています。タイマーによるドアの動き制御が追加されています。また、それに合わせてステート分割も行いました。

/////////////////////////////////////////////////////////////////////
//  ドアのサンプルスクリプト(door3.lsl)
//  タッチしたアバターの位置によって開く向きが変わる
//  滑らか開閉バージョン
//  Released into the public domain by Hidenori Glushenko
/////////////////////////////////////////////////////////////////////
//  初めに「door_init.lsl」スクリプトでプリムを変形させておいてください。
/////////////////////////////////////////////////////////////////////
rotation    DOOR_ROT_ORG;                       //  ドアの基準回転
float       DOOR_DIV_EULER = 150.0;             //  ドアの開閉角度
float       DOOR_OPEN_SEC = 10.0;               //  ドアが開いている時間(秒)
float       DOOR_MOVE_TARGET;
integer     TIMER_COUNT;
integer     TIMER_MAX = 40;                     //  ドアの開閉速度
                                                //  大きいとゆっくり
default {
    state_entry() {
        llSetBuoyancy(1.0);
        llMinEventDelay( 0.01 );
        llSetStatus(STATUS_PHANTOM, FALSE);
        llSetStatus(STATUS_BLOCK_GRAB, TRUE);
        state   DoorClose;
    }
}
 
state   DoorClose {
    touch_start(integer total_number) {
        DOOR_ROT_ORG = llGetRot();
 
        //  タッチしたアバターの位置関係を調べる
        vector av_offset = (llDetectedPos(0)-llGetPos())/DOOR_ROT_ORG;
        float av_offset_z = av_offset.z;
 
        //  位置関係に応じた回転を計算
        DOOR_MOVE_TARGET = (av_offset_z/llFabs(av_offset_z))
                            *DOOR_DIV_EULER;
        state DoorOpen;
    }
}
 
state   DoorOpen {
    state_entry() {
        TIMER_COUNT = 0;
        llSetTimerEvent(0.05);
        llSetStatus(STATUS_PHANTOM, TRUE);
    }
 
    touch_start(integer total_number) {
        //  タッチされたらタイマー間隔を戻す
        llSetTimerEvent(0.05);
    }
 
    timer() {
        rotation rot;
        integer count = ++TIMER_COUNT;
 
        //  閉まる時用の変数補正
        if (TIMER_COUNT > TIMER_MAX) {
            count = 2*TIMER_MAX - count;
        }
 
        //  閉まり始めた時の処理
        if (TIMER_COUNT == TIMER_MAX + 1) {
            llSetStatus(STATUS_PHANTOM, TRUE);
            llSetTimerEvent(0.05);
        }
 
        //  現在のカウンタ変数から、角度を求める
        float x = PI_BY_TWO*count/(float)TIMER_MAX;
        float new_rot_euler = DOOR_MOVE_TARGET * llPow(llSin(x), 2.0);
        llRotLookAt(rot = (llEuler2Rot(<0.0,new_rot_euler,0.0>
            *DEG_TO_RAD))*DOOR_ROT_ORG,1.0,1.0);
 
        //  開ききったら止める
        if (TIMER_COUNT == TIMER_MAX) {
            //  タイマー間隔を切り替える
            llSetTimerEvent(DOOR_OPEN_SEC);
            llSleep(0.2);
            llSetStatus(STATUS_PHANTOM, FALSE);
            llSetStatus(STATUS_PHYSICS, TRUE);      //  角度反映処理
            llSetStatus(STATUS_PHYSICS, FALSE);     //  角度反映処理
            llSetRot(rot);
 
        //  閉まったら状態を変更してステート遷移
        } else if (TIMER_COUNT >= (TIMER_MAX*2)) {
            llSleep(0.2);
            llSetStatus(STATUS_PHYSICS, TRUE);      //  角度反映処理
            llSetStatus(STATUS_PHYSICS, FALSE);     //  角度反映処理
            llSetRot(DOOR_ROT_ORG);
            state DoorClose;            
        }
    }
 
    state_exit() {
        llSetStatus(STATUS_PHANTOM, FALSE);
        llSetTimerEvent(0.0);
    }
}

ドアの開閉の動きは、llRotLookAt関数を使用しています。

この関数を使用すると、オブジェクトを(ディレイなく)回転させることができます。(回転がllTargetOmegaと同じようにビューア側での処理になるため)
ただし、これまたllTargetOmegaと同じように、サーバー上でオブジェクトが回転しているわけではないため、開いた状態をシミュレータ側に反映させる処理が必要になります。


また、現在はドアの動きをsinの2乗(llPow(llSin(x), 2.0) (xは0~π/2)という計算式を使っていますが、ここを変更すると、開く動きを変えられます。


タイマーでドアの角度を処理していく部分は、いろいろな書き方が考えられる部分で、もっとうまいやり方がありそうです。「こうするのがいい」というのがあれば、是非教えてください!


関連エントリ(ドアシリーズ):


2009/07/05 11:41 add to hatena hatena detail hatena detail コメント