Fork me on GitHub

2011/07/20


このエントリーをはてなブックマークに追加
なんだか楽しそう。
Amon2::Liteでmarkdownその他のリアルタイムプレビュー - すぎゃーんメモ

Amon2::Liteでmarkdownその他のリアルタイムプレビュー Perl Amon2::Lite というモジュールを Amon2 に添付してみました。 - TokuLog 改メ tokuhir...

http://d.hatena.ne.jp/sugyan/20110720/1311146296
こういうの皆で共有したいよねと思ったので最近話題のPaaS、fluxflexにデプロイしてみた。
fluxflex

Easy One-Click Install for Web Applications You can install various OSS in a second just with one-cl...

http://www.fluxflex.com
http://text-converter.fluxflex.com
ちょっとハマった点が、fluxflexにはcpanm等による自動インストール機能が無い事。自前でextlibみたいなのに放り込めばいいんだけど、これがなかなか面倒くさい。適当なcgiを書いてどのモジュールの読み込みで失敗しているか調べた結果でいろいろ添付してます。
正直、要らない物もあがってるかもしれません。
とりあえず動いたので、負荷かけない程度に遊んで下さい。

一応CGIのコード貼っておきます。
#!/usr/bin/perl
use strict;
use warnings;

use lib qw( ../lib );
use Amon2::Lite;
use Encode 'encode_utf8';
use Text::Markdown 'markdown';
use Text::Xatena;
use Pod::Simple::XHTML;
use Plack::Handler::CGI;

$ENV{REQUEST_METHOD} ||= 'GET';
$ENV{SCRIPT_NAME} ||= $0;
$ENV{PATH_INFO} ||= '/';

my $converters = {
    markdown => sub {
        my $text = shift;
        return markdown($text);
    },
    xatena => sub {
        my $text = shift;
        return Text::Xatena->new->format($text);
    },
    pod => sub {
        my $text = shift;
        my $parser = Pod::Simple::XHTML->new;
        $parser->html_header('');
        $parser->html_footer('');
        $parser->output_string(\my $html);
        $parser->parse_string_document($text);
        return $html;
    },
};

get '/' => sub {
    my ($c) = @_;
    return $c->render('index.tt');
};

post '/preview' => sub {
    my ($c) = @_;
    my $converter = $converters->{$c->req->param('format')};
    my $html = $converter ? $converter->($c->req->param('text')) : '';
    return $c->create_response(200, ['Content-Type' => 'text/plain'], [encode_utf8($html)]);
};

Plack::Handler::CGI->new->run(__PACKAGE__->to_app);
あと、頭の方でやってるENVの初期値設定は、これが無いとエラーで動かなかった為。この辺は後でフィードバックしておきます。
dotcloudの時もそうでしたが、__DATA_トークンにあったテンプレートはtmpl/index.ttに配置して動作させています。

おまけで、Text::Xatenaの出力を少し変えて(codeというclass属性をprettyprintに変更)、google code prettifyによる色付け機能を足してあります。
#ちょさん!変更出来る様にして下さい!

SuprePre記法で遊んで下さい!
Posted at 19:21 in ソフトウェア::lang::perl
Tagged as: Amon2, fluxflex, perl
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2011/06/16


このエントリーをはてなブックマークに追加
タイトル長い!

言ったからには自分で書こう...
Twitter / mattn: 当たり前だと思うけど、PerlerならWeb::Sc ...

当たり前だと思うけど、PerlerならWeb::Scraperでアカウント名取ってNet::Twitter::Liteでfollowするよね? #perl http://d.hatena.ne.jp/...

https://twitter.com/mattn_jp/status/81320211634069504
所要時間、約10分
use strict;
use warnings;

use Config::Pit;
use Net::Twitter::Lite;
use URI;
use Web::Scraper;

my $uri = URI->new('http://d.hatena.ne.jp/sugyan/20110616/1308203734');

my $config = pit_get('api.twitter.com');
my $nt     = Net::Twitter::Lite->new(%$config);

my $helper = scraper {
    process '//div[@class="body"]//a[contains(@href,"http://twitter.com/")]',
      'link[]' => '@href';
};

$helper->user_agent->env_proxy;

my $res = $helper->scrape($uri);
for my $link (@{$res->{link}}) {
    print "$link\n";
    $link =~ s!.*/!!;
    #$nt->follow( $link ); # ココのコメント外してね
}

※ただし、動かした事がない。

Posted at 20:36 in ソフトウェア::lang::perl
Tagged as: perl
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2011/04/04


このエントリーをはてなブックマークに追加
富田さんが書かれた、「CPANモジュールガイド」を献本頂きました。
Growl::Anyを紹介して頂いています。

ざっと目を通しましたが「perlの今」が分かる、読んでてとてもワクワクする本です。各モジュールにサンプルコードが示されていて今ホットなCPANモジュールが150本程紹介されています。perlを知ってる方ならば「あーあのモジュールか。」とニタニタしながら読むことが出来ますし、perlをこれから始める方にとっても「へー最近良く聞くあのモジュールは、こういう機能があって、こう使うんだ。」と分かりやすく書いてあります。
その中にも、サンプルコードで他のモジュールを絡めて書かれている為、アプリケーションを書く上での基礎知識が得られる、持っていて絶対損のないガイドブックになっていると思います。
ボリューム感もあるので、僕もしばらく通勤電車の中でニタニタする事が出来ると思います。

