Wikiの場所を移動しました

Wikiの場所を移動しました

前からWiki(http://www.ohgaki.net/wiki/)をhttp://wiki.ohgaki.net/に移動しようと思っていたのですがやっと移動しました。

Web管理者には珍しい話でも機能でもなんでもありませんが、新しいホストで前のコンテンツが表示できるようにした後、Apacheのmod_rewriteを使ってwww.ohgaki.netのバーチャルホスト設定に次の設定を入れるだけです。

RewriteEngine on
RedirectMatch ^/wiki/(.*) http://wiki.ohgaki.net/$1

引越はmod_rewriteで。

# 何故こんな事を書くかというと今日某ISPサイトのお知らせサービスに
# 登録したのですが登録後のリンクが切ていたので…
# ちなみにIISでも同様の事が可能です。

Weblog Usability: The Top Ten Design Mistakes

最近「ブログデザイン10の間違い」というページが結構人気らしい、原文は英語なので10項目だけ意訳するとこんな感じでしょうか?

  • 著者の略歴が無い
  • 著者の写真が無い
  • 本文の内容を推測できない投稿タイトル
  • リンク先が明示されていない
  • 古い人気投稿を埋もらせない
  • カレンダーのみのナビゲーション
  • 不定期な投稿
  • ごちゃまぜなトピック
  • 未来の上司に対して記述している事を忘れている
  • ブログサービスのドメイン名が入ったブログを使っている

少なくともb2evolutionがデフォルトで提供してくれている機能+最後の独自ドメインというのはクリア :)

PHPのlintモード

エラーハンドラでE_ERRORを処理できるようにして関数名などのタイポに対応できても、タイポによる構文エラーに対処できなければ意味が無いよね?と言う事でlintモードの紹介です。

随分前のPHPからlint(構文をチェックするモード)はあったのですがあまり使われていない(?)ような気がします。実際、かなり長い間壊れていた事もあります。最近のPHPのlintモードは壊れていないので-lオプションを使ってチェックすれば思わぬ構文エラーによるスクリプトの停止も免れます。

いくらエラーハンドラでエラーをwebmasterに通知していても構文エラーには無力です。特にアプリの新規作成時や大量の変更がある場合にはlintモードを使う方が良いでしょう。詳しくはWikiに書きました。

ユーザ定義エラーハンドラの拡張パッチ

最近のPHPはE_ERROR(未定義の関数呼び出しなどで発生)をユーザ定義エラーハンドラで処理できません。これはE_ERRORが発生した場合、必ずeixtを呼び出しスクリプトの実行を停止しないと誤作動する問題に対処した為です。

随分前(PHP 4.3がリリースされた頃)からこんな感じでパッチを書けばよいです、と紹介はしていたのですがWikiに書きました。よろしければご利用ください。ユーザ定義エラーハンドラに問題(E_ERRORが発生する等)が無ければE_ERRORでexitすれば問題は発生しないはずです。万が一、関数名をタイポしていてもエラーページを表示しwebmasterに通知する処理などをエラーハンドラに定義できるので有用です。

php内部でのmmapの使い方

遅ればせながらPHP 5.0.5使っていて直しているだろう、と思い込んでいたバグが直っていない事に気が付きました。

PHP内部のphp_stream_passthru()関数はreadfile()やfpassthru()関数に利用されているのですがmmapの使い方がいい加減です。PHP 4.3.xのバグレポートでreadfile()で大きなファイルが読めない旨のバグレポートがあったので全てのブランチで直っている、と思っていたのが間違いでした。

mmapは名前通りファイルをメモリにマップする関数です。メモリマップすることにより典型的なファイルI/Oコードに必要なバッファへのコピー、その後の出力、というステップがメモリからの読み出しと同時に出力、とバッファコピーが減るメリットがあります。

