nDiki : WikiEngine

2002年10月19日 (土)

WikiEngine 開発開始

YukiWiki2 をベースにちょこちょこいじってきた NaneyOrgWiki であるが、コードもこみいってきた。そろそろ、フルスクラッチしたくなってくる季節。

ということで、さっそくコーディング開始。 名前は WiKicker研究社の新和英大辞典をめくりつつ、

  • WikiName になり、
  • 'Wiki'、またはそれに準ずる名前で、
  • 既出でないもの。

kicker はいわゆる、「蹴る人」という意味以外に、

  • 批判家
  • 船外機 (WikiEngine と エンジンつながり)
  • 刺激を与えるもの (Wiki って刺激的?)
  • 以外な難点、思わぬ何問題

なんていうのもあって、まそれなりによさそげだし。 Kicker ならアイコンを作ろうと思った時に抽象的でないから作りやすそうというのもメリット。 地肌に優しい。 ただし手がまだ覚えていないのでつい、WiKicler とミスタイプしてします。

WiKicker への移行の主なポイントは、

あたり。

スポンサード リンク
[ 10月19日全て ]

2002年10月21日 (月)

NaneyOrgWiki 改良

WikiEngine開発にははいったけれども、稼働するのはずっと後になりそうなので、今使用している engine もまだまだ手を入れて遊びます。

DanglingLink の強調

WikiName と違って[[, ]]で区切るページ名は DanglingLink の時に「どこまでが名前かわからない」かなと思い、 CSS で破線をつけるようしてみる。

shared lock の導入

今までは CGI スクリプトの最初で必ず exclusive lock をかけるというバカ lock だった。 これだと WantedPages のような時間のかかる処理のあるページにアクセスがあると、他のページの read が軒並み sleep させられてしまう。

なので、書き込みのないアクセス時には shared lock で flock するように修正。 これで read vs read でのアクセスが待たされたくなったはず。 それでも時間のかかる shared lock なアクセスがあると write 系のアクセスはやっぱりしばらく待たされてしまうのだけれど、write 系は頻度が低いから……。

[ 10月21日全て ]

2002年11月18日 (月)

Parse::RecDescent の precompile

開発中の WikiEngine CGI プログラムがほとんど内容のない(質ではなくて量)ページを生成するのに2秒もかかっている。 これでは厳しい。 先日採用した Parse::RecDescent のせいだなと、計測コードを挿入。 案の定、3/4は(構文解析ではなくて)パーサ生成に喰われている。

これではParse::RecDescent あきらめか? と思ったが良くできているもので、きちんと precompile 機能があった。 Makefile.PL でパーサをモジュールとして生成しておいて、それを使うようにしたらガクンと処理時間が短くなった。 めでだしめでたし。

[ 11月18日全て ]

2003年5月14日 (水)

[ WiKicker ] touch

やまだ君から NaneyOrgWiki の更新情報が、なつみかんに反映されていないとのご指摘をいただく。Thanks。

WikiEngine を変えたのにあわせてなつみかんの設定を変更するのを忘れていた。 というか、WikiEngine 自体にも touch 機能まだ実装していなかったり。 ということでさっと実装

[ 5月14日全て ]

2003年9月19日 (金)

[ WiKicker ] If-Modified-Since: 関連作業ほぼ済

一昨日から着手した WikiEngine 改良作業。 NaneyOrgWiki で Last-Modified: HTTP ヘッダが出力されていなかったのは、単純に機能追加してから一度もページ更新がなかっただけだった(ページ更新があると DB の最終更新日を記録する機能を追加したので、一度も更新がないと更新日は未定という仕様にしたのを忘れていた)。 ダミーで編集をかけたらきちんと Last-Modified: を吐くようになり、あわせて If-Modified-Since: な GET に対して 304 を返せるようになった。

昨日まで RecentChanges と IndexPage に限定していたが、問題なさそうなので通常の WikiPage にも同様の処理を追加。 これで、何度か同じページをいったりきたりする閲覧がしやすくなるはず。

アンテナのようなデータベース外の情報により HTML 生成が変化するような機能を今後つけた場合は、その時またいろいろ考えなければいけないな。

[ 9月19日全て ]

2003年12月31日 (水)

私的10大ニュース2003

今年の大事件、マイブームなど。

[web] WiKicker 公開

