実装したものと実装のための情報。
このWikiを洗練させるための試作。
http://x.pmint.name/

 

プロトタイピング/05 Edit

やること Edit


注意点

概要 Edit

abstract.svg

docs.google.com

fw/Web Edit

MVC.svg

docs.google.com

クラス構成 Edit

p05.svg

各クラスのプラグインは書かない。
あとはVisitorをElement周辺に付け足すだけでクラスが揃う。

資料 Edit

フレームワーク Edit

:t/Webフレームワーク部分と、その上の:t/Wikiフレームワーク部分。
ページ/:t/要素が動く環境を作る。
ユーザーからのリクエストを対応する要素に伝えて、その結果をレスポンスに変える。

権限 Edit

権限設定示。

:t/権限は「錠」と「鍵」の2種類。
:t/属性に書く。

:t/汎用記法:t/埋め込み機能を呼び出して権限情報を示。
ページとその属性名を全て:t/URIで指定・参照・ページ上にレンダリング。

下位展開 Edit

:t/下位展開は複数のページをまとめて見せる機能

対象になるページ:t/順不同:t/名前での下位に位置するページ

ページ間の:t/リンク下位展開に対応する必要がある。
まとめられたページ:t/見出しとして示されるので、リンク先もそこへつなげなければならない。

ページごとに:t/権限判定と:t/代表の適用が必要。

プレビューモード Edit

:t/プレビューモードは:t/名前の補完ルールに細工をすることで実現。
タイムマシンモードも同じ発想。

まだ投稿していないページ:t/セッションに一時保存。
セッションの実体は特殊な:t/ページ。一時的ではあるが:t/永続化することになる。

プレビュー中も:t/下位展開はある。

紹介 Edit

相変わらずページの保存が出来ないバージョン
サンプルデータとして http://wiki.pmint.name/ のページインポートしてみた。

実装したこと Edit

そのほか Edit

  • multi-gram
    自動リンク処理で行なっていた”bi-gramを使ったページ名探索”。連続する2文字をインデックス化していたが、数字列では1つのキーに集まり過ぎ、漢字を使う単語では分散し過ぎだったので、文字種により0文字から3文字を使うよう変更。

実装方法 Edit

  • プレビューWiki
    [Pagename、Wikiを明示指定]
    Previewモード
    指定されたWikiにページが無ければ、デフォルトWikiのページを使う。
    デフォルトWikiにも無ければ、指定されたWikiでページが存在しない処理。
  • タイムマシンWiki
    [Pagename、の補完方法で](プレビューとは実装方法が違う)
    Back way to ... モード
    日時指定→の補完時に番号に置き換え
    日時指定用のUI: の中から選択、あらかじめページ名見解が指定されていないと
    ページ(Entry)が無ければ、普通にページが存在しないときの処理。

  • Notation→ElementでPukiWikiのようにRegex1回にしないのはネストを可能にするため。Notationのネストを内側から探すのも同じNotationをネスト可能にするため。

「C#に依存するコードが増えてきましたが」

そのうちやること Edit

自動リンク Edit

アカウント Edit

フレームワーク間の関係 Edit

HTMLを要求するのはフレームワーク/Webアプリケーションのほう。
WebアプリケーションはWikiEngineを3回呼ぶ。

  1. エントリーポイント
  2. フレームワーク/Webアプリケーション
    Xオブジェクトを生成。
  3. フレームワーク/WikiEngine
    Xオブジェクトを作る(だけ)。
  4. フレームワーク/Webアプリケーション
    Xオブジェクトにリクエストを伝える(そのまま渡すのではなく、変数の形で)
  5. フレームワーク/WikiEngine
    自身の状態を変化させる。状態は永続化する。
  6. フレームワーク/Webアプリケーション
    XにHTMLを要求。
  7. フレームワーク/WikiEngine
    HTMLを生成。
  8. フレームワーク/Webアプリケーション
    HTMLにヘッダーを付けてWebページ化。

排他制御 Edit

永続化クラスを排他制御不要な方式に。

モデル系クラスでは自分で自身を書き換える。他のクラスを扱うのはPageFactoryくらい。

実装からTips作成 Edit

実装からTips作成、よりよいコードのヒント集め。
実装以外にも、アイデア、方式、UIなどでも。

仕様の分け方 Edit

フレームワークは空気。ページが本体でユーザーがそれを利用できるようにするのがフレームワークの役目。

UIの内訳
1. 読みUI
ページ/履歴含む。
2. 書きUI
エディターなども。
3. 探しUI
検索の他に関連情報やおすすめの類も。
4. 組み立てUI
管理とWiki構築。テンプレートデータコンテキストなどページ/要素を使ったプログラミング部分。