まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2007/04/28(土)WordPress XML形式のインポート対応

adiary 1.30以降(β含まず)では、WordPress XML形式のインポートに対応しました。

注意点など

WordPressのエクスポートには(ME2.1.3現在)EUC-JP環境で文字化けする既知の問題があります。

wp-admin/export.php がエクスポートの実体で、大半はデータベースから引っ張ってきたデータをそのまま出力しているのですが、タイトルやカテゴリの出力の際だけ

<title><?php bloginfo_rss('name'); ?></title>
<title><?php the_title_rss() ?></title>
<?php the_category_rss() ?>

というよりにRSS出力ルーチンを呼び出しています。RSS出力ということは当然 UTF-8 です。その他のデータベースから取り出したデータは EUC-JP です。1つのファイルに複数の文字コードが混在することになり、かなり致命的です。

こういう部分をみると、元々他言語対応でないシステムを他言語対応にするのって大変なんだなって思いますね(^^;


……以前より実装されいてるSQLバックアップの方がトラブルは発生しないと思いますが、WordPress2.1.xにはその形式出力はない模様。wp-db-backup か phpMyAdmin でデータベースをダンプしてインポートください。

2007/04/26(木)adiary Version 1.30β公開情報

ダウンロードはこちらからadiary-1.29 で始まるファイルを探してください。

このバージョンはβ版です。テストにご協力頂ける方(多少トラブルが起きても構わない方)のみダウンロードしてください。

Ver1.22→Ver1.30βの変更点

  • プライベート日記モード(強制非公開モード)を強化し、日記帳一覧などにも表示されないようにしました。
  • 画像リンク、http記法リンクに rel 属性を設定できるようになりました(日記帳の詳細設定から行ってください)。
  • マルチユーザーモード時に、blog名を表示できるようにしました。
  • はてな新テーマのために若干の修正を行いました。
  • 非公開日記のカテゴリも扱えるように仕様変更しました。
  • 多重ログインができるようになりました*1
  • 記事ID(0123などの記事番号)を変えずにインポートする機能が付きました。
  • はてなライクな見出しカテゴリに対応しました。
  • 【記法】uncタグができました。
  • 【内部処理】utf8 から他のエンコードへの変換が3倍ぐらい速くなりました
  • 【fix】Windows環境(IIS/AN HTTPD, Apache除く)において動作しないバグを修正しました。(Thanks to ひとぅ)
  • 【fix】画像の下部に1pxの空間ができる CSS の問題を修正しました。
  • 【fix】popup用がIEでうまく動作しないバグを修正しました(popup用ブロック <div id="_popup"> のID が HTML4.0違反だったことが原因)。
  • 【fix】URL自動リンクが ~ に対して無効だったので修正しました。
  • 【fix】空白を含むカテゴリ名を編集できないバグを修正しました。
  • 【fix】インポート画面で、はてな形式の取り込みオプションが表示されない不具合を修正しました。*2
  • その他細々とした修正。

変更点について

ユーザー承認関係を変更した関係で、アップグレード用にファイルを差し替えると、ログイン中のセッションがすべて無効になります。ご了承ください(ログインしなおしてください)。

マルチユーザーモードのtopにblog名を表示出来るようになりました。blog名を一覧するタイプのトップページを表示するには、adiary.conf.cgi の次の箇所を修正してください(表示確認は移行処理を行ってからお願いします)。

<$v.multiuser_top_skelton = "_multiuser_top">
↓
<$v.multiuser_top_skelton = "_multiuser_top2">

他にもマルチユーザモード関連の設定項目が増えておりますので、必要ならば新しいサンプルを参照ください。

はてなライクな見出しカテゴリに対応しました。

*[test][カテゴリ]見出し

システム上カテゴリとしては認識してないのですが*3、検索への自動リンクを張りますので実用上はあまり問題ないと思います。

*1 : 標準ではオフです。セキュリティの観点からあまりおすすめはしません。

*2 : アップデートしてもでなかったらスーパーリロードしてください。

*3 : あくまでカテゴリは記事1つに対して付くので

Version1.21以降からの乗り換え

上書き後、管理者ユーザーでログインし「管理」→「システム管理」→「管理者メニュー」→「Version 1.22以前 → Version 1.30以降へのアップグレード」を行ってください。

  • popup記法や,Amazon記法の画像popupをご利用の方は、該当の日記帳で「日記帳の再構築」を行ってください。

Version1.20以前からの乗り換え

本リリースを上書き後、先にVersion1.21リリース情報の該当乗り換え処理を行ってください。

2007/04/26(木)perl の Encode で find_encode は使えるのか?

perl tips - Encodeを速く使う方法によると、find_encoding を使うと、Encode による文字変換が早くなるらしいということで実験してみました。

実験条件

  • use utf8 しない(use utf8 はトラブルが多すぎてやってられないので)。
  • 変換前も変換後も utf8 フラグは立っていないこと。
  • 実験用データとして、42KBのテキストファイル(EUC-JP, 日本語半分ぐらい)を用意。

ソースはこんな感じです。引数に処理したい euc-jp のテキストファイル名を与えます。

use strict;
use Benchmark;
use Encode;
use Encode::Guess qw(euc-jp shiftjis iso-2022-jp);

my $euc = join('', <>);
my $utf = $euc;
Encode::from_to($utf, "euc-jp", "utf8");

my $euc_obj = find_encoding('euc-jp');
my $utf_obj = find_encoding('utf8');

my %test;
$test{fromto_u2e} = sub {
	my $x = $utf;
	Encode::from_to($x, "utf8", "euc-jp");
};
$test{fromto_e2u} = sub {
	my $x = $euc;
	Encode::from_to($x, "euc-jp", "utf8");
};
$test{find1_u2e} = sub {
	my $x = $euc_obj->encode( $utf_obj->decode($utf) );
};
$test{find1_e2u} = sub {
	my $x = $utf_obj->encode( $euc_obj->decode($euc) );
};
$test{find2_u2e} = sub {
	my $x = $utf;
	Encode::_utf8_on($x);
	$x = $euc_obj->encode( $x );
};
$test{find2_e2u} = sub {
	my $x = $euc_obj->decode($euc);
	Encode::_utf8_off($x);
};
$test{encode_u2e} = sub {
	my $x = $utf;
	Encode::_utf8_on($x);
	$x = encode('euc-jp', $x);
	print $x;
};
$test{decode_e2u} = sub {
	my $x = decode('euc-jp', $euc);
	Encode::_utf8_off($x);
};
timethese(1000,\%test);

結果は次のとおりになりました。

方式utf8 to euceuc to utf8
from_to100.26/s336.84/s
find_encoding103.92/s380.20/s
find_encoding + _utf_on/off357.21/s397.93/s
encode/decode304.76/s350.68/s

utf8からutf8(フラグ付き)への変換=utf8文字列の検証が入らないので速くなりましたが、ほかは大して変わりません。use utf8 しない環境では find_encodeを使うほどでもないなぁーという感じもします。

つまり、utf8を他の文字コードに変換する場合は、Encode::_utf8_on() + encode を使うと速い。短い文字列を多量に処理するのでなければ、ほかは大して変わらない。ということだと思います。

というわけで

早速adiaryに組み込んでみよう(笑)