オリジナル WikiEngine 「WiKicker」を公開し、 www.naney.org での運用を開始。 機能追加、負荷軽減など定期的にメンテナンスを継続中。 今年も1年 Wiki の年だった。

12月からは WiKicker ベースの日記システムDiKicker」の開発も開始。

[comp] cool programs

[net] ADSLトラブル

モデム

春の数ヶ月間悩まされ続けた。 一度常時接続に慣れてしまうと、もう戻れない。 結局モデムの故障。 その間「@FreeD」も契約してみたが、ADSL復旧に合わせて解約。

P-in Free 1P

[comp] 適応型ソフトウェア開発

仕事でのソフトウェアプロジェクトでの適用を開始しはじめてみた。

[comp] ThinkPad X31 2672-PHJ

ThinkPad

3年ぶりのメインノート PC の買い換えPentium M 1.6GHz + 1GBメモリ。 また3年は頑張ってもらわないと。

[camera] TC-1GR1s修理

TC-1 GR1s

愛用のTC-1が故障したため修理修理費16,300円也

GR1s修理

新規に購入したのは、Ai Nikkor 45mm F2.8P(10月12日)、 F3接眼補助レンズドンケ F-2 ぐらい。 あまり散財しなかった。

接眼補助レンズ ドンケ F-2 Ai Nikkor 45mm F2.8P

今年は撮影枚数が伸びず。

近所のミニラボが閉店したのも痛い。

[misc] レザークラフト

昨年買ったままだったレザークラフトセットを使ってレザークラフトを始めた。 パスケース、LEDフラッシュライトケース x 2、ツールナイフケース x 2、露出計ケース などを製作。 最近は何も作ってないな。 また何か作りたい。

LEATHERMAN MICRA 革ケース ツインメイトカバー SureFire エクゼクティブ・エリート E1e + KL1 レザーケース マグライト ソリテールケース Leatherman juice S2 レザーケース Arc-LS 用レザーケース

[misc] LEDフラッシュライト

LEDフラッシュライトに興味を持つ。 SureFire E1e + KL1ARC-AAAArc LSL-P などを購入。

SureFire E1E-HA Arc-AAA Arc LSL-P

[ 12月31日全て ]

2004年2月10日 (火)

[ WiKicker ] WiKicker脚注機能追加

WiKicker スタイルで日記を記述するにあたり欠けている機能として「脚注」がある。 Wiki としては必須でないので WiKicker には導入していないのだが、日記としては無いと困る。 脚注が使えると文を書く時に正直手を抜ける。 またハイパー日記システム上の旧記事をコンバートする時にも無いといろいろ面倒だし。

ということで実装

インラインブロック

さてどうしたものか。 WiKickerWRI (BracketName 等を含む識別子)としての実装なら、parser の変更もなく新しいWRI scheme の追加と対応するクラスを書くだけですむ。 しかし WRI は終端記号なので、そうすると脚注の中でWRIを使えなくなる。 それは困る。

ということで、やはり非終端記号が必要。 悩んだあげく、

 {{scheme: ... }}

という「インラインブロック非終端記号」を導入。 {{..}} というのは確かいくつかの WikiEngineプラグイン呼び出しで使っている記法だったような。

  • 一般的な文章中には現れず、
  • かといって文章中に混ぜてもそれほど違和感なく(wiki ではこれが重要)
  • これ以上文法を追加したくないので、今後機能追加の際に利用できるように scheme 指定できる

といった点から、このようにしてみた。 2番目の点で合格点の出せる記法かどうかは微妙だが、まぁ許せる範囲かな。

{{ }} は、1行中に現れる必要有り。 「...」は scheme specific part だが、今のところ scheme によらず、InlineParser で解析されて部分木になるため、WRI とか ... とかも書ける。 InlineParser では正規表現を使っていて括弧の数は数えないので、今のところ {{ }} の中に {{ }} は書けないが、まぁ問題ないでしょう。

脚注記法

脚注は、

 {{fn: ...}}

となる。 普通。

実装

  • InlineParser の拡張
  • InlineBlockNode クラスの追加
  • 各 Visitor に visit_InlineBlockNode を追加。
  • HtmlFragmentVisitor に fn: の処理を追加。

いざ実装してみると、ちょこっとのコードで実現。 脚注番号の降り方とか、今後改良する点はあるけど、大枠は完成。