メモリにマップするので色々制限があります。特に32bitシステムでは小さいファイルしか(と言っても2GBくらいのファイルなら取り扱えますが)取り扱えない、メモリ圧迫する(2GBのファイルをマップすると、2GB mallocが失敗するなど)の問題があります。さらに比較的大きなファイルを実際に読み出すとスワップの嵐になるシステムも… 当たり前といえば当たり前の制限です。

と前置きしたのでPHP 5.0.5でどうなっていたかと言うと「mmapをサポートするシステムの場合、ファイル全体をマップする」ようになっています。当然前述のような問題が発生します。そこで2MB以上のファイルはmmapできないようにしています…

PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC)
{
SNIP
/* For now, we impose an arbitrary 2MB limit to avoid
* runaway swapping when large files are passed thru. */
if (length > 2 * 1024 * 1024) {
return NULL;
}

別にこれ自体はそれほど悪い事(2MBなどと非常に小さい値にしている事は除いて)ではないのですがこのおかげでphp_stream_mmap_range()を利用する、恐らく、ほとんどの関数で2MB以上のファイルを正しく取り扱えなくなっているようです。

中途半端に使える物は使わない方が良いのでmmapを使わせないようにするには

– PHPのランタイムからはstreamのオプションでmmapを使わないよう全てのスクリプトで設定する(iniオプションが無い!)
– 次のパッチを当ててPHPをリビルドする

等として回避する必要があります。

diff -ur php-5.0.5.orig/main/streams/php_stream_mmap.h php-5.0.5/main/streams/php_stream_mmap.h
— php-5.0.5.orig/main/streams/php_stream_mmap.h 2004-02-20 17:22:12.000000000 +0900
+++ php-5.0.5/main/streams/php_stream_mmap.h 2005-10-23 10:23:56.492890384 +0900
@@ -62,7 +62,7 @@

/* Returns 1 if the stream in its current state can be memory mapped,
* 0 otherwise */
-#define php_stream_mmap_possible(stream) (!php_stream_is_filtered((stream)) && php_stream_mmap_supported((stream)))
+#define php_stream_mmap_possible(stream) 0

BEGIN_EXTERN_C()
PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_operation_t mode, size_t *mapped_len TSRMLS_DC);

きちんと直すの事も簡単(チャンク単位でmap, unmapを繰り返す)なのですがとりあえず情報として…

# この問題、開発者が理解してないかも…

アンチウィルスソフトには優先度制御が必須…

最近Windowsマシンとして使っているPCのHDDが壊れてHDD交換&再インストールしたのですがアンチウィルスソフト(Noton AntiVirus:以下NAV)プロセスの優先度を下げる為にインストールしていたAutoGearと言うプログラムはまだインストールしていませんでした。AutoGearはアンチウィルスソフトには必須かも知れませんね。

メールクライアントにはThunderbirdを利用しています。NAVがメールをスキャンしてくれるのは良いのですが一生懸命スキャンしすぎて他のプロセスが遅くなりすぎです。IMEさえまともに反応しなくなります。AutoGearをインストールしてccApp.exeの優先度を「低」に設定して一件落着です。しかし元々もう少しお手柔らかにスキャンするように設定しておいた方が良いような気がします。PentiumM 1.3GhzなのでそれほどCPUが遅い訳でもでも無いですが、スキャン時の遅さは耐え難い物があります。

VMware Playerを使ってみる

やっとVMware Playerがダウンロードできました。
Windowsバイナリ、Linux RPM、Linux tarがダウンロードできるようになっていました。
マニュアルのページを見るとPDFマニュアルには日本語版もありましたがVMware Playerの日本語マニュアルはまだのようでした。

VMwareのWebサイトによると基本機能(Key Features)としては以下であるとしています。

* Run any virtual machine. Run virtual machines created by VMware Workstation, GSX Server or ESX Server. VMware Player also supports Microsoft virtual machines and Symantec LiveState Recovery disk formats.
* Revert to previous state. Revert virtual machines to a previous ‘clean’ state within seconds.
* Access host PC devices. Use host CD/DVD drives, network adapters, and plug-and-play USB devices.
* Copy and paste. Copy text and files between the virtual machine and the host PC.
* Drag and drop. Drag and drop files between a Windows host PC and a Windows virtual machine.
* Shared folders. Use shared folders to easily share files between virtual machine and the host PC.
* Multiple networking options. Virtual machines can share or obtain new IP addresses or be isolated from the network and host.
* 32- and 64-bit host and guest operating system support. Run a wide variety of virtual machines containing 32- and 64-bit operating systems simultaneously on the same physical PC. Compatible 64-bit guest operating systems include select Microsoft Windows, Red Hat, SUSE, and FreeBSD distributions.
* Adjustable memory. Tune virtual machine memory for optimal performance.
* Configurable shutdown. Power down or suspend the virtual machine when closing VMware Player.

普段はLinux版VMwareしか使っていないのですが、実はこのPlayerのアナウンスが出る前日にVMware for Windowsを追加購入しています。VMware PlayerをWindows XPホスト、Windows 2000ゲストで使ってみた感想は「VMware Playerで十分だった orz」です。VM再起動時に自動的に初期状態に戻るような事もありません。Snapshotは取れないようですがVMのファイルを保存しておけばsnapshot代わりになるのであまり困らないでしょう。

気を付けないとならないのはFDD、CDROMなどのデバイスです。VMware Playerの名前の通りVMの設定をメモリ以外は全く変更できないようです。当然ですがWindowsとLinuxではデバイスの取り扱いが異なるのでLinuxで作成した仮想マシンはWindows上でも動作するのですがデバイスの再作成が必要になります。(Linuxで作成したVMのFDD,CDROMを削除してWindows上でFDD,CDROMを追加するなど)今時FDDは必要も無いかもしれませんがCDROMが使えないと困ると思います。VMware Player用にVMを配る場合は、Windowユーザ用、Linuxユーザ用、2種類用意する方が良いと思います。デバイスが無いというエラーを表示させたくない場合は思い切りよく予めFDDとCDROMデバイスを削除しておいても良いと思います。

広く公開するにはメモリの大きさにも注意が必要かも知れません。試していないので何とも言えませんが1GBのメモリを割り当てているとメモリが少ないシステムでは困った事になるような気がします。「Adjustable memory. Tune virtual machine memory for optimal performance.」とあるので大丈夫なのかも知れません。一応 VMware Playerでも「Player->Troubleshoot->Change Memory Allocation…」からメモリサイズだけは変更できるようになっています。

VMwareToolsのインストーラはVMware Playerには付属していないように見えます。VMwareToolsをインストールしておいた方が良いと思いますが、Key FeaturesにはVMwareToolsがインストールされていないと利用できない機能が記述されているのでもしかしたらインストールする方法があるのかも知れませんね。どちらにしてもVMwareの機能を十分発揮するにはVMwareToolsのインストールは必須です。VMware Workstationでインストールしておくべきでしょう。

当り前と言えば当り前ですが画面サイズは自由に変更できます。少し驚いたのはVMware Playerウィンドウ右上あたりにあるVMwareアイコンをダブルクリックすると画面が最大化されWindowサイズも自動的に解像度に合わせて調整された事です。(1024×768->1400×1050) 最大化した画面でもVMware Playerのツールバーのような物が画面上に表示されていました。このツールバーは制御がホストOSにつながっています。ゲストOSのウィンドウを最大化してもツールバーの下にウィンドウが表示されて不便だなと一瞬思いましたが、このバーの左にある押しピンアイコンをクリックするとWindowsの「タスクバーを自動的に隠す」と同じ様な感じで隠れてくれるようになりました。この機能意外に便利です。このあたりの動作はVMware Workstationと動作が異なります。VMware Workstationでも似たような動作になると良いですね。

最後にWindowsホストではVMware WorkstationがインストールされているとVMware Playerはインストールできないようです。試す場合は予めVMware Workstationをアンインストールしておく必要があるようです。
# RPM版 LinuxはVMware Workstationとconflictするのかな?

ついに出た! 無料のVMware Player

VMwareからの案内メールが届きました。「ついに出た! 無料のVMware Player」が率直な感想。早速使ってみよう、と思ったらサイトが混んでいて….

しかし無料で使えるのは良いのですがMSさんは困ったことに… しかしVMware Playerが出なくても遅かれ早かれ同様の問題が出てきますからね。

しかしこれは企業にとって革命的なインパクトを持っていますね。今までレガシーシステム(Win95用アプリなど)を維持するためにVMware Workstationを購入していた所は多いと思います。

まだサイトが混んでいてダウンロードさえ出来ないのですが仮にスナップショットを利用した半読み込み(次回起動時には全ての記録が消える)ような物であっても使い道はありますね。例えば、SandBoxとしてブラウジングするのはVMware Player上のOSのみにするとスパイウェアやウィルスに感染するリスクを低減することができます。

多少の制限があるかもしれませんがVMの実行だけなら約189ドルが無料になるのですからVMware Playerを使いますよね。VTテクノロジが一般化する前に「VMware一人勝ち」の構図を作ることがVMware Player投入の意図かな?

TortoiseSVN – 気が利いていますね

Windowsでsubversionを利用されている方のほとんどはTortoiseSVNを利用されていると思います。私は今日初めて知ったのですがMS Word文書の差分をみると

word = WScript.CreateObject("Word.Application");
destination = word.Documents.Open(sNewDoc);
destination.Compare(sBaseDoc);

が実行されてあたかもMS Wordの履歴をとっていたかのように表示されました。
これでわざわざ差分を記録してなくても済みますね。WindowsでSubversionを使っていた方には常識(?)とは思いますが気が利いていますね。仕組みは単純な物ですが驚きました。

Linuxの利用者からライセンス料を徴収しようとしていた会社がどこを対象として訴えを起こすつもりだったか履歴機能からバレてしまった件は有名です。履歴機能を使わなくても良くなるのでセキュリティ面でも役に立ちますね。

PostgreSQL 8.1は”本当”に速い

@ITのDatabase Watch 10月版に「PostgreSQL 8.1は”速い”とうもっぱらのうわさ」と記事があります。

「うわさ」ではなく「本当」に8.1は速いです。

ミッションクリティカルなシステムでpgpoolを使用している所も多いと思いますが、8.1+pgpoolの相性は良いようです。pgpool無しで直接PostgreSQL8.1にアクセスした場合、pgpoolでPostgreSQL 8.1 2台でロードバランスさせてベンチマークするとINSERT、UPDATE、SELECT全てのケースで処理効率が向上している事が分かります。特に
SELECTのみクエリは100%以上の効率化となるベンチマーク結果(私が計測したケースでは102%)となる場合もあります。
# つまり2台にした場合、2台分よりも速くなるケースがある。
# 負荷を分散させたため各サーバがより効率良くクエリを実行できた
# ため論理値以上である102%の速度向上が見られたと考えられます。

私は試していませんが片岡さんに聞いたところ8.1では同時接続数が増えてもスループットの低下が少ないという情報も聞きました。500接続くらいではあまり速度低下が発生しないそうです。

私も8.1はまだまだテスト中ですがPostgreSQLの性能でお困りの方は8.1をテストしてみてはいかがでしょうか?

mixiからRDFが見えていませんでした..

mixiから日記の更新が見えないと言われました。そこで、見てみるとmixiのRSSリーダはUTCでの時間記述に対応していないため、カスタマイズしたRDFファイルを見るように設定していたのですがb2evolutionをアップグレードした際にカスタマイズしたRDFファイルを作成していませんでした。取り急ぎノーマルなRDFを参照するようにmixiの設定を変更しました。mixi側で問題を修正していなければ更新時間が-9時間表示になってしまいます。mixiは問題を修正したのかな?

ウィルコムが来年度にカバーエリアを大幅拡大へ

ITProによると

