SuikaWiki//細かい変更のお知らせ

SuikaWiki//細かい変更のお知らせ

[1] : わかば [sage] : 2002-12-06 (金) 11:43

一々他に書くまでもないけどどっかに書いておきたい SuikaWiki の技術的な変更点は、今後ここに書いていきます。

[2] : わかば : 2002-12-08 (日) 12:00

Navigation links を link要素として出力するようにしました。 Mozilla の Site Navigation Bar などをお使いの時便利です。

[3] : わかば : 2002-12-10 (火) 16:43

編集時に、送信ボタンは textarea の上にも出るようにしました。 (scroll しなくてよくなって便利。)

また、下の送信ボタンの横に選択肢を設けました。編集を保存後に閲覧モードか再び編集モードかを選べます。 (CSS や InterWikiName のような設定ページで便利かも)

[4] : 名無しさん : 2002-12-19 (木) 10:48

(技術的変更点ではありませんが) WikiAdmin (>>4) に SuikaWiki 内の設定文書の一覧を作りました。

[5] : 名無しさん : 2002-12-19 (木) 17:42

(厳密には SuikaWiki の外ですが) 500 Internal Server Error/wiki/ 以下独自のものに設定しました。 (http://suika.suikawiki.org/~wakaba/-temp/wiki/500)

HTML4.01 版と XHTML 1.1 版を用意しました。内容折衝で適当な方が送られます。

[6] : 名無しさん : 2002-12-19 (木) 18:50

新しい Plugin, Calender を作りました。 #form:'%calender(year=>2002,month=>12);'::'%output(nosubmit); とします。 (%output(nosubmit); も新設。)

year, month を省略すると最新のになります。 caption=>"○年○月", dayname=>"日 月 火 水 木 金 土" が既定値として指定されているとみなします。 nocaption, noheader が指定されているときはこれを出力しません。

[7] : わかば : 2002-12-24 17:11

「細かい」のかどうか知りませんが(w)、「地図」を追加しました。 どっかの Wiki で見かけたののぱくりですが、順方向リンクを集めて 数段階 (WikiResource:ja とかでケテーイ) 木を示します。

[8] : 7 : 2002-12-24 17:17

>>7 逆方向リンクというか、非参照の方の木も作ったら面白いかもしれませんのですが、そっちの木を作るとなると全 WikiPage を走査しないといけませんからねぇ。

[9] : 7 : 2002-12-24 17:17

まあ、その「深さ1」版が「検索」なんですけど。

[10] : わかば : 2002-12-25 11:37

RssPage の表示に WikiStyle:RSS を使えるようにしますた。 また、 RssPage では dc:date で更新日時を出力するようにしますた。

なお、更新日時は内部保管形式を従来の asctime形式から unix時間に改めたので、 Last-Modified:欄や頁末の更新日時情報は一旦消去された同然とお考え下さい。 (要は、既存日付データを変換しなかったのね:-))

なお、 HTML 内での出力時は RFC3339の日付形式UTC 固定ですが、いずれ (いつか) 自由な日付形式を WikiResource:* で指定出来るようにします(いつかね)。

[11] : 10 : 2002-12-25 11:41

>>10 CSS だとどうしても、ハイパーリンクが作れないとか要素の順番を入れ替えたり複製したり出来ないとか、要素型名を生成内容に出来ないとか、 Mozilla の実装だと content: で生成した内容の文字列は選択不能であるとか不満がありますね。

かといって、 XSLT スタイル・シートを SuikaWiki で使用可能にするのもどうかと思ってます。表現力は広がりますが (とは言っても普通の WikiPage で使えないと嬉しくないな...)、その分 HTML 直書きと同様の危険を持ち込みますし、なんせ現状ではうっかりでっかなスタイル・シートを書いてしまうと遅くてやってられないですしね。

[12] : 10 : 2002-12-25 11:43

>>10-11 まあ、今の所はちょっとした余興で実装してみた程度に思って下さい。

ところで、これらの変更のために Yuki::RSS に変更を加えたんですが、今から考えるとあの変更はちょっと綺麗じゃなかったなあと。 かといって書き直す気力もちょっとないですね。

[13] : 名無しさん : 2002-12-30 12:16

CreatePage, SearchPage, WikiPluginInfo を特別扱いしていたのを廃止しますた。 また、これに伴い新しい plugin, GoTo, Plugin, Resource を追加しますた。

[14] : 名無しさん : 2002-12-30 20:31

