ここで作っているWikiEngineについて。
既存のWikiEngineについては「WikiEngine[?]」に。
ここで作っているWikiシステム(WikiEngineまたはWikiソフトウェアと呼ばれるもの)。
「フレームワーク/WikiEngine/」で始まるページを作成
目次 †
関連 †
- :/BuilderがView配置を読む
- :/セクションのURIを公開
- :/フローテキストとFederation
- :/ブラウザーの専用化と競合しそうなアイデア
- :/権限の作り方
- :/自動リンク化対象を広げる
- :CodeReading/MediaWiki/1.10/class
- :CodeReading/MediaWiki/1.10/extends
- :CodeReading/MediaWiki/1.10/function
- :CodeReading/MediaWiki/1.10/require
- :Dashboard/pmint
- :Done/TwitterをWikiのスレッドモードとして使うには
- :Done/ダッシュボードはスペースの外に
- :Done/データアクセスでやりたいこと
- :Done/ビューとコンテキストの統合
- :Done/ページ型/スレッド/データコンテキスト/記法定義まとめ
- :Done/モデレーション期間に差し戻せるか
- :Done/ユースケースはコントローラークラス
- :Done/他言語版をどこに置くか
- :Done/情報を扱えるシステム
- :Done/投票が分かりにくい
- :Done/細切れドキュメントと同名ページの仕様が衝突
- :Done/見解に名前を付けるべきか
- :Done/集めるだけでまとまるのか
- :Done/鮮度維持
- :RenameLog/2009
- :RenameLog/2010
- :RenameLog/2013
- :RenameLog/2014
- :ToDo/スペースあたりの利用者はひとりなので
- :config/plugin/chart/default
- :i/AutoAlias
- :i/CSRF
- :i/DanglingLinkを有効に使う
- :i/EditCopyFromPreviousAuthor
- :i/FIXME記法
- :i/Googleボタン
- :i/JSONでリクエスト
- :i/OpenSearch
- :i/PukiWikiプラグイン
- :i/SPAMと正当な新コンテンツの差
- :i/SVGをテキスト検索
- :i/Trackback
- :i/UI/ボタン
- :i/URIを解析して異なるページ要素に渡す仕組み
- :i/URLは検索クエリー
- :i/URLをどう見せるかはContent-Type次第
- :i/Web API
- :i/Web APIをそのままページ化
- :i/X-Runtime
- :i/humans.txt
- :i/sage進行
- :i/あっさり編集とがっつり編集
- :i/いろいろなスタイルテーマ
- :i/なんでもbotで
- :i/まとめる作業をしているときに新発想がある
- :i/よそのサービスと比較する動画
- :i/インポートツールは汎用
- :i/エクスポート時のフォーマット
- :i/カラムブラウザー
- :i/クエリーパラメーターはユースケースクラスのもの
- :i/クラスごとにページを
- :i/サポートはありません。
- :i/ソースコードからドキュメントを作るツールと連携
- :i/テンプレートストア
- :i/プラグイン内でプラグインを呼び出すために
- :i/プロトタイピング
- :i/プロトタイピング/Snippet/Nestable.cs
- :i/プロトタイピング/Snippet/NotNestable.cs
- :i/プロトタイピング/Snippet/NotNestables.cs
- :i/ページの1行目は特別
- :i/ページを書くときのUI
- :i/ページ主体の設計
- :i/ページ属性に情報を集約させる
- :i/マニュアル
- :i/メールヘッダーに利用者設定の印を
- :i/リンクに見えないリンク
- :i/ローカライズに関西弁や語尾に何かを付ける方言も
- :i/ローカルAPI
- :i/一括置き換え
- :i/三大要素
- :i/下位展開で権限が混在すると分かりにくい
- :i/主観タグを付けるなら人ではなくスペースごとに
- :i/代表は多数決で決めるのか
- :i/共有の受け側になるには
- :i/内容か名前のいずれかがあれば残す
- :i/利用者ページのテンプレート
- :i/利用者ページの下位に利用者設定を
- :i/利用者ページは自分だけのもののように見える
- :i/参考に/DocBase
- :i/参考に/Evernote
- :i/参考に/Gyazo
- :i/参考に/InWeave Collaboration
- :i/参考に/Mac OS X Server
- :i/参考に/Microsoft Excel
- :i/参考に/MindTouch F1
- :i/参考に/WebAnnotation
- :i/参考に/WebDAV
- :i/参考に/WebEXP.jp
- :i/参考に/WiLiKi
- :i/参考に/XWiki
- :i/参考に/eXo
- :i/参考に/todo.txt
- :i/参考に/Ōlelo
- :i/古くなるページ
- :i/姉妹スペース
- :i/引用されたらパーマリンク化
- :i/操作できる手順書
- :i/改造してもらえるシステム
- :i/数式
- :i/書籍を紹介するには
- :i/有用性チェックリスト
- :i/検索には高いレスポンス性能が必要
- :i/検索結果ではタグに合致したページを上位に
- :i/検索結果は全文表示
- :i/検索結果を集計すればタグ一覧にもなる
- :i/機能
- :i/機能のHTMLも設定可能に?
- :i/短縮URI
- :i/紹介
- :i/紹介はマンションやホテル・旅館の紹介のように。
- :i/要約することが理解すること
- :i/要素に使い方が2種類あっても実体は1つ
- :i/見解の共有に
- :i/誰でも参加できるおひとり様Wiki
- :i/迷路であることを楽しませるには
- :i/電書化
- Dropbox
- OAuth
- PukiWiki Plus!活用法
- SisterWiki
- Wikiデザイン原則
- ざっくり
- インポート
- ウィキエンジンX/ウォークスルー
- ウィキエンジンX/ウォークスルー/ではXは何を?
- ウィキエンジンX/ウォークスルー/現代のWikiEngine
- サブセットWiki
- サロン
- シンタックスシュガー
- スクレイピング
- スタイル/テーマ
- セレクター
- タイムマシンモード
- タグ
- ツール
- データアクセス
- ビュー
- フレームワーク/UserAgent
- フレームワーク/WikiEngine
- フレームワーク/WikiEngineでやること
- プレビューモード
- ヘルプ
- ページ
- ページ/名前
- ページ/型
- ページ/更新
- ページ/要素
- ページでやること
- 全てURIで
- 整形ルール
- 永続化キー
- 用語
- 自分にとって
- 草稿
- 要約
- 記法
- 通知
検索:フレームワーク 検索:WikiEngine
- -
フレームワーク/WikiEngine †
クラス構造 †
Actor †
リクエスト送信。PageNameとかUsecaseNameとかStepNameとかViewNameとか含む。
→fw/Web→fw/Wiki→Usecase
X †
フレームワーク/WikiEngineの実装。
X/Usecase[?] †
プラグイン。
コントロールクラス。
WikiEngineから呼ばれる。リクエスト毎に別クラス。
MediaWikiの'Action'、PukiWikiの'cmd'にあたるものと一対一対応。
利用者から与えられたデータをページ化して保存するもの。
利用者からの要求に応じてページを切ったり貼ったりしてから見せる。
→User
X/User[?] †
利用者。
ページを扱うクラス。Userが扱うページを特に「利用者ページ」と呼んでおく。権限情報が書かれているので特殊。
データはページ化されているので、このクラスが無くても読み/書きできる。書くのは利用者。
存在意義が薄い。ただ利用者ページにデータアクセスするラッパーでしかない。
- 鍵←UserID
→Page
X/Page[?] †
Wikiのデータを保存するもの。
利用者が手作業で書く。どういう記法を使うかでデータアクセス時の反応が違う。
属性を持つ。
URIでプラグインを呼んだときは仮のページ。その場合でも流れは同じ。
思い付き †
→ Pages/Name
→ PageElement(記法に書かれると呼ばれる)
- 永続化
- FlyweightFactoryでインスタンス生成
- コンストラクターは非公開
X/Pages/Name[?] †
ページ名。ValueObjectにするのが自然。
実装 †
Page.rename(new Name(...)) ページ名を変更するときはNameインスタンスを作り直す。 ページ名変更時にやることがあるならrename()でできる。
URLクエリーに置くデータ †
URLに付けるデータはネット上で共通のもののみ。
個人領域のデータ、状況に左右されるデータは置かない。
URLはどれもパーマリンクにすること。
X/Pages/Property[?] †
ページ/属性。
属性/継承を行なう。
X/Pages/ShadowProperty[?] †
ページ/裏。
X/永続化[?] †
ページ以外も永続化。
データストアにはファイルシステム(flat files)使用。
- Page←PageName
- PageProperty←PageName
- Session←SessionID
X/Element[?] †
ページの構成要素。
記法から生成したオブジェクト。各種記法や一続きのプレーンテキスト部分などが1つのオブジェクトになる。
ElementがElementの集約にもなる。ネスト構造。
というわけで、
- 検索/クエリー
→PageElements
X/Elements[?]/… †
PageElementのサブクラス。プラグインはNotations系/Semantics系/DynamicNotations系/Plains系。
X/Elements/Notations[?]系 †
記法を統一する抽象クラス。
X/Elements/DynamicNotations[?]系 †
例えば自動リンク。
記法はあるが決まっていないもの。
X/Elements/Semantics[?]系 †
検索でスコアを上げる記法。
数詞やカラーコードなど。
X/Elements/Plains[?]系 †
ただのテキスト。
X/Plugins/... †
いろいろなプラグイン型。
…はURLクエリーに含める。
「次」や「前」という表現は使わない †
新/旧、大/小などにする。
ソート順が分かる表現に。
その他のクラス †
やること †
データ変換 †
テキスト→オブジェクト→HTML
オブジェクト→永続オブジェクト
もしWikiFormatやプラグインをまったく使えないWikiEngineを作ったら…
テキストを記録するだけ。
ファイル名とテキストを与えると記録、ファイル名のみならテキストを出力。
これにプラグイン独自のデータと処理を加えて、プラグインごとに違うHTML出力ができるようにする。
中心はプラグインを作るためのAPI。
アカウント †
利用者
派閥 †
派閥[?]
負荷軽減 †
→負荷[?]
編集後の更新処理を分割。
モデリング †
- ユースケースをモデルに入れる。
- ログインページの次はHTTP_REFERERにあるページ。
- ファイルはFlyweightであるべき。
- オブジェクトモデル上ではinclude.incのような機能を考慮しない。
include.incのような機能はデータコピーで実現。 - アクセスログはページの属性。
- 利用者はページにある情報を元に作られる。
- ページが他のページインスタンス宛に編集クエリーを作る。
- 検索はプラグイン化する。
名称 †
クラス間のつながり †
検索時、オブジェクト間のつながり †
ページがHTML出力する時、オブジェクト間のつながり †
ページとプラグイン †
モデルはページ中心 †
- ページ中心
- MVCのVとCは決まりきっている
Mはページとページに関連するクラス。プラグインにはあるかも知れないし無いかも知れない。
Cはフレームワークと各プラグインにある。
フレームワークが持つVのクラスは1つだけ。それ以外にはプラグインが独自に持つかも知れない。 - 要点はプラグインが持てる可能性
オブジェクトの生成 †
- クラス名とインスタンスの対応はFlyweightFactoryが決める。
コード †
プロトタイピング[?]の実装。
擬似言語 †
[フレームワーク/Webアプリケーションから呼ばれて…]
- セッションデータを受け取る。
- クエリーを処理する。
- HTMLを返す。
Perl †
code*:362
あとはX::Pageの永続化を。
プロトタイプではFlyweightFactoryを実装しない。
X::Pageのインスタンスは1つか2つでいい。