iso tank - blosxom 2006年

entries_kacheプラグイン改造

entries_kacheをちょこっとだけいじりました。ほとんどメモのようなものなので、 「続きを読む」つけましたよ。

元:entries_kacheプラグイン(徒書※現在停止中)

エントリファイルの作成日時をキャッシュしてファイルに保存しておくプラグイン。 またエントリにメタ情報としてmeta-creation_dateを挿入・保存しておく。

メタ情報やキャッシュファイルの情報を読み取り、entriesサブルーチンを上書きして動作し、 ファイル名に作成日時を関連付けたハッシュを生成、%filesとして返す。

blosxom本来のentriesサブルーチンは、単純にファイルの”更新日時”を取得して、 ファイル名に”更新日時”を関連付けた%filesを返すようになっている。

”じゃーutimeで更新日時を変更しちゃえばいいじゃん”ってなことで 適当なところで

foreach (sort keys %files) {
    utime ($time, $files{$_}, $_);
}

を挿入。

ファイルの更新日時そのものを書き換えたので、blosxom本来の”通常の”entriesサブルーチンでも 正常に(?)表示されるようになったハズなので、startサブルーチンは

sub start {
    $reindex = (CGI::param('reindex')) ? 1 : 0;
    return $reindex;
}

つまりreindexのオプションを付けないとプラグインが動作しないように変更。 ちと軽くなったような気がする(∵)

writeback_updateプラグイン作成してみた

最近blosxomいじりばっかりです。楽しい? チョー楽しい。

Writeback、つまりblosxom語では「コメント&トラックバック」のことを「Writeback(ライトバック)」と言うわけなんですけれど、 blosxomのシステム上、あとWriteback(プラグイン)のシステム上、投稿データは記事単位に分割されて保存されており、 スパム投稿があった場合は、基本的にはFTPにアクセスしてファイルの内容を手動で削除する方法が主流 (と思っています。少なくともWeb上で削除を行うようなインターフェースは標準では実装されてないので)。

しかし、これを行うとつまり、[単純にテキストファイルを開く→問題の行を削除する→ 上書き保存したテキストファイルをFTPに上書きアップロード]しているだけの事になるので、 もちろんの事ながら「ファイルの更新日時」が変更される。これが変更されると、ある種のプラグイン、 具体的にはrecentwritebacks_treeプラグインで ちょっとした問題が発生する。

このrecentwritebacks_treeプラグインは、ファイルのModify-Timeを直接取得してファイルに順位をつけ、 最も新しいコメントが投稿されたファイルの順に「最新のWriteback」を表示する仕組みになっている。 つまり編集したファイルが先頭に来てしまい、なんというか困るのです。

そういう経緯もあり、先述のrecentwritebacks_treeのコードを一部利用したりなんかしながら、 必要な時に任意で動作させてファイルの更新日時を半ば強引に”正常化”する writeback_updateプラグインというものを作ってみた。 URLの後ろに”?update=1”で動作。ファイル内の投稿日時を取得してそれを”ファイルの更新日時”として書き換えてしまう。

大雑把に作ってみただけなので改良の余地がありまくりんぐ。

List Title at Year & Month プラグイン導入

all about of blosxomさんトコの List Title at YearプラグインList Title at Monthプラグインを導入してみましたよ。 右のメニューの「Log」の各日付をクリックしていただけるとわかりますが、その年/月ごとの記事を、 タイトルだけリストしてズラーーッと並べます。以前は記事が延々と下の下のさらに最下層のコキュートスを超越した先ぐらいまで表示されまくるもんで困ってました。

List Title at YearもMonthも、ソックリのコードを持つプラグインで、 Yearは年ごと表示だけ、Monthは月ごと表示だけに対応してたもようだったので、 せっかくだから年にも月にも対応した一個のプラグインにまとめちゃいました。 はいはいおもちゃ遊びおもちゃ遊び。Kyoさんマジでごめんなさい。

おもちゃ遊びついでに、昇順表示・降順表示を設定できるようにしてみました。 しかしまだまだ勉強不足であることを痛感するKONOZAMA。とはいえこうやってPerlとかいじってる時間が 一番ウキウキしてるんですよね、自分。はー仕事したくないわ。

追記:結局消しました。

snap_inプラグイン改造

Ellinikonblueさんの snap_in プラグインを、 なんかムチャクチャに改造してしまった・・・

元の仕様:[画像ファイル名]で、imgタグを自動生成、HTMLファイル名を入れればHTML挿入可。

