カテゴリー: Computer

PHPで実装されたベイズフィルタ

PHPで実装されたベイズフィルタを見かけました。
http://www.atomicmpc.com.au/forums.asp?s=2&c=10&t=4466
ライセンスはGPLライセンスです。

ソースコードを見ると当然ですが半角スペースでトークンに分解しているので日本語では使えません。しかし、mecabなどを使用して使えるようにするのはそう難しくありません。もともとベイズフィルタは難しいアルゴリズムではないので読むと直ぐに理解できると思います。PHPで利用できる形態素解析モジュールは幾つかあります。

しばらく前には毎日数百のコメントスパムが送信されてきていました。b2evolutionデフォルト設定でコメントのモデレートが必須化されてから時間が経過してきたので今はかなり減ってきています。必要性は減ってきてはいますが時間があったら改善したい所です。

Rails 1.2.6 リリース

1.2.4などで修正を試みたセキュリティ上の問題が完全ではなかったようです。
セッションIDの固定化が可能な脆弱性が(こんどは完全に?)修正されたようです。

The rails core team has released ruby on rails 1.2.6 to address a bug in the fix for session fixation attacks (CVE-2007-5380). The CVE Identifier for this new issue is CVE-2007-6077.

PHPの場合、Session Adoptionに脆弱(普通にアプリを作るとSession Fixationにも脆弱なる設定がついこの間までデフォルト…)ですがいつ直すつもりなんでしょう… パッチはあるのですけどね…

Parallels Desktopインストール後にVistaが起動しない場合の対処

BootcampのVistaのVMを訳あってVMWare FusionからParallels Desktopに切り替えようとしたのですが、VMからブートしなくなりました。VMWare Toolsは予めVMWare Fusionで起動中に削除しています。Parallelsが入力をトラップしてしまうのかOSXのマウスも

Bootcampで直接Windows Vistaを起動しようとすると、BUGCODE_USB_DRIVERとかいうメッセージがブルースクリーンなって出ていました。その後もう一度Bootcampからブートしようとするとprlfs.sysを読み込んだ時にブルースクリーン…

Parallels関係っぽいドライバなのでセーフモードのコマンドプロンプトからc:\windows\system32\drivers\prlfs.sysを削除するとブートできるようになりました。(とりあえずParallelsからブートして、Bootcampでのブートは試してません)

別に電源ボタン長押しで切っても大丈夫だと思いますが、Vistaにもshutdownコマンドがあるのでshutdown /sなどとするとシャットダウンできます。

コマンドは以下の通りです。システム管理者アカウントで実行

cd c:\windows\system32\drivers
del prlfs.sys
shutdown /s /t 0

ParallelsでWindows Vistaを起動後、Parallels Toolsを再インストールすると正常に動作すれば良いのですが、また同じ症状になりました。

最初にParallelsをインストールしたときも素直には動作しませんでした。VMWareに比べていろいろやり過ぎている(?)のか気の利いたツールや機能は多いのですが、VMWare Fusionと比べると安定性にはかなり劣る気がします。

MomongaLinux4でCanon iP7500を使う

Canon iP7500をMomongaLinuxから利用するには

http://www.canon-sales.co.jp/drv-upd/bj/bjlinux260.html

に掲載されているフィルタをインストールしてCUPSのプリンタ設定ページからドライバを選択すれば利用できるようになります。

バイナリrpmを入れても良いのですが、以前にうまく動作しなかった事があるのでSRPMからインストールすることにします。

このcnijfilter-commonはlibxml(obsoleteなパッケージです)が必要なので、どこかから適当なSRPMを拾ってきます。rpmbuildコマンドでビルドするとlibtoolでエラーが発生するので/usr/sbin/libtoolで上書きします。書き換えていれば問題無くビルドできました。

次にcnijfilterのビルドですが、まずcups-devel, gtk+1-develをインストールしておきます。他にも必要な開発用パッケージがあるかもしれません。必要な物はインストールします。

%installセクションの

