nDiki : 2004年01月23日

2004年1月23日 (金)

[ WiKicker ] 憧れのサイドバー

Wiki はまぁ(ユーザからの視点において)シンプルな方が良いと思うのだが、やっぱサイドバーは出せてもいいかな。先日実装したIPC共有メモリを用いた直近のアクセスログ管理を使ってトップランキングも常にチェックできるようにしたいし。

tDiary テーマでサイドバー

レイアウトは tDiary のテーマにまかせる。 現在の blue-feather はサイドバー対応していないようなので、Nana 氏の flower に変更。 Wiki用に若干幅、配色等を修正。

で、WiKicker のフッタファイルに <div class="sidebar">...</div> を作ってそこに Google検索フォーム等を移動。

Access Top 30

IPC共有メモリに置いてあるアクセスログを使って直近300アクセスによるランキングをサイドバーに表示できるようにする。

アクセスログは刻々と更新されるのでトップランキングもできるだけ更新表示させたいのだが、一方各WikiPageはレスポンス向上・負荷軽減のためできるだけ 304 を返したい。

なのでページ中の更新表示させたいトップランキングの部分を、JavaScriptファイルとして別ファイルに生成しておくことにした(いわゆる JavaScript Include)。 HTML出力自体に変更がなくて304を返しても、アクセスログの変更に合わせてJavaScriptファイルだけ更新しておけばクライアント側で表示を更新してくれる。

JavaScript はできるだけ避ける方針できているが、アクセスランキングは付加的情報なのでJavaScript off によって表示されなくてもそれほど問題ないと判断。 document.write だけだから互換性の問題もほとんどないだろうし。

JavaScriptファイルの更新は、RecentLogへアクセスがあった時についでに生成するという形で行うようにしてみた。 一応 cron で1時間毎に

 wget --quiet -O - http://www.naney.org/wiki/RecentLog.html > /dev/null

して、最低でも1時間に1回は更新されるようにしておく。

スポンサード リンク

過去の今ごろ

過去の1月23日より。

[ Perl ] Devel::Cycle

WiKickerメモリ消費量を抑えるためにメモリリークチェック用モジュールをいくつか試してみる。

  • Devel::Leak - リークをチェックするコードの最初と最後にサブルーチンを呼ぶ。リークはアドレスで表示される。
  • Devel::LeakTrace - use すると勝手にプログラムのリークをチェックする。表示は Devel::Leak と同じタイプ。dh-make-perl でうまくパッケージ化できなかったので試すのやめ。
  • Devel::ObjectTracker - perl -d:ObjectTracker ... として使用。プログラム実行のトレースをファイルに書き出す。デフォルトで標準出力にメッセージを吐くのでCGI プログラムでは困る。実行時ディレクトリに .objecttracer というファイルを置きその中に $Devel::ObjectTracker::verbose = 0; と書いておけば最初から出力を抑制しておける。が、試してみたらセグメンテーションフォルト。
  • Devel::Cycle - 指定したリファレンスを辿り循環参照が無いかを検出するサブルーチンを提供。
  • Test::Memory::Cycle - 上記のテストハーネス用のインタフェース

結局うまく使えそうなのは、Devel::Cycle ぐらいかな。 循環参照を発見した場合の表示は見やすい。 WiKicker の何か所かでチェックしてみたけど、今のところ見つからず。

いつから歯クソ?

リンゴを食べていたら歯につまったので、取って(当然)食った。

すぐだったしとれた断片もまだリンゴそのままだったのだが、これは既に歯クソなのか? まだリンゴなのか? もしまだこれがリンゴと呼べるのなら、ではいつから歯クソと呼ばれるのか?

[ WiKicker ] eval "use ..."

Devel::SizeDevel::Cycle を埋め込むもののメモリを喰ってそうなところがなかなか見つからず。

デバッグ用コードを書いたり消したりも面倒なので、ビルド時に WIKICKER_DEBUG=1 を指定しておいた時だけ、ExtUtils::MakeMaker の PM_FILTER を使ってソース中の、

 #IFDEBUG: <デバッグコード>

が有効になるようにしておく。

メモリ消費の方だが以前より攻撃的に eval "use ..." で必要な時だけモジュールをロードするように修正。 常にロードしてあった Jcode も必要な時だけに。 これで少しは減ってくれるかな?

[ 1月23日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.052845s / load averages: 1.04, 0.81, 0.71
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker