XML::FeedのContent

LDRでこのblogのフィードの本文が表示しなくなってしまい、なんでかなーと。

% perl -MXML::Feed\ 999  
XML::Feed version 999 required--this is only version 0.23.
BEGIN failed--compilation aborted.
% perl -MXML::RSS\ 999 
XML::RSS version 999 required--this is only version 1.43.
BEGIN failed--compilation aborted.

バージョンは上の通りで、

use XML::Feed;

my $feed = XML::Feed->new('RSS');
$feed->title( "test" );
$feed->link( 'http://www.kzfmix.com/rss' );
$feed->description("feed test");

my $feed_entry = XML::Feed::Entry->new('RSS');
$feed_entry->title('feed test');
$feed_entry->link('http://www.kzfmix.com/test');
$feed_entry->summary("test summary");
$feed->add_entry($feed_entry);

print $feed->as_xml;

を実行してみると

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:dcterms="http://purl.org/dc/terms/"
>

<channel>
<title>test</title>
<link>http://www.kzfmix.com/rss</link>
<description>feed test</description>

<item>
<title>feed test</title>
<link>http://www.kzfmix.com/test</link>
<description>test summary</description>
<guid isPermaLink="true">http://www.kzfmix.com/test</guid>
<content:encoded> </content:encoded>
</item>
</channel>
</rss>

とスペース一個content要素が出来る。このせいかなと、contentに本文を入れて出力するように変更してみた。

fedora10にあげたらblogが動かなくなってあせった

昨晩、家のサーバーをfedora8から(9にあげるつもりがねぼけてて)一気に10にあげてしまって、perlが5.10になってしまい、夜中までかかってCatalystとかPlagger関連のperlのモジュールをたくさん入れた。

で、Catalystのバージョンも最新のになったのだけど、blogシステムが動かなくなってしまい、あせった。というか、viewまわりの指定とか認証周りとか変わってるっぽいがそこらへんを修正してとりあえず動くようにしたが、週末にでもちゃんと書き直そう。

ついでにsubversionで管理していたblogシステムをmercurialに移行した。で、 この本読みながら、いじってる。

ProductName 入門Mercurial Linux/Windows対応
藤原 克則
秀和システム / ¥ 2,310 ()
在庫あり。

hg serveでログがグラフ表示されるのが楽しくて、無駄にブランチ切ってマージしたりとかしてるが、pullとmergeの使い方がいまいちちゃんと理解できてないので、第3部のチーム利用の章がもっと厚いとよかったかもと思った。

Chemistry::RECAP

Chemistry::RECAPというモジュールを書いたのでケモインフォクックブックも更新しといた。

インストールはダウンロードして

tar xvfz Chemistry-RECAP-0.01.tar.gz 
cd Chemistry-RECAP-0.01
perl Makefile.PL 
make 
make test
sudo make install

PerlMolのインストールと使い方は以下の書籍が参考になるかも。

perlのlocal

ふと気になったので。

use Perl6::Say;

our $a = 10;

say "\*a(G):\t",\*a,"\t\$a=$a\t", \$a;
my $x = \$a;
my $y;

{
  local $a = 20;
  $y = \$a;
  say "\*a(L):\t",\*a,"\t\$a=$a\t", \$a;
  say "\*x:\t",\*x,"\t\$x=$$x\t", $x;
}

say "\*a(G):\t",\*a,"\t\$a=$a\t", \$a;
say "\*x:\t",\*x,"\t\$x=$$x\t", $x;
say "\*y:\t",\*y,"\t\$y=$$y\t", $y;

これを実行する

$ perl typet.pl
*a(G): GLOB(0x80f480)  $a=10  SCALAR(0x80f4e0)
*a(L): GLOB(0x80f480)  $a=20  SCALAR(0x8041c0)
*x:    GLOB(0x832f50)  $x=10  SCALAR(0x80f4e0)
*a(G): GLOB(0x80f480)  $a=10  SCALAR(0x80f4e0)
*x:    GLOB(0x832f50)  $x=10  SCALAR(0x80f4e0)
*y:    GLOB(0x8330b0)  $y=20  SCALAR(0x8041c0)

型グロブはlocal宣言しても同じメモリ上の位置を見に行く(0x80f480)。そこから先、つまり$(*a)の結果が変わる。元の変数が待避されるってのはリファレンスがいじられるってことか。

ということは、値の入ってるメモリの位置さえ分かっていれば、localで宣言する前の値にアクセスできるし($x)、localで宣言した値をスコープの外へ持ち出すってことも可能($y)なのね。

OS自作入門 12-13日目

タイマーについて

ProductName 30日でできる! OS自作入門
川合 秀実
毎日コミュニケーションズ / ¥ 3,990 ()
在庫あり。

そうかそうかー

で、精度ってどれくらいなの?と疑問がわいてきたので調べたら、はてなのナオヤさんのエントリにヒット。

わかりやすい解説が素晴らしい。

Time::HiResの話も面白かったのでソースも読んでみる。

名前付きパイプ

pは名前付きパイプらしい。mkfifoコマンドで作成できる。

$ mkfifo test
$ ll
合計 0
prw-r--r-- 1 kzfm kzfm 0 2009-02-17 19:49 test

パイプがいっぱいの時には書き手側がブロックされ、パイプが空の場合には読み手側がブロックされる。

書き手側

for my $i (0..3) {
  open my $fh, ">", "test";
  print $fh "test-$i";
  close $fh;
  sleep 1;
}

読み手側

while (1) {
  open my $fh, "<", "test";
  while(<$fh>){ print "Got: $_\n";}
  close $fh;
  sleep 3;
}

とやると読み手側で待たされて10秒くらいかかって終わる。

$ time perl testwrite.pl
perl testwrite.pl  0.00s user 0.00s system 0% cpu 10.004 total

POSIXにmkfifoもあった。

このzshの記事も面白そう

モダンPerl入門 6-9章

残りを読んだ。

ProductName モダンPerl入門 (CodeZine BOOKS)
牧 大輔
翔泳社 / ¥ 2,940 ()
通常5~7日以内に発送

6章はテスト。Apach::Testの使い方とか非常に参考になる。 8章はC APIとXS。これはあとでちゃんと読む(今回は流し読み)

モダンPerl入門 1-5章

おもしろいし、読んでて楽しく、勉強になる。

ProductName モダンPerl入門 (CodeZine BOOKS)
牧 大輔
翔泳社 / ¥ 2,940 ()
通常5~7日以内に発送

1章2章はMoose。特に2章はMooseでデザパタ。5章はシステムツールをMooseとかdeamontoolsを使って作るっていう話で、Mooseでコマンドラインツール作ったり、デーモン作成の話とかfork()が非常に参考になった。

Simoのソース読み

ここのところOn Lispとか実践Common Lispを読んで、マクロって面白いなぁと。

という流れで、Simoのソースを読んでみた

そういえばModule::Compile::TTがあったのを思い出した。

That said, string level preprocessing of source code sucks. However, since Perl doesn't have a convenient AST to write Lisp-style macros and deeper templates (that are aware of Perl's own semantics), this module does fill a niche.

Lispだとマクロをガリガリ使えるのは抽象構文木のおかげ?そこらへんのモヤモヤが晴れないのは精進が足りないからか。

MooseとCLOSのこと

第4回Smiley Hackathon(仮)に参加してみることにしました!で、

なぬ、CLでMoose?と思ったので、lingrで色々教えてもらったら、Mooseのソース読まなきゃいけない気分になったのと、Smiley Hackathonに行きたくなったんだけど、予定が埋まってたので無理だった。

ProductName The Art of the Metaobject Protocol
Gregor Kiczales
The MIT Press / 5303円 ( 1991-07-30 )


これも読みたい。