まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 前月 翌月 > 最新


2009-05-06 (水)

PukiWiki 用プラグイン favicon 1.4 を公開

favicon.inc.php は、 指定した URL の favicon を表示するプラグインです。 外部リンクの部分に、リンク先のページの favicon を表示することができるようになります。

バージョン 1.3 からの変更点:

  • レスポンスヘッダで送信する Content-Type を厳密に
  • 暫定的に、BMP 形式の favicon は表示しないように修正
  • 定数名を PLUGIN_FAVICON_PROXY_URL から PLUGIN_FAVICON_API_URL に変更
  • ライセンスを MIT ライセンスに変更

今回のバージョンアップは、以下の件に関するセキュリティ fix を含んでいます。

要するに、BMP 形式の画像を IE で表示するのは危険ということなのですが、 今までのバージョンの favicon.inc.php は、この件で踏み台のように使われる危険性があったので、その対策を行いました。 旧バージョンのプラグインを利用している方は、なるべく早めにバージョンアップすることをお勧めします。

Tags: PukiWiki | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2009-05-10 (日)

IE8 に対応した SIE 0.46 がリリース

SIE は Internet Explorer で SVG を表示可能にする JavaScript ライブラリです。

バージョン 0.45 からの変更点は以下の通りです。 他にもいろいろと修正がされているようなのですが、細かい部分はよく分からないので要点だけまとめておきます。

  • IE8 の標準モードでも描画がされるように対応
  • radialGradient の描画の修正

正直言って、私は IE8 に対応するのは無理だろうと思っていたのですが、 作者の dhrname さんがやり遂げてくれました。 この努力には、本当に敬意を表します。

ただし、IE8 の標準モードでは、VML の描画が遅いなどいろいろ制限があるようなので、 なるべくなら、SIE を使うページでは互換モードになるようにして使う方が良いと思います。

Tags: SVG | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2009-05-12 (火)

Ubuntu 8.04 (Hardy Heron) のハイバネートが正常に行われるようにする

もしかしたら、最新の Ubuntu 9.04 では直っているのかもしれませんが、 Ubuntu 8.04 のデフォルトの設定では、ハイバネートに失敗することがあります。 それをどう修正するか、という話です。

まずは検索してみると、以下のページが見つかりました。

どうも、/sys/power/image_size の値がデフォルトでは 500 MB に設定されているので、 ウィンドウをたくさん開いたりした状態でハイバネートすると、 メモリの内容が一部破棄されてしまう、ということのようです。

解決策としては、 /sys/power/image_size の値をもっと大きくするか、ゼロに設定すれば良いようですが、 上記のページの説明通りにやると、おそらくうまくいかないと思います。

のスレッドの一番最後の方に、次のように書かれていました。

Just a note for Hardy users. If you were using the 01-image_size.sh script and use the "Hibernate" button from GNOME (System>Quit...>Hibernate), you will have to put the script at another location.

It should now be in /etc/pm/sleep.d/01-image_size.sh instead of /etc/acpi/suspend.d/01-image_size.sh (or it could be at both places). Apparently when suspending with GNOME, that uses the pm-utils packages which expects custom scripts at that location.

つまり、サスペンドやハイバネート用のスクリプトの置き場所は、

  • CUI 用
    • /etc/acpi/suspend.d
  • GNOME 用 (pm-utils 用)
    • /usr/lib/pm-utils/sleep.d
    • /etc/pm/sleep.d

のように分かれているようです。 念のため、/etc/acpi/suspend.d にだけスクリプトを置いて、 GUI のハイバネートボタンを押してみましたが、それだと設定が有効になりませんでした。 ということで、結局、作業としては次のようにしました。

まず、sudo vi /etc/pm/sleep.d/01imagesize のようなコマンドを実行して、 次のようなスクリプトを作成します。

#!/bin/sh

echo 0 > /sys/power/image_size

その後、以下のコマンドを実行し、スクリプトに実行権限を与えておきます。

$ chmod 755 /etc/pm/sleep.d/01imagesize

まだ十分にテストしたわけではありませんが、少し試してみた感じでは、 この修正により、ハイバネートが正常に動作するようになったようです。 少なくとも、以前よりは安心してハイバネートボタンを押せるようになりました。

Tags: Ubuntu | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2009-05-16 (土)

VirtualBox をサスペンド&ハイバネートに対応させる

Ubuntu に VirtualBox をインストールして使っているのですが、 ホスト側でハイバネートすると、ゲストの仮想マシンがフリーズしてしまいます。 使い勝手が悪くて仕方がないので、これをなんとかしてみます。

考え方としては、ハイバネートの処理中に、 仮想マシンが自動的に savestate されるようにしてやれば良いはずです。 そういうキーワードで検索してみると、こういうページが見つかりました。

ここにあるシェルスクリプトを使えば良さそうです。 しかし、実際に試してみると、VirtualBox 2.2 では動作しないなど、いろいろと不満な点があったため、 私の方でスクリプトを若干いじってみました。

  • VirtualBox 2.2 以降でも動くように修正
  • サスペンドとハイバネートを区別するように修正
  • 複数のユーザーが VirtualBox を起動していた場合におそらく対応

修正したシェルスクリプトを、以下に載せておきます。 このスクリプトを /etc/pm/sleep.d/90virtualbox に保存し、実行属性を与えてやれば、 ハイバネート時に仮想マシンが自動停止されるようになります。 Ubuntu 8.04 で動作確認しましたが、他のディストリビューションでも同じように使えると思います。

#!/bin/bash

suspend_vms()
{
    for USER in $(ps h -C VirtualBox -o user | uniq); do
        for VM in $(sudo -u $USER VBoxManage list runningvms | grep -o "[0-9a-f-]\{36\}"); do
            sudo -u $USER VBoxManage controlvm $VM savestate
        done
    done
}

case "$1" in
#	hibernate|suspend)
	hibernate)
		suspend_vms
		;;
	*)
		;;
esac

exit $?

なお、このスクリプトでは、ハイバネートの時だけ仮想マシンを停止するようにしてあります。 サスペンドの時にもそうさせたい場合には、 hibernate|suspend) という行のコメントを外し、hibernate) という行をコメントアウトして下さい。

Tags: VirtualBox | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

2009-05-24 (日)

Zend_Loader_Autoloader クラスの正しい使い方

まずは結論を。 Zend_Loader_Autoloader クラスを用いる際には、 registerNamespace() メソッドは使わず、 setFallbackAutoloader(true) に設定しておくべきです。


Zend Framework 1.8 では、Zend_Loader_Autoloader というクラスが新設され、 従来の Zend_Loader::registerAutoload() メソッドは、 Zend Framework 2.0 以降では廃止される予定となりました。

ところが、Zend_Loader_Autoloader クラスを用いるようコードを書き換えてみると、 困ったことに、PEAR のライブラリや Revulo_View_Phtmlc のような独自クラスをオートロードしてくれません。 この問題の解決策として、マニュアルには2つの方法が示されています。

  • $autoloader->setFallbackAutoloader(true); に設定する
  • $autoloader->registerNamespace('Revulo_'); のように、必要なだけネームスペース (prefix) を追加する

setFallbackAutoloader() メソッド

fallback というネーミングがあまり良くないと思うのですが、これは 「Zend_Loader::loadClass() をデフォルトのオートローダとして用いるかどうか?」 という設定をするメソッドです。

Zend_Loader::loadClass() は、Zend Framework や PEAR 形式のクラス名に対応しています。 そのため、setFallbackAutoloader(true) に設定すれば、 PEAR や openpear のクラスは全て自動的に読み込んでくれます。 つまり、以前の Zend_Loader::registerAutoload() と同じ動作をしてくれるようになります。

registerNamespace() メソッド

デフォルトの設定では、 オートロードされるのは Zend_ か ZendX_ という prefix を持つクラスに限定されていますが、 registerNamespace() メソッドを使うことで、この prefix を追加することができます。

ところが、Zend_Loader_Autoloader のコード (特に getClassAutoloaders() メソッドの辺り) を読んでみると、 実は、registerNamespace() でネームスペースを追加すればするほど動作は遅くなることが分かります。 つまり、登録するネームスペースの数はなるべく少なくしておく方が良いです。


この考えを突き詰めていくと、 そもそも setFallbackAutoloader(true) に設定すれば、 Zend_ と ZendX_ というネームスペースの登録は必要なかったりします。 以上のことから、Zend_Loader_Autoloader クラスを用いる際には、

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->unregisterNamespace(array('Zend_', 'ZendX_'))
           ->setFallbackAutoloader(true);

という使い方をするのが、最も効率がよいと思います。

実際には、unregisterNamespace() メソッドは無理に使わなくても良いと思いますし、 ベンチマークを取っても差はほとんど出ないと思いますが、 registerNamespace() メソッドを使うくらいなら、 setFallbackAutoloader(true) に設定する方がよい、ということです。


・・・・と、書いていて分からなくなったのですが、 そもそも registerNamespace() メソッドの存在意義ってあるんでしょうか? Zend_Loader_Autoloader クラスを、

  • setFallbackAutoloader(true) をデフォルトの設定にする
  • $_namespaces などというプロパティはなくしてしまう

のように仕様変更して、

  • 通常は、デフォルトのオートローダ (Zend_Loader::loadClass()) に処理を任せる
  • Zend Framework や PEAR とは異なる命名規則のクラスも扱いたい場合は、pushAutoloader() でそれ用のコールバック関数を追加する

という動作にしてくれた方が、シンプルかつ高速になると思うのですが。

Tags: Zend | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink

追記