Niconico Live CheckerにNGワード機能を追加しました

1年以上振りにNiconico Live Checkerをバージョンアップしました。
変更点はNGワード機能の追加です。番組リストから右クリックしてNGワードに追加するか、メニューのツール->NGワードの追加から追加できます。
NGワードを登録すると、コミュニティ名か番組タイトルにそのキーワードを含む番組が放送中リストに表示されなくなります。

ダウンロードはNiconico Live Checkerからどうぞ。

StAX APIの実装による動作の違い

JavaでXMLをパースする際にはStAXを使用している。
Java6標準のパーサでも良いけど、Woodstoxをクラスパスに含めると、内部で勝手にWoodstox実装を使ってくれる。

が!APIが同じなのに 動作が微妙に違うので結構ハマる。

今気づいている範囲では次の3点が違う。
バージョンはJava1.6.0_22とWoodstox 4.1.1

・Java標準の場合、Character部分に実体参照(&など)があると、そこでCharacterが分割される。
なのでStartElementを見つけたら次のCharacterElementのデータを取るだけでは、実態参照の手前までしかデータを取ることができない。
Woodstoxの場合は実態参照があっても分割されない。

・Woodstoxの場合、XMLStreamWriter#writeCharactersにnullを入力するとNullPoが発生する。
Java標準の場合、nullを入力しても何も起きない。

・Java標準の場合、XMLStreamWriter#writeCharactersで”>”が”>”に置換されるが、Woodstoxの場合は”>”のまま
普通は問題ないと思うけど、場合によっては問題になるかも。

カスタムタグからPolymorphicModelなモデルをDatastore.queryすると怒られる

カスタムタグのクラス内でDatastore.queryしたときに、検索対象のクラスがPolymorphicModelだと次のエラーが出る。GAEにdeployすると問題なし。Aはクラス名で、共に同じものが入る。ちなみにPolymorphicModelじゃない通常のモデルだと、カスタムタグのクラスから普通に検索できていた。

IllegalArgumentException The model class(A) is not assignable from entity class(A)

問題はDatastoreUtilのgetModelMetaメソッドで発生する。
PolymorphicModelじゃなければ、classHierarchyListがnullなので問題ない。PolymorphicModelの場合は次のif文でClass#isAssignableFromを用いて本当にサブクラスかチェックしているのだけれど、そこでチェックに失敗し例外が出る。クラス名を見る限り同じ名前なのでなぜチェックに失敗するのかは不明。Slim3はアクセス毎にクラスローダを生成するとのことで、それ関連かな?同じ名前だけど内部的には違ってるとか。

CoolクラスからHotクラスにアクセスした際に出る「CoolBridge使えよ!」と言ういつものエラーではないのでとまどうかもしれないけれど、CoolBridgeを使うことで問題は解決する。

PolymorphicModelじゃ無ければ問題が出ないのが何かスッキリしないけどまぁいいや。

なおSlim3のバージョンは1.0.6。

GAE/Jのローカル環境サーバでDatastore Viewerを使う

Google App EngineにデプロイしたアプリケーションのDatastoreは管理コンソールのDatastore ViewerからDatastoreを確認することができる。

ローカル環境のサーバでももちろんDatastoreの中身を見たい!

そんなときは次のURLにアクセスする。
http://localhost:8888/_ah/admin/datastore

Entityを削除することはできるようだけど、編集する事はできない様子。

情報元はローカル環境でDatastoreのデータを閲覧する方法 for GAE/j

Google App Engineの料金メモ

ググればすぐ出てくるけど、自分用メモ。

課金対象の割り当ての単価

リソース 単位 単価
発信帯域幅 GB $0.12
受信帯域幅 GB $0.10
CPU 時間 CPU 時間 $0.10
保存データ GB/月 $0.15
メール受信者 受信者 $0.0001

課金登録していない場合の無料リソース

GAEのQuota Detailsから。

CPU Time 6.50CPU hours
Requests 43,200,000
Outgoing Bandwidth 1.00GB
Incoming Bandwidth 1.00GB
Total Stored Data 1.00GB
Blobstore Stored Data 1.00GB

CPU時間が意外と厳しい。
課金登録するだけで無料リソースの上限があがるらしいけどそれはどこにあるのか・・・と思ったら次のページの下の方にあった。一番欲しいCPU時間、送受信転送料は課金登録しても無料分は変わらないぽい。

Google App Engine – 割り当て

