XML::Feed で XML::RSS::LibXML を使う

はてなRSSではフィードの Auto-Discovery や parse にCPANモジュールのXML::Feedを使っています。XML::Feed は XML::AtomXML::RSS を抽象化したユニバーサルな parser で、且つ Feed Auto-Discovery の機能も実装されている便利モジュールです。作者は Six Apart の Ben Trott 氏。

これまではてなではあまり積極的に XML 関連モジュールは使ってこなかった(正規表現でぶっこ抜き)のですが、はてなRSS に関しては巡回時にフィードを parse するだけなので、一時的なアクセス増に対する parse 回数の増加などはないだろうと判断して、XML::Feed を採用しています。

もとい、先日ベンチを取ったりしていた XML::RSS::LibXML は動作も安定していそうだし、速度的には XML::RSS よりもかなり速いので是非使いたい。ただ、XML::Feed 内の XML::RSS 抽象化クラスであるところの XML::Feed::RSS では、XML::RSS 以外の parser が使えるようにはなっていない。

ということで、手始めに patch を書いて Six Apart宮川さんに連絡しました。どうやら XML::Feed のメンテもしてくれているっぽかったので。

僕が書いた patch では、XML::RSS::LibXML の有無を eval & use で調べてどちらをロードするか決めるものだったのですが、宮川さんがよりベターなインタフェースとして、

use XML::Feed::RSS;
$XML::Feed::RSS::PREFERRED_PARSER = "XML::RSS::LibXML";

my $feed = XML::Feed->parse(shift);
...

みたいな感じで、package 変数で任意の parser に切り替えられるような patch に変更してくれました。まだこの patch が当たったバージョンは CPAN にあがってないようなのですが、もう間もなくかな?

よし、と思って使い始めてみたところ XML::RSS::LibXML の channel メソッドに XML::RSS との互換性がちょっとだけない箇所があったので、そこを修正して牧さんに patch を送りました。こちらは既に取り込まれており、XML::RSS::LibXML 0.04 があがっています。ありがとうございます。

CPANモジュールの contribute

ところで、livedoor のエンジニアあるいは元 livedoor の方々には CPAN Author が結構たくさんいらっしゃいます。はてなでも、Perl コミュニティあるいは CPAN にはかなりお世話になっているので、自分たちの成果をいくばくか還元できないか、と考えています。

目下の目標は、はてな記法の parser とはてなウェブアプリケーションフレームワークオープンソース化で、前者は少し進捗あり、後者は遅々として進まず...といったところです。

でまあ、会社として contribute するというのもアリなのですが、もう少し個人レベルで積極的に CPAN にモジュールをアップする文化を作りたいなあとも常々思っているのですが、なかなかそういう感じにもならない。

なんでかなあ、と考えていたのですがその原因の一つにはてなフレームワークアーキテクチャはてなでの開発手法が関係していそうだな、と感じている今日この頃です。

先日読んで面白かった記事に http://www.javaworld.jp/technology_and_programming/-/17501.html というものがあります。これは JavaStruts をはじめとする MVC フレームワークの話から始まるのですが、この中でフレームワークアーキテクチャが Transition ドリブンなのか、Page ドリブンなのかといった話が出てきます。要は、そのフレームワークは、どういう開発手法に主眼を置いて定型化したフレームワークなのか、という話。Transition ドリブンは遷移(あるいはイベント)、Page ドリブンはウェブのページをベースに、ということ。

で、はてなフレームワークは Page ドリブンなフレームワークです。詳細は割愛しますが、例えば URL に対してクラス名が一意に決まる仕組みなどを持っていたり、ページへのリクエストを受け取ってからそれを書き出すまでの一連の処理を何段階に分けて抽象化していたりします。そのため、開発にあたっては、まず URL を決めて、このページにはこれこれこういう要素が必要だから、こういうプラグインを書いて...という具合で作っていきます。

はてなフレームワークによる Page ドリブン開発の利点は、該当ページの表示に関連する処理がどこに書かれているかを、フレームワークアーキテクチャだけで判断できる点です。コードを見なくても、このページの処理はあのクラスに書いてある、というのが分かるため、修正箇所を容易に特定できます。

その反面、開発するにあたっての分析対象のスコープが、常にある特定の1ページの範囲内であるため、何か大きな一連の処理を、フレームワークに依存しない形で抽象化するというプロセスがなかなか生まれにくい。(各ページに共通している処理は、フレームワークに差し込むプラグインのような形で実装するため、それも汎用化モジュールになりにくい)

あとは、スピード優先で開発しているためなかなか腰を据えて汎用モジュールの開発に取り組む、といったことにはなりにくかったりもします。

このあたりのプロセスを少し改善して、記法 parser とかフレームワークよりももっと小さな単位のモジュールを、はてなの開発者個人個人の判断で CPAN に登録していけないかなあと、最近考えています。

と、いうことで CPAN Author としての活動をしながら働きたい方も、是非いちどはてな入社をご検討ください。(笑)

