WordPressをチューニングする


 ふと思い出したが、MTの頃にものすごく投稿が億劫になっていたのは、管理画面に入る時に五秒くらい待たされていたからだと思う。再構築なんかもっとひどかったから、ちょっと書き直すのだって一仕事だった。同じMTでも新鯖ならだいぶマシそうな気もするけど。
 コードはMTの方がWPより圧倒的に綺麗らしいんだけどなあ。そもそもPerlとPHP自体が略。
 結局のところ、時間食わない物が一番有り難いってのはあるかもしれない。

 とまあ、そんなことを色々と考えていた訳ではなく、単にチューニングで遊びたくなったので適当に調べた。

 まずはwp-cacheプラグインを入れてみたが、0.3secくらいだったレンダリング時間が0.33secくらいに上がったので、何となく外す。高負荷になれば強いタイプかもしれないが、まあ、うちには関係無いでしょう。

 次にMySQLだが、query_cache_size=20Mとかにするといいらしいな。日本だと32Mの方が流行ってるのかな。まさかUTF-8だと漢字一文字3バイトだからとかか。まーいいや何でも。
 つーことで、/etc/rc.confにmysql_flagsを色々と書き加えたが、何か起動しねえ。ログもどこにあるやら。面倒だから/etc/my.cnf書き換えるか。くそう。
 んで、/usr/local/etc/rc.d/mysql-server restartと。
 ふむふむ、レンダリング時間は0.27secくらいまで減ったな。微妙だな(笑)。まーいいや微妙でも。でも今後のメンテが面倒になるようなら外すかも。

 次はPHPかな。
 プリコンパイル状態でメモリにキャッシュするツールがある、と考えればいいのかなあ。効果はありそうだが、設定の書き換えがかなりあるようで、メンテが面倒になりそうな気がしたので見なかったことに。
 TRASYS Wikiとかも軽くなるかもしれないけど、既に軽いしなあ。

 まあ、現状で全く不自由していないし、これ以上は大して速くならないんじゃないかって気もしてきたので、この辺にしとくか。


とうとうUTF-8に移行完了


 直前のエントリで、素晴らしく文字コードの混在した糞XMLファイルを得るところまでは行った訳だが、ふと思ったのだ。
 こいつを無理矢理文字コード統一すりゃいいんじゃ?

 つーことで、Perl5.8の出番である。ネイティブでUCS対応であり、Encode.pmも割と安定している様子でもある。
 ただ、EUCとUTF-8の区別は元々難しそうな気もする。短い文字列では特に。Encode.pmが手抜きコードでないことを祈る。まあ、日本人も関わりまくってるだろうから平気かなあ。どうだろうなあ。
 ともあれ、書いてみる。Encode.pm側で文字コードを決めきれない時はエラー終了するようにしておこう。

use strict;
use utf8;
use Encode;
use Encode::Guess qw( euc-jp );
use FileHandle;

my $target = 'wordpress.2008-01-02.xml';

my $in = new FileHandle $target;
binmode $in;
my $out = new FileHandle ">out.xml";
binmode $out;

while ( defined ( $_ = <$in> ) ) {
	my $decoder = Encode::Guess->guess( $_ );
	ref $decoder or die "Can't guess at line $.";
	print $out encode( 'shift_jis', $decoder->decode( $_ ) );
}

close $in;
close $out;

 こんなもんか。超俺専用のその場書き捨てコードだな。でもまーファイルネームのとこだけ書き換えればみんなで使い回せるね!(使わない)

 つーか思いっきり行単位で処理してるけど大丈夫かなあ(笑)。
 まあ、万が一漏れがあったら、バックアップから手作業で直すか。もうマジめんどくせーし(笑)。
 何気に出力をShift_JISにしているが、UTF-8に直接出すと波形ダッシュ問題に引っ掛かる可能性が出てくる為である。本当はbinmodeで$outのencodingをどうこうなんじゃないかとか思ったが調べるのめんどいので。

 で、Encode::Guessをutf-8とeuc-jpだけに限定したお陰か、全て迷わず判別してくれたようだ。信じていいのかは知らないが。
 つーことで、仕上げにローカルのテキストエディタでXMLファイルを丸ごとUTF-8に変換してから、真っ新のWordPress日本語版(MEでなく本家側にいつの間にかあった)の環境を鯖上に構築し、インポートしてみる。成功。おおおおお。

 その後、ちょこちょこ弄ったけど問題無さそうなので、公開してみる。
 何か問題が出ていたら突っ込みをお願いしたく。

 なお、海外のテーマが壊れる問題は無くなったし、ダッシュボードがまともに表示されない問題も解決した。めでたし。


