2006年 09月 06日

Publish::XSLT

package Plagger::Plugin::Publish::XSLT;

use strict;
use base qw( Plagger::Plugin::Publish::Feed );

use XML::LibXML;
use XML::LibXSLT;
use File::Spec;

our $stylesheet;

sub register {
	my ($self, $context) = @_;

	$self->SUPER::register($context);

	$context->register_hook(
		$self,
		'publish.feed' => \&publish_feed,
		'plugin.init'  => \&plugin_init,
	);
}

sub plugin_init {
	my ($self, $context, $args) = @_;

	my $xslt   = XML::LibXSLT->new();
	$context->log(debug => "loading " . $self->conf->{xsl} . " as StyleSheet");
	$stylesheet = $xslt->parse_stylesheet_file($self->conf->{xsl});
}

sub publish_feed {
	my ($self, $context, $args) = @_;

	$context->log(info => "XSLT processing Start..");
	my $f = $args->{feed};
	my $filepath = File::Spec->catfile($self->conf->{dir}, $self->gen_filename($f));

	my $parser = XML::LibXML->new();

	$context->log(debug => "loading $filepath as source XML");
	my $source = $parser->parse_file($filepath);

	my $result = $stylesheet->output_string( 
		$stylesheet->transform($source)
	);
	
	my $ext = $self->conf->{extension};
	$filepath =~ s/\..+?$/.$ext/;
	$context->log(info => "save feed for " . $f->link . " to $filepath");

	utf8::decode($result) unless utf8::is_utf8($result);
	open my $output, ">:utf8", $filepath or $context->error("$filepath: $!");
	print $output $result;
	close $output;
}

1;
  - module: Publish::XSLT
    config:
      format: Atom
      dir: /home/cho45/public_html/feeds/
      xsl: /home/cho45/test.xsl
      extension: html

とりあえずコピペと見よう見まねで Publish::XSLT だけ作ってみる。普通に TT で十分だからいらないなぁと思った。


継承でハマった。register_hook でフックを登録しているのだから、register で自分の分を登録して、SUPER で親クラスのを登録させないとだめだ。当たり前だ。

むしろ継承する意味あるんだろうか。load_plugin でいけるような。元の Feed も吐くから継承関係はいいといえばいいのかなぁ。そもそも元のフィードは吐くべきでない気がするけど

Gerry on the Shore

長かった。向ヶ丘遊園で初動・下北沢あたりからひどくなった。

mixi をRSSリーダーとして使う

Plagger でどっかに吐いてそれを自分のフィードに設定する。

CSS IE

a:hover 時にマージンだかなんだかが変わるバグでハマり中。全然わからない。手探りもいいとこだ

一通り margin. padding, border 変えたけどだめだ。

テスト機が重すぎて自動リロードがつかえない。fuck IE

全然関係ない要素がいっしょにズレんだよなぁ。しかも position absolute なのにズレる。どういうフローだ

Use of uninitialized value in subroutine entry at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/Socket.pm line 370.
Bad arg length for Socket::unpack_sockaddr_in, length is 0, should be 16 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/Socket.pm line 370.
exit 107

Win IE のセキュリティ設定を高にして Fedora で動いてる Catalyst 叩くと50%ぐらいの再現率で落ちる。トライアンドエラーもままならないなぁ。ああああ

CGI 版で起動、と思いきや、CGI 動作の重さをあまく見てました。ぜんぜんレスポンス帰ってこない。

hatena.vim

& が正常がなぜか置換されないため増殖する。なんでだろう。ちゃんと置換してるっぽいのに。

:echo substitute('&', '&', '&', 'g')

が & のままだ。なんか特殊文字入ってるんだろうか

substitute('&', '&', '\&', 'g')

としないとだめらしい
:h sub-replace-special
& 単体だとマッチ文字列になるので、何も変わらないという理屈らしい

Publish::Diary SmartFeed::Diary

どうするのがいいかなぁ。SmartFeed::Diary は書いたけど、Publish をどうすればいいんだろう。ディレクトリ掘って保存するなら、Publish が頑張らないといけないだろうし、でもそこで XSLT もかましたい、とすると……
あー、プラグインで Publish のあとにさらに、Publish::Diary とか作って、保存済みの smartfeed_diary_\d{4}(_\d\d(_\d\d)?)? をリネームするやつを作ればいいのかな。やってみよう。

2006年 09月 05日

オフライン

オフラインで開発するとき必要なの考えよう。
とりあえず Ruby リファレンス。Perl も必要か。でも Perl は CPAN 見れないと無理だな。ああ、そのためのコマンドがあった気がする。と、しかしオフラインだと「あった気がする」では検索ができないので困る。今のうちに調べないとなぁ。

AdSense

PIN 届かない!

exe

exe "normal! i#hogehoge"

1h

リナザウの時計が1時間ずれててびびる。
それにしても前に立ってるおばちゃんが生理的にだめだ。。。臭いとか、動きとかが不自然だ。はやく降りたい

Publish::XSLT , SmartFeed::Diary みたいなの、を、さがす。なければ作ってみる。

  - SmartFeed::Diary # year, month, day ごとにまとめてそれを id に
  - Publish::XSLT # use base qw( Publish::Feed );
      config:
        type: Atom # 渡すフォーマット 
        xsl: html.xsl
        extension: html
        dir: /hoge
  • /2006/
  • /2006/09/
  • /2006/09/21/
  • /2006/09/21/1

ファイルの生成ルール変えるから Publish もごにょごにょしないといけないのかな。filename_for の実装見るとシンプルに safe_filename で削除ってどーんってやってるから、ディレクトリとか作りたければ Publish で頑張るしかないか。
でも Publish::XSLT がそういうことするのはおかしい気がする。と、想像ばかりしつつ Plagger のソース読みたい。

というのを、吐き気を催しつつ電車の中で考えた。できるのかなぁ

2006年 09月 04日

nil or null

最近なんとなく null より nil のほうが好き。

taglibro 秋田

この日記はローカルで XML 編集してアップロードして書いているのだけど、いい加減 XML 書くのが嫌になってきた。Markdown と Trac Wiki 記法とを混ぜたやつで書きたい。それとローカルでしか書けないのがだめすぎ。外出先から日記を書けない。

XML で書くのは、全て制御できるけれど、もうそれにいまいち魅力を感じなくなってしまった。別に Markdown だって HTML が書けないわけじゃないし、HTML を完全に思い通りに書いても、そんなに意味がない気がしてきた。well-formed なら十分なんじゃないか? って思い始めた。abbr はかけるコストの割りに役に立たない。ような。

URL はそのままで、うまく再構築したいなぁ。トラックバックはいらないし、久しぶりに Ruby だろうか。Rails 使ってみたいけど、CGI 動作じゃ死にそうだから使う気にならない。うーん

控えめな Brainfuck コードを色づけする GM

>>+++++[-<++++++>]<+[-<++>]<.>+++[-<------>]<-....
.....>++++++[-<++++++++>]<.>>+++++++++++[-<++>]<+[
-<-->]<.+++++++++++++++.-----------------.........
...>+++[-<++++++>]<+.>+++++[-<++++++>]<+.>++++++++
+++[-<--->]<.-----------------.+++.-........+.---.
..........>+++++++++++[-<--->]<.>+++++++++++[-<+++
>]<....+++.++++++++++++++++.>+++[-<------>]<-...>+
+++++[-<++++++++>]<.>>+++++++++++[-<++>]<+[-<-->]<
.+++++++++++++++.---------------......++++++++++++
+++++.>+++++[-<++++++>]<+.>+++++++++++[-<--->]<.--
-------------.+.++++++++++++++++.>+++[-<------>]<-
.............>++++++[-<++++++++>]<.>>+++++++++++[-
<++>]<+[-<-->]<.+++++++++++++++.---------------...
..+++++++++++++++++.>+++++[-<++++++>]<+.>+++++++++
++[-<--->]<.--------------.++++++++++++++++.>+++++
++++++++[-<---->]<.>+++++++++++[-<+++>]<..........
.......>++++++[-<++++++++>]<.>>+++++++++++[-<++>]<
+[-<-->]<.+++++++++++++++.-----------------..>+++[
-<++++++>]<+.>+++++[-<++++++>]<+.>+++++++++++[-<--
->]<.--------------.---....+++.++++++++++++++++.>+
++[-<------>]<-..........>++++++[-<++++++++>]<.>>+
++++++++++[-<++>]<+[-<-->]<.+++++++++++++++.------
---------.....>+++++++[-<----->]<.>+++++++[-<+++++
>]<.+++++++++++++++++.>+++++[-<++++++>]<+.>+++++++
++++[-<--->]<.--------------.>++++++[-<------>]<.

coloring-brainfuck.user.js

おまけ。昔書いたやつ。選択範囲内のbfを実行.js for JSActions

。。

フレームワーク理解度: Catalyst > Rails
言語理解度: Ruby >> Perl

日記どうするのがいいかなぁ。定期的に考えるなぁ。

  • RDB をできれば使いたくない。(使ってもいいか)
  • Markdown で書きたい。あるいは Trac Wiki
  • オンラインで編集したい

どうしたにせよ、今のデータからの移行が面倒くさい。

日記

はてダをとってきて表示するだけの CGI とか。デザインだけ変えるっていう。怒られるなたぶん。

はてなアイデア

そういえば気になってたこと

>>++++++++++++++[-<++++++++>]<+[-<++>]<+.>+++++++[
-<-------------->]<.+++++.>>+++++[-<++++++>]<+[-<+
++>]<.>++++++++++++[-<-------->]<.>>+++[-<++++++>]
<+[-<+++>]<.>+++++++++++++[-<+++>]<.>++++++++++++[
-<-------->]<-.+++++++++++++++++.>++++++++++[-<+++ 

が色付けされない。

これグリなので http://lowreal.net/logs/2006/09/04/3 実装した。

MT のテンプレートをインポートする。

ごちゃごちゃやる用事があって MT を使っているのだけど、テンプレートを一括して作ってある場合インポートするのがひどく面倒くさいのでスクリプト化してみた。

make-import-mt-templates-bookmarklet.rb

開くと TEMPLATES の定義があるので、例にならって適当に書く。書いたら ruby make-import-mt-templates-bookmarklet.rb 出力ファイル名.js とかやると、本体ができる。ついでにブックマークレットの雛形を出力する。

なんか説明すると意味わからないな。できた JS は Fx1.5 以上で動く。

配布する人さえこれを使えば、そのテンプレートを利用したい人はブックマークレットを利用するだけ、という形をとる。

  • 利用者が Fx を使っている必要がある。
  • mt のバージョンが 3.2-ja. 3.3 だとたぶん動かないので注意。誰か試してgtlt3.32-ja でもいけるっぽいです。

サンプルとして、Web Standards with MT ver.3.2 Strict : ダウンロードページ のテンプレをパックしてここで再配布してみる (自分のやつはちょっと問題があるので)。パックしたやつはもとのライセンスにしたがい CC-by-nc-sa に。

テンプレートをインポートする : このブックマークレットを一時的にブックマークして、MT のテンプレ一覧ページで使うだけです。

書き換えて使った上のスクリプト pack_mt_3_2_strict.rb


バグっててテンプレが壊れても知りません。テストしてみようとして既存のテンプレ上書きしても知りません (自分がやった)

else if

そういえば else if ってこういう形では滅多に使わない。最初の if と並列なのか、ネストなのかはっきりしない感じがちょっときもいからかもしれない。並列したいときはできるだけ switch でいけるように変換する。
Ruby の場合 case に式書かなければ else if 等価になるから、elsif はまず書かない (今 elsif と書くために elseif だっけ? と悩むぐらい全く書かない)