2008年08月22日

HaikuPodというMacからはてなハイクを快適に使うツールを作ったよ

空前のwassrブームの中皆様いかがおすごしでしょうか。
ついにあのcho45の*ig.rbがまだハイクに対応していなくて面白い感じですが、Mac用のいいツールが無さげです。というかAPIさっき公開したばかりだけど
来週の、MicroblogConにはてなハイクの中の人に参加してもらいたいのですが、「Wassrを末永くお願いします」と言われたので、僕が勝手にTwitterPodをはてなハイク対応しちゃいました。
かいつまむと「はてなハイクをtwitter APIを使うクライアントからアクセスできるコンバータ付きproxy」です。

Macのターミナルとperlが使える環境の人前程ですが、物凄く簡単にエコー対応が出来ます。
TwitterPodをアプリケーションディレクトリに入れておいて下さい。
そして、ここからターミナル操作です。

まずは

svn co http://svn.coderepos.org/share/lang/perl/misc/HaikuPod ~/HaikuPod
とかで、仕組み一式をチェックアウトして
 $ cd /Applications
 $ ~/HaikuPod/install.pl
とするだけでHaikuPodがアプリケーションディレクトリに出来上がります。
これでHaikuPodのインストールは完成です。
何やってるかはinstall.plでも見て下さい。

次に肝心のproxyですが、~/HaikuPod/haikupod.plがそうです。
これを使うには各種CPANモジュールが必要なので

 $ sudo cpan
> install MooseX::Getopt
> install HTTP::Server::Simple
> install HTTP::Engine
> install JSON
> install DateTime
> install DateTime::Format::W3CDTF;
> install XML::Simple
> install MooseX::Types
とかして必要なモジュールを全部入れておきます。
ここまでして入れたら
 $ ~/HaikuPod/mixiechopod.pl --port 8107
で起動します。8107はproxyのサーバポートです。
設定のID,passwordの時にはハイクAPIページを見て適切な物を入れて下さい。

ここまできたらあとはアプリケーションディレクトリのHaikuPodを起動して、設定画面のアカウントは適当なのを入れて、最後が肝心だけど「Enable Proxy」にチェックをいれて「Server」に「127.0.0.1」を入れ「Port」に「8107」を入れればokです。
結構無理栗なhackなのでHaikuPodのアプリケーションが落ちちゃったりする可能性もありますが僕は結構快適に使えてます。

今後の予定ははてなならではの機能をHaikuPodから使えるようにhaikupod.plを拡張してくネタをmixiが実装してくれたらいいですね。
なんでも一から作るのは大変ですが、この程度なら大変じゃなくて良い感じですね。

どうぞご利用下さい。

Posted by Yappo at 15:46 | Comments (1) | TrackBack

2008年08月14日

HTTP::Engine 0.0.13 リリースのお知らせ

昨日HTTP::Engine0.0.13をリリースしました。
今回は大きな変更になっています。

0.0.12までだと

use HTTP::Engine;
HTTP::Engine->new(
    interface => {
        module => 'ServerSimple',
        args   => { port => 9999 },
        request_handler => sub {
            my $c = shift;
            $c->res->body($c->req->uri);
        },
    }
)->run;
と、request_handlerにはcontext($c)を引数と渡して、contextの中にreqやres等があり、Catalystのcontextっぽい感じで使えたのですが、0.0.13からは
use HTTP::Engine;
HTTP::Engine->new(
    interface => {
        module => 'ServerSimple',
        args   => { port => 9999 },
        request_handler => sub {
            my $req = shift;
            return HTTP::Engine::Response->new( body => $req->uri);
        },
    }
)->run;
という風にHTTP::Engine::Responseのオブジェクトを明示的に作って返すようになります。
一見冗長になったように見えますが、HTTP::Engineは基本的に直接利用せずにフレームワーク等で利用される事を想定しているため面倒になるケースは少ないと考えます。

当初はcontext objectを使ってmiddleware等からcontext objectにメソッド生やして便利に仕様という意図があったのですが、mstやnothingmuchからは「contextなんてCatalystで大変になってるからやめようぜ」と提案されたり、実装を進めて行く上でcontextの必要性が少なくなってたり、有用な使い方を思いつかなかったのでcontextを削除しました。
ついでに、折角よりシンプルになるので未だに使い道がはっきりしないmiddlewareサポートも削除しました。

とはいえ、APIの互換性が急に無くなって慌てる人が居たら悪いのでanotherさんに足りないとDISられた公共心をフルに発揮してHTTP::Engine::Compatというのも同時にリリースしました。

use HTTP::Engine::Compat;
HTTP::Engine->new(
    interface => {
        module => 'ServerSimple',
        args   => { port => 9999 },
        request_handler => sub {
            my $c = shift;
            $c->res->body($c->req->uri);
        },
    }
)->run;
とHTTP::EngineじゃなくてHTTP::Engine::Compatをuseするだけで0.0.12までとの互換性を保ちます。
Mooseのお陰で簡潔なコードになってますね。