表示, 編集, CSS 出力で Expires:欄を吐く様にしました。 確かそれぞれ発行 (最終編集からではない。) から2分, 1分, 1時間で期限切れになります。 ちょっと短すぎかもしれませんが、どれくらいがいいかよくわからなくて...

まあこれでブラウザのキャッシュの関係も比較的まともになるんじゃないかと思います。 (もっときちんとしたければ、頁ごとの編集間隔の記録をとって、それを元にそれぞれ適当な値を算出して・・・とかしてもいいかもしれませんけど、そんな面倒なことするだけのものとも思えないしなあ。)

[15] : わかば [age] : 2003-01-13 09:51

細かいどころか大改造ですが... 見た目はあまり変化がないものの、内部的にかなり変えました。 CreatePage などの組み込み頁は全廃し、全て WikiPlugin として実装しなおしました。 表示や編集などもプラグイン化しました。 (但し現時点では表示・編集などの主要なものは、組み込みの subroutine を呼び出すだけの wrapper でしかないプラグインです。手抜きです:-)

設定は本体 script から分離しました。表示・編集などのモードの定義は設定 script でいじれます。ですからお好み, 場合によって、表示かつ編集モードとかも作れます。 又、入力形式/出力形式の変換もプラグイン化されていますから、例えば hnfHTML とか、XSL-FOCSS とかが簡単に組み込めます。 (組み込みが簡単なだけで、 XSL-FO→CSS の変換処理はそう簡単じゃないと思うけどね(w)。)

[16] : 15 : 2003-01-13 09:53

>>15 の変更に伴い、以前のような段階的出力 (HTML の head 要素の部分を準備→出力, 本文を準備→出力, 尾部を準備→出力 のようなもの。) が出来なくなりまして、必ず全体を準備→出力としないといけないのですが、これは速度的には大して変わらないようです。 (むしろ perl 起動の overhead とかの方が余程大きい。)

[17] : 15 : 2003-01-13 09:55

ところで、本体の改造とは関係ありませんが、 CSSoutline 又は -moz-outline が実装されていれば、必須の入力欄の周りに赤い点線が出るようにしてみました。 従来は必須の欄が抜けていたら、送信しても何もせずに戻ってくるのですが、この方が親切でしょう。 (対応してない場合は従来通り何も表示されませんが...)

[18] : わかば : 2003-01-14 18:38

Cache database を作りました (Yuki::YukiWikiCache)。 他の Yuki::YukiWiki* と同じように tied hash として使うんですが、データを要求された時に予め指定した期間以上経過したものであったら何も返しません。期日未経過なら保存してあったデータを返します。 (ちなみにファイル・ロックは今のところしてません。でもあった方が便利な場面もあるのかなあと思い始めてきた。。。)

これを WikiPage の要約 (検索結果や WikiPage へのアンカーの title 属性に出るもの。) や検索結果に使ってます。特に後者は、このところこの SuikaWiki も頁数が多くなってかなり時間がかかるようになったのですが、キャッシュすると体感できるくらいの差がでました。

もちろんキャッシュのせいで最新の状態が即座には反映されません。 キャッシュの期限切れは1日後にしてあります。 QUERY_STRING でキャッシュ使用の有無を切り替えられるようにしようかとも思いましたが、面倒なのでやめました:)

[19] 書き忘れてましたが、組み込みだった RssPage は廃止されました。 代わりに rss mode で RecentChanges (IW:SuikaWikiRSS:RecentChanges) を参照してください。

どういう仕組みかというと、 WikiForm%recent-change-list; があると、 RSS mode が有効になり、その指示に従って RSS で出力します。 (この場合もちろん他の部分は出力されません。また、これが複数ある場合は最初の1つのみ有効になります。) (名無しさん 2003-01-15 20:00)

[20] IW:YukiWiki:HTML部分の分離 とかで話題にされているように、 Wiki CGI script から、その出力の HTML を分離してしまうのは重要なポイントなんだけど、 (めんどいし) あまり実装されてませんね。 Wiki でも掲示板でもその他でも。

SuikaWiki では >>15-16 で Message::Util::Formatter 形式にしてしまいましたが、直 HTML (あるいは XML, 又は似非 XML) を使うのはとっても非効率ですよね。 HTML のタグとかは更にプラグインにまで追い出してしまって、出力の記述は中間形式にしといたほうがいい。 HTML/XHTML 切り替えみたいなのが簡単に動的にできる (非 SGML にも。)、って利点もあるし。

ただ実際のところ手抜きとかあんまり複雑にしたくないとか考えると今の SuikaWiki の実装が best ではないわけで。あの多重 quote には正直うんざり。 (名無しさん [sage])

[21] WalWiki で、検索結果を部分ごとで吐き出す機能が追加。 (http://digit.que.ne.jp/visit/?2003%C7%AF1%B7%EE#i4)

ちょっと面倒だけど便利そう。

問題はリンク先の fragment が匿名的 (単なる連番) だから、検索結果を作った後に heading が挿入されたら正しいとび先でなくなってしまう。 SuikaWiki ではキャッシュがあるから問題だ。 まあ我慢してもいい範囲かな。

SuikaWiki なら更に VAR[n] も使うとよさそうだ。 (名無しさん 2003-01-21 18:03)

[22] 代替スタイルを support しますた。 WikiStyleList:HTML で代替スタイルを定義します。

スタイル指定は Cookie で保存します。 (本当は設定保存は UA の機能だと思うんだけど、 Mozilla でさえ実装してないからなあ。) とりあえず SandBox に cookie 焼き用プラグインをはっときました。 (明示的に発行させない限り cookie は発行されません。また、(現在のところは) client 側 script で処理されるだけで、サーバーでは cookie の情報は使ってません。 (style 人気 ranking とかに使えるかなあ。 (それなら単純にスタイル・シートの頁の読み込み数を記録した方がいいかな。)))

なお、 XHTML mode では対応していません。 (JavaScriptのQ&A (>>11)) し、 WinIE ではこの変更の結果読み込みが遅く感じるようになったかもしれません。 (JavaScriptのQ&A (>>18)) (わかば 2003-01-24 15:54)

[23] ところで、これに限らず SuikaWiki の JavaScript (限らずといっても現在の所これと浮動案内・浮動目次しかありませんがね。) は WinIE6 と Mozilla でしか確認してません。 (できません。) どなたか確認してくださると嬉しいんですが。 ((JavaScriptDOM をちゃんと実装してるんなら Mozilla mode で動くと思うんですけど、中途半端に WinIE 互換ブラウザはまずいかもしれません...)) (22)

[24] それから、 Mozilla でなぜか textarea 要素の縦 scroll bar が出なくなる現象があります。 (CSS と JavaScript のどれが原因かつかめていません。) きちんと表示されることもあるのと、 WinIE ではきちんと出るのと、縦 scroll bar があるはずの場所が空いてて、そこを click すると動作しているように見えるのと、他にも Mozilla には form control 系がらみの bug があるっぽいことから、 Mozilla の bug の可能性が高いと思ってますが、まだはっきりしません。 (22=23)

[25] WinIE 対策は遅いのでやめました。 WinIE では従来通り既定スタイルで表示されます。 (ス切りボとか使えば代替も使えますが。) (>>22 2003-01-25 11:04)

[26] mypage&code_convert に通してなかったせいで、 ?mycmd=edit;mypage=WikiPage のような指定のある URI を使っていた時に正しく機能しない不具合を (今更ながら) 発見したので修正しますた。 (わかば 2003-02-10 16:43)

[27] 現在 SuikaWiki で大きな問題になっていること:

  1. [ 番号 ] のラベルがやたら多い。そこたらじゅうにある。 (でも無いと不便)
  2. 編集中にブラウザが落ちたらあぼーん (どうしようもない。)
  3. 人気度ランキングでスタイルシートが首位独走中, そうでなくても上位に食い込みやすい (対処するほどのことでもない。まあいいじゃないの。)
  4. 盛り上がって内容が増えるとごちゃごちゃしてソースが見づらくなる (適当に改行でも入れましょう。) (名無しさん 2003-02-23 15:59)

[28] マーク付けの語彙が少ないとか, 語彙マーク付けの1重入れ子も一般には出来ないとか、 WikiForm とかで多重解釈云々で滅茶苦茶になるとかの問題は一朝一夕にはどうしようもなく。いずれいつかそのうちきっとなんとか、ということで。 (27)

[29] あ、ここは変更しますた。スレだった。

問題追加:

  1. 2ch 化が進行中 (27)

[30] Yuki::YukiWikiDB2Yuki::YukiWikiDBMeta を少しいじって名前空間というかディレクトリ掘り対応にしてみました。 (まだ commit してません。) 思ったより簡単でした。

Key name が 1//2 の時に、従来 312F2F32.txt を実ファイル名としていたのを、 YukiWikiDB2 の encode/decode で新しいモード (これを既定モードとした。) を設けて、 31.ns/32.txt になるようにしました。 もちろんディレクトリ 31.ns はなければ自動で掘ります。 深さはファイル・システムが許す限り無限。

一覧系の API は修正, 拡張しています。 sort_by_mtime だけ非互換な変更を入れてしまいました。引数を ($self, @key) (@key は省略可。) から ($self, $option, @key) ($self 以外省略可。) にしてしまいました。

そんなわけもあって、 YukiWikiDB2 の修正じゃなくて YukiWikiDBNS という新しいのにしたいところですけど、ちょこちょことした修正があちこちにある感じだからなぁ。 継承って意識して作られてない場合には使えないなーと。 (でもま、 YukiWikiDBMeta 同様に継承で処理する?)

発見された問題としては、 key が //foo とか foo////bar とか bar// だったらどうしよう、というのがあります。 これらは都合上 .ns/foo.txt, foo.ns/.ns/bar.txt, bar.ns/.txt になってしまいます。

これは YukiWikiDB 側で処理すると面倒な上に厄介なことになりそうですから、仕様ということにして、例えば SuikaWiki で使うときには WikiPage 名の正規化でこのような名前が DB に渡らないようにするのがよさげです。 (わかば 2003-03-25 17:31)

[31] あとは SuikaWiki 本体側で WikiName の処理の部分を修正すれば名前空間が動くようになりそう。

プラグイン 「WikiPage」 の page-list と recent-change-list には新しいオプション ns, recursive, type=>{key,ns,both} を設けました。 既定値は今までどおりの処理になるように "", 1, key としています。 (わかば)

[32] YukiWikiDB2 からの継承的分離(謎)や名前空間区切子の変数化とかは面倒なので止めました。気が向いたらすることもあるかもしれません。

仕様変更を元の名前でやるのはまずいので、 Yuki::YukiWikiDBNS にしました。 Yuki::YukiWikiDBMeta2 ではなく NS を継承するようにしました。 (わかば 2003-03-26 16:19)

[33] SuikaWiki の perl の名前空間の使用の現時点での方針は、

[34] リンクも名前空間に対応させました。しばらく実験Wikiで運用して、そのうちこちらにも反映させます。 (わかば 2003-03-26 17:12)

[35] 相対経路は対応させるのが面倒だったので、 .//Foo..//Bar には対応していますが Foo//..//Bar..//..//Foo には対応していません。しばらく様子見で。 (わかば)

[36] また、 WikiName として ., .., //, 0 はそのもの又は名前空間名として使えません。

(0 が使えないのは perl での処理の都合上です。従来の code では意識している部分としていない部分が混在していて、実質使えませんでした。この際ついでに、使えないと決めてしまいます。) (わかば 2003-03-26 17:16)

[37] RecentChanges でアンテナのようにダミーの日付文字列を使って、ブラウザの既読リンク色変更機能が働くようにしました。 (名無しさん 2003-03-26 20:45)

[38] とりあえず名前変更を merge してしまいました。詳しくは..//名前空間へ。 (わかば 2003-03-27 17:06)

[39] 幾つかの WikiPage の名前を名前空間的に修正します。この WikiPage も「SuikaWiki:細かい変更のお知らせ」から「SuikaWiki//細かい変更のお知らせ」に変更になりました。 (わかば 2003-03-27 17:08)

[40] SuikaWiki::View を新設して、従来 suikawiki-config.ph にあった %ViewDefinition やその中の link 要素群とかを plugin module とかで定義できるようにしました。

これを使って、例えば Sidebar menu や PukiWiki 風横メニューつき view の定義を SuikaWiki::Plugin::Menu に移動しました。

おかげで suikawiki-config.ph は少しはすっきりしたんですが。逆に定義を分散させたことで、 customize するにはモジュールをいじらないといけないことになってます。

悩ましいところ。 (もちろんモジュールは元々 Wiki 管理者が自由にいじるところではあるのだけど。面倒になる。) (わかば 2003-04-03 09:48)

[41] 名前空間区切子の選定には万全を期したんですが。 // って、 URI によく使う文字列だったんです。。。

おかげで名前空間 URI が(狭義) WikiName に出来なくなってしまいました。

まあ気にしないことにしましょう。。。 ( 2003-04-03 17:26)

[42] WikiPage calendering support (謎) を、名前空間対応して merge しました。 例は SandBox//2003-04-05 辺りへ。 (わかば 2003-04-05 09:17)