本文へジャンプ

GIDEON STAFF BLOG

ICANNが悪質なドメイン登録業者を取り消し

ITmedia News - 悪名高きドメイン登録業者、ICANNが認定取り消しへ

ICANN - EstDomains Update: Notice of Termination Stayed

取り消しの理由はESTDomainsの社長が有罪になったからとのことで、悪質なドメイン登録を許していたからではない模様。

今回の措置が効果があったとしても、悪質なドメイン登録業者であっても代表者が有罪にならなければ登録業者としての取り消しができないということを示しており、必ずしも良いニュースとはいえない。

php からのディスクアクセス

php だという時点でアレなんですが…

php からディレクトリにある全ファイルの一覧を取得する処理のパフォーマンスを exec()popen()opendir() を利用した処理で比較してみる。

方法は単純にテスト用のディレクトリに 500 ファイルを用意して、 それぞれの関数を使用してファイル名一覧を取得する処理を 10回実行した場合の処理速度を計測する。

exec("ls -1") 0.774762
popen("ls -1") 0.865914
opendir() 0.136642

外部 shell を実行しないので opendir() が早いだろうとは予想していたが、 これほど差が出るとは思わなかった。
パフォーマンスを優先する場合は勿論だが、 余計なプロセスを生成しないので opendir() が地球に優しい様だ。

<?

	$func = array("byls", "bypopen", "byopendir");

	for($i=0; $i<3; $i++){
		$dist = array();
		$start[$i] = gett();
		for($j=0; $j<100; $j++)
			$dist[$j] = $func[$i]("/tmp/test");
		$end[$i] = gett();

		printf("%-10s:%f\n", $func[$i], $end[$i] - $start[$i]);
	}

	function	byls($dir)
	{

		exec("ls -1 $dir", $output);

		return($output);

	}

	function	bypopen($dir)
	{

		if(($fp = popen("ls -1 $dir", "r"))){
			while($buf = fgets($fp))
				$output[] = trim($buf);
			pclose($fp);

		}

		return($output);

	}

	function	byopendir($dir)
	{

		if($dir = dir($dir)){
			while($file = $dir->read())
				$outout[] = trim($file);
			$dir->close();
		}

	}

	function	gett()
	{

		$t = gettimeofday();
		return((float)($t['sec'] + $t['usec'] / 1000000.0));

	}

?>

ついでにシェルの glob なパターン指定を利用して 指定した文字列にマッチするファイル名の一覧取得を行う場合のテストもしてみた。

20071203000 から 20071203499 までの500個のファイルの中から、 200712032?? にマッチするファイル名の一覧取得で時間を計測してみる。

exec("ls -1 200712032??") 0.883770
popen("ls -1 200712032??") 0.902392
opendir() -> preg_match("/200712032../") 0.188792
glob("/200712032../") 0.203928

exec()popen() が遅いのは相変わらずだが、 preg_match() の呼出しが意外に早かったのが驚き。
正規表現のマッチ処理って基本的に相当時間がかかる筈なんだが…
glob() はファイルシステムに自分でアクセスしてる様なので早い。
複雑なパターン指定が必要なら preg_match() の方が柔軟だが、 シェルに渡せる程度のパターン指定なら glob() を利用するのが 可読性やメンテナンス性と性能が両立できて良いのかも?

Tweak

Leopard を使っていてちょっと便利な小技

  1. iTunes 8 から表示される様になった曲の右側の iTunes Store へのリンク矢印を表示させない
    $ defaults write com.apple.iTunes show-store-arrow-links -bool FALSE
    		

  2. iTunes 8 のブラウザ表示時にジャンルを表示させない
    $ defaults write com.apple.iTunes show-genre-when-browsing  -bool FALSE
    		

  3. Spaces が自動で切り替わるのを防止する
    $ defaults write com.apple.dock workspaces-auto-swoosh -bool NO
    		

  4. ドラッグで Spaces を移動する際の待ち時間を設定する
    $ defaults write com.apple.dock workspaces-edge-delay -float 0.5
    		

  5. HelpViewer のウィンドウをフローティングではなくする
    ヘルプが最前面にこなくなるので便利
    $ defaults write com.apple.helpviewer NormalWindow -bool YES 
    		

  6. ネットワークドライブに .DS_Dtore を作成しない
    $ defaults write com.apple.desktopservices DSDontWriteNetworkStores true 
    		

  7. X11 の終了確認ダイアログを無効にする
    $ defaults write org.x.x11 no_quit_alert false
    		

  8. Mail.spp で添付ファイルのインライン表示を無効にする
    $ defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
    		

  9. Front Row の iTunes トップソングの国を指定する
    $ defaults write com.apple.frontrow MusicStoreFrontID 国コード
    		

    代表的な国コード
    111111 デフォルト (アメリカ)
    143442 フランス
    143443 ドイツ
    143444 イギリス
    143447 フィンランド
    143449 アイルランド
    143460 オーストラリア
    143461 ニュージーランド
    143462 日本

NTFS-3G

BootCamp を利用して Windows とデュアルブートの環境を構築している場合、 Leopard 標準のドライバだと NTFS でフォーマットされたハードディスクには 読み込みのみしかアクセスできないので何かと不便である。

しかし MacFuse と NTFS-3G を利用すると NTFS でフォーマットされたディスクにも 何の問題もなく書き込みができるので便利である。
MacFuse も NTFS-3G も公式サイトではバイナリも配布されているが、 MacPort からも簡単にインストールできる。
NTFS-3G を利用するためには既に Leopard によってマウントされてる NTFS のディスクのマウントを解除した後で NTFS-3G によるマウントを実施する。

$ sudo port install ntfs-3g                    # MacPort から ntfs-3g をインストール(依存関係で MacFuse もインストールされる)
FuseFS を利用するためにここで再起動する
$ /usr/sbin/diskutil list                      # 現在マウントされているボリュームを表示しデバイス名を確認しておく
   :
   3:       Microsoft Basic Data Windows Xp              64.9 Gi    disk0s3
$ mkdir -p /Volumes/NTFS                       # 最初の1度だけマウントポイントとなるディレクトリを作成する
$ /usr/sbin/diskutil umount disk0s3            # Leopard によって既にマウントされているディスクのマウントを解除する
$ sudo /usr/local/bin/ntfs-3g /dev/disk0s3 /Volume/NTFS -o volume=NTFS,default_permissions,locale=ja_JP.UTF-8,uid=UID,gid=GID
ntfs-3g コマンドのオプションに uid、gid を指定すると マウントされたディスクに含まれるファイルやディレクトリの オーナ、グループを指定できる。
アクセスは非常に遅いが NTFS パーティションに書き込みできるのは嬉しい。

Time Machine

Leopard から搭載された Time Machine というバックアップシステム
標準状態だと Time Machine のバックアップ先は直接接続されたドライブ、 もしくは Apple 純正の Time Capsule しか選択できないのだが、 以下の手順を実施する事により samba で共有しているネットワークドライブに バックアップする事ができた。
ただし、この方法は公式にサポートされた機能ではないので、 バックアップの消失等の危険性がある。
あくまでも自分自身の責任において実施して下さい。

  • samba で新規の共有を作成する
  • → 共有する名称は任意でかまわない

  • ターミナルから以下のコマンドを実行する
  • $ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
    

  • Finder の "移動" メニューから samba で共有したサーバに接続する
  • Time Machine の環境設定でディスクの変更を行う
  • → ネットワークドライブが選択可能となっているので選択する

  • Time Machine の "今すぐバックアップを作成" でバックアップを開始する
  • ネットワークドライブに作成されるイメージのファイル名を確認する
  • → 通常は ホスト名 + "_" + マックアドレス + ".sparsebundle" となっている

  • Time Machine によるバックアップがエラー終了する
  • ディスクユーティリティを起動して新規ディスクイメージを作成する
  • 名前: ネットワークドライブに作成されたイメージのファイル名
    場所: 任意の場所
    ボリューム名: 任意の名称
    ボリュームサイズ: バックアップに必要となる容量を指定する
    ボリュームフォーマット: Mac OS 拡張 (ジャーナリング)
    暗号化: なし
    パーティション: 単一パーティション - Apple パーティションマップ
    イメージフォーマット: スパースバンドル・ディスクイメージ

    ネットワーク越しにスパースバンドル・ディスクイメージを作成できないので、 "場所" はローカルディスクを指定する必要がある。
    一番最初に" イメージフォーマット" を スパースバンドル・ディスクイメージに設定する事により 実際のハードディスク容量よりも大きなサイズが指定できる。

  • 作成したイメージファイルをバックアップ先に転送する
  • Time Machine を再度実行してバックアップを作成する

Flash9 on FreeBSD!

先日 FreeBSD 7-STABLE で Flash9 を動作させるためのパッチが公開されたが、 更に FreeBSD 6.{3,4}-RELEASE でも Flash9 を動作させるパッチが公開されたので、 [http://people.freebsd.org/~nox/linprocfs-6.3.patch ここ] から 早速ダウンロードして Make World してみる。

新しい環境で再起動した後 ports から linux-flashplaye9 をインストール。
インストール後、

$ nspluginwrapper -i /usr/local/lib/npapi/linux-flashplugin/libflashplayer.so
を実行してから firefox を起動し、 about:plugins すると、ちゃんと flashplayer 9 を認識している。
さっそくニコニコ動画にアクセスすると動画がちゃんと表示されています。

結構嬉しいです