PukiWikiのメモ。

  • 基本的に、Pluginが充実しているので、結構便利。が、どんなPluginがあるのか良く分からないし、見付かりにくいため不便。なぜかPukiwikiのサイトはめちゃ反応がにぶいし。
  • Pukiwiki自身の単語検索(search)の弱さ・遅さにも辟易だなあ…。
  • わかってきたが、tracker_listとかsearchとか、エンジンそのものが非常に遅いようだ。これは致命的かもしれない。PHPデフォルトの30秒という実行時間内に終わらないこともしばしば。
    • と思ったけど、searchは結構優秀かも。検索後ハイライトもつけてくれるし。遅かったのは何か別の原因っぽい。

インストール

パーミッションについて

ユーザー自身が含まれるグループを書き込み可能にしておいた後、スーパーユーザーにディレクトリ全体のOwnerをapacheに変えてもらうのがよさげ。あとでpukiwiki.ini.phpをいじりたいときにNot Ownerなんて言われたら超めんどくさいので。
いずれにせよ、少しめんどくさい。

管理人パスワード設定

pukiwiki.ini.phpにて&adminpassを適宜設定。

編集時にパスワードを求める

pukiwiki.ini.phpにて

// Edit auth (0:Disable, 1:Enable)
$edit_auth = 1;
                                                                                
$edit_auth_pages = array(
        '##'            => 'kei',
);

とする。上の例では、全てのページがパスワード保護される。

WikiName/Autolinkの廃止

pukiwiki.ini.phpにて

// _Disable_ WikiName auto-linking
$nowikiname = 1;

とする。McDonnaldsとかでオートリンクされるのがイヤン。

秘密ページ

ini.php において

// Read auth (0:Disable, 1:Enable)
$read_auth = 1;
 
