2008年12月31日水曜日

年末のご挨拶、そして12時間カウントダウンライブ!

とうとう大晦日になりましたね。
少し前に書きましたが、本当に今年はSLの中でも
多くの出会いと別れとイベントの数々があり、
充実した時間を過ごすことができました。
ここで改めてお世話になった皆さんに御礼申し上げます。
新年もどうぞよろしくお願い致します。

というわけで、2008年も残すところあと何時間となりましたが、
その最後の時間、正午より元旦の0時まで12時間、
カウントダウン・チャリティ・ライブを行います。
この年を振り返り、支えt下さった皆さんへの感謝をこめて、
そして同時に、現在も空爆が行われ、
多くの罪もない命、未来を担うはずの命が奪われていることに抗議し、
あらゆる人が幸せな人生を送れる、真に平和な世界を願い、
その願いを音楽で表現、世界に向けて演奏します。
年の瀬のお忙しい折とは存じますが、
12時間のうちどこかで聴きに来て頂けると、
そして平和への願いをわかちあって頂けるとありがたく存じます。

尚、最後の23:00からの時間帯では、
いつも支援して下さっている皆さんのご協力を得て、
Hiroshi Kumaki の人気の高い曲をカウントダウン方式で演奏します。
お気に入りの曲が何位で登場するか、
期待しながら聴いて頂けると嬉しいです。

今年最後のライブ、
どうぞよろしくお願いします。

■カウントダウン12時間チャリティ・ライブ
・日時:2008年12月31日(水)12:00〜24:00
・会場:Lifebound Cafe
 http://slurl.com/secondlife/Fanghammer/23/73/22/

※このライブで集まった募金は全て、世界平和のために活動しているRLの団体NPO 高麗に寄附されます。

2008年12月30日火曜日

スクリプトの話(最終回)〜シーンを切り替える「ステート」

今年も残すところあとわずかとなり、
今年中に片付けておかなければならないことを
バタバタと片付ける毎日ですが、
そう言えば、そう、
この連載も最終回を残すのみで止まっておりました。
というわけで、駆け足で幕を引きたいと思います。w

     *   *   *

さて、ダイアログを表示してボタンで選択させるなど、
処理を分岐する時に一番お世話になるのは「if文」ですね。
ただ、この「if文」が適しているのは、
「もし〜の時」の「〜」の部分がそれぞれ対応関係にある場合ですね。
例えば「1」と「1より大きい数の時」とか、
ステータスが「open」と「close」の時、
色が <1.0, 1.0, 1.0> と <0.0, 0.0, 0.0> の時、というように
比較対照が可能な場合です。

それでは、私の「世界時計HUD」のような場合はどうでしょう。
タッチするとダイアログが開き、
「Colors」と「Calculate」というボタンがあります。
「Colors」を選ぶと今度は色名のボタンが出て来て
どれかを選ぶと文字色が選んだ色に設定されます。
一方、「Calculate」を選ぶと、今度は都市の名前のボタンが現れ、
都市を選ぶと更に時刻を選ぶボタンが、
それも3ページにわたって表示され、
都市と時刻の選択の結果として、
その都市でその時間の時の世界の各都市の時刻の一覧が表示されます。





おわかりでしょうか?
「Colors」と「Calculate」は同じような選択ボタンでありながら、
その後の動きは全く違うのです。
これをもし「if文」を使って書いたとしたら
それはややこしいことになりますし、
予期しない変数の動きに翻弄されることになるかもしれません。
いっそのこと、「Colors」と「Calculate」それぞれを押した時、
全く別の処理の流れにするようにしてしまえば……。

こんな時便利なのが、「ステート」です。
ステートとは文字通りには「状態」ということです。
が、ここでは、この連載のはじめの方で
スクリプト=「台本」、
リンデンのスクリプトもアバターやオブジェクトを主人公とした
ドラマや劇だと考えればいいと書きましたが、
そういう意味では「ステート」は「シーン」、
「幕」とか「場面」に当たるものだと考えればいいでしょう。

ステートで一番有名なのが「default」というステートです。
defaultしかないスクリプトは
1場面だけでできた劇のようなものです。
しかし、多くの劇ではいくつかのシーンから構成され、
シーンが異なると主人公の行動も心の動きも変わったりします。
同じロミオも人生を憂う弱々青年ロミオだったり、
ジュリエットの心に光を点す王子様のような存在であったり、
ティボルトと剣で戦う時には勇敢な男であったりします。
同じように、リンデンのスクリプトも
「ステート」をいくつか設定することで、
複雑な動きをコントロールすることができるようになります。

例えば、上の「世界時計HUD」の例では、
「Colors」ボタンを押すと「色設定用のステート」に映り、
色の設定をし終わると、default ステートに戻って来ます。
同じように「Calculate」ボタンを押すと
「時刻計算用のステート」に移り、
都市と時刻を指定して世界各地の一覧を表示し、
ここで「OK」ボタンを押すと default に戻って来るのです。
実際の処理は複雑なので、イメージだけ書いておくと
こんな感じです。

(グローバル変数定義)

(時刻表示用の関数定義)

default {
  state_entry(){
    (初期設定の処理)
  )

  timer(){
    (時刻更新の処理)
  }


  touch_start(integer total_number) {
    (時計がタッチされた時の処理)
  }

  listen(integer channel, string name, key id, string message){
    if(message == "Colors") {
      state select_colors;
    }else if (message == "Calculate") {
      state select_calculate;
    }
  }
}

state select_colors {
  (「Colors」ボタンを選んだ時の処理)
}

state select_calculate {
  (「Calculate」ボタンを選んだ時の処理)
}

大体こんな感じです。
想像がおつきになるかと思いますが、
実際は select_colors のステートの中でも
select _calculate のステートの中でも
またダイアログを表示してボタンを選んで、という処理になりますので、
この中にもまた touch_start や listen があり、
ボタンの値によって「if文」で処理が分かれるので、
もっと複雑にはなります。
が、ステートを変えると便利なのは、
select_colors のステートにある時は、
select_calculate や default ステートの時のことを
全く考えずに、色設定のことに集中して考えられる点です。
これが「if文」だと、常に「そうでない場合はどうなるか」を
頭の片隅で考え続けながらプログラムを書いていかなければなりません。
これは、最初の頃に書いたように
プロでも間違いを犯しやすい状態と言えます。
ステートはリンデン・スクリプトの中でもとっつきにくい、
わかりにくいもののように思われていますが、
使いこなすと却って初心者のプログラミングを
楽にしてくれるものでもあるのです。
「if文」で条件分岐するのが難しい、と思ったら、
思い切って新しいステートを宣言して導入してみることを
ここではお薦めしておきたいと思います。

     *   *   *

というわけで、20回にわたって書いてきました「スクリプトの話」、
一応今回を以て終了とさせて戴きたいと思います。
スクリプトというものをプログラムと捉えるよりも、
アバターやオブジェクトが動き出すドラマ、物語の台本として考え、
そこで行き詰まった時にどうすればいいか、
そのコツのようなものを書いてきたつもりです。
これがスクリプトは難しい、どうもうまく動かないという方々の
ご参考に、少しでもなれば幸いです。
まだまだ本当はあれもこれも書いておいた方がいいのかな、
などと思うところはありますが、
とりあえずはここで止めておくことにしまして、
もし皆さんからのご意見、ご要望、ご質問などありましたら、
このSNSのメッセージ、またはIMでお寄せ頂ければ
またどこかで書かせて頂くこともあると思います。
その時はどうぞよろしくお願いします。

最後までお付き合い頂いた皆様、
本当にありがとうございました。
それでは、また!

2008年12月29日月曜日

今年最後の……

naturalway Flow さんの Music StarMine のショーを見に行ってきました。
以前より更にバージョンアップ、洗練されていて
本当に素敵な感動的な経験でした。
毎回言っていますが、これこそSLでしか経験できない、
心を豊かにしてくれる芸術だと思います。





目先にどんな厳しい現実があっても、
心豊かな経験、何かに感動したり、誰かの愛を感じたり
そういうことがあると人って先へ向かう力が生まれてきますよね。
もともと僕がSLを始めたのも、
そんな経験ができる空間創りが仮想世界からできるんではないか、
と考えたことからでした。
僕自身は今のところ音楽でそれをやろうとしていますが、
今年いろんなイベントを経験させて頂いて最大の成果は
このナチュさんの Music StarMine に出会えたことかもしれません。
ナチュさんもそういう豊かな空間創りをされてる方だと
そう思うのですね。

そんな意味でも、本当に今年は
いろんな場面でご一緒させて頂いて
ナチュさんにはありがとうの気持ちで一杯であります。

また来年の更なるご活躍を期待しつつ。。。

P.S. ショーの後のビンゴ大会も楽しかったですねー。
いろいろと楽しませてくれてありがとうございます。w

お正月支度

今日は久しぶりにRLでのんびりとしておりました。
これまで仕事場と家との往復ばかりで
「街」に出ることはほとんどありませんでしたが、
久しぶりにぶらぶらと出かけてみると人の多いこと!w
さすがに年末だなぁ、と改めて感じた次第でした。w

やっとのことでかなり長く伸びた髪を切って、
そのままぶらぶらとスーパーなどに入って
お正月用品を買ったりします。

そうそう!
というわけで、SLの僕のお店もお正月仕様にしました。w
注連縄とか門松とか、
こういうものを作ってくれる人がいてくれるのはありがたいですねー。




さぁて、RLでは引き続きお掃除お掃除。。。w

【長文】この1年……

昨晩のクリスマス・ライブ第3弾も無事終了し、
今年のミュージシャンとしての活動は
カウントダウンライブを残すのみとなりました。
自分としてはあんまり年末という感じはしていなかったのですが、
それでも昨晩は演奏しながらこの1年のことが去来しておりました。
というわけで、この1年をざっと振り返ってみたいと思います。w

     *   *   *

1月

年越しはSL内でした。
当時 StarTracker Island にあったLifebound Recordsの前で
大晦日の24:45〜元旦00:15にかけて
カウントダウン・ゲリラライブを敢行。
同じくスタトラで流れていたNiseko SL Stationの
kenmi Lomu さんの日の出の実況に感動。

お正月はタイガーカフェで過ごす。
初詣もタイガー神社で。w
Lifebound Records社屋改装。
スタトラで新春ライブ、この時新曲「Star Trackers」発表。
CD「Star Trackers」発売。
ソラマメに登録、書き始める。
SilkRoad で雪合戦に参加。
ひまわりさんのきり番を踏んでお礼にウサギのタイニーもらう。
(タイニー初トライw)
TOYOTA SIMオープン記念イベントの一環として
Niseko SL Stationの出張公演にけんみさんと参加。
この頃からPayPalを名乗る詐欺メールが出回り始める。

2月

Mirandirge の Lifebound Cafe でのライブ中に
SIM落ちを経験!
その後、自分だけ落ちて音楽だけが流れてるという
恥ずかしい経験も。^^;
シルクロードで節分の豆まき合戦に参加。
akinori Paine さんがメインランドの土地を購入したというので見に行く。
CD「ONE」発売。(pira Noel さんの水族館のテーマ曲)
「スタートラッカーラジオ」バージョンアップして発売。
SL内でバレンタインを経験。w
YouTubeにこれまで制作したビデオのアップを始める。
スタトラで初めて umanosuke Runo さんのライブを見る。
スタトラで初めて Sena Pinklady さんのステージを見る。(衝撃でした。w)

3月

ぴらさんのCosmic Tree Cafe スタトラ店オープン。
そこでの記念イベント、
せなさんの初ライブに燃える。(萌える?w)
Hachikoku yama に木を植えに行く。
Seel Circuit のレースを初めて観戦。
CD「こきりこ節/最上川舟唄」発売。
桜満開のスタトラでゲリラライブを連発。
この時にDJ MAO Lisle さんと知り合う。
この頃、スタトラ島閉鎖の通知が住民にあり、衝撃走る。
住民の移転が始まる。
フレンドの結婚式に初めて参列。いやー、きれいでした。w
3/31にけんみさんとのコラボでスタトラ最後のイベント
「ありがとうスタトラ島」を開催。
この時、新曲「Hello, My Friend〜きらきら堂のテーマ」発表。

4月

スタトラが閉鎖されたこともあり、
Lifebound Records をメインランド Fanghammer の
あきのりさんの土地に移転。
同時に Lifebound Cafe の移転も始める。
Surreality にせなさんのライブを見に行く。
Day of Remembrance に参加。
この時 jaynine Scarborough さんの歌に触れ、感動。
メインランド Mirandirge の土地を解約。

5月

Mirandirge にあった Lifebound Cafe、
Fanghammer でオープン。
これでものを売るお店とライブ会場が同じ場所に集まりました。
子供の日をタイガーカフェで過ごす。
この頃、Niseko SL Station 24時間ラジオの企画が本格化する。
シルクロード・ダンスホール・リニューアル記念のイベントで
シルクロード初のライブを行う。
Lifebound Records、Nag Mall と Heart Island Mall に出店。
この頃、せなさんのニセコ・ライブの企画が着々と進行、
その過程で naturalway Flow さんと知り合う。
RLで京都に出張。
京都のネットカフェからせなさんのニセコ・ライブを見る。
素敵なステージでした。w

6月

24時間ラジオのテーマ曲CD「Make the Miracle Happen」発売。
6月は殆どこの曲のためにスタジオ籠もりきりで
SLにはあまりインできてませんでした。
この頃、初めて携帯でSLにログイン。

7月

24時間ラジオの趣旨に賛同して17時間ライブを決行。
この日限定でせなさんのCD「Shining Rain」発売。
ラジオ最後のイベントにもせなさん、タッチさん、
かまいたちさんと共に出演。
タイガーカフェ1周年記念イベントで
再現された中野タイガーカフェの裏に
豊島Lifebound Cafeを再現、連日ライブを行う。
(あきのりさんが MagSL そっくりの土地を作ってくれたのです。
人呼んで「マネスル」。w)
シルクロードの仲間と The Eternal でのカタツムリレースに参加。

8月

Sea Island の夏祭り「海洋楽園2008」に出演。
ゲストにせなさんも登場。
この夏祭りで初めてナチュさんの Music StarMine を見て、感動。
スタトラと合併した Blue Ravine 撤退の知らせに衝撃。
KOGUMA SIMの北京五輪会場にそっくりなスタジアムで
長崎原爆慰霊・平和祈念コンサートを開催。
Lifebound Records と Lifebound Cafe に、
タイガーカフェや Nag Mall を回る Fanghammer ツアーライドを設置。
バーニングライフ参加への意志を固め、キャンプに応募。
この頃、スクリプトを使ったものづくりを集中的に始める。

9月

YouTube TV「Lifebound Vision」発売。
バーニングライフでのキャンプ決定通知があり、準備を始める。
この頃、Lifebound Records のある Fanghammer はコスモスで一杯に。
シルクロード・オープン一周年記念イベントにナチュさんと参加。
バーニングライフ始まる。フレンドではナチュさんも参加。
8日間連続ライブ、特に週末はまおさんのダンスパーティーも開催、
日本人外人入り乱れての大騒ぎとなる。
最後のイベントではナチュさんに会場を燃やしてもらい
炎の中でのダンスパーティーとなる。
9月末、ぴらさんの休業宣言に衝撃。
(そう言えば、MagSL Tokyo 2 閉鎖のニュースも
この頃飛び込んで来て、衝撃でした。
SLに登録して最初の頃うろうろしてたのは渋谷だったし、
土地を借りていたのも豊島区でしたからね。
そこでぴらさんやレオさんと知り合ったのでしたし。。。)
RLでは仕事のための仮住まいから自宅に引っ越し。
(自宅に引っ越し、って変な表現だな。w)

10月

ぴらさんの水族館の復活をあきのりさんと密かに計画。
「世界時計HUD」発売。
CD「シルクロード発売」
この頃から「スクリプトの話」の連載を始める。
Jabara Land での「セカフェス2008」に出演。
RLではいだきしんさん・高麗恵子さん
「高句麗伝説」アルメニア公演参加のためアルメニアに赴く。
帰国後、Dubai Japan にてコンサート、
アルメニアの印象を即興で表現、「Borders」となる。
ぴらさんの再建された水族館でデビュー1周年記念コンサート。
この頃、環境SIMについてのリンデンの発表に抗議殺到。
リンデンの発表を翻訳したり、フォーラムに書き込んだりする。
Expo Japan の SC Hall オープン記念で
まおさんのパーティーを見に行く。
そこで初めて genta Zabelin さんのDJに接し、驚嘆、感動。

11月

Neko Linkさんの「100人入っても落ちないSIMの作り方」聴講。
あいおい生命主催の「Heart-Life チャリティ・イベント」
ナチュさんと共に出演。
この時、初めてナチュさんのパーティクルと
僕の音楽とを合わせる、即興vs即興の試みを行う。
楽しかった。w
仕事で深夜遅い時間まで帰宅できない日々が続き、
月末に1:45からという時間に緊急告知、ゲリラライブを行う。
それでも人に集まって頂いたのには感謝感謝でした。
(この時、ナチュさんの「ゲリラすぎる」という言葉が生まれる。
個人的には流行語大賞をあげたいところ。w)

12月

引き続き仕事でインできない日々が続く。
YouTube にアルメニアの時と、社員旅行に行った時のビデオをアップ。
3回のクリスマスコンサートを SHINYAMISE、ぴらさんの水族館、
そして Expo Japan にて行う。
そして。。。
12/31正午より12時間カウントダウンライブを敢行予定。

     *   *   *

こうして書いてみると、どれもつい最近のことのようで
1年というのは早いものだなぁ、と思います。
しかしその短い中でも
仲のよかった人がSLから離れていったり、
SIMがなくなるというのが相次いだのも事実ですね。
スタトラは素晴らしいSIMだったので残念でしたが、
業界の草分けであるMagSL の Tokyo 2 の閉鎖には
SLをビジネスとして展開することの厳しさを思い知らされました。
そして先日のじゃぱらんどの突然の解約事件。。。
一方ではリンデンの商品構成や価格設定がころころ変わる現実もあり、
セカンドライフの世界共通のプラットフォームとしての真価が
これからますます試されることになりそうです。

そんな中で自分は何をやっていくのか。
今年は殆どミュージシャンとしてイベント出演ばかりでしたが、
来年はセカンドライフだからこそできることを
新しく展開していきたいと思っています。

長い日記になってしまいましたが、
最後に今年出会った方々、
いつもいろんな場面で助けて下さった皆さんに
改めて感謝申し上げたいと思います。
ありがとうございました。

2008年12月27日土曜日

今晩最後のクリスマス・コンサート!

日本という国がすごいなーと思うのは、
25日までクリスマス一色で、
どう考えてもこの国はキリスト教の国のように思えるのが、
その日を過ぎると夢であったかと思うくらいに
一瞬にしてその雰囲気はなくなって
門松やら何やらお正月の飾り付けに変わるところですね。w

そんな状況の中で、今晩最後のクリスマスコンサートをやります。w
欧米ではクリスマスは1月6日まで続くので
別にこの時期にやるのも不思議ではないんだけれども、
皆さんの日記でクリスマス終わった終わったという書き込みを見ると
やっぱり一般的にはそうなんだなぁ、と思ってしまいます。w

今晩のコンサートは、ボステラ社の主催で
UZグループのSIMを会場に行っている
一連のチャリティ・コンサートのシリーズで、
8月のKOGUMA、10月のDubai Japanに引き続き、
今回はExpo Japanの海に面した会場で行います。
そして、2度あることは3度ある、で、
今回も巨大なパイプオルガンを設置して演奏します。w

年末の、慌ただしくなりがちな週末のひとときを
是非音楽を聴きながらゆったりとお過ごし下さい。
皆さんのお越しをお待ちしています。w

・日時:2008年12月27日(土)22:00〜23:00
・会場:SC Hall Expo Japan
    http://slurl.com/secondlife/Expo%20Japan/211/157/27
・主催:ボステラ社

2008年12月26日金曜日

メリークリスマス!

相変わらず忙しい毎日が続いていますが、
寧ろ、SLでクリスマスらしい時を過ごさせて戴きました。
そう言えば、SLのログイン画面自体がクリスマス仕様で、
それも殆ど毎回変わっているような感じ。
リンデンさんもさすがにクリスマスには力が入りますね。w

