December 2006 Archives

EntryFullText で Xango 使って高速 Crawl

| 0 Comments | 0 TrackBacks

EntryFullText で Xango 使って高速 Crawl してウハウハになるつもりで、Aggregator::Xango と Filter::EntryFullText をくっつけて、Filter::EFTXango をでっちあげてみた。

けど、実際に使ってみると、遅いのは EFT だけではなく、ウハウハになれなかった。

Filter::EFTXango を専用のフェーズで実行するためのパッチ に関しては、update.*.fixup フェーズをプラグインごとに回すようにすればよいかも。

Filter::EFTXango で他のプラグインの assets を読めるようにするためのパッチとか作ってみたわけだけど、これは、class_id を上書きしてやればよいかも。

とりあえず、今年はこんな感じでしめくくり。

よいお年を。

すさまじい NHK 不払い督促状が送られている!!

| 0 Comments | 0 TrackBacks

いらない新聞捨てようと思って片付けしてたら、とんでもない記事を見つけた。

bogusnews 的なネタじゃなくて、ほんとに掲載されていた文章だよ。うん。ということで、事実を記載している部分を引用する。

見出し: NHK 沖縄 不払い督促状送付 21 年、30 万円請求も (琉球新報 2006年12月21日 朝刊 1 版 25 面)

NHK 沖縄放送局が過去にさかのぼった分を含めた受信料の督促状を、 県内の不払い世帯に送付していたことが、20 日分かった。 20 年以上、約 30 万円の請求もあった。 高額の請求に対して戸惑いの声も上がっており、 同放送局などに問い合わせが相次いでいる。

那覇市松川に住む男性(65)は、19 日に請求が届き 「文書を見てまず驚いたといた」という。 請求書には 1985 年 8 月 ~ 2007 年 1 月までの 21 年 6 ヶ月分、 約 30 万円の請求があった。

20 年分、約 30 万円を請求したとのこと。

現在東京とかで起きてる話だと、5 年分くらいの話ですよね。

時効とかどうなっちゃうノー?w

Happy Hacking Keyboard に関するアンケートに答えた

| 0 Comments | 0 TrackBacks

HHKBシリーズ発売10周年記念キャンペーンに関するメールが届いていた。

アンケートに自由作文のコーナーがあったので、以下のような趣旨で作文した。

  • HHKB Lite2(日本語配列)の左 Alt の位置がおかしいのではないか。
  • 通常のフルキーボードとわずかに異なる位置にあるため、混乱する。
  • 左 Alt のような特殊キーについては、ユーザの好みに合わせてカスタマイズ可能できるとよい。
  • ただし、ディップスイッチで2~3入れ替えできるだけでは貧弱。
  • キーボード側に不揮発性メモリを内蔵し、カスタマイズ後のキー配列を記憶できるとよい。
  • どの端末につないでも、カスタマイズした配列で利用できるとよい。

今日お店で HHKB Pro2 の展示品触ったのだけど、自分が使ってる HHKB Lite2 との差に少し悲しくなった。

Typeface のための perl-Task-Catalyst-Typeface を作った

| 0 Comments | 0 TrackBacks

Typeface という Catalyst で作られた CMS があるというので、試してみることにした。

いろいろ必要なのが分かったので、 perl-Task-Catalyst と同じノリの バーチャルパッケージ perl-Task-Catalyst-Typeface を作った。

fedora core 6 を入れて、worepo をセットアップして、yum install perl-Task-Catalyst perl-Task-Catalyst-Typeface すれば、必要なパッケージはとりあえずインストールされます。

  • worepo なり Makefile.PL なりで依存モジュールをインスコ
  • typeface.yml のデータベースまわりを書き換え
  • perl create_sql.pl でスキーマ作成
  • DB-Typeface::Schema-1.x-MySQL.sql を読み込む
    ERROR 1067 (42000) at line 11: Invalid default value for 'created_at'
    と言われるので、datetime をやめて timestamp にして、DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP にする。
  • perl create_login.pl
    What login do you want? woremacx
    What password do you want? password
    Your ready to rock and roll now.
  • あとは、データを追加。
    INSERT INTO `blogs` ( `id` , `name` )
    VALUES ('1', 'woremacx');

    INSERT INTO `blogs_users` ( `id` , `blog_id` , `user_id` )
    VALUES ('1', '1', '1');
  • perl script/typeface_server.pl -k でテストサーバ起動

今後の開発状況に期待。

worepo for fedora core 6 を更新 (2006/12/24)

| 0 Comments | 0 TrackBacks

worepo を更新しますた。

root で

rpm -ivh http://pub.woremacx.com/worepo/worepo-release-6.rpm

すれば yum 関連の設定は OK です。

あとは、yum install perl-Plagger すれば、plagger のインストールができます。

また、yum install perl-Task-Catalyst すれば、Task-Catalyst に載っているパッケージのインストールができます。

追加してほしいパッケージのリクエストがあれば、何らかの手段でご連絡ください。

worepo のアップデート予定のお知らせ

| 0 Comments | 0 TrackBacks

worepo のアップデートに関するお知らせです。

12月24日に worepo for fedora core 6 をアップデートします。

それまでは古いパッケージでよろしくお願いします。

クールな WordPress のテーマである GlossyBlue をためしてみる

| 0 Comments | 0 TrackBacks

GlossyBlue というクールなテーマがあるのを知った。 私もそろそろクールなテーマを使ってみたいと思った。

そこで、実験的に woremacx notes というブログを作って、フロントページにテーマを適用してみた。

perl で wma なファイルのタグを読む方法

| 0 Comments | 1 TrackBack

大量のコンピレーションなアルバムとかのせいで、wma なファイルが散らかって困ったことになっている。

なので、タグを読んで、アルバムごとにディレクトリを作って放り込む方法を考えたい。

ffmpeg とかをライブラリとして使うか、もしくはソース切り出してきて使うか、マウスで一つずつ処理していった方が時間かからないんじゃないか、どうしようって悩んでいたのだけど、cpan 探したら「Audio::WMA - Perl extension for reading WMA/ASF Metadata 」と、まさに私がいまやりたいことができるものがあった。しかも pure perl。

ということで、さっそくテストしてみる。

UTF-8 で簡単に取り出せることがわかったので、お片づけしたい。

#!/usr/bin/perl

use strict;
use Audio::WMA;

Audio::WMA::setConvertTagsToUTF8(undef, 1);

my $top = "/var/music/wma/つじあやの/COVER GIRL";

opendir(D, $top) or die $!;
for my $f (readdir(D)) {
    next if /^\./;

    my $wma = Audio::WMA->new($top . "/" . $f);
    my $tags = $wma->tags();

    print "$f\n"
    print "$_: $tags->{$_}\n" for keys %$tags;

}

以下のような感じで、タグの一覧が得られる。

つじあやの - 結婚しようよ.wma
ALBUMTITLE: COVER GIRL
AUTHOR: つじあやの
TITLE: 結婚しようよ
...

DBIC が生成する SQL をログってみる

| 0 Comments | 0 TrackBacks

Catalyst アプリで DBIC が生成する SQL だけを見やすい形でログりたかったので、お二人の方法をまねしてみた。

Catalyst アプリの中で、

use UNIVERSAL::require;
our $REGISTER_FLG = 0;

__PACKAGE__->setup;

sub add_logger {
    my $cfg = __PACKAGE__->path_to('log.yml');

    Log::Dispatch::Config->require or die $@;
    Log::Dispatch::Configurator::YAML->require or die $@;
    my $yaml = Log::Dispatch::Configurator::YAML->new($cfg);
    Log::Dispatch::Config->configure($yaml);
    my $log = Log::Dispatch::Config->instance;

    __PACKAGE__->model('DBIC')->storage->debug(1);
    __PACKAGE__->model('DBIC')->storage->debugcb(
        sub {
            my ($op, $info) = @_;
            $log->info($info);
        }
    );

    $REGISTER_FLG = 1;
}

add_logger() unless($REGISTER_FLG);

log.yaml

---
dispatchers:
  - file
  - screen

file:
  class: Log::Dispatch::File
  min_level: debug
  filename: /path/to/dbic.log
  mode: append
  format: '[%d] [%p] %m'
#  format: '[%d] [%p] %m at %F line %L%n'

screen:
  class: Log::Dispatch::Screen
  min_level: info
  stderr: 1
  format: '%m'

漢現る

| 0 Comments | 0 TrackBacks

お世話になっております。woremacx です。

見出しの件につきまして、ご連絡差し上げます。

2006年12月10日 xcezx ちょw おま っっw んこ こで引き下がったら漢が廃る。

今後とも blog.woremacx.com をよろしくお願いします。

feedback

| 0 Comments | 0 TrackBacks

livedoor クリップ - blog.woremacx.com: ITmedia で複数ページにまたがってる記事を 1 つのエントリにまとめちゃう より

2006年12月08日 xcezx plaggerどーでもいいが、サイドバーのオススメに表示されてるのが「ヴァギナ 女性器の文化史」。思わず注文しようかと思った俺は非モテ。

という xcezx さんのコメントを発見!!

どう書けばご購入いただけるか悩んだので、いくつか列挙してみる。

  • ぜひご購入ください。
  • 神秘的なヴァギナをご堪能ください。
  • ヴァギナで失敗する人、成功する人 ~ その紙一重の差とは?
  • まだヴァギナのことを知らないままでいますか?
  • blog.woremacx.com は、Amazonアソシエイト・プログラムに参加しています。Amazon.co.jp だから安心・安全。
ヴァギナ 女性器の文化史
キャサリン・ブラックリッジ 藤田 真利子
河出書房新社
売り上げランキング: 10054

Plagger の Filter::EntryFullText を使ってページをマージするやつの続き

| 0 Comments | 0 TrackBacks

ITmedia で複数ページにまたがってる記事を 1 つのエントリにまとめちゃう で書いたコードを少しいじった。

permalink が / や /index.s?html? で終わってるとき、重複しないようにしてみたつもりだけど、いまいちしっくりこない。

ほかには、

以下の場所に、パッチ変更後のコード、assets はまとめてあります。

ITmedia で複数ページにまたがってる記事を 1 つのエントリにまとめちゃう

| 0 Comments | 0 TrackBacks
  • ITmedia で複数ページにまたがってる記事を 1 つのエントリにまとめる方法を考えてみた。
  • aggregator.finalize フェーズで、merge_entry_handle にマッチしたエントリを fetch して、merge_entry_follow_xpath で指定されている場所に [次のページ]へのリンクが含まれていれば、Feed に一つのエントリとして追加する。
  • エントリとして追加してあるので、update.entry.fixup フェーズで EFT される。
  • update.fixup フェーズで、それっぽいエントリをまとめちゃう。

EFT へのパッチ、assets に関しては、以下の場所に移動しました。

Plagger の context に model を追加して勝手にウハウハ

| 0 Comments | 0 TrackBacks

Plagger で、いろんなプラグインから model を使ってみたいなぁと思った。

Catalyst だと、$c->model('foo') として使うので、Plagger もそのようにしたい。

Catalyst の sub model を読んでると、default_model を config から指定できたりして便利機能があることが今回わかった。今後マネをしていきたい。

というわけで、Plagger::Plugin::Store::DBIC をベースにして、context に model を追加するための Plagger のコアの diff と Plagger::Model 。

Index: lib/Plagger.pm
===================================================================
--- lib/Plagger.pm	(revision 1898)
+++ lib/Plagger.pm	(working copy)
@@ -26,6 +26,7 @@
 use Plagger::Template;
 use Plagger::Update;
 use Plagger::UserAgent; # use to define $XML::Feed::RSS::PREFERRED_PARSER
+use Plagger::Model;
 
 my $context;
 sub context     { $context }
@@ -40,7 +41,8 @@
         subscription => Plagger::Subscription->new,
         plugins_path => {},
         plugins => [],
-        rewrite_tasks => []
+        rewrite_tasks => [],
+        _models => {},
     }, $class;
 
     my $loader = Plagger::ConfigLoader->new;
@@ -61,9 +63,21 @@
     $self->load_plugins(@{ $config->{plugins} || [] });
     $self->rewrite_config if @{ $self->{rewrite_tasks} };
 
+    for my $model (keys %{$self->{conf}->{model}}) {
+        my $modelclass = Plagger::Model->new($self->{conf}->{model}->{$model});
+        $self->{_models}->{$model} = $modelclass;
+    }
+
     $self;
 }
 
+sub model {
+    my($self, $name) = @_;
+    Plagger->error("no such model named $name")
+        unless exists $self->{_models}->{$name};
+    return $self->{_models}->{$name}->schema;
+}
+
 sub bootstrap {
     my $class = shift;
     my $self = $class->new(@_);
Index: lib/Plagger/Model.pm
===================================================================
--- lib/Plagger/Model.pm	(revision 0)
+++ lib/Plagger/Model.pm	(revision 0)
@@ -0,0 +1,22 @@
+package Plagger::Model;
+use strict;
+
+use base qw( Class::Accessor::Fast );
+__PACKAGE__->mk_accessors( qw(schema) );
+
+sub new {
+    my $class = shift;
+    my $self = bless { schema => {} }, $class;
+
+    my $opt = shift;
+    unless ( $opt->{schema_class} and $opt->{connect_info} ) {
+        die('schema_class and connect_info are required');
+    }
+    $opt->{schema_class}->require
+        or die(qq/Can't load schema class "@{[ $opt->{schema_class} ]}", $@/);
+    $self->{schema}  = $opt->{schema_class}->connect( @{ $opt->{connect_info} } );
+
+    return $self;
+}
+
+1;

使い方としては、以下のような config を書いて、

global:
  model:
    DBIC:
      schema_class: Plagger::Schema::SQLite
      connect_info: [ 'dbi:SQLite:/path/to/plagger.db', ]

plugins:
  - module: Store::Model
    config:
      model: DBIC

Store::Model の中では、

sub store {
    my ( $self, $c, $args ) = @_;

    # feed
    my $model = $c->model( $self->conf->{model} );
    my $feed = $model->resultset('Feed')->find_or_new(
        {   link => $args->{feed}->link,
            type => $args->{feed}->type,
        }
    );

のように使える。

keep my motivation

| 0 Comments | 0 TrackBacks

モチベーションを高めたいなら達成すればいい を読んで。

いろいろ気になることが書いてありました。

“必ず”達成できる目標を設定することが有効です。最終的な目標につながるものであることが望ましいです。

明確なゴールとなる目標を設定した上で、必ず達成できるようにゴールへの一歩となる目標を作り、必ず達成していく。

いつも目標を達成できない、約束を守れないというのは、負け癖が付いている状態といえます。負け癖の付いた状態では絶対に勝つことができません。一方で、勝ち癖が付いている状態であれば、本来は自分よりも強いはずの相手にまで勝つことができます。

負け癖人生から、勝ち癖人生へスイッチ。

勝ち癖!勝ち癖!勝ち癖!

彼らがなぜあれほどまでに非凡な結果を出せるのか? 彼らの結果に非常に大きな影響を与えているのが、勝ち癖なのです。

勝ち癖があればなんでもできる。という気持ちになれるくらい勝ち続けることが重要。

「あなたの信念の中で、この役割を遂行するに当たって有効なものは何?」

行動を起こす前に、信念との関連を再確認し、信念に基づいて役割を果たすと。

自分の信念に基づいて、いかにその信念からブレずに、目標を達成し続けていくか。そういうことがやっぱり重要なんだよねと感じた記事でした。

Daft Punk の MUSIQUE VOL.1 1993-2005 がよい

| 0 Comments | 0 TrackBacks

napster でタワレコのランキングからの特集があって、Daft Punk の MUSIQUE VOL.1 1993-2005 が紹介されていた。

よいよい。

MUSIQUE VOL.1 1993-2005
ダフト・パンク
東芝EMI (2006/03/29)
売り上げランキング: 17495

The 2006 Catalyst Advent Calendar

| 0 Comments | 0 TrackBacks

[Catalyst-dev] Announce: The 2006 Catalyst Advent Calendar

2006 年度の Advent calendar がでるそうです。

Catalyst も、1年間でいろいろ変わっているので、どんな Tips が紹介されるのか楽しみですね。