改造後:[画像ファイル名:width-height%#コメント]で、imgタグを自動生成、幅−高さ、ALT属性の内容を指定可。 %を入れるとファイル名の末尾に「_full」と入れたAタグまで生成。 さらにフレーバーを指定することで、画像を挿入せずリンクだけ表示することも可。HTML挿入機能削除。

やべ、やりすぎた?

なんか引数多すぎなせいかHP全体の動作もっさりしてきた気が、、、

ここまでいじくり倒したのはもちろん記事書くときの負担軽減の為なわけです、今までバカ正直に手入力で <a href="うにゃらら"><img src="ほにゃららら" width="320" height="240" alt="うにょろらららろ"> とか書いてテキストファイルがしこたま長くなってたのをなんとかしたいなとは常々思っていたもので。ぐうたらマキシマム。

正直、プラグインとかオモチャ扱いしてしまっているような気がする。なんかすいません・・・

blosxomな方々とお近づきになりたいですわ、、、

追記:結局消しました。

html2xhtml plugin - blosxom

ワタクシの今現在作っているサイトはHTML4.01仕様書に基いていちおう作った(つもり)なのでスが、 最近のケータイ事情は激しいもので、DoCoMoでもauでもVodafoneでも大体XHTML Basicに 対応したブラウザを搭載しているのだということで、ケータイ向けにXHTML Basic向けに書き直し中。

簡単に書くと、XHTMLとはXMLに基いて作り直されたHTMLで、今までのHTMLは SGMLを母言語とした言語でしたが、 SGMLそのものが膨大で漠然としすぎていたため、その下位言語のHTMLもSGMLという仕様をとらえきれず、 その結果言語としてうまいところまとまっていません。それを乗り越えようと生まれたのが、同じSGMLを 母言語としつつも極めて厳密な仕様を持つXML であり、そのXMLという厳密な"ルールブック"を基に生まれた、HTMLの正当な後継が XHTMLなのです。

ハァハァ、、、

んで今回は、このXHTML仕様の一つ"XHTML Basic"にサイトを対応させようかとテスト中。 ようするに「書き方」だから、flavour(フレーバー。テンプレートのこと)を別個にXHTML 対応のヤツを作り上げれば完成。のハズが、いくつかのプラグインの出力結果がHTML準拠な内容なため、 これは最終的に出力されるデータそのものをXHTML準拠に置き換えるしか方法がないと思い、 HTMLとXHTMLを選択して出力できるような "html2xhtml"プラグインを作ってみた。

つまり、上に書いたとおり最終的な出力結果を書き換えてしまうんだから、

sub last {
    my $content_type = $blosxom::header->{-type};
    return 1 if ($content_type !~ m|^application/xhtml\+xml|i);
    $blosxom::output =~ s|<meta(.*?)([^/])>|<meta$1$2 />|gi;
  $blosxom::output =~ s|<link(.*?)([^/])>|<link$1$2 />|gi;
  $blosxom::output =~ s|<img(.*?)>|<img$1/>|gi;
  $blosxom::output =~ s|<br>|<br />|gi;
  $blosxom::output =~ s|<input(.*?)([^/])>|<input$1$2 />|gi;
  $blosxom::output =~ s|</?big.*?>||gi;
  $blosxom::output =~ s|</?small.*?>||gi;
  $blosxom::output =~ s|</?ins.*?>||gi;
  $blosxom::output =~ s|</?del.*?>||gi;
  $blosxom::output =~ s|<hr.*?>||gi;
  $blosxom::output =~ s|<(.*?)\sstyle=".*?"(.*?)>|<$1$2>|gi;
  $blosxom::output =~ s|<(.*?)\stabindex=".*?"(.*?)>|<$1$2>|gi;
  1;
}

こんなんで解決。上から順に

  1. lastサブルーチンを使用します。
  2. 開かれたflavourのcontent-typeを、変数に格納します。
  3. content-typeが"application/xhtml+xml"でなければ、そのまま素通り。
  4. <meta>は末尾で終了している必要があります。
  5. <link>は(ry。
  6. <img>は(ry。
  7. <br>は(ry。
  8. <input>は(ry。
  9. <big>はXHTML Basicでは定義されていません。
  10. <small>は(ry
  11. <ins>は(ry
  12. <del>は(ry
  13. <hr>は(ry
  14. "style"属性はXHTML Basicでは定義されていません。
  15. "tabindex"属性は(ry
  16. 戻り値1を返します。
  17. lastサブルーチンここで終わり。

もうちょっとスマートな方法がないもんかなと思ったけど、おいらにはこれ以上思いつかないお、、、

で、反映結果。あ、IEだと多分表示されずに ダウンロード画面とか出るだろうとおもます。そんときはFirefoxとか使うかSleipnirなら Geckoプラグイン導入の上Geckoで見るか、そうでないときはレジストリいじって強制的に text/htmlで 表示させるか、えーとえーとあとはダウンロードしてメモ帳で開くか何かもうとにかく色々すると 表示されるはずです。悪いのはMicro$oftだよ だよ!とか言ってみるテスツヽ(∵ )ノ

Archivesプラグイン改造

このHPの右のナビゲーションにある「Archive」ていう月毎のリンクが張られているヤツ、これがArchivesプラグインによる月毎ナビゲーションリンクです、

仕組みを簡単に説明すると、記事リストを読み込んで、記事一個ずつ更新日時を取得。ハッシュを使ってリストをブワー、みたいな。

最近ちょっとずつPerlがわかりはじめてきたつもりになってきたので、ここで図に乗ってArchivesプラグインを独自に改造してしまいましたよ。内容は「カテゴリごとの閲覧の場合、そのカテゴリ内でのArchiveリストを生成することもできる」みたいな。

勝手に改造Archivesプラグイン

初心者だもんでなんかうまくない処理してるかもしんないけどその時は各方面からツッコミいただければ(∵)ゞ 大変励みになります。ハイ。

blosxomのいいところ

「なんでblosxomを使うん?」と、節子っぽい誰かに訊かれたので(∵ )

前にもなんべんも書いた気がするけんどなぁ、

特徴

  1. Web上で編集したりするものではない(管理画面等が無い)
  2. 実行プログラムは一つだけ、モジュールは無いがプラグインがある
  3. すべてPerlで作られており、PHP/MySQL等は不要
  4. 構造上、基本的にパスワード等が必要な操作が無い
  5. ライセンスがゆるい

と、all about blosxomさんの "vs Movable Type"のページを参照 させてもらったり(∵ )ゞ

1については、つまりファイルを直接FTP等でアップロードすることでblogや記事を生成してるので 『管理メニュー』とかは逆に必要ないということでもあるわけです、 そのおかげで4番目の「パスワード等が必要な操作が無い」ことにつながるわけだけども(∵)

2番目のについても、Web管理画面とか難しいインターフェイスを取り払ったためプログラムを 『テキストを記事にして並べ、blogを生成する』事と『カテゴリ分けする』等にのみ 集中させることができ、その結果プログラムを単純化できているということなのではないかな、 と思うのですよ、

で、Perlによる「文字いじり」に終始することになり、データベースとかの難しいコトも必要ない ということで3番目。

で、『管理メニュー』とか『Web上での記事登録・削除・操作』とかそういった動作が存在しなければ、 パスワードが必要な場面が無いということです、4番目。

5番目はつまりこのblosxomが、よくあるBBSのcgiスクリプトとかとほとんど変らないので ライセンスとかもMTと違って非常なコノ、ゆるいと。

で、

MTとかああいうblogのシステムとはまったく違うモノと考えてください、 このblosxomはサーバー上のあるディレクトリにアップロードされたテキストファイルを読み取り、 文字の並びを整えたり見栄えを変えたりするプログラムていうことです。

また、上に書いたシステムの構造上、外部入力を受けつける場面はとても少ないです、 ということは、外部からのクラッキングに遭うスキもとても小さかったりします。 サーバーをクラックされてしまえばミもフタもありゃしませんが、cgi単体でクラックされることは無いと

何かいてるか自分でもよくわからなくなったのでこのへんで(∵)ノシ

SeeMoreプラグイン導入

SeeMoreプラグイン by Todd Larason

いや実は前にも使ってたんですけどね(∵)

なんだか無理に全部の記事を縮小しなくてもイイカナ、って思えてきたんですよ、

画像使ったり阿呆ほど文字打ち込んだ記事だけ短小にすればいいかな、と

ゆえにForeshortenedプラグインはしばらくおやすみー└|∵ |┐

あとは「つづく」の部分を任意の好きな文字列にできるように改造するだけダ、、、グガ、グ、、ギギ、、モレモレ

【blosxom】Perlタコの弱音

つまり、つまり変数の末尾語というか、そういうモンがあると若干楽いんですよ!Σp(∵ )

〜 sub_interpolateなブ・ブ・ン 〜

s/(\$\w+(?:::)?\w*)/"defined $1 ? $1 : ''"/gee;

s/%(\$\w+(?:::)?\w*)%/"defined $1 ? $1 : ''"/gee;

忘れてください

変なblosxomプラグインのようなモノが

blosxom.cgiをいじくりながらPerlのお勉強をしてるですよ?(∵)ノ

$path_info =~ s!(^/*)|(/*$)!!g;

いわゆる文字列の置換なんだけど、$path_infoの先頭と末尾に/(スラッシュ)があったら 前後のスラッシュのみを無くす、という処理であってるかな?、、、かな?

真ん中が||(比較演算子)じゃなくて|(ビット演算子)なのはなぜかなーとか思ったんだけど、もしかすると

$path_info =~ s!(^/*)||(/*$)!!g;

とかの場合、左辺が真の場合は右辺を評価しないので、先頭にスラッシュがあれば末尾のスラッシュは無視される、のかな?

一方、真ん中が棒いっぽんの場合はビット単位で両辺を比較してどちらかが1(つまり真)である部分を返す、ということは、 マッチした先頭と末尾のスラッシュがまとめて置換されて

/path_info/ → path_info

ということになるのだろうか??

誰かおしえてーー┌| ∵|┘

んとですね、結局どういうことかというと、つまりこのHPの最下部に「RSS」へのリンクがあるわけですよ、 RSSとは言わずもがななんかRSSリーダーとかで読み取ったりして更新をチェックしたり、はたまたmixiと連携したりするシロモノです、

このRSSのURL、実はblosxomのプログラムを利用して

$url/index.rss

などと当初は書いておったのです、こうするとプログラムの変数が出力されて

http://iso.tank.jp/index.rss

となるわけですよ?、

最初はコレで満足しておったわけですが、なんかカテゴリ毎のRSSも出力できるとかできないとかいうことに気づいてしまいました、 つまりhttp://iso.tank.jp/game/moe/index.rssへリンクするとMoEに関する記事のみ購読できるようになったり http://iso.tank.jp/blosxom/index.rssだとblosxomに関する記事のみ読み取れたりするのです!、

ウオオコリャスゲエエェってことで早速rssを吐き出す部分を下記のように書き換えてみたところ、

$url$path_info/index.rss

 => http://iso.tank.jp/blogblosxom/index.rss(URLの「blog」とカテゴリ名がくっつく)

$url/$path_info/index.rss

 => http://iso.tank.jp/blog//index.rss(メインページのRSSのスラッシュが二重になる)

つまり、我ダサスギ也ということでございます

解決方法は実は色々いっぱいあるのです、例えば記事ディレクトリ直下のフレーバー(テンプレート)には「$url/index.rss」って書いて、 さらに各カテゴリのディレクトリにもフレーバーを作ってそこには「$url/$path_info/index.rss」とでも書いてちゃって、さらにさらに個別記事用のフレーバーには 「$url/$path/index.rss」とでも書いておけばそこはかとなく解決する代物だし、もしくはblosxom.cgi本体を直接いじっちゃって$path_infoの左端に/(スラッシュ) を入れた関数でもでっちあげちゃえば別にそれで完成なんじゃない? とか、とか、

しかしなんか色んなことをボヘーっと考えながら昼休み中blosxom.cgiを見つめていたら、 いつのまにか変なモノができあがった

あれ、これプラグイン? のようなモノ、え?なに?初めてプラグインらしきものができあがっちゃいましたよ?

ていうかいいのかコレ?

ウーン、、、勢いで作っちゃったけど、素直にフレーバーで対応したほうがいいような気がする、、、└|∵ |┐

foreshortenedプラグイン改造#2

はいはいチラシの裏チラシの裏、前回のforeshortenedプラグイン改造に自分自身納得いかず、性懲りも無くまた改造です、仕事しろ、え、

煤 - Noteさんの記事を参考にしながら、 まずは"meta"情報として「excerpt」の記述があった場合、その行の文章をそのまま使用するようにしました、ちなみに"Excerpt"ていうのは「抜粋」とかいう意味です、 つまり自分で書いた要約文があればそれを使えコラーってことですね、

次に、うっかり一行目に画像を載せちゃった場合は"(画像)"の文字とともにALTの内容を書き出すようにしてみました、ほんで、末尾の句読点を消して「...」を表示するようにしてみました、

あとrss用の要約文を生成する場合、タグはやっぱり全部消しておくことにしました、

なんかおもちゃみたいな使い方しかできてないような気がする、、、(∵ )