Wiki文法の標準化

今まで触れなかったが、やはり文法拡張する際は気になる存在。

各方面で出ている賛否どちらの意見もうなずける点が多く、自分の思いつく点もだいたいどこかで語られている感じ。

私が最初に Wiki の存在を知ったのは、やまだ君からだった。 当然「記法(文法)は?」というのがまず気になった点だったが、その時すでに「Wiki文法WikiEngine毎に異なる」という事だった。

WiKicker という新しい WikiEngine を作る際には、もちろん各 Wiki文法を調べたのだが、それはもう様々で。 「見出し」記号など単純に流派的なものと、ブロックプラグインなど設計思想に依存するものがあって、特に後者はどれかを統一して選択するのは難しいと感じた。

WiKicker では(もともと利用していた) YukiWiki2 に emacs-wiki の [[A][B]] を加え、その他の文法要素と表記は、

  • 見やすさ
  • メジャー度
  • WiKicker のベースの文法と衝突しない
  • 行指向を採用(行を越えた、開始・終了を利用者が明記しないで済むように)
  • 構文解析しやすい (実装の容易性は、高速化・独自ツール作成時に重要)

あたりをポイントに決めた。

将来標準(ができたとして)に準拠する?

多分しないな。 面倒だし。

[ 2月10日全て ]

2005年1月27日 (木)

国際化識別子IRIのRFC

IRIRFC3987になった。

WiKicker を含めた WikiEngine など(非ASCII)キーワードからURIを生成するタイプのソフトウェア開発において今後要チェック。

[ 1月27日全て ]

2005年4月10日 (日)

Windows 上での Apache 2.0.53 では PATH_INFOシフト JIS

WiKickerWindows 上での動作確認の続き。 WiKickerPPM パッケージを作成して ActivePerl 5.8.6.811 上にインストール。 依存するモジュールで、ActivePerl に入っていないものは以下の通り。

既に手元で PPM パッケージ化済みなので、これもインストールしておく。

後は RCS をパスの通っているディレクトリに入れてタイムゾーンを設定。

 TZ=JST-9

CGI プログラムとして実行。 お、表示できた。 書き込みはと。

エラー

予想していたけれど、sendmail に依存していたところ。 sendmail が見つからない場合はメールの送信をスキップするように修正。

これでうまく動くかなと思ったら、日本語名のページを作るとうまく表示できない問題を発見。

PATH_INFOシフト JIS で渡される

WiKicker では UTF-8 文字列をURIエスケープして WikiPageURLを生成している。 このURIにアクセスされると WiKicker は、PATH_INFO から WikiName を取り出す。 この文字列がシフト JIS になってしまっている。

Windowsファイル名に使用する charset にあわせて、Apache が変換してしまっているようだ。 調べてみると他の WikiEngine でも同様の問題にあっているという記事が見つかった。

将来の 2.0 系でパッチが取り込まれて修正されるとか、そうでないとか。

現状どうするかなぁ。 WiKicker 側でシフト JIS から UTF-8 に戻すというのもできない事はないけれど、あまりやりたくはないな。 いったんシフト JIS を介しているという時点で、シフト JIS に無い文字の扱いに関する問題をかかえてしまっているし(Apache が)。

対策案:

  • Apache 1.x 系を使う (まだ未確認だが、こちらだと勝手に変換されないらしい)
  • WiKickerPATH_INFO を使わないオプションをつける(URI Query Component は勝手に変換されない)
  • WiKicker 側でシフト JIS から UTF-8 に変換する
[ 4月10日全て ]

2006年5月24日 (水)

「s」文字をキー入力できない WikiEngine

昨日早速社内の WikiWiKicker 0.30 に上げておいたのだが、同僚からバグレポート。

「s」を入力できません。s を押すとプレビュー画面になっちゃいます。

あ。

Internet ExplorerJavaScript コードにバグあって、Ctrl+S でプレビュー画面に遷移するようにイベント処理していたつもりが、s キー一発でそう動いてしまっているらしい。

あわてて修正。

はやく WiKicker の修正リリースを出さねば。

[ 5月24日全て ]

About Me

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

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

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

月別インデックス
Process Time: 0.06509s / load averages: 0.33, 0.43, 0.70
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker