2016/03/20(日)PukiWikiを1.5.1に更新

PukiWikiを1.5.1に更新

ECO-Wiki (acronia)で使っているPukiWikiは2015/03/25のスナップショットでしたが、PukiWiki 1.5.1 がリリースされたのでバージョンアップしました。

改造箇所があるのでdiff-patchで適用しましたが、大きな修正が必要な衝突もなく上手く動いているようです。

続きを読む

2016/01/19(火)アナザーページメニューのアンケート結果

アナザーページメニューのアンケート結果

期日が来たので結果を公開しました。以下のページで閲覧できます。

[追記] 多重投票は結果公開前に私が確認した限りでは無いようでした。

現時点の結果は以下の通り。(回答総数:61)

アンケート結果:単純集計

Q1. Wikiページ「アナザークロニクル」のヘッダーメニュー
選択回答数
(A)ロア実装順18
(B)系統別33
(C)キャプチャー別21
(D)リンク無し0
(E)その他3

「(B)系統別>(C)系統別>(A)ロア実装順」の順で「(B)系統別」が一番人気。
現行メニューの「(A)ロア実装順」は慣れているのでこのままが良いという人もいそうでしたが、そんなに伸びない結果に。

個人的には、アナザーページのメニューとして考えるならアンケート結果通り「(B)系統別」が合理的かなと思います。

Q2. イベント「イリスと記憶の書架」
選択回答数
無回答1
0%13
10%~40%2
50%~80%2
90%~100%43

やった人とやってない人の二極化で、やった人の方が多い結果に。
一度始めたらちゃんと最後までやる人が多いという事でしょうね。

Q3. ロアの出現順
選択回答数
無回答3
0%10
10%~40%9
50%~80%11
90%~100%28

こちらの回答は比較的ばらけてます。
ちゃんと覚えている人(90%~100%)が約半数いる一方で、それ以外の人(80%以下)も半数くらい。

Q4. アナザークロニクル
選択回答数
プレイ無し3
プロローグ30
EXキャプチャー32
ページ作成35
スキル使用50

半分以上(スキル使用の結果を見ると8割以上)の人は何らかの形でアナザークロニクルをやっているという結果。

アナザーページを作成しないと使えないアナザースキルの使用が、なぜかページ作成より多いですが、何か誤解があったのかも。(複数選択できないと思われたなど。)
そもそも、ページ作成とスキル使用はほぼ同義*1なので設問があまり良くなかったですね^^;

プロローグ、EXキャプチャー、ページ&スキルをそれぞれ別項目にして進行状況を尋ねた方が良かったかもしれません。

アンケート結果:クロス集計

Q1.とQ1
Q1\Q1(A)ロア実装順(B)系統別(C)キャプチャー別(D)リンク無し(E)その他
(A)ロア実装順106102
(B)系統別623401
(C)キャプチャー別141501
(D)リンク無し00000
(E)その他21100

一つだけ選んだ人が多いですが、「(A)ロア実装順 か (B)系統別」、「(B)系統別 か (C)キャプチャー別」の組も少しあります。
「(A)ロア実装順 か (C)キャプチャー別」の組はほとんどなく、複数選択した人は「(B)系統別」を含めた組にしているようです。

Q1.とQ2. イベント「イリスと記憶の書架」
Q1\Q2無回答0%10%~40%50%~80%90%~100%
(A)ロア実装順111015
(B)系統別190221
(C)キャプチャー別051015
(D)リンク無し00000
(E)その他00003

イベントプレイ済みの人(90%~100%)については(A)~(C)にあまり差が無いですが、イベントをやっていない人(0%)を見ると「(A)ロア実装順」の票数がかなり減り、「(B)系統別>(C)系統別」の順になっています。

Q1.とQ3. ロアの出現順
Q1\Q3無回答0%10%~40%50%~80%90%~100%
(A)ロア実装順002511
(B)系統別376611
(C)キャプチャー別152211
(D)リンク無し00000
(E)その他00012

こちらも同様の傾向で、出現順を覚えていない人ほど「(A)ロア実装順」を選ばなくなっています。

Q1.とQ4. アナザークロニクル
Q1\Q4プレイ無しプロローグEXキャプチャーページ作成スキル使用
(A)ロア実装順267715
(B)系統別020212229
(C)キャプチャー別210111214
(D)リンク無し00000
(E)その他03333

Q4は4つ全てにチェックする人も多いですし、特に傾向は無いですね。

*1 : ページ作ったらスキルはとりあえず使ってみる人が多いと思うので

2016/01/05(火)アナザーページメニューのアンケート公開

アナザーページメニューのアンケート公開

2015/12/29 アナザーページメニューのアンケート案で検討していたアンケートページを公開しました。
アンケート: Wikiページ「アナザークロニクル」のヘッダーメニュー

以下の項目の複数選択にしましたが、たいていの人はどれか1つ好きなのを選ぶのではないかと思っています。

  • (A)ロア実装順(現行のまま)
  • (B)アナザーブックウィンドウと同じ系統別
  • (C)EXキャプチャー別
  • (D)アナザーページへのリンクは載せない(左メニューなどヘッダ以外の箇所に掲載)
  • (E)その他(コメント欄に入力してもらう)

あとは、せっかくの機会なのでイベント進行状況のアンケートも試しに入れてみました。こっちは回答任意です。(無回答のまま投稿可能。)

2015/12/29(火)アナザーページメニューのアンケート案

アナザーページメニューのアンケート案

アナザーページヘッダ部分のリンク構成について、実際のところ需要はどうなっているんだろう?と気になったので、アンケートページを作ってみようかと考えています。

アンケートページを公開するとして1週間後くらいになると思うので、アンケートの項目について意見があればお願いします~。

アンケート項目案

まとまっていた ECOwiki編集・相談スレッド#469 を元にしました。

  1. (A)ロア実装順(現行のまま)
    イリス / アルカード / 清姫 / ル・フェイ / バステト / キャプテンキッド / 玉藻
    ローレライ / パラケルスス / ワーウルフ / メフィストフェレス / ルチフェロ / ステラ
    
  2. (B)アナザーブックウィンドウと同じ系統別
    FT( バステト / ルチフェロ / ◯◯◯◯ ) SU( アルカード / ローレライ / ◯◯◯◯ )
    BP( メフィストフェレス / ◯◯◯◯ / ◯◯◯◯ ) NV/JO( イリスアナザー / ◯◯◯◯ / ◯◯◯◯ )
    
  3. (C)EXキャプチャー別
    闇と獣の侵略者( アルカード / バステト ) 趣向な創造者( メフィストフェレス / イリス )
    嘆きの歌姫( ローレライ / バステト ) △△△△( ◯◯◯◯ / ◯◯◯◯ )
    △△△△( ◯◯◯◯ / ◯◯◯◯ ) △△△△( ◯◯◯◯ / ◯◯◯◯ )
    
  4. (D)アナザーページへのリンクは載せない(左メニューなどヘッダ以外の箇所に掲載)
  5. (A)か(B)のどちらでもよい
  6. (A)か(C)のどちらでもよい
  7. (B)か(C)のどちらでもよい
  8. (A)、(B)、(C)のどれでもよい
  9. その他(コメント欄に入力してもらう)

アンケートの流れ案

アンケート開始から2週間後くらいに結果公開にしようと考えてます。

結果公開後も回答したい人が残っているかもしれないので、公開後もしばらくは投票可能にした方が良いかな?

更新

2016/01/02: 案(D)の記載を修正。

2015/03/26(木)PukiWiki If-Modified-Since(条件付きリクエスト)対応

PukiWiki If-Modified-Since(条件付きリクエスト)対応

別の日記に少し書いてますが、ECO-Wiki (acronia)をIf-Modified-Since(条件付きリクエスト)に対応させたので、その方法をメモしておきます。

If-Modified-Since(条件付きリクエスト)とは

If-Modified-Sinceを使うと、ページが更新されている時だけデータを送って欲しい、という要求ができます。

  • 初回アクセス
    1. [クライアント] ファイルください。
    2. [サーバー] はいどうぞ。ファイルの更新日時は「Wed, 25 Mar 2015 15:07:33 GMT」。(200 OK 応答)
  • 2回目以降:更新されてない場合
    1. [クライアント] 更新日時「Wed, 25 Mar 2015 15:07:33 GMT」のキャッシュ持ってるけど最新版ある?(If-Modified-Sinceフィールド)
    2. [サーバー] 更新されてないから、内容は送らない。そのキャッシュ使って。(304 Not Modified 応答)
  • 2回目以降:更新されている場合
    1. [クライアント] 更新日時「Wed, 25 Mar 2015 15:07:33 GMT」のキャッシュ持ってるけど最新版ある?(If-Modified-Sinceフィールド)
    2. [サーバー] 最新版あるので送る。(200 OK 応答)

PukiWikiでIf-Modified-Since対応する場合の問題

PukiWikiの場合、各ページの更新日時をどのような基準で決めるかが問題となります。

  • ページを編集した日時にした場合:pcommentやinclude先、メニューバーが更新されても、そのページは更新されたと見なされない
  • ページを構成しているファイル郡の中の最新更新日時にした場合:正しく動作するが、追加の処理が必要。負荷も増える。

対応方針

この問題は、bodycache適用時の問題と似ています。そこで、今回はbodycacheファイルの更新日時を対応するページの更新日時と見なすようにしました。

  • bodycacheファイルはpcommentやinclude先が更新されたときもアップデートされるようにしているので、更新見落としが起こらない
    • bodycache patch適用範囲拡大を実施していることが前提
    • メニューバーの問題については、メニューバー更新のたびにbodycacheを全削除*1することで対応

改造内容

主にread.inc.phpを書き換えます。

  • lib/bodycache.php
    • キャッシュファイルの更新日時を元にLast-Modifiedヘッダフィールドを返す関数
      • どこに書いても良いですが、bodycacheを前提にした記述なので、bodycache.phpに書きました。
        // Last-Modified header
        function header_lastmod_cache($page = NULL)
        {
            global $lastmod;
        
            if ( is_cache($page) && get_cachetime($page) != 0 ) { //get_cachetime==0の時は、そのキャッシュは破棄予定なので無視
                pkwk_headers_sent();
                header('Last-Modified: ' .
                    date('D, d M Y H:i:s', get_cachetime($page)) . ' GMT');
            } else if ( is_page($page) ) { //キャッシュが存在しない問いは現在時刻を使う
                header('Last-Modified: ' .
                    date('D, d M Y H:i:s', UTIME) . ' GMT');
            }
        }
        
  • plugin/read.inc.php
    • If-Modified-Sinceフィールドヘッダの内容をunixtimeに変換して返す関数
      function get_if_modified_since()
      {
          static $unixtime = null ;
          if ($unixtime !== null ) {
              return $unixtime ;
          }
      
          if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
              $unixtime = false ;
              return false ; // If-Modified-Since なし
          }
          
          $unixtime = strtotime( $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
          return $unixtime ;
      }
      ?>
      
    • plugin_read_action関数内の改造
      • 変更前
        if (is_page($page)) {
            // ページを表示
            check_readable($page, true, true);
            header_lastmod($page);
            return array('msg'=>'', 'body'=>'');
        
      • 変更後: 更新の有無を確認して、更新されていなかったら304 Not Modifiedを送って処理を打ち切ります。また、header_lastmod_cacheでLast-Modifiedフィールドを送るようにします。
        if (is_page($page)) {
            // ページを表示
            check_readable($page, true, true);
            
            $ims = get_if_modified_since();
            if ( $ims ) {
                $ctm = get_cachetime($page);
                if ( $ctm && $ctm <= $ims) {
                    // 更新されていない
                    header('HTTP/1.1 304 Not Modified') ;
                    header_lastmod_cache($page);
                    exit;
                }
            }
        
            //header_lastmod($page);
            header_lastmod_cache($page);
            return array('msg'=>'', 'body'=>'');
        

*1 : メニューバー更新と同時に、bodycacheファイルの更新日時を現在時刻に書き換えてしまう手もありますが、間違えて古いbodycacheを最新扱いしないように注意が必要です。

OK キャンセル 確認 その他