2002-01-25 [長年日記]
_ HNSカスタマイズ
昨日一晩hnsをいろいろ試した(0時過ぎに家に帰ってきて、それから朝4時過ぎまでいじっていた)結果、基本的にはhnsを使いつつ、絶対に欲しい機能(完全連携bbsなど)は自前で作ることに決めた。hnsbbsが機能拡張されるのを待つ/自分で機能拡張するって手もあるけど、どうもhnsbbsは俺好みのシンプルなbbsじゃなさそうだし。
でもその前に、hnsの基本機能の側を自分専用にカスタマイズしなくては。カテゴリ分けの機能をばりばり使うつもりなんで、標準ではおまけ的な扱いになっているカテゴリ分けの機能を、もっと全面に押し出す形でカスタマイズする必要がありそうだ。ヘタしたら、標準的なカスタマイズだけじゃなく、自前の外部ツールなんかも用意する必要があるかな?
なんてことに取りかかる前に、ひとまずはふつうに使うレベルでのデザインをカスタマイズしておかないとならないんだけど、スタイルシートでデザインするのって慣れていないんで、どうしても試行錯誤の部分が大きくて面倒くさいんだよな。
_ ヘッドラインがうまく動かない
ヘッドラインが使いたかったんで、さらにhnsをバージョンアップ(2.20β)。テーマ「jikenbo+」を拾ってきていろいろいじっていたら、何とかヘッドラインが表示されるようになったんだけど、なぜか今日(25日)の分だけしか表示されないな。hnsのバージョン表記も変わっていないんで、何かセットアップ(アップグレード)のときにミスったか? それとも旧バージョン形式のデータではうまく動かないとか? あるいは俺の設定ファイルのミス? よくわからんなー。
_ 忙しさの山を一つ越えた
今週いっぱいかけてやっていた仕事に、ようやく終わりが見えてきた。本当は一昨日にいったんゴールが見えたんだけど、最初に来た仕様書通りに作ったシステムの出力結果が、どうにも既存システムで出力した結果とあわなかった。
はてさて、俺の作り方が悪いのか、既存システムがバグっているのか、元データが腐っているのか。なんぼ考えても原因がわからないんで、過程&結果ファイルをクライアントに送ってみたら、仕様漏れやら追加仕様がわらわらと発生して、最初に見えたと思ったゴールは逃げ水のように去っていった。
でも、さっき来た仕様漏れ分を追加したら、既存システムの出力結果と同じになったんで、きっとこれでほぼゴールにたどり着いたんだろう。土日はちゃんと休めそうだな。
_ hns連動bbs「hnsbbs2」を作りつつある
hnsbbsに置き換えて使うつもりの、単機能型hns連動bbs、開発コード「hnsbbs2」をにょろにょろと作りつつある。一応投稿と閲覧は最低限できるようになった。cgiのファイル名をhnsbbsと合わせてあるんで、日記の各トピック下に張られた「コメントを投稿する」から、実際に投稿するところまでできた。
が、Perl5がわからない身の悲しさよ、hnsbbs2をきちんとhnsと連動するようにする方法がさぱーりわからない。hnsbbsのhnsとのインターフェースとなっているらしいBoard.pmをいじくってみたのだけれども、まったく俺の予想とは違った動きになる。っつーか、思わぬ動きにすらならない。関係ありそうなところをいじっても、まったく反能なし。なにゆえ?
勘で適当にいじっているレベルじゃどうにもらちがあかないようなんで、今更ながらPerl5オブジェクト指向プログラミングの基礎のお勉強でもするかね。Perl4レベルでも十分実用プログラムが組めるもんだから、Perl5っぽい書き方って全然勉強していないんだよな。
_ packageはスコープ宣言
会社の本棚をあさったらPerlの入門書(エリー・クイグリー著「Perl入門第2版」)があったんで、この週末はそれを持ち帰ってお勉強することにした。ひとまず帰りの電車の中でオブジェクト指向周りの部分をざっと読んだところ、謎が多かったPerl5ライクな書き方の意味がずいぶんと理解できた。
package宣言ってのはてっきりclassの宣言なんだと思っていたんだけど、これは単なる名前空間(スコープ)の宣言なんだね。で、もちろんclassはclass内に限定されたスコープを持っていないとややこしいことになるから、classを利用する際にも必ず用いられるって話なのか。今までてっきりpackageと書かれていたら=classを使っている=oopで書かれたPerlプログラムだと思っていたよ。実際には名前空間を切り替えるためだけにpackageを使っていることが多いんだね。
ちなみに、Perlのデフォルト(暗黙)の名前空間はmainなんだそうな。で、
package hoge;
と書くと、それ以降にローカルで宣言された変数、関数はhogeの名前空間に所属することになる。他のpackageに所属する変数・関数を参照したい場合は、
hoge::foo
なんて感じで、どの名前空間に所属するのかを明記することでアクセスできる。さらにその状態で
package main;
とやると、またmain名前空間に戻すことができる。入門書では、その背後にある仕組み(名前空間を保持するためのハッシュ配列がある、とか)をいろいろ細かいことまで解説してあったけど、ふつうに使う分には下手にその辺まで覚えない方がいい気がする。Perlって詳しくなれば詳しくなるほど、他人にとっての可読性が悪いコードが書けるようになっちゃうからな。