最後にHTTP::Engineをちっちゃいスクリプトで使いたい時にHTTPEx::Declareもversion upしました(FAIL (4)とか言われてるのであとで直す)。
新たに-Compatモードサポートとresが追加です。

use HTTPEx::Declare;
interface ServerSimple => { port => 9999 };
run {
    my $req = shift;
    res( body => $req->uri );
};
こんな感じで新しいHTTP::Engineに対応したコードが書けます。
resがHTTP::Engine::Response->new(@_);になってるのですね。
-Compatモードは
use HTTPEx::Declare -Compat;
interface ServerSimple => { port => 9999 };
run {
    my $c = shift;
    $c->res->body( $req->uri );
};
と書くだけです。

あともう一つHTTP::Engineには新たな要素があります。
0.0.12までは、request_handlerの中で使わないrequest objectの値(cookieとかrequest bodyとかheaderとか)までも全部作っていたのですが、0.0.13からは必要な時にlazyに作成するようになりました。
使うrequest dataを必要な時にENVやらSTDINから作成するのでアプリケーションによっては効率が良くなるはずです。

もうそろそろHTTP::Engineも要件が固まり来てコンセプト段階を終了しようと思う所ですがどうでしょうね?
仕様をフリーズさせてリファクタリングやらドキュメント作成やらCookbookやらを整備して0.1.0もしくは1.0.0のリリースする感じですかね。

ちなみにあたかも自分が全部やったように書いてるけどcontext削除の作業とHTTP::Engine::Compat作りはtokuhiromがやり、lazyなrequestの作業の大部分はnothingmuchがやりました。
僕はHTTPEx::Declareと全部のテストカバレッジ率を100%にしたのとリリース作業くらいしかしていません。

Posted by Yappo at 09:14 | Comments (0) | TrackBack

2008年08月09日

MixiEchoPodというMacからmixiのエコーを快適に使うツールを作ったよ

空前のwassrブームの中皆様いかがおすごしでしょうか。
ついにあのTwitがとくにエコー対応していなくて面白い感じですが、Mac用のいいツールが無さげです。というかAPI解放してないけどEchoPodとかあります。
先週末の、Wassr大会議#2の集いにtokuhiromさんもいらしてたのでエコーに乗り換えてもいいか聞いてみたのですが、「Wassrを末永くお願いします」と言われたので、僕が勝手にTwitterPodをエコー対応しちゃいました。
かいつまむと「mixiエコーをtwitter APIを使うクライアントからアクセスできるコンバータ付きproxy」です。

Macのターミナルとperlが使える環境の人前程ですが、物凄く簡単にエコー対応が出来ます。
TwitterPodをアプリケーションディレクトリに入れておいて下さい。
そして、ここからターミナル操作です。

まずは

svn co http://svn.coderepos.org/share/lang/perl/misc/MixiEchoPod ~/MixiEchoPod
とかで、仕組み一式をチェックアウトして
 $ cd /Applications
 $ ~/MixiEchoPod/install.pl
とするだけでMixiEchoPodがアプリケーションディレクトリに出来上がります。
これでMixiEchoPodのインストールは完成です。
何やってるかはinstall.plでも見て下さい。

次に肝心のproxyですが、~/MixiEchoPod/mixiechopod.plがそうです。
これを使うには各種CPANモジュールが必要なので

 $ sudo cpan
> install MooseX::Getopt
> install HTTP::Server::Simple
> install HTTP::Engine
> install JSON
> install DateTime
> install XML::Simple
> install MooseX::Types
とかして必要なモジュールを全部入れておきます。
あとはsvn headのWWW::Mixi::Scraperも必要なのでsvn.coderepos.org/share/lang/perl/WWW-Mixi-Scraper/trunkからチェックアウトしてインストールです。
ここまでして入れたら
 $ ~/MixiEchoPod/mixiechopod.pl --port 3941
で起動します。3941はproxyのサーバポートです。
起動したらemailとpasswordを聞かれるのでmixiのアカウントに使ってる物を入れて下さい。

ここまできたらあとはアプリケーションディレクトリのMixiEchoPodを起動して、設定画面のアカウントは適当なのを入れて、最後が肝心だけど「Enable Proxy」にチェックをいれて「Server」に「127.0.0.1」を入れ「Port」に「3941」を入れればokです。
結構無理栗なhackなのでMixiEchoPodのアプリケーションが落ちちゃったりする可能性もありますが僕は結構快適に使えてます。

今後の予定はmixiならではの機能をMixiEchoPodから使えるようにmixiechopod.plを拡張してくネタをmixiが実装してくれたらいいですね。
なんでも一から作るのは大変ですが、この程度なら大変じゃなくて良い感じですね。

どうぞご利用下さい。

Posted by Yappo at 18:46 | Comments (1) | TrackBack