Subscribed unsubscribe Subscribe Subscribe

ニコニコ動画っぽくテキストをデスクトップに流すCocoaアプリを作ってみた

Mac Objective-C Perl

YAPC::Asia 2010 で、JesseがプレゼンにTwitterのタイムラインをニコ動っぽく流していて、同じようなことやってみたいなーと思ったものの、JS使ってやってるとそのブラウザ上でしかできないし、どうせならMacCocoaアプリとしてどのアプリが起動していても関係なく最前面にテキストながせるようになったらいいんじゃね?と思って作ってみた。
http://github.com/sugyan/NicoNicoDesktop
25250番ポートでTCP接続を待ち受け、クライアントから受け取った文字列をそのまま透明Window上でNSTextで表示させ、それを右から左へアニメーションさせる、というだけのもの。
クライアント次第で何でも流せるようにしたので、例えば以下のようなスクリプトを動かしておくと、自分のhome timelineの発言が次々流れてくる。

#!/usr/bin/perl
use strict;
use warnings;

use AnyEvent::Twitter::Stream;
use AnyEvent::Handle;
use AnyEvent::Socket;
use Encode 'encode_utf8';
use Config::Pit;

my $conf = pit_get('twitter.com', require => {
    consumer_key    => 'consumer_key',
    consumer_secret => 'consumer_secret',
    token           => 'token',
    token_secret    => 'token_secret',
});

my $cv = AE::cv;

tcp_connect '127.0.0.1', 25250, sub {
    my ($fh) = @_ or die;

    my $hdl; $hdl = AnyEvent::Handle->new(fh => $fh);
    my $listener; $listener = AnyEvent::Twitter::Stream->new(
        %$conf,
        method => 'userstream',
        on_tweet => sub {
            my $tweet = shift;
            scalar $listener;
            return unless ($tweet->{text} && $tweet->{user}{screen_name});
            $hdl->push_write(encode_utf8 "$tweet->{text} - \@$tweet->{user}{screen_name}\n");
        },
    );
};
$cv->recv;

みにくいけど簡単なデモ動画を。アプリケーション切り替わっても関係なくテキストが流れて行っているのが確認できるかと。


こういうのって既にどこかにあるのかな…?
もしくはGrowlでdisplay plugin?とかで作ればあらゆる通知をニコ動っぽくしたりできるのかも? 要調査。