そしてそして!
SLのフレンドの皆さんからは素敵なプレゼントが!
いやー、こういうの、思いがけないだけに嬉しいですね。
更には、あのトナクマさんが、
その存在とおなじく貴重な「2度目」の日記を書いているではないですか!

いやー、何にしてもめでたい!w
クリスマスはもともと冬至のお祭。
夜の一番長い日から、
光がより多く差してくる時、
生命が豊かに活動し出す春の訪れの時でもあります。
RLではやたらと暗い、厳しいニュースが多いですが、
それもこれから明るい時代になっていく兆しだと考えたいですね。

そんなこんな様々なことに思いを馳せながら
これからの1年、皆さんにとって素敵なものとなりますよう!
Merry Christmas!

2008年12月24日水曜日

クリスマスコンサート第3弾決定!

クリスマスチャリティーコンサートの第3弾が
たった今決定しました!

雪降るSHINYAMISEでの第1弾、
水族館での第2弾に続き、
今回は海に面したデッキにパイプオルガンを設置してのライブ。
更にバージョンアップしたステージを展開できればと思っています。
是非皆さんお誘い合わせの上お越し下さいね。w

■Hiroshi Kumaki Christmas Charity Concert III
・日時:2008年12月27日(土)22:00〜23:00
・会場:SC Hall Expo Japan
    http://slurl.com/secondlife/Expo%20Japan/211/157/27

今晩のライブは!

今晩、この後21:00より
ぴらさんの空中水族館でクリスマスチャリティーコンサートの
第2弾を行います。
多分、ぼくの下手な歌が聴けると思うので、
からかいたい人、怖いモノみたい人(?)
そして勿論音楽が好きな方、
是非是非お集まり下さい。w

そしてそして!
22:00からはあの naturalway Flow さんのMusic StarMineが
ニセコ3広場で行われます。

クリスマスの休日の夜を
是非お楽しみ下さい。

■Hiroshi Kumaki's Cosmic Tree Christmas
・日時:2008年12月23日(火・祝)21:00〜22:00
・会場:Aquarium Cosmic Tree
    http://slurl.com/secondlife/Exhara/31/198/478

■Music StarMine
・日時:2008年12月23日(火・祝)22:00〜22:45
・会場:ニセコ3広場
    http://slurl.com/secondlife/Niseko3/100/125/24

2008年12月21日日曜日

クリスマス仕様



ところで、わが Lifebound Cafe もクリスマス仕様になっております。
写真にある通り、ちょっとかわいいツリーと雪だるまがいます。
これは今年の10月、
アルメニアから帰ってきてからすぐのライブに来てくれた
バンキーニャさんというポルトガルの方から頂いたもの。
この方、かわいい系のアイテムをいろいろ作っている方で、
どことなくきらきら堂のレオさんに通じるところがあるような。。。w

しかし。。。
やや。。。
ツリーの上に変わったものが。。。



これはバンキーニャさんの作ではありません。
トナクマと言って最近 Fanghammer タイガーカフェあたりに出没する
クマの一種だそうです。
トナカイの鼻の部分を押すとクリスマスソングを歌ったりします。
走るときにはシャンシャンと鈴の音がしたりします。
そんなトナクマをご覧になりたい方は
是非タイガーカフェ&ライフバウンドカフェに
遊びに来て下さいね。w

クリスマス・チャリティ第1弾終了!

昨晩はクリスマス・チャリティコンサートの第1弾が
無事終了しました
実は、昨日になって機材のトラブルがあり、
直前まで焦りまくりだったというのが真相なのです。^^;

昨晩のライブはSHINYAMISEというSIMで
SilkRoad SIMののあさんからのご紹介で決まったもの。
会場が初めてなのは勿論、お客さんも殆ど新しい方々だったので
上記のような事情もあり、ホントドキドキだったのです。
が、会場がきれいなことや
お客さんに助けられて、何とか90分、
予定通り演奏を終えることができました。

いや、ホント、雪が降る中での野外コンサートは
なかなか雰囲気があってよかったです。
加えて、みなさんからたくさん募金して頂きました。
本当にありがとうございます。
このお金は大切に使わせて頂きますね。



というわけで、第2弾は23日の21:00から
ぴらさんの水族館で行います。
どうぞよろしくお願いします。w

2008年12月19日金曜日

今週末からのライブ予定!

ヒロシです。
ライブの予定、ようやく決まりつつあります。
まずは3本!
みなさん、遊びに来てねー。w

■Live in Shinyamise
・日時:2008年12月20日(土)22:30〜24:00
・会場:national 5560, SHINYAMISE
 http://slurl.com/secondlife/SHINYAMISE/58/39/25



■Cosmic Tree Christmas
・日時:2008年12月23日(火・祝)21:00〜22:00
・会場:Aquarium Cosmic Tree
 http://slurl.com/secondlife/Exhara/31/198/478
 あの、pira Noel さんの美しい水族館でのクリスマスコンサートです!

■カウントダウン12時間ライブ
・日時:2008年12月31日(水)12:00〜24:00
・会場:Lifebound Cafe
 http://slurl.com/secondlife/Fanghammer/23/73/22/

2008年12月16日火曜日

またまた予告! 12時間カウントダウンライブ!

予告ばっかりです。w
前にご案内したクリスマスコンサートは
まず一つが12/20(土)22:30から決まりそうです。
会場等はまた後ほど。。。
(一つは、ということは
いくつかやる予定ですよー。w)

そして!
年末はやっぱり何かやらかしたいですね、
というわけで、
のっぴきならない用事が入らない限りはやります。
やっぱり大晦日というと12時間でしょう、
(この日は大抵12チャンネルで12時間時代劇やりますよね。w)
というわけで、
12/31の正午から元旦の午前0時にかけて
12時間ライブを行います!

会場は多分ホームのLifebound Cafe。
お時間あったら遊びに来て下さいねー。w

2008年12月14日日曜日

またまた新曲です。

先日会社の仲間と浜名湖に行った時のものです。



2008年12月12日金曜日

予告! クリスマスコンサート!

ご無沙汰してますヒロシです。

まだ細かい日程等決まっていませんが、
12月20日〜12月25日の間でクリスマスコンサートやります。
会場は、多分、あそこになるかなぁ。。。w
あと、やはり多分、歌うことになるかなぁ。。。w



2008年12月8日月曜日

新曲発表!

今日は月に一度のネット音楽雑誌・月刊「DAICHI-大地-」の発売日。
殆どSLにもインする時間がないほどの忙しさの中で
何とか曲を間に合わせました。
今回発表したのは「Borders」、
アルメニアで行った時の曲で、
これまでに何度かライブでもやったものです。
アルメニアから帰ってきてすぐのライブでは
録音する時間がないのでとりあえずこんなイメージ、と
即興で演奏しましたが、
結局は今回録音に費やした時間はたったの40分。
勿論、即興の一発録りです。w
結局一緒じゃん。w

とは言え、ちゃんと編集してあるのと、
現地で録音されたアルメニアの楽器、ドゥドゥクの音も入ってます。
そしてそして、
この曲の映像版がYouTubeにアップされてます。
アルメニアの風景を是非楽しんで下さいね。



それでは、また。
近いうちにみなさんとまたSLで会えますように。。。

2008年11月28日金曜日

感謝祭と環境SIM

今日はアメリカでは感謝祭、Thanksgiving Day ですね。
この時期のアメリカのお祭と言うと
日本ではやたらとハロウィーンばかりが有名で
10月のSLはどこへ行ってもカボチャだらけでしたが、
感謝祭の方はあまり馴染みがないようですね。
このお祭に賭けるアメリカ人の情熱もまたすごいものがありまして、
例のバンコク空港の閉鎖の件でも、
自宅で感謝祭を祝えないじゃないか、と空港の係員に食ってかかる人の
映像がBBCだったかCNNだったかで出ていました。
それほどに大事な感謝祭。。。

リンデンの社長のMさんから感謝祭を祝う書き込みがありました。
http://blog.secondlife.com/2008/11/26/happy-thanksgiving-from-all-of-us-at-linden-lab/

うん。おめでとう。
だけどさ、Mさん、もっと他にみんなに言わなきゃいけないこと
あるんじゃないの? って言いたくなりますね。

例の、環境SIMの件、
11月13日のフォーラムにとうとうM社長が登場、
みんなの発言に感謝すると共に、
この件に関しては土地についての担当者である
ジャックが適任だと思うので、
彼から返事させます、との一言があり、
お、とうとうM社長現れたか!
ジャックの回答は? と待つまでもなく、
その1時間後にこのフォーラムはクローズします、
みなさんありがとうございました、とのロビンの発言と共に
あっけなく終わってしまいました。
Mさん、自分が行いたいのは対話だとして、
そのために舞台をフォーラムに移したのでしたが、
結局この一言だけでフォーラムを閉じてしまい、
対話も何もあったものではありませんでした。
しかもフォーラムなんか細かくチェックしてる人
そんなにいるとは思えないから、
何となく闇に葬られたような感じもしてます。

最終的に当初の予定通りの価格設定にすると決定するとしても、
それはそれで企業の判断なので構いませんが、
これだけ多くの住民を騒がせておいて
一言もないままに感謝祭おめでとうはないな、と思うのです。

最近のリンデンのブログはやたらと前向きな記事が多いのですが、
環境SIMの件について触れなければ触れないほど、
これらの記事がご機嫌とりのように見えて
何とも虚しく感じてしまうのは僕だけでしょうか?

本当に住民のみんなを大切に思っているのなら
社長としてちゃんとけじめをつけてほしいなぁ。

というわけで、Happy Thanksgiving!

2008年11月26日水曜日

スクリプトの話〜番外編・色の名前

ここ2回ほど、色を指定する話題を出しましたので
それに関連して色の話を。。。

僕は会社に勤めながら
一方ではWEBの制作なんかもしてるわけなんですが、
そうするとどうしても色を扱うことになるんですね。
で、例えば「白」を表現するのに、WEBであれば
「#FFFFFF」というコードを使いますし、
会社でエクセルのマクロを組む時なんか
(「あ〜、ヒロシ君、この管理表ね、
終わった課題の行はグレーにして
重要度が「高」のものはピンクになるようにしといてねー。」)
RGBで「255, 255, 255」と表現したりします。
これだけでも一杯一杯なのに、
リンデンスクリプトでは <1.0, 1.0, 1.0> というのを
覚えなきゃならなくなりました。
うわー、大変!
どれか一つに統一してくれ〜!

ところが、実はこの3つ、同じものだったのですね。
RGBというくらいで、光の3原色、
赤と緑と青をどのくらい混ぜるか、というのを表しています。
ご存知のように、赤と緑と青、全部を全て100%ずつ混ぜると
白になります。
そして、この3つ全てが全くない状態、
それが暗闇の黒、というわけですね。
と、すると、リンデンの <1.0, 1.0, 1.0> というのはわかりやすい。
最初、色はベクトル型、と聞いて、
数学の時間を思い出し、妙な矢印を思い出していた僕ですが、
何のことはない、この3つの数字は、赤、緑、青を
どのくらい混ぜるかを示しているだけですね。
<1.0, 1.0, 1.0> は全てが100%ということですから白、
そして、<0.0, 0.0, 0.0> は黒、というわけです。

となると、いわゆるRGBは?
WEBカラーのしくみは?

そう。まず、RGBの方は名前から言っても
リンデンと同じなのでしょう。
(255, 255, 255) は赤と緑と青のレベルだ。
でも何故255なのか?
これが0スタートということを考えると、
つまりは256の段階があることになり、、、
うーん、256とはいかにもコンピュータらしい数字だ。
そもそもこの数字は何なのか。。。

実はこの10進法の255を16進法で表すと「FF」なのです!
16進法で最大の数である「F」が2つつながった形、
つまりは16×16を表現しているわけですね。
ということは!
そう。
無意味に思えたWEBカラーの「#FFFFFF」も
何のことはない、「FF, FF, FF」だったのであり、
つまりは「255, 255, 255」であったわけなのです。
で、255では扱いにくいので、これを1.0に置き換えたのが
リンデンのスクリプトというわけです。
みんな同じ数字だったのだ!^^

と考えると、つまりこれらは全て、
赤と緑と青の組み合わせを示しているわけですから、
一々覚えたり、チャートを見たりしなくても
感覚的に、簡単に表記できるようになりますね。

つまり、「赤」は赤100%なので    <1.0, 0.0, 0.0>
「青」は青100%なので、      <0.0, 0.0, 1.0>
「緑」は緑100%なので、      <0.0, 1.0, 0.0>
「黄色」は赤と緑の組み合わせなので、<1.0, 1.0, 0.0>
「空色(アクア)」は緑と青で、   <0.0, 1.0, 1.0>
「赤紫」は赤と青で、        <1.0, 0.0, 1.0>
そして3色全開の白が         <1.0, 1.0, 1.0>
暗闇の黒は              <0.0, 0.0, 0.0>
というわけですね。

気づけば何てことないですし、
気づいている人には何を今更、という話でしょうが、
僕自身、これらの色を覚えられずに手こずりましたので、
敢えてここにメモとして残しておくことにします。
ご参考まで。w

スクリプトの話(19)〜リストを使おう

前回はバーニング・ライフで使った
色が順番に変わるオブジェクトを例に
周期的に状態を変える方法について考えました。
そこで今回はその続きのような感じで、
もう少し考えてみたいと思います。

同じバーニングライフの僕のキャンプには、
星をイメージしたパーティクルが飛び交っていて
これが一定時間が経つと色がランダムに変化するような
そんな仕掛けにしてありました。

ランダムと言えば、乱数を発生させる関数を持って来ればできそうですが、
ここで扱うのは色というベクトル型の変数であるし、
何よりランダムと言っても、とんでもない色ばかり出て来ても困るので、
出来れば指定した色の中でランダムに変わるのが望ましいのです。
そんな欲張りなことができるのか?
そう、出来れば好きな色のリストみたいのがあって、
その中で順番がメチャクチャに入れ替われば……。

と思ってはたと思いつきました。
そうです。リストです。
整数型や文字列型のように頻繁に出て来るわけではないので、
目立たない、ジミ〜な存在ですが、
リンデン・スクリプトにはリスト型という変数があるのです。
これはいろんなものをまとめて放り込んでおける
なかなか便利な変数なのです。

昨日と同じく、青、赤、黄に白を加えた4色の間で
ランダムに色を変化させるということにして、
この4色のリストを作りましょう。
宣言の方法も簡単です。
要素をブラケット(四角い括弧)で囲んで
カンマで区切って並べるだけです。

list lstColors = [ <0.0, 0.0, 1.0>, <1.0, 0.0, 0.0>, <1.0, 1.0, 1.0>,
  <1.0, 1.0, 1.0>];

今、lstColors というリスト変数の中は、青、赤、黄、白という色が
順番に並んでいます。
ここで関数の登場。その名もズバリ!

llListRandomize()

文字通り、リストをランダムにする関数です。w
ランダムにした後どうするか?
出来たリストから1番目の要素を取り出してあげればいいのです。
そして、その要素を取り出すのが、変数によって異なりますが、

llList2〜()

という関数で、今回はベクトル型なので、

llList2Vector()

を使います。
昨日のスクリプトを参考にして、
20秒毎に色をランダムに変化させるには次のようにします。

default {
  state_entry(){
  }

  touch_start(integer total_number){
    llSetTimerEvent(20);
  }

  timer(){
    llSetColor(llList2Vector(llListRandmize(lstColors), 0),
      ALL_SIDES);
  }
}

llList2Vector() の2番目の引数が
リストの何番目の値を取ってくるかを示すもので、
1番目は「0」になります。
関数が入れ子入れ子になっててややこしそうですが、
何ともシンプル、1行で終わってしまいました。w

ん? ということは?
昨日の順番に色が変わるスクリプトも
このリストを使えばすっきりするのでは?

i = 0;

default {
  state_entry(){
  }

  touch_start(integer total_number){
    llSetTimerEvent(20);
  }

  timer(){
    llSetColor(llList2Vector(lstColors, i), ALL_SIDES);
    i++;
    if (i >= llGetListLength(lstColors) - 1) {
      i = 0;
    }
  }
}

llGetListLength() は、リストの要素の個数を返す関数です。
例えば今回の場合、青、赤、黄、白の4個になります。
但し、リストの順番も、カウンター変数 i の値も
「0」からスタートしているので、1を引いているわけですが、
昨日の「if 文」がずらずらっと並んだものに比べると
何ともシンプルになりましたね。
カウンターの値を増やしながら、
そのカウンターの値と同じ順番の色を持って来い、
と言っているわけです。
そしてカウンターが要素の数だけ増えると
また0に戻してあげているのですね。

リストはこのように順番に処理させる時にも使えますし、
それから、先に書いたようにいろんな要素を入れられるので、
データベースのような使い方もできます。
例えば、昨日ご紹介した、仲間のブログを表示する
メッセージボードですが、
あれは実はセカンドライフの中から僕のRLのサイトにアクセスして、
次のようなCSVファイルを作らせています。

記事1のURL, 記事1のタイトル, 記事1の更新日
記事2のURL, 記事2のタイトル, 記事2の更新日
記事3のURL, 記事3のタイトル, 記事3の更新日……

もうお分かりですね?
タイマーでこのファイルを1行ずつ取ってくるのですが、
その時に、1行の3つの要素、
記事のURLとタイトルと更新日とをリストに入れるのです。
そしてそのリストからタイトルと更新日を取り出して表示に使い、
URLは取り出したらそれをタッチスクリプトに入れて、
メッセージボードをタッチするとその記事がブラウザで開くように
設定してあるわけです。



今のところ、説明が飛ばしすぎで分からない、という方は
ごめんなさい、あまり気にしなくてもいいです。
とにかく、リストを使うといろんな複雑な処理も
簡単に行えるようになるのだ、
というくらいお分かり頂ければ幸いです。

あまり馴染みのないリスト型ですが、
このように複雑な「if 文」を使わずに済んだりと
いろいろ便利な使い方ができるので、
皆さんもいろいろ研究してみられてはいかがでしょう?

それでは今日はこの辺で。

2008年11月25日火曜日

スクリプトの話(18)〜3つ以上の状態判定

いやぁ、この連載も随分間が空いてしまいました。
今回含めて残りあと3回なんですけどね、
一気に行けそうなのに、なかなか時間がとれないでいます。
まぁ、のんびり最後までお付き合い下さい。

     *   *   *

さて、前回は状態の判定をするのに
「1」と「0」を使う話をしました。
人間が物事を判断する基準は
大抵が「OK」か「NG」
「Yes」か「No」
「いい」か「悪い」
つまりは「真」か「偽」かに還元できるもので、
それだからこそ、コンピュータはその人間の真似をして
「1」と「0」との組み合わせだけで複雑な処理をするわけですね。
「1」と「0」の間で旗を上げ下げして処理を分岐するのは
いかにもコンピュータ・プログラムらしいとも言えますし、
同時に人間的と言えるのかもしれません。

ところで、物事の判断というのは
必ずしも二者択一であるとは限りません。
楽しいお昼休み、今日の昼食はどこにするか
ラーメンか牛丼かカレーか
はたまたイタリアンかフレンチか……?
結局は毎日のように行っていると飽きてしまうので、
これらの店に順繰りに行くかもしれません。w

今年のバーニングライフの
僕のキャンプにあった巨大なメッセージボードは、
実は20秒おきに色が変わる設定ができます。
確か7色くらいを設定して
順番に変わるようにしてあったのですが、
そこでどんな処理をしているかと言うと。。。



話を簡単にするために
色を青、赤、黄の3色に限定します。
そして、タッチするとタイマーがスタートするとしましょうか。

integer i = 0;

default {
  state_entry(){
  }

  touch_start(integer total_number){
    llSetTimerEvent(20);
  }

  timer(){
    if (i=0){
      llSetColor(<0.0, 0.0, 1.0>, ALL_SIDES);
    } else if (i = 1){
      llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES);
    } else if (i = 2){
      llSetColor(<1.0, 1.0, 0.0>, ALL_SIDES);
    }
    i++;
    if (i = 3) {
      i = 0;
    }
  }
}

実際にはもっと複雑ですが、
大体こんなイメージです。
大事なのは、変えて行きたい色の順番に数字をふっておいて、
変更するごとに1を足しているところです。
(そう。i++ は i = i + 1 のことですね。
こういう略した書き方をするとプログラムも
シンプルにすっきりとするので
じゃんじゃん使いましょう。w)
そして、順番の最後のところで
数字を振り出しの「0」に戻してあげてるところですね。
これでまた1...2...と数え上げて行き、
またまた最後の所で0に戻り、、、と繰り返していくわけです。

先に書いたお昼に何を食べるか、という件も、
これをカレンダーに仕込んでおけば、
昨日はカレーを食べたから今日はイタリアン、
なんて教えてくれるかもしれません。w

あ、実際にはこれの応用で、
僕の Lifebound Records 本店のメッセージボードが稼働しています。
仲間のブログの最新記事を順繰りに表示していますが、
記事と合わせてその方のアイコンに変わるようになっているのも
この仕掛けが使ってあるのです。



それでは今日はこの辺で。

2008年11月24日月曜日

ありがとうございます。

昨晩のリハビリライブは無事終了しましたのでご報告。
(本当に「無事」だったのか?w)
急なお知らせだったにも拘わらず
タイガーカフェの仲間を中心にたくさんの方々に来て頂き
感謝感謝のヒロシです。

本当はね、やると決めて日記で宣言するまでは
体もふにゃふにゃで、とても楽器なんか演奏するパワーも
人を相手にするエネルギーすら残っていなかったのですが、
いざやると決めて練習を始めたら
だんだん元気になってきて
そして皆さんにお会いして、演奏を進めていくうちに
どんどん元気を取り戻して来たのです。

やはり因果なミュージシャンですからねー、
楽器を弾いてこそ自分の表現ができるし
表現できたところで先へ向かえるというのがありますね。
それより何より、やはり気の合う仲間と一緒に時を過ごすことほど
元気になるものはないですね。
人の存在の力ってすごい、と思います。

そんなわけで、
本当に充実したひとときとなりました。
改めて、ありがとうございます。

2008年11月23日日曜日

今晩23時よりリハビリライブw

久しぶりに休日のヒロシです。
と言っても、疲れすぎていたのか
午後4時くらいまでグワぁ〜と寝ておりました。^^;

naturalway Flow さんとのコラボ以来
SLにも殆どインしておりませんでしたので
今日はリハビリを兼ねてひさびさに土曜日定例の
ライフバウンド・カフェでのライブを23時より行います。
お時間ある方は遊びに来て下さいね。

「ひさびさ」と書いたのだけれど、
11月8日のナチュさんとのコラボからは
まだ2週間しか経っていないのですね。
それがひと月に感じられるほどに
SL時間は早く流れていくようです。
それほどに濃く、深く、尊い、みなさんと過ごす一瞬一瞬。
そんなひとときをこれからも過ごせることを楽しみにしています。

それでは、また。

■Hireoshi Kumki Saturday Night Live
・日時:2008年11月22日(土)
・会場:Lifebound Cafe
http://slurl.com/secondlife/Fanghammer/23/73/22/

2008年11月10日月曜日

チャリティ・ライブ&コラボ無事終了!

今日は朝早くから仕事で、
日記書くのがメチャメチャ遅くなりました。
で、昨日のご報告です。w



昨晩は自分のライブの前に、同じ趣旨で演奏をされている
フォンタナ・オーケストラとGA-GOさんのライブを
ちょこっとだけ見に行きました。
フォンタナは知り合いの Ami Nicholls さんや taiji Lorefield さんが出てましたねー。
曲は僕が、多分一番大好きなベートーヴェンの五番。
その第一楽章が終わったところで僕自身も募金をして
GA-GOさんの会場へ移動。



GA-GOさんのステージは相変わらずかっこいいですねー。
見ててホントにおもしろい。
曲もいかにもライブ、って感じでいいしね。
ただ、自分のライブの準備があるので
こちらは2、3曲だけ聴いていよいよ会場へ。

僕らのライブはまずナチュさんの Music StarMine で始まり、
休憩を挟んで僕自身のライブとなります。
実を言うと、ナチュさんとのコラボのことで一杯一杯だったので、
自分のライブでやる曲は「Requiem」をやる以外には
全く考えてなかったんですね。^^;
というのも、これ、8分近いので、
30分の枠となると、、、他に何をやるか、難しいんです。w
でもね、みんなの前に出ると、
そしていろいろMCでしゃべったり時計見てるうちに
何やるか、決まってくるんですよ、これが。w

そして!
僕のライブが終わった後、太鼓を叩いてナチュさんを呼び出します。
ここからが本日のメイン・イベント。w
ナチュさんと僕と、お互いに相手の出してきたものに反応して
音やパーティクルを返していきます。
ちょっといたずらっ気を出してシンセで雷の音出したら、
ナチュさん、火で応えてくるし。w
おおー、さすがー、と思いつつも、
いつまでも雷やってるのはつまんないので、
きれいな曲に切り替えたら
これまたナチュさん、幻想的な絵を出してきます。
うーん、素晴らしい。
と、気持ちよくその世界に浸っていると
ナチュさん、飽きたのか、派手なものを出し始めました。
OK、OK、わかったわかった、というわけで、
僕も今度は元気なリズムの曲に切り替えます。。。

どこで始まる、というのは決めてましたが、
どこで終わる、というのは決めてなかったのです。w
RLのライブだったら目くばせしたり、
SLならIMしたいところですが、
いかんせん、両手が塞がってます。w
二人とも画面と音だけで合わせていったのでした。w

いやー、皆さんにも大変喜んで頂きましたが、
僕ら自身、やってて楽しかった。
ので、またどっかでやるかもです。
お楽しみに。w

喜んで頂けた、と言えば、
MCを通じて声かけした甲斐あって、
昨晩のライブで1万リンデン以上募金を頂きました。
募金下さった方、本当にありがとうございました。
1万リンデンと言えば、ポリオのワクチンで250人分、
結核のワクチンで500人分にも匹敵します。
これでたくさんの子供たちの命が助かるといいですね。
このチャリティー・イベント、僕はもう出ませんが、
11月15日までやっていますので、
ご関心がある方、好きなアーティストの方が出られる時は
是非是非ご参加下さいね。

それでは、今日はこの辺で。
ありがとうございました。

2008年11月9日日曜日

ネットからライブを聴けるようにしました。

ソラマメのページをちょこっとだけ変更しました。
サイドバーのビデオとCDの紹介の下に
ちいちゃーく「ネットライブはこちら」というリンクがあります。
クリックするとiTunesかWindows Media Playerが立ち上がるはずです。
これで、セカンドライフにインできない場合でも
僕のライブ演奏を聴くことができるというわけです。

勿論、演奏していない時にはソフトが立ち上がっても
何も聞こえてきません。^^;
なので、本当は放送中かどうか、表示したいのですが、
今のところまだいいアイデアが浮かばないので、
それでちょっと遠慮がちにちいちゃーく書いてます。w

というわけで、今晩は23:00よりライブです。
既にご案内した通りですが、
ナチュさんとのコラボがありますのでお楽しみに。
是非是非いらして下さいね。w

■Music StarMine with Hiroshi Kumaki
・日時:2008年11月8日(土)23:00〜24:30
・会場:SGLand2
 http://slurl.com/secondlife/SGLand/245/120/31

またまたリンデンへ一言(環境SIMについて)

さて、週末となり、ちょっと時間が出来たので、
例の環境SIMの件で、フォーラムで一言発言してきました。
例によって既に2,000件近くになっていましたし、
特に目立ったところがある発言でもないので、
果たしてどのくらい真剣にリンデンの人々に見て頂けるか
怪しいところではありますが。
以下、その内容を翻訳、転載しておきます。
恐らくは多くの方々が同様に感じておられるのではないでしょうか。
原文はこちらです。ログインが必要です。
http://forums.secondlife.com/showthread.php?p=2213691#post2213691

     *   *   *

確かに、現在の過負荷状態を解消するのに、商品のラインナップと価格設定を改訂するというのは解決策のひとつではあります。私はこの考えを基本的に支持するものですが、以下のナレッジベースにて公表された仕様は、大多数のセカンドライフ住人にとって、到底受け入れられるものではないのではないでしょうか。

http://forums.secondlife.com/showthread.php?p=2208520#post2208520

環境SIMの価格が通常SIMの4分の1に設定されているのであれば、誰もが通常SIMに対して4分の1の性能を期待するのではないでしょうか。しかしながら、上記のページに載っている環境SIMの仕様では、プリムは通常SIMの20分の1、アバターは10分の1となっています。これでは、結局のところリンデン・ラボが考えているのはこれまでと同じ1/4の費用を受け取りながら、実際には1つのCPUで10個の環境SIMを稼働させることではないかと疑わざるを得ません。これは「ホームステッド」についても同じです。通常SIMの1/3の価格に対して、プリムは1/4、アバターは1/5です。現在、きっとリンデン・ラボのスタッフはスクリプトやストリーミングといった事象がネットワークに与える影響について調査、計算をしており、それに時間がかかることはわかっていますが、スクリプトの制限について発表される時、それもまた私たちをがっかりさせるような数字なのではないかと恐れています。

このような程度の仕様で、一体私たちに何をしろと言うのでしょう? 私たちにできるのはせいぜい、リンデン・ラボが期待しているそのままに、海や森林を作って置いておくことくらいでしょう。現在環境SIMを規定通りに軽く使用し、必要であれば制限もやむなしとしたオーナーの方々が今回の改訂に満足して喜ぶと、本当にMさんやジャックさんやその他のリンデン・ラボのみなさんは思っていらっしゃるのでしょうか? いえ、これは改訂ではありません。改悪です。

そう、今回の変更はサービスの低下または値上げというように私には思えます。もしリンデン・ラボが環境SIMに対しUS$75.00を設定するのであれば、環境SIMには1/4の性能を持たせるべきですし、ホームステッドがUS$125.00なら1/3は当然でしょう。でなければ、みんな環境SIMなんか捨ててしまって、セカンドライフから去っていくでしょう。

今年の初めに環境SIMの価格改定が行われた時に、リンデン・ラボはセカンドライフの世界がより拡大していくことを望んでいたはずです。が、今回の価格改定を見ていると、どうも同社は今やセカンドライフを小さなものに縮小したいと考えているとしか思えません。

この投稿の冒頭で書いたように、SIMを3つのレベルにするという考え自体はいいと考えています。しかし、環境SIMとホームステッドの価格はその機能に見合っていません。リンデン・ラボが価格と機能レベルを見直し、全ての住人が納得する決断を最終的に下されることを期待します。

ありがとうございます。

     *   *   *

因みに、この投稿についてはレスがつきました。
一体こんな仕様の環境SIMで何をしろと言うの? という所を引用し、
「そうおっしゃる方はメインランドにお越し下さい。きっと羊のように大切に飼ってくれますよ。」
というコメントでした。^^;
更にそのコメントにもレスがつき、
「うん、だんだん僕もこの『飼われている』という状態に
もういい加減嫌気がさしてきたよ。
そろそろ群れから飛び出て、囲い(つまりグリッド)から
逃げ出すかな。」
という始末。
更に元の人がレスして。
「そうやってやめる人がいるから
リンデンは都合の悪い歴史を消すことができるんだよ。
で、また何も知らない新しい人がやって来る。。。」

まぁ、本当にみんなイラついているようですね。

例によってあまりに数が多いので
投稿全部を読んだわけではないですが、
全体としては、私と同じく、
使用レベルに応じてSIMの価格、機能を分けること自体はいいが、
よくよく見ると今回の提案の内容は前のものよりひどい、
どうしても現在の使用レベルの環境SIMはUS$125.00でなければならず、
現在の価格を維持したい人は機能がメチャメチャ制限されます、
という内容ではないか! と不満に思っている方が多いようです。

私も、フルに機能を使いたいなら通常SIMで、という考えは
よくわかるのですが、そしてそれは当然と思いますが、
今回の発表による価格と機能はあまりにもバランスが悪いので
一言言わせて頂いた次第でした。
コメントではなく、みんなと会話がしたいとおっしゃっいたM社長、
なかなかフォーラムに登場しませんが、
こうしたみんなの意見を聴いてどうされるおつもりなのでしょう?

2008年11月8日土曜日

【緊急告知】今晩もチャリティ・ライブ!〜そして新しい試み

ヒロシです。
今晩は、23:00から naturalway Flow さんとのコラボで
チャリティ・イベントに参加します。



これはあいおい生命保険株式会社が主催している
「Heart-Lifeチャリティ・イベント」の一環で、
10月11日〜11月15日まで行われる一連のイベントで集まった寄付金に
同額の寄付金をあいおい生命がプラス、
これを日本円にして
認定NPO「世界の子どもにワクチンを 日本委員会(JCV)」に
寄附するという趣旨のものです。
合計9つのSIMで36日間にわたって開催されるという
何とも規模の大きなイベントですね。

今晩は何とですねー、
次のように豪華なライブが3つもあるのですよ。w

■GA-GOチャリティ・ライブ
・日時:2008年11月8日(土)22:00〜23:00
・会場:IOIisland at 特設ライブステージ
 http://slurl.com/secondlife/IOIisland/26/41/32

■フォンタナ・オーケストラ・クラシック・コンサート
・日時:2008年11月8日(土)22:00〜23:00
・会場:waseda at waseda講堂
 http://slurl.com/secondlife/waseda/161/116/27

■Music StarMine with Hiroshi Kumaki
・日時:2008年11月8日(土)23:00〜24:30
・会場:SGLand2
 http://slurl.com/secondlife/SGLand/245/120/31

そう!
あの GAGO さんに、フォンタナ・オーケストラも登場!
どっちも見たいですねー。
ガーゴさんのステージは盛り上がるだろうし、
オーケストラにはタイガーカフェでおなじみの
Nada Dryke さんも出演されるし。。。
そう言えばなださんはこのイベントのチャリティ・モールに
Tabby Cat として服のお店も出店されているので
こちらも必見です。

そして!
ガーゴさんやフォンタナさんが終わった後に、
SLでしか見られないナチュさんの幻想的な
Music StarMine のショーが行われます。
みんなが花火に見とれ、音楽にうっとりしているところへ
のこのことヒロシが登場。w
しばらくソロで演奏した後、
終盤、ナチュさんの花火と僕の演奏のコラボになります。

このコラボレーションは完全に即興で行われるもので、
僕はナチュさんの花火を見て感じたことを音にしていきますが、
ナチュさんも僕の音を聴いて次々に出してくることになっていて、
お互いがお互いに影響し合いながら
恐らくは本日限りの、二度と再現できない
スペシャルなショーになると思います。
これは絶対に見逃せませんよ。^^
お楽しみに!

スクリプトの話(17)〜「旗を立てる」・状態の判定

さて、私のSL内の(一応)会社である Lifebound Records には
写真に見られるように左右にスライドして開く自動ドアがあります。
この自動ドアは私が豊島区で初めてお店を作った時に
初めて取り組んだスクリプトものでもあります。
豊島区からスタトラ、メインランドと移ってきて
再びこのお店に設置することにしたのです。



ところで、この自動ドア、
よくよく考えると不思議ですよね。
左右に開く、右側の方に焦点を当てて考えると、
開く時には元の位置から右方向に移動してしまうわけです。
そして閉まる時には開いた場所から今度は左方向に移動して
元の位置に戻ってくることになります。
左側のドアはこの逆の動きになりますね。

ということは、このドアは、右のも左のも、
今自分がどこにいて、次のイベント
(人が近づくとか遠のくとかーーセンサー・イベントですね)
が起こると、右に動いたらいいのか、左に動いたらいいのか
知っていることになります。
言い換えれば、今ドアが開いた状態なのか、閉じている状態なのかを
それぞれのドアは知っている、ということになりますね。

どうやったらこれら左右のドア・オブジェクトに
開いているとか閉じているということを教えられるでしょう?

こういう時、オブジェクトの状態を表す変数を用意してあげます。
integer(整数)型で、普通の状態、つまり閉じている時は0,
変化があった時、つまり開いた時の状態を1として、
名前は例えば isOpen、つまり「開いている」という名前にしましょう。
開いていれば isOpen = 1、
閉じていれば isOpen = 0
というわけです。

ここでドアを開くようにオブジェクトを動かす関数を openDoor() ,
閉じるように動かす関数を closeDoor() とすると、

integer isOpen = 0

if (isOpen = 0) {
  openDoor();
  isOpen = 1;
} else if (isOpen = 1) {
  closeDoor();
  isOpen = 0;
}

実際にはもっと複雑な処理になりますが、
イメージはこんな感じです。
初期状態としては、ドアは閉まっているわけですから、
isOpen には「0」が代入されています。
そして、「if文」では、
isOpen が「0」、つまり閉じている時は
ドアが開く処理をして、ここが大事なのですが、
処理した後に、isOpen に「1」を代入、
つまり、ドアが開いているという状態に変えています。
この状態で再びイベントが発生すると、
今度は isOpen = 1 となっているので、
ドアを閉じる処理が走り、
そしてその処理が終わると今度は isOpen に「0」を代入、
ドアが閉じている状態に変化させるわけです。

このように何かの状態を判断させなければならないような時、
integer型の変数を用意して「1」と「0」を代入して、
現在のその変数の値を見て処理を分岐させるのはよくあるやり方です。
ちょうどスイッチの「ON/OFF」のような働きをしているわけですね。
こういうはたらきの変数をプログラムの世界で何と言っているのか
私はよく知らないのですが、
元々データベースの世界から入った私にとっては
「フラグ」という表現がぴったりしているように感じます。

「フラグ」というのは勿論英語の「flag」、つまり「旗」のことです。
変化があった時にパッと旗を上げて注意を促すような感じで、
実際にデータベース用のブラウザでデータベースの状態を見ていると、
注意すべき項目のところに、ピコンと真っ直ぐに旗を立てたように
「1」とデータが入っているのです。

プログラムの世界でも同じで、
何か変化があった時、状態が変わった時は
この旗をピコンと上げる変数を用意してあげればいいというわけです。
状態の違いで処理を変えたい場合は
是非この旗を上げるような変数を使ってみて下さい。
きっといろんな場面で便利ですよ。w

2008年11月7日金曜日

SIMのラインナップ比較表

先のM・リンデン社長の記事にあったナレッジベースから
今提案されている商品のラインナップについて
比較表を翻訳、転載しておきます。
ご参考まで。



【翻訳】セカンドライフ住民の皆様への手紙(長文)

RLの仕事の関係で大変遅くなりました。
既にいろんな方々が書いていらっしゃるでしょうから
情報としては古くなってしまったかと思いますが、
これまで環境SIMの問題についてはずっと訳して参りましたので、
改めてここに本日のM・リンデンさんの発表の全文を
翻訳しておきたいと思います。
例によって非公式な翻訳であり、
誤訳等の文責は全てHiroshi Kumakiに帰するものです。
原文はこちら。
http://blog.secondlife.com/2008/11/05/a-letter-to-second-life-residents/#more-2778

     *   *   *

M・リンデンです。私共の環境SIMについての発表について、ご心配や建設的なご提案を頂いた皆様に深く感謝したいと思います。私共は皆様のご意見に対して慎重に耳を傾け、最初に発表した計画に修正を加えることと致しました。

ここで、方針の修正内容に入る前に、私共がどのような決断をしたかについて述べ、そして皆様からのご意見を要約してお伝えしたいと思います。環境SIMが導入された当初は、リンデン・ラボはプライベートSIMのオーナーに対して、オープンな場所である環境SIMをご自身のSIMに追加する機会を提供しましたが、これは海や公園といった、軽い使用法に限ってのことでした。が、この時私共は環境SIMをガチガチに作り込んで、細かい、量的な制限を設けることは致しませんでした。何故でしょう? それは単に次の2つの理由によります。

1. 皆さんもよくご存知のように、あるSIMのパフォーマンス(性能)というものは多くの要因によって影響を受けていて、それもそれぞれーーつまり、スクリプト、プリム、アバター、メディアといったそれぞれーーが互いに複雑に関係しながら影響を受けているのです。これらSIMのパフォーマンスに影響するあらゆる変数に対して制限を加えることで、皆さんのセカンドライフでの経験や創造性までもが制限されてしまうようなことはしたくなかったのです。それはリンデン・ラボは常に自由な形態をとってきており、セカンドライフの住民の皆さんが本来お持ちの善意というものを信じているからであり、また、制限を加え、それが確実に実行されるようにするにはそのための要員を雇わなければならないからです。

2. この環境SIMという商品を、私共は早く世に出したいと思っておりました。環境SIMはあっという間に広がりました。海を追加したプライベートSIMのオーナーもいらっしゃいますし、公園を作った方もいらっしゃいます。それは私共が意図した通りの使い方でした。が、多くの方々が環境SIMに作ったのは巨大な帝国でした。豪華壮麗な建物、美しいレンタル用の土地や建物、その他大きな建造物などを作ったのです。環境SIMのオーナーは他のオーナーの方々と同じCPUに同居している状態ですので、もしあるオーナーが海として使っている一方で別のオーナーが遊園地のような場所として使うとしたら、共同で使用しているこのCPUは過負荷状態となってしまいます。本来意図された通りの方法で使用している海を愛するオーナーがその影響を被ってしまうことになるのです。ここにおいて私共はこうした問題を解決するために今回この問題に立ち入ることにしたのです。しかし、セカンドライフはこうした問題一つ一つに対応するには、あまりにも大きくなり過ぎていたのです。

それは多くの皆様との会話、皆様からのご意見、ノートカード、メール、お電話を通して、その良い点悪い点を整理していく過程の中で、皆さんが発信しておられるご意見の内容は多岐にわたるものの、その中には私共が実際に対応可能な3つの一貫したテーマを見出すことができました。

1. 海や公園といった、本来意図された通りに環境SIMをご利用になられている方々は現在の価格の維持を求めており、その使用法について明示的に制限が加えられることに対しては同意しても構わないと感じていらっしゃるということ。

2. 環境SIMを使用して商業行為をされている方、レンタル用に貸し出していらっしゃる方、グループ活動をそこでされていらっしゃる方々については、確かに本来環境SIMに想定されている以上の作り込みをしていることは認めるものの、大きな、しかも急激な価格の上昇に対応することは不可能であり、経営的に打撃を受けてしまうということ。

3. 中には海のように何もないところではなく、しかし遊園地のように重い所でもなく、その中間のような場所を作っていらっしゃる方は、「通常SIMのライト版」のようなものを求めていらっしゃいます。通常のSIMよりは安い価格帯で、しかもある程度のものがビルドできるようなSIMをです。

リンデン・ラボの歴史の中で、私共は3種類の土地をリリースしてきました。メインランド、プライベートSIM、そして環境SIMです。セカンドライフの他の要因がやたらと複雑であるため、価格設定に関しては複雑なシステムにすることを私共はしたくありませんでした。しかし、今や、よりフレキシブルに需要に対応するために、商品のラインナップと価格体系を見直さなければならないことは明白となりました。

1. 「環境SIM」は現在の価格のまま提供することと致します。但し、森や海といった、本来想定された用途に限ってのものとします。適正にご使用頂くために、これには技術的な制限を加えさせて頂くこととします。まず最初にアバター数、プリム数の制限から始めて、最終的にはそこで行われるイベントや広告、スクリプトなどを制限していきます。引き続き「環境SIM」をご利用になられたい方は、現行のUS$75.00/月の料金となります。但し、そのようになさりたい旨、コンシエルジュ・チームにご連絡頂く必要があります。

2. このような「環境SIM」以上のものを求める皆さんには「ホームステッド」と呼ばれる新しいラインナップのSIMに移行して頂くことをお勧めしたいと思います。これは、少ない人数に対して土地をレンタルすることが可能な程度の軽い使用目的のためのSIMです。現在「環境SIM」をお持ちのオーナーの方々に対し、半年の移行期間を設けてこの新しいSIMの価格を適用したいと考えています。この新しい「ホームステッド」もまた、技術的な制限が、まずアバター数とプリム数に、最終的にスクリプトに対して加えられます。

※2009年1月5日ーー規定に沿わない使用法をされている「環境SIM」はこの日を以て「ホームステッド」へと移行し、毎月の維持費もUS$75.00からUS$95.00に引き上げられます。この新しい「ホームステッド」については、資格を持つ教育者の方々には割引価格での提供を致します。割引率は通常のSIMと同じく約30%です。

※2009年7月ーー「ホームステッド」の維持費は月US$95.00からUS$125.00に引き上げられます。

これらの変更についての詳しい情報は、以下のナリッジベースをご覧下さい。
http://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5650

私共はこれが一番公正な方法だと考えています。ジャックと私は、今日は一日中フォーラムにログインして皆さんとこのことについて話し合ってきました。このブログの記事については、コメントの書き込みは一切受け付けません。それは、皆さんとの対話を制限したり、皆さんの自由な表現を制限したりするためでは勿論ありません。私共は住民の皆さんと会話したいと思っているのであり、フォーラムにはログインが必要だからです。これは大きな発表を行い、その事を先に進めるのに私共がとっている方針なのです。まずブログで案内する。そしてフォーラムで意見を言い、互いに話し合う、ということです。

こうした物事の進め方で私が学んだ、そして他のスタッフが改めて気づかされたことがひとつあります。それは、私共の今があるのは、いつも気持ちをひとつにし、熱心に取り組んで下さる住民の皆さんのおかげだということです。であればこそ、私共は皆さんを、できるだけ早い段階で対話に参加して頂きたい、最終的に結論を下すのはそれからにしたいと思うのです。ジャックが本件について発表を行ってから頂いたご意見はどれも実り多きものであり、そしてその殆どが、本当に、本当に建設的なものでした。セカンドライフは1対1の会話が困難な規模となっており、フォーラムも完全に対話が成立する場としては不十分なものではあるでしょう。また、私共の営業時間が不十分であるということもあるでしょう。皆さんに早い段階で対話に参加して頂ける方法についていくつか考えがあり、近々このブログとフォーラムでの会話の中でお伝えすることになると思います。

この考えについて、簡単にまとめておきたいと思います。この1年、住民の皆さんの関心事は専らセカンドライフ・プラットフォームの安定性でした。それは多くの人々の、スタッフだけではなく住民の皆さんも含めた多くの人々の努力の結果、私共は大きな躍進を遂げることができ、このことは多くの資料で裏付けることができます。クラッシュ率も低下しました。それも劇的に。これ以上何を言うことがあるでしょう? 今回の価格改定の件が出るまで、私共は顧客満足の点で好調であり、皆さんは私共がこれまで行ってきた改善についてよくわかって下さり、評価して頂いていると思っておりました。安定性の改善に関しての飛躍的成果は特筆すべきものであり、そのことは今年に入ってからセカンドライフ内の土地が大いに増加したことからもわかります。そして、その土地の増加の大部分は環境SIMによってもたらされたものなのです。初期の想定では土地は大きく広げていくものの、それに対する負荷はより低い比率で、と考えられていたのです。が、環境SIMは多くの場合、スクリプトやアバターによって過負荷状態となり、これまで成し遂げた飛躍的な安定性と同じくらいの予期せぬ過負荷状態を抱え込んでしまうこととなってしまいました。私共はセカンドライフを世界一の、最も優れた仮想世界のプラットフォームとすることにその使命を賭けております。そして事実私共は日々大きく躍進しているのです。継続的な安定性の向上というお約束を私共はこれまで実現し、証明して参りました。どんな予期せぬ拡大に直面しても、です。

フォーラムにて、皆さんからのご意見を伺えるのを楽しみにしています。
http://forums.secondlife.com/showthread.php?p=2208520#post2208520

皆さんの率直なご意見、辛抱強さ、抑制のきいた態度、そしてリンデン・ラボ、セカンドライフ全般に対して喜んで協力されようとする姿勢に感謝しております。セカンドライフは驚くべき存在です。それは、リンデン・ラボが時に不完全ながらも、常にその住民の皆さんと一緒になって、みんなが心から愛して病まない現実の世界以上に大きな、素晴らしい世界を作り上げているからなのです。

ありがとうございます。

2008年11月5日
M・リンデン


2008年11月6日木曜日

スクリプトの話(16)〜宿題の答え=発想の転換を

さて、既に15回を越えましたこの稿も、
今回からはスクリプトを書く時のヒントのようなものについて
触れていってみたいと思います。
そのまずは一回目。。。

前回変数の初期化について書いた時に、
僕自身が作った「世界時計HUD」の例を挙げました。
これは写真にあるように、画面右上に世界の時間を表示するもの。
時間の下にあるバーをクリックして文字色を変えたり、
時間の計算をしたりすることができます。



前回話題にしたのは、
折角お好みの色に変更しても、
次にログインした時に文字色が初期化されてしまうので、
最後に設定された色を覚えさせることはできないか、
というものでした。
さて、どうするか?

実は、前回これについては別の機会に、と書いたのは
記事自体が長くなったからというのもありますが、
実は、私自身、どういう処理をしたのか
全く覚えていなかったからです。^^;
そこで実際にスクリプトを見てみましたが、
それでも暫くは意味不明でした。w
そして、あっ、と思い出しました。

最後にどんな色に設定したか、
それをどうやって覚えさせるか、
そしてそれを起動時に取得するか。
ノートカードを利用することは考えられますが、
あんまり複雑は処理はしたくありません。
そこで、僕はじーっとこのHUDとにらめっこしたのです。

もう一度このHUDの写真をよく見て下さい。
実は、こうやって時間を並べるのに使っているのは
何のことはない、例の llSetText() なのです。
そう、フローティング・テキスト、
で、何の上にフロートしているかというと、
設定用のボタンとなっている下のバーですね。
ということは、そう、
このバーは HUD なので平面ですが、
実際にはブロック・オブジェクトなんです。

と、ここまで書けばおわかりでしょうか。
文字色の設定をする時に、このブロックも
同じ色に設定しているのです。
そして、このブロックの色は一旦設定されたら
起動時もその色のままのはずです。
私が state_entry() で書いている処理は次の1行でした。

  llGetColor(4);

これはそのオブジェクトのかっこ内の番号で示された面の
色を取得する関数です。
ここで4番というのがこのHUDのバーとなっている面の番号です。
文字の色そのものは保存できないので、
このオブジェクトの色をまず取得し、
その色を今度は文字の色として
設定し直すということをやっていました。
これであれば、敢えて色を保存したり
それを呼び出したりなんて複雑な処理はいらなくなりますね。
自動的に残ってしまっている値を
そのまま使えばよかったわけです。
ただ、ここで、
文字そのものに拘らず、同じ色を使っているオブジェクトに
視点を移したのが解決の鍵となりました。

リンデンのスクリプトに用意された関数は、
例えばエクセルの関数などに比べると随分少ない気がします。
例えば llSet〜 (値設定用の関数)はあるのに
セットとなるべき llGet〜(値取得用の関数)がないとか、その逆とか、
えー、何でこれないの〜? と驚くこともしばしばです。
基本的にはなかったらできません。
が、そこでないからできない、と諦めるかどうか。
何か他の方法はないか、
処理したい対象(今回の場合文字の色)を直接扱うのが無理なら、
他のもの(今回の場合バーのオブジェクト)を処理することで
回り道しながらでも実現できるかもしれません。
場合によっては、SLの中から抜け出して、
自分のWebサーバで処理させてもう一度SLに返すといったような
荒技まで考える必要があるかもしれません。

明らかに直球ではムリ!
そんな時こそ苦しみながらも
何か手はないかと考えるのが楽しみになってきますね。
そして、自分でも信じられないような解決を見いだした時の
嬉しさといったら!

。。。なんだけど、
自分がやったことを完全に忘れていたヒロシでした。w
今回はこの辺で。

     *   *   *

P.S. オブジェクトに色をつけたり、
テクスチャを貼ったりする時に、
面を指定したい時がありますね。
関数としては、

  llGetColor()/llSetColor()
  llGetTexture()/llSetTexture()
  llGetPrimitiveParams()/llSetPrimitiveParams()

などがあります。
が、自分が設定したい面が何番になるのか、
LSL Portal の「Face」の項を見てもよくわかりません。
こんな時は編集モードで、「テクスチャを選択」の状態で、
指定したい面を選択、丸に十字が出ているのを確認します。
そして、メニューから
Advance > Rendering > Selected Texture Info を選ぶか
ctrl + alt + shift + T(Macの方は cmd + option + shift + T)
と操作すると、画面左下に2行の情報が表示されます。
その最後の「face X」の「X」が面の番号ということになります。




大抵のスクリプトの入門書などでは
面の値に ALL_SIDES つまり全ての面を設定しているものが多く、
私自身面番号の指定で苦労したので
ここに補足として書いておきます。

【翻訳】明日、環境SIMについての発表を致します。

環境SIMの件について
本日ジャック・リンデンさんから新しい記事がアップされました。
この件について気を揉んでいらっしゃる方も多いと思いますので、
ここに全文を翻訳しておきます。
例によって非公式の翻訳ですので
誤訳等の文責は全てHiroshi Kumakiにあります。
また、原文はこちらです。
http://blog.secondlife.com/2008/11/04/openspace-announcement-due-tomorrow/

     *   *   *

先週の間ずっと、私共は皆さんのご意見に耳を傾け、最初に発表した内容について何度も検討を加えました。今回のこの記事は、私共の考えが皆さんのそれとより近づけることができるようなタイミングになってきたということをお伝えするだけのものです。

明日、M・リンデンがこのブログに記事を投稿するでしょう。この記事は皆さんから頂いた本当にたくさんのご意見に対するお返事であると同時に、環境SIMの件に関して私共がどのように事を進めようとしているか、詳しくお伝えするものになるはずです。

このMの記事が発表された直後に、私共はフォーラムにて新しいスレッドを立て、そこで皆さんからのご質問に出来うる限りお答えしていくつもりです。この件に関し、皆さんが今か今かと新しい情報を待っていらっしゃるということを承知しております。その待ちももうすぐ終わりですと、皆さんにお伝えしたいのが今の私の気持ちです。

2008年11月4日
ジャック・リンデン


2008年11月5日水曜日

【技術情報】惜しい! Chrome Mac版!

以前この日記でも絶賛したGoogle Chromeですが、
そのMac版とも言えるものが日本語版でリリースされましたね!
「とも言える」と書いたのは
本家Googleからのリリースではないからです。

これはCodeWeaverという会社が
WindowsアプリをLinuxやMacで動かすための
Wineという技術を発表していて、
その技術を使ってGoogle ChromeをLinuxやMacで動くように
パッケージ化したもの。
それを更に日本のネットジャパンという会社が
日本語化してのリリースとなったものです。
パッケージとしての名称は CorssOver Chromium。

実は日本語版はダウンロードページに
ブックマークの保存ができない旨書いてあったので、
えー、っとか思って英語版も併せてダウンロードして
機能比較してみました。

確かに、日本語版はブックマークが保存できないですね。^^;
登録はできるんだけれども、再起動すると消えてます。><
更に、Google Chrome の最大の売りと僕が考えている、
新しいタブを開いた時に表示されるはずの
最近開いたサイトのサムネールも何故か表示されません。><
フラッシュ・プラグインもインストールできないし、><
そうそう、パスワードで保護されているページへのログインも失敗!
うーん、これじゃぁダメダメだぁ。

一方、英語版はこれらの問題は全てクリアーされてます。
おー、おー、なかなか良いではないか。。。
と思いきや!
最大の欠陥が!
それは日本語の入力ができないのでした!><
これでは日本語の検索できないじゃん!w

というわけで、そもそもWinアプリがMacでも使えるよ、
という製品の副産物としての要素が大きいですね。
もうちょっと基本性能をアップしてからのリリースを
期待したいところです。
というよりも、やはりGoogle本家からのMac版のリリースを
待ちたいところですね。
期待してますよー、Googleさん。w

と、厳しい評価を下してしまった
Macで動くCrossOver Chromiumですが、
試してみたいという方はこちらからどうぞ。w

■CrossOver Chromium 日本語Mac版
http://www.netjapan.co.jp/r/product_mac/com_chr/dl.php

■CrossOver Chromium Mac版(英語版)
http://www.codeweavers.com/services/ports/chromium/

2008年11月4日火曜日

スクリプトの話(15)〜変数の初期化

前回は変数の値が有効に使える範囲
「スコープ」について説明しました。
これと関連して知っておかなければならないのが
変数の初期化のことですね。

例えばグローバル変数を使う時、
いくつかの処理で値を変えて使いたい場合は
その都度、その処理に都合のよい値に変えてあげる、
代入し直してあげなければなりません。

例えば、タッチした時だけ "I love you!" と言わせたいのであれば、

string strMessage = "Hello, Avatar!";

default {
  state_entry(){
    llSay(0, strMessage);
  }

  touch_start(total_number){
    strMessage = "I love you!";
    llSay(0, strMessage);
  }
}

のように、定義し直してあげる必要がありますね。
特にグローバル変数を使う時は、
現在その変数の値(中身)がどうなっているか、
これからやろうとする処理で変更しておく必要がないか
確認しておくことが必要です。

ところで、上の例では一番最初に
敢えて「=」で具体的な値を代入していますが、
これがなかったらどうなるでしょう?
例えば次の例で、

string strText;
vector vecTextColor;
float fltAlpha;

default {
  state_entry() {
    llSetText(strMessage, vecTextColor, fltAlpha);
  }
]

よくあるフローティング・テキストのスクリプトですが、
果たしてこのテキストは表示されるでしょうか?
されるとしたら何色で、どんなメッセージでしょうか?

そう。
メッセージは何も見えません。
何故なら、定義された3つの変数は
何れも初期値が指定されていないので、
文字列は何もない文字列 ""、
ヴェクトル型の色は <0.0, 0.0, 0.0>、つまり「白」、
フロート型の不透明度は 0.0、つまり「完全に透明」、
となっているからです。

こんなこと、わかり切ったことのようですが、
何故敢えて書いているかというと自分でも失敗したからです。w
普通のオブジェクトならいいのですが、HUDの場合、
ログインするごとに default / state_entry() が走ります。
ということは!
以前、世界時計HUDを作った時に、そのプロトタイプでは、
折角文字色を好みの色に変更できるのに、
ログインし直すとまた白に戻ってしまう、という現象が起きたのです。
何も手を打たなければ、上のフローティング・テキストと
同じようなことになってしまい、
必ず色は白になりますね。^^;

これを回避するには、最後に変更した色を覚えさせておいて、
その色を state_entry() の時に読ませるようにする工夫がいりますが、
まぁ、これは別の機会にお話することに致しましょう。
今日は、変数を使う場合には初期化する必要がないか、
逆に初期化されていないか、
スクリプトの結果が違ったり動かない場合は、
そこをチェックする必要があることだけ覚えておいて下さい。

     *   *   *

今回までのところで、
スクリプトが動かないという状況を避ける為の方法、
また、動かない場合のチェックの仕方についての話は終わりにします。
当初は6回くらいで終わらせるつもりでしたが、
書き出したら結構長くなっちゃいましたね。^^;

次回からは、これまでの話を元に、
複雑な処理をする場合などの Tips を
いくつかご紹介していきたいと思います。
それでは、また!

     *   *   *

P.S. llSetText() について補足説明しておきます。

一度フローティング・テキストを設定したけれども
やっぱり消したい、という場合、
llSetText() そのものをスクリプトから削除しても
フローティング・テキストは消えません。
これ、すごい不思議なんだけど。w

と、ここまで書けば、上の記事を読んだ方はおわかりですね?
一度セットしたフローティング・テキストを消すには
llSetText() を生かして次のようにします。

  llSetText("Hello, Avatar!", <0.0, 0.0, 0.0>, 1.0);
       ↓ 下のように変更!
  llSetText("", <0.0, 0.0, 0.0>, 1.0);

そう! 表示していた文字列だけを消せばいいのです!
ご存知の方には何でもないことでしょうけど、
これもまた僕が失敗したことなので、
敢えて説明しておきますね。。。^^;

FPSって何?

先日の Linkさんの講義で
パフォーマンス・モニターの見方を教えて頂いたのは
本当に参考になりました。

この時気になっていたのが、
自分のPCのパフォーマンスであるFPSなんですが、
一体、これってどういう値で
どの位が理想的な値なんだろうと。
NekoさんはドスパラのSL仕様のもので30位、
とおっしゃっていましたが。。。

リンデンのナレッジベースで
このパフォーマンスモニタの見方をチェックしてみました。
正確にFPSが何の略語かは書いていませんでしたが、
その説明からわかったのは
Frame Per Second、つまり1秒あたりのフレーム数、
ということのようですね。
フレームというのは「コマ」のことです。
映画が1秒に24コマ、テレビが同じく1秒に約30コマの
画像を見せていることはご存知でしょう?
いわゆる「パラパラ漫画」の原理で
動く映像として私たちは認識しているわけですね。
SLのFPSも同じで、ワールド内の風景がそのPCで
1秒に何回更新されているか、を示しているものです。

とすれば、Nekoさんおっしゃるように
FPS=30であれば、テレビと同じ品質で見られていることになります。
私はQuickTimeに動画を変換する時に
大体フレーム・レートを半分の15まで落としますが、
これでも十分に、割と普通の動画として見ることができます。
なので、FPS=15というのもそこそこということでしょう。
が、FPS=3となると、これは厳しいですね。
かなりいろんなものが見えていないのかもしれません。><
或いは遅れて見えているのか。。。

あと、もう一つ気になっていたのがSIMの状態を示す
AdvancedのところにあるChild Avatarsという項目。
最初タイニーのことかと思いましたがそうではなく、
このSIMにはいないけれども、
周りのSIMにいて、このSIMが視界に入っている人たちですね。
当然この人たちも視界内にあるこのSIMのテクス全てを
ダウンロードしているわけですよね。
SIMが重くなった時に、
今このSIMにいる人たちだけでなく、
周りのSIMにいる人たちも影響を与えていることを
この数字は表しているようです。

以上、ご参考まで!w

2008年11月3日月曜日

「100人入っても落ちないSIMの作り方」行って来ました

昨晩は、標題の、Neko Linkさんの講義を聴きに行って来ました。
例の環境SIM問題のこともあり、
そして僕自身がミュージシャンとして重い運用をしていることもあり、
どういうことがSIMなりクライアントなりを重くしたり
落としたりするのか、正確に知りたいと思って聴いて来ました。

講義の詳しい内容について触れるのはご遠慮させて頂いて……。

今回初めて知ったのは、
一番SIMを重くするのに貢献しているのはテクスチャであるということ。
いや、それ自体は薄々気づいていましたが、
何と、SLのビューワーは、
ミニマップの三角形で表現される視界の範囲にある
全てのテクスチャを一気に読み込むのだそうです。
「視界の範囲」という変な表現をしたのは、
つまりものの陰になって実際には見えていないものでも、
全部読み込むのだそうです。

ある地点にテレポートすると
アバターは必ず同じ方向=東を向くようになっているので、
イベント会場などの着地点の東側に
テクスをたくさん使ったオブジェクトなどがあると
次々に来るお客さんがそれらのテクスを皆一気に読み込むので、
つまりみんなで一斉にものすごい量のデータをダウンロードするので
SIM=サーバが重くなったり、落ちたりするのだそうです。
(って僕のお店は必ずSIMの西側にあって
東側がにぎやかだなぁ。w)

あと、ctrl+Shift+1(Macの方はcmd+Shift+1)で起動する
パフォーマンスモニタの見方も勉強になりました。
自分のマシンのパフォーマンスは
Basicの一番上にあるFPSで確認できるということ、
SIMのパフォーマンスは、Advancedのところにある
Time Dilationでラグを(最大値1)
Sim FPSでいわゆるSIM全体のパフォーマンスを見ることができあす。
Sim FPSは45が最大値、
これが0になると住民が動けなくなる状態なのだそうです。

因みに、いろんな場所で自分のFPSを計ってみてわかったこと。
最高が16くらいで、ひどい時は3.xという感じです。
これはやはり読み込んでいるテクスチャの量によるようで、
視界を128mから256mにすると一挙に落ちました。
なるほどー、って感じですね。

最近、どうもPCが不調、という方、
一度調べてみるといいかもしれませんよ。
視界の調整で少しはパフォーマンス上がるかも!

2008年10月31日金曜日

【翻訳】環境SIMについての発表、その後(長文)

環境SIMの価格改訂について、
リンデンのフォーラムではジャックとキャットは
恥を知れだの、早く出て来いだの
ひどい言われようです。
つまりフォーラムでトピックを立てたものの
二人のレスポンスが全然ないではないか、というのです。

そこへ本日ようやく、
ジャック・リンデンの記事が公式ブログで発表されました。
この問題には関心を寄せる方、
正確な情報を知りたいと思っていらっしゃる方も多いと思うので、
とり急ぎ全文の訳を以下に掲げます。
例によって非公式な翻訳であり、
誤訳や文責は全てHiroshi Kumakiにあります。
原文はこちらです。

     *   *   *

環境SIMの価格と運用変更についての前回の記事の後、私共はセカンドライフ・コミュニティの皆さんからそれは多くのご意見を賜りました。主としてそれはフォーラムでの議論を通じてですが、同時にEメールやIMでも頂きました。そこで、これらのご意見に対する私共の返事をここに述べておきたいと思います。

まず私が行いたいのは、これらの意見を寄せて頂くために時間を割いて下さったみなさんに対して感謝申し上げたいということです。私共はこれらのご意見の全てに目を通しました。フォーラムでの投稿も含めてです。[訳注:フォーラムの投稿は10月31日午前0時現在で2,800に達しようとしています。ここに書いても読まれないよね、という意見があったための発言と思われます。]そして、これらのご意見の中で皆さん、建設的に、そして明確にご自身の考えを表明しておられました。セカンドライフの住民の皆さんが、かくも熱心で知的で、そして素晴らしい議論を展開して下さるということに、私共は本当に恵まれていると感じています。そして、皆さんに本当に感謝申し上げたいのです。

次に、これははっきりと申し上げておきたいのですが、私共は皆さんがこの問題に関しておっしゃっていることに、本当に耳を傾けているのです。なので、もし、フォーラムに投稿すべきかどうか迷っていらっしゃるようでしたら、是非投稿して下さい。これらの投稿は全て読まれているのです。たとえ私共がそれらの投稿全てにお返事することができなくても、です。

三番目に、これから述べることについてははっきりとわかって頂きたいと思います。前回の記事で申し上げましたように、環境SIMというのはもともと何もない空間として、海や森などの広い場所を確保するために用意されたものです。是非、ここにあるナレッジベースの記事をご覧下さい。ここで挙げられた基準に照らしますと、今や過半数の環境SIMは本来意図されていたものを遙かに超えたものとなってしまいました。私共はこのこと自体が悪いことであるなどと言うつもりはありません。寧ろ、住民の皆さんが環境SIMの有用性を見いだして頂いたことを大変嬉しくすら思っています。また、私共は環境SIMオーナーの全てが負荷のかかる使用をしていると言っているわけでもありません。私共が言いたいのは、こうした過程の中で、環境SIMの使用法が変わってきたのだということ、そして
住民の皆さんが環境SIMを使ってより創造的な活動をされていく中で、この使用法の変化はこれからも続いていくのだということです。つまり今回の価格改定は、これらの使用法の変化を互いに認識し、その変化によって生じる費用と価値についてのものであるということです。

これからの数日にかけて、私共は皆さんからのご意見について検討し、またできるだけ多くの方々と対話を続けていきたいと思います。もし何かおっしゃりたいことがあれば、フォーラムでご意見を言われるのがベストです。勿論、本来意図された通りに運営されている環境SIMもあります。なので、環境SIMの使用実態について様々なレベルがあることを考慮しなければならないこともわかっています。

またこのブログに記事を書きます。その前にいろいろと検討する時間を少し下さい。皆さんが今回の決定に関し、ひとからならぬ感情をお持ちであることを私共はちゃんと認識しています。どうぞご意見を絶やさず、しかし建設的で、問題の本筋から逸れないようにお願いしたいと思います。間もなく、もっと詳しくご報告させて戴きますので、どうぞよろしくお願いします。

2008年10月29日
ジャック・リンデン


2008年10月30日木曜日

スクリプトの話(14)〜「スコープ」のこと

前回の llOwnerSay を使って変数の値を確認しよう、という文章に対し、
hiromitsu Fall さんからご指摘がありましたので補足しておきます。
つまり、llOwnerSay は string 型のものしか使えませんよね、
ということです。
integer(整数)型の変数の値を知りたい場合には、
これを string 型に変換する必要があります。

例えば、ドアを開け閉めするスクリプトを組んでいて、
開ける時は openDoor()、閉じる時は closeDoor() という
自作関数を使うものとします。
この時、ドアが開いているか閉じているか
判断する手段として isOpen という整数型の変数を用意しました。

integer isOpen

if (isOpen = 0){
  openDoor();
  isOpen = 1;
} else {
  closeDoor();
  isOpen = 0;
}
llOwnerSay((string)isOpen);

結局、今ドアは開いていることになっているのか
閉まったことになっているのか、
最後に llOwnerSay() で確認しています。
ここで、isOpen は整数なので、その前に (string) をつけて
型を変換しているわけです。
これで「1」とか「0」とかしゃべるはずです。^^

     *   *   *

さて、前置きが長くなりましたが、
こうして変数の中身を確認したところで、
その結果が期待していたものと違う場合はどうしましょう?
どう見ても関数の使い方や
計算の仕方は合っていそうなのに。。。。
そんな時疑うべきはその変数の「スコープ」ということです。

「スコープ」とはもともとギリシャ語で、
「見る」という意味の言葉が変化したもので
「狙いをつける」というような意味になります。
実は変数はいつでもどこでも有効、というわけではなく、
「スコープ」=「狙い」=「射程範囲」が決まっています。
その範囲を超えると使えないのです。

いつものスクリプトをちょっとアレンジしてみましょう。

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

  touch_start(total_number){
    string strMessage = "Touched.";
    llSay(0, strMessage);
  }
}

llSay(0, strMessage) という全く同じ命令が2度出てきますが、
1回目は「Hello, Avatar!」としゃべり、
2回目は「Touched.」としゃべります。
strMessage の定義はそれぞれ state_entry() と
touch_start() の{}の中でされていますが、
実は、{}の中で定義された変数は
その{}の中だけしか有効ではないのです。
なので、もし、タッチした時も「Hello, Avatar!」と言わせたくて、

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

  touch_start(total_number){
    llSay(0, strMessage);
  }
}

としたとすると、すぐに
「Name not defined within scope」
(この名前はスコープの範囲内で定義されていません)
と怒られてしまいます。
このように{}の中だけで有効な変数を
「ローカル変数」と呼んでいます。

では、今のように{}の外でも同じ変数を使いたい場合は
どうすればいいでしょう?
それが、この連載にはじめの頃、一番最初に書くように、と言った
あの変数です。

string strMessage = "Hello, Avatar!";

default {
  state_entry(){
    llSay(0, strMessage);
  }

  touch_start(total_number){
    llSay(0, strMessage);
  }
}

これでどちらの場合も「Hello, Avatar!」としゃべるように
なったはずです。
どんな{}よりも外側にいるので、どんな場所でも有効です。
これを「グローバル変数」と言っています。
世界中どこでも、っていうニュアンスですね。^^

それでは、クイズです。
次の処理で、llSay() はそれぞれ何としゃべるでしょう?

string strMessage = "Hello, Avatar!";

default {
  state_entry(){
    string strMessage = "I love you!";
    llSay(0, strMessage);
  }

  touch_start(total_number){
    llSay(0, strMessage);
  }
}

おわかりになりますか?
state_entry() の方は、「I love you!」としゃべり、
touch_start() の方は、「Hello, Avatar!」としゃべります。
このように、同じ名前の変数が異なる階層にある場合は、
一番内側の{}の中にある定義が優先されます。
従って、state_entry() の{}の中の strMessage の定義は
この中だけで有効です。
一方、touch_start() の{}の中には何も定義がないので、
グローバル変数、一番頭にある strMessage の定義が有効となるのです。

因みに、グローバル変数とローカル変数の使い分けですが、
どうもプロのプログラマーはグローバル変数は使いたがりません。
長いプログラムを書いていて、
もし変数の定義を変更する必要が出た時、
その変数を使っているところを全部チェックしなければなりません。
それよりも、ローカル変数にしておいて
その部分だけ気にしていればいい、という方が楽だからです。
例えば、よくある繰り返しの処理で出てくる
i という変数。。。

integer i = 0;

while(i <= 10){
  llSay(0, "I love you!");
  i = i + 1;
}

これは10回「I love you!」としゃべるスクリプトですが、w
「10回」と数を数えるのに変数 i を使ってますね。
問題はこうした繰り返しの処理がいくつもある場合、
その変数にいちいち i, j, k, l... と違う名前をつけるのも面倒です。
i をそれぞれの処理の{}の中で、つまりローカルで使えば、
他のところでその中身がどうなってるか気にせずに
何度も使い回すことができます。

しかし、逆に、ある関数やステートの中で使った変数を
そのまま他の関数やステートで使いたい場合もあるでしょう。
そんな、変数を持ち回りしたい時はグローバル変数が活躍します。

長くなりましたが、変数の中身がどうもおかしいという時は、
是非この変数の「スコープ」を疑ってみて下さい。
慣れないうちはわけがわからないかもしれませんが、
やがて使い分けができるようになると実は便利なものなのです。

リンデンに一言

昨日発表された環境SIMの値上げについて
フォーラムで一言発言してきました。
ブログではコメントが141しか載ってませんが、
何と僕のコメントは1951番目でした。@@
やはりみんな何か言わずにはいられないのですね。

何十ものSIMを手放すぞ! と息巻く人や、
従来の価格で「openspace」ならぬ
「empty space」を提供します、と言う人もいて、
この人によると、プリム数100、人は1人しか入れないもので、
1台のサーバで100のSIMをまかないます、という、
まぁ、強烈な皮肉ですね。
また、そもそも何故環境SIMが必要か、それは
これこれの場所に行けばわかる、
マイケル・リンデンが環境SIMを重く使っている場所だ、
何故そんなSIMに3,700ものプリム数をそもそも許容するのか、
それはマイケル・リンデンのが自分の海賊船を置くのに必要だからだ、
なんて皮肉も。。。

しかし、嫌みを言ってみたところで、
或いはただ感情的に動いたところで問題の解決にはならないでしょう。
私としては、結局はみんながハッピーになり、
SLが魅力的な場所であり続けることを望んでいるので、
次のようなメッセージを残してきました。
http://forums.secondlife.com/showthread.php?t=289652&page=131&pp=15

     *   *   *

もしジャックが指摘しているように何万にもの人が環境SIMを負荷のかかるような仕方で使用しているのだとしたら、確かに今回の値上げは頷けるものではあります。が、同時に、それほどに多くの人たちが環境SIMを発注したという事実、そして、その多くが負荷のかかる使い方、更には土地や家をレンタルするというような使い方をしているという事実を、リンデンラボにはもっともっと深く考えて頂きたいと思うのです。

これらの事実は、次の事を物語っているように私には思えます。

1. それだけ多くの人が自由にものづくりできるSIMを持ちたいと思っているということ
2. それだけ多くの人がこれまでの環境SIMの価格をリーズナブルなものだと感じているということ、言い換えれば通常のSIMの価格が高すぎると感じているということ

この投稿のはじめに申し上げましたように、私は今回の値上げは理解できるものと感じています。が、同時に、リンデンラボには通常のSIMの価格についても見直しを検討して頂きたいと思うのです。もし通常のSIMの価格が引き下げられるようなこととなれば、今回リンデンラボが取ろうとしている手段は効果的なものとなるでしょう。しかし、環境SIMの値上げだけを実行することとなれば、それは破滅的な結果となることは間違いありません。自由にものづくりをしたいと考える人たちにとってセカンドライフは最早魅力的な場所ではなくなり、皆そこから出て行ってしまうことでしょう。

私は、リンデンラボがこうしたあらゆる可能性を検討して、最終的な判断をされることを期待したいと思います。そして、その判断が現在セカンドライフの住人たち、そして何れ住人となるかもしれない人たちにとって魅力的なものとなることを期待しています。

2008年10月29日水曜日

お詫びと訂正

昨晩アップしました環境SIM値上げの翻訳について、
値上げ後の維持費がUS$125.00とあるべきところ、
US4125.00となっておりました。
現在既に修正済みですが、
ご覧になった方には驚かれたかたもいらっしゃるかもしれません。
値上げ後の価格という大事なところでの間違い、
お詫び申し上げますと共に、
ここに訂正させて戴きます。


スクリプトの話(13)〜「llOwnerSay」の活用

さて、もしプログラムがうまく動かなかったら、
その原因をどうやって調べるか?
一番怪しいのは前回も書きましたように
条件が分岐したりするところです。
条件の設定を誤ったり、
思いもよらない値が来て、その行き先がない場合などですね。

こんな時、ポイントポイントで、
その時の結果がどうなっているかを確認するとよいのです。
例えば、変数の値は自分が期待したものになっているか、
処理が行われた結果がどうなっているか、といったことです。
どうやって確認するか?
ここで、「llOwnerSay」という関数を使います。
ご存知の通り、オーナーにだけ聞こえるようにしゃべってくれる、
アレですね。
変数の値や処理の結果を喋らせて、
その箇所ではOKなのかどうか、確認していくことになります。
OKならその次のどこか
NGならその前のどこかがおかしことになります。
検討がつけばいいのですが、
どうにも検討がつかない時は、
変数を設定したり、計算したりするポイントポイントごとに
llOwnerSay を入れてしゃべらせてあげるといいでしょう。

例を挙げます。

最近 YouTube テレビが流行っていますが、
(私も出していますが。。。^^;)
これは大抵の場合、YouTube そのままは見られないので、
mp4 というQuickTimeで扱える形式に変換してくれるサイトへ
リンクを貼ることで実現します。

しかし、ということは、
QuickTime のメディアを置いている場所であれば
YouTube でなくても見られるわけです。
であれば、YouTube のチャンネルの時だけ変換して、
それ以外の URL は変換しない、という処理ができないでしょうか?

string channelURL // ノートから読み込んだURL

