■2004-06-09
* [Perl] XMl-RPC for WIki API2
XMl-RPC for WIki (FSWiki用)を修正。他のWiki用でも利用しやすいようにインターフェース部分を分離。さらにデータ型をversion2にあわせました。
追記:仕様ではページが存在しない場合にFaultを返さなければならないのですが、そうなっていなかったので修正。(v.2.01)
追記:blogger.getUsersBlogs()に対応するためにModFSWiki.pmにメソッド追加。(v.2.02)
* [雑感] rubyのバージョン
レンタルサーバが緊急メンテナンス。気が付くとrubyが1.6.8から1.8.1に。tdiaryで利用しているuconvが効かなくなったので再make。それより何故perlは上がりませんか?
* [CGI][Perl] metaWeblog.newPostでFSWikiに投稿
blogで飼うこうさぎなるものがあるそうで、XML-RPCを利用して記事の投稿までするとか。ということを知ったのはこちらのwikiで間違ってXML-RPC for Wikが取り上げられていたからです。
その記事を本当のことにするべく、metaWeblog.newPostを使ってFreeStyle Wikiに記事を投稿できるモジュールをつくってみました(blog2fswiki)。XML-RPC for FSWikiに付属のモジュールを利用しているだけですが。これで「こうさぎ」なるものがWikiに書き込みをしてくれるのでしょうか。
Movable Type で使える XML-RPC APIというのを参考にしているのですが、文字のエンコードについてどうなってるのかわからなかったのでとりあえずeuc-jpを前提にしてあります。
例によって使う人がいるのか怪しいのですが一応説明しておきますと、予めwiki_xmlrpc-202をインストールしてから、blog2wiki.cgiをwiki.cgiと同じディレクトリに設置し、libの下にBlog2WikiというディレクトリをつくってFSWiki.pmを置いてください。動作はPerl5.8,5.00503ともにFSWiki3.5.3で確認しています。
* [雑感] JEncodeは登録しないのか
JEncodeをグッドラッパーとして紹介してくださってる記事(NDO::Weblog)でCPAN に登録はしないの? とありまして、これは実際CPANに登録しようかと考えたこともあります。それにもかかわらず登録していないのは
1. 手続きが面倒くさそう(←へたれ)
2. そのうちJcode v2が出るだろうから(→でなさそう…)
という理由からです。
あと、CPANに登録すると使うのを躊躇する人が出るんじゃないかというのも理由の一つとしてあります。rootでないとCPANモジュールを利用できない(あるいはレンタルサーバではCPANモジュールは利用できない)と思ってる方は結構いらっしゃるようなので。それだったらこのサイトに置いて、Googleなりなんなりで検索してみつけた人が使ってくれれば良いかなあと考えていたのです。でもCPANに登録してみたいなあという気持ちも結構あったり。
ついでに初めてトラックバックしてみるの。
■2004-06-12
* [Perl][CGI] metaWeblog.newPostでWikiに書き込み
先日の続き。はてなでXML-RPCを参考にしてglucoseからFreeStyel Wikiに書き込みを行い、動作を確認しました。→試したFSWiki(なんか横ちょにうさぎが居ますが、現在投稿してくれるかどうか実験中です。背景はこちらから頂きました)
blogger.getUsersBlogsをログイン可能なWiki Farm全てをblogidとして返すように実装し直しました。 blog2fswiki
追記:wiki_xmlrpcのバージョンをあげました。孫Wikiに書き込みができなかったのを修正。blogger.getUsersBlogs用に追加したメソッドをblog2fswikiの方に移動。クラス名ももう少し適切なものに変更。
* [雑感] うさぎ
FSWikiで飼ってみているこうさぎというのはRSSをみて言葉を覚えるらしいのですが(参照させているのはWikiのRSSではなくてtDiaryの方)、最初は確かに単語をRSSから取り出してランダムに出力していたっぽいのですが、昨日から「どんぞこ〜」しか言わなくなりました。「どんぞこ〜」しか言わないうさぎは何かもの悲しい……
あ、なおった。
* [雑感] 不買
『「政治アレルギー」の正体』の反響よりという記事の一番最後の方に出てくる、「不買を表明しても実際には買ったっていいじゃん」という趣旨の文に虚をつかれて笑ってしまいました。いいなあ、これ。そういう開き直りもあるんだなあと。
私自身は不買運動は「あり」だと思いますが、より重要なことは、生き方として自分の態度を首尾一貫させるために行うということでしょうか。「志なきものに一銭のお金も払いたくない!」というのは、これまた実行するのは難しいけれども、同感どうかん。
■2004-06-15
* [ゲーム] ローカルルールかな
先週、電車に乗っていて、ふと画期的な遊びを思いつきました。単に「しりとり」なのですが、最後が「ん」で終わる単語にしなければならないというもの(まあ、ありがちな変則ルールですね)。次の人は単語の最後の「ん」の前の字を頭に持ってきます。
これで思う存分「ん」で終わる単語が言えます。「ん」で終わって負けた幼い頃の悔しい思い出とも、おさらばです。これぞ「逆襲のしりとり」。
とりあえず「今、ニューヨークのエグゼクティブの間で大はやり」という触れ込みで友人知人に勧めてみては如何? それはともかく、思いついたときにその場で試してみました。以下その時のゲームを大まかに再現しました。
私A:「うどん」
私B:「どうてん」
私A:「てんどん」
私B:ど…またどかよ! 「どかん」
私A:か…「かんぴょう」→降参
* [雑感] なつかしい思いでばなし
さて、しりとりといいますと、小学校の頃、毎日帰り道に友人と延々とやったものですが、その過程で厳格なルールが形成されました。概ねこちらサイトに書かれているルールと同じなのですが、固有名詞は最終的に完全に禁止になりました(当然地名もだめ)。これらに加え、複合名詞(それに類するもの)の禁止がありました。私が「り」攻めに凝っていたころ、相手が「りくぐんたいしょう」と返してきました。私「うぐいすばり」→相手「りくぐんたいさ」→私「さそり」→「りくぐんしょうさ」……てな具合で、複数の独立した名詞をくっつけるのは無しになった次第。やがて「ゆでたまご」で「たまご」全般(いりたまご、たまごやき等々)が以降利用不可になるなど一層無駄に厳しいルールになっていきましたとさ。
と、ここまで書いた時点で、「全日本しりとり協会」か何かできっと公式ルールがあるだろうと探したのですが、そんな協会も連合も連盟もないようです。国際あやとり協会はあるのに。
* [雑感] しそう・しんじょうに対するテロ
「君が代」強制批判のPTA会長、辞任に追い込まれる……う〜ん、これ本当? 先だっての東京都教育委員会による教師の大量処分や、久留米市教育委員会の「君が代」斉唱の音量測定などを見聞きするにつけ、こういう方々は「批判を許さない社会」を目指しているようにしかみえませんよ。思想テロルを行う人達が跳梁跋扈するのは実に気持ちの悪いことで。
「PTAは思想的に真っ白であるべきだ」に対するここのコメント欄→「思想的に真っ白っつーと、白知って感じですかね」。おお、これは言い得て妙。
蛇足:普段「どんぞこー」ばかりしか言わないこうさぎですが、(RSSから単語を拾って)たまに俳句を詠んでくれるとか。で、今日初めて詠んでくれました。
「小学校 強制すれば 小学校」
滂沱。
■2004-06-18
* [Perl][CGI] Blog2FSWiki
blog4fswikiにmt.getCategoryList, mt.setPostCategories等を実装したのでglucoseから投稿時にカテゴリの取得・設定もできるようになりました。これはなかなか便利かも。
追記:blog4fswikiに名前を変更しました。
■2004-06-21
■2004-06-23
* [Perl] XML::Parser::LiteでTreeスタイル
CPANのSOAP::Liteに同梱のXML::Parser::Liteは、本物のXML::Parserと違ってTreeスタイルやObjectスタイルが使えません。そこでXML::Parser::Liteからもスタイルを利用できるようにXML::Parser::Lite::Styleをこさえてみました。
→下の「XML::Parser::LiteHeavy」を参照してください。
CPANにはXML::Parser::Lite::Treeというのもあるのですが、こちらはXML::Parserとは違った形式で吐き出すようです。これでコンパイラが使えない環境の方でもXML::Simpleが利用できるかも(少なくともバージョン1系は大丈夫そう)。注意点としては、XML::Parserと違いXML::Parser::Liteは'"'や'>'を自動では元に戻してくれないのですが、XML::Parser::Lite::Styleもこれをそのまま引き継いでいます。
* [Perl] XML::Parser::Liteの拡充
XMl::Parser::LiteはXML::Parser同様、パース中にコールバックルーチンを呼び出します。ただし可能なのはInit,Start,Char,End,Finalだけと、些か寂しいものとなっています。それで改造してCdataStart,CdataEnd,Comment,Procまで何とか利用できるようにしました。ふぅ。何が大変って、コールバックルーチンの中でバックトラックが発生する正規表現(同然splitなども)を利用しようとするとPerlがクラッシュするんですね。しかたがないからsubstrで置換処理を実装しました。もう少し拡充したら公開できるかもしれません。ついでに目標としてはPuerPerlなXML::Atom。 XML::Pathを独自につくらないとどうにもならなさそうですが。
* [Perl] XML::Parser::LiteHeavy
XML::Parser::LiteHeavy。XML::Parser::Liteを大幅に改造して、コールバックルーチンで正規表現を使ってもperlがクラッシュしないようにしました。newに渡せるオプションはHandlersの他にStyleとPkg。利用可能なStyleはTreeとObjects(XML::Parser::Style::Objectsをパッケージ名だけかえてそのまま利用)のみです。メソッドにparsefileを追加。元のXMl::Parser::Liteはparserに文字列しか渡せませんでしたが、ファイルハンドルも可能に。たいぶXML::Parserらくしなりました。ずいぶん大きくなってしまったのと、若干パースが遅くなったかもしれないのでHeavyを加えた次第。利用可能なコールバックは結局 Init, Start, Char, End, Final, CdataStart, CdataEnd, Comment, Procとなります。Attlistも含めたいのですが、現状使われている正規表現(リンク先の一番下の方にある"Shallow Parsing in Perl"を参照)では困難なので、この辺りで一区切りつけます。
XML::Parser::Liteで属性値が正しく取得できないバグを直すために今回初めて$^Rという特殊変数を知りました。正規表現内でperlのコードを実行する (?{ code }) の結果を格納する変数だそうで。この辺りは相当苦労しました。myで宣言した変数にblessしたリファレンスを渡そうとしてもなぜかリファレンスではなく単なるクラス名の文字列になってしまうわ、(?{ }) 内でmyを使うとperlがクラッシュするわ……
use XML::Parser::LiteHeavy; use Data::Dumper; my $p = new XML::Parser::LiteHeavy(Style=>'Tree'); my $tree = $p->parse('<foo id="me">Hello!</foo>'); print Dumper($tree); # 結果: $VAR1 = [ 'foo', [ { 'id' => 'me' }, 0, 'Hello!' ] ];
■2004-06-26
* [Perl] PurePerlなXML::Atom
前回、PurePerlなXML::Atomを目標にと書きましたが、昨日完成したPuerPerlなXMLパーサを利用したところ、意外とすぐできました。以下、経過について。
まずベースとなるXML::XPathはXML::Parserを利用しています。これをXML::Parser::LiteHeavyに置き換えたところ、テストを全てパスしました。ちなみにX::XPathはAttlistハンドラをX::Parserに登録しますが、X::P::LiteHeavyはAttlistを登録できませんので、Attlist宣言のあるxmlはXPathが正しく動作しないでしょう。ただXML::Atomで使う分にはさほど問題にならないかも。
次にXML::Atomですが、このモジュールはX:XPathの他にも、DateTimeやDigest::SHA1などを要求してきます。さらにDateTimeはParams::Validateやら何やらが必要で……とにかく面倒くさいです。本来はCPAN.pmを使えばいいわけですが、ここではとにかくそういう便利なものを一切使わずにインストールするのが目標です。さて、DateTimeもParams::ValidateもXSモジュールを使うのでコンパイラが必要ですが、これらはPurePerl版も同梱しているので問題無し。Digest::SHA1もXSモジュールですがこちらはズバリDigest::SHA::PurePerlというのがあります。こうしてどんどん必要なものを適切なディレクトリに収めていって、モジュールの呼び出し部分を書き換えていきます。さらにPerl5.005でも動作するようにXML::Atomのファイルに適宜修正を加えます。こうして最後にPerl5.8、5.00503の両方でテストを全てパスしました。ふぅ、やれやれ。
DateTimeはあまりに多くのモジュールを必要としますが、XML::Atomが使うのはそのほんの一部のようです。これも新しくダミーモジュールを作ってしまいましょう。近々パッケージにして公開できたらいいな。
追記:→XMl::Atom 楽々設置版
* [Perl][CGI] XML::AtomとLWP::Authen::Wsse
レンタルサーバにPurePerlベースのXML::Atom(XML::Atom::*自体はDigest::SHA1→Digest::SHA::PurePerlにして、これらのモジュールがPerl5.005で動作するようにbaseやourを修正しているだけ)を設置してみました。→ http://www.donzoko.net/cgi-bin/atom/(直接ブラウザからみようとしても楽しくありません)。上記のアドレスにアクセスするためのAtomクライアントが必要かと思ったのですが、LWP::Authen::Wsseなる便利なものがあるそうですので、これをPCに入れて使ってみました。
GET http://www.donzoko.net/cgi-bin/atom/
username : foo
password : bar
と入力すると……確かに何か返ってきました。実験成功です。サーバのソースは→XML-Atom-Limited。修正したXML::XPathやDigest::SHA::PurePerlは準備中。
_ み [Blog木魚を鋭意製作中との噂が!?]
_ まそっち [MTのバージョンアップで遊びながら、色々と探していたらCPANで足りなかったモジュールを見つけて「おお、これはいつも..]
_ tsupo [metaWeblog.newPost への対応、ありがとうございます。 「文字のエンコード」ですが、こうさぎは、今..]
_ まかまか [みさん>よい勘をしていらっしゃる。 blogで、ではありませんがwikiで育てるバーチャル木魚は確かに計画していまし..]
_ まかまか [設定で色々ご苦労なされているようで。 まそほさんの所でもホワイトは売り切れですか。 私は結局ホワイトは手に入らずじま..]
_ まかまか [tsupoさん>情報ありがとうございます。utf8に対応するようにしました。]
_ うつ押 [ヒス、マ、ウ、ホ杉トァ、ホ、隍ヲ、ハ、ヲ、トイ。、ネ<a href=http://www.sayonara-utsu..]