ウィルコムは10月19日,来年度をメドにカバーエリアを大幅拡大する考えを明らかにした。基地局の増設に加え,変調方式やアンテナなどに新しい技術を採用して1基地局がカバーできる範囲を携帯電話並みに拡張する。

だ、そうです。

私はPHSユーザです。この記事によるとPHSをサブ携帯として持つ人が増えているそうですが、私はPHSがメイン、AUの携帯がサブです。カバー範囲が増えるのは良いですが端末電波出力を増加させなくてもカバーエリアが増えるものなんでしょうか? ファームウェアの更新で対応できると記事には書いてありました。ファームウェアを更新すると電波出力が増えて連続通話・待受け時間が激減する、なんてことにならなければ良いのですが。

coLinuxのパーティションを大きくする

備考:かなり古いブログですが公開し忘れしていた分です。

coMomongaのパーティションは3GBで小さく手狭になってきたのでパーティションを大きくしようと思い調べてみました。

coLinuxのパーティションサイズを変更するにはTopoResizeが利用できるようです。このツールを使ってディスクイメージも作成できるようです。折角TopoResizeがあるので試してみる事にしよう、と思ったらリンク先にないですね。

他にも既に作成済みのディスクイメージをダウンロードしてしまうと言うお手軽な方法もあるようです。

空のイメージ http://gniarf.nerim.net/colinux/blank/
スワップ   http://gniarf.nerim.net/colinux/swap/
ext3     http://gniarf.nerim.net/colinux/fs/

追加するだけならこれらのファイルを使用するのが一番簡単と思います。

Linuxを持っている方なら

dd if=/dev/zero of=colinux.img bs=1024 count=1G
mkfs.ext3 colinux.img

等としてもイメージが作成できそうです。odで最初の方のダンプしてかるーく最初方だけ見ただけなので実際には試していませんが。特別なデータは書いてなさそうだったので多分大丈夫でしょう。TopoResizeの様にext2/ext3パーティションの拡張等もLinuxにイメージを持ってきて普通にリサイズすれば出来そうです。

TopoResizeがあれば試してみたかったのですが仕方が無いのでLinux上で拡張してみる事にしました。

参考
http://wiki.colinux.org/cgi-bin/ColinuxImageTools

保護士認定試験

保護士といっても保護観察の保護司ではなく、個人情報保護士認定試験の保護士です。サンプルの問題が公開されています。12月8日に二回目の認定試験があるようです。

http://www.joho-gakushu.or.jp/piip/exam/piip-exam1-1.html
http://www.joho-gakushu.or.jp/piip/exam/piip-exam2.html

サンプルといっても第一回に出題された問題らしく2つ合わせて100問もあります。

http://www.joho-gakushu.or.jp/info/security.html

にも情報セキュリティ認定試験のサンプル問題のPDFへのリンクがありますね。

時間のある方は試してみてはいかがでしょう。

Bフレッツで繋がらないサイトが…

先日、linux kernel 2.4で構築していたfirewallをkernel 2.6にアップグレードするとmicrosoft.comやitmedia.co.jpにhttpでアクセスできない。

直ぐにMTUの問題点かな、と思い「linux mtu」でググってみると一発でした。

iptables -I FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

で解決。

microsoft.com、itmedia.co.jpはICMPのMTU Path DiscoveryパケットなどをフィルタしているのでMTUを見付けるパケットが通らない->接続できない、となります。上記のオプションを付けると問題を回避できます。
# しかし前の環境では問題なかった事が気になりますが今更深追いする
# 必要もないので気にしない事にしました。
# ちなみにネットワーク接続はBフレッツ+OCN+固定IPの環境です。

さて、WindowsUpdateを実行しないと。

追記:
やっぱり気になったので前の設定を見てみるとpppoe.confに

CLAMPMSS=1412

を入れていましたね。今の設定では/etc/ppp/pppoe.confでは無く、/etc/sysconfig/network-script/ifcfg-ppp0を使用しているのですが設定をコピーする際にもれていたようです。