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 by



2010/12/04


非力ながら先日私も記事を書かせて頂きました。
サーバのソースを少し弄らせて頂いて、RSSを出力するようにしてあります。各カテゴリURLの後ろに"rss"を付けて頂ければRSSが出力されます。
win32カテゴリ
http://perl-users.jp/articles/advent-calendar/2010/win32/
であれば
http://perl-users.jp/articles/advent-calendar/2010/win32/rss
でRSSが出力されます。全体のRSSも出力出来ますが、こちらは負荷分散の為に各個人で各カテゴリRSSを購読して下さい。
ちなみにOPMLを作りましたので、全部読みたい方はそちらをフィードリーダで取り込んで下さい。

記事を書かれる方はこれまで
記事タイトル

本文
という形式で書いて頂いていますが 記事タイトル
meta-author: 記事を書いた人

本文
を書くことでRSSのauthorが出力される様にしてあります。
私であれば 記事タイトル
meta-author: mattn <mattn.jp@gmail.com>

本文
ですね。また 記事タイトル
meta-tags: perl, win32

本文
と書くことで <category>perl</category>
<category>win32</category>
とカテゴリが出力される様にしてあります。
これでperl-users.jpドメインなのにperlに関係ない記事を書いている人も安心ですね!
Posted at by



2010/10/10


PerlのGrowlライブラリって色々ある訳ですが、誰かが書いたGrowlするアプリのコードを実行しようとした際にWindowsやLinuxで動かないと少し悲しくなります。
そこでGrowl::Anyってのがあればいいんじゃね?って事で書いてみました。
Mac::Growl、notify-send、Desktop::Notify、Net::GrowlClient、Growl::GNTPのどれかがインストールされていれば使えます。
mattn's p5-Growl-Any at master - GitHub

perl module that provide any growl application

http://github.com/mattn/p5-Growl-Any
今日はこれを使って、twitterのhome_timelineをGrowlするスクリプトを書いてみました。
#!perl

use strict;
use warnings;
use Config::Pit;
use Encode;
use Growl::Any;
use Net::Twitter::Lite;

my $config = pit_get("twitter-growler");
unless ( $config->{access_token_secret} ) {
    $config = pit_get(
        "twitter-growler",
        require => {
            consumer_key    => "YOUR_CONSUMER-KEY",
            consumer_secret => "YOUR-CONSUMER-SECRET",
        }
    );
    my $nt = Net::Twitter::Lite->new( %{$config} );
    $| = 1;
    print "Authorize this app at:\n ", $nt->get_authorization_url,
      "\nAnd enter the PIN: ";
    my $pin = <STDIN>;
    chomp $pin;
    my ( $access_token, $access_token_secret, $user_id, $screen_name ) =
      $nt->request_access_token( verifier => $pin );
    $config->{access_token}        = $access_token;
    $config->{access_token_secret} = $access_token_secret;
    pit_set( "twitter-growler", data => $config );
    exit;
}

my $nt = Net::Twitter::Lite->new( %{$config} );
$nt->access_token( $config->{access_token} );
$nt->access_token_secret( $config->{access_token_secret} );

my $growl = Growl::Any->new();
$growl->register( "Growl/Twitter", ["tweet"] );

my $last_id = undef;
while (1) {
    my @sl;
    if ($last_id) {
        @sl = $nt->friends_timeline( { count => 200, since_id => $last_id } );
    }
    else {
        @sl = $nt->friends_timeline( { count => 5 } );
    }
    for my $s ( @{ $sl[0] } ) {
        $last_id = $s->{id} unless $last_id;
        $growl->notify(
            "tweet",
            encode_utf8( $s->{user}{screen_name} ),
            encode_utf8( $s->{text} ),
            $s->{user}{profile_image_url},
        );
        sleep(4);
    }
}
上に書いたモジュールのどれかが入っていれば(notify-sendはコマンド)、MacでもLinuxでもWindowsでも動くはずです。

twitter-growler1
なお、実は現在Growl::Anyのパラメータをutf8フラグ付きにしようかどうか迷っているので、もしかするとその修正を入れた後にこのスクリプトを動かすと文字化けしてしまうかもしれませんので注意です。

今後ネットに転がっていたスクリプトを何も修正せずにGrowlする事が出来る様になれば、素敵な事だなと思います。

ちなみに上記のスクリプトですが、初回に実行するとconsumer_key/consumer_secretを聞かれます。ブラウザでPINを貰って入力するとConfig::Pitで設定を保存して終了するので、再度起動すると動き出します。
streamなAPIでもやってみたのですが、更新が多くGrowlの表示数が激しすぎたので一定間隔で取得する様にしてあります。お好みで修正してみて下さい。
Posted at by