- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- ページ/要素 へ行く。
- 1 (2013-03-12 (火) 03:26:17)
- 2 (2013-03-12 (火) 03:26:42)
- 3 (2013-03-12 (火) 03:32:46)
- 4 (2013-03-12 (火) 04:05:26)
- 5 (2013-03-12 (火) 08:53:39)
- 6 (2013-03-20 (水) 22:36:28)
- 7 (2013-04-12 (金) 05:37:10)
- 8 (2013-04-12 (金) 05:52:51)
- 9 (2013-04-12 (金) 06:06:39)
- 10 (2013-04-12 (金) 06:15:29)
- 11 (2013-04-12 (金) 14:16:04)
- 12 (2013-04-18 (木) 20:28:52)
- 13 (2013-05-06 (月) 16:28:29)
- 14 (2013-05-06 (月) 16:58:20)
- 15 (2013-05-08 (水) 02:06:37)
- 16 (2013-05-08 (水) 23:04:00)
- 17 (2014-02-07 (金) 02:41:08)
- 18 (2014-02-24 (月) 06:34:23)
- 19 (2014-02-26 (水) 01:24:12)
- 20 (2014-02-26 (水) 01:32:18)
- 21 (2014-03-01 (土) 05:45:39)
- 22 (2014-03-01 (土) 05:58:46)
- 23 (2014-03-05 (水) 05:13:41)
- 24 (2014-03-05 (水) 05:34:02)
- 25 (2014-03-08 (土) 04:00:30)
- 26 (2014-03-08 (土) 05:45:54)
- 27 (2014-03-08 (土) 07:42:54)
- 28 (2014-03-08 (土) 22:53:56)
- 29 (2014-03-08 (土) 23:06:26)
- 30 (2014-03-12 (水) 07:24:02)
- 31 (2014-03-20 (木) 05:43:07)
- 32 (2014-03-20 (木) 05:43:32)
- 33 (2014-03-20 (木) 06:21:25)
- 34 (2014-03-20 (木) 21:07:44)
- 35 (2014-03-25 (火) 00:35:44)
- 36 (2014-03-26 (水) 04:46:21)
- 37 (2014-03-26 (水) 04:57:15)
- 38 (2015-10-18 (日) 14:15:27)
- 39 (2015-10-23 (金) 11:55:05)
- 40 (2015-10-23 (金) 12:11:24)
- 41 (2015-10-23 (金) 12:24:17)
- 42 (2015-10-23 (金) 12:51:56)
- 43 (2015-10-23 (金) 13:03:07)
- 44 (2015-10-25 (日) 03:16:47)
- 45 (2015-10-25 (日) 16:45:12)
- 46 (2015-10-25 (日) 16:47:06)
- 47 (2015-10-25 (日) 16:59:37)
- 48 (2015-10-25 (日) 17:12:03)
- 49 (2015-10-25 (日) 17:20:12)
- 50 (2015-10-25 (日) 17:31:50)
- 51 (2015-10-25 (日) 17:48:55)
- 52 (2015-10-25 (日) 19:35:41)
- 53 (2015-10-29 (木) 22:04:32)
- 54 (2015-10-30 (金) 03:01:51)
- 55 (2015-10-30 (金) 10:03:41)
- 56 (2015-10-31 (土) 00:10:49)
- 57 (2015-11-28 (土) 04:05:05)
- 58 (2015-12-24 (木) 04:07:58)
- 59 (2016-01-07 (木) 22:44:06)
- 60 (2017-01-20 (金) 05:43:29)
- 61 (2018-01-08 (月) 21:44:51)
- 62 (2019-12-14 (土) 14:55:27)
機能の実装。ページ/要素を使うためにXというフレームワークがある。
利用者によってページに記述され、ページごと呼び出される。
ページ/要素とは † 
ページに記述できるプラグイン。記述方法は→記法。
汎用記法か、管理者が定義した記法で記述すると機能するようになる。
記法処理中にどの記法も汎用記法に置き換えられる。
→要素はユーザーから渡されたWikiTextを返せなければならない。要素を生成する前に何かに置き換えることはできない。
ページ/要素/API[?] † 
要素(機能の実装)がAPIを提供してもいい。制限しないだけ。サポートもしない。自由。
ページ/要素ができること/しなくてもいいこと † 
:i/リクエスト内のパラメーターと汎用記法のパラメーターは同じ † 
呼び出され方を区別しなくていい。
データコンテキストの区別はデータコンテキスト名別のTo…メソッドでできるし。
:i/クエリーにどう反応するか † 
機能の展開タイミング † 
ページ特有の解析処理(利用者登録など)の前か後かは機能の実装次第で決まるように。
ページ特有の処理の前に展開すれば展開後のテキストも解析されることになる。
includeのように他のページを取り込む機能を使えば、任意のページを利用者登録ページに取り込んで一括登録できる。その代わり取り込まれるページも管理者権限でしか編集できないようにしなければならない。など利点と欠点がある。
機能の出力はそれ以上処理しないので、自動リンクや埋め込みの展開などは機能側で行なう。
記法(機能呼び出し)のパラメーター部分に記法があっても処理するのは機能。それ以外はページが処理。
これでページ/編集/HTML書き込み[?]の埋め込みと展開を邪魔しないようにできる。
機能の出力はWikiTextではなくHTML。そのままレスポンスの一部になる。
機能の処理のうち共通部分に埋め込みの展開を置いてもいい。
メタシンボルの埋め込みで動的なパラメーター指定ができるが、これを全機能の仕様にしたいので。
入力:WikiText →
→ 出力:HTML
ページ/要素/UI † 
要素を呼び出すためのUIは記法。エディターと組み合わせて使う一大機能。
†記法
†汎用記法
:i/簡単なAPI † 
簡単不自由なAPIと、面倒自由なAPIの両方を用意。
引数の違い。
例えばページ/要素のコンストラクターを2種類用意。どちらかを定義すれば要素として使えるように。
ページ/要素/API/テスト用コード[?] † 
インストール時に動くか確認。
管理者が改造したときにも使える。運用しやすくなる。
UIは…ページ/要素クラス別のページ(複数のバージョンがある場合は下位ページでも作って)にあるテスト実行ボタンで。
テストが複数定義されていればその数だけボタンを表示するように。リフレクション→UIに反映。
テスト環境をどう作るのか。テスト用コードだけでできる??
:i/エラーメッセージにクラス名 † 
エラーメッセージの書き方。
競合も矛盾もない。
エラーメッセージはエラー対処のためのUIでもある。
検索がサイト間のハブサイト、エラーメッセージはその検索へユーザーを誘導する。
名前付きパラメーター † 
無名引数を使うならリファレンスやコード補完があるときだけ。
汎用記法では名前付きパラメーターにする。
要素にUsage † 
要素に書かれているテキストをヘルプに出す。
マウスポイント時のバルーンやtipsにも出せるようなシンプルな体裁で。
というか、組み込み済みの記法で。
→ :i/UIを使うページ要素#g6a26065:『usage』
ほか † 
時刻だけ書いたら同じページに書かれている日付を加味 † 
検索時の同一性評価で、足りない情報を同じページから取得。
時刻だけの表現には同じページにある日付を。同じページに日付だけの表現がないなら日付時刻から日付を流用。
足りないフィールドは同じ(近い)ページから取得。
Wikiなので情報は非定型。補える場合は少ないし重複がある。
→足りない情報を補うための機能ではなく、近い情報を加味する基本的な機能で。
属性の継承とは違う。
機能が独自に使うデータなので、フレームワークは関わらない。
広い期間で有効なデータ領域を用意するだけ。
→数種類。ページ、プロセス、セッション、アプリケーション。機能向け機能。
各機能はそこにパラメーター履歴を残して置けばいい。
フレームワークでは機能の呼び出し順を一定にする。上から順に。
投稿時展開するものは要らない † 
投稿時展開するくらいなら編集時にボタンなどで展開後のテキストを挿入した方がいい。
MediaWikiの~~~~のようなもの。
そういったボタンを使えないクライアントにはただの文字列を提供。編集ページを開いた時点で展開しておく。それをコピペ。量が多くなるのであまり一度に用意できない。
性質 † 
インスタンス † 
というか、設定を複数用意可能に。
同じ機能でも設定ごとに異なる記法を当てて、使い分けできるように。
機能側で設定ページをパラメーター化すればいい。
記法の記述で、Notationと設定を抱き合わせにすれば実現可能。
フレームワークでやる必要はない。
複数行パラメーターの書き方 † 
複数行を要素に渡すには、置き換えと埋め込みページが良さそう。
- 置き換え
plugin(l1
WikiCreole式。
l2,p2)
改行文字になる表現を使って。機能には改行文字が渡る。 - 埋め込み
plugin({{ページ}})
他のページを指すリファレンスを渡す。ページは埋め込みの仕組みを使って展開されてからパラメーターとして機能へ。
3態 † 
WikiText→オブジェクト→HTML
…を機能ごとに行う。出力はそのままレスポンスに含める。
記法(設定に依存しない基本的な記法)をHTMLに変換するためのライブラリを用意。
これで他の記法と変換結果を統一。
HTMLのメモ化は機能ごとに。
オブジェクトの保存はバージョニングのこと。
ページの属性次第で保存するかしないかが決まる。
保存しないのは特殊なページ。
ページがコンポジション † 
リンクは1つのオブジェクトにしたほうが都合が良い。…が、機能が低下するので却下。永続化と復帰が複雑になる。
→リンクはリンク元のオブジェクト。オブジェクト間の関連ではないのでリンク先には影響しない。逆リンクは逆リンクとして別途用意。
機能は部品 † 
機能は部品であるべき。
組み合わせる余地が要る。
その他の要素 † 
プラグインは記法 † 
プラグインというクラスは作らない。
記法と同じ扱い。X/PageElement[?]
記法はネスト可能。
独自データをページに保存可能。ページに残すので履歴付き。
プラグインのアンインストール方法は?しやすく
しやすくする以上のことはできない。
PageElementをオブジェクトとして永続化する場合、Pageと一緒にということになる。
動的データはPageが持つWikiTextからすべて作成可能。
PageインスタンスはWikiTextから生成したPageElement構造体。
利用者による編集と同じで、ページを更新するときは履歴を作るのが基本。
でも、PageElementの設定(PageElementのコードで定義)で履歴を作らないことが指示されていれば作らない。
展開は閲覧時 † 
閲覧時展開。
置き換えない。
HTMLに置き換えてもHTMLエスケープしてしまうので。
ずっと動的に展開。
メタシンボルの類も同じ。他の機能と同様に。
Chain of Responsibility † 
ユーザーが直接呼び出すタイプの機能はChain of Responsibility。
クエリーは機能名とページ名を指定するのでなく、やって欲しいことを。
同じクエリーでも導入されている機能次第で別の処理が行われるかも知れないし、いくつの機能が反応するかも変わってくる。管理次第。
これはWikiが正しく構築されていれば正しく動くし、間違っていれば結果(ページ出力)に表れるので分かりやすい。対応付けを厳格にすると設定が難しくなるし、後から付け足した設定で以前の設定が無効になることもあるので、それを回避するのが狙い。
フレームワークもChain of Responsibility。
ページ─機能はコンポジションに † 
Notationオブジェクトは書くたびにインスタンス生成。
リファレンスだけを増やしたいときはPukiWikiでの「include機能」のような特別な方法で。
クラス継承 † 
組み込み済みクラスを継承して機能化。上位クラスと同じ扱いをされるように。下位クラスを知っているクラスからはそのクラスとして扱われるように。
使い方2種類 † 
- ページに記述→機能はHTML生成。
- 別機能のパラメーターとして記述→別機能からパラメーターを渡すよう要求される→純粋なデータを生成。
ls→ページ名リストを生成。パラメーターとしてはページセットを生成。
書かれた場所…コンテキスト、文脈。文脈次第で型が変わる。意味は変わらない。使いにくくなるので。
使い方が2種類あっても実体は同じ † 
どちらの使われ方でも記法を返す。それが何に埋め込まれるかはフレームワークが決める。
実装はインターフェイス。
イベントハンドラーのようなもの。
ユーザーからのリクエストで呼ばれるだけの機能でも、ページに書かれたときに自身を呼ぶリンクやボタンを生成するようにすれば使いやすくなる。
リクエストからの直接呼び出しでもネスト可能に † 
PukiWikiのコマンド型機能のように、ページに書かずに使う場合でもネスト可能に。一時的なページを生成してもいい。
またはデリゲート可能に。最後に呼ぶもの以外はデータコンテキスト。
MVC † 
- M
- いくつでも。(複数クラス、複数ファイル)
名前などすべて利用者の任意。 - V
- いくつでも。
Mと同じように任意。 - C
- 機能のエントリーポイント。
同機能のMとVを呼び出す。
名前に規則あり。フレームワークから呼び出しやすくするため。
C(前)とC(後)がある。
フレームワーク | → | 1.C(前) | → | 2.M、Vなど | ||
3.子のC(前) | → | 4.子のM、子のVなど | ||||
5.子のC(後) | → | 6.子のM、子のVなど | ||||
→ | 7.C(後) | → | 8.M、Vなど |
深さ優先の呼び出し。
利用例 † 
URLクエリーは一時的ページ † 
URLクエリーもページと
同じように解析、展開。
使い方も実装も統一できる。
機能を実行時に取得 † 
機能をUIからのシステム呼び出し時に取得したい。
管理者が機能のURIを入力して。
システムが機能を取得、インストール。
アンインストールは…
機能と同じ著作者のファイルだけ消す。
他の機能でも使うようなものは除く。
参照数をカウントしておけば(また、カウントし直しが随時できれば)より正確にアンインストールできる。
URIで示された場所に置くもの † 
- プログラム他、インストールするもの
- 必要なもの(他者が作ったもの)
- インストールの仕方、形式的な書式
URI集を特定のサイトで作り、RSS化。
各Wikiで定期的に取得。
管理者用の機能。