メインメニュー
最近の投稿
記事カテゴリ一覧
Apple Store(Japan) Apple Store(Japan)

2008年1月27日(日曜日)

生物と無生物のあいだ、そして。。。

カテゴリー: - spiky @ 09時01分32秒 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

“ポリメラーゼ・チェイン・リアクション”

 

なんだか研究者としては、分野が違うもののその画期的で、しかし
シンプルかつエレガントな技術を感じさせる響きがある言葉です。

 

遺伝子工学、分子生物学の世界ではこれを知らない人はいない、
いやこの分野そのものが実質的にこの技術によって花開いたと
いっても過言ではない、エポックメイキングな技術。。。

 

素敵です。

 

遺伝子工学においてDNAの解析が基本的な作業のひとつですが、
解析をするにあたってその物理的構造をしるために試料である
DNAは、実は索がひとつあれば分かる訳ではなく、ひとつのAT,
あるいはCTペアを映像化するためになんと30億コピーも必要
らしい。。。

 

気の遠くなるほどのATCGのつらなりのなかから、例えばターゲット
としている疾病などに関係するごく短い、ATCGの検索をするのに
その特定の配列をもった文字列に相当するDNAを、いかにして
数十億もコピーすれば良いのか。

 

従来はこのターゲットの断片を特殊な大腸菌に注入し、大腸菌の
DNAコピー機能を使って増殖させる方法が主だったということですが、
これではコピーに時間がかかる上に、研究試料としてのDNAの
純度に問題が生ずる。

 

門外漢なもので、変なことを書いているかもしれませんが、
このポリメラーゼ・チェイン・リアクションというのは、
DNAの特定の塩基配列だけをきわめて単時間に、膨大な量に
増殖させるための技術です。

 

その方法というのが、なんともシンプルかつエレガントで、
偉大な発見は芸術的でもある、ということを絵に描いたような
例だと感じました。

 

情報技術的な観点から見ると、それは処理するプログラムの
コーディングをきわめて簡素にかつエレガントにする、
「再帰呼び出し」の処理に通ずるものがあります。

 

膨大な量のデータを処理するのに、それを一般的なループ処理で
こなそうとすると、ループのネスト地獄になり、きわめて難解で
かつ可読性の著しく低い、醜いコードが生まれます。

 

再帰処理は、繰り返し計算の単位をシンプルにしておいて、その
計算の中に自分自身を呼び出す処理を加え、コードは短いながらも
次から次に自分を呼び出すことで、気の遠くなるような繰り返し
処理をきわめて単純なコードでこなすことの出来る、アルゴリズム、
あるいはプログラミングの世界にいくつかある芸術的な手法です。

 

その短いコードが処理をこなし、終了条件にかかった瞬間に、
気の遠くなるようなネストの奥底からまたたくまに開始レベルに
戻ってきて、膨大なデータの処理とは裏腹に、何事も無かったかの
ような澄まし顔でいる様子は、PCRに似たすがすがしさがあります。

 

再帰処理を計算機で行う際の一番の問題は、手で書かれた人為的
階層しか持たないループのネストとは異なり、終了条件にかからなければ
延々と自分を呼び出し続け、そのためにネストは無限に深くなり、
あっというまに計算機の資源を食いつぶしてしまう危険性がある点です。

 

再帰処理で書かれたごく短いコードが、メモリ上を食いつぶして行く様を
可視化できたなら、それはまるでPCRによってごく小さなチューブのなかで
爆発的に増殖するDNAさながら、あっというまにメモリ、そしてそれに
とどまらずスワップ領域として使われるハードディスクが真っ赤っかになって
いく様子に似ているでしょう。

 

異分野でそういった心象的なイメージが重なるものがあるというのは
なんとも愉快です。

このPCR、そして遺伝子工学の黎明期を背景として、
「はたして生物と無生物をわけるものは何なのか?」
という本をたまたま本屋でみつけ、ぱらぱらっとめくって
面白く読んでいるところです。

 

『生物と無生物のあいだ』 福岡伸一

 

なかなか面白い本なのでおすすめです。

 

ちなみに著者は、生物と無生物をわける唯一の規範が
「自己複製できるシステムである」という点のみに
依存することに異議を唱え、たとえDNAの解析によって
還元論的方法でつぶさに調べたところで、その差異を
極めることは難しい、と述べています。

 

光学顕微鏡に依存していた野口英世の時代、かれは見ようとして
見えないものを見つめていた。。。。つまり光学顕微鏡では
分解能力的にその視認が不可能であった、透明な液体、そこに
含まれるウィルスをみることが出来なかったがため、
その存在を知ることすら無かった。

 

いま遺伝子工学はおそらく生物を意味のあるものとして構成する
最小単位であるDNAの螺旋構造まで可視化することに成功し
それを還元論的なやり方で理解しようとしている。一般的に
生物と理解されているこの地球上の全ての存在はDNAを有し、
全てに共通したその自己複製能力を有するが故、生物、と
理解されると。しかし自己複製する能力を有しながらきわめて
その他すべての生物とは異質なウィルスははたしてどちらなのか。
答えは本をお読み頂ければと思います。

 

著者が述べる、新たな規範、その最小単位を構成する構成要素間の
ダイナミズム、というものはごく最近、スモールワールドモデルや
スケールフリーモデルでブレークした複雑ネットワーク理論に
つながってきます。

 

生物を構成するDNAは静的なその組み合わせが存在することに
のみ意味があるのではなく、ダイナミックにふるまう様子、そこに
生物としてを生物と規定するものがある。

 

このDNAの塩基配列の不思議をなぞときにした、非常におもしろい
フィクションとして、随分と前に出版された マイクル・コーディの

 

 『イエスの遺伝子』〈上〉
 『イエスの遺伝子』〈下〉 

 

という本があります。
イエスが持っていたという他の人を治癒する特殊な能力、
最新の遺伝子解析コンピュータによって、遺伝子にあらかじめ
組み込まれた病気の種類とその発現時期まできわめて正確に
予測することが出来るようになった近未来、主人公の科学者は
たまたまふと興味をもった自分の娘の遺伝子を解析することで
ある悲しい事実を発見します。

 

それを機に、その悲劇をさけるための方法を見つけんがため、
死にものぐるいで研究に没頭するのですが、そこで特殊な
能力を持っていたイエスの遺伝子にヒントがあることをつきとめます。

 

おりしも、万物の創造は神のみ技であり、その神秘の領域に
人が立ち入ることをよしとしないキリスト教組織が、この主人公を
神の領域を侵すものとして危険視し、抹殺しようと動き出します。
その暗殺者としてさし向けられた少女と、イエスの遺伝子を探し求め
ていた研究者との数奇な運命。

 

はたして彼は娘を助けることが出来るのか?
読後、心に暖かいものと、そしてなんともやるせない気持ちを残す
ところが、僕の大好きなSF界の巨匠、ロバート・A・ハインラインの
「夏への扉」に通ずるものがあります。

 

 『夏への扉』 ロバート・A・ハインライン

 

僕の大好きな本のひとつです。 ■

 

いずれも非常に面白い本です。おすすめです。



このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

2008年1月24日(木曜日)

PHP4の高速化;Zend Optimizer

カテゴリー: - spiky @ 01時56分28秒 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

Xoopsの高速化の第一弾として、MacOS X 10.4のウェブサーバをapache1.3から2.2.8へアップしました。あわせてphpもphp4.4.7から4.xの最後のバージョン、php4.4.8へアップしました。
さて、次の作業としてphpの高速化を図ります。
phpを高速化するためのプログラムがいくつかあるようですが、ここは国内のphpソリューションベンダとしては最大のZendが無償提供している"Zend Optimizer"を使ってみることにしました。
  Zend Optimizer
現在Zend Optimizer3.3.0英語版が最新版で、MacOS Xに関してはユニバーサルバイナリー版が提供されています。嬉しいですね!MyZendにユーザ登録をし(無償)ログインするとダウンロードできます。ちなみに日本語ドキュメントも提供されていますが、こちらはひとつまえの3.2.0のものです。まぁさほど違わないでしょう。
インストールは超簡単。ダウンロードしたパッケージを解凍するとinstall.shというシェルスクリプトがあるので、これをターミナルから実行するだけです。
実行により、Optimizer一式が/usr/local/Zend以下にインストールされます。またphpの初期化ファイル、/etc/php.iniの最後にOptimizerの設定が追加され、/usr/local/Zend/etc/php.iniに移動されます。あわせてphp.iniのシンボリックリンクが/etc以下にできます。
無事インストールが終わったら、インストーラがapacheの再起動をしてくれます。これで完了です。

さて、無事オプティマイザーが組み込まれているかどうか確認します。

phpinfo()をつかってphpの環境変数を表示したときに、下記のようなバナーが表示されるはずですが、そこに"Zend Optimizer v3.3.0″という文字が現れれば、無事組み込まれています。


このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

2008年1月23日(水曜日)

MacOS X 10.4でApache2.2.8を動かす

カテゴリー: - spiky @ 22時00分29秒 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

うちのサーバはPowerMac G4 500MHzという非力なマシンなのですが、Xoopsという便利ではあるけれども非常に重いCMSを使っています。いろいろとモジュールが揃っていたり、インターネットを探せばたくさん情報もあるし本も多く出ているのでなかなか他に移行できないのです。

 

が、いよいよもってこの重さに耐え切れず、また先日Apacheの最新版, apache2.2.8がリリースされた というニュースを見て、ぼちぼち高速化を進めることにしました。

 

まずサーバの構成を確認します。俗に"MAMP"というものですが、Living-e AGが最近配布している超お手軽パッケージではなく、地道に各パッケージごとに手動で入れています。理由としては、MAMPパッケージに含まれるアプリケーション以外のものを入れたいときに、格納場所などが特殊なところになっていたりするとやっかいだからです。

 

  • OS : MacOS X 10.4.11 (Tiger)
  • Webサーバ : Apache 1.3.3 (Tigerに標準のもの)
  • php : php 4.4.7 (Xoops2.0.6jaに合わせて)
  • MySQL : mysql-standard-4.0.25-apple-darwin7.9.0-powerpc
  • CMS : Xoops 2.0.6ja

phpやMySQLが非常に古いバージョンを使っている唯一の理由はXoops2.0.6を安定して走らせるためです。(ひょっとしたら最近だとphp5にMySQL5で動くのかな)

 

一気に全てをアップグレードするのはリスクが大きすぎるので、まずは最もXoopsから遠く、直接的な関係のないapacheから。

 

現在apacheは1.3系とスレッド処理などで負荷処理が賢くなった2.x系があります。

MacOS Xでは、10.4が1.3系、そして新しい10.5が2.x系(現時点で10.5.2には2.2.6が入っています)となっています。なので、「OSを10.5にすりゃいいじゃん!」という気がするのですが、10.5はG4 800MHz以上(たしか)にしかインストールができず、うちのマシンには10.5を入れることが出来ないのです。なので、OSは10.4のままで、必要なアプリのみ手動でアップデートするしかないというわけです。

 

さて、Linux等と違いMacOSの場合、おいそれと簡単には./configure, make, make installとはいかないという事情があります。apacheの場合はそれ自身がMacOSの重要な機能をつかさどっている一部になっているので、その部分を無視して入れてしまうとMacOS側の機能が使えなくなってしまいます。特に問題なのは「Webファイル共有」関係。詳しいところは分からないのですが、例えばLinux向けのapacheディストリビューションには含まれない"mod_bonjour"というモジュールが組み込まれています。

 

またapacheの起動に関しても、rcなどではなく、/etc/hostconfigにWebサーバの起動・停止フラグを記述し、それを見て/System/Library/StartupItems/Apache以下のスクリプトが走るようになっています。ちなみにこれらのMacOS Xとのからみを完全に無視していれることも可能ですし、ちゃんと動きます。ができるだけMacOS Xの作法に従ってエレガントに入れておいたほうがあとあとややこしくなくていいかと。

 

さて、とりあえず実行モジュールを準備する上で一番の問題は上のmod_bonjourをどうするか?という点。Apacheサイトの説明によると、1.3系から2.x系への移行でモジュールとのAPIが大幅に書き換えられ、1.3系のモジュールをそのまま持ってきても動きません とのこと。

 

なので、その他の多くのモジュールは2.xに含まれるソースからビルドしても問題ないわけですが、mod_bonjourがない。ところでMacOS Xの最新版である、10.5 (Leopard)に標準でバンドルされるapacheは2.2.6なのです。2.2.6と2.2.8の差異はわずかなので、PPC版のMacでMacOS X 10.5が入ったやつがあれば、これから少なくともmod_bonjourだけひっぱってきてインストールしてやれば動きそうな気配です。

 

幸いにもPowerBook G4 15inch (late2006)に10.5を入れたものがあったので、こいつからひっぱってくることにしました。

  • /etc/apache2 (設定関係の入っているフォルダ。1.3では/etc/httpdでした)
  • /usr/libexec/apache2 (mod_*の入っているフォルダ。1.3では/usr/libexec/httpdでした)
  • /usr/include/apache2 (ヘッダファイル関係。実行時には直接は必要ありませんが)
  • /usr/sbin/apachectl, httpd (apache2.2.6の制御アプリと本体)

ためしに、そのままごっそりコピーしてきて、ただし/usr/sbin以下の2つのファイルだけは現行の1.3と重なっていますので、上書きしてしまっては大変ですから、オリジナルをapachectl1.3, httpd1.3にリネームして、2.2.6のものをapacheclt2.2.6, httpd2.2.6として同様にコピーし、MacOS Xが起動時に期待する名前となるようシンボリックリンクを張ってから起動してみます。

 

% ln -s ./apachectl2.2.6 ./apachectl

% ln -s ./httpd2.2.6 ./httpd

 

これで、だめもとでapachectl startをかけてみます。

が、見事撃沈。予想はしていましたが、ダイナミックリンクライブラリ関係も大幅に新しくなっているようで、エラーが出るライブラリをひとつひとつ10.5からコピーしてきましたがきりがありません。早々にLeopardの2.2.6を動かすという甘い考えは捨てて、apache本家のソースアーカイブからビルドすることにしました。(これにより必要なダイナミックライブラリも作られます)幸いにも本家ソースはそのままMacOS Xでビルドできるようになっているので、./configure, makeでおしまいです。

さて、ここで普通ならばmake installとやりたいところですが、標準のapacheがインストールされる場所とMacOS Xでは場所が違います。さて困った、どうするか。

しかし幸いにもapache2のインストール先は、ダイナミックライブラリを除き、/usr/local/apache2以下に設定ファイルなども含め全て集約されるので、とりあえずmake installでインストールしておき、あらためて必要なファイルをコピーして移動するか、シンボリックリンクを張ることで対応することを考えます。ちなみに対応関係は以下のとおりです。

MacOS X apacheオリジナル
実行イメージ /usr/sbin /usr/local/apache2/bin
設定ファイル /etc/apache2 /usr/local/apache2/conf
モジュール /usr/libexec/apache2 /usr/local/apache2/
コンテンツ /Library/WebServer/Documents /usr/local/apache2/htdocs

MacOSが期待する場所へあとでシンボリックリンクを張っておけば大丈夫でしょう。またいっぽうで上記でビルドしたapachectl, httpdはapacheデフォルトのパスにhttpd.confなどがあることを期待するので、そちらにリンクを張ります。モジュール関係、ログファイル、コンテンツファイルの場所に関しては、httpd.confと、あと2.xから増えた./conf/extra, ./conf/otherディレクトリ以下にある追加設定ファイルに記述されているのでこれらを書き直せば問題ありません。

 

こういう付け焼刃的なやり方をせず、きちんと見るべき場所、インストールされるべき場所を指定してビルドするときは、apacheのconfigureのマニュアルをご覧下さい。

 

1.3のhttpd.confと、MacOS X 10.5に標準で入っていた2.2.6のhttpd.confの中身を良く見比べて、1.3の方で手動で設定している部分を転記します。

 

終わったらapache -vとか、httpd -vとかやってちゃんと2.2.8の実行イメージが見えているかを確認したうえで、apachectl startをします。

 

これで無事入れ替え完了!

 

となればよかったのですが、xoopsが使っている肝心のphp4.4.7のモジュール、php4_mod.soが動きません。php4のサイトを見ると、どうやら2.x系向けに作り直してやらねばならない様子。しょうがないのでphpのサイトから、4.4.7、ではなく、つい最近リリースされた最新版の4.4.8を持ってきて、

 

./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr

 

とかやったように思います(汗)

追記:

その後いじってると、mb-string関係の機能がごっそり落ちていたので、ブログで記事がアップされない、などの不具合が出ました。以下のスクリプトをconfigure.shという名前で保存し、chmod 555 configure.shとしてビルドしたらうまく動くようになりました。手抜きはいけません、手抜きは(汗)

#!/bin/sh
./configure \
  –with-apxs2=/usr/local/apache2/bin/apxs \
  –enable-mbstring \
  –enable-mbregex \
  –enable-zend-multibyte \
  –with-xml \
  –with-mysql

これで/usr/local/apache2/modules/libphp4.soが出来るので、これを/etc/apache2/httpd.confのモジュールがロードしてあるところの下のほうに下記を追記し、

#LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so
LoadModule php4_module        /usr/local/apache2/modules/libphp4.so ←これを追加

<IfModule !mpm_netware_module>

さらに、/etc/apache2/other/php4.confというファイルを以下の内容で作り(同じ場所にあるphp5_mod.confからコピーして作ります)

<IfModule php4_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps

        <IfModule dir_module>
                DirectoryIndex index.html index.php
        </IfModule>
</IfModule>

あらためて、apachectl startを実行すると。。。お!無事動いています。

とりあえずいくつかあるバーチャルホストでxoops、Drupalなどの動きを確認してますが、いまのところ問題なく動いているようです。

次はphpの高速化か、MySQLだなぁ。。。

追伸:

新しいApache2.2.8の本体をMacOS Xが期待する場所に直接おかず、シンボリックリンクにしたのにはわけがあります。apacheはMacOS Xの機能の一部になっているので、ソフトウェアアップデートで上書きされてしまう可能性があるからです。ソフトウェアアップデートを実行したがために上書きされてしまっては元も子もないので、シンボリックリンクにしておき、ソフトウェアアップデートが上書きするのはリンクのみにしようとしたわけです。これならアップデート後、おかしくなったらリンクを確認し、実態に置き換わっていたらあらたえてリンクを張りなおせばオッケーです。

追伸2:

apache1.3をapache2.2.8に入れ替えた結果ですが、残念ながら劇的に応答が速くなった感じはありません。ただまぁ、アクセスが集中することがあれば、威力をきっと発揮してくれることでしょう(汗)


このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

2008年1月20日(日曜日)

daemontoolsがCPUを使い過ぎる件

カテゴリー: - spiky @ 11時24分43秒 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

以前から気になっていたのですが、なかなか時間が取れなかったのと、そもそもの根本原因を突き止めきれなかったのでほったらかしにしていたdaemontoolsの負荷の問題がようやく解決しそうです。

MacOS X 10.4 (Tiger)をwebサーバやらメールサーバに使っているのですが、qmailを使うときに定番の、プロセス監視プログラム"daemontools"が異常にCPUの負荷を食うのです。

そのおかげで、ApacheからMySQLへのアクセスが異常に遅くなりタイムアウトする事しばしばで、ブラウザでページを見たときにページが表示されないという状況が多々発生し、サーバとしてはまったく使い物にならない状況でした。

なので、マシンを再起動した後にはかならずsvscanbootやらsvscanやら、superviseなどをいちいち全部手でkillし、とりあえず運転をしていたのですが、これではdaemontoolsを使っている意味が全くありません(汗)

たぶん何か問題があるはず、と思い、いろいろと調べていたのですが、まさかTigerのカーネルにバグがあるとは思いもよりませんでした。サーバとかではなく、普通の個人ユースでは問題にならないはなしですもんね。

ひょんなことで、知人の方の日記でその事を知り、「そうそう!まさにそれ!」と飛びついたのでした。

どーもはなからTigerを疑う事をしなかったので、見つけきれなかったようです。

以下のURLによると、"named fifoのPOLLINが常にPOLLNVALを返すので、daemontoolsはスリープする事無く、CPUリソースを食いつぶしながら延々とループを繰り返す"のだそうです。

supervise broken on MacOS 10.4 (Tiger)

なるほどー。svscan.cのソース最後の方にあるsleep(5)をだめもとでsleep(30)にしてみましたが、なんの効果もなかった訳だ(汗)

さっそく/package/admin/daemontools/compile以下で

% make clean
% make

してから、/package/admin/daemontools/command以下にある実行イメージを全て入れ替えて、daemontoolsの再起動。

% /package/admin/daemontools/command/svscanboot &

その後、アクティビティモニタでCPU負荷を見てみると、daemontoolsを動かす前と動かした後で殆ど負荷の高さに変化が見られません!ばっちりです!

これでようやく再起動したときや、UPSがサーバを再起動したときにサービスがきちんと復旧できそうで安心しました。


このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをTagClickに追加

45 queries. 0.713 sec.
Powered by WordPress Module based on WordPress ME & WordPress

sailweb検索
Apple Store(Japan)
月別過去記事
なかのひと

ホーム -  ブログ -  フォトギャラリー -  リンク -  お問い合わせ
Powered by sailweb.net ? 2005-2007 sailweb.net
Theme Designed by OCEAN-NET