2006/03/07
曇り
[Projects::Memo] Wishlist機能追加中
お久しぶりです(MM/Memoのメモ以外では)。
私は、ネットを巡回していて気になった本を見つけたらとりあえずMM/Memoにbookタグを付けて片っ端から登録するようにしているのですが、その本を「ウィッシュリスト」のような形でまとめてサイドバーなんかに表示することができたら便利かな?(自分が) と思い立ってしまったので、現在自作の mmtodayプラグインにその機能を追加するテストを行っています。
処理としては、MM/Memoが出力するRSSで拾った記事の中にAmazonへのリンクがあったら、そこからタイトル文字列と書影のURLを適当に抜き出して、ウィッシュリストを保存しているキャッシュファイルに追加するという感じ。しばらく運用してみて、特に問題がなければ正式に公開してみます。
まあ、公開しても使うのは自分だけなのでアレなんですけどね。
これが Blosxom + MM/Memo というマニアック極まりない組み合わせではなく、「はてなブックマークにブックマしたAmazonへのリンクをMovable Typeにエントリとして自動的に取り込むプラグイン」とか作った方がモテるんだろうなあといつも思うのですが、まあモテたくてブログツールいじってる訳じゃないから別にいいや(投げやり)。
2005/11/01
[Projects::Memo] ツンデレには勝てないなあ
お久しぶりです(MM/Memoの履歴以外では)。
10/16から10/30までの間、MM/Memoから今日のメモを持ってきて自動的にBlosxomのエントリ化するMMTodayが内部的にコケていたようで、まったく動作していませんでした。
コケていた原因ですが、自分がMM/Memoにブックマークした
http://nya.livedoor.biz/archives/50144165.html
の記事を取り込んでXML::Parserに通した時に、「ナニヨ!
」と言ってるツンデレっ娘AAの部分でパースエラーになっていたのが原因だったみたいです。タイトルのAAを外したら、MMTodayが正常に動くようになりましたよ。
ツンデレには勝てないなあと思いました(まちがい)。
2005/04/16
[Projects::Memo] blosxom MMプラグイン更新
「MM」という略称から、「Might & Magic」というRPGを思い出す人?(挨拶)
MM/Memoの内容を表示するblosxomプラグイン、MMとMMTodayを更新しました。
あと、MMプラグインの機能のうち、「自分が設定したジャンルを使用頻度の高いものから順に表示」する機能を切り離し、単独のプラグイン(MMGenre)として実装しました。
→MMプラグインのソース(05/04/12版)
→MMTodayプラグインのソース(05/04/12版)
→MMGenreプラグインのソース(05/04/12版)
変更点:
- 取得する対象のRSSを、URL直接指定からユーザーIDを変数($userid)で指定するように変更
- 自前でRSSの文字コード変換するのを止めて、1470.netの文字コード変換ゲートウェイを使用するように修正
- CSSのファイル名や中身をちょっと修正
2005/04/13
[Projects::Memo] プラグインテスト中
現在、MM/Memo関連のプラグイン (mm, mmtoday, あと新規作成中の mmgenre) を修正中です。
そのテストの関係で、今日1日はここがMM/Memoだらけになってます。ご了承を。
具合が良ければ、明日にでも公開したいと思います。
あと、blosxomの設定をミスしていた関係で、昨日までここのCSSが読み込めていませんでした。
スンマソ。
2005/03/24
[Projects::Memo] mmtoday修正報告
MM/Memoの配信するRSSからblosxomのエントリを一日単位で作成するプラグイン mmtoday の修正を行いました。
→mmtodayプラグイン(05/03/24版)
3/23くらいからプラグインが正常に動いておらず、どうしたものかと思って調べてみたのですが、原因はXML::RSSのパース部分だった模様。以下ドキュメント。
□
MM/Memoが配信しているRSSの文字コードはEUC-JPなのですが、XML::RSSモジュールで処理を行うため、内部的に一度UTF-8に変換しています。
その時に、XMLのエンコード宣言の部分を、EUCからUTF-8に書き換えてます。具体的にはこんなコード:
$content = decode("euc-jp", $content);
$content =~ s/<\?xml version="1.0" encoding="euc-jp" \?>/<\?xml version="1.0" encoding="utf-8" \?>/;
判りやすいですね。
それで今回の不具合の原因ですが、MM/MemoのRSSに書かれたエンコード名がいつの間にか euc-jp
(小文字)から EUC-JP
(大文字)に変わっており、「上記の書き換え処理が失敗→encoding="EUC-JP"と書かれたUTF-8形式のファイルをXML::RSSに食わせることに→(゚д゚)マズー
」となっていたのが原因でした。
今回の対策:
エンコード宣言の書き換え部分を、
$content =~ s/<\?xml version="1.0" encoding="EUC-JP" \?>/<\?xml version="1.0" encoding="utf-8" \?>/;
とすることで対応。
判りやすいですね(職業プログラマとしてこんな場当たり対処でいいのか自問しつつ)。
2005/03/17
[Projects::Memo] MMTodayプラグイン
ishinaoさんが tDiary で使っている、MM/Memoの自分のメモをブログに取り込んで「今日のメモ」として表示する機能に興味が沸いたので、似たような機能を持った blosxom のプラグインを作ってみました。
→ MMToday のソース(05/03/16版)
使い方:
- mmtoday(プラグイン本体)を、plugins ディレクトリにコピー
- mmtodayをエディタで開き、
- $RSS_URL 変数の中身を、表示したいメモのRSSのURIに書き換える
- $OUT_DIR 変数の中身を、MMから取り込んだメモをbloxsomのエントリとして保存するentries配下のディレクトリの名前に書き換える(存在しない場合はプラグインが作成します)
- mmtoday.tmpl を、plugins/states ディレクトリにコピー(中身はHTML::Template形式のテンプレートなので、必要であれば修正して下さい)
- mmtoday.css の中身を、お使いのCSSファイルに追加したり@importで取り込んだりする(適当に変更して下さい)
この状態でblosxomを動かすと、$OUT_DIR で指定したディレクトリに、MM/Memoから取得したメモの内容(description)が書かれたファイルが1日単位で作成されます(ファイル名はyyyy_mm_dd.txt、更新時刻は00:00に設定)。
なお、メモが新しく追加された場合は今日のファイルを作り直しますが、昨日以前のメモの中身を修正しても、このプラグインはファイルを作り直しません。過去のメモの修正を反映したい場合は、$SAVE_FILE 変数で指定されているファイル (mmtoday.dat) を削除してから bloxsom を再表示して下さい。
とりあえず、このブログでちゃんと動くかどうかテスト中(この前作ってサイドバーに表示していたMMプラグインは、一時的に撤去しました)。
このプラグインはC-WWWの方で使う予定で作ったのですが、でもあっちのサーバはPerlのバージョンが5.0系(Encodeが使えない)な上、HTML::TemplateとかXML::RSSとかの必須モジュールすら入ってないので、このままでは絶対に動かないことに今になって気付きました。
どうしよう?(おわり)
2005/02/20
[Projects::Memo] blosxom MMプラグイン更新
「MM」という略称から、翔企画のカードゲーム「モンスターメーカー」を思い出す人?(挨拶)
MM/Memoの内容を表示するblosxomプラグインを更新しました。
→MMプラグインのソース(05/02/20版)
変更点:
- MM/Memo登録時に自分が設定したジャンルを、使用頻度の高いものから順に表示(および、ジャンルと一致する他のMM/Memoを検索するリンク)する機能を追加しました。このページの横にある「MM - Genre Ranking」がそれです。
flavourのジャンル一覧を表示したいところに、「$mm::genre」と記述すれば表示されます。 - 今日1日分のメモの数が表示上限件数 ($rssitemsで指定)を超えていた場合、その日のメモは全て表示するようにしました。
自分の好きなジャンルの一覧を表示すると、今話題のキーワード・フォークソノミーに対応した気分になれますね!(「フォークソノミー」ってこういう使い方でいいのか不明)
2005/02/03
[Projects::Memo] MM/MemoとMMプラグイン
「MM」という略称から、翔企画のカードゲーム「マジックマスター」を思い出す人?(挨拶)
最近、ishinaoさんが1470.netで運営している、MM/memoを使い始めました。自分用のメモはこれ。
これは文字通り、特定のURLに対して簡単なメモを書き、それをオンラインで保存/参照することに特化したシステムです。これがあれば、世にはびこる「ニュース記事へのリンク+1行コメント」形式のニュースサイト型ブログが簡単に作れてしまう(しかもブログ立ち上げるよりも遙かに簡単に)のが最大の特徴。
もしMMが普及したら、今のブログのほとんどは滅んでしまうのではないのでしょうか。いやマジで。それくらい便利なシステムだと思います。
□
あと、せっかくなので、MMの自分用メモをサイドバーに表示する専用のblosxomプラグインを作成しました。
最初はMM/Memoが出力するRSSを取り込んでそのまま貼ればいいのかな、と思っていたのですが、MMのRSSにはdescriptionエレメントが存在せず、内容が全てcontent:encodedエレメントに入っている作りになっていたので、結果的にMM/Memoが出力するRSSを取り込んでcontent:encodedをそのまんま貼り付ける、という豪快(=短絡)な作りに。
→MMプラグインのソース (05/02/02版)
使い方:
- mmプラグインをpluginsディレクトリにコピー
- rss.tmplをplugins/stateディレクトリにコピー(中身はお好みで変えて下さって結構です)
- mmをエディタで開き、変数を設定(普通は $rss_url, $rssitems, $EXPIRE 辺りをいじれば良いです)
- スタイルシートにmm.cssの内容を追加(中身はお好みで変えて下さって結構です)
- flavourのMM/Memoの中身を表示したい部分に「$mm::memo」と記述
自分用に作ったので、いまいち潰しが効かないプラグインなような気がします。
まあいいや(いいのか)。
[Projects::Memo] Couldn't open encmap euc-jp.enc:No such file or directory
メモ代わりに、MMプラグインの開発中に発生した障害について。
MM/Memoが配布しているRSSの文字コードはEUCのため、自分のサーバ環境(ロリポップ!)では XML::RSSのparsefileメソッドを呼ぶところで「Couldn't open encmap euc-jp.enc:No such file or directory
」というエラーが発生してしまいます。
なので、とりあえず
- 「Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う」(河馬屋二千年堂さん)を参照して、euc-jp.encを作成(手持ちのPerlにeuc-jp.encがない場合)。
- blosxom.cgiを置いてあるディレクトリの下に"XML/Parser/Encodings"というディレクトリ階層を作り、Encodingsディレクトリに1.で作ったeuc-jp.encをコピー
で対応しました。
もしMMプラグインを突っ込んでも何も表示されなかった場合(特に、/plugins/states/mm/ に変な名前のファイルはあるけど "mm.txt" が存在していない場合)は、一応コレを疑って下さい。
にしても、2. の対応がアバウト過ぎてる気がする。