Perl CPANモジュールガイド Perl CPANモジュールガイド
冨田尚樹
ワークスコーポレーション / ¥ 2,730 (2011-04-08)
 
発送可能時間:在庫あり。


さて、Growl::Anyですが、このモジュールは各OS上で動作するGrowl、もしくはGrowlライクなアプリケーションに対して共通インタフェースを提供するアダプタモジュールです。
Growl::Any - search.cpan.org

Growl::Any - Common interface to Growl

http://search.cpan.org/dist/Growl-Any/
先日gfxさんに大改良して頂き、わかりやすい構成になりました。

実は僕はMac OSXを持っていません。なのでGrowl::Anyが無くても直接困る人でもありません。僕がこれを書いたのは、miyagawaさんなんかが良く書いてるMac OSX上で動くGrowlアプリケーションを、Mac OSXを持ってない人が簡単な修正だけで動かせる様にしてもらいたいと思ったからです。もちろん僕自身もその一人です。
僕はWindows上で動作するGrowl、Growl For Windowsへ通知が出来るCPANモジュールGrowl::GNTPを作っている事もあり、なおかつGrowl For Windowsの中身もまぁまぁ知ってるので(コミット権も持ってるけどあまりコミットしてない苦笑)、たぶんGrowl::AnyのAUTHORとしては適任なのかもしれない。
もちろんGrowlだけじゃなく、あのカッコいいperlアプリケーションをWindowsで動かしたいなと思ってる人は僕だけじゃないと信じています。
そしてMac OSX上で動くイカしたアプリケーションを他のOSで動作させる為のグルー的な役割を、ブログなんかで冗談混じりに紹介し、ポーティングの楽しさ、CPANモジュールの便利さアピールするのが僕の役目なんだろうなと勝手に思っています。

良いアダプタになれればいいなと思います。

さて先日Data::Deduperというモジュールを書きました。
mattn/p5-Data-Deduper - GitHub

remove duplicated item from array

https://github.com/mattn/p5-Data-Deduper
Growlを使ったアプリケーションを書く場合RSSフィードから新着表示したりする訳ですがこの場合、前回フェッチ時のエントリから今回増えたエントリを抽出してGrowl通知する事になります。
そんな場合に役立つんじゃないかと思っています。中身はとても短いコードのモジュールですが、RSSフィードの新着エントリを表示するスクリプトがこんな風に書けます。
#!perl
use strict;
use warnings;
use Encode;
use Data::Deduper;
use XML::Feed;

my $uri = URI->new( "http://api.twitter.com/1/statuses/public_timeline.rss" );

my $dd = Data::Deduper->new(
    expr => sub {
        my ( $a$b ) = @_;
        $a->link eq $b->link;
    },
    size => 50,
);

while (1) {
    my $feed = XML::Feed->parse( $uri );
    for ( $dd->dedup$feed->entries ) ) {
        print encode_utf8 $_->content->body."\n";
    }
    sleep 3;
}
実は、こういったスクリプトを書く際にはこれまでtokuhiromさんが書いたXML::Feed::Deduperを使っていたのですが、RSSフィードの新着確認であればフィード内のエントリ数分だけ管理出来ていれば良くて、特にGrowl通知アプリケーションなんかの場合は大概常駐アプリになるので、DB_Fileを使わなくてもいいんじゃないかという発想で書きました。
まぁ便利かもと思ったのは僕だけかも知れないけど。

こういった、何かの手順を簡素に出来るモジュールをこれからも書いていけたらなぁと思っています。
Posted at 01:19 in ソフトウェア::lang::perl
Tagged as: perl
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2011/02/01


このエントリーをはてなブックマークに追加
このご時世にperlを選ぶ理由ねー。
プログラミング言語人気TOP10の簡易解説

用途的にPythonやRubyと被るので、今あえてPerlを取る理由というのが個人的には思い浮かばない。生粋のPerl使いならきっと流暢な解答を用意してくれると思う。

http://www.mwsoft.jp/column/program_top10.html
僕が思うに、perlは至らなすぎてるんだと思う。素の状態だとほんとに至らない感がある。言語の完成度の目標値が他の言語と違ってる。つまりperlがここを完成形と値付けている時点で他の言語と比較対象でなくなっている気がするんですよ。でもperlはこの状態から他の言語と同じレベルまで何かを引き上げて肩を並べられる所が凄い。それってつまりはCPANモジュールなんですよね。逆に言えばCPANモジュールが無いとおそろしく膨大なコードを書かないといけないし、そんなコードだれもメンテしたくないんだけどperlはそれがうまくドッキング出来る様にperl monger達がちゃんと教育されている。一見簡単そうな事を疎結合なCPANモジュールでつなぎ合わせる、そんな教育が出来ている。perl monger同士も良い刺激のやりとりがあるし、つまりは上手いこと糊を貼る為のノリシロが出来上がってるんだろね。
そんでもって皆が思ってる程馴れ合ってないと思うよ。
(まぁ僕は一度もYAPC::AsiaとかShibuya.pmに参加したこと無いんだけどね)

これが文化って奴なんかもしれんなー。
Posted at 02:26 in ソフトウェア::lang::perl
Tagged as: perl
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip