* chalow が出力する RSS に CDATA で全文を入れる
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [chalow] [ChangeLog メモ] [RSS]
たつをさんが面白そうなことを始めてるなあ、と思ったらあっという間にいろいろできてた。さすがだ。
item 別ページ大歓迎。私もこれやろうとしたんですよ。削除アイテムの扱いをどうするか、2004-01-25 の「記事単位での html 出力と記事の削除」で悩んだり。そのときの結論も「削除しない」とか、「削除したらダミーの記事を追加する」とかだった。でも結局、一個ずつファイル作ってたら infoseek では 50MB しかディスク容量が使えないためにあっという間に制限を超えてしまうので断念。もっと容量を使えるサーバに移転すればいいんだけど URL 変えたくないしなあ。
「一記事一 URI」って美しい。SEO を意識してというよりも、自分を含む読み手のことを考えると自然とこうなる。Google の検索結果で、「Landscape - エンジニアのメモ 2004-01-08 」って表示されるより、そのものズバリの「gpg で標準入力からパスワードを渡してバッチ処理で暗号化」って表示された方がわかりやすい。
http://nais.to/~yto/clog/2004-11-28-2.html
すごい数・・・。こうなってくると DB 使ったり動的生成したくなってきたりするなあ。これもいつもジレンマなんだよなあ。ChangeLog メモの良さを損なわずにいかに便利にスケーラブルにするかは悩ましい問題。
http://nais.to/~yto/clog/2004-11-28-5.html
こういうライブラリがあると実に便利。あとはハッシュへのアクセスを抽象化してあげれば ChangeLog メモクラスとして完成するなあ。エンティティクラスであるためシンプルで使いやすそう。
http://nais.to/~yto/clog/2004-11-29-1.html
bloglines で読んでいたら突然全文を読めるようになったのはこういうわけか。素晴らしい。2004-10-26 の「content:encodedが足りねぇ… じゃんじゃん 持ってこい」でも書いたように、私は全文入った RSS が大好き。記事単位でサクサク読めるのが最高。
私は RSS 中の 相対 URL の補完は以下のように簡単に置換しています。私の場合、../ などの処理は考慮する必要がなかったので楽でした。複雑な相対パスを指定してる場合はちょっとだけ手間が増えますね。
http://tokuhirom.tdiary.net/20041129.html#p03
私は記事の通し番号が変わるという問題を解決したいですね。この問題は私の使い方が変わっていることが原因ですが。
私は LAN の中にだけ公開したい文書は L: カテゴリを指定しています。L カテゴリの文書は、web に出す html を生成するときは p: を指定したプライベートアイテムと同じように削除されます。
この結果、LAN の中だけに公開される文書と web で公開可能な記事が入り交じると、出力先によって記事の数が変わってしまい、同じ記事なのに LAN の中と外で番号が変わってしまうという問題があります。その結果、2004-11-29-1 という日付参照 + アイテム参照の順序が狂います。
これは記事番号の採番を一元的に行う主体や方法がないのが原因で、シンプルなツールなら仕方のないことなんですけどね。
あ、でもなんとかできそうな気がしてきた。結局、出力ファイルの名前空間が YYYY-MM-DD.html や YYYY-MM-DD-ITEM.html しかないから問題になる。だったら、パースの時に独立した名前空間ごとに記事を格納するようにして、html 出力の時も NameSpace-YYYY-MM-DD.html みたいにして名前空間付きでファイル名を生成すればいい。
以前に、「p: を指定されたプライベートアイテムだけを出力したページが欲しい」という要望があったけど、これならできそう。パーサはプライベートアイテムだけのエントリを消すのではなく、プライベートアイテムだけを独立した名前空間に格納してやると。で、html 出力部分 にどの名前空間のデータを渡すかはコントローラが決めるので、p 付きのデータを出力するようなコントローラを書けばいい。
- chalowでitem別ページ
http://nais.to/~yto/clog/2004-11-27-3.htmlitem 別ページ大歓迎。私もこれやろうとしたんですよ。削除アイテムの扱いをどうするか、2004-01-25 の「記事単位での html 出力と記事の削除」で悩んだり。そのときの結論も「削除しない」とか、「削除したらダミーの記事を追加する」とかだった。でも結局、一個ずつファイル作ってたら infoseek では 50MB しかディスク容量が使えないためにあっという間に制限を超えてしまうので断念。もっと容量を使えるサーバに移転すればいいんだけど URL 変えたくないしなあ。
「一記事一 URI」って美しい。SEO を意識してというよりも、自分を含む読み手のことを考えると自然とこうなる。Google の検索結果で、「Landscape - エンジニアのメモ 2004-01-08 」って表示されるより、そのものズバリの「gpg で標準入力からパスワードを渡してバッチ処理で暗号化」って表示された方がわかりやすい。
- item 数と html 生成・ファイル転送
5671 - 「たつをの ChangeLog」の公開item数http://nais.to/~yto/clog/2004-11-28-2.html
今までの日付ページ1650、月ページ59も引き続き出力するので、8400ページ近くになる。昨晩、rsyncでWebサーバに転送したら35分かかった。
すごい数・・・。こうなってくると DB 使ったり動的生成したくなってきたりするなあ。これもいつもジレンマなんだよなあ。ChangeLog メモの良さを損なわずにいかに便利にスケーラブルにするかは悩ましい問題。
- ChangeLog パーサ
ChangeLogの読み込みとハッシュへの格納http://nais.to/~yto/clog/2004-11-28-5.html
こういうライブラリがあると実に便利。あとはハッシュへのアクセスを抽象化してあげれば ChangeLog メモクラスとして完成するなあ。エンティティクラスであるためシンプルで使いやすそう。
- RSS に全文入れる
chalow の RSS の description で CDATAhttp://nais.to/~yto/clog/2004-11-29-1.html
これからは CDATA で全部どかっと行く。
bloglines で読んでいたら突然全文を読めるようになったのはこういうわけか。素晴らしい。2004-10-26 の「content:encodedが足りねぇ… じゃんじゃん 持ってこい」でも書いたように、私は全文入った RSS が大好き。記事単位でサクサク読めるのが最高。
で、その RSS を Bloglines で見てみると、
相対URLがおかしくなってるなあ。2004-11-27-3.html を
http://nais.to/2004-11-27-3.html にしちゃってる。
私は RSS 中の 相対 URL の補完は以下のように簡単に置換しています。私の場合、../ などの処理は考慮する必要がなかったので楽でした。複雑な相対パスを指定してる場合はちょっとだけ手間が増えますね。
# " のあとに http が無かったら補完。
my $home_page_url = 'http://sonic64.com/';
my $content = RSS_DOCUMENT
$content =~ s%(<a href|<img src)="(?!(https?|JavaScript):)%$1="$home_page_url%ig;
- chalow の機能強化
chalow の不満な所が一気に無くなってゆくhttp://tokuhirom.tdiary.net/20041129.html#p03
これまでのバージョンの chalow で気にくわなかった所は
エントリごとのページが生成されない
SEO 的にマズー
見た目的にもマズー
RSS に本文そのものが入らない
という所だったのですが、全部解消って感じですね。
あと、なんかあったっけ?
私は記事の通し番号が変わるという問題を解決したいですね。この問題は私の使い方が変わっていることが原因ですが。
私は LAN の中にだけ公開したい文書は L: カテゴリを指定しています。L カテゴリの文書は、web に出す html を生成するときは p: を指定したプライベートアイテムと同じように削除されます。
この結果、LAN の中だけに公開される文書と web で公開可能な記事が入り交じると、出力先によって記事の数が変わってしまい、同じ記事なのに LAN の中と外で番号が変わってしまうという問題があります。その結果、2004-11-29-1 という日付参照 + アイテム参照の順序が狂います。
これは記事番号の採番を一元的に行う主体や方法がないのが原因で、シンプルなツールなら仕方のないことなんですけどね。
あ、でもなんとかできそうな気がしてきた。結局、出力ファイルの名前空間が YYYY-MM-DD.html や YYYY-MM-DD-ITEM.html しかないから問題になる。だったら、パースの時に独立した名前空間ごとに記事を格納するようにして、html 出力の時も NameSpace-YYYY-MM-DD.html みたいにして名前空間付きでファイル名を生成すればいい。
以前に、「p: を指定されたプライベートアイテムだけを出力したページが欲しい」という要望があったけど、これならできそう。パーサはプライベートアイテムだけのエントリを消すのではなく、プライベートアイテムだけを独立した名前空間に格納してやると。で、html 出力部分 にどの名前空間のデータを渡すかはコントローラが決めるので、p 付きのデータを出力するようなコントローラを書けばいい。
久しぶりに趣味の Perl プログラミング。chalow にカテゴリ別の記事の見出しを出力させるようにした。
カテゴリ別のすべての記事の見出し
http://sonic64.com/all_category_article.html
この機能についてはあといくつか実装したい細かな事項があるけど、今日はここまで。一気にやるよりも盆栽をいじるように少しずつ進める方が楽しい。
本家では既に chalow version 1.0rc1 がリリースされているが、Landscape では独自拡張をしすぎたために本家に追随できない状態になってしまっている。現行の chalow 0.24 に不具合や大きな不満点がないので、しばらくこのまま使う予定。
カテゴリ別のすべての記事の見出し
http://sonic64.com/all_category_article.html
この機能についてはあといくつか実装したい細かな事項があるけど、今日はここまで。一気にやるよりも盆栽をいじるように少しずつ進める方が楽しい。
本家では既に chalow version 1.0rc1 がリリースされているが、Landscape では独自拡張をしすぎたために本家に追随できない状態になってしまっている。現行の chalow 0.24 に不具合や大きな不満点がないので、しばらくこのまま使う予定。
このページにカテゴリ一覧を表示するようにしたが、大文字と小文字を同一視してくれない。一文字目が A から Z のカテゴリが並んだ後に、一文字目が a から z で始まるカテゴリが並ぶ、という状態になってる。これでも良いかなとも思ったのだが、chalow のカテゴリと ChangeLog メモ のカテゴリが離れてしまうのが痛い。それにやっぱり大文字小文字関係なしでアルファベット順に並んだ方が使いやすい気がする。Perl カテゴリを perl カテゴリと書いてしまったときもすぐに気づくし。
というわけで修正。要するに sort 関数に独自の比較関数を使わせるようにすればいい。
カテゴリ一覧を作る関数にある
というわけで修正。要するに sort 関数に独自の比較関数を使わせるようにすればいい。
カテゴリ一覧を作る関数にある
foreach my $cat (sort keys %category_item)を
foreach my $cat (sort{ lc $a cmp lc $b } keys %category_item)とした。
chalow 0.24 に独自の修正を加えたものに移行した。移行しようと思い立ったのが 2004-02-19 だから、一ヶ月以上か。時間かけすぎちゃった。
やっぱりカテゴリ表示は便利だな。でも、「メモ」カテゴリの記事数が89件って多すぎ。あとでちょっとずつ分類しよう。
やっぱりカテゴリ表示は便利だな。でも、「メモ」カテゴリの記事数が89件って多すぎ。あとでちょっとずつ分類しよう。
2004-02-17 にも書いたが、今回のリリースで実装されたカテゴリ表示機能は素晴らしく便利。過去の記事を読み返すのがとても楽になった。ということで、Landscape もそろそろ最新版に移行するべく準備を開始。
今 Landscape で使っている chalow は、0.20 に細かい修正をたくさん加えたものだ。自分でもどこまで修正したのかよくわからなくなってる。修正をメモしておけば良かったのにね。とりあえずやりたいことだけでも列挙しておこう。
そのあと、RSS の出力関数を置き換え。ハイパーリンク置換関数も 2004-01-07 で作ったものに置き換え。
「- 」で始まる行を強調にする。メールアドレスや電話番号などの個人情報や、守秘義務に絡む文字列を削除したり伏せ字にするフィルタを組み込む。
あとはレイアウトと CSS を調整。CSS で float を指定してるブロック要素のレイアウトが微妙におかしくて、サイドバーに日別記事へのリンクが入り込んじゃうというのも直そう。
今 Landscape で使っている chalow は、0.20 に細かい修正をたくさん加えたものだ。自分でもどこまで修正したのかよくわからなくなってる。修正をメモしておけば良かったのにね。とりあえずやりたいことだけでも列挙しておこう。
- やること
まずは JavaScript で表示してるくっつき RSS を静的 html に置き換える。JavaScript オフで使ってると何も表示されないのはやっぱり寂しいし。そのあと、RSS の出力関数を置き換え。ハイパーリンク置換関数も 2004-01-07 で作ったものに置き換え。
「- 」で始まる行を強調にする。メールアドレスや電話番号などの個人情報や、守秘義務に絡む文字列を削除したり伏せ字にするフィルタを組み込む。
あとはレイアウトと CSS を調整。CSS で float を指定してるブロック要素のレイアウトが微妙におかしくて、サイドバーに日別記事へのリンクが入り込んじゃうというのも直そう。
- みんな標準のまま使ってるのかなあ
盆栽を手入れするのと同じで、こういう作業も楽しみのうち。でも、あまり量が多すぎると修正しているうちに新版がリリースされてしまう。みんなはどうしてるんだろう? カスタマイズした部分をあっという間に新版にも適用できるように注意してコーディングしてるんだろうか? それとも、標準のまま使っててあんまりカスタマイズしてないのかな。- 不完全だったパッチ
2004-02-17 に書いたパッチは不十分だった。複数カテゴリを指定しても、最初のカテゴリ指定しか解釈されない。テスト不足だった。もしあのパッチを使ってうまく動かなくて困っている人がいたらごめんなさい。以下のようにすればうまくいくはず。十分にテストしてから改めてメーリングリストに投稿しようと思う。- カテゴリ指定方法を変更
--- chalow-0.24/chalow.org 2004-02-17 21:31:37.049580800 +0900
+++ chalow-0.24/chalow 2004-02-20 01:55:48.177030400 +0900
@@ -444,14 +444,13 @@
}
# (4.2) item header とそれ以外に分解
- my ($ih, $c) = ($item =~ /^\* (.+?):(\s.*)\Z/sm);
+ my ($ih, $c) = ($item =~ /^\* (.+?)\n(.*)\Z/sm);
# (4.3) item header の処理
my @cat;
if (defined $ih) {
- if ($ih =~ s/\s*\[(.+)\]$//) { # カテゴリ
- @cat = split(/\s*\]\s*\[\s*/, $1);
- }
+ @cat = split(/: /, $ih); # カテゴリ
+ pop(@cat);
} else {
$c = $item;
$c =~ s/^\* //;
chalow 0.24 ではカテゴリ機能が実装された。早速使ってみたが、非常に便利。だが、過去の記事にカテゴリ指定を付け直すのは大変だ。幸いなことに、私の ChangeLog メモはカテゴリを明示した書き方であるため、カテゴリ指定を楽に抽出できるはずだ。たぶん正規表現をちょっと変えるだけで済むはず。というわけでパッチを作成した。
カテゴリ の指定方法を変える(Re: version 0.24)
http://mailarc.namazu.org/htmlmail/chalow/79
- カテゴリ指定方法を変更
--- chalow-0.24/chalow.org 2004-02-17 21:31:37.049580800 +0900
+++ chalow-0.24/chalow 2004-02-17 21:41:08.933364800 +0900
@@ -449,9 +449,7 @@
# (4.3) item header の処理
my @cat;
if (defined $ih) {
- if ($ih =~ s/\s*\[(.+)\]$//) { # カテゴリ
- @cat = split(/\s*\]\s*\[\s*/, $1);
- }
+ @cat = split(/:\s/, $ih); # カテゴリ
} else {
$c = $item;
$c =~ s/^\* //;
- chalow メーリングリストに投稿
使う人は私だけかもしれないけど・・・。カテゴリ の指定方法を変える(Re: version 0.24)
http://mailarc.namazu.org/htmlmail/chalow/79
chalow 0.24 を使ってみました。カテゴリ機能が非常に便利ですね。
でも、過去のメモにカテゴリ指定を付けるのが大変だったりしませんか?
ChangeLog メモの書き方は人それぞれですが、
私の場合は、
> * 音楽: DECO / 西村雅彦
> 西村雅彦さんのアルバム。正確に言うと...
といったように、* のある行はカテゴリとタイトルだけを書き、
次の行から本文を書くというスタイルです。
このスタイルの場合、「音楽」の部分をカテゴリ指定として使えれば楽。
http://nais.to/~yto/tools/chalow/image/chalow-cl-name.gif
で言えば、点線で囲まれたItemHeader の部分全体を
カテゴリ指定に使うわけです。
ということで、パッチを作ってみました。
私と同じような書き方をしている方には便利なんじゃないかと思います。
- パッチの説明
chalow 0.24 のカテゴリ指定の方法を変えます。
パッチ適用前のカテゴリ指定方法
> * タイトル [カテゴリ名][カテゴリ名][カテゴリ名]...: ...
> * うまい![酒][コンビニ]: 昨日、コンビニで見つけた...
パッチ適用後のカテゴリ指定方法
> * カテゴリ名: カテゴリ名: タイトル
> 本文
>
> * 酒: コンビニ: うまい!
> 昨日コンビニで見つけた...
- 2004-02-19 追記
上記パッチは不完全。複数カテゴリを正しく扱えない。2004-02-19 にテスト中の修正版を掲載している。chalow は 日毎に html を出力することもできる。というわけでやってみた。
ページが軽くて実に良い。日毎のに慣れてしまうと、月毎のページは大きすぎる気がする。サイト公開前なら、月別一覧は出力しないか記事名だけを出力するようにしていたと思うが、すでにこのサイトにリンクしてくださってる方もいるので、元の月毎のページも出力するようにしておく。ただ、サーチエンジンのロボットには拾われないように <meta name="ROBOTS" content="NOINDEX,FOLLOW"> を月別一覧のヘッダに入れておいた。
ページが軽くて実に良い。日毎のに慣れてしまうと、月毎のページは大きすぎる気がする。サイト公開前なら、月別一覧は出力しないか記事名だけを出力するようにしていたと思うが、すでにこのサイトにリンクしてくださってる方もいるので、元の月毎のページも出力するようにしておく。ただ、サーチエンジンのロボットには拾われないように <meta name="ROBOTS" content="NOINDEX,FOLLOW"> を月別一覧のヘッダに入れておいた。
内部での処理方法を大きく変えており、開発版という位置づけ。
ちょっと動かしてみたが、ユーザとしてはヘッドライン表示をデフォルトでサポートしたのが目を引く。やっぱり便利。でも、最大の変更は pre タグによるレイアウトをやめたことだろう。
pre によるレイアウトを廃止。各行末には <br> を入れて改行を表現。
ソースコードなどを表示するときは [src][/src] で囲むことで pre 扱いになる。
私は行末 <br> に賛成。意図したとおり表示されるから。そういえば、2ちゃんねるも行末 <br> だ。ただ、文書の論理構造を表現するのであれば、行末 <br> は良い方法ではない。私自身、 read.cgi が出力した html ソースを初めて見たとき、なんて汚いマークアップなんだろう、と思った。文書の構造というものは・・・見出しがあり、段落があって・・・と論理構造を重視したものであるべきだと考えていた。ただ、2ちゃんねるを使っているうちに意見が変わった。実用上はこれで問題ない。掲示板なんだから、これでいい。<p></p> で囲まないと段落にならないとか、意図した位置で改行しても html には反映されないとか、そういう面倒なことを全部排除した方が、人も情報も集まるってことを思い知った。
2ちゃんねるに書いていて感じたのは、簡単だなあということ。簡単に書けて、ほぼ見た目通りに表示されて、url には勝手にリンクが張られる。私は ChangeLog もこの延長線上でとらえてる。とにかく書くための手間を減らしたい。html マークアップなんてもってのほか。そうじゃないと書き始めるために膨大なエネルギーを要する。ツールは、人が何かをしようとするときその一助となるべきもの。その点で chalow は優れたツールだ。
ちょっと動かしてみたが、ユーザとしてはヘッドライン表示をデフォルトでサポートしたのが目を引く。やっぱり便利。でも、最大の変更は pre タグによるレイアウトをやめたことだろう。
pre によるレイアウトを廃止。各行末には <br> を入れて改行を表現。
ソースコードなどを表示するときは [src][/src] で囲むことで pre 扱いになる。
私は行末 <br> に賛成。意図したとおり表示されるから。そういえば、2ちゃんねるも行末 <br> だ。ただ、文書の論理構造を表現するのであれば、行末 <br> は良い方法ではない。私自身、 read.cgi が出力した html ソースを初めて見たとき、なんて汚いマークアップなんだろう、と思った。文書の構造というものは・・・見出しがあり、段落があって・・・と論理構造を重視したものであるべきだと考えていた。ただ、2ちゃんねるを使っているうちに意見が変わった。実用上はこれで問題ない。掲示板なんだから、これでいい。<p></p> で囲まないと段落にならないとか、意図した位置で改行しても html には反映されないとか、そういう面倒なことを全部排除した方が、人も情報も集まるってことを思い知った。
2ちゃんねるに書いていて感じたのは、簡単だなあということ。簡単に書けて、ほぼ見た目通りに表示されて、url には勝手にリンクが張られる。私は ChangeLog もこの延長線上でとらえてる。とにかく書くための手間を減らしたい。html マークアップなんてもってのほか。そうじゃないと書き始めるために膨大なエネルギーを要する。ツールは、人が何かをしようとするときその一助となるべきもの。その点で chalow は優れたツールだ。
以下の部分をコメントアウト。
代わりに以下を追加。
ただし、置き換えてしまうと
### URL表記を href で
# URL : http://....
# 正規表現は http://www.din.or.jp/~ohzaki/perl.htm#httpURL より。
# バックスラッシュを用いたURL中での改行に対応 021025
#my $URLCHARS = "[-_.!~*'()a-zA-Z0-9;/?:@&=+,%\#\$]";
my $URLCHARS = "[-_.!~*'a-zA-Z0-9;/?:@&=+,%\#\$]";
my $URLDELIM = "\\\\\\n[\\t ]+";
s{(?<!["\=|])((s?https?|ftp)://($URLCHARS+)($URLDELIM($URLCHARS+))*)}
{'<a href="'.join('', split(/$URLDELIM/, $1)).'">'.
join('', split(/\\/, $1)).'</a>'}gem; #")};
代わりに以下を追加。
$_ = MakeLink($_);
ただし、置き換えてしまうと
# バックスラッシュを用いたURL中での改行に対応が使えなくなる。
Bulkfeeds で *** を検索 と書いたときに、自動的にリンクする機能を chalow に追加するとしよう。2003-08-28 で作った Google リンク作成機能の bulkfeeds 版だな。
Bulkfeeds で 日本語 を検索
おや、日本語検索がうまくいかないな。Server is busy が返ってくる。クエリが euc だからダメなのかな。
euc で「日本語」を検索
http://bulkfeeds.net/app/search2?sort=score&q=%c6%fc ...
じゃあ Jcode で utf-8 に変換してみよう。・・・よし、うまく動いた。
- テスト
bulkfeeds で linux を検索Bulkfeeds で 日本語 を検索
おや、日本語検索がうまくいかないな。Server is busy が返ってくる。クエリが euc だからダメなのかな。
euc で「日本語」を検索
http://bulkfeeds.net/app/search2?sort=score&q=%c6%fc ...
じゃあ Jcode で utf-8 に変換してみよう。・・・よし、うまく動いた。
s!(bulkfeeds\s*で\s*(.+?)\s*(を|で)検索)!"<a href=\"http://bulkfeeds.net/app/search2?sort=score&q=" . url_encode(Jcode->new($2)->utf8) . "\" title=\"Bulkfeeds 検索: $2\">$1</a>"!eig;
先週 chalow 0.13 から chalow 0.20 にバージョンアップした。
RSS 対応、ftp URL 対応、tdiary テーマ対応と、いろいろ変わってた。
なんで私は chalow を使ってるんだろう。
他にもいろいろ blog ツールやメモツールはあるのに、なぜ chalow を使うのか。
それを考えると、私は chalow をどのようにカスタマイズしていけばいいかがわかるだろう。
ChangeLog メモの良さ
・テキストファイル一つで済む
・覚えることが少ない
なんと言ってもこの2つだろう。
HTML エスケープはツール側で勝手にやって欲しい。
元はメモなんだから、それをマークアップするのはツールでやって欲しい。
リンクは自動的に張って欲しい。
ちょっと chalow を使ってるサイトを見てこよう。
・・・なんか書いてることが既出な気がしてきたのでここで打ち切る。内容も文が繋がってないが、このままにしておく。
RSS 対応、ftp URL 対応、tdiary テーマ対応と、いろいろ変わってた。
なんで私は chalow を使ってるんだろう。
他にもいろいろ blog ツールやメモツールはあるのに、なぜ chalow を使うのか。
それを考えると、私は chalow をどのようにカスタマイズしていけばいいかがわかるだろう。
ChangeLog メモの良さ
・テキストファイル一つで済む
・覚えることが少ない
なんと言ってもこの2つだろう。
HTML エスケープはツール側で勝手にやって欲しい。
元はメモなんだから、それをマークアップするのはツールでやって欲しい。
リンクは自動的に張って欲しい。
ちょっと chalow を使ってるサイトを見てこよう。
・・・なんか書いてることが既出な気がしてきたのでここで打ち切る。内容も文が繋がってないが、このままにしておく。
プライベートアイテムしかないエントリが存在する ChangeLogメモを chalow0.20 に処理させると、
プライベートアイテムしかないエントリの例
また、プライベートアイテムしかないエントリの場合、
chalow はエントリーヘッダのみを出力してしまいます。
「プライベートアイテムを削除した結果エントリーヘッダしか残っていない」という場合、
375行目で (.+)\Z の部分がマッチしないのでエラーとなっているようです。
以下のように + を * に修正することでとりあえず parse error は回避できますが、
エントリーヘッダのみ html 出力してしまうという現象までは回避できません。
もっと根本的なところで直す必要があると思い、プライベートアイテム削除ロジックを
changelog 全体をクリーニングしている部分に移動させました。
以下がそのパッチです。
もっとよい方法があれば教えてください。
reading "/home/hiroaki/testlog.txt"というエラーになります。
parse error at /home/hiroaki/chalow-0.20/chalow.org line 375.
プライベートアイテムしかないエントリの例
2003-10-21 Saito Hiroaki <mail@example.com>
* p: 仕事: 大事なサーバのパスワード
foobarbuzz
2003-10-20 Saito Hiroaki <mail@example.com>
* メモ: 2ちゃんねるターボ用 proxy 設定ファイル
http://www.geocities.co.jp/SiliconValley/8222/2chturbo.html
また、プライベートアイテムしかないエントリの場合、
chalow はエントリーヘッダのみを出力してしまいます。
「プライベートアイテムを削除した結果エントリーヘッダしか残っていない」という場合、
375行目で (.+)\Z の部分がマッチしないのでエラーとなっているようです。
die "parse error" unless ($e =~ /\A(\d{4}-\d\d-\d\d.+?\n)(.+)\Z/sm);
以下のように + を * に修正することでとりあえず parse error は回避できますが、
エントリーヘッダのみ html 出力してしまうという現象までは回避できません。
die "parse error" unless ($e =~ /\A(\d{4}-\d\d-\d\d.+?\n)(.*)\Z/sm);
もっと根本的なところで直す必要があると思い、プライベートアイテム削除ロジックを
changelog 全体をクリーニングしている部分に移動させました。
以下がそのパッチです。
もっとよい方法があれば教えてください。
--- chalow.org Tue Oct 21 20:10:23 2003
+++ chalow Wed Oct 22 17:39:02 2003
@@ -259,10 +259,6 @@
s/^($day)\s.+/$1 $user/;
}
- # 秘密の項目を外に出さないように削除
- # 例: * p:秘密メモ: YTがまたやらかした。しょうもないやつだ。
- s/\n\t+\* p:.+?^(\t+\*|$)/$1/gms;
-
# エントリをパーズして、文字列置き換え
parse_entry($_, \%{$all_entries{$day}});
}
@@ -983,6 +979,11 @@
$$strp =~ s/\n[\s\t]+(\n\S)/\n$1/gm;
# \n(\s+)\n\t* ほげ: ... の $1 を消す
$$strp =~ s/\n[\s\t]+(\n[\s\t]+\*\s+)/\n$1/gm;
+ # 秘密の項目を外に出さないように削除
+ # 例: * p:秘密メモ: YTがまたやらかした。しょうもないやつだ。
+ $$strp =~ s/\n\t+\* p:.+?^(\t+\*|$)/$1/gms;
+ # 秘密の項目を削除した結果、空になったエントリを削除
+ $$strp =~ s/^\d{4}-\d{2}-\d{2}.*?\n(?=(\d{4}-\d{2}-\d{2}.*?\n)|\Z)//gm;
# 項目内での段落区切り表す空行をタブ行にする
$$strp =~ s/\n(\n\t[^\*])/\n\t$1/gm;
}
Google で perl url エンコードを検索、と書いたら、それが自動的に Google へのリンクになってくれるとうれしい。ということで、以下の正規表現による置換を cl.conf に追加した。
chalow はキーワードの置換に perl の eval() を使っている。eval() の中身は文字列として表記しなければならないため、" や ' のエスケープが面倒。そのせいもあってあんまりきれいな正規表現じゃないけど、普段使いにはこれで十分でしょ。ちなみに、上記正規表現で使ってる url_encode() はさきに紹介したもの。
s!(google\s*で\s*(.*?)\s*(を|で)検索)!"<a href=\"http://www.google.com/search?num=50&lr=lang_ja&ie=euc-jp&q=" . url_encode($2) . "\" title=\"Google 検索: $2\">$1</a>"!eig;
chalow はキーワードの置換に perl の eval() を使っている。eval() の中身は文字列として表記しなければならないため、" や ' のエスケープが面倒。そのせいもあってあんまりきれいな正規表現じゃないけど、普段使いにはこれで十分でしょ。ちなみに、上記正規表現で使ってる url_encode() はさきに紹介したもの。
うちの cygwin 環境で chalow を使おうとしたところ、「nkf が無い」とエラーを出して動いてくれなかったので、nkf 1.7.1 をダウンロード、コンパイル & インストールしたら無事動いた。
nkf を何に使ってるのかを調べたところ、euc-jp への変換にしか使ってないことがわかった。だったら Jcode.pl や jcode.pm にも対応してくれればいいのに。順番に探していって、全部無かったらエラー、どれかがあればそれを使う、という様にしてくれれば手間も省ける。
nkf を何に使ってるのかを調べたところ、euc-jp への変換にしか使ってないことがわかった。だったら Jcode.pl や jcode.pm にも対応してくれればいいのに。順番に探していって、全部無かったらエラー、どれかがあればそれを使う、という様にしてくれれば手間も省ける。
- 2003-04-09 に引き続きちょっとだけ改良。
>YYYY-MM-DD または YYYY-MM-DD の ChangeLog という指定をすると、<a href="#YYYY-MM-DD" title="YYYY年MM月DD日の ChangeLog">YYYY-MM-DD の ChangeLog</a>
に置き換えるようにした。追加したコードは以下の通り。
s!(((\d{4})-(\d{2})-(\d{2}))\s*の\s*changelog)!<a href="#$2" title="$3年$4月$5日の ChangeLog">$1</a>!ig;
s!(>>((\d{4})-(\d{2})-(\d{2})))!<a href="#$2" title="$3年$4月$5日の ChangeLog">$1</a>!ig;