nDiki : WikiPage

WikiPage

WikiEngine によって提供される誰でも編集できるWebページのこと。 WikiForumの各ページ。

一般にページには、

  • 「ページタイトル」...検索ページへのリンク
  • ページの内容
  • 「編集」リンク
  • 前回の編集との差分表示ページへのリンク

等が含まれている。

スポンサード リンク

2006年6月11日 (日)

WiKicker 0.34 リリース - 添付機能のコードを追加

2006年6月8日以来、3日ぶりのリリース。

zakwa 氏からの要望により、WikiPage のコピー直後に編集画面に移れる edit now オプションを追加。

また大きな改良として「添付機能」を追加した。 まだ最初のコードなのでエラー処理等が甘いが、それなりに動いているのでコミット。 まだ権限設定がないので、公開サーバでは使用しない方が良い。

添付ファイルのダウンロードを WiKicker 本体の CGI プログラムから行わせるか、独立の CGI プログラムにするか迷ったが、結局別物にした。

  • WiKickerURI 体系の中に、末尾にダウンロードファイル名を持ってこれる形式を作成できなかった。

というのが大きな理由。

設定方法

WiKicker のページにまだ設定方法を書いていないので、こちらへ。

attachment CGI プログラムを設置

例えば attachment というファイル名で以下のような Perl CGI プログラムを作り、Web サーバから実行できるように設定を行う。

 #!/usr/bin/perl
 use strict;
 use warniings;
 use WiKicker::WikiCGI::AttachmentController;
 WiKicker::WikiCGI::AttachmentController
   ->new(properties_file => '対応する wiki の設定ファイル名')->run;
Wiki のプロパティに設定を追加

次に Wiki の設定ファイルに以下を追加。

 param.NormalPage.attachment: enable
 param.NormalPage.attachment.uri: attachment

param.NormalPage.attachment.uri には上で作った CGI プログラムURI (相対/絶対)を指定する。

これで各ページに attachment (添付)というリンクが表示され、添付機能が使えるようになる。

WikiPage での参照の仕方
 # リンクを作成
 [[attachment:ファイル名]]
 [[attachment:ページ名/ファイル名]] <- 別のページの添付ファイル

 # 画像をインライン表示
 [[image:attachment:ファイル名]]
 [[image:attachment:ページ名/ファイル名]]
スポンサード リンク
[ 6月11日全て ]

2006年6月20日 (火)

WiKicker 0.35 リリース - 添付機能の修正など

添付機能を有効にすると、添付ファイルが無いページに対応するディレクトリが無条件に作られてしまう問題を修正。

それから日本語ファイル名のファイルを WikiPage に添付した際、Internet Explorer でそのファイルをダウンロードして保存しようとすると URI エスケープされた文字列がデフォルトの保存ファイル名になってしまいよろしくない。 このため、Content-Disposition ヘッダをつけてレスポンスを返すためのダウンロード用のリンクも追加。

Cotent-Disposition ヘッダでファイル名を指定する際、

ファイル名シフト JIS でエンコードしてしまうようにした。

ファイル名シフト JIS で表現できない文字があるかもしれないし、Accept-Language に ja があったからといって Windowsロケール日本語になっているという保証もないので、かなりいい加減なコードである。

なにか良い方法があったら修正したい。

[ 6月20日全て ]

2006年7月18日 (火)

WiKicker 0.36 リリース: 通常表示に戻るナビゲーションを追加

添付機能のバグ修正や、attachment: で添付ファイルにリンクする際に、添付ファイルが存在しない場合はリンクにならないようにする改良を行った。

それから今まで、各 WikiPage に対する履歴ページなどの補助ページから、通常表示ページへ戻るページナビゲーションリンク、'view' (あるいは 'latest') を追加した。

PukiWiki だと「リロード」にあたるリンク。 他の Wiki も含めてちょっとチェックしてみたけれど、このリンクのテキストがバラバラで何にするか迷うところだ。

今回のリリースでは view にしておいたけれど、将来は変えるかもしれない。

[ 7月18日全て ]

2007年2月2日 (金)

DiKickergrep 検索機能を追加

DiKicker には自動リンクベースの記事串刺し表示機能があって、同じキーワードを含む記事をまとめて読むことができる。 結構便利なのだが、この機能ではキーワードの設定は Blog の書き手に委ねられている。

社内で DiKicker を一部使ってもらっているのだけれども、それら他人の Blog を読んでいると「あのキーワードで串刺し表示したいな」と思うことがしばしばあることに気がついた。 やはり任意の文字列で串刺し表示する機能が欲しい。

書き手にとっても「自動リンクキーワードにするような文字列ではないけれども、串刺しで読みたい/探したい/見せたい」と思うことが少なからずある。

ということで、検索ベースの串刺し表示機能を実装してみた。

grep ベース

実現には全文検索を行う必要があるが「設置・運用の手間」「ディスク容量」という点から、事前にインデックスを生成するような方法は今回は避けようと思う (www.naney.org 上で自分が使う上での制約からくる理由が一番大きかったりする)。

