iso tank - blosxom

mark_oops(自作プラグイン)

以前はsnap_inプラグインというのを導入していたが、HTMLタグマークアップ系の統合的な(?)プラグインを作ってみたいなーとか? 単に作者である俺が楽して記事作りたいだけみたいな? wikipedia方式のマークアップ方法を採り入れてさー、なんかこうさー楽にさー。

/plugin/mark_oops.txt

とりあえず今はこんなんで。クオート三つで強調とかシャープ二個でAAスタイルとかブラケット二つでリンクとかはコメントのそれと同じ。あとブラケット二つに「画像:」って入れるとimgタグ作るようにしたり。おおっとこれはコメントの方には反映されてないのぜ。

あとはリスト・引用・文字サイズ変更・強制改行くらいは対応させておこうかなー。基本的においら基本的なタグしか使ってないからこんなもんで間に合うしなー。

ε========三ヾ( ∵)ノ ビューン

foreshortened改造 3かいめ

1/30追加

ちなみに昨日仕事中にゲームの遊び方について訊ねて来た隣の人は、昨日の午後、突然高熱を発してお倒れになられた。今日は休んだ。風邪である。

でPerlです。blosxomです。ようするに朝から今まで「データをバイト単位で区切る関数は存在する(substrなど)けど、文字単位で区切る関数は存在しない」ことに頭を悩ませていたのです。

どういうことかっていうと、Perlは文字列を扱うのがとても上手なくせに、文字の数を数えるのが苦手なのです。でもこれPerlのせいじゃないとおもうけどね。先述のsubstrという関数はデータをバイト単位で区切るもんだから、つまりマルチバイト文字の後ろのほうだけ削ってしまっても気づかないので、最後の文字がそのまま化けて表示されてしまう。

普通にHTMLで表示する分には「あー文字化けしてやんのあはは」で済むんだけどこれがRSSとかのいわゆるXMLで扱おうとするとだいぶうまくない。XML全体としてエラーを吐き出してしまうのでRSSとかがまったく機能しなくなる。

で、なにをしてるのかっていうと「ブログの記事の最初の方を抜き出して要約文として仕立て上げること」をやっているんですけどね。blosxomでいうところのforeshortenedってやつ。本文短縮化プラグインです。

英語の場合1バイト文字しかないからsubstrで問題ない。ひらがな・かたかなは2バイト、漢字にいたっては3バイトと、バイト数がばらばらなんでこれが非常にやっかい。考えた。拙者かなり考えた。むむむむむ、む。

そういや先日、PythonいじりまくってURLエンコード/デコードするCGI作ったじゃないですか。あれってどうやったっけ。あれ? あれって? んんん。おやおや?

日記を見返すと、URLエンコードするのに「UTF-8文字列→Unicodeにデコード→他の文字列にエンコード→URLエンコード」という方法をとっていた。そうそう、そうそうそう。

じゃあさ、文字を区切るのに「UTF-8文字列→内部文字列にデコード→文字列をチョン→UTF-8にエンコード」ってしたらどうなるよ? よ? よ。

ググった。PerlのモジュールのひとつにEncodeっていうのがある。確かよくJcodeとくらべられるやつだ。めんどくさいからそういうことしなけりゃいいじゃんってことでほっぽってたので忘れてた。

つまりこう。

$STR = encode('utf-8', substr(decode('utf-8', $STR), 0, $LENGTH));

結果は◎。大成功。やべ、俺神すぎ\(^o^)/なわけない。結局substrで文字単位で文字列を区切ることができたわけだ。気付け。調べろ。俺。ばかうんこ。

そんなわけでRSSのdescriptionタグにこれで短縮化した文字列をはめこむことができるー。ちなみにcontent:encodedはあまりにもデータ量が大きすぎるので削った。いいよね?

さーて次はmixipostを何とかしたいなぁ。仕事? やらん。

(1/28追記)foreshortened本体のソースはこんな感じになったコード的に間違ってないといいんだけど。

entries_kacheのけん

以前にちょっといじった entries_kache プラグインについて、あるサイトで言及されいたのを発見したです。

はてなブックマーク - 徒栞 / blosxom

iso tank - entries_kacheプラグイン改造
[blosxom]改造されてた。/ 「blosxom本来のentriesサブルーチン」は毎回全ファイルをfindで探索して更新時刻を取得するので、その改造だと却って遅くなっているような気が。

( ∵)・・・

Σ(∵)アッーーーー!!!

mixipostプラグイン

どうもmixiにRSSを直接指定して外部blogとリンクさせる方法だと、うまいとこ最新日記が表示されなかったり 変になったりする現象があるらしい。mixiの仕組みにいまいち不安があったこともあり、広大なネットの海を泳いで プラグイン漁りの旅に出たところ、10分かからないで mixipostというイカスプラグインに出会った。

このmixipost、単純な話、記事データを読み取ってmixiに内容をアップロード「し直す」仕組みである。 この「mixiにアップロードし直す」という部分には、 WWW::Mixiという これまたイカスモジュールが使われている。このモジュールは早い話mixiにアクセスしたり色々なデータを読み取ったりと mixi「だけ」に特化したモジュールだ。簡単に言うとこのプラグインを使ってログイン→日記書き込み→ログアウト を自動化して行っている。

mixipost上で記事を書き、それをblosxomとmixiへ同時に投稿する機能もある。

ただ、やはり俺としては(さもしい自己主張かもしれないが)blosxomがメインと考えているので、mixiへUPするのは よっぽど短い記事を除いて冒頭部分(要約のみ)としたい。そんなわけでまたプラグインをぽちぽちいじって、 整形・出力部分(具体的にはsub sanitizeとsub storyの後半)で自分の好きなように整形。置換連発。チカンチカン。

一つだけ悩み事を挙げるならば、このプラグインの実行に必要なWWW::Mixiを導入するために、サーバー上に 「./WWW」などというディレクトリを作らなければならなかったことだ。つまりモジュールとして「WWW::Mixi」なのであって ”::”とは境目を示す。「WWWの中のMixi」ということになる。これをblosxom本体からアクセスできるようにするため、 CGI本体の位置から相対的な位置に「WWW」ディレクトリを作成して、その中に「Mixi.pm」を物故無(ぶっこむ)ことで このモジュールを実行できるようにした。つまりモノはイカスのに見た目がおよろしくない。これなんとかならんのか。

same_category導入

same_categoryプラグインは、 ある記事と同じカテゴリ(話題)に投稿された、最近の記事のリストを提供するプラグインです。 というのが本来の使い方です。

本来の使い方、というのは、俺は本来の使い方から逸脱した目的でこのプラグインを導入したからです。 つまり、ブログのTOPにおいてはすべての投稿された記事の最新の数件をリスト化するようにしたです。 他のプラグインを導入することなく、ひとつのプラグインで複数のことができるのなら、いいのかなと。

というか元々はJavaScriptを利用してこの機能を実現していたんですけど、俺正直Javaとか苦手なんっすよ。 なんかあるだけでソワソワしてくるんっすよ。尤も、 Google Analyticsの統計だけは仕方ないなぁと 入れておったわけなんっすが。

そもそもこの機能自体が必要かどうか(それほどまでにこのサイトに需要/閲覧者がいるのか)という 俺のアイデンティティを心底揺るがすような思考は俺の寿命を早めるので考えることをやめた。