あたまの体操、気分転換、現実逃避?

先週来、XCodeObjective-Cなコードを書いたりInterfaceBuilderを使ってみたりしていて、ここ数日はperlいじり。先週リクルーティングでperl使いな人と会ったこともあるのだけど、前から作ってみようと思っていた、掲示板のRSSインターフェースを題材にやってみた。mqbbsという、とても古いcgiなのだけど、不思議な縁というか、最初はWindowsCE FANの掲示板に1、2年。んで、なぜか大学の掲示板がほとんどmqbbs。最近はxoopsのforumになったり、研究室はKent-WebのClipboard、データベース等の科目はLightBoard、CGはT-Noteってのを使ってたなぁ。

でも、設置が手軽なのかいまだに新設される掲示板のいくつかはmqbbsだったりする。

それで、mqbbsのデータファイルを読み出してRSSを生成する機能を追加してみようということで、練習問題のような感じでやってみた。RSSといっても、あまり難しいものではない。すでに、設定した件数を上限にした、ベタ表示と呼ばれる形式でのメッセージの一覧表示もあるので、この形式の出力処理をコピペして、RSS形式にすればはや上がりである。このレベルでは、perlの理解が低くても、何となくできてしまう。rss形式で出力する整形部分も、別のスクリプトから拝借してきた。

ソースを読んでいると、ファイルから行単位で読み出して、?t(タブ)で分解して、何番目と何番目を という風に、やってそうなことがイメージできるとソースも何となく読める。えらくスッキリ書けてしまっているのだが、しょっちゅう使っているレベルでないと、なかなか身に付かない気がしてならない。
今日のとこまででできたのは、ざっと

  • RSS1.0
  • 最新のログにあるものが全部出る
  • FILE=filename指定で、過去ログの相当分を出力。これはmqbbsのそれと同じ*1
  • FILE=ALL指定で、すべてのメッセージを出力*2
  • dc:identifierで発言番号、dc:relationでコメント先番号を出してみた。*3
  • content:encodedで本文を返す

というところ。最初はmqbbs.cgi?MODE=RSSで返すように、mqbbs.cgi自体に書き加えていったが、変更すべき箇所があちこちにあって、既に設置済みのローカライズバージョンに組み込もうとすると非現実的な雰囲気になってきた。mqbbs.cgi自体に追加すると、ログの位置やサイトの名称など、設定がそのまま読める利点があったのだが、その運用性は別の手を考えるとして、mqrss.cgiという独立のcgiにすることに。


そして、これをmqbbs.cgiと同じ場所に設置する前提で、mqbbs.cgi自体をファイルとして読み込み、cgiに直接書かれた設定の、必要な4つの変数を読み込むことで、設定が共有されるようにした。ここでは、evalを使って、その変数に代入しようとしている行を読み込んだら、そのままそれを実行するという安直な方法で実装。我ながらうまくいった。


なんか、大体いい形になった気がする。あとは、

  • 本文の出力をオンオフできるように
  • 本文の整形をテキストかHTMLで指定できるように
  • RSSの件数を指定できるように(cgi埋め込みの初期値&リクエストラインでの指定)

といったところか。この辺にして、卒業研究やんなきゃ。perlOSXプログラミングは、いいアタマの体操として続けよう。


久しぶりに、開発元の ゆんFactoryを見ようと思ったら、もう姿がなかった。いろいろ検索してみると、会社の事業はどこかに統合して、次のステップを探しているようだった。目標は投資家なのだとか。

*1:といっても、このために書いたコードは1行もない

*2:FILE=ALLはがんばりました。過去ログ一覧の処理:MODE=OLDを参考に、ログファイル管理ファイルから読んだファイルの一覧を配列に入れ、メッセージの読み出し部分は、@files配列に入っているファイル名がつきるまで繰り返すように修正。ファイルが1つの時は1回だけ回る

*3:mqbbsは過去ログとまたがったツリーが崩れる。でも内部ではちゃんと情報を持っている。これらを返せば、ツリーが表示できる