Redmine 1.1.0のインストール時にMissing the i18n 0.4.2 gem

Redmine1.1.0をCentOS5.5.にインストールした際にちょっと躓いたのでメモ。
Redmine 1.0をCentOSにインストールする手順は同じくCentOS5.5へのインストールドキュメントだったので、一つの問題を除いてこのままうまくいった。

その問題とは # rake db:migrate RAILS_ENV=production を実行すると次のエラーが出力されるというものだ。

Missing the i18n 0.4.2 gem. Please gem install -v=0.4.2 i18n

ネットを検索すると同じようなエラーが出ている人がいたが、その解決方法ではどれも解決しなかった。

で、どうやれば解決したかというと、.bashrcに次の一行を追加した。

export GEM_PATH=/usr/lib/ruby/gems/1.8/gems/

で、解決。

でもGEM_PATH設定しなくてもgem listやputs Gem.latest_load_paths()してちゃんとi18nが見えているのは確認したんだけどなぁ。

Ubuntu 10.04 or 10.10でSunのJDKを入れる

UbuntuでSunのJava(JDK)を入れるには、sun-java6-jdkを入れていた。
しかし、Ubuntu10.04からデフォルトではsun-java6-jdkが入らないようだ。
しかし、リポジトリに追加すれば 今まで通りapt-getでSunのJavaを入れることができる。

リポジトリへの追加は以下のコマンド。

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

後はいつもの様にインストール

sudo apt-get install sun-java6-jdk

JAVA_HOMEは/usr/lib/jvm/java-6-sunに設定する。

Mavenのpom.xmlからEclipseのプロジェクトを作成する方法

Jettyをデバッグする際に必要になったのでメモ。

オープンソースなプロジェクトのソースコードを拾ってくると、Mavenのpom.xmlだけあり、Eclipseのプロジェクトの設定は無いことが多い。
自分でEclipseのプロジェクトを設定するのは激しく面倒なので、pom.xmlから生成するのがよいだろう。

ちなみにMavenは3.0.1で、pom.xmlはJetty6のmodules/utilのpom.xmlに対して行った。

まずJettyをsvn coして、pom.xmlのあるディレクトリへ移動する。そして次のコマンドを入力するだけ。

>mvn eclipse:eclipse

すると.classと.projectを生成してくれるので、後はEclipseのimport -> Existing Projects into Workspaceを選んでプロジェクトをインポートすればOK

ほかにもEclipseのMavenプラグインなんかでもできるようだ。

Slim3良いよ

新しいWebサービスを趣味で開発しているんだけど、その際問題の一つがサーバをどうするか。開発中は自宅サーバでも良いけど、運用するのであれば自宅サーバでは信頼性にかける。
また、サービスがヒットした際に負荷分散を考えようとすると一気に難易度が上がり、自宅サーバでは難しくなる。もちろんレンタルサーバでも厳しい。
そこでGoogleが提供するGoogle App Engineである。

これは、簡単に言うとGoogleさんがサーバを提供してくれて、大量の負荷がかかってもGoogleさんのすごい技術で何とかしてくれるプラットホーム。開発者はアプリの開発をするだけで良く、サーバの管理や、負荷分散はGoogleがやってくれる。しかもめちゃ使わなければ無料と来てる。

が、良いことずくめではなく、RDBが使えなかったり色々制限があるんだけど、そのあたりを使いやすくしてくれるのがGoogle App Engine上で動くWebフレームワークのSlim3。こいつを使うと癖のあるGoogle App Engine上のデータベースを簡単に使うことができる。JavaでGoogle App Engineのアプリ書くならとりあえずこれで決まりじゃなかろうか。

Slim3を使うなら、本はとりあえず次のを読んでおけばOK

癖のあるGoogle App Engineのデータベースを1から解説してくれてる。Slim3自身の説明がちょっと少ないけど、さわればすぐわかるぐらいシンプルなのでOK。ビューはJSPなので、カスタムタグなどこったことをしたい場合はまたそっちの本を読めば解決。

と、書き殴ってみた。内容が薄い文章だと書くのは早いなw そして文章が頭悪そうだ。
綺麗な文章を書いている人は、どれぐらいの時間をかけて書いて、どれぐらい推敲しているのかちょっと気になる。

明けましておめでとうございます

新年明けましておめでとうございます。今年もよろしくお願いいたします。