ベルウィックサーガについて

先月末にベルウィックサーガというゲームを買いました。確か発売日当日だったと思います。

ゲームに詳しいとある知人が、これは話題作ということで教えてくれた一本。ファイアーエムブレムライクなシミュレーションRPGです。(もともとファイアーエムブレムのプロデューサーだった人が立ち上げた会社が作ってて、ひと悶着あったらしいです)

で、ゲームの感想ですが、すごく難易度が高い。前半はそれほどでもなかったのですが、後半になってくるとボウガンを4連射する適が森の中に隠れていて近づいたら味方キャラが即死したりします。ちなみにファイアーエムブレム同様、味方は倒れたら復活しないので、その時点でリセット確定なゲームです。

ですが、そのちょっとマゾヒスティックな難易度と、妙に練りこまれたバックグラウンドストーリーは、やり込みゲーや設定がやたらと細かいゲームが大好きな僕にとってはたまらないのでした。面白いよこれは。今10章の出撃以来で止まり中。難しすぎます。でも楽しいです。

他の人はどんな感想かなー、と思って Amazon のレビューを見てたのですが...えらい酷評の嵐(笑) あわわ。でも、なんかレビューの内容を見てると「攻撃が命中しません!」とか「グラフィックがPS2っぽくない!」とか「難しすぎ!」とか「キャラが育ちません」とかそんな感じで。

とりあえず攻撃が命中しないとかキャラが育たないとかは、あなたのプレイが間違ってると言いたい。命中率は戦闘前にパラメータとして表示されるので、当たらないのならじゃあいかにしてそれを上げていくかというところに面白さが詰まっています。命中率が高まるような食事をレストランで取ったり、なるべく精度の高い武器を大事にとっておいたり、回避の高い敵には命中率の高いキャラをぶつけるとか、その辺が面白いわけです。キャラが育たないのは強いキャラに頼りすぎてるからです。うまく育てていけばちょうどいい塩梅にレベルが上がっていくようにバランスが取られてます。つまり、このゲームはシミュレーションRPGという冠を被ったパズルゲームなんです。そのコンセプトは、製作者側からプレイヤーに対する挑戦なんです。

ちょっといまお酒を飲んでいるので声を大にして(?)言いますが、クリアできて当然のゲームが面白いというのは何か間違っていると思いませんか。誰でもクリアできるゲームをクリアしたって、何の達成感もないじゃないですか。クリアできる人が限られているからこそクリアするために燃えるのであり、間違いなくベルウィックサーガはそういうのが好きな人のためのゲームです。間違っても広末涼子似のヒロインとタッキーを元にした主人公が出てきてゲームをやってると思ったら半分ぐらいムービーだった、みたいなロールプレイングゲームとは趣が違います。

でも、レビューを見てると、クリアできるのが前提で派手なグラフィックのゲームが好き、という方が多数派っぽいんですよね。僕はマイノリティらしい。ちなみに僕が一番好きなゲームは Starcraft です。(更に言うと、間違っても日本語版ではないです。英語版です。キーワードページでリンクが貼られている Espoir... というマニアックなサイトは実は僕のサイトです。ぐはあ。)

なんというか、MSX版の大戦略はコンピュータの思考を待って自分のターンが回ってくるのに数十分かかった挙句にボコボコにされたりしたし、MSX版のラストハルマゲドンはRPGのくせに戦闘に入るまでに毎回1分ぐらいローディングがあって、いざ戦闘がはじまったら偉い敵が強かったりしたし、Might & Magic II は洞窟に潜ると100匹ぐらいのゴブリンに囲まれていつまでたっても戦闘が終わらなくてご飯の用意をしている母親に怒られる毎日だったし、どう考えても勝てっこない街のガーディアンをどう避けるかが鍵だったファミコン版の初代ウルティマとか(ちなみにそれは弟がクリアした)、そういうのを思い出しました。でも、それらは全部面白くて夢中でやっていました。

どうやら最近のゲーマーと僕の感性はだいぶずれているらしい。もう自棄酒です。

ベルウィックサーガについてのつぶやき

含む日記からベルウィックサーガのプレイ日記をつけている方の日記を読んでいましたが、それぞれプレイスタイルが異なっていて楽しいですね。

僕のシノン騎士団の主力はエルバート、フェイ、シルウィスあたりなのですが、10章の強制イベントをクリアした時点でクラスチェンジしているのはフェイだけです。なんか他のキャラも随分と前にクラスチェンジできるみたいですね、やばいなあ、全然できてない。

アデル & レオンコンビを丁寧に育てるとかなり強いみたいですが、僕はアデルは全然使っていなくってレベル2なんですよ、先生! まずい。フェイがクラスチェンジした後の能力をみると、このゲームの肝はいかにキャラをクラスチェンジさせられるかが鍵のような気がしてきました。お気に入りのキャラはラレンティアとかダウドなのですが、全然その気配がしませんし、一生懸命育てているマーセルとかもそんな感じです。

やり直しの予感...。