install -c -s -m 755 ${PR_ID}/database/* ${RPM_BUILD_ROOT}%{_libdir}/bjlib

の-sオプションを削除します。ライブラリでもないファイルに-s(stripオプション)が付いているのでエラーになります。後はrpmbuildでビルドして出来上がったrpmを全部インストールします。

CUPSは再起動しないと新しいドライバを読み込まないので再起動します。その後、プリンタメーカでCanonを選択するとcnijfilterがサポートするプリンタ(Canon PIXUS iP4200 / PIXUS iP6600D / PIXUS iP7500 / PIXUS MP500)が一覧に表示されるようになります。

サポートディストリビューションはSUSE Linux 10.0、Turbolinux FUJIとなっていますが同じ手順でFedoraなどにもインストールできると思います。ここにRedHat系のOSが載っていないのはサポート負荷軽減の為?と勘ぐりたくなります。Libxml2を使うように書き換えればもっと簡単に多くのディストリビューションで使えるようになると思います。

Canonのページを見るとUSBからの接続しかできないような記述になっていますがネットワークプリンタとして接続できればLPDでもIPPでも印刷できます。

MomongaLinux3以来のインストールでしたが以前よりインストールが簡単になっていました。以前はインストール済みのライブラリ(確かlibpngとか)を強制的に別バージョンに見せてインストールしたと思うのですが今回はそのような荒技を使わなくても普通にインストール出来ました。

Mac OSXにはiP7500用のドライバがあるのですがこのドライバはMacのUSBポートに直接iP7500が刺さっていないと動作しない代物です。OSXもCUPSを使っています。CUPSのフィルタならOSXでも使えるはずなので余裕があるときにインストールしてみたいと思います。

追記:
とりあえずビルドした物を公開しました。よろしければどうぞ。
http://wiki.ohgaki.net/index.php?Momonga%20Linux%2FCanon%20Printer

PHP 5.3とPHP 5.2

ちょっと前にPHP 5.3のブランチが作られた、と書きましたが今度は前のマイナーバージョンもしばらくメンテナンスされます。どれくらいメンテナンスされるかは分かりませんが、メンテナンスされるのは良い事です。

PHP 5.3とPHP6の位置づけですが、基本的にPHP6 = PHP 5.x(最新版)- Unicodeサポートという形で合意が形成されているでPHP 5.xのマイナー版は機能追加が行われる予定です。

PHP 5.3がリリースされても慌ててPHP 5.2から5.3にアップグレードする必要はありません。ただし、PHP 5.2のサポートはそれほど長くはないので次々とPHP 5.xへとアップグレードする必要性がなくなる訳ではありません。

PHP 5.3は来年の第一四半期にリリース予定です。

簡単なベンチマーク

最近のPostgreSQL, MySQL, SQLiteのパフォーマンスはどうかな?と言うことで非常に簡単なベンチマークをしてみました。

デフォルト状態のデータベースに郵便番号データ(12万件とちょっと)をINSERTしてみました。フラグを除く全てのフィールドをテキスト型として定義し、全てのフィールドを挿入しました。旧番号と現行番号にインデックスを付けています。スクリプトはPHPで記述し、DBが動作しているPC上からPHP 5.2.4で実行しました。1レコードが分割されている場合などは無視して挿入しているので12万2000レコードになりました。

PC

CPU: PentiumD 2.8GHz
Memory: 3GB
HDD: PATA

DBMS

MySQL: 5.0.45
PostgreSQL: 8.2.4
SQLite: 3.4.0 (PDO)

実行結果(12万行INSERTの実行時間)

InnoDb: 130.70663690567
MyISAM: 131.24672317505
Postgres: 159.47350597382
SQLite: 676.43534302711

MySQLもPostgreSQLもチューニングは一切無しで実行しています。

非同期クエリを利用するとPostgreSQLもInnoDb, MyISAMと同じくらいの速度になりました。

どのDBもペンチマーク中はディスク待ちの状態でCPU時間はあまり使っていませんでした。

MySQLとPostgresは概ね予想通りの結果でしたが、SQLiteが異常に遅いのでPDOを使わないで計測してみましたがあまり変わりませんでした。トランザクションかな?と思いBEGIN, COMMITを付けてみましたが変わりませんでした。

INSERTしたレコードをランダムにSELECTしてみました。番号はmt_rand関数で生成したのでほとんどがINDEXにヒットしないので、インデックスを利用した検索の最悪のケースのテストになります。単純にテーブルから検索をするだけです。永続的接続を利用しています。

Webサーバ:Apache 2.2.6
クライアント: ab -n 10000 -c 10 (別PCから実行。Athlon64 3500+/3GBメモリ)

パフォーマンス:リクエスト/秒

Postgres: 947.58
SQLite: 1096.00
MySQL(MyISAM): 1190.35
MySQL(InnoDb): 1245.85

概ね予想通りの結果ですが、SQLiteが思っていたより遅いです。PostgreSQLは接続のネゴシエーション処理が重いので非永続的接続を利用するとかなりパフォーマンスが落ちます。システム全体でDBへの接続数を上手に制御できていない場合はpgpoolを利用するとパフォーマンス(システム全体のスループット)が改善することがこの事からも分かります。

「Postgresでこんな数字でないよ」という方、pg_pconnectで試してみましょう。コネクションプーリングが無いと話になりません。

VMWare Fusion 1.1 beta vs. Paralells Desktop 3.0

Boot CampでOSXとVistaをデュアルブートにして利用しています。Boot Camp 1.4 betaにアップグレードしてからParalellsの調子が非常に悪く、直ぐに固まるのでVMWare Fusionを試してみる事にしました。

キーボードの配列がAT配列になる、ディスプレイドライバの設定に問題があったのかVistaの画面がSVGAになった、Boot Campのドライバをインストールし直す必要があった、などのマイナーなトラブルは有りましたが普通に使えます。もっともチャレンジャーにもParalellsをアンインストールしないでVMWare Fusionをインストールした事が問題の原因かもしれませんが。

結論から言うとVMWareを使う事にしました。

– CPU消費が少ない
– 速い(体感的に)

が決め手になりました。Paralellsでぎくしゃくしていたアプリもかなり快適に動作するようになりました。フルスクリーンも使いやすいです。(OSXのメニューバーは邪魔なのでVMWareを使っている時のように隠れてくれるとうれしいのですが… 確かアプリ毎だった気がするのでOSでは変えれないのかもしれません。知らないだけで設定があるのかな?)

3DとDual Coreを有効にする設定も試してみましたが、3Dを有効にするとVistaでは無理ある(?)らしくまともに利用できませんでした。Dual Coreも有効にして少し使うとフリーズしたので無効にしました。

細かい所、例えばMacに無いキーが送信できるなどの機能はParalellsの方が良い感じです。しかし、VMWareは多少の問題は在りますが、軽快に動く方が助かるのでVMWareに乗り換えると思います。

Paralellsをインストールしている方でVMware Fusionを試したい方は最初にParallelsでWindowsを起動してParalells Toolをアンインストールした方が良いです。このツールはParallelsで起動していないとセットアッププログラムが動作しないようになっています。このツールを削除しておくとここに書いていたキーボードやドライバの問題は発生しないのかもしれません。

OSX 10.5 Leopardは10/19(大安)発売?

テキトーにMac OSXのニュースを見ていたらLeopardの発売日は10/19の大安ではないか?と言う説を見つけました。

過去発売日の4回のうち2回は大安、他も先勝などの縁起の良い日だったそうです。日本はAppleにとってお得意様だから縁起の良い日に発売しているのでは?と書かれていました。

ブックマークしなかったので元ネタURL無しで申し訳ないです。

追記:
見つけました。
http://blogs.itmedia.co.jp/2013/2007/10/mac_os_x_leopar_b514.html

http://japan.cnet.com/news/biz/story/0,2000056020,20358086,00.htm
によると10月26日(金)発売かも、となっています。

Boot Camp 1.4 beta

OSXのソフトウェアアップデートでEFI(MacのBIOSのようなもの)のアップデートがあったので、もしかして、と思ってBoot Campをダウンロードし直してみました。

現時点の日本語サイトでは「1.3 beta」と表示されていますが、ダウンロードした中身は「1.4 beta」になっていました。早速インストールしてドライバディスクを作成し、Vistaにドライバを入れてみました。特に変わったところは感じられませんがドライバ類は更新されたようです。

英語サイトのBoot Campのページは「1.4 beta」と表示され、大きくなったダウンロードサイズも正しく表示されていました。

安定性で困っている方、アップデートを試してみてはいかがでしょうか?

追記:
Pallarels Desktopと相性が良くないようです。私の環境ではフリーズしたようになって仮想環境(Boot Camp)が満足に利用できない状態です。

Python 3000は良いですね。

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

PHP5/PHP6の開発もPython 3000 (Python 3.0)のようになれば素晴らしいのですが、難しいでしょうね…

後方互換性は非常に重要です。今まで動いていたプログラムがバージョンアップしたら動かなくなる、と言う事態は開発者であれば誰でも避けたいものです。しかし、後方互換性を重視するあまりツジツマが合わなくなる事がよくあります。時間と共に合わなくなったツジツマはだんだんと大きくなっていきます。最初のうちは合わないツジツマはあった方が良い物ですが、だんだんと使い辛いものなっていきます。

些細な事ですがPHPの場合、古い関数の命名規約は「thisisfunctionname」と単語の区切りを付けないルールでしたが今のルールは「this_is_function_name」と単語を_で区切るルールになっています。この為、システムにデフォルトで含まれる基本的な関数であっても2つの命名規約に則った関数名が使われています。PHPには関数のエイリアス機能があるので新しい命名規約に則った関数名と古い関数名両方が存在しても問題無く利用できる機能があります。にも関わらず新しい命名規約に則った関数は作られていません。(と言うより反対する人がいるので作れなかった)クラス名や関数名も最近の言語に習って大文字・小文字を区別する方が良いと思いますが、これも実現できませんでした。(PHP5開発の際に議論されたが却下)

代わりにPHPプロジェクトが選択している仕様変更の手順はメジャーバージョンアップ、マイナーバージョンの度に徐々に少しずつ仕様を変更していく手順を取っています。strtotimeが失敗した場合の戻り値が-1からfalseに変更されたのもその一例です。

Python 2.xとPython 3.xが描いているようなアップグレードが言語として理想的なアップグレードの一つだと思います。

PHP 5.3ブランチ

PHP 5.3のブランチが出来ています。

個人用のアプリケーションなら、「Release fast, release early」でも良いと思いますが、フレームワークに近い言語が「Release fast, release early」だと困る方も多いと思います。互換性を維持しないアップグレードは1年に一回以内、出来れば18ヶ月か24ヶ月サイクルくらいに留めた方が良いと思います。

モジュールを別途配布するようにすればかなり現実的になるのですけどね…
PHP Core, PHP Standard, PECL, 3rd party, 程度に分けて管理すれば良いと思います。

とにかく、準備が必要な方はテストで使ってみては?

http://cvs.php.net/viewvc.cgi/php-src/?pathrev=PHP_5_3

Linuxの電源管理

Linuxパワーユーザには当たり前の情報が多いですが、IDFでlesswatts.orgがお披露目となったようです。

と同じ情報が掲載されているものが多いようです。

LinuxをノートPCで利用する場合に少しでも長くバッテリを利用する為のTipsが掲載されています。サーバの消費電力軽減にも役立つTipsもあります。Intelチップ専用のTipsもありますが、Intel以外でも使えるTipsもあります。Kernelやコマンドがサポートしていないと利用できない機能もあります。

サイトの掲載されているTIPS:

  • SMPスケジューラの電源管理有効化

    echo 1 > /sys/devices/system/cpu/sched_mc_power_savings

  • SATA電源管理有効化

    hdparm -B 1 -S 12 /dev/sda

    -B set Advanced Power Management setting (1-255)
    -S set standby (spindown) timeout
    -y put IDE drive in standby mode
    -Y put IDE drive to sleep
    -Z disable Seagate auto-powersaving mode

  • ラップトップモードの有効化

    echo 5 > /proc/sys/vm/laptop_mode

  • CD/DVDをポールしない

    hal-disable-polling –device /dev/scd0

    デスクトップでもCD/DVDを挿入した場合に操作を選択するダイアログを表示されない為に利用すると便利。

  • WOL(Wake on LAN)の無効化

    ethtool -s eth0 wol d

  • Gigabit LANを100Mbpsに変更

    ethtool -s eth0 autoneg off speed 100

    1000Mbpsに戻すには最後のパラーメータを1000にしてethtoolを実行。

  • Intel Wirelessアダプタの省電源機能の有効化

    iwpriv eth1 set_power 5

    省電源機能を無効にするには最後のパラメータを6にして実行。

  • 自動アソシエートモードの無効化

    rmmod ipw2200
    modprobe ipw2200 associate=0

    WiFiアクセスポイントを一生懸命探さなくなる。

  • WiFiの無効化(電波OFF)

    for i in `find /sys -name “rf_kill” ; do echo 1 > $i ; done

    有効にするには

    for i in `find /sys -name “rf_kill” ; do echo 0 > $i ; done

  • Bluetoothの無効化

    hciconfig hci0 down
    rmmod hci_usb

  • バックライトの調整

    xbacklight -set 50

  • DMPS(ディスプレイの電源管理)有効化

    xset +dpms

    120秒のアイドルで電源OFF

    xset dpms 0 0 120

  • TV/VGA/DVI出力の無効化

    xrandr –output TMDS –off

  • Realtimeの有効化

    mount -o remount,relatime /

    atimeの様にアクセス時間の記録をsyncしない(直ぐにatimeをアップデートしない)のでディスクの利用が効率化する。デスクトップでもお勧め。

  • サウンドカードの省電源機能の有効化(AC97)

    echo 1 > /sys/module/snd_ac97_codec/parameters/power_save
    echo 1 > /dev/dsp

  • HDAサウンドの省電源機能の確認(HDAのみ)

    cat /sys/module/snd_hda_intel/parameters/power_save

    0より大きな数値で有効化されている。

  • BIOS設定の変更

    * Processor C1E support: This enables maximum power saving of the processor when idle.
    * Enhanced Speedstep (EIST): This allows Linux to optimally reduce the frequency and voltage of the processor when not using the maximum capacity.
    * Fan control: Set to “auto speed”; this allows the fans to slow down (and use less power) when the temperatures in the machine allow this.
    * Enable the HPET (often called “Multimedia timer”) option. This allows Linux with tickless idle to maximally save power by being idle longer.

    BIOS設定はハードウェア管理機能が不明なデバイスとして認識しないよう、一部の省電源機能を無効化しています。上記の機能を有効化すると消費電力が少なくなります。

MSが勝手にWindows Update関連ファイルを更新

ZD Net本家のブログによるとMSは何の通知もなしに勝手にXP/VistaのWindows Update関連ファイル更新しているそうです。「勝手に更新」とはWindows Updateを実行しない設定にしているにも関わらず密かにアップデートしている、と言うことです。

変更されたファイルは以下のファイルだそうです。

The files on Vista are:

* wuapi.dll
* wuapp.exe
* wuauclt.exe
* wuaueng.dll
* wucltux.dll
* wudriver.dll
* wups.dll
* wups2.dll
* wuwebv.dll

And on XP SP2:

* cdm.dll
* wuapi.dll
* wuauclt.exe
* wuaucpl.cpl
* wuaueng.dll
* wucltui.dll
* wups.dll
* wups2.dll
* wuweb.dll

Windows Updateだけは何が何でも最新版にしたかったのか、古いバージョンをメンテナンスするのが面倒になったのか、理由は分かりませんがQA/テストを行っている方には非常に迷惑な話です。

好意的に推測するとWindows Updateのファイルの更新が必要な場合、先に更新しておかないと一旦Windows Updateを終了し、またWindows Updateを実行しなければならないからだと思います。

理由はともかく、他人のPCにインストールされているファイルを密かに更新するのはマルウェア的すぎます。

追記:
MSによるとサービス開始以来Windows Updateのファイルは密かに更新しており通常の動作だとの事です。

Microsoft said that the Windows Update service automatically updates itself “from time to time to ensure that it is running the most current technology.” “This is normal behavior, and it has worked this way since the service debuted several years ago,” the company said.

http://www.itworld.com/Comp/2218/070913msupdates/

古いURLとか、維持したくなかったのかな?

MomongaLinux 4 完全インストールガイドが第一位

ITProの「昨日のLinuxランキング」で他の完全インストールガイドを抑え、MomongaLinux 4が第一位でした。

「先週のLinuxランキングでもMomongaLinuxの記事が一位!

プロジェクトメンバとして最近全然なにもしてないですが、うれしかったのでスクリーンショットを撮っておきました :)

Momonga is No1

Momonga is No1

ビルド環境とNFS Lock問題

私のビルド環境はコンパイル用のPCがNFSマウントされているsubversionレポジトリのチェックアウトを参照するように設定されています。NFSなのでflockを利用するにはnfslockdが必要です。NFSサーバがMo3の時はNFS Lock問題は発生しなかったのですが、NFSサーバをMo4にしたらOmoiKondaraを実行中に何故かflockできなくなりRubyライブラリの中でエラーが発生するように…

面倒なのでスルー力を活かしてライブラリのflockを省略、これでビルドできる、と思ったら今度はeachでエラー