Bulknews::Subtech RSSフィード

2006/08/27 (日)

XML::LibXML 1.60 14:39  XML::LibXML 1.60 - Bulknews::Subtech を含むブックマーク はてなブックマーク -  XML::LibXML 1.60 - Bulknews::Subtech

http://search.cpan.org/src/PAJAS/XML-LibXML-1.60/Changes

  - make {get,set,has}Attribute(Node)? methods work with full
    attribute names rather than just localnames.
    (Although DOM Level 3 is not very clear about the behavior of
    these methods for an attributes with namespaces, it certainly
    does not imply that getAttribute('foo') should return value of a
    bar:foo, which was the old behavior.)

たぶんこれの影響で t/12-feed.t がこけるようになった。一応以下の修正でうごいたけどコレで正しいのか問い合わせ。

=== lib/XML/Atom/Feed.pm
==================================================================
--- lib/XML/Atom/Feed.pm        (revision 4087)
+++ lib/XML/Atom/Feed.pm        (local)
@@ -76,7 +76,7 @@
             $elem->setAttributeNS('http://www.w3.org/XML/1998/namespace',
                 'lang', $_[0]);
         }
-        return $elem->getAttribute('lang');
+        return $elem->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang');
     } else {
         if (@_) {
             $feed->elem->setAttribute('xml:lang', $_[0]);

[Plagger] Convert Apache index to Podcasts 01:45  [Plagger] Convert Apache index to Podcasts - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Convert Apache index to Podcasts - Bulknews::Subtech

[debian][lame][ogg][ruby]Index of /RubyKaigi2006/audio のoggをmp3にした記録, [Game][FF3][NDS]FF3 二日目, [Planet][LLRing][Plagge.. - HsbtDiary(2006-08-26)

Podcasting のような RSS で用意してくれるとダウンロードするのも楽なのになあとか思ったけど、明らかに狙ってる感があるからそれはそれでいいや

それPla

http://jp.rubyist.net/RubyKaigi2006/audio/ を Podcast に。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://jp.rubyist.net/RubyKaigi2006/audio/
          meta:
            follow_link: \.ogg$
  - module: CustomFeed::Simple
  - module: Filter::FindEnclosures
  - module: Filter::HEADEnclosureMetadata
  - module: Publish::Feed
    config:
      dir: .
      format: RSS
      filename: rubykaigi.xml

Ogg は application/ogg で mediaType が audio/video/image のいずれかではないのでハックしたりとか必要だった。あとファイル名に . が入っているときに mime_type_of がこけるバグ修正したり。

できあがりは一応ここにおいておきます。http://blog.bulknews.net/rubykaigi.xml

2006/08/25 (金)

[Plagger] ○○Pla 19:34  [Plagger] ○○Pla - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] ○○Pla - Bulknews::Subtech

2006-08-25

  • それPlaそれPlaggerでできるよ
  • じゃあPla → じゃあPlaggerでやってみて
  • これPla → これPlaggerで出来ないかな? これPlaggerのプラグインほしいね
  • あれPla → あれPlaggerで出来てたんですね

2006/08/23 (水)

[Plagger] 天気予報をメールで 21:00  [Plagger] 天気予報をメールで - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] 天気予報をメールで - Bulknews::Subtech

http://amail.am/

アメールは、その日の朝の天気予報で雨が予想されていたときに、あなたのケータイにメールを送信する、そんなサービスです。

それPla

# check Tokyo's weather forecast on weather.livedoor.com
# If the forecast says it rains, notify me via Email

plugins:
  - module: Subscription::Config
    config:
      feed:
        - http://weather.livedoor.com/forecast/rss/13/63.xml

  # HACK: Grabs 2nd entry from livedoor Weather feed
  - module: Filter::Rule
    rule:
      expression: ++$::index == 2

  - module: Publish::Gmail
    rule:
      expression: $args->{feed}->entries->[0]->title =~ /雨/
    config:
      mailto: you@example.com

降水確率でチェックをmetadataにいれてできるといいんだけど、RSS フィードには入ってないみたいだ>livedoor Weather

[Plagger] Forrent Search 16:22  [Plagger] Forrent Search - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Forrent Search - Bulknews::Subtech

f:id:miyagawa:20060823162035g:image

フォレントの検索結果をチェック。「本日の新着・間取り図あり」な URL でしかテストしてない。permalink の URLが長くなるので http://trac.mizzy.org/public/browser/plagger/trunk/lib/Plagger/Plugin/Filter/TinyURL.pm を使った。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - http://www.forrent.jp/house/cgi-bin/fr/frkensaku.cgi?BA=FR&AR=030&SE=040&GA=0000h2&MG=000030&PG=000032&CP=NEXT&RG=000032&SW=&PN=1&TEMP1=K^20|K^01|K^17|M^3|M^4|M^5|S^000005|S^000070|S^000050|S^000020|S^000055|S^000060|S^000030|T^1|BA^FR|AR^030|CB^0|CN^10|CT^150|EP^301|GA^000032|MB^50|MG^000030|PG^000030|PN^1|PS^50|SE^040|SM^0|SO^1|COUNT_SHU_CD^06|BTN^1&PS=50&TC=7&SO=1&OS=1&SM=0&OK=SORT_CHN&MVF=&UK=&EK=&KC=

  - module: CustomFeed::ForrentSearch
  - module: Filter::TinyURL
  - module: Filter::Rule
    rule:
      - module: Deduped
  - module: Publish::Gmail
    config:
      mailto: miyagawa@gmail.com

コード。YAML でかけるようにしたす。

2006/08/21 (月)

[Perl] Load all template plugins installed 23:09  [Perl] Load all template plugins installed - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Perl] Load all template plugins installed - Bulknews::Subtech


package Template::Plugin::Loader;
use Module::Pluggable search_path => 'Template::Plugin', require => 1;

sub import {
    local $SIG{__WARN__} = sub { };
    __PACKAGE__->plugins;
}

1;

import Template::Plugin::Loader;

2006/08/20 (日)

[Plagger] pluggable Summarizer 05:04  [Plagger] pluggable Summarizer - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] pluggable Summarizer - Bulknews::Subtech

summary サポートも佳境。

Plagger::Entry は body, summary を持ち、それぞれ html か text かの属性を持つ。Aggregator::Simple でフィード巡回する場合、RSS に description や atom の summary などがあれば、それぞれを $entry->summary にセットする。

summary, body が HTML なのかプレーンテキストなのかは、フォーマットからある程度ヒューリスティックに判定する。Atom の場合は TextConstruct に書いてあるので、これを尊重すべきだろう(= TODO)。詳しくは Plagger::Text あたりを参照。

で、summary がとれない場合、かつ body がある場合(なので EntryFullText でアップグレードしたエントリも対象となる)は Summary::Auto プラグイン(コアから自動で呼び出される)でサマリを自動セットする。

デフォルトでは Plagger::Util::summarize が使われ、

  • HTML なら最初の段落
  • なければ最初の BR タグ
  • なければ全部
  • テキストなら先頭から255 bytes

というようにサマリがつくられる。が、summarizer.summarize をフックするプラグインを書くことによってサマリの生成をプラガブルにすることも可能。

ページが見つかりません。 - Plagger

  • Summary::English: Lingua::EN::Summarize を利用 (Filter::GuessLanguage で判定して en のときのみ)
  • Summary::HatenaBookmark: b.hatena.ne.jp/atomfeed を利用して summary を取得。どうも Cookie がないとはじかれるようなのでスクレイプにするか、WSSE で /atom/edit を見るかは検討
  • Summary::TextOriginal: Text::Original を利用して1文目を取得
  • Summary::TrackbackRDF: Trackback RDF に含まれる dc:description を取り出し

という感じの実装を用意しておいた。ほかにも CPAN に Summarize 系のモジュールがあるのでglueプラグインが書けるでしょう。Filter::EntryFullText と Summary::* でそれぞれ本文・サマリを別個にとってこれるのがイカス。

また summarizer.summarize は run_hook_once で実装されているので、処理できない場合は return すれば複数の summarizer が順に使われる (Chain of Responsibilities)。Summary::English は language == 'en' の場合だけだし、HatenaBookmark ははてブで概要が見つかったときだけ。

で、あとはこの summary をどう Publish/Notify で使うかをこれから設定可能にして hackathon-summary ブランチは終了。プラグインごとに summary/body の html/plaintext どちらを使うのかを設定できるようにしたいわけだが書式はまだ未決。

[Plagger] $entry->body, $feed->title etc. are now Plagger::Text object 21:20  [Plagger] $entry->body, $feed->title etc. are now Plagger::Text object - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] $entry->body, $feed->title etc. are now Plagger::Text object - Bulknews::Subtech

XML::Atom や XML::Feed::Content なんかですでにやっているんだけど、HTMLかプレーンテキストがくるかわからない文字列は Plagger::Text というクラスオブジェクトになるようにした。たとえば Entry の title, body, summary や Feed の title, description など。(mk_text_accessors で ack)

$entry->body->type; # 'html' or 'text';
$entry->plaintext;  # HTML なら strip_html, text ならそのまま

詳しくは ページが見つかりません。 - Plagger を。

一応 overload してあるので、[% entry.title | html %] なんて書いてもそのまま動くけど、URI やら HTML::Parser やら、リファレンスを渡すと違う挙動をするモジュールに渡す場合には、

$string = $entry->body->data;
$utf8_bytes = $entry->body->utf8;

のようにメソッドで取り出すが吉。


[Perl] utf8::decode vs. Encode::decode_utf8 21:15  [Perl] utf8::decode vs. Encode::decode_utf8 - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Perl] utf8::decode vs. Encode::decode_utf8 - Bulknews::Subtech

$foo = "abc";
utf8::decode($foo);               # $foo is NOT utf-8 flagged
$foo = Encode::decode_utf8($foo); # $foo is utf-8 flagged

utf8::decode は対象文字列にコードポイント 256 以上の文字がふくまれていない場合にはフラグをたてない。

[Plagger] Util methods in UserAgent 17:41  [Plagger] Util methods in UserAgent - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Util methods in UserAgent - Bulknews::Subtech

ページが見つかりません。 - Plagger

プラグインで RSS/Atom データをパースする際、自力で UserAgent->fetch して XML::Feed->parse していたけど、UserAgent にベンリメソッド2つつけた。

my $ua   = Plagger::UserAgent->new;
my $feed = $ua->find_parse($url);  # do Auto-Discovery
my $feed = $ua->fetch_parse($url); # No Auto-Discovery

[Plagger] Decode YAML utf-8 16:36  [Plagger] Decode YAML utf-8 - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Decode YAML utf-8 - Bulknews::Subtech

ページが見つかりません。 - Plagger

config の YAML を Unicode にデコードするようにした。これで rule とかで日本語マッチさせるときに encode/decode させる必要がなくなった。

が、Win32 で「デスクトップ」などの文字列を dir などに使おうとすると mkdir/open がしける。これは ActivePerl の問題だからどうしようもないな。。とりあえず、

global:
  no_decode_utf8: 1

としておくとデコードしません(以前の動作と同じ)

naoyanaoya2006/08/21 10:45Cookie ないと取得できないのはバグすね...なおしときます。

2006/08/19 (土)

[Plagger] assets_path can now be localized 18:35  [Plagger] assets_path can now be localized - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] assets_path can now be localized - Bulknews::Subtech

プラグインブロックごとに assets_path を指定できるようになった。

global:
  assets_path: /foo
plugins:
  - module: Foo::Bar

この場合、 /foo/plugins/Foo-Bar

global:
  assets_path: /foo
plugins:
  - module: Foo::Bar
    config:
      assets_path: /bar

この場合、 /bar

となる。チェックアウトディレクトリを汚さずにテンプレートを置き換えたいときなどにベンリ、かも。1つの config でプラグインごとに違うディレクトリから読むこともできるはず。

詳しくは http://plagger.org/trac/browser/trunk/plagger/t/core/assets_path.t を。

2006/08/18 (金)

Axkit2 01:07  Axkit2 - Bulknews::Subtech を含むブックマーク はてなブックマーク -  Axkit2 - Bulknews::Subtech

no title

はてなブログ

Axkit2 がでてる。XML ベースのアプリケーションサーバとしての興味は maki さんも書いてるけどもういいや、って感じなんだけど内蔵されてる Danga::Socket ベースのプラガブルな高速 Web サーバの方が興味はあるな。

とりあえず

> cp etc/axkit.conf.sample etc/axkit.conf
> ./axkit

で port 8000 で走る。plugins/ にあるプラグインで serve_file みたいなことするわけね。qpsmtpd っぽい。

Docroot の index.html へのベンチは、

Requests per second:    64.49 [#/sec] (mean)
Time per request:       155.060 [ms] (mean)
Time per request:       15.506 [ms] (mean, across all concurrent requests)
Transfer rate:          140.66 [Kbytes/sec] received

な感じで static にしてはちょっと遅い。いらないプラグインを削ればもっと速くなるかも。

2006/08/16 (水)

[Plagger] Widget::Simple is now in trunk 17:03  [Plagger] Widget::Simple is now in trunk - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Widget::Simple is now in trunk - Bulknews::Subtech

ページが見つかりません。 - Plagger

FeedFlare みたいのの Config 版。ほとんどの Widget はコレだけでかけるはず。

f:id:miyagawa:20060816181732g:image

  # hello world
  - module: Widget::Simple
    config:
      link: http://www.example.com/
      content: Hello World
  # use query in link
  - module: Widget::Simple
    config:
      link: http://www.example.com/add
      query:
        url: $args->{entry}->link
        ver: 4
      content: Hello World
  # generate dynamic content using Template
  - module: Widget::Simple
    config:
      link: http://www.example.com/
      content_dynamic: "Entry from [% entry.author | html %]"

たとえば del.icio.us なら、

- module: Widget::Simple
  config:
    link: http://del.icio.us/post
    query:
      url:   $args->{entry}->permalink
      title: $args->{entry}->title
    content: <img src="http://del.icio.us/static/img/delicious.small.gif" alt="del.icio.us it!" style="border:0;\
vertical-align:middle" />

とすれば OK。

assets もサポートしたので、assets/Widget-Simple/{widget}.yaml があれば、

- module: Widget::Simple
  config:
    widget: delicious

としてサイトをロードできる。既存の Widget:: は全部、ページが見つかりません。 - Plagger に突っ込んでおいた。

# はてブの # 処理だけやたら汚くなる。。。

いままで野良だった MM, Livedoor Clip, Reddit を追加。Digg とか Technorati あたりは誰かかいてプリーズ。

JSONP 15:38  JSONP - Bulknews::Subtech を含むブックマーク はてなブックマーク -  JSONP - Bulknews::Subtech

JSON view に関数名をつけてクロスドメイン呼び出し、なんだけど、Catalyst::View::JSON ではずいぶん前に(今年の1月)対応しますた。

http://search.cpan.org/~miyagawa/Catalyst-View-JSON-0.11/lib/Catalyst/View/JSON.pm#CALLBACKS

を参照のこと。

Trac Tickets 02:41  Trac Tickets - Bulknews::Subtech を含むブックマーク はてなブックマーク -  Trac Tickets - Bulknews::Subtech

Trac のチケットUIをデフォルトの Report ではなくて Query にしてるんだけど、認証してログインした状態だと、デフォルトで自分が Owner なチケットしかでてくれない。

というわけで、http://plagger.org/trac/query を見ても、ログインした状態だと何も見えてなかった(自分で Owner is を - ではずして Update すれば見えるけど)。

これはあんまよくないので Tracコードをハック。trac/ticket/query.py:

            if req.authname and req.authname != 'anonymous':
                foo = 1
                #constraints['owner'] = (req.authname,)
            else:

constraints の行をコメントアウトしただけだと構文エラーになった。影響なさそうな文をいれて回避。たぶんもっと Pythonic な方法があるんだろうけど。

2006/08/15 (火)

[Plagger] Filter::ExtractAuthorName 21:42  [Plagger] Filter::ExtractAuthorName - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Filter::ExtractAuthorName - Bulknews::Subtech

RSS 2.0 の author や webMaster は RFC 2822 なメールアドレス形式であるので、多くのサイトが

  <author>nobody@example.com (miyagawa)</author>

みたいにして名前を埋め込んでいる。ここから名前を抽出するプラグインが Filter::ExtractAuthorName。Email::Address で parse して name をとるだけですが。

ページが見つかりません。 - Plagger

2006/08/14 (月)

[Plagger] Test::Chimps 22:12  [Plagger] Test::Chimps - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Test::Chimps - Bulknews::Subtech

Best Practical で使ってる test smoke server の Test::Chimps を入れてみた。いろんなマシンで make test して、その結果を Test::TAP::Model にして送信、それを Test::TAP::HTMLMatrix で表示してくれる。

http://plagger.org/chimps-server

インストールがちょっと大変だっだけど、動いてるのはなかなか cool. みなさんもひまなマシンがあったら、plagger の trunk から、tools/chimps-client.pl を実行してみてください。結果が plagger.org/chimps-server に送信されます。(make test がこけたり warnings が出ても Chimps に送られないのは Test::TAP::Model の制限らしいがイケテない。この辺は Jesse も認識してたから改善に期待)

実行には Test::Chimps::Client が必要。これがまた大量の dependencies が必要。(Client なんだから LWP と TAP だけにしてほしいのだけど、いまは Test::TAP::Model のオブジェクトを client でつくるようになってる)UNIX系なら install Test::Chimps::Client で普通に。Win だと force じゃないと無理かも。

rss を吐くように Test::Chimps::Server::Lister をハックして、plaggerbot の巡回先に追加。タイトルが 100.00% じゃないときだけ notify されるように。

2006/08/13 (日)

YAML parser 14:43  YAML parser - Bulknews::Subtech を含むブックマーク はてなブックマーク -  YAML parser - Bulknews::Subtech

YAML::Syck だと utf-8 を Unicode に decode しながらパースできる。

use YAML::Syck;
$YAML::Syck::ImplicitUnicode = 1;

my $foo = YAML::Syck::Load("foo: あああ\n");
warn utf8::is_utf8($foo->{foo}); # 1

Plagger で YAML::Syck に依存してもいいけど XS 依存はあんまり増やしたくないっすなあ。まあ Win32 でも ppm あるから簡単に入るは入りますが。

YAML.pm で utf-8 でデコードしながら読むのは、ハック的だけどこうしてroundtripするのが一番簡単。

use YAML;

my $data = YAML::LoadFile($file);
my $yaml = YAML::Dump($data);
utf8::decode($yaml);
$data = YAML::Load($yaml);

それか、Unicode::RecursiveDowngrade の逆をやって upgrade する。

use YAML;
use Unicode::RecursiveDowngrade;

my $data = YAML::LoadFile($file);
my $rd = Unicode::RecursiveDowngrade->new;
   $rd->filter(sub { utf8::decode($_[0]); $_[0] });
$data = $rd->downgrade($data);

downgrade という名前で upgrade するのはキモイがこんな感じ。

Object::Apply みたいに一般化したほうがいいね。

2006/08/12 (土)

[Plagger] 23:21  [Plagger] - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] - Bulknews::Subtech

Plagger で送信するメールに Message-Id をつけてスレッディングする話題。Gmail だと From と Subject が同じなら自動的にやってくれるが Gmail 以外のMUA ではおそらく無理。というわけで自前で Message-Id 管理してスレッディングする方法を模索。newspipe のコードをみたらかなりシンプル。

        msgid = email.Utils.make_msgid()
        headers += [('Message-ID', msgid),]


        lastid = historico_feeds[self.channel.xmlUrl].get("lastid", "")
        if lastid == "":
            m = md5.new()
            m.update (self.channel.xmlUrl)
            refid = "<" + m.hexdigest() + "@rss.example.com>"
            lastid = refid
        else:
            refid = lastid.split()[-1]
        # endif

        if include_threading:
            headers += [('In-Reply-To', refid),]
            headers += [('References', lastid),]

        if historico_feeds[self.channel.xmlUrl].has_key("lastid"):
            historico_feeds[self.channel.xmlUrl]["lastid"] = " ".join( (historico_feeds[self.channel.xmlUrl][
"lastid"] + " " + msgid).split()[-4:] )
        else:
            historico_feeds[self.channel.xmlUrl]["lastid"] = refid + " " + msgid
        historico_feeds["modified"]=True

フィードごとに最後に送った Message-id を覚えておいて In-Reply-To と References につければOK。プラグインごとのDBが簡単に作れればいいんだけど。

[Plagger] Intranet blog to IRC 09:19  [Plagger] Intranet blog to IRC - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Intranet blog to IRC - Bulknews::Subtech

Six Apart の社内イントラブログサーバに Plagger をインストール。だれかがイントラブログ更新すると社内のIRCで通知される素敵な関係に。

いまはやってないけど、

- module: Publish::Gmail
  config:
    mailto: everyone@SAKK
  rule:
    expression: $args->{entry}->title =~ /重要/

とかで重要エントリはメーリングリストに、とか、社内 Jabber で全員に同報送信とかもいいかも (needs Notify::Jabber hacker!)。

ちなみに↑の Publish::Gmail は期待したようには動かない。

  • Publish::Gmail はフィード単位で動く。エントリ単位ではない
  • expression の日本語は utf-8 decode する必要あり。YAML 自動的に utf-8 decode したいけど後方互換性が。。。 http://plagger.org/trac/ticket/281

ついでにインストールログ。CentOSで。

sudo apt-get update
sudo apt-get install subversion emacs
sudo cpan

cpan> force install Module::Build
cpan> install Bundle::CPAN
cpan> install Module::Install Test::Base YAML

cpan> force install Cache::Cache Class::Accessor::Fast DateTime Date::Parse DateTime::Format::Mail DateTime::Format::Strptime DateTime::Format::W3CDTF Encode File::Find::Rule HTML::Parser HTML::ResolveLink MIME::Types Module::Pluggable::Fast Net::DNS Template Template::Provider::Encoding Term::Encoding Text::Tags UNIVERSAL::require URI::Fetch XML::Atom XML::Feed XML::RSS::LibXML
cpan> install POE POE::Component::IRC POE::Component::IKC

> svn co http://svn.bulknews.net/repos/plagger/trunk/plagger
> cd plagger
> perl Makefile.PL --default
> sudo make

> cp example/irc.yaml irc.yaml
> vi irc.yaml
> ./bin/plagger-ircbot -c irc.yaml &
> ./plagger -c irc.yaml

2006/08/11 (金)

[Plagger] MT plugin 11:10  [Plagger] MT plugin - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] MT plugin - Bulknews::Subtech

MT で Plagger を起動するの図。

no title

2006/08/10 (木)

[Plagger] ハッカージャパン 11:56  [Plagger] ハッカージャパン - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] ハッカージャパン - Bulknews::Subtech

献本おねがいします。

2006/08/08 (火)

[Perl] 00:06  [Perl]  - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Perl]  - Bulknews::Subtech

no title

Unicode 文字列にして、普通に tr/// でやればいいような。

use strict;
use warnings;

use utf8;
my $str = "シックス・アパート";
$str =~ tr/ア-ン/あ-ん/;

print $str; # しっくす・あぱーと

2006/08/07 (月)

[Plagger] Help running make test 17:37  [Plagger] Help running make test - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] Help running make test - Bulknews::Subtech

.t 充実期間中。svn の trunk から make test して、All tests successful にならなければ、nopaste かなにかで教えてください。

make test の前に、YAML, Module::Install, Test::Base の最新版を CPAN から入れる必要があります。

2006/08/03 (木)

[Plagger] DRY dependency handling 12:31  [Plagger] DRY dependency handling - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger] DRY dependency handling - Bulknews::Subtech

ページが見つかりません。 - Plagger

いままで Makefile.PL にずらずら書いていたプラグインの依存モジュールを deps/Module-Name.yaml に移動した(スクリプトでコンバートして手動でちょろちょろなおした)。で、ユニットテストからプラグインの依存モジュールをチェックするときは、単に

test_plugin_deps;

と書けば .yaml をロードして依存モジュールを調べ、なければ skip_all してくれる。他のプラグインの依存モジュールを調べるときは、

test_plugin_deps('Publish-Gmail');

などとすればよい。

DRY++

2006/08/02 (水)

[Plagger] 02:25  [Plagger]  - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [Plagger]  - Bulknews::Subtech

no title

Notify系は、不在のときに通知するのを待っていて欲しいものもある。(Beepとか)

これは Rule にすると cool じゃないすかね。

- module: Notify::Whatever
  rule:
    module: LoggedInAndActive

とかこんな感じに?