2009-06-02 (火)
■ Ubuntu 8.04 (Hardy) で動作クロックを簡単に変更する
我が家の Windows マシンには、 CrystalCPUID というソフトウェアをインストールして、 タスクトレイから簡単に動作クロックを変更できるようにしています。 同じようなことが Linux でもできないのか調べてみたところ、 以下のページに方法が載っていました。
ここに書かれているように、
$ sudo dpkg-reconfigure gnome-applets
を実行すると、
Should cpufreq-selector run with root privileges?
と聞かれるので、<はい> と答えます。
後は、「CPU 周波数の計測モニタ」をパネルに追加すれば、 アイコンを左クリックすることで、動作クロックを変更できるようになります。
2009-06-11 (木)
■ 携帯絵文字ライブラリ HTML_Emoji 0.1 を公開しました
HTML_Emoji は携帯の絵文字を変換するライブラリです。PHP 4 以上で動作します。
次のような機能があります。
- docomo, au, SoftBank の絵文字に対応 (隠し絵文字を含む)
- 他キャリアの絵文字を、類似の絵文字に変換可能
- PCでは gif 形式の画像に変換して表示
- 絵文字の入出力は、UTF-8, Shift_JIS のバイナリ形式
- 文字エンコーディングを UTF-8 と Shift_JIS 間で相互に変換可能
- User Agent からキャリアを自動判別 (キャリアを指定することも可能)
同様のライブラリとしては、 MobilePictogramConverter などがすでにあるのですが、
- 使い方が複雑で分かりにくい
- 3キャリアの絵文字が混在したテキストを処理できない
- 遅い?
といった点が不満に感じられたので、自分なりのものを作ってみました。 イメージとしては、Perl の Encode::JP::Mobile モジュールに近いです。 機能は限定してありますが、その分、使いやすくなっていると思います。
なお、 FireMobileSimulator を使っての動作確認は行ってありますが、 実機 (特にソフトバンクの 2G 携帯) での動作確認がまだ不十分です。 動作サンプルもいくつか置いてありますので、できたらテストにご協力下さい。 もっとこうした方が良い、といった意見やアドバイスも歓迎します。
2009-06-12 (金)
■ 絵文字変換ライブラリの処理速度の比較
先日リリースした HTML_Emoji ライブラリ は、 高速に動作することを開発目標の1つとしています。 実際に、他のライブラリと比較してどの程度速いのか、ベンチマークを取ってみました。
方法
使用したライブラリ:
- MobilePictogramConverter 1.2.0
- Text_Pictogram_Mobile 0.0.2
- HTML_Emoji 0.1
ただし MobilePictogramConverter は、ezweb.php の絵文字抽出正規表現を次のように修正しています。
var $regex = array(
'WEB' => '/<img\s+(icon|localsrc)="?([0-9]+)"?[^>]*?>/ie',
'IMG' => '/(<img src="{PATH}\/(\d{1,3})\.gif"[^>]*?>)/ie',
);
実験方法:
- 漢字 100 文字のものと、絵文字 100 文字のものの2種類のデータを使用
(つまり、絵文字の割合が 0% のケースと、100% のケースを測定しています)
- 以下のそれぞれの変換を 1000 回行うのにかかる時間を測定
- docomo UTF-8 のバイナリコードを au UTF-8 のバイナリコードに変換
- au の絵文字のエンコーディングを UTF-8 から Shift_JIS に変換
測定を行った環境:
- VMware Workstation 5.5.9
- Debian etch
- PHP 5.2.6
結果
結果を以下に示します。表中の数字は、処理にかかった秒数です。
- 別キャリアの絵文字への変換
| 漢字[s] | 絵文字[s] | |
|---|---|---|
| MobilePictogramConverter | 3.10 | 7.63 |
| Text_Pictogram_Mobile | 1.69 | 4.90 |
| HTML_Emoji | 0.01 | 0.48 |
- 文字エンコーディングの変換
| 漢字[s] | 絵文字[s] | |
|---|---|---|
| MobilePictogramConverter | 5.95 | 29.38 |
| Text_Pictogram_Mobile | 1.83 | 8.93 |
| HTML_Emoji | 0.04 | 0.57 |
HTML_Emoji は他のライブラリに比べて 10〜100 倍ほど速い、という結果が得られました。 HTML_Emoji に有利なテスト内容というのもありますが、 実際に測定していて、他のライブラリは処理にかなりの時間がかかるという印象を受けました。
測定に使用したスクリプトを置いておきますので、興味のある方は持って行って下さい。 各ライブラリの使い方の例としても、参考になるかと思います。
2009-06-14 (日)
■ 携帯絵文字ライブラリ HTML_Emoji 0.2 を公開しました
HTML_Emoji は携帯の絵文字を変換するライブラリです。PHP 4 以上で動作します。
バージョン 0.1 からの変更点は以下の通りです。
- SoftBank の Shift_JIS → UTF-8 の変換に対応
- SoftBank の UTF-8 → Webコード の変換に対応
- SoftBank の 2G 携帯には Webコードを送出するように変更
- PC 用の絵文字変換テーブルのフォーマットを変更
- au の blankhalf, blankquarter の画像を、他の絵文字と同じ幅で表示していたのを修正
SoftBank の絵文字で、片方向にしか変換できない部分があったので、その部分を実装しました。 PC 用の絵文字変換テーブルは、バージョン 0.1 では、
array(
"\xEE\x98\xBE" => "f89f.gif",
"\xEE\x98\xBF" => "f8a0.gif",
......
);
という形式でしたが、バージョン 0.2 では、メモリの消費量を少なくするために、
array(
"\xEE\x98\xBE" => "\xF8\x9F",
"\xEE\x98\xBF" => "\xF8\xA0",
....
);
というフォーマットに変更しました。
2009-06-17 (水)
■ 携帯絵文字ライブラリ HTML_Emoji 0.3 を公開しました
HTML_Emoji は携帯の絵文字を変換するライブラリです。PHP 4 以上で動作します。
バージョン 0.2 からの変更点は以下の通りです。
- 絵文字を使えるイー・モバイルの端末は、docomo の携帯として扱うように変更
- 将来の拡張用に、HTML_Emoji_Willcom, HTML_Emoji_Emobile クラスを作成
(現在は HTML_Emoji_Docomo クラスを継承しているだけで、使っていません) - docomo → au への変換で、ウェブ用の変換ルールが混ざっていたのを、メール用の変換ルールを用いるよう統一
- docomo → SoftBank への変換で、No.159, 160 の絵文字が半角になっていたのを全角に修正
イー・モバイルの存在をすっかり忘れていたので、処理を追加してみました。 ただし、バイナリ埋め込みでなく数値文字参照にしないと絵文字を表示できない、 という話も聞いているので、これで表示できるのかは分かりません。
イー・モバイルの端末 (H11T のモバイルブラウザ, H11HW, H12HW) をお持ちの方がいましたら、 これらのサンプルが表示できるかどうか、機種名と共に教えていただけると幸いです。
2009-06-21 (日)
■ 携帯絵文字ライブラリ HTML_Emoji 0.4 を公開しました
HTML_Emoji は携帯の絵文字を変換する PHP 用のライブラリです。 機能的には、Perl の Encode::JP::Mobile モジュールに近いです。
バージョン 0.3 からの変更点は以下の通りです。
- isSjisCarrier()、isUtf8Carrier() メソッドを追加
携帯用のページの文字エンコーディングは、 SoftBank の場合は UTF-8、それ以外の場合は Shift_JIS にするのが良いのですが、 今までは場合分けの処理を次のように書く必要がありました。
if ($carrier == 'pc' || $carrier == 'softbank') {
// UTF-8 で入出力を行うべき端末用の処理
......
} else {
// Shift_JIS で入出力を行うべき端末用の処理
......
}
バージョン 0.4 で新設された isSjisCarrier(), isUtf8Carrier() メソッドを使うと、 このコードは次のように書き直すことができます。
if ($emoji->isSjisCarrier()) {
// Shift_JIS で入出力を行うべき端末用の処理
......
} else {
// UTF-8 で入出力を行うべき端末用の処理
......
}
'softbank' といった定数を書かなくて済むようになるので、 この方がコードが分かりやすくなると思います。
2009-06-23 (火)
■ 携帯絵文字ライブラリ HTML_Emoji 0.5 を公開しました
HTML_Emoji は携帯の絵文字を変換する PHP 用のライブラリです。 機能的には、Perl の Encode::JP::Mobile モジュールに近いです。
バージョン 0.4 からの変更点は以下の通りです。
- au, SoftBank の絵文字を Shift_JIS → UTF-8 に変換するのに失敗する場合があったのを修正
- include_path の通ったディレクトリにインストールしないと使えなかったのを修正
文字化けする場合があるとの指摘を受けて調べてみましたが、 どうもこの処理がいけなかったようです。
$text = mb_encode_numericentity($text, $this->_sjismap, 'UCS-2');
半角文字(スペースや改行文字も含む)と Shift_JIS の絵文字が混在したテキストでは、 1文字=1バイトの部分と、1文字=2バイトの部分が存在します。 一方、文字エンコーディングを UCS-2 と指定すると、 問答無用で1文字=2バイトと仮定されてしまいます。 これが原因で、文字の区切りに失敗して、絵文字が壊されていたようです。
今までの方法のままでは対処するのが難しそうでしたので、 問題の起こっていた部分は、mb_substitute_character() 関数を使った変換方法に切り替えました。
2009-06-29 (月)
■ 携帯絵文字ライブラリ HTML_Emoji 0.6 を公開しました
HTML_Emoji は携帯の絵文字を変換する PHP 用のライブラリです。 Perl の Encode::JP::Mobile モジュールと同じような処理を、PHP でも行えるようになります。
バージョン 0.5 からの変更点は以下の通りです。
- 文字エンコーディングの変換時に、機種依存文字も変換されるように修正
バージョン 0.5 で mb_substitute_character() 関数を使う方法を導入しましたが、 これだと機種依存文字が含まれていた場合に、変換結果がひどいことになっていました。
そこでもう1度考え直してみたところ、 mb_encode_numericentity() 関数と mb_decode_numericentity() 関数をうまく使えば、 変換処理を非常にすっきりと書けることが分かったので、 バージョン 0.6 ではその方法を用いるよう書き換えました。
この方法の詳細については、別エントリで書く予定です。

# 通りすがり [なぜそんな極端なテストデータで実験されるのでしょう。 実際は遅いのを隠蔽しているように見えてしまいますので、 本当に..]
# revulo [極端というのは、絵文字の割合が 0% と 100% のデータを使っている点についてでしょうか? 例えば、絵文字の割合..]