謹賀新年


 あけましておめでとうございます。今年もよろしくお願いします。

 新年を機に、今度こそWordPress ME 2.0を脱却すべくUTF-8に移行しようとしたわけですが。
 本家版2.3を別ディレクトリに用意して、DBをUTF-8に移行して、とかやって、またしても失敗した訳で。

 で、もう何か根本的に違う方法でいいからどうにかしちまおうぜ、と思って、エクスポートしてインポートするという手法がありそうだなと思った訳さ。
 んで探したら、XMLでエクスポート可能らしいじゃん。そりゃいい。WXR形式とか呼ぶらしいがどうでもいいな。とにかくやってみようぜえ。
 えーと。2.1以降で標準装備か。2.0だとWordPress-to-WordPress Importプラグインって奴が必要らしい。オーケーオーケー。早速入れるぜ。
 動かないぜ。

 えーとー。

 MEだとバージョンチェックが狂うっぽいのかな。substr( get_bloginfo(’version’), 0, 3 )のとこを、0じゃなくて2に書き換えればいいらしい。二ヶ所とも。MEだとバージョン文字列の頭に二文字ゴミでもあるのかな。知らんけど。ああ、もしかしたらこの’ME2.0.x’ってそのままバージョンなのかな。なるほど分かりやすい。
 つーことで、書き換えたら使えるようになった。

 で、エクスポートしてから、試しに新環境を立ち上げてインポートしてみたら、記事本文が全く読み込まれない。うぜえ。
 XMLファイルの中身を見てみる。
 本文だけEUCです。タイトルとかその他全部UTF-8です。
 マジうぜえ。

 適当に検索した感じ、どうやらこのバグは把握されてるけど放置状態のようだ。EUC環境の人はDBを直接バックアップしてね、という状況のようで。はあ。
 MT形式に吐き出すプラグインとかもあるらしいが、うーむ。何か情報が欠けそうでなあ。
 まあ、またしばらく考えてみるか…。


先読みレンダする最大フレーム数の意味


 あるいはMax frames to render aheadの意味について。

 GeForceでCoolBits2を有効にすると、クラシックコントロールパネルにDirect3Dの追加設定が現れ、そこに「先読みレンダする最大フレーム数」という項目が現れる。英語版だと"Max frames to render ahead"になる。最新のForceWareでも現れるのかどうかは知らないが。
 玄人志向のGeForce7900GSカードを差したついでに、一通りの設定を見直すことにしてみたのだが、ここがやっぱり気になる。だが、意味が分からない。「0がいい」「いや2くらいが良かった」とか聞いても何の参考にもならん。そもそも何の設定なのかを教えろ。

 ということで軽く検索するが、日本語で調べても10件目までにヒットしてくれないので諦めて、英語で調べたら一件目でちゃんと解説されてて嫌になる。

 つまりは、CPUによるプリレンダリングを何フレームまでやらせちゃうか、っつー話らしい。GPUがレンダリング終わらなくても、CPUには先に仕事しといてもらう、って奴だろうか。
 これは、かなりGPUの負荷が高い状況を想定していると思われるが、昨今のオンラインゲームなんかはCPUの方が足引っ張り率が高そうな気が。
 まあ、最適値がどうなるかは、CPUとGPUの能力バランスによるってことだよな。CPUの足引っ張り度が高いなら、低く設定した方がいいはずだ。特に0にすると露骨に変わってもおかしくない。
 が、CPU負荷が高いのか、それともGPU負荷が高いのかなんてのは、アプリによって激しく変わる訳だ。普通に「パフォーマンスと品質の設定」に入れておいてくれれば、ゲームによって調整も出来るのに、何でこんな変なところに隠しておくんだろう。まあ、自己責任でやって欲しい部分なのかもなあ(笑)。

 で、うちでは「GPU負荷の方が高いぜ」などという凶悪なゲームを走らせることが全く無いので、0に設定した。ゆめりあベンチの数値とかは当然悪化すると思われるが、どうでもいいです。
 それじゃ早速、何か適当なゲームを起動して…。

 えーと。
 普段やってるゲームで重いゲームが無いんですが。
 FEZも完全にやめちゃったしなあ。エンチャを導入した人に10年分くらいの怨念を。バランシングに関わるなー、バランシングに関わるなー。
 実験用に再インストールしようにも、nProのことを思うと二の足を踏むし。

 まあ、相変わらずマビメインだから、変わるとしたらデザドラかな…。
 ダンバ銀行前は全然違いが分からなかった。どっちも15fps前後。しょぼいな(笑)。CPU交換となると、M/Bとメモリも交換だから辛いんだよな。
 デザドラはすぐに確認出来るもんでもないから、しばらくこの設定にしとくか。理屈では俺マシンには最適だと思うし。Athlon64 3500+にGeForce 7900GSじゃアンバランスだよなあ。購入時期が違いすぎるから仕方ないが。

 ちなみに玄人志向のカードだが、今のところ普通にいいカードなんじゃないかという気がしている。電解コンの存在感はELSAの7600GTカードより多めに見えなくもないが、その辺は素人なんでよく分からん。
 玄人志向は何となく嫌だったのだが、その理由ってのが、メルコ製のUMBローダがどうもバグるんで解析したら信じられないほどの超ウンココードだった、という物なので(笑)、さすがにドッグイヤー的に考えて時効にすべき案件であろう。うむ。

 …と、ここまででこのエントリは一段落と思ってたが、マルチコアになるとまた変わってくるのだろうか。でもアプリのマルチスレッド化の具合にもよるよなあ…。
 むーん。やっぱアプリ別に設定させて欲しいなあ。

追記:
 追記は極力しない方針だけど、久々にRefererログを取ったら、ここが0を推奨する記事という誤解があったようなので、補足。

  • 明らかに利用状況次第なので推奨値は無い
  • うちでは0がいいけど恐らくレアケース
  • GPUがフルロードになりがちなら0は非推奨
  • CPUがフルロードになりがちなら0が有力
  • たぶんね

 書いた時点では、読めばこれらのことは分かりそうと思ってたけど、久々に自分で読み返したら本人ですら少し理解に時間が掛かったので。詰め込んだコードみたいに。コードも詰め込む癖あるからなあ(笑)。
 あと、最後のとこでマルチコアに触れてるけど、古い記事だからMT対応の進展がまだ不明だったので曖昧なまま終わってるんだよな。結局アムダールの法則には勝てないのかな、という趨勢なので、0はどんどん非推奨になりそう。1は普通に考えて一番無難。昨今のCPU使用率の余りっぷりから察するに、2や3くらいあってもいいかも。完全にアプリ次第だが。うちはシングルコアの古いCPUに少しだけ新しいビデオカードという構成でMMOばかりやるからCPU100%が当たり前なせいか、未だに0が有効だけど。
 って補足を書いてると思うけど、同じ内容の繰り返しになってるのが気になるんだよな、プログラマ的に(笑)。まあでも、詰め込みすぎたコードにコメント入れるようなもんと思えばいいか。

再度の追記:
 全く別方面の切り口から、実は0が最適らしいという説が。
 真偽は不明なのだが、遅延フレームとしてそのまま響く、という説があるらしい。本当なら0以外はゲーマー的には論外だよな…。でもデマかもしれんし。情報欲しいなあ。さすがに1/60秒の差を体感で比べて断言出来るかは自信が無いし。


北斗の拳ONLINEのCBTに当選したので参加したいのだが


 北斗の拳がオンラインですよ!
 わーい楽しみだー。

 ええ、ある意味楽しみですよ。本当に。嘘ついたことないよ。

 とにかくクライアントをダウンロードしてみようぜえ。開始から既に三日くらい経過してるようだから速攻落ちてくるだろ。
 と思ったけど、何か軽く六時間くらい掛かりました。光ですが。ええ、こんな時に光とか関係ないですね。

 まあいい。速攻でインストールして、速攻で起動だぜ。
 何かやたらと企業ロゴが続くな。スキップも出来ねー。だりー。デスクリも目じゃないっすね。さすが。
 んで、ログイン画面だ。

 …相変わらずガンホーはID覚えられないぜ。ゲームごとに適当なランダム文字列を付加するのやめてくれ。mikokeiFWAiRwとかそんな文字列になるんですよ。覚えられねーっつの。
 で、フルスクリーンで起動されてるんで、alt+tabでガンホー公式を見てきて、と。
 あー、クラ落ちてますね。なるほど。フルスクリーン固定かつ別窓切り替えも禁止なのですね。とても懐かしい感覚ですね!

 よって、クリップボードにIDをコピーした。起動。ロゴ。ロゴ。ロゴ。うぜえ。
 ログイン画面。

 …どうやらペースト不可能?

 もうこうなったら意地なので、IDのランダム文字列様を必死に暗記した。
 もう一度起動。はいはいロゴロゴ。ログイン画面。ログイン成功。よっしゃ。いやいや、こんなところで達成感を得ても。
 ああ、もちろんID記憶機能とか無さそうです。こうでなくっちゃな。

 で、キャラメイク。ふむふむ。色々あるけど微妙に不自由だな。まあ北斗の拳だから別にそこまでアレか。適当に作ろう。
 と思ったけどやっぱり色々悩んでパーツを合わせまくってると、急にやたらと重くなる。何じゃこりゃー。
 重すぎるので、ログイン画面に戻ってからキャラメイクに入り直す。よしよし、ちゃんと軽くなったぜ。つーかこれ相当やばい出来じゃね?(笑)

 んで、キャラ名を入れようとした瞬間に例外落ち。ハハハハハ。
 これはひどい。
 何回か試した感じ、IMEがonな時に入力すると落ちるな。確実に。まあ、ATOKのせいかもしれんけどなあ。一時的に切り替えるか。
 で、MS-IMEに切り替えてプレイしたらキャラ名の入力に成功。何だかどんどん攻略が進んでいく気分ですよね。

 そして、とうとうキャラメイク完了。やっとゲームが出来るっつーの。
 で、キャラ選んでゲーム開始。

 サーバと繋がらないようです。
 ええーと…。

 公式を見てみた。

 うっはあ。すげえ。マジか。

 UDPしか使わないんで何とかしやがれ、とのことです(笑)。すっげえええええ。神レベルの開発チームと見た。
 いや、何つーか、マジかよ(笑)。いやいやいや。これは無いって(笑)。

 面白すぎるので、とことん付き合おうぜえ。
 えーと、UDPのポート番号は…。

 ANY…。

 ANYだとおおおおおおおおおおおおおおおおおお?

 おいおいおいおいおいおい。
 いやいや。いやいやいやいやいや。ちょっと待って。待ってくれ。すげえから。

 ここらで激しく暴言を書きそうになったけど、つーか書いたけど、我に返ってBackSpace。
 いやー凄いス。神業スヨ。もうとことん行っちゃおうぜ!

 でもなあ。UDP全通しですか。頭おかしくなりそうですね。つーか頭おかしいですね。
 とにかく、ルータに命令しました。やりました。俺PCにUDP全ポートをフォワードしやがれと!

 繋がんねえし。

 いよいよアレなので、2chの様子を見てみた。
 ふむふむ。結局のところ、YBB以外は誰も繋がらない状態らしいな。ハハハハハ。

 これほどまでにハイクオリティな展開は初めてだ。どうしよう。感動を表現する言葉が見付けられなくてもどかしいなんて。こんな気持ちになれるなんて思わなかった。ありがとうガンホーとかその他の関係者の人達とか。
 あと、バーカ。