Twitterでつぶやいてたら、特にこっちに書く内容が無くなってしまいました。
まぁこっちにはTwitterでつぶやけない内容(長さ的な意味で)をぶちまけていくことにします。まぁ以下の内容はネットに転がっているよく言われることと同じですが。

最近思っていることについて

ノイタミナ「フラクタル」 アニメの未来を問うヤマカンの戦い

なぜヤマカンが叩かれるのか

最近の萌えアニメばかりがもてはやされる現状はダメだ!と言いながら、その人気のある萌えアニメを作っているのが本人だから「お前が言うなよ」と言われるのは至極当然と言える。また、「こんなアニメが売れる世の中じゃ。ポイズン。」とか言いつつそのアニメを作るのだから、その原作者さんに失礼極まりない。ヤマカン自身は他の原作者が書いた作品のアニメを作っているだけで、ヤマカン自身が作った作品(アニメ)が一つもない。これらの作品にヤマカンの魂は入っておらず、ヤマカンらしさと言えば、オープニングやエンディングでキャラが踊るぐらいである。よってヤマカンの意見に説得力がないと感じるのではないだろうか。と言うかヤマカンのメッセージをアニメから受け取ったことがない。

ではヤマカンは間違っているのか

しかしながら、ヤマカンの言っていることは理解できる。今のアニメは小さなパイ(DVD,BDを買う人)を年間50から70作品のアニメで取り合うため、どうしてもDVDが売れる方向へ(つまり視聴者に媚びる方向へ)行ってしまう。従って、現状が良くないと感じている人は、ヤマカンをはじめアニメを作る立場の人間が良しとするアニメと、消費者がそう思うアニメにギャップがあると感じているのだと思われる。

これは、日本のゲーム、海外のゲーム、ハリウッドの映画も同じ現象であると感じる。海外のゲームは銃で撃ち合うゲームばかりで、海外のユーザは飽き飽きしているようだ。(しかし、販売本数で言うと、圧倒的に銃で撃ち合うゲームの方が売れている) ヤマカンはそれと同じ現象がアニメでも起こっていると言いたいのではないだろうか。

なぜこの問題が起こるのか

この問題は現状のアニメ業界のビジネスモデルに原因があると考える。現状のアニメ業界はDVDの売り上げを主な収益としているため、DVDが売れるかどうかが、アニメで稼げるかどうかなのである。すると当然、DVDを買う層がアニメのターゲットとなる。TVで見たアニメのDVDをわざわざ買う層は、アニメオタクであることが想像できる。従ってアニメがオタクに媚びる風潮になるのはどう考えても当たり前なのである。

ではこの問題に対してアニメ業界はどうしたらいいのかについては話題にしない。

ヤマカンとしては、「視聴者に媚びない面白くてインパクトのある作品を作り、萌えアニメに傾倒している視聴者の目を覚まさせてやろう」と新作のフラクタルを作るというのが解答なのだ。

ヤマカンに対して期待すること

知る限り、問題を提起しその解決のために行動しているのはヤマカンだけなので、大いにがんばって欲しいと思う。もちろん確実に叩かれる。ヤマカン初の自分の作品であるフラクタルも叩かれるだろう。それは当たり前の事で、それを気にせず自分が良しとするアニメの制作を続けて欲しい。
(知らない人に補足すると、ヤマカンはTwitter等での批判にマジレスしすぎる傾向がある)

以上、思ったことを文章にする練習でした。前半ふざけつつ後半まじめになったから相変わらずちぐはぐな文章だ。

言いたいことはとりあえず「ヤマカンがんばれ!フラクタル面白かったらDVD買うぞ!」
でも俺のDVD購入閾値はかなり高いのでよっぽどじゃないと買いませんw レンタルですませちゃいますw

ある作家個人の同人誌がアニメになった灰羽連盟のような作品が作れる時代が一番良かったのかな。しかしそういうアニメが利益に繋がらないとわかったので今のような現状になったのかもしれない。

ビジネスモデルを変えなければならないと皆が感じつつも、どれが最適解か試行錯誤中なのが今か。しばらく前はDVDオンリー、そこから劇場版で稼ぐ方向へ行って、次さぁどうしようかという感じ。

5年後はビジネスモデルがどう変わっているのか。また、アーティストが音楽を売るのでは無くて、初音ミクを使ってユーザが音楽を売るようなパラダイムシフトがアニメ業界でも起こるのか。まだまだアニメは面白そうである。

ってヤマカンの意見に説得力がないと感じるのではないだろうか。