とうとう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秒の差を体感で比べて断言出来るかは自信が無いし。


国内鯖からのブルートフォース攻撃


(以下の記事は、該当鯖の管理の人から連絡があり、解決したっぽい模様なので、一部の文字列を潰しておきます)

 denyhosts導入ですっかりスマートになったsecurity run outputをニヤニヤしながら眺めていたら、何か***.***.***.***.dedicated.sakura.ne.jp (***.***.***.***)からの接続をrefuseしたぜー、とか書いてあったんで、何かしらミスしてないか気になってログを見てみる。
 ふむ、sshdに対して、nagios、mambo、rusticos、test、irc、robomail、cyrus、といったユーザー名で接続を試みて、閾値(うちのは結構緩いはず)を超えたんでrefuse登録っぽいな。普通にブルートフォース攻撃にしか見えないな。
 さらに、検索エンジンにIPアドレスを投げたら、BruteForceBlockerの公式サイトのリストにヒットした。ここまで来ればほぼ間違い無いか。

 んで、適当に調べて、dedicated.sakura.ne.jpは「さくらの専用サーバ」というサービスのドメインであることが分かる。ちなみに、さくらが提供する「専用サーバ」は別のサービスで、微妙に高くてうざい。ぶっちゃけこの辺の違いは良く分からんが。
 まあ、さくらで「専用」を付ける場合、たぶんrootも全部渡すタイプだと思うんで、普通に踏み台になってるんかなあ、と。もしそうなら深刻な問題だろうなあ。あちらにとっては。
 また、HTTPを叩いたら***.***に繋がった。何か***プロジェクトっぽいが。しかも会員登録フォームとかログインフォームとかあるぞ。大丈夫だろうか。
 うーん。何か言っといた方がいいんだろか。でも昔、母の知人からウィルス感染メールが来た時、説明が無駄に面倒だった記憶が…。うーん。
 つーかダミーサイトかもしれんしなあ。

 ちなみにdenyhostsの稼働状況だが、一日でdenyを自動解除する設定でも、再犯するホストはほとんど無いようだ。めっきり攻撃も減っていて、たまにdenyリストが全て消えることも。
 /usr/local/share/denyhosts/data/purge-historyには前科リストがあるが、前科二犯は一つしか無い。せっかくだからもう一度来て永久規制になって欲しい気持ちもあるが(笑)。

(伏字を入れたら何か妙に怪しいエントリになった気がしなくもなく)


新鯖移行完了?


 今日から一週間+半日ちょいで、旧鯖の契約が切れることになる。
 DNSのキャッシュ期限を一週間に設定している都合上、今日が移行期限となる。まあ、キャッシュ期限短く変更しときゃ、色々と不安も少なかったんだが。分かってて何故か放置することって良くあるよな。無いか。俺だけか。

 つーことで、WebとIRCの移行を一気に片付ける。
 IRCはircd-hybridに移行したが、大丈夫かなあ。
 旧鯖ではWebDAVも動かしていたが、何だかobsoleteな気配がしまくっているので停止。この手の身内向け共有ツールって無いんすかね。出来れば同期機能みたいなのもあるといいけど。日本語ファイル名対応でさ。ありそうだけどなあ。
 メールボックスも最後に一応見直しておいたが、完全にメール放置っぽい人が一人いた。一応新鯖に中身をコピーしといたけど、要らないんだろうなあ。

 さて、俺PCも何とかせんとな…。