2006年8月29日

WindowsでPlaggerを

Plaggerは、とても便利で楽しいんだけど、インストールが難しいのが難点。
Linuxとか、MacOSXとかだと、割とスムーズにインストールできるので、Windowsにこだわらずに、VMWareとかで、Linux環境を作っちゃった方が早いんじゃないの? とか思っていたんだけど、

しげふみメモ:Windowsで簡単にPlaggerをインストールする方法

これなら、すごく簡単。さくっとインストール。
Plaggerキャズム越え!(笑)

ActivePerlをインストールしていれば、

C:\>ppm
ppm> search Plagger
ppm> install Plagger
ppm> q
C:\>plagger -v
Plagger version 0.7.9

てな感じで。

で、インストールさえ出来ちゃえば、例えば、

global:
  plugin_path:
    - C:\Perl\site\lib\Plagger\Plugin
  assets_path: C:\Perl\site\lib\Plagger\assets
  timezone: Asia/Tokyo
  log:
    level: info
  cache:
    base: C:\plagger

plugins:
  - module: Subscription::Config
    config:
       feed:
        - url: http://cheebow.info/chemt/index.xml

  - module: Publish::PalmDoc
    config:
      path: /
      prefix: PalmDoc
      medoc: 1

なんて、設定ファイルを書いて、これを、palm.yamlってファイル名で保存。
コマンドプロンプトで、palm.yamlファイルのあるディレクトリに移動して、

plagger -c palm.yaml

とすると、ヒビノアワのRSSを取得して、それをPalm用のMeDoc形式にしてくれたりします。
他にも、取得先をいろいろ変更したり、出力方法を変えたりと楽しみ方はいろいろ。

Elementary, ... Plaggerで出前が寿司に対応しました

寿司を取ったりも出来ます(笑)。

ぜひ、お試しをー。

投稿者 CHEEBOW : 12:05 | [ Perl ]

2006年5月24日

PiloWeb? それPlaggerで(ry

PiloWebにはじまり、その後継版のPiloWebProなんてソフトを開発していたりするのですが、ふと、気付いた。

それPlaggerでやればいいんじゃね?

というわけで、さっそく、こんなプラグインを書いてみましたよ。

Plagger::Plugin::Publish::PalmDoc
Plagger::Plugin::Publish::OutlineText

追記:
本家に取り込まれましたので、そちらから使ってもらったほうが良いです。

エムロジック放課後プロジェクトの一環で、POD内の英語とかは、ka2hiroに書いてもらったりしつつ。

Plagger::Plugin::Publish::PalmDocはその名の通り、取得したフィードをPalmDocフォーマットのファイルで出力するPublish系プラグインです。
ダウンロードしたファイルを解凍して、Plugin/Publishディレクトリの下にPalmDoc.pmを、assetsディレクトリにPublish-PalmDocディレクトリ以下をコピーします。
YAMLには

  - module: Publish::PalmDoc
    config:
      path: /path/to/
      prefix: PalmDoc
      medoc: 1

こんな感じで書いてもらうと、/path/to/ディレクトリの下にPalmDoc-*.pdbって形でフィードごとにファイルが出来ます。
medocを1にするとMeDoc形式で出力されます。
PalmDocに関しては、「Muchy.com - よくある質問と回答 > 「DOCアプリ」「DOCデータ」について、詳しく教えて下さい」を読むと良いかもです。

Plagger::Plugin::Publish::OutlineTextは、階層付きテキストとしてすべてのフィードを出力するプラグインです。
Plugin/Publishディレクトリの下にOutlineText.pmをコピーするだけ。
出力されたファイルは、階層付きテキストが読めるエディタならツリー状に表示されるはず。拙作の「Story Editor」とか。
モバイル系のデバイスでも階層付きテキストを読むことができるエディタやビュワーが結構あるみたいなので、それを使うのも良いかも。
YAMLには、

  - module: Publish::OutlineText
    config:
      filename: /path/to/outline.txt
      encoding: utf8

って感じで。この設定だと、/path/to/outline.txtをUTF-8で出力します。

両方のプラグインとも、出力されたファイルをてけとーにモバイルデバイスなどにコピーして、外出先で読んだりすると良いのではないかなーと思います。

ま、でも、Plaggerってなに? って人は、素直にPiloWebProを使った方がいいんじゃないかなーとは思いますが……。

投稿者 CHEEBOW : 14:42 | [ Development, Perl ]

2006年5月20日

Plagger::Plugin::CustomFeed::NetLadio 修正版

ヒビノアワ: Plagger::Plugin::CustomFeed::NetLadio」で公開した、Plagger::Plugin::CustomFeed::NetLadioを修正しました。
今Publish系のプラグインを作っていて、なんか文字化けするなーと気づきました。
というわけで、お使いの方は、新しいのを使ってくださいませ。

ダウンロードは
Plagger::Plugin::CustomFeed::NetLadio
こちらからー。

投稿者 CHEEBOW : 16:47 | [ Development, Perl ]

2006年4月 7日

MT BanASCII 3.2 MT::I18N::encode_text対応版

最近、Movable Typeの標準スパム対策プラグイン「SpamLookup」をすり抜けてくるコメントやトラックバックが多くて嫌になる。
それも、短い英単語数語の内容だったりして、ますますウザい(笑)。

というわけで

MT BanASCII 3.2 対応: blog.bulknews.net

miyagawaさんの、このプラグインを試してみることに。
でも、これ、Perl5.8以上で動作ってあるので、このブログが設置してあるサーバでは使えない(Perl5.6だから)。
で、ソース見てたら、どうもEncodeモジュールを使っているところで引っかかっているっぽい。

なので、Movable TypeのモジュールMT::I18Nを使うように修正してみた。

--- mt-ban-ascii.pl.org 2006-04-07 17:27:23.085937500 +0900
+++ mt-ban-ascii.pl 2006-04-07 17:17:00.000000000 +0900
@@ -37,9 +37,9 @@
 
 sub handler {
     my($plugin, $obj) = @_;
-    require Encode;
+    require MT::I18N;
     my $charset = MT::ConfigMgr->instance->PublishCharset;
-    my $text = Encode::decode($charset, $obj->all_text);
+    my $text = MT::I18N::encode_text($obj->all_text, $charset);
     if ($text =~ /^[\x00-\xff]+$/) {
         if ($Method eq 'junk') {
             return (-1, "ASCII or Latin-1 comment");

いちお、これで動いてるみたい。
試してみたい方は、こちらから、ダウンロードできます。

mt-ban-ascii.pl(中止しました……)

追記:
MTBanASCII: コメントSPAM対策を MT3 に移植: blog.bulknews.netのコメントを見て気付きました……。
これじゃ駄目です。/^[\x00-\xff]+$/ だと、全部Banされちゃいますっ!
すでにインストールしちゃった人は、外してくださいませ……。ごめんなさい……。

投稿者 CHEEBOW : 17:18 | [ Movable Type, Perl ]

2006年4月 3日

Plagger::Plugin::CustomFeed::NetLadio

ヒビノアワ: YAPC::Asia 2006に行って来ました」で書いた、ホテルでハックしてたPlagger用のプラグインが、なんとかまとまったので、公開してみようと思います(Plagger0.6.0対応)。

Plagger::Plugin::CustomFeed::NetLadio

livedoor ネットラジオ / ねとらじから、現在放送中の番組表を取得するプラグインになります。
番組表の中から、例えば、最近放送が始まったものから5件分とか、リスナー数の多いものから10件分みたいな取得の仕方が出来ます。

この辺は、例によってyamlに書くわけですが、「最近放送が始まったものから5件分」なら

  - module: CustomFeed::NetLadio
    config:
      limit: 5
      sort: tims
      order: desc

って書けばいいし、「リスナー数の多いものから10件」なら

  - module: CustomFeed::NetLadio
    config:
      limit: 10
      sort: cln
      order: desc

って書けばよいです。sortに指定できるのは

  • URL :放送ツールで指定されるURL欄
  • GNL :放送ツールで指定されるジャンル欄
  • NAM :放送ツールで指定されるタイトル欄
  • TIT :放送ツールが送信する現在の曲名情報
  • MNT :マウントポイント
  • TIM :Unix epochでの放送開始時間
  • TIMS : yy/mm/dd hh:mm:ss 表記での放送開始時間
  • CLN :現リスナ数
  • CLNS :Icecast1.3系が出力する延べリスナ数
  • SRV :配信サーバホスト名
  • PRT :配信サーバポート番号
  • BIT :ビットレート

livedoorねとらじ ナレッジベース:ヘッドライン取得ツールへの情報提供についてより

になりますが、リスナ数とか、放送開始時間くらいしか使い道はなさそうな予感……。
limitを0にすると全件取得になります。orderはascで昇順、descで降順にソートします。

出来上がったフィードには、タイトルとして番組名、linkは放送しているストリーミングのURL、authorは放送者名ってのは分からないので、マウントポイントの頭から / をのぞいたのものにしてます。
本文は、

ジャンル名
Broadcasting URL: http://203.131.199.131:8080/hoge
Relation URL: http://jbbs.livedoor.jp/music/00000/
Listeners: 18
Total listeners: 19
Bit rate: 24

みたいな感じにしてます。

これを元にして、ストリーミングをFetchすれば自動録音も出来ちゃったりするかもって気もします。

良かったらお試しくださいませー。


追記:
NetLadioはNetRadioのスペルミスじゃない? というメールを頂いたのですが、

5.ladioという表記に関して

ねとらじは2004年7月にlivedoorに営業譲渡を行いましたが、以前は個人で運営されておりその頃はladio.netというドメインで運営されていました。
これは単純にradio.netというドメインがとれなかった事に端を発しているのですが、今ではねとらじという一般のラジオとはひと味もふた味も違う放送の場の微妙なニュアンスを象徴しているのではないかと考えています。
個人運営の頃の歴史を引き継ぐ意味も込めて、現在もladio.livedoor.comというドメインで運用させて頂いております。

ということで、正しい表記なのです。紛らわしいですけども(笑)
ねとらじリスペクトということで、僕のプラグインもこの名前をつけることにしました。

Perlはあんまし得意じゃないなぁ、とか苦手意識があったんですが、それじゃいかんと勉強のつもりで書いてみました。
なので、コードとか結構変だったりするのかも。ううむ。
特に、

    my $sort = lc($self->conf->{sort}) || 'tims';
    my $order = lc($self->conf->{order}) || 'desc';
    my @items;
    if ($sort eq 'tim' ||
        $sort eq 'cln' ||
        $sort eq 'clns' ||
        $sort eq 'prt' ||
        $sort eq 'bit') {
        @items = sort { $a->{$sort} <=> $b->{$sort} }  @{$data->{source}};
    } else {
        @items = sort { $a->{$sort} cmp $b->{$sort} }  @{$data->{source}};
    }
    @items = reverse @items if $order eq 'desc';

このあたり、各項目ごとにソートの方法を変える部分が、もうちょい何とかなるんじゃないかと思ったり。

あと、ねとらじ側で用意しているメタデータのXMLがS-JISなのでXML::Simpleでそのまま使えないので、

    my $xml = $res->content;
    from_to($xml, 'shiftjis', 'utf8');
    $xml =~ s/shift\-jis/utf-8/;

こんな変換をしてみたんだけど、これも、もう少しうまいやりかたがあるような気もするし。

それから、初めてPODってのを書いてみたのだけど、その記述方法云々の前に、そもそも英語がおかしくないか? それが心配。日本語の文章をexcite翻訳かけて、ちょっと修正しただけなので……。

というわけで、アドバイスなんかもいただけると嬉しかったりします。

投稿者 CHEEBOW : 11:04 | [ Perl ]

2006年3月31日

PERL5WEBDBを試してみる

昨日のYAPC::Asia 2006のプレゼンで興味を持った、PERL5WEBDBを手元のFedoraCoreマシンにインストールしてみました。
手順は、

# cd /var/www
# tar xzf perl5webdb-0.01.tar.gz
# cd perl5webdb-0.01
# bin/makeconf.pl `pwd` 3000 name pass >> /etc/httpd/conf/httpd.conf
# /etc/rc.d/init.d/httpd restart

こんな感じで。
ポートを何番にしていいのか良く分からなかったので、とりあえず3000とかにしてみた。これでいいんかな?
で、実際に http://localhost/webdb/ にアクセスしてみると、

Waiting for debugger...

わくわくして、待っても

Waiting for debugger...

あれれ。
なんか、僕が勘違いしてるとか、必要なものが入ってないとかなのかなー。
動かしてみたいのに。うーん。

投稿者 CHEEBOW : 13:50 | [ Perl ]

YAPC::Asia 2006に行って来ました

29日、30日の二日間YAPC::Asia 2006 Tokyoに参加してきました。
もともと、Perlは仕事で触ることはあるけど、そんなに好きな言語ではなかったのです。でも、MTに触れるようになってからは、とっても興味が出てきて、勉強をしたりしてます。まだまだ、経験も足りないし、Perlハッカーの集まりに参加してもなー、とは思わないでもなかっただけど、最近やたらアクティブでポジティブな僕は、えいやっ! と参加してしまいました。
しかし、まー、濃い。濃い二日間。
だって、会場を埋め尽くすのは、ハッカーだらけなんですよ。愛読してるブログのあの人や、この人。でもって、Perlの神様までいるし!
懇親会では、ビール飲みまくりで、いろんな人と話しまくり。でも、Perlの世界で僕はまったくの無名なので、自分のことを説明するのが大変。でも、今回は仕事の名刺とは別に「CHEEBOW名刺」を用意していたので、多少は分かってもらえたかなーと。いつかは、そんなんなしでも「あのCHEEBOW」って言われるようになりたいものですわ。うん。
朝からずっとセッションに集中してるので、疲労感もなかなかのもん。なのに、熱に浮かされたようにホテル(家まで帰るのが面倒で会場近くにホテルを取ってた!)に戻ってから、ハック!
翌日はなんとか寝過ごさずに起床。朝モスして、会場に。
セッションを夢中で聞く。でも、英語のセッションは、何を言っているのかがほとんど分からないので、楽しさ半減だったのだと思う。英語が分かればなぁ。でも、プレゼンの資料には翻訳もついてたので、なんとか理解は出来たかも。通訳だと、あのスピード感みたいなのはでないので、こういう方法はありかも。
あと、高橋メソッドを使う人が多かった。あのメソッドだと、英語のプレゼンでも、表示されている文章が短いので僕でも理解しやすくて、良いなーと思った。面白さとかスピード感だけじゃなくて、そんなメリットもあるんだなー。
しかし、濃い二日間だった。帰りの電車の中では、泥のように眠りこけました。
こんな素敵なイベントを企画、運営してくれたスタッフのみなさんにお礼を言いたいと思います。
ほんと、ありがとうございました。
むちゃくちゃ楽しかったです!

あ、で、僕が興味を持ったセッションの紹介と解説をば。
そのうち、プレゼン資料も公開されるのではないかと思うので、その時には、ぜひみてみてくださいまし。

Plagger - RSS/Atom remixing platform

最近僕が興味を持っている、pluggableなフィードアグリゲーションソフトについてのプレゼン。
このプレゼンを聞いた後、がぜんやる気が出て、ホテルに戻ってからハックしてしまった。

mixi.jp: ChangeLog

mixiがどのようにサーバを増強したり、負荷分散させてきたかの歴史。
さすがに、アクセス数がハンパじゃない。
プレゼンの後の質疑応答でも誰かが質問していたけど、この規模になったら、商用ソフトやハードの採用を検討してもいいかもと思った。
もしくは、Googleみたいに、根っこから自作するとか。
LAMPの限界ってのもありそう。

the first postmodern computer language vs the first Babel-17 computer Language: Ruby

ご存知、高橋メソッドの、高橋さんによるプレゼン。
Rubyは、洗脳言語……なんだってーーーー!

Perl Best Practices

とっても、ためになったプレゼン。

- コードのスタイルなんて気にせず、後で、Perltidyを使えばいいじゃない
- return undef; は駄目。return(); の方がいい。
- 正規表現を使うときは/xms を付けとくとイイ!
- モジュールを作る時は、Module-Starterを使おう。俺テンプレートも使えて便利!

なんて、Tipsが盛りだくさん。

Perl Best Practices
Perl Best Practices
posted with amazlet on 06.03.31
Damian Conway
Oreilly & Associates Inc (2005/08)
売り上げランキング: 15,910
おすすめ度の平均: 5
5 あの会社にいた頃にこの本があったら

買わなくちゃ!

Inside Hatena::Bookmark's Backend

はてなブックマークのサービス開始からの、サーバ構成の変遷。
あと、Apache2.2、かなりヨサゲ。

rapide - Remote Apache IDE

Perl CGIのデバッガ。
すごく出来がいいので、びっくりした。
これは、かなり期待しちゃう。

ダウンロードはこちら。

Kazuho@Cybozu Labs: PERL5WEBDB

ppencode for Perl6

とにかく腹を抱えて笑った。
内容もプレゼンも最高!

Template Toolkit + Javascript = Jemplate

最近、流行のJemplate。
JSONを使うときとかに便利だなー。
ブログとかで噂は聞いていたけど、やっぱ、良さそう。
今度使ってみたい。

投稿者 CHEEBOW : 11:58 | [ Perl ]