// "youtube" という言葉が含まれているかで判断
if (llSubStringIndex(channelURL, "youtube"){
  channelURL = llInsertString(channelURL,
    llSubStringIndex(channelURL, "youtube")+7, "mp4");
}else{
  channelURL = channelURL;
}

// ここで確認のために入れてみる
llOwnerSay(channelURL);

else は不要かもしれませんが、敢えて比較のために入れてみました。
これで、例えば

「http://www.youtube.com/watch?v=ABCDEFG」

を channelURL に読み込まれるようにすると llOwnerSay は、

「http://www.youtubemp4.com/watch?v=ABCDEFG」

としゃべってくれるでしょう。
これはうまくいくはずです。
ところが、あるURLを読ませるとうまく映像が映りません。
その時 llOwnerSay はこう言っていました。

「http://www.youtubemp4mp4.com/watch?v=TUVWYXYZ」

そうです。もともと変換されたサイトのURLを読んだのですね。
なので余計な文字が入ってしまい、サイトを開けないのです。
これで先の「if文」は
もうちょっと考えないといけないことがわかりました。

このように llOwnerSay を使うと処理の結果が目に見えるので
どこが間違ったか、はっきりして便利です。
是非どんどん使ってみて下さい。
あ、勿論、ミスが修正できたら消してもいいですし、
「//」をつけてコメントにしてもいいですね。

それでは、また。

【翻訳】環境SIMの価格と方針の変更について(長文)

既にいくつかの日記などでも書かれていますように、
環境SIMについて、開設費用、毎月の維持費、
そして環境SIMの提供に対する方針の変更が、
本日のリンデンのブログで発表されました。
不安に思われる方もいらっしゃると思いますので、
ここで全文を訳しておくことにします。
あくまでも非公式な自由訳であり、
誤訳等の文責は全てHiroshi Kumakiにあります。
原文はこちらです。

     *   *   *

この3月に、当社は環境SIM(英語は "openspace")と呼んでいる、あまり負担をかけずに使うことのできる土地の使用について、より良いサービスを提供することを発表しました。発表後間もなく、新しいランド・ストアをオープンし、不動産オーナーが簡単に環境SIMを購入し、それもすぐにその土地をお届けできるように致しました。これにより、サポート・チケットを使って土地を発注するという従来の方法に比べ、格段の改善がなされました。その結果、当社はとてつもない数の環境SIMの注文を受けることとなりました。実際、今現在、何万という注文が入ってきているのです。当社としましては、みなさんの多くの方が、ご自分の不動産に併せて環境SIMを設置されることの素晴らしさを知って頂いたものと嬉しい限りでございます。

ご存知ない方のために改めて申し上げますと、環境SIMというのは、田舎風な風景や海の広がる景観のために、あくまでも負担のかからない使用を目的とした個人所有の島のことです。もしメインランドの所有者であるリンデン社が海や緑あふれる土地を持てるのであれば、個人の不動産オーナーも当然同様の権利が与えられなければなりません。しかし、環境SIMはには普通のSIMと大きく異なる点が一つあるのです。それは、通常のSIMがサーバーのCPU1つをまるまる有効に使うことができるのに対し、環境SIMでは1つのCPUで4つまでの環境SIM(従って、4つのCPUからなるサーバーでは1台で16の環境SIM )が動くことになります。このようにリソースを分け合って使うので、「あまり負担のかからない使用」をすることとなるのです。

しかし、この環境SIMを海などのように殆ど何もない、人通りも少ない場所として使用するよりも、大多数の方が住む場所を探ししている人にレンタルするのに使っているというのが実情です。環境SIMはこうした目的に耐えうるようにはできておりませんので、こうした使用法は現に問題を引き起こしています。パフォーマンスが不安定なため、とても素晴らしい経験をしているとは言えない方々も多いのです。また、環境SIMをあまりに負荷をかけて使用することは、ネットワークとデータベースのインフラの一部に余計な負荷をかけることとなり、これに対応するためには現行の費用を遙かに超えるものとなります。サーバーとの間であまりに多くのトラフィックが発生する結果、そして資産管理サーバにあまりに多くの要求が投げられる結果、その影響をログインしている住民全てが、何を行うにしても受けてしまうことになるのです。

そこで、当社としましては、パフォーマンスの改善と、価格に応じたレベルの使用法を徹底して頂くための手段を講じることと致しました。これはセカンドライフに参加される全ての方に最高のパフォーマンスを約束するための措置です。結果として、価格変更と方針の変更を実施することとなりました。価格変更は1月1日から、そして方針の変更は今これより直ちに実施いたします。

2009年1月1日より実施

毎月の維持費をUS$75.00よりUS$125.00に値上げします。この値上げは1月1日現在環境SIMのオーナーである全ての方と、この日以降新たに環境SIMを購入される方に適用されます。この新しい環境SIMの維持費について、適用除外の措置はありません。

また、クラス4の環境SIMをお持ちの方は、これらのSIMは1月末までにクラス5にアップグレードされます。これはこうした環境SIMでよりよい経験をして頂くための改善措置です。

更に、新しい環境SIMを開設するに当たっての初期費用もUS$250.00からUS$375.00に値上げされます。

本日より実施

当社は、環境SIMのオーナーが、支払いをしている人とは別の住民に変わることを禁止します。当初は、既に支払いをしている人とオーナーが異なる場合のこの変更を強要はしませんが、何れ、それが許容されるのはオーナーが支払い人に対して全額を支払っている場合に限りたいと思っています。この措置は土地(parcel)レベルのレンタルについて適用されるものではありません。環境SIM全体(region)のレンタルにのみ適用されます。

また、教育者向け、非営利団体向けの環境SIMのディスカウント・オファーも今後はしないこととします。先にも述べましたように、これは現在環境SIMが使われているような状況で増大しているリソース要求に応えるための措置です。既に環境SIMをお持ちの教育者の方々が何名かいらっしゃいますが、この方々には今回の変更について直接ご説明させて頂き、検討を重ねたいと思います。

次に、ビューワーにも変更を加え、住民が自分たちがいる土地やSIMがどのようなタイプのものか、正確に把握できるように致します。これは、不動産市場を適正かつ公正で、わかりやすいものにしたいからです。自分が今いることころがリンデンのメインランドなのか、プライベートSIMなのか、或いは通常のSIMなのか環境SIMなのか、そしてそれがどういう意味を持っているのかということがすぐにわかるようになりますので、期待していて下さい。これによって、ビューワーは大きく変わることになります。例えば「検索」や「土地について」、「土地を購入」といった画面が変わります。土地についてわかりやすくすることは誰にとっても利益になると考えます。特に、初めて土地を持とうとする初心者の方々にとってはそうでしょう。

最後に、当社は負荷の大きい環境SIMについて、そのオーナーの方々と積極的に話し合っていく所存です。これが大事なのは、リソースの誤った使い方、あまりに重い環境SIMの使用は同じサーバーを、規定をきちんと守って運営している他のオーナーに対して不公平であることは明らかだからです。この件に関して、そのような負荷の大きい使い方をされるオーナーの方々の意見を聞いて参りました。そして、当社が環境SIMのユーザーに対してできうる限り高いパフォーマンスを提供できるよう、改善していかなければならないということに対してはその通りだと思います。また、一体どういうことが「負荷の大きな使用」となるのか、それを避けるにはどのようにすればいいのかといったガイドラインも策定する予定です。

繰り返しになりますが、要点をまとめると、次の通りです。

1. 1月1日を以て環境SIMの価格と費用を改定します。適用除外はありません。
2. クラス4の環境SIMは1月中にクラス5となります。
3. 教育者のための環境SIMの割引はなくなりました。
4. 支払い人に対し全額を払っている住民以外へのオーナー権の委譲は認めない。
5. 環境SIMの不公平な使用を避けるためのサポートスタッフによる積極的な教育活動。

皆さんの中にはこの発表に関して質問や懸念をお持ちの方が多数いらっしゃると思います。以前そうしましたように、今回もこれらの変更について話し合うフォーラムを近く創設する予定です。ご連絡を希望される方はどうぞこちらにお進み下さい。また、本件に関し、個人的にお話をされたいという方は通常のサポートから連絡をお願いします。

2008年10月27日
ジャック・リンデン


2008年10月28日火曜日

スクリプトの話(12)〜開発の現場から

久しぶりに連載の再開です。
ここでちょっとリンデン・スクリプトそのものから離れて、
実際のソフトやシステムの開発現場での話をしたいと思います。

プロの開発現場では、当然それは商品として出されるものですから
お客さんに迷惑をかけるわけにはいきません。
そこで、徹底したテストを何度も繰り返します。
テストというのは普通は合格して喜ぶものですが、
プログラムの開発では、寧ろバグが出ることを喜びます。w
バグというのは大抵の場合、
プログラマーが気づかない所、想定外のところで起こりますが、
これに早く気づけば、あとでお客さんに迷惑をかけなくて済む
というものです。

従って、テストはあらゆる可能性を試します。
プログラマーがこんなのあり得ないだろう、と思って
敢えて手を抜いたようなところもちゃんとテストします。
なので、大抵の場合、テストを考える人、テストを実行する人と
プログラマーは別の人、というのが基本ですね。

実は、プログラムが途中で止まったり、異常終了したりするのは、
この「想定外」という部分で起こります。
それはつまり、途中で「if文」などで分岐したのだけれど、
if や else if のどの条件にも合ってなくて、
プログラムが行き先を失ってしまう、ということです。
それからもう一つは、ループの条件に
やはり予期していない値が来てしまい、
条件を満たせないで、いつまでも繰り返しの終わらない
いわゆる無限ループに入ってしまう場合ですね。

これらのバグ出しをするためのテストを行えれば
最初から順序よくプログラムを流すので
どこで停まってしまうかはわかりますが、
さすがに一人で作るリンデン・スクリプトで
そこまで大がかりなテストをしていたのでは
たまったものではありません。
そこで、スクリプトがうまく動かず、
どうも途中で停まってしまっているような場合
どのようにして原因を調べるか、
次回はその方法について書いていきたいと思います。
お楽しみに。

2008年10月27日月曜日

1周年記念チャリティコンサートありがとうございました!

2日間にわたって行いましたデビュー1周年記念ライブ
たくさんの方々に来て頂き、ありがとうございました。
なつかしい博多の頃の仲間にも来て頂いて
嬉しい限りのヒロシでありました。

081026b
081026c


コンサートの最後はお決まりのダンスミュージックとなりましたが、
何故かみんなハロウィン仕様=カボチャ頭になって踊ります。w
なかなか不思議な光景のエンディングとなりました。w

また、チャリティの募金もこの2日間でL$18,888集まりました!
敢えてお名前は控えさせて頂きますが、
ご協力頂いた皆さん、ありがとうございました。
この募金はリアルの団体NPO高麗に寄附させて戴き、
世界平和のための活動に役立てさせて戴きます。

さて、コンサート終了後、
pira Noel さんや akinori Paine さん、miyaomiyao Noel さんと
再建なったCosmic Tree Cafeでまったり。
何だか懐かしいようなほっとするようなひとときでした。

というわけで、ホントに素晴らしい水族館&カフェです。
是非是非遊びに来て下さいね。
これからもどうぞよろしくお願いします。

2008年10月26日日曜日

いやぁ、参った参った!w

デビュー1周年記念のチャリティコンサート1日目、
無事終了しましたぁ。。。

いや、本当に無事だったのか?w

実は今日は昼からトラブル続きで、
何と、ちょっと席を外している間に、
飲み干したはずのジュースの缶がわざわざPCのキーボードの上に倒れ、
わずかに残っていたらしい水滴がご丁寧にキーボードの中に。。。
あっ、と戻って来て気づいた時は既に遅く、
入力しているうちにどんどん字が出なくなり
あっという間に全てのキーが死んでしまいました。チーン。
慌てて渋谷までキーボードを買いに行ったのは言うまでもありません。;;

これに始まり。。。

ライブでは、自分は気持ちよく弾いていたのだが、
何とお客さんは聞こえないとのこと。
うん? 声は聞こえている。おかしい。。。
そう、声は聞こえている。。。
マイクを切っているはずなのに、ぶつぶつ言ってる声が聞こえてる。
何と!
ミキサーのUSBが抜けて、
自動的にボイチャ用のヘッドセットに入力が切り替わっていたのでした。
ということは。。。
あれ? とか、 おかしい、 とか独り言言ってたの
ネットで流れたのですねー。わー恥ずかしい!><

そんなこんなありましたが、
外国からまで来て頂いたお客さんには
皆さん喜んで頂いて、
大変いいコンサートになったのではないかと思います。
いらして頂いた皆さん、ありがとうございます。

そしてまた、明日も同じ21:00から、
今度は pira Noel さんの水族館に舞台を移して行います。
どんなコンサートになるのか、
まだ僕自身わかっていません。w
どうぞお楽しみに!

■Hiroshi Kumaki デビュー1周年記念チャリティーコンサート
 〜パート2「生命・永遠」
・日 時:2008年10月26日(日)21:00〜22:00
・会 場:Aquarium Cosmic Tree
     http://slurl.com/secondlife/Exhara/31/198/478
・入場料:無料
・主 催:Lifebound Records
・協 力:pira Noel(Aquarium Cosmic Tree)

2008年10月25日土曜日

【緊急告知!】2Days〜デビュー1周年チャリティコンサート

ヒロシです。

僕が pira Noel さんの軽井沢水中水族館で初めてのコンサートをやってから
はや1年が過ぎました。
というわけで、この1年間僕を支えて下さった皆さんに感謝して
明日10月25日(土)と26日(日)の2日間にわたって
チャリティコンサートを行います。
会場は25日が kenmi Lomu さんのSL StationがあるDubai Japan、
そして26日がメインランドExharaの上空450mに復活した、
そう、
ぴらさんのAquarium Cosmic Treeでのライブとなります!
詳しくは以下の通りです。
是非是非お誘い合わせの上、みんなで遊びに来て下さいね。w

■Hiroshi Kumaki デビュー1周年記念チャリティーコンサート
 〜パート1「愛・平和」
・日 時:2008年10月25日(土)21:00〜22:00
・会 場:Dubai Japan中央ステージ
     http://slurl.com/secondlife/Dubai%20Japan/38/242/21
・入場料:無料
・主 催:ヴォステラ社
・協 力:kenmi Lomu(Niseko SL Station)

081024d


■Hiroshi Kumaki デビュー1周年記念チャリティーコンサート
 〜パート2「生命・永遠」
・日 時:2008年10月26日(日)21:00〜22:00
・会 場:Aquarium Cosmic Tree
     http://slurl.com/secondlife/Exhara/31/198/478
・入場料:無料
・主 催:Lifebound Records
・協 力:pira Noel(Aquarium Cosmic Tree)

081024c


尚、このコンサートでご協力頂きました募金は全て、世界平和の為に活動をしているリアルの団体NPO高麗に寄附されます。

■NPO高麗の概要についてはこちら
http://www.idaki.co.jp/aboutus/aboutus.html

皆様のお越しをお待ちしております。
週末のひとときを癒しの音響空間でお過ごし下さい。

【緊急速報】pira Noel さんの水族館が復活!

pira Noel さんの水族館やカフェが閉店してから
はや1ヶ月が過ぎようとしています。
この間淋しい思いをされている方も結構いらっしゃるのでは?
僕も今お付き合い頂いている方々の殆どは
博多にあったぴらさんのカフェで知り合ったくらい。
本当にぴらさんのお店は人と人との出会いの場なのでした。

そこで何と何と!
そのぴらさんの水族館がメインランドのExharaの海の上空
450mのところに復活したのです!
Exharaはタイガーカフェや僕のLifebound Cafeがある
Fanghammerのお隣、海続きのSIMなのです。
この海のオーナーでもあるあきのりさんと
水族館コンサートから1年を迎える僕からお願いして
ようやく復活を実現することができました!
いやぁ、めでたいめでたい。

081024a


水族館は2階構成になっていて、
着地点は2階の入口になります。
ここは広いイベントスペースになっていますが、
何とその片隅に、あの、なつかしい、博多のカウンターが!
そして、例によって(?)すとんと1階に落ちると、
そこにはあの懐かしいイルカ君やクジラ君、
長〜いリュウグウノツカイなどが迎えてくれます。w

081024b


というわけで、
皆さん、是非是非遊びに来て下さいね。
ホントに癒される空間ですよー。
そして魚だけでなく、人とも会話したくなったら(?)
そのままタイガーカフェへ直行して下さいね。w
Fanghammerの海もますます賑やかになりそうです。w

■Sky Aquarium Cosmic Tree
http://slurl.com/secondlife/Exhara/31/198/478

P.S. この後の緊急速報第2弾もお楽しみに!

2008年10月24日金曜日

お待ち兼ねのバージョンアップ!

何と、日本に戻って来たら、
ビューワーの新しいバージョンがリリースされていましたね。
今回はまた久しぶりにてんこ盛りの変更内容。
中でも大注目なのが、いよいよMonoが使えるようになったという事!

これはね、随分前から待っていたのですよ。
で、先日のバーニングライフでのリンデン側が仕組んだスクリプトは
実はMonoで動いていたので、リリースそろそろかな、
と、期待していたのでした。

何がスゴイかって、
これまで作ったスクリプトも、Monoでコンパイルし直せば、
断然処理が早くなり、従ってSIMに対する負担も軽くなります。
それだけでなく、ファイルサイズ16Kbという制限もなくなり、
より複雑なスクリプトもサイズを気にせずに作ることができます。
そして何と何と!
今回のリリースではリコンパイルの話しか出ていませんが、
Monoに移行することによって、
C言語やJAVA、Visual Basic、PHPといった
おなじみの言語でスクリプト作成ができるようになります。
こうなってくると、もう、
自分の得意な言語で書いてコンパイルすればいいので、
LSLの様々な制限やクセに悩まされることもなくなりますね。

というわけで、まだバージョンアップされてない方
是非是非今回はバージョンアップして
これまで作ったスクリプトをMonoでリコンパイルして
遊んでみて下さい。
Monoに関する今後の動きから目が離せません!

遊んだ遊んだ。w

アルメニアから帰って来てからも
殆どインできていないヒロシです。
今日もRLの仕事終わるの遅かったー。><

にも拘わらず、、、
家に帰って来てから延々と楽器を弾いておりました。
前にも書きましたが、仮住まいから戻って来て、
スタジオの環境を整備し直したのはいいのですが、
何と今日まで実際に音を出せていなかったのです。
そこで今日は思う存分!

というのも、実は僕が水族館コンサートでデビューして
ちょうど1年ということで、
今週末10月25日(土)と26日(日)辺りで
コンサートが予定されているからでもあります。
アルメニアでの経験を元にした新曲は間に合いそうもありませんが、
逆にこれらのライブ会場にて、その場で演奏する可能性も出てきました。
今日はその練習というか実験も兼ねて
数台のシンセを切り替えながら延々と即興で弾いていたのです。

というわけで、今週末、楽しみにしていて下さい。
詳細決まりましたら(もう金曜なのにまだ決まってない!?)
またこの日記でお知らせしますね。

それでは、また!

2008年10月22日水曜日

ノアの方舟を見た!?

帰って来てからのいろいろな整理で
なかなかバタバタしているヒロシです。
旅行のみやげ話も少しずつ書いていきますね。

前の日記でノアの方舟が漂着したという
アララト山の写真を載せましたが、
そのノアの方舟の破片なるものが
このアルメニアにはあるのです。

081021a


アルメニアはローマに先立って
世界で初めてキリスト教を国教としたことで知られ、
アルメニア教会という独自の宗派を持ち、
その総本山がここアルメニアのエチミアジンというところにあります。
上の写真は世界遺産ともなっているその大聖堂。
その大聖堂の博物館にある宝物のひとつが次の写真。
普通の十字架の飾りのようですが、
その背景にある黒いものが化石化したノアの方舟の破片。
(と言われています。w)

081021b


因みにこの破片、左下が欠けていますが、
これはロシアのエカテリーナ2世がこの破片を欲しがって、
割ってロシアに持ち帰り、別な装飾品に作り替えたからだとか。w
因みに本物の方舟はエチオピアにあることになっていて、
そこでは年に一度、マリアのお祭の時に
そのレプリカを山車として担ぎ出して祝います。w
インディ・ジョーンズの映画のテーマにもなりましたが、
この方舟に対するキリスト教徒の方々の思いは格別なようですね。

それでは今日はこの辺で。

2008年10月20日月曜日

帰国しました!

というわけで、今成田エクスプレスで東京に向かっているヒロシです。
無事帰国しましたのでご心配なく。^^

この間もいろいろとコメント頂き、ありがとうございます。
お返事はまた改めて書き込みますね。
とりあえずお礼を兼ねて、おみやげの写真第1弾、
ノアの方舟が漂着したという山の写真です。



詳しくはまた。
ではでは〜。

2008年10月16日木曜日

行ってきます!

というわけで、前にお知らせした
アルメニアに向けて出発する日となりました。
何でもこの辺りは日本人にとって一番遠い
一番知られてないところらしいです。
そこで一体どんな風景や人に出会い
どんな経験をするのか、
そしてまた、そこでどんな音楽と出会い
どんな音楽が僕の中から生まれて来るのか、
大変楽しみな旅です。
しばらくSLをお留守にしますが、
帰って来たらいろんな写真やみやげ話など
みなさんと楽しめればと思っています。

それでは、
行ってきます!

2008年10月15日水曜日

スクリプトの話(11)〜最後はコメント!

さて、リンデン・スクリプトは基本的に自分しか見ないものだけれど、
時間が経てば自分も他人になってしまい、
何でこんなものを書いたかすらわからなくなることもある、
だからこそ、見やすくわかりやすいスクリプトを書こう、
そんな趣旨でここ何回か書いてきました。
しかし、字下げや名前の付け方だけではカバーできないところもあります。
そもそも何故そんな変数や関数を作ったのか、
後から見ると忘れてしまってることもあります。
そんなややこしいことをする時は、
コメントを入れておくといいですね。
この変数は何故必要なのか、
この関数はどういうはたらきをするのか
簡単に書いておくといいのです。

コメントというのは文字通り説明ですが、
コンピュータがプログラムの部分とは見なさい文のことです。
リンデン・スクリプトでは、スラッシュを2つ入れると、
その後、行の最後までに書いてあるものは無視されます。

関数の時はその関数のすぐ前に
こんな風に書いておくといいでしょう。

// 現在の自分の位置を取得する関数
getNowPos()

// ドアを開ける処理
openDoor()

こんな感じです。

変数の場合は、変数はズラズラとスクリプトの冒頭に並ぶこともあり、
いちいち上下にコメントが入ったのでは
何がなんだかわからなくなります。
そこで、その変数の後に書くことをお勧めします。

list colorList // ボタンに表示する色のリスト
string colorName // ボタンで選択した色の名前
vector colorValue // 選択した色のベクトル値

といった具合です。

コメント「//」の始まる縦の位置を揃えておくと
もっと見やすくなりますね。

僕はかなり長い「if文」や
「touch_start」と「Listen」と「dataserver」
それぞれの間が長い処理、
一旦外の関数に出てまた戻ってくる処理など
結構長丁場のスクリプトを書くことがあります。
そうすると、その長いスクリプトから
目的の場所を見つけるのに結構時間がかかったりします。
そんな時も、このオレンジ色で表示された日本語のコメントは
ぱっと目に入ってきて助かります。
是非是非自分のために
コメントをつけることをお勧めします。

     *   *   *

ここ数回は、コーディング・スタイルという、
殆どスクリプトの形を整えることを中心に書いてきました。
これらは別にスクリプトの動きに直接影響するわけではありません。
なので、面倒でもあり、手を抜きたい部分でもあります。
が、逆にこの形の部分を最初にしっかりとしておけば
間違いも減り、仮に間違えてもすぐ気づくので
より早くスクリプトを完成させることもできるのです。

そして!
実はここまで長々と書いてきたことは全て
うまく動かないスクリプトの原因を知るための前提なのです。
原因の調べ方については、いよいよ次回から書いていきます。
大変お待たせしましたが、是非楽しみにしていて下さい。

それでは、また。

スクリプトの話(10)〜変数、関数の名前

見やすいスクリプトを書く方法として、
前3回にわたって字下げや改行について書いてきました。
この他にわかりやすくする方法に
変数や関数の名前の付け方というのがあります。

変数や関数は自分で自由に作れるところですので、
自分さえわかっていればいいのですが、
前に書きましたように、しばらく経つと
その自分が他人になってしまうことがあるのも事実です。
そこで、やはり決め事をしておいた方がいいのですが、
ここまで来るともう、いろんな人がいろんな事を言ってますので、
実はこの項は書こうかどうしようかと
今まだ迷っている位なのです。
が、こうしたことも初心者の方にとって
何かの参考になるかもしれず、と思い、
やはり書かせて戴くことにします。
さらっと読んで頂いて、
自分に合った名前の付け方をされることを願っています。

まずは関数から行きましょう。
自分で作った関数の名前は
その関数のはたらき、処理内容がすぐわかるように
「動詞」+「目的語」という形で、単語をくっつけて
最初の単語は小文字、続く単語は始まりの文字を大文字、
というようにつけるといいと思います。
例えば、「今いる位置を取得する」という関数の場合、

getNowPosition

または Position を更に略して

getNowPos

といった具合です。
それから、ドアを開ける関数なら

openDoor

ノートカードからその内容(文字列)を読み込む関数なら

getStringFromNote
或いは、
loadStringFromNote

といった具合です。

因みに、この、最初だけ小文字で初めて
途中の頭文字を大文字にする書き方はキャメル型と呼ばれています。
キャメル(camel)とは英語で「ラクダ」のこと。
頭が小さくて背中がボコボコしてるのがラクダみたいだからとか。w

変数も同じような感じで名前をつければいいと思います。
もっとも、今度は動詞は不要ですね。
できれば、どういう型のものかもわかるようなものがいいですね。
例えば、前に出した例で、色に絡む変数を考える時、
これをキャメル型で書くとしたら、

色名を入れておくリスト型 colorList
色そのものの名前=文字列型 colorName
色を指定するベクトル型 colorValue
色の順番を表す整数型 colorNumber

といった感じですかね。
前に話しました、型を表す頭文字を使うとすると、それぞれ、

lstColorList
strColorName
vecColorValue
intColorNumber

といったところでしょうか。
因みに、この書き方にも呼び方があって、
こちらは「ハンガリアン」と呼ばれています。
何故ハンガリーなのか、興味ある方は調べてみて下さい。w

まぁ、最初に書きましたように、
ここは自由な部分ですのでこの程度で止めておきます。
何れにしても、自分すら他人になる可能性もあるので、
誰が見てもわかりやすい名前にしておく
というのが大事です。

それでは、今日はこの辺で。

2008年10月14日火曜日

セカフェス無事終了! ありがとうございます。

というわけで、3日間にわたって繰り広げられた
「2008年秋の音楽祭ーセカフェスー」は無事終了しました。

081013d


3日目はまず「魂のバラード」umanosuke Runo さんが登場。
しっとりと心にしみる大人の音楽を聴かせて下さいました。
続いてはがらりと雰囲気変わってテクノタッチのRMO登場。
昨晩出演されたZEROの masa Homewood さん、mellchan Criss さんに加えて
なんと kaito Paulse さんもギターで出演。
いやー、この人が演奏しないなんて話はないよなぁ
なんて思ってただけに嬉しい驚きでした。w
そして最後は、naturalway Flow さんの花火で美しく、、、
なのですが、最後の最後は会場中が火の海に!w
文字通り、熱い、華々しいお祭のエンディングとなりました。

081013e
081013f


いやホントに今回のお祭は
いろんなタイプのミュージシャンが登場しておもしろかったですねー。
大変刺激されるところもあり、
考えさせられることもありの3日間でした。
何れにしても、セカンドライフというのは
音楽を通じて人と人とが出会い、心を通わせる
真にライブな場だなぁ、と改めて思いました。
だって、アーチストと観客がそれぞれどこにいようが
この場に集まって一つになれるんですからね。
ある意味RLのライブ以上かもしれません。
SIMの50人という制限も
逆に、アーチストと観客がより親密に
通じ合える環境なのではないかと。。。
お互いがよく見えますからね。w

まぁ、そんなこんなのセカフェスでしたが、
たくさんの人に来て頂いて
SLライブの魅力をお伝えできたんではないかなと思います。
いらして下さったみなさん、本当にありがとう。
そして主催の jabara Jannings さん、演出のかいとさんはじめ
スタッフの皆さん、そしてミュージシャンの皆さん
お疲れ様でした。
またどこかでご一緒できたら嬉しいですね。

それでは、また!
ありがとうございました。

セカフェス3日目、間もなく!

というわけで、土曜日から始まったセカフェスも
いよいよ最終日を迎えました。
この後21:00から
馬之助さん、RMOさん、れーこさんの出演です。
そしてそして!
あのナチュさんもフィナーレに参戦!
見逃せない3時間です。
どうぞよろしくお願いします。

■「2008年秋の音楽祭ーセカフェスー」メインステージ
http://slurl.com/secondlife/Jabara%20Land%20Atlantis/41/222/106/

2008年10月13日月曜日

スクリプトの話(9)〜長い時は改行しよう

081013b


上の写真は前に書いた、自分の土地に置いておいて
タッチすると自分のものでないプリムの数を教えてくれるスクリプト。
その実際のエディターの画面です。
せっかく見やすいように字下げをしてみたものの、
5行目の関数のところが長くて次の行にまではみだしてしまい、
またまた見にくくなってしまってます。
これではエラーが出た時の行数も数えにくい。。。

こんな時は思い切って、関数の途中でも改行してしまいましょう。
ええー、そんなことしていいの? と思われる方もあるでしょうが、
思い出して下さい。
コンピュータは「;」が出てきて初めて命令の文の最後と判断します。
それで「;」を付け忘れるとシンタックスエラーだよ、
と怒られたのですが、
これを逆手に取れば、
「;」が出てくるまでは途中に改行があろうが何があろうが、
コンピュータは途中で切れてるなんて思わないわけです。

そこで、適当な単語やコンマの位置などで改行してしまいます。
勿論、キーワードや単語の途中で切ってはダメです。
ここでは「myPos,」のところで切ってみましょう。
更に、処理の頭と間違えないように、ここでも字下げしましょう。

default {
  touch_start(integer total_number) {
    integer numPrims;     // 自分のものではないプリム数
    vector myPos = llGetPos(); // オブジェクトのある場所
    numPrims = llGetParcelPrimCount(myPos,
      PARCEL_COUNT_OTHER,FALSE);
    llSay(0, (string)numPrims + " are not mine!");
  }
}

さっきより見やすくなりました。
これを保存した結果が次の写真です。
無事コンパイルされて保存されました。

081013c


というわけで、長くなったらどんどん改行しちゃいましょう。
その方が見やすくなって
自分自身わかりやすくなりますから。

それでは、今回はこの辺で。

スクリプトの話(8)〜「if」の場合

前回は字下げがスクリプトを見やすくするということを書きました。
ここでやっかいなのが「if」の処理の場合です。
何故かというと、「if」の場合はその後単純に「}」で終わることよりも、
「else if...else if...」つまりそうでない場合、というのが
いくつも続く場合があるからです。
だからこそ使い勝手のいい道具であるわけですが。。。

例えば、タッチすると色が変わるスクリプトを作っていて、
ダイアログで色名を選んだ後の処理をしているところを想定して、
前回の【例1】に忠実に書いていってみましょう。

【例1】
if (message == "yellow")
{
  llSetColor(<1.0, 1.0, 0.0>, ALL_SIDES);
}
else if (message == "red")
{
  llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES);
}
else if (message == "blue")
{
  llSetColor(<0.0, 0.0, 1.0>, ALL_SIDES);
}

う〜ん、何とも間延びしたのと、
結局このif文、どこまで続いているのか
わかりにくくなってますね。
分岐もいくつあるのか。。。

そこで、ここでは【例2】の方法をとりながら、
その変形でいくのをお勧めします。
つまり、

if (message == "yellow") {
  llSetColor(<1.0, 1.0, 0.0>, ALL_SIDES);
} else if (message == "red") {
  llSetColor(<1.0, 0.0, 0.0>, ALL_SIDES);
} else if (message == "blue") {
  llSetColor(<0.0, 0.0, 1.0>, ALL_SIDES);
}

何と、「else if(elseの場合も同じ)」のキーワードを
前の条件の終わりの「}」の後に書くのです。
こうすると大元の「if」と条件の終わりの「}」が並び、
しかも、「}」の数をぱっと見ただけで
条件がいくつに分岐してるかわかるというものです。

私個人は一番間違えやすいのはこの「if」の分岐のところです。
複雑なものになってくるとすぐにたくさん分岐してしまい、
その途中で何かを書き漏らすということはしばしばです。
それを防ぐためにも上の書き方は有効です。
なので、個人的には結果として、【例2】の方法を
お勧めしたいところです。

さて、これに関連してもう一つ。
「do〜while文」の書き方についても説明しておきます。

繰り返しの処理をするのに「while文」というのと
「do〜while文」というのがあります。
似てますが、使い方も処理の結果も全然違うので
注意が必要です。

「while文」は簡単で、

while (繰り返し条件){
  繰り返す内容
}

という形で、繰り返し条件に当てはまれば
「{」〜「}」の処理を繰り返すことになります。
言い換えると、条件に当てはまらなければ
「while文」の処理は一度も実行されません。

対する「do〜while文」は、

do {
  繰り返す内容
} while (繰り返し条件)

という形をしていて、必ず一回処理をして、
処理が終わったら繰り返し条件を確認して、
当てはまったら繰り返し、
当てはまらなかったらこの文を抜けて次の処理へと進みます。

ここでも、【例1】の方法で、

do
{
  繰り返す内容
}
while (繰り返し条件)

と書いてもいいのですが、
そうすると「do」の終わりの「}」が「while」の前にあって、
あたかも「while」は別物、「while文」のはじまりのように
見えてしまします。

今見たように「while文」と「do〜while」文は
処理の内容が全然違うので、
この違いを際だたせるためにも、「do〜while文」の場合は
先に示したように、

do {
  繰り返す内容
} while (繰り返し条件)

とするのがよいのです。
これで「while」は「do」で始まる処理の
終わりの部分なんだよ、というのがはっきりしました。
「else if」の場合と似てますね。

それでは長くなりましたので、今回はこの辺で。

スクリプトの話(7)〜間違いを減らすために……

さて、これまでスクリプトについて6回にわたって書いてきましたが、
殆どはそんなのは知ってる、という内容だったと思います。
実は本題は今回から。
ひとつには、どうやったら間違いを減らせるのか、
もう一つはどうみても間違ってなさそうなのに何故動かないか
その原因追求、トラブルシューティングの方法について
考えていってみたいと思います。

今回はまずその前半。
どうやったら間違いを減らせるか、です。
それはズバリ、スクリプトを見やすく書く、です。
では見やすいスクリプトとはどういうものでしょう。

実際のプログラムやアプリケーションの開発現場では、
一人でプログラムを全部書くということはありません。
大抵は部分部分分担してプログラムを作っていくことになります。
それから、実はよくあることですが、
あるプログラムを担当していた人が
急に別なプロジェクトに引き抜かれて
逆に別なプロジェクトにいた人がその人を引き継ぐ
なんてこともあります。
そうなると、一人一人が好きにプログラムを書いていたのでは
何が何だかわからなくなり、収集がつかなくなります。
少なくともプロジェクト内部の人間が見れば
誰でもすぐにわかるプログラムを書いておく必要があります。
そこで、大抵の場合、コーディング規約というものが作られます。
こういう時はこう書くんだよ、というルールですね。

この規約は、勿論、プロジェクトの数だけあると言っていいのですが、
大まかなところは大体世界的に共通していて、
リンデンが推奨しているスクリプトの書き方もほぼそれに準じてます。
スクリプトの場合は自分一人で書くわけですから、
自分の好きなように書いていいように思えますが、
実際は、何日もかけて書いているスクリプトだと
過去の自分も他人みたいなものです。
僕も動かなくてほったらかしにしてたスクリプトを
何ヶ月か後で見た時に
我ながらややこしいスクリプトだなぁ、と難儀した覚えがあります。w
こんなわけで、リンデンの推奨を参考に
自分なりの規約、スタイルを作っておくといいでしょうね。

このコーディング・スタイルということでは
これだけで本が1冊できるくらいのものですので、
ここでは簡単に要領だけ述べていきたいと思います。
その第一は、インデント、行の始まりを下げていく書き方です。

間違いで一番多いのが文法の誤りシンタックス・エラー
その中でも多いのがかっこが対になってないもの、
と前に書きましたが、これを防ぐ目的と。
それからその処理がどこからどこまで続いているか
一目でわかりやすくするために、
処理のまとまりを示す「[」「}」の単位で
行の始まりをどんどん右にずらしていく書き方です。
いつもの例で見ていきましょう。

【例1】
default
{
  state_entry()
  {
    llSay(0, "Hello, Avatar!");
  }

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

【例2】
default {
  state_entry() {
    llSay(0, "Hello, Avatar!");
  }

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

おわかりになりますか?
【例1】は、「[」を独立した行に書く書き方で、
これだと同じ階層に「[」と「}」がいるので、
対応関係は見やすいですね。
但し、難点もあって、
やたら縦に長く間延びすること。
スクリプトエディタの画面は小さいので
あまり長いと追うのが大変になってきます。

【例2】は、「[」をそのまとまりを示すキーワードの後に書くもので、
これだと随分とすっきりまとまって見えます。
慣れないうちはわかりにくいと思うかもしれませんが、
考えてみれば、終わりの「}」を忘れることはあっても、
始まりの「{」を忘れることはなく、
寧ろキーワードと終わりの「}」が対になっていることがはっきりして、
そのキーワードの処理がどこで終わってるか、
わかりやすいとも言えます。

どのくらい字を下げるか、ですが、
C言語のスタイルブックなどを見てみると
4文字下げがいいという人、
いや、2文字下げがいいという人様々ですが、
ここでは素直にタブキーを使って送ることにしましょう。
スクリプトエディターではタブを使うと
自動的に4文字下げるようです。

というわけで、まだやっていなければ、
【例1】でも【例2】でも
自分に合っている、わかりやすいと思う方法で
うまく字下げをして書いてみて下さい。
きっと見やすくなるはずですよ。

長くなりましたので、今日はこの辺で。
それでは、また!

3連休!

いやぁ、今更ですけど、この3連休、
久しぶりにゆっくりとさせて頂いて助かってます。
普段は日曜日にネット音楽雑誌の発行なんかやってるもんだから
あっという間に日曜の夜中になってしまい、
休むどころではないのです。
やっぱり1日多いというのはいい。w

で、9月末に仮住まいから戻って来ての
部屋の整理や不要なものをゴミにして処分したりと
ようやく片付けを始められるようになりました。
それと、やっぱりミュージシャンとして大事なのが
楽器のセッティング。。。

この1年の仮住まいではさすがに
5台のシンセサイザー群と3台のパソコンを持ち込むわけにもいかず、
小型の楽器を買い足して、
何とかPC1台でライブやれるような環境を作ってましたから
今度はそれと従来からある大きなシステムとの合体作業です。
本当はセカフェス前にはやりたかったのですが、
なかなか十分な時間が取れず
環境の変更でうまくいかなくなるのを嫌って
今まで来てしまいました。
これからはもっとパワーアップしたステージを
お見せできればと思ってます。

081013a

それから。。。
実は今度の木曜日、10月16日から20日まで
日本を離れ、アルメニアという国に行って参ります。
ご存知の方はあまりいらっしゃらないかもしれないので、
地図をつけておきますが、
西がトルコ、南にイラン、東にアゼルバイジャン、
そして北がグルジアで更にその北がロシアという位置関係です。
そうそう、吹奏楽をやっていらした方には
アルフレッド・リードの曲でおなじみかもしれませんね。
ノアの箱船が流れ着いた
アララト山のある美しい所と聞いています。
次回のライブは10月25日(土)ですが、
このアルメニア行きで何か新しいものが生まれればと思ってます。

で、その準備もしているこの連休。
また今晩もセカフェスがあるし、
久しぶりにRLでのんびりしてるヒロシであります。w

セカフェス2日目終了!

081012d


いやー、見てきましたよ、
セカフェス2日目。
21時からはRiZさん、GA-GOさん、ZEROさんのステージ。
何れもすごい盛り上がりでしたが、
特にGA-GOさんのステージはライブ感がよかったですね。
使ってるアニメーションの数もハンパではないですね、あれは。
よく動く動く。w


081012e


あと、ZEROさんのステージは
音楽もさることながら、
メンバーの会話がおかしかった。w
僕は普段一人でやってるのでね、
いいですね、ああいう感じでお互いつっこみながら
ステージ進めていくのも。
何れはバンドもやってみたいものですが、
お互いの時間がどうにもねぇ。^^;

081012f


というわけで2日目も大変な盛り上がりのうちに終了。
いやぁ、これだけまとめて人の音楽聴くのは久しぶりでした。w
十分堪能させて頂きました。
ありがとございます。

そしていよいよ明日は最終日!
魂のバラード、馬之助さんや
RMOさん、れーこさんの登場。
これまた楽しみです。
ではまた明日!

セカフェス2日目!

昨晩は無事セカフェスでのライブを終えることができました。
いらして頂いた皆様、ありがとうございます。
この場をお借りしてお礼申し上げます。
続いての naturalway Flow さんの
ミュージック・スターマインも素晴らしかったですねー。
ナチュさんは最終日のフィナーレにも出演されるとのこと。
これまた必見です。

さて、2日目の今日は18:00に
横浜マーチングバンドのパレードで始まりました。
ちょうど今日RLでは横浜ジャズプロムナードというのをやっていて
知人の関根敏行さん(アバター名 Mugigi Toshi さん)も
出演していることもあって
何とも不思議な偶然を感じないではいられないのでした。
SLのバンドにはタイガーカフェのNada Drykeさんや
taiji Lorefieldさん、Ami Nicholls さんといったこれまた知人が参加してます。w

081012a


パレードは Jabara Land の通りを出発し、
そのうちSIM境を越えて海上へ!
海上をパレードできるのもSLならではですね。w
その海上ではパレードに連動してナチュさんの花火が!
実に素晴らしい演出でした。

その後舞台を空中にあるアトランティスホールに移しての演奏会、
「威風堂々」や「軍艦マーチ」など
吹奏楽の名曲を素晴らしい演奏で聴くことができました。
途中時々音が途切れたのは残念!
でもホント難しいいんですよ、SLで音楽やるの。

081012b
081012c


というわけで、いよいよこの後21:00から
メインステージでのライブが始まります。
今晩の出演はRiZさん、GA-GOさん、ZEROさんの3組。
是非お見逃しなく!

■「2008年秋の音楽祭ーセカフェスー」メイン会場
http://slurl.com/secondlife/Jabara%20Land%20Atlantis/41/222/106/

2008年10月11日土曜日

今晩22:00! セカフェスに出演!

さて、かねてより告知されておりました
「2008年秋の音楽祭—セカフェス—」が
今晩22:00より3日間の日程でスタートします。

081011d


そして、何と何と、
この僕がそのトップ・バッターとして出演することになりました!
いやぁ、そんな大役が果たせるのかどうか
そもそもこんな所に出ていいのか、未だに疑問ではありますが、
泣いても笑っても10月11日(土)当日になってしまいましたぁ。^^;
皆さんにお祭を楽しんで頂けるよう
一所懸命頑張りますので、
是非是非いらして下さいね。

●Hiroshi Kumaki @ Second Life Autum Music Festival
日時:10月11日(土)22:00〜23:00
会場:Jabara Land Atlantis(メイン会場)
http://slurl.com/secondlife/Jabara%20Land%20Atlantis/41/222/106/

また、このすぐ後、会場を変えて、
naturalway Flow さんのミュージック・スターマインが行われます。
こちらは海に浮かぶ豪華客船の上から花火を見るという
なかなかロマンティックなものであります。
こちらも是非お見逃しなく!

●Natulax Music StarMine
日時:10月11日(土)23:00〜24:00
会場:Jabara Land Atlantis(豪華客船「ゆみ丸-GT」)
http://slurl.com/secondlife/Jabara%20Land%20Atlantis/159/130/24

それからそれから!
明日の12日には Yokohama Marching Band のパレード
及び演奏会があります。
これも必見です!
SL内でマーチング・バンドのパレードなんて、ねぇ!

●Yokohama Marching Band パレード
日時:10月12日(日)18:00〜18:30
会場:Jabara Land Atlantis(次のSLURL地点からスタート)
http://slurl.com/secondlife/Jabara%20Land/130/226/28/

●Yokohama Marching Band 演奏会
日時:10月12日(日)18:30〜19:00
会場:Jabara Land Atlantis(アトランティスホール)
http://slurl.com/secondlife/Jabara%20Land%20Atlantis/122/112/81/

この他にも、勿論、有名なミュージシャンの方々が続々出演されます。
詳しくはこちらのサイトをチェックして下さいね!

■「2008年秋の音楽祭—セカフェス—」公式サイト
http://secofes.slmame.com/

スクリプトの話(6)〜実はよくある入力ミス!

さて、前の2回で、文法的な間違いのシンタックス・エラーと
型の違いからおこるタイプ・ミスマッチについて触れました。
これらはいかにもプログラム的な、決まり事の世界で、
初心者には難しい感じのする部分ですが、
実は意外によくあるのがもっと単純な入力ミス、
スペルミスによる間違いです。

リンデン・スクリプトはC言語の仕様によく似ているのですが、
C言語同様、アルファベットの大文字と小文字を区別します。
つまり、大文字と小文字を間違えただけでもう動きません。
llSay() は誰でもよく知っている有名な関数ですが、これを

llsay()

と書いただけで、もう別物とみなしてしまい、恐らくは、

「Name not defined within scope」
(決められた範囲内でこの名前は定義されていません)

と言われてしまうことでしょう。
逆に言うと、ちゃんと定義しているはずなのにこれが出てくるのは
スペルミスの可能性が高いということになります。

前にも書きましたが、スクリプトのエディタはよくできていて、

ステートとリンデンで用意されている関数は赤い文字、
イベントは水色の文字、
型を表すキーワードと文字列は緑色の文字
リンデンで用意されている定数は紫色の文字
コメントはオレンジの文字

に色が変わります。
llsay と書いて色が赤くならなかったら、スペルミスということです。
llsay を llSay に変えた途端に赤くなるでしょう?
この色を頼りに入力ミスによるエラーを減らせます。

ただ、自分で定義した変数や関数は色が黑のままです。
なので、この場合は、定義したところから
コピー&ペーストして使うことをお勧めします。
以前、Lifebound Records にある最新ブログ情報ボードを作った時に、
どうも期待通りに動かないのでよくよく調べてみると、
親スクリプトで「getRss」というメッセージを送っていて、
子スクリプトでは「getrss」を待っていた、ということがありました。
いつまで待っても小文字の「getrss」が送られてこないので、
スクリプトも実行されないのでした。
コピーしていれば防げたミスでした。

この関連で触れておきたいのが、
変数名を変更しなければならなくなった場合です。
複雑なスクリプトを書いているうちに
どうしても似たような変数が必要になってきた、
そこで、最初に定義した変数の名前も変更することにした、
というような場合ですね。
この時、普通に定義からコピー&ペーストしたのでは
今度はペースト漏れが生じて、
またまたそこでエラーが発生する可能性が出てきます。
こんな時は「置換」の機能を使います。

081011a


スクリプト・エディターの「Edit」メニューを開くと
一番下に「検索/置換」というのがあります。
これを選んで開く画面の
「検索」の入力ボックスに変更前の変数名をコピー&ペースト、
「置換」の入力ボックスに新しい変数名を入力します。
そして「検索」というボタンをクリックすると
「検索」のボックスに入れたのと同じ文字を探して強調してくれます。
変更してよければ「置換」ボタンをクリック、
すると「置換」のボックスに入れた変数名に変更して、
次に変更前の文字がある場所に飛んで行ってくれます。

081011b
081011c


「すべて置換」というボタンもありますが、
もしかして変えてはいけないところもあるかもしれないので、
「置換」ボタンで1つずつ確認しながら変更するのをお勧めします。
もし変えたくない文字のところに来たら、
「検索」をクリックすると、置換せずに次の場所を探します。
こうして画面から強調される文字がなくなったら
変数名の変更は全て終わったことになります。

今回は意外とよくある入力ミス、スペルミスを減らすための
コピー&ペーストと
検索/置換の機能について書いてみました。
もしまだやったことがなければ
是非試してみて下さいね。
それでは、今回はこの辺で。

スクリプトの話(5)〜次によくある間違い

前回は一番多く見るエラーとして、

「ERROR : Syntax error」

を取り上げましたが、
今回は次によく見るものとして

「ERROR : Type mismatch」

を見ていきましょう。

まず例です。
次のスクリプトは、自分の土地に置いて、
タッチすると自分のもの以外のプリムがあるか、
その数はいくつかを教えてくれるものを作ろうとしています。

default
{
  touch_start(integer total_number)
  {
    integer numPrims;     // 自分のものではないプリム数
    vector myPos = llGetPos(); // オブジェクトのある場所
    numPrims = llGetParcelPrimCount(myPos,PARCEL_COUNT_OTHER,FALSE);
    llSay(0, numPrims + " prims are not mine!");
  }
}

これを実行しようとすると、

「(7, 43) : ERROR : Type mismatch」

と言われてしまいました。
8行目の「llSay...」のところに何か問題がある。。。
そうです。
「Type mismatch」とは、一緒に処理しようとしている
変数の「型」が合っていないことを言います。
ここでは「integer」=整数である「numPrims」と文字列を
足そうとしたので怒られてしまったわけです。
今回のようにどうしても異なる型を足したい時は、
型を変換する必要があります。
今回の場合は、llSay が要求しているのが文字列ですから
整数の numPrims を文字列に変換する必要があるのです。
こんな時は変換先の型名をかっこでくくって
その変数の前につけてあげるといいですね。
上記の例の場合、

llSay(0, (string)numPrims + " prims are not mine!");

としてあげればスクリプトは無事コンパイルできて実行できます。

上の例の場合は簡単なので、まず間違えることはありませんが、
複雑なスクリプトになってくると
同じような名前の変数名が増えてきます。
例えば、オブジェクトの色を変えるスクリプトを作る時に、
選択できる色の種類を入れておくリスト型の colorlist、
リストから取得した色名を処理する文字列の colorname、
実際に色を設定する時に使うベクトル型の colorといった
3つの変数を用意する場合などです。
長いスクリプトを書いているうちに、
あれ? 色の名前は color だっけ、colorname だっけ?
なんて自分でもわからなくなることはよくあることです。w
そんな時に、この型間違い、
「ERROR : Type mismatch」
に出会しますね。

自分で定義した変数で間違っちゃうというのは
何ともトホホな話ですが、
それでも発生する以上は回避しなければなりません。
そんな時お勧めなのが、変数の前に型を表す文字をつけておくことです。
さっきの色の例で言うと、

リスト型のものは lstColor
文字列型のものは strColorName
ベクトル型のものは vecColor
もし整数型のものもあったら intColorNum

なんていう風にしておくと、例えば

llSay(0, "Now color is " + vecColor);

なんて書いた瞬間に、あれ、これは型が違う、と気づきやすくなります。
この方法は最近のプログラミングの世界では
あまり流行らなくなってきてるようですが、
初心者のうちは型を強く意識する上で有効だと思いますので
是非試してみて下さい。

それでは、長くなりましたので、
今回はこの辺で。

スクリプトの話(4)〜一番多い間違い

さて、いよいよ今回からエラーの原因を調べて
スクリプトを動かしていくためのコツについて
書いていきたいと思います。

まず、最初に、スクリプトを書いていて
一番多く出会うエラーは何と言ってもこれでしょう。

ERROR : Syntax error

「syntax(シンタックス)」というのはもともと言語学の言葉で
「統語論」と訳されていますが、
意味の通じる文になるための単語の順番などの決まり……
要するに「文法」ということですね。
シンタックス・エラーというのはコンピュータが、
「これって何か抜けてない? 文になってないよ?
意味わかんないよ〜」
と言っているようなものです。

例えばいつものサンプルスクリプトをいじってみました。

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

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

これを保存しようとすると、
「(5,4) : ERROR : Syntax error」
と出ました。
最初のかっこの中は行数と文字位置を示しています。
但し0から数えますので、
この例では6行目の5文字目、、、
とすると「}」になります。
何故この「}」がおかしいのでしょう?
本当は、この「}」はおかしくはないのです。
が、コンピュータは、この場所にもっと別のものが来るのを
期待していたわけです。
となるとその前がアヤシイ。。。。
そうです。
llSay(0, "Hello, Avatar!")の後に、
文の終わりを表す「;」が抜けていました。
コンピュータへの命令を表す文の終わりには必ず「;」をつけます。
先ほどの例では「;」がなく、文が終わっていないのに
「}」が出てきたので、コンピュータは、
「まだ文が終わってないのにおかしくない?」と言ったわけです。

大体こんな感じで行番号と文字位置を参考にしながら
エラーの原因を探していきますが、
一番多いのは次のような理由による
「シンタックス・エラー」でしょう。

(1) 文の終わりに「;」が抜けている。
(2) 関数の中で使われているかっこの「(」と「)」の数が合っていない。
(3) 処理のまとまりを表す「{」と「}」の数が合っていない。
(4) 文字列の始まりを表す「"」が終わりの「"」で閉じられてない。

もっとも、最後のものはすぐに気づきます。
何故なら、リンデン・スクリプトのエディターはよくできていて、
ステートと関数は赤い字で、
イベントは水色の文字で表されますが、
文字列がちゃんと「"」で閉じられていないと
最初の「"」以下全ての字が文字列を表す緑色になるからです。
一瞬にして色が変わるので、
すぐに気づきますよ。w

というわけで、「ERROR : Syntax error」と出たら、
まずは上の4つを疑ってみて下さい。
わかってはいても、案外やるもんなんですよね。w

それでは、長くなりましたので
今夏はこの辺で。

2008年10月10日金曜日

スクリプトの話(3)〜イベントについて

「イベントについて」というタイトルを書いてすぐに、
僕が書くと音楽イベントか何かの記事のようだと
自分で笑ってしましましたが、
ここはリンデン・スクリプトで言う「イベント」、
つまりコンピュータへの命令が実行される「きっかけ」の話です。

前回のおさらいをしておくと、スクリプトには

① 登場人物としての変数と関数の定義
② 場面としてのステート、特に第一幕としてのdefaultステート
③ その場面におけるセリフや動作である命令
④ 命令が実行されるためのきっかけであるイベント

が書かれてなければなりません。
これがスクリプトが動くための最低条件というわけです。

が、実際にスクリプトが動くためには
何度も繰り返しているようにきっかけ=イベントが必要です。
イベントによって動くプログラムのことを
専門用語で「イベント・ドリブン」と呼んでいます。
「event-driven」という英語から来ていますが、
「driven」は「drive」=「ぐいぐい前に動かす」の変化形ですから、
「イベントがぐいぐい動かすプログラム」というわけですね。
リンデン・スクリプトは正にそういう
イベント・ドリブン型のプログラムというわけです。

それでは、プログラムが動くためにはどんなイベントがあるか、
ちょっと見ておきましょう。

On_rez(オブジェクトが出現した時)
touch_start(オブジェクトがクリックされた時)
Changed(オブジェクトに変化があった時)
Attach(オブジェクトが装着された時)
Money(オブジェクトに対して支払いがされた時)
Listen(llListenから発言内容を聴くよう命令された時)
Sensor(llSensorやllSensorRepeatから検知するよう命令された時)
timer(llSetTimerEventで指定された時間でイベント内の命令を繰り返す)
Link_message(親プリムのllMessageLinkedからメッセージを受け取った時)

まだまだ他にもありますが、何れもオブジェクトに対して
何らかの変化が加えられた時、というのがわかるでしょう。
でも待てよ、そうすると、
別に何もきっかけがなくても、変化がなくても実行したい場合は?
そんな命令は実行できないのでしょうか?

その為に用意されているのがおなじみ「state_entry」のイベントです。
「state_entry」とは「そのステートに入った時」という意味。
何にもないところから始まる「第一幕」が
「default」=「何にもない」というステートでしたが、
幕が開いてすぐ、まだ何にもきっかけがない状態こそ、
「幕が開いたよ!」に当たるこの「state_entry」なわけです。

新しいスクリプトを作ると必ずサンプルスクリプトが書いてあって、

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

となってますね。
defaultステートの、state_entryというところに書いてあるので、
何にも変化が起きなくても、
このスクリプトが作られたらすぐに
「Hello, Avatar!」と喋るのですね。
どういうイベントにしたらいいかわからない時は
まずはこの state_entry を使ってみるといいと思います。

     *   *   *

今回までスクリプト全体についてのやや抽象的な話をしてきましたが、
いよいよ次回は「一番多い間違い」について
より具体的に書いていきたいと思います。
どうぞよろしくお願いします。

スクリプトの話(2)〜スクリプトの条件

さて、前回は「スクリプトは台本だ」と言い切ってしまいました。
そこで、今回はドラマや演劇の台本をイメージしながら
スクリプトについて考えていくことにしましょう。

ドラマや演劇の台本で、
一番最初に何が書いてあるかご存知ですか?
そうです。
登場人物のリストです。
このドラマにどんな人たちが出てくるのか、
一番最初にまとめて書いてあります。
リンデン・スクリプトも同じで、
そのスクリプトで使う変数や関数を
基本的には最初にまとめて書いておきます。
これを変数や関数を定義すると言います。
スクリプトではここに書いていない変数や関数を
物語の途中で突然登場させたりすると、
怒られちゃいます。w
大抵こういう時は次の英語が表示されます。

・Name not defined within scope.
「決められた範囲の中でこの名前は定義されていません。」

さて、登場人物を書き並べたところで
いよいよドラマが始まります。
ドラマは短いものだと1場面で終わりますが、
長いものはいくつにも場面が分かれますね。
この場面に当たるのが「ステート」と呼ばれるものです。
英語の「state」は「状態」という意味ですが、
詳しい説明はあとでしますので、
ここは、ドラマの場面に当たるのが「ステート」だ、
くらいに捉えておいて下さい。

どんなドラマにも始まりの1場面があります。
それに当たるステートが「default」と呼ばれるステートです。
この「default」はどんなスクリプトにも必ず必要で、
しかも一番最初になければならないステートです。
この言葉は既に「デフォルト」という日本語にもなっていますが、
もともとは「何にもない」という意味で、
物語(スクリプト)が始まったばかり、
まだ何にもない状態、
幕が開いてすぐの状態を表しているわけです。

さて、台本では、この最初の場面の中に
主人公たちが喋るセリフや動きを書いていくわけで、
このセリフや動きに当たるのがスクリプトの様々な命令ですが、
役者が勝手に喋ったり動いたりしていいわけはありませんね。
もしそんなことになったら、セリフや動きが
ちぐはぐになってしまいます。
そこで、台本ではセリフや動きのきっかけが記してあります。
このきっかけのことをスクリプトでは「イベント」と言っています。
スクリプトのどんな命令も
必ず何かのイベントの中に書かなければ、
簡単に言うと、必ずきっかけがないと実行されないということを
覚えておいて下さい。

     *   *   *

何だか長々と一気に書いたので、
わけがわからなくなったかもしれませんので
最後にスクリプトという台本の流れをまとめておきますね。

変数の定義(登場人物紹介)
関数の定義(登場人物紹介)

default ステート(第1幕)
   イベント発生(きっかけ)
      コンピュータへの命令(セリフ、動作)

その他のステート(第2幕、第3幕。。。)
   イベント発生(きっかけ)
      コンピュータへの命令(セリフ、動作)

もしうまくコンパイルできなかったりする場合は、
この流れになっているか、確認してみて下さいね。
それでは、今日はこの辺で!

スクリプトの話(1)〜そもそもスクリプトって?

さて、この日記でもその都度触れてきましたが、
バーニング・ライフの僕のキャンプでは
いろんなところでスクリプトが使われていました。
限られた時間の中で結構複雑なものを書いたりしていましたので、
当然あちこちにミスがあり、思い通りに動かないこともありました。w
自分で自分のミスを発見しながら、
ああ、そうそう、こういうところ間違いやすいんだよね〜、
なんて思いながら、
いつかその間違いやすいポイントというか
間違いを減らすコツというか、
そういうものをスクリプトに取り組んでみようと思う方々に向けて
書いてみようと思っておりました。

あることを実現するのに
サンプルとなるスクリプトはたくさん公開されていますが、
いざ自分のものに取り込もうとするとうまく行かなかったり、
コンパイルはちゃんと成功して保存もできるのに
実際には動かなくてどこがおかしいのかわからない、
或いは、エラーが表示されてるけど
どこがおかしいのかわからない、
といったことが間々あると思います。
ここではそうならないためのスクリプトの書き方や
困った時の解決の仕方について綴っていきたいと思います。
不定期更新になるでしょうが、
のんびりお付き合い下さい。w

     *   *   *

で、1回目の今日は、
そもそもスクリプトって何? というところから考えてみましょう。
英語の「script」は、もともとラテン語で
「書かれたもの」という意味です。
書かれたものなら何でもスクリプトです。
もともとは手書きの文字のことを表していました。
そしてその文字で書かれた碑文などを意味していました。
が、英語で「script」というと最も一般的には
「放送や演劇、映画などの原稿、台本」ということになります。

原稿や台本には番組の段取りや出演者の発言内容、
或いは役者の仕草やセリフが書いてあります。
出演者や役者は原稿や台本の流れに沿って演じているわけですね。

セカンドライフのリンデン・スクリプトも同じです。
プログラムなんて考えると難しそうですが、
自分で作ったオブジェクトを動かす原稿、台本と思って下さい。
そのオブジェクトを主人公にしてどんなドラマを演じさせるのか、
それを時間に沿って書いていくのだと考えれば、
何だかワクワクしてきませんか?

というところで、長くなってしまいましたので、
この続きはまた次回ということに致しましょう。

2008年10月8日水曜日

【新商品】CD「シルクロード」発売!

新商品の第2弾、久しぶりのCD発売です。
考えてみたら24時間の時の「Make the Miracle Happen」と
Sena Pinklady さんの限定版「Shining Rain」以来じゃないかな。

081007a


というわけで、次の2枚同時リリースです。

・「Hiroshi Kumaki/シルクロード」
・「Hiroshi Kumaki/バーザールの人々」

何れもシルクロード関係の曲で、
特に「シルクロード」は、
SilkRoad SIM1周年を記念して作曲されたもの。
価格は何れもL$200で
Lifebound Records 本店で扱っています。
どうぞよろしくお願いします。

■Lifebound Records
http://slurl.com/secondlife/Fanghammer/81/94/21/