ということで今回は grep 型で実装することにした。 もともと WiKicker の方の検索機能も現在のところ grep 型である。 WiKicker では自前で WikiPage をスキャンしているが、DiKicker では grep コマンドに任せることにした。 こういうのは専用の grep を使った方が速いはず。呼び出しは

 grep -Flre $escaped_string dir...

というオプション指定。Web ページとしてのページングなどは、自動リンクによる串刺し表示機能のものを流用。

で試したところ www.naney.org サーバでは、load averages が 1 以下の時でだいたい50秒前後。対象ファイル数は 2800弱。予想より時間がかかる。

ただし1回実行した後、ファイルがファイルシステム/OSメモリ上にのっている状態では 0.1秒程度で完了する。

検索結果ページの permalink が検索エンジンにそれなりに捕捉されて、定期的にアクセスがあるようになれば、ファイルがメモリにのっている割合が増えるであろうから平均して実用に耐えられる速度が出るかもしれない。

今後は様子をみながら検索結果のキャッシュ等を処理を整備していく予定。

[ 2月2日全て ]

2007年3月1日 (木)

WiKickerソフトウェアかんばん

情報カードベースでソフトウェアかんばん(ストーリーカード + タスクカード)を作っている開発プロジェクトがあるのだが作ったっきりあまり活用されていないので、今回は試験的に WiKicker による Wiki 上でかんばんを作ることにした。

まだ荒削りだけれども、まずはとにかく以下のルールで始めてみる。

ルール

カードの作り方

基本的には 1カード毎に WikiPage を作るようにする。 ページ名はストーリーカードを表す SC と 状態 (TODO / DOING / DONE) を含む名前にする。

  • SC/TODO/<ストーリー名>
  • SC/DOING/<ストーリー名>
  • SC/DONE/<ストーリー名>

タスク名も同様に作る。

  • TC/TODO/<ストーリー名>
  • TC/DOING/<ストーリー名>
  • TC/DONE/<ストーリー名>

カードの内容は XP で扱っている内容で。 新規作成が楽なようにテンプレートページを作っておき、これをコピーして作れるようにしておく。

状態変更

TODO -> DOING -> DONE という状態変化にあわせて、WikiPage 名を変更してページを移動させる。

 例:
 TC/TODO/名前をつけて保存メニューを追加
   |
   V
 TC/DOING/名前をつけて保存メニューを追加
   |
   V
 TC/DONE/名前をつけて保存メニューを追加
一覧ページの作成

SC/TODO、SC/DOING、SC/DONE、TC/TODO、TC/DOING、TC/DONE ページを作りそれぞれに、子階層の一覧を表示させる (WiKicker の [[index:child]] を使用)。

参照

タスクカードからは「SC/<ストーリー名>」という名前で、ストーリーカードへリンクさせる。