$read_auth_pages = array(
        // Regex                   Username
        '/^:.*$/'               => 'kei',

などとやると、":"から始まるページはkeiのパスワードを要求することができる。RecentChangesやList of pagesなどにも表示されない。

deldel.inc.php

http://fullmetal.dip.jp/pukiwiki/ の、自作/プラグイン にて配布しているdeldel.inc.phpをゲット。日本語がEUCのままなので、ujconvにてUTF8に変換し、pluginディレクトリにセット。

http://meteora.ucsd.edu/~kyoshimura/?cmd=deldel

とやると一括削除が可能になる。便利。

Mixiの外部ブログに登録する

mixiでは、mixi日記を使わず「外部ブログ」を日記のところに表示させることができる。よくよく調べると、単にRSSを食わせているだけっぽいので、ここのようなpukiwikiページも外部ブログに登録できる、ってことだ。

というわけで、興味本位でやってみた。手順は以下のとおり。ちなみにmixiのページはここ(mixiログインが必要)。

  1. mixi会員になる(誰かに招待されましょう)
  2. 「設定変更」-「日記・ブログの選択」-「その他」
  3. 「設定変更」-「日記・ブログのURL」-(例)http://meteora.ucsd.edu/~kyoshimura
  4. 「設定変更」-「RSSのURL」-(例)http://meteora.ucsd.edu/~kyoshimura/?cmd=rss10pp&page=Normal%20Diary

このページではrss10ppを入れているので、デフォルトの場合はその部分を「rss10」にする。pageを設定するとそのページ以下のページのみがfeedされる。設定しないとすべてのページがfeed。

Mixi側でのRSSの更新は4時間ごとらしいので、すぐは更新されないことに注意。

内容

attachref.inc.php

デフォルトでは、画像等を貼り付けたいときはUpload→ファイル名を確認→&ref埋め込み、という作業が必要でめんどくさい。 ここ にある、attachref.inc.phpは、最初の文章に&attachref;を埋め込んでおくと、その後好きなときにUploadすれば自動的にrefを引いてくれるので、上記の3段階の手間の1.5手間くらい削減してくれる。

手順。

  1. 最新版(v0.14?)をゲット、plugin/に保存。
  2. 170-80行目くらいにある
    (旧)$pass = array_key_exists('pass',$vars) ? md5($vars['pass']) : NULL;
    の記述を
    (新)$pass = array_key_exists('pass',$vars) ? $vars['pass'] : NULL;
    とする。普通のattachプラグインにかかっているパスワードとバッティングするのを避けるため。

RSSでdescriptionを出力する

デフォルトのRSSでは、更新ページのタイトルのみがフィードされ、つまらない。Google Desktopなどで購読する際にはdescriptionもあったほうが良い。というわけで、Epilogueさんのrss10pp.inc.phpを導入。入れ方は、

  1. pluginディレクトリにダウンロードして
  2. lib/http.phpにて$_LINK['rss10']の部分を変更(上記リンクの指示と少し異なる)
    $_LINK['rss10']="$script?cmd=rss10pp";

でおしまい。

これで、ページ右下のRSSボタンを押すとこのようなdescriptionつき更新一覧がでる。また、Google Desktopのウェブクリップオプションでhttp://meteora.ucsd.edu/~kyoshimura/?cmd=rss10ppを追加すれば、更新のたびにDescriptionつきでポップアウトしてくれる。

ただ、ページの上のほうのテキストを抜粋しているだけなので、ページの中での新たな更新などはdescriptionに入らないのね。

(2007/06/23追記)

どうも、http://www.feedvalidator.org/ によるともとのrss10ppはvalidなrssではないみたい。generator、dc:creator、あと著作者のページ(宣伝)を書くところが問題、ということなので、それらをすべて削除した。

そして、valid-rss.png が下のRSSフィードボタンに表示されるようにした。(image/rss.pngを置き換えた)

calendar2/calendar(teananさん版)

ここ から取得、eucでかかれているのでUTF-08に変換。

[kyoshimura@meteora ~/http]$ ujconv calendar.inc.php.0.15.txt -t utf8 > plugin/calendar.inc.php

calendar2との主な違い(上記HPに記載のないもの)

  • カレンダーの日付をクリックしたとき、記事がないとEditになる(calendar2)
    常に閲覧(calendar)
  • templateというページを用意しておけば新規記事のときそのページが読まれる(calendar2)
    テンプレートは使えない(calendar)。

改行・正規表現・その他ちょいネタ。

行末に"~"で改行。
正規表現はどうするのかなあ…。コード表で相当するのを直書きするのが良いようだ。めんどくさ。("&"は"&")
&sad;や&bigsmile;を使うとこういうの( [sad] [bigsmile])が出る。;)や(^^;でもでるみたい ;) (^^;。でも、後者のは、直前に空白がいるみたいだ。

ページ削除

Editの際、空にしてUpdate。

画像の一覧表示

プラグイン#jphotoを使用(オプション)。ポップアップされるのとか、フラッシュそのものが嫌だったりする。

階層内のページ一覧表示

#ls2が使える。見出しまで表示したいときは#ls2(,title)とする。

も少し詳細な階層内のページ一覧表示

#tracker_listが使えそう。詳細不明。

つくってみたが、trackerはうまく作動しても、tracker_listのほうに大きな問題があるみたいだ。それを使いたいのに…。本文が長いとlistが止まり、[body]という項目があるとなにやら勝手に反応する。(予期していない項目が[body]を食っていたりする。)

やれやれ、どうしたもんだか。長くなりそうなので大項目を作った。

画像を一度にアップロード

ひとつずつしかできない。tarでまとめてアップし、そこで解凍させるらしい・・・
ここ参照。

目次の表示

#contentsを挿入(デフォルト)

カウンター

MenuBarに

RIGHT:
total: &color(green){&counter;};~
today: &color(green){&counter(today);};~
yesterday: &color(green){&counter(yesterday);};~

などと埋める。

アクセス解析

オプションプラグイン#accessでページごとのログ取り、#accessviewで閲覧。

#accessviewは一つ一つのページを埋め込む必要があって、めんどくさい。
秘密ページにもしたいが、やりかた不明→できた。あと、日本語でしか表示されない上に、エンコードに不備がある。(UTF-8が使われてない)

  • 修正点
    • ujconv -f euc -t utf8 infile > outfileによって、UTF-8に書き換え。
    • あと
      function readlog_accessview($page){
              //global $timestamp,$ip,$host,$user_agent;
      というようにglobal〜のところをコメントアウト。(そうしないと、カウントが変)
  • [2007/11/03] プラグインではなく、専用ツールを使うことにした。詳細はBBClone導入のページ参照。

容量制限・一括添付

  • 結局、サーバー側のPHPの容量制限に引っかかるらしく、500KBが上限のようだ。そうじゃない場合の変更は、plugin/attach.inc.phpのupload_max_filesizePLUGIN_ATTACH_MAX_FILESIZEをいじる。
  • ひとつのファイルずつしかuploadできないので、http://cubic9.com/PukiWiki/ で配布されているattach、ref改造パッチをあててみた。
    • が、どうもUTF-8版には対応していないらしく、コメント等に日本語が含まれる箇所でパッチできない。何ヵ所かは手動で書き換えた。
  • でも、tarしても500KBだと大してまとめられないので、やっぱりめんどくさい。scpで一括転送しよ…。
  • 上記の問題は、apacheのphp.confにあるLimitRequestBodyの設定にあることがわかった(デフォルトで500KB)。/etc/httpd/conf.d/php.confでその制限をあげてやるか0にすると解決する。(2007/06/07追記)
  • さらに変更箇所が必要なことが発覚。/etc/php.ini内の、memory_limit, post_max_size, upload_max_filesizeをそれぞれ変更。その後PHPを再起動。(2007/06/08追記)

見出しごとの編集

  • いろんなPukiWikiのページで実装されているのに、本家でやりかたが載っていない。(載っているけど、最新版での方法等がしっかり示されていない。)
  • 色々調べて、ここで配布されている1.4.7版のパッチが使えることが分かった。
    [kyoshimura@meteora ~]$ cd http
    [kyoshimura@meteora ~/http]$ patch -p0 --dry-run --verbose < paraedit20060527.diff
    [kyoshimura@meteora ~/http]$ patch -p0 --verbose < paraedit20060527.diff
    で見出しごとに鉛筆マークが出るようになれば成功。
    結構いろんなファイルを書き換えている。ちょっとどきどきだ。

コメント挿入

  • #commentは、一番下にしか書き込めない。段落を下げるには、コメント記入の際行頭に"-"をつける。改行を含むコメントは、どこかで作ってからコピペ。(普通にEnterを押すと投稿されてしまう。→pcommentも同様。)
  • #pcommentは、別ページに書き込む。replyというパラメータをつけると古いコメントの真下に書き込むことができる。
    #pcomment(reply)
  • 別ページに#pcommentを埋め込んでおいて、できたコメントページをまたさらに別のページで#include(コメントページ,notitle)すると、そのページで入力欄なし・投稿時間情報ありなコメントを表示することができる。要するに更新記録などを表示するのに便利。TOPページのNews, Updateがそう。#pcommentは管理ページ(:から始まるページ。このサイトだと:Log←SPAM対策のため、非リンク)にまとめるとさらに便利。(2007/06/06追記)

コメントプラグインで改行を可能にする (comment2/pcomment2)

デフォルトのcomment.inc.phpおよびpcomment.inc.phpでは、inputタグのタイプで"text"を使用しているため、入力時に改行が使えない(Enterキーを押すと投稿されてしまう)。コピペも一行しかされない。というわけでここここを参考に、それぞれを改造した。

ほとんど美麻wikiさんのいうとおり書き換えたが、元の一行comment、pcommentも保存しておきたいのでそれぞれcomment2、pcomment2というプラグインにした。

改造のポイントは次のとおり。

  • プラグインファイルの名前を変えているため、いくつかのfunction名も変更する。
  • "\s+$" (空白文字(改行+スペース+タブ)が1つ以上最後まで続く)を""(何もなし)で置換し、
  • "^\s*\n" (空白文字から始まって改行で終わる=空白行)を"&br;"で置換する。
    • ここは、オリジナルの改変とは異なる。(オリジナルでは#br\nで置換→完全な空行が入る)

改造後のファイル:&attachref(comment2.inc.php); &attachref(pcomment2.inc.php);

  • インストール:pluginディレクトリに保存
  • 呼び方:#comment2や#pcomment2で呼ぶ
  • 改行方法:通常のPukiWiki編集と同様に、1行以上の空行を入れる。

外観(skin)

ヘッダーの画像変更

./image 内に画像を置き、pukiwiki.skin.phpにて

// Set site identities
$_IMAGE['skin']['logo']     = 'xxxx.jpg';

と変更。

ヘッダー(ページ一番上)のアドレスが表示されているところを階層状にする.

pukiwiki.skin.php内にて

if (! defined('SKIN_DEFAULT_DISABLE_TOPICPATH'))
        define('SKIN_DEFAULT_DISABLE_TOPICPATH', 0); // 1, 0

とする。

MenuBarの箇条書きを無くす

pukiwiki.css.phpにて

/* kei */
div#menubar ul li { list-style-type:none; }

などと足す。

ヘッダー部分の「Edit」「New」などのコマンド表示をなくす

Navigation Barというらしい。pukiwiki.skin.phpにて

if (! defined('PKWK_SKIN_SHOW_NAVBAR'))
        define('PKWK_SKIN_SHOW_NAVBAR', 0); // 1, 0

の部分を0(Off)とする。下にもあるしね。

ブラウザからSkinを変更できるようにする

それぞれのスキンを別のディレクトリにおいて(例えばskin/i_blue)、index.phpの代わりのページ(例えばi_blue.php)にてSKIN_DIRを指定するようにする。 大体のスキンはそれで動くが、中には動かないものもある(skin直下にpukiwiki.skin.phpがないと、リンクが動かないとか。例えばGS)。
(2008/02/19: 各スキンへのリンクをはずしました。)

ikuyubon-sanのページからwgetし、入手したファイルはskin/i_blue(またはi_orange)に保存。index.phpをコピーしてi_blue.php(i_orange.php)を作成、その中でSKIN_DIRをskin/i_blue(またはi_orange)と指定。

hirokasa-san のページからwgetし、simple2.phpをpukiwikiディレクトリにセーブ。

ari-san

i_blueなどと同様だが、UTF-8化されていない。

ari-san

skin/iridのpukiwiki.skin.phpからはiridwire、orangebox、cloudwalkの3種類が選べるが、ブラウザからは選べないため、どれかのみ。UTF-8未対応。日本語をいくつか英語に変えた。

skin直下にしか置けない。色のバリエーションも豊富。

  • original

デフォルト。

tracker.inc.phpについて

studyのページでは、

#tracker(study)
#tracker_list(study)

を使っている。 :config/plugin/tracker/study 及びその下のform・page・listというページ(ファイルではなく、Wiki上のページ のこと。)を適宜いじくる。

trackerを使いはじめてから:configのほうで項目を増やすと、すでにある投稿ページのtracker_listが壊れる(データベースとの整合性がとれなくなる?)可能性があるので要注意。
が、カテゴリーの要素を増やすことには対応できているようだ。

また、はっきりとした原因は不明だが、tracker_listによる検索のパワー不足でPHP実行のタイムアウトが頻発する模様。ページの内容が増えると加速度的に処理時間がかかるようだ(感じとしては、ページ全体に項目毎のパターンマッチングをかけている?)。 後で追加した内容でも、同様の問題が起きる。というわけで、

  • trackerする項目は極力減らした方が良い
  • trackerのtypeも、titleなどはやめてtextにした方が良い

気がする。studyは現在10ページ・新規6項目(+いくつかの予約項目)で2.2秒。 ただ、defaultの設定(#tracker_listのみ)だと、新規項目数は5とそんなに変わらないのに0.3秒程度。謎。

SPAM対策について

戦いの経緯

  • trackerプラグインでは、ページをFreezeしていたりEdit認証をつけていたりしても、誰でも自由に投稿できてしまう。そのような理由から、studyのページがSpamに狙い撃ちされるようになった。犯人は208.36.144.9。(2007年4月ごろから)
  • 投稿フォームを削除したり、閲覧制限つきページに移動させてみても、止まらない。Backupされているところから攻撃してくるのか、Cashからかはわからない。(trackerでは、どの投稿フォームから来ているかはわからない。)
  • http://www.ark-web.jp/sandbox/wiki/190.html を参考にAkismetフィルタを使ってみた。(2007/06/02)
    • ログがないため、動作確認しにくい。
    • というわけで動作確認せず様子をみてみたが、うまく働いていない模様。
  • http://note.sonots.com/?PukiWiki%2Fakismet.inc.php を参考に上記フィルタのPlugin版を入れてみた。(2007/06/16)
    • 手持ちのスパムデータを送信してみたところ、うまく弾かれた。ログも残った。
    • 例の敵からの送信はまだ。
    • 空ページが生成されてしまうようだ。ちょっとやっかい。
    • 強すぎて、自分のページ(例えばこのIT memo/wikimemo)もSpamと判断されてしまう。
      • reCAPCHAを通ると、パラグラフ単位の変更なのにそれがページ全体となってしまう。(通常のEditだと問題ない)
      • reCAPCHAの認証がうまく通らない。(ソースの中にSpam疑惑があるたびに聞いてくる??→そうではなく、SPAM取り消しが受け付けられておらず、自動ポストのたびにSPAMと判定されている、ということのようだ。)
  • というわけで、trackerにも認証をつけることとした。(tracker.inc.phpをここに従って直接編集)
    • 結局フィルタいらんかったやんけ!とは言ってはいけない。
  • sonotsさんに直接泣きついてakismet.inc.phpを改良してもらう。(2007/06/17)
    • パラグラフ単位の変更に対しては、edit.inc.phpをいじることで対応できそう。
    • しかし、すでにある問題(空ページ生成問題とreCAPCHA認証通らない問題(=SPAM取り消し通らない))が問題だと言うことに気づいた。
      • 空ページ生成問題:trackerの投稿では、reCAPCHAの認証に行った時点で空ページができてしまう。
      • SPAM取り消し通らない問題:スパムと認識されてしまうあるデータを非スパム報告しても、再度スパムと認識される。
  • ウチだけの問題なのでは…と悩み中。。。
  • SPAM取り消し通らない問題はAkismetの仕様みたい。そこはどうしようもないのだが、reCAPCHAをクリアしたらフィルタを介さないように修正してもらった。
  • trackerの問題も、ソース見たらわかった。ページ内容を送信する前にtouchしていたので、そこをコメントアウト。今のところ弊害なし。
  • これで、SPAM対策はほぼOK?(2007/06/19)
    • ある朝、スパム投稿が2つも作られてて効いてないやん~、と思ってログを見たら、30個くらい挑戦した形跡があった。完璧にするのはむりやんな。(2007/06/20)

kcaptcha導入


#comment2_kcaptcha