Red Dead Redemption – 荒野に散る

とある制約から部分的に解放されたので、前々から気になっていた、Red Dead Redemptionを購入。

PS3しか持っていないので、PS3版です。噂によれば、Xbox360版よりもグラフィックの質が悪いとかなんとか…。ベヨネッタもそうでしたが。プレイしてみると、言われれば「たしかに劣化しているのかもねえ」と思うのですが、遊んでいる最中はさほど気になりません。ディティールが残念と感じるところもありますけれど、おおむね、問題になるほどではないと思います。

ゲームは、何の説明もなく始まります。主人公であるジョン・マーストンは、列車に乗せられ、アメリカの荒野にある、とある砦を目指します。そこでビル・ウィリアムソンという(頭の悪そうな)人物と話をするのですが、撃たれた!w そのまま倒れて、荒野に置き去り…。え、もう終わり? ポカーンとしていると、馬車がやってきて、マーストンを回収。どうやら助けてくれたようです。

なぜマーストンはこの土地にやってきたのか、そもそもマーストンはどんな人物なのか、なんの説明もなく始まり、進みます。これにはビックリ。ちょっと話を進めると、助けてくれた牧場主ボニーさんに一部を打ち明けるのですが、これほど情報なく始まるというのには驚きました。しかし、これもプレイヤーを引き込むための、小説のような表現方法なのかもしれません。

このゲーム、とにかく自由です。ミッションはあるのですが、すぐにやらなければならない性質のものではなく、好きなときに進められるようになっています。ストーリー上、すぐに特定の場所に行かなければならないように思えても、まったく無視して、隣町に行くとか、そういうことができてしまいます。

街中で銃を構えることができ、一般人に向けると…強盗ができますw やりすぎると保安官が来て捕まるらしいのですが…まだそこまではやってません。店の主人を撃ち殺すこともできるそうです。フリーダムすぎるw

とにかく広い荒野を、愛馬にまたがって駆け抜けていく感覚は、かなり「くる」ものがあります。荒野の再現度も高く、どこぞのゲームのようにコピペマップでお茶を濁すようなことはなく、丘やら川やら湖やら、いろいろな地形が現実的な大きさで展開されます。自然にあふれており、空には鳥が飛び(撃ち落とせます)、草原にはウサギが走り(撃ち殺せます)、荒野にはオオカミが走り(撃ち殺せます)、林には謎の肉食獣がいます(食い殺されます)。野草を見つけて、採取しようと馬を降りたら、いきなり謎の獣に襲いかかられて瀕死状態になったのには焦りました。逃げようと馬に乗ったら、馬が殺されて、銃で撃っても避けられて、仕方がないから走って離脱。何の予告もなく後ろから忍び寄られていたのにはまいった。

町を出て、パカパカと歩いていると、前の方で「おい、助けてくれよ」という一団が。これは誰かに襲われているに違いない! と、近づいていったら、縮小マップ(レーダーにもなる)に赤い丸(敵を表す)が大量に出現。なに、なに、何が起こっているの!? と思っていたら、集中砲火を浴びて即死させられました。どうやら、困った人を装ったギャングだったようです…。

とまあ、こんな感じで、限りなくフリーダムな西部劇の世界を冒険できます。これは楽しい。適当に走り回るだけでも、けっこう楽しめます。しばらく、ニュー・オースティンの荒野を駆け回ります。

Spiderの基本構造 (1)

作成中の知識整理用システムであるSpiderの構造について、書いていきたいと思います。

ドキュメント類はJavadocしかない状態なので、これがマニュアルに準じたものになればいいなあ、と思っています。たぶん、明日には、この目標を忘れているんでしょうけど。

Spiderシステムは次のモジュールから構成されます。

  • Spider : システムの中核
  • Network : 知識ネットワーク
  • Concept : 知識ネットワークを構成するオブジェクト
    • Knowledge : 文字列を表すオブジェクト
    • Link : オブジェクトとオブジェクトを関連づけるオブジェクト

情報は、多数のKnowledgeと、それらを結びつけるLinkによって構成されます。これはひとつのネットワークを形作り、それがNetworkに対応します。ネットワークを束ねるのがSpiderです。

Networkはひとつのデータベースに対応することが予定されています。つまり、Spiderは複数のデータベースに散らばった情報を統合するものでもあるのです(もちろん単独のNetwork、すなわちデータベースしか使わないこともできます)。

なぜこのような構造になっているのかを説明します。

まず、人の知識というものが、どのように表現できるか、というところが出発点です。ただ情報が散在しているだけでしょうか。それとも、階層構造になっているのでしょうか。どちらでもありません。たしかに、情報は断片として記憶されています。しかし、それぞれの情報は単独で意味をなすものではなく、他の情報と関連して意味をなします(例えば、「蜘蛛は縦糸を歩く」という知識はそれ単体で有用なものではなく「蜘蛛の横糸は粘着性があり縦糸にはない」という知識と関連することで意味の通るものとなる)。だからといって、あらゆる情報がなんらかの情報に包含されるという関係があるわけでもありません(仮にあるとすれば最も上にある概念は何になる?)。このような思考を経てたどり着いたのが、知識と知識が関連しあい、そこに上下関係などは必ずしも観念されないという、ネットワーク構造です。

Spiderは複数のNetworkを束ねるという役割を果たします。これによって、複数のNetworkをあたかも一つの大きなNetworkであるかのように扱うことができるようになります。しかし、べつに複数のNetworkを作らなくても、すべての要素をひとつのNetworkとして作り上げてしまえば済むようにも思われます。おそらく、そちらのほうが動作効率としてもいいでしょう。

Spiderが考えているのは、動的なNetworkと静的なNetworkの存在です。たとえば、学校で使う教科書を挙げてみます。教科書に書かれた内容は、すべての学生にとって同じものです。しかし、各人の教科書への書き込みや、細かな内容の取扱いは別々です。日本史が苦手な人は、日本の年表に「要チェック」のラベル付けをするでしょう。一方で、得意な人は「チェック不要」のラベル付けをするかもしれません。日本の年表は「静的なNetwork」、個々人の評価は「動的なNetwork」なのです。実際の運用では、教科書のデータを書き込み不可なデータベースに配置し、個々人のデータは読み書き可能なデータベースに配置することになると思われます。Spiderは、そのような事態に対応できるようにするため、複数のNetworkを束ねます。いまのところ、複雑な構造をサポートできるようにする必要性が感じられないので、フラットに束ねることしか考えていません。必要が出てくれば、さらに複雑な束ね方を検討することも考えられます。

Spiderに登場するモジュールは、これだけです。これらを複雑に組み合わせれば、難解な知識も表現できるものと期待しています。

知識整理アプリケーション

以前から、知識整理のためのアプリケーションの作成を進めています。

なかなか納得できるものを作り上げることができず、作っては壊してを繰り返していたのですが、ようやく納得できるものになろうとしています。まだデータベース部分しか作っておらず、エンジンは完成形に近づいているものの、タイヤやハンドルなど車の部分が出来上がっていないという状況なので、今後タイヤ部分などを作っていく最中に気に入らなくなってしまう可能性も残っているのですが。

明確なコンセプトは定めていないのですが、データベース部分については「なるべく制限を設けない」「シンプルなインターフェイス」という方針を採っています。ちなみに使用言語はJavaです。

データベース部分のコードネームは「Spider」。蜘蛛の網のような知識ネットワークの構築を目指して、このような名前を付けました。蜘蛛は興味深い生物で気に入っているという理由もあります。

現在作成中の実装はSQLiteをストレージとして使っているものですが、近い将来にはJavaDB(Derby)を使っていきたいと思っています。いつかは、Hibernateを使ってさまざまなデータベースに対応していきたいのですが…なかなか難しそうです。

MediaCoder

MediaCoder – more than a universal audio/video transcoder – MediaCoder official website:
http://www.mediacoderhq.com/

現在、動画や音声には多種多様なフォーマットが使用されています。なんでこんなにたくさん使われているのか、統一してくれないものかと思うのですが、以前から使われているフォーマットであったり、効率などを改善したフォーマットであったり、それぞれに存在する理由があるので仕方ありません。

しかし、たとえば携帯端末はこれらのうち特定のフォーマットにしか対応していない場合もあり、あるフォーマットから別のフォーマットに変換したい場合があります。そんなときに活躍するのが、上記の「MediaCoder」です。

動画と音声の代表的なフォーマットを網羅しており、相互に変換することができます。内部的には、オープンソースなどの自由に利用できるライブラリを多数搭載し、それらを組み合わせることで処理を実現しているようです。

細かい設定ができるので、使いこなすまで大変かもしれません。しかし、機能がとにかく豊富ですので、ほとんどのニーズを満たすことができると思います。