AIR でニコニコメソッド プレゼン

プレゼンしているその画面の上に、聞いている人達のコメントがニコニコ動画風に流れるのが楽しそう。ということで、それ、AIR でできるよ、と作ってみました。

ドキュメントフォルダの niconico.txt を監視し続け、新たな行が登場したら、行の中身をニコニコ動画風に表示します。

ニコニコ動画メソッドプレゼン

Flash を使ってるので本家と似た表示になるのがポイントです。

このアプリケーション単体の機能はテキストの中身を出力するだけですが、次のような活用法を想定しています。

  • ローカルに Web サーバーを立てて、CGI 経由でコメントを niconico.txt に出力する
    • → ニコニコメソッドプレゼンが可能に!
  • Plagger で取得した内容を niconico.txt に吐き出す
    • → ニコニコメソッド RSS リーダー!

なお、文字が他のウインドウの背後に隠れてしまうので、最前面に表示するソフト(Ace-WindowToppy! など)を使えば、Powerpoint でのプレゼンでも利用できます。 (AIR β版の stage.alwaysInFront を利用するようにしたので不要です)

どうぞご利用ください。

関連ページ:LingrTickr - 誰でもニコニコメソッドプレゼン (nakatani @ cybozu labs)

CGI のソース

post.html

<form action="post.cgi" method="post">
<input name="comment" type="text" size="30"><input type="submit" value="つっこみ">
</form>

post.cgi

use CGI;

my $q = new CGI;

if($q->param("comment") ne ""){
	open(FILE, ">>C:\\Documents and Settings\\nitoyon\\My Documents\\niconico.txt") or die;
	print FILE $ENV{"REMOTE_ADDR"}.":".time.",".$q->param("comment")."\n";
	close(FILE);
}

print "Content-type: text/html\n\n";

open(FILE, "post.html") or die;
while(<FILE>){print}
close(FILE);

Active Perl で動作確認済み。

おまけ。

実装で苦労したところ。

  • 文字の外側に枠をつけるために、DropShadowFilter を使っているのだけど、2880px より大きいオブジェクトにはフィルタをかけられない。
    • 2880px を超えないよう、分割して TextField を配置した
  • 文字が実際に表示されるサイズを取得するために、Flash の default-size や実際に表示されているサイズを取得する必要があった
    • 表示されているサイズは stage.stageWidth(or stageHeight) で取得
    • default-size は loaderInfo.width(or height) で取得
      • nium さんに Twitter で教えてもらいました。ありがとうございます。→関連エントリ
  • ファイル読み取り時の重複チェック方法。
    • 1行をカンマで id と text に分割して、id で判別する仕組みを導入している。id が省略されているときは、text の内容で重複チェック。

ソースは勢いで書いたので、あまりじっくり見ないように…。