WiKicker では「SC/<ストーリー名>」というページない場合、「SC/*/<ストーリー名>」というページを探してリンクしてくれる。この機能のおかげで、状態にあわせてページ名を変更してもリンクはそのままで追従してくれる。

担当者

担当者が割り当てられて実行中のタスクカードには [[DOING:担当者名]] という文字列を記述しておく。

「DOING:担当者名」で検索することで、各担当者が何を実行中なのかリストアップすることができる。また DOING: を「DOING:担当者名」を検索する Wiki 自身への InterWiki として定義しておくことで、この記述自体を検索結果へのリンクとすることができる。

WiKicker / DiKickerAutomaticLink 長を可変にした

「が」や「は」など頻出する文字の WikiPage を作ってしまった場合、それらに対して自動リンクが働いてしまうと大変なことになるので、WiKicker では2文字以上のみ対象とするようにしていた。

しかし nDiki を書いていて、1文字のキーワードも自動リンクしたいという風に思えてきていた。 誰でも書ける Wiki の場合には危険で制約が必要だけれど、全てのキーワードが著者のコントロール化にある DiKicker では1文字のキーワードに対して自動リンクが働いても問題ないだろう。

ということで自動リンクが働く最低文字列長をプロパティで設定できるようにした。 2004年ぐらいからほとんど手をつけていなかった、AutomaticLink 処理モジュールを久しぶりにメンテナンス。 もともと2文字以上を前提でコーディングしてあったので、trie 部分などが1文字できちんと動くか確認した上で、文字列長チェックを可変に修正。 WiKickerDiKicker 両方で設定で変えられるようにした。

またあわせて、英単語の部分文字列に対して自動リンクしないようにする処理も改善。 今までは `downloaded' に対して `loaded' はマッチしないようにしていたものの、'download' はマッチしてしまっていた。 このあたりを改善。

[ 3月1日全て ]

2007年4月3日 (火)

WiKickerJSON でのページ出力機能を追加

最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。

今までは WikiPage について

  • HTML 形式による出力
  • Wiki 文法で書かれている生テキスト形式による出力

という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。

サーバ側で WikiPage の構文解析まではやる

クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。

JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。

CPAN にある JSON モジュールを使用

サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。

依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。

JSON 関連では JSONJSON::Syck、JSON::PC などがあるが今回はインストールのしやすさを考えて pure Perl モジュールとして実装されている JSON を採用することにした。

Visitor クラスで解析木を無名ハッシュ/無名配列のツリーに変換して、JSON モジュールに流しこめば OK。

 use JSON;
 my $json = JSON->new(pretty => 1);
 my $js = $json->objToJson($tree);

WiKickerフレームワークにはフォーマット別に出力を切り換える機構があるので、これに JSON を追加して application/json で送るようにして完成。

ちなみに残念ながら JSON 1.07 は Perl 5.005_03 では make test が fail するので、NaneyOrgWiki では使えない。

[ 4月3日全て ]

2008年1月18日 (金)

今日のさえずり - 0x800A03EC で苦しんでいる

[ 1月18日全て ]

2011年3月29日 (火)

今日のさえずり: 計算機管理者に必要なのは「高い倫理観」と「怠惰」と「ゴッドフィンガー」

2011年03月29日

  • 09:32 計算機管理者に必要なのは「高い倫理観」と「怠惰」と「ゴッドフィンガー」。
  • 10:28 定例として朝ヨドバシカメラに寄ったら「(単1形電池は開店前に)並んで買っていかれる方もいますから」と店員が別のお客に説明してた。
  • 12:16 夜やってないので昼に。 (@ 無印良品 アキバ・トリム店) http://4sq.com/fo68HS
  • 13:01 Dr.ion のマルチインバッグ/ハンドケース 145DRBK-1200 買ってきた。 http://amzn.to/hVi6Jd
  • 14:37 キオークマンって睡眠学習機器じゃなかったっけ(記憶にあるのはキオークマンエース)?
  • 14:39 現行品はITキオークマンか。
  • 14:40 自分の中では「居眠りしている人」=「睡眠学習中」→「キオークマンエース」が連想記憶されてる。
  • 14:44 あ、キオークマンと睡眠学習器は全然別物なんだ。ごっちゃになってた。
  • 17:49 社内 Wiki、今 1400 WikiPage。「超増えた!」とは言わないけれど1人でコツコツ書き始めた頃から考えると感慨深い。
  • 18:15 缶コーヒー 100円(さっき)。
  • 18:39 さくらフェア東芝 Vol.2 開催中止か。残念。
  • 22:25 EX-777XP 届いた。 http://flic.kr/p/9ugt4n
  • 22:43 EX-777XP は eneloop (正式)対応じゃないと思っていたんだけど(Web サイトにも eneloop マークがついていない)、パッケージ裏面に eneloop マークがついてた。
  • 22:52 eneloop 対応は後継機種の EX-700RC からだと今日 Web で見かけてガッカリしてたんだけれど。EX-777XP にも過放電防止機能ついたの? それとも過放電する前に自分で止める分には OK よってことなの?
  • 22:55 EX-777XP 単3形 eneloop 3本で点灯させてみた感じは「驚くほど明るいわけではないけれど、停電の夜を過ごすには十分な明るさ」
  • 22:58 今まで懐中電灯/フラッシュライトしか持ってなかったんだけれど、こちらは部屋全体が明るくなるのでいいね。
  • 23:35 Web で調べた範囲では EX-777XP + 単3形 eneloop 3本だと2~3時間といったところみたい。
  • 25:11 @tatsuo_ishii 楽天市場でです。ショップによってはそれなりに在庫があるのでしょうか、夜に売り切れのところが翌午前中には在庫有りになったりしてます。
[ 3月29日全て ]

2012年5月8日 (火)

今日のさえずり: 泊まりじゃない合宿と聞いて「それ合(ガッ!)じゃん」と思ったんだけれど。

2012年05月07日

  • 09:46 気分一新。 (@ 株式会社ミクシィ (mixi, Inc.)) http://t.co/ycoC031I
  • 10:38 「jig.jp、『モバツイ』を運営するマインドスコープ株式会社の全株式を取得」 びっくり。
  • 12:21 WikiForum 内で WikiPage 名ではなくて URL でリンクを書く行為、不可解。
  • 13:22 チキンタツタ。 (@ マクドナルド 渋谷東映プラザ店) http://t.co/ANe1q5Kh
  • 16:05 腰リール通じなかった。
  • 19:53 諸般の事情によりオフィスにてティシューで折り鶴折ってる。
  • 20:07 ICPA に補足されたくさい……。
  • 20:50 退勤。

2012年05月08日

[ 5月8日全て ]

2013年4月24日 (水)

今日のさえずり: char は「チャー」派

2013年04月24日

[ 4月24日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

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

follow us in feedly

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

月別インデックス
Process Time: 0.072689s / load averages: 0.73, 0.65, 0.65
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker