Perlのデリファレンス

$[0]の謎は偶然の産物経由で知ったPerlの関数引数 $[0]の謎

自分の場合、デリファレンスするとき必ず

use strict;
use warnings;

sub hoge {
    print ${ $_[0] }
}

my $str = 'foo';

hoge( \\$str );

見たいに{}で囲むようにしてる。何故か。

あとreferenceとderefereceを「レファレンス」「デレファレンス」と読んでたんだけど自分だけ?

: Coding 虚像幻影(nowa)からインポート

はてなダイアリーがメンテナンス

かなり困った。書けないんじゃなくて見れない。

はてなダイアリーは使ったことないんだけど、購読しているサイトが多いから結構困る。

早く終わらないかな。

: Diary 虚像幻影(nowa)からインポート

著作物の公正使用

日本の著作権制度の融通の利かなさ加減についてを読んで思ったこと。

著作権法の改正かなんかあった場合、著作物のフェアユース(公正利用)を法的に認めるように要求していけば良いんじゃないかと思った。

もっともフェアユースが盛り込まれるか微妙だけど。

: Society 虚像幻影(nowa)からインポート

ダウンロード規制と国民の権利

企業が商品を売り惜しみすれば、闇市が栄える。

違法なダウンロードを規制することと衝突する権利について。

上記記事をまとめると、著作物の違法なダウンロードを規制すると、

  1. 違法なダウンロードをしたかどうか調査する場合、ダウンロードした者の思想・良心の自由を侵害可能性が高い。
  2. 海外の情報を海外で(不正に)アップロードしたもののダウンロードが禁止されることにより、情報鎖国が実現してしまう。

の二つの問題がある。ということらしい。

で、思ったんだけど、誰が何をダウンロードしたかを調査する場合、通信の秘密を侵害されることにはならないんだろうか。

少なくとも、ISPは何をダウンロードしたか分かってるし、何をダウンロードしたか分かれば、それが違法か適法かが分かる。

と言うことを思った。

: Society 虚像幻影(nowa)からインポート

Plaggerの改造案メモ

昨日書いた改造案はどうしたら良いんだろう、と言うことを今日遠出をしているときに考えてた。

で、こうなった。

aggregator.parse
  aggregator.filter.'formatName'
  aggregator.entry.fixup

説明するっていうか忘れないようにまとめると、

Aggregator系のプラグインでaggregator.filter.feed、aggregator.entry.fixupを行うのを廃止、代わりにaggregator.parseフェーズをrun_hook_onceで実行して、なんらかの形でPlagger::Feedを取得、そのあと$context->update->add( $feed )する。

で、aggregator.parseフェーズではまず、渡されたデータを解析する前に、aggregator.filter.'formatName'を実行する。RSSやAtomだったらaggregator.filter.feed、HTMLだったらaggregator.filter.htmlとか。

で、aggregator.filter.*でデータソースを修正してから、実際に解析してPlagger::FeedにPlagger::Entryを詰め込む。その際にaggregator.entry.fixupを実行する。

と言うのが結構スマートだと思う。

だめだ、眠い。

: Software 虚像幻影(nowa)からインポート

Plaggerで大量のHTMLサイトを巡回するにはどうしたらいいか

Plaggerで大量のFeed捌く場合はAggregator::XangoとかAggregator::Asyncとか使えるから問題はない。

問題は100とか200とかのHTMLを巡回する場合。

CustomFeed::DebugでダミーFeed作ってFilter::EntryFullTextとかでタイトルと本文ゲットとかするわけだけど、これを高速化する手順がなかなか見つからない。

Filter::EntryFullTextとXangoくっつけて高速化するパッチはあったけど、他にも似たようなことをしようとすると、似たようなことを繰り返すことになってしまう。

で、データとってくる部分を共通化できないかってことで、色々考えてた。ぶっちゃけFilter::EntryFullTextでタイトルと本文(HTMLのbody)と更新日時取ってくる代わりにCustomFeed::AntennaとかAggregator::Antennaとか作って高速化できないかなーと色々ソース見たものの、構造的になんかうまくできない感じだなーどうしたらいいんだ改造してしまえと言う結果が昨日と今日のPlagger関係のエントリだったりする。

いや、真剣にどうしよう。今の速度でレンタルの共用サーバでPlagger定期的に動かすのは数からいってちょっとやばいのでなんとかしたい、というかなんとかしないとアンテナが作れない。まあ、自分でサーバ用意してFTPで共用サーバに上げればば良いんじゃねとか思うけど、サーバが用意できない。だからレンタルサーバに突っ込んだんだけど、(ryっていうかループ。

うん。どうしたもんか。と言いつつもこういうの考えてるの結構好き。

遠出して疲れて眠いせいか妙にテンション高い。

: Software 虚像幻影(nowa)からインポート

Aggregator::Simpleにaggregator.parseフェーズを実装するパッチ

パッチを修正しました。修正したのはAggregator::Simpleにaggregator.parseフェーズを実装するパッチ 修正版です。

=== lib/Plagger/Plugin/Aggregator/Simple.pm
==================================================================
--- lib/Plagger/Plugin/Aggregator/Simple.pm (revision 52)

+++ lib/Plagger/Plugin/Aggregator/Simple.pm (local)

@@ -15,7 +15,7 @@

     my($self, $context) = @_;
     $context->register\_hook(
         $self,
-        'customfeed.handle'  => \\&aggregate,
+        'customfeed.handle'  => $self->can('aggregate'),
     );
 }

@@ -38,7 +38,7 @@

         $res = $self->fetch_content($feed\_url) or return;
         $self->handle_feed($feed_url, \$res->content, $args->{feed});
     } else {
-        return;
+        $self->handle_content($url, $res, $args->{feed});
     \}

     return 1;
@@ -215,6 +215,19 @@

     $str;
 }

+sub handle_content {
+    my ($self, $url, $res, $feed) = @_;
+
+    my $context = Plagger->context;
+    my $args    = {
+        url      => $url,
+        response => $res,
+        feed     => $feed,
+    };
+
+    $context->run_hook_once('aggregator.parse', $args);
+}
+
 1;

 __END__

なんか書いてみたらあっさりできてしまった。

ちなみに他のAggregator系のプラグインで対応するにはやっぱり改造が必要なので注意。

: Software 虚像幻影(nowa)からインポート

Aggregator::Xangoが固まる

自分の環境(WindowsXP + ActivePerl)だけなのかよく分からないんだけど、

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://ryusukeworks.com/atom.xml
  - module: Aggregator::Xango

でPlaggerごと固まる。Aggregator::AsyncやAggregator::Simpleだと問題ない。

なんでだ。

追記

さくらインターネットでも固まることを確認。

: Software 虚像幻影(nowa)からインポート