1999 年 3 月 27 日 16 時 30 分より (B 会場) 自由集会 (第 46 回日本生態学会大会・松本) | なぜ生態学の研究に計算機を用いるのか | http://hosho.ees.hokudai.ac.jp/~kubo/ce/ 久保拓弥 (北大・地球環境) [email protected] 佐竹暁子 (九大・理・生物) [email protected] 「ディジタル化・電子化された文房具」あるいは「データー流しこんで全自動統計処理してくれ る便利なキカイ」として,いまや計算機は生態学の研究に欠かせぬ道具となった……しかしながら, 生態学における計算機の役割とはそれだけではない.この集会では,生態学者が自分の調査結果と アイデアを説明する「モデルの世界」を作り出す道具としての計算機について議論したい.計算機 を縦横に駆使するだけでなく,その中に自分自身で考えた「モデルの世界」を構築しておられる二 人のかたに話題提供を願いした.計算してみて分かることは計算すればいいという明快さをいった いどのようにして実現されているのだろうか.プログラム開発環境を利用して自前のモデルを構築 し,咀嚼された観測データをそのモデルに沿って再構成するとき,従来の (方程式を解かせるよう な) 「数値計算」とはまったく異なる計算機の相貌があらわれる. 話題提供者と演題 竹中明夫 (国立環境研) 植物の 3 次元構造と機能:各器官の相互作用とシミュレーションの役割 河田雅圭 (東北大・理・生物) 生態・進化における複雑な相互作用研究とシミュレーションの役割 テクニカルノート とミニレヴュー 上でのプログラミング Windows 上でのプログラミング環境 お金のかからない開発と解析: Linux Power Macintosh を Linux マシンにする 複雑系と生態学 まずカオスから てくにかる用語集 MacOS 河田雅圭 竹中明夫 久保拓弥 加藤悦史 佐竹暁子 編:久保拓弥 この配布資料は Linux 上で動く LATEX を用いて整形処理・編集しました) ( 1 講演要旨 植物の 3 次元構造と機能:各器官の相互作用とシミュレーショ ンの役割 竹中明夫( 国立環境研究所) [email protected] http://info.nies.go.jp:8092/~takenaka/index.html 本講演では、植物の地上部の3次元構造を計算機の中に再現してその受光効率を 計算す るシステムを紹介し 、そのような計算のめんど うさと、そのようなシステ ムによって得ら れるメリットについて論じる。 植物の地上部は光を受けて光合成をおこなうという重要な機能をはたしている。 光を受 ける効率は葉の空間分布に依存する。空から来た光は最初に当たった葉に 吸収され、一部 は反射され、また一部は透過する。どの葉に最初に当たるかは見 た目に明らかである。光 の来る方向からみて一番手前に見える葉に当たる。 どの葉にどれだけの光が当たるのかを計算するのはやや面倒だが、計算すれば分 かるこ とである。3次元空間の解析幾何の初歩の知識で対処できる。葉の枚数を 増やすことや空 の各方向からの光を考慮することは 、計算機の計算時間を増やす が人間の手間は増やさ ない。 このようなシステムを使えば、一枚一枚の葉の受光量を計算して光合成量を推定 するこ とができる。仮想的な形の植物を作って、現実の植物の形態の合理性を 考える比較材料と することもできる。茎の空間構造も含めて再構成すれば 、茎の 各部にはたらく力学的な力 を計算し 、光獲得と支持コストとの関係を解析するこ とも可能だ。 複数の植物を並べて、そのあいだの光をめぐる競争関係を調べることもできる。 ど ちら が勝つかを見るだけでなく、なぜ勝ったのか、なぜ負けたのかに踏み込こ とが可能になる。 光合成、呼吸、光合成産物の転流、新しい器官の発生などのプロセスと組み合わ せれば 、 植物が成長する過程を再現することもできるはずだ。生理学的な研究の 成果を個体レベル の現象の理解に結び付けるうえで、素過程を愚直に組み合わせ て計算する仮想植物という 統合ツールは重要な役割をはたすに違いない。 2 生態・進化における複雑な相互作用研究とシミュレーションの 役割 河田雅圭(東北大学理学研究科生物学専攻) [email protected] http://meme.biology.tohoku.ac.jp/kawata/index.html 生態学や進化生物学において扱われている現象のほとんどすべては、様々な様式の相 互作用によって作り出されるものである。これまでの生態学や進化生物学における verbal な理論や数理解析的な理論が扱う相互作用は、比較的単純なものであった。複雑な自然界 を単純な関係に切り取って説明できるという単純化はある程度有効で、これまでの生態学 や進化生物学で大きな成果をあげてきた。しかし 、これまで扱うことが困難であった複雑 な相互作用も、コンピュータをもちいることによって可能になってきている。 相互作用研究にコンピュータシミュレーションを行う利点として以下のことがあげら れる。 1. 単純なルールによる相互作用が複雑なグローバル現象をつくりだす場合 複雑系研究や人工生命研究で行われてきたように、生物の個体などの間でみだれる局 所的な相互作用において、その相互作用のルールは単純であっても、集団レベルとの 創発的な関係によって複雑なグローバル現象を作り出すことが知られている。このよ うな複雑系科学の現象の解明にはシミュレーションが必要である。 2. 相互作用が様々で複雑であり、その複雑さが重要であると思われる場合 自然界で実際に生じている相互作用は非常に複雑で、その自然界で生じていると思 われる相互作用をできるだけ取り込んで、相互作用が作り出す生態的進化的現象を予 測することによって、相互作用の働きとその結果を解明する。 3. 生態・進化現象にどのような要因が影響しているか直感的にわからない とき 比較的単純と思われることでも、実際にシミュレーションをしてみると思いがけない 結果になるときがある。そのとき、その原因を詳しく探ることによって、今まで思い つかなかった重要な要因を発見できる可能性がある。 4. 複数のパラメトリックでない要因が複雑に働いているとき、どの要因が 重要かを検定する。 今回の発表では、特に、2., 考察したい。 3., 4. の例をあげながら、シミュレーションの役割について 3 テクニカルノート とミニレヴュー MacOS 上でのプログラミング 河田雅圭(東北大学理学研究科生物学専攻) [email protected] http://meme.biology.tohoku.ac.jp/kawata/index.html なぜマックでプログラミング? 現在、とりたててマッキントッシュでなければできないということはなくなってきた。 しかし 、これまでマッキントッシュをつかっている人なら、プログラムだけは Windows や UNIX でやるよりもマッキントッシュ上でプログラムを組んだほうが便利である。また、計 算やシミュレーションの結果はそのままマッキントッシュのソフトで加工したり、整理した りすることができる。以下は、マッキントッシュでプログラムをつくる理由を書いてみた。 1. これまでマッキントッシュを使っていて、いまさら Windows や UNIX をつかう気にな れない。 というコンパイラ( C, C++,Pascal, JAVA などで書かれたプログラムを コンピュータが実行できるコードに書き換える)があり、プログラム開発の環境が優 れている(現在 CodeWarrior は Windows でも動く) 2. CodeWarrior 3. 計算結果をマッキントッシュ上で整理したり、グラフィクスソフトで視覚化したい。 マシンや Windows マシンと比べて価格比で計算速度は速い。たとえば 、私の書 いたプログラムでは SUN の ULTRA1 と Mac9500/120 とほぼ同じ速度。iMac なら 15 万円で 2-3 倍速い。同じ値段の intel マシンでの Linux や FreeBSD と比べても速い。 4. UNIX 5. マッキントッシュで共通のコードを書いて、UNIX で動かすということもできる。 マックでプログラミングをする方法 1. とりあえず計算だけしたいとき CodeWarrior をつかい、プログラミング、デバッグを行う。データはファイルに書き 出すことで、そのままエクセルなどに持っていくことができる。Project Settings のメ ニューで ANSI strict をチェックして、ANSI C, C++に適合するコードを書いていれ ば 、UNIX のコンパイラでコンパイルできる。 ライクなメニューをつかいたい。またマック上でグラフィクスをしたい APFC を使う。マック上で、メニューからファイルを読み込んだり、結果を保存した りできる。また、プログラムで使うパラメタをダ イアログボックスで変更できる。 2. Mac 4 3. マック上でグラフィクスをしたい. マックで動いたプログラムをそのまま UNIX 上で 動かしたい。 SCL を使う。マック上にテキストウインド ウとグラフィクスウインドウを表示しする ことができる。独自の関数をもっている。また、同じコード を UNIX に移してコンパ イルすると、UNIX 上に Xwindow が開いてグラフィクスを書いてくれる。大阪大学の 高橋智氏の開発したプラットフォーム. Windows 上でのプログラミング環境 竹中明夫( 国立環境研究所) [email protected] http://info.nies.go.jp:8092/~takenaka/index.html 多量の計算をするシミュレーションプログラムを Windows 上で効率よく開発し動かすた めにはどのような言語、環境、ツールを選択したらよいかについて、私のごくごく限られ た経験にもとづく個人的な意見をとりとめもなく書き連ねてみました。 < OS > これは Windows 上のプログラム開発についての文章ですから OS は Windows に決まっ ているのですが、Windows にも種類がいくつかあります(まとめて Windows family と呼 ばれる)。そのなかで数値計算プログラムの開発・実行環境としては WIndows NT がもっ とも適当だと思います。 売り物のソフトウエアでもときに(あるいはしばしば )暴走し 、フリーズします。自分 で書いたプログラムはなおのことしばしば暴走し 、フリーズします(言語および開発環境 にもよりますが ) 。そんなとき、OS ごと応答不能になってしまってリセットしたり電源を 落としたりするしかなくなってしまうのでは困ります。いちいち再起動する手間はかかる し 、ほかのソフトで作業中だった場合にはそちらもおしゃかになってしまうし 、ディスク 中のファイルが壊れてしまうこともあります。 ではひとつのソフトがこけると OS ごとこける、という状況がしばしば 起こります。Windows NT は、ひとつひとつのプロセスの独立性が高く、ユーザーが個々 のプロセスを個別に強制終了させることができます。ひとつのプログラムがまったく応答 しなくなっても、それだけを終わらせてしまうことが可能です。計算機をリセットするしか ないという状況にはなりにくい OS です( Windows family の中で) 。というわけで、95/98 よりは NT をすすめます。 NT には workstation 版とより高価な server 版というふたつの バージョンがありますが、workstation 版でけっこうです。 Windows 95/98 |||||||||||||| 5 <作成するプログラムのユーザインタフェース> ウインドウシステム上での GUI(Graphic User Interface) プログラミングはいろいろ面倒 な手続きをともないます。計算作業の本筋とは関係がない部分の学習に時間とエネルギー を使うのはもったいないです。 Windows 上といえども GUI にこだわるのは得策ではあり ません。 では、DOS 窓とかコマンドプロンプトとか呼ばれる CUI(Character User Interface) 環境が用意されています。DOS 窓は、名前の通り DOS のプログラムも動 作する環境ですが、この環境での計算の実力ははるかに DOS のそれを上回っています。計 算機の計算能力をフルに引き出せる環境です。とにかく数値計算をさせようということで あれば 、この DOS 窓で動作するコンソールアプリケーションと呼ばれる CUI プログラム から始めるのがよいと思います。そのうえで、興味・必要と時間があればおいおい GUI プ ログラミングに挑戦すればよいでしょう。 Windows 95, 98, NT 計算結果をきれいな絵にしたいなら、そういうことが得意なアプリケーションソフトに まかせるのがよいと思います。そうしたソフトの入力ファイルとして使えるような形の出 力ファイルを作り、あとはそのソフトに任せてしまう。いちばん簡単なのは表計算ソフト で読み込んでグラフにすることです。また、3次元のレンダリングソフトなぞを使うとと ても見栄えのよいものができ、人目をあざ むくことができます。 |||||||||||||| <プログラミング言語> どの言語を選ぶべきかは、どのぐらい習得時間をかけられるか、どのぐらいの計算量か、 作るのは使い捨てプログラムか末長くメンテしながらつきあうシステムか、などに依存し ます。できれば複数の言語をマスターして用途に応じて使い分けるのがベストです。 じゅうぶん時間をかけて勉強し 、大量の計算を行う大規模でしっかりしたシステムを構 築したい人は、メインの言語として C++を使い、データの前処理、後処理、さまざまな 設定の自動化などさざまざな雑務に Perl、というのがお薦めです。C++と Perl に習熟すれ ば 、まず困ることはありません。 とりあえず動く小規模から中規模プログラムを作りたい、あまり大量の計算はしない、 という人は Perl になんでもやらせるというのも有力な選択肢です。あまり大量の計算はし ないがやっぱりオブジェクト指向したいという人は、メインの計算には Python 、それにく わえて雑務の処理に Perl の二刀流でしょうか。Python は C++よりは気軽に使える言語で あり、かつ正面からオブジェクト指向を目指しています。 そのほか、以前の(構造化プログラミングに対応していない、もちろん CUI の)BASIC をちょっとかじったことがあるという人で、とりあえず動く小規模プログラムを手早く作っ てみたい人は、構造化された BASIC の方言を使うという選択もあります。 なお、大量の計算というのは、たとえばかけ算や足し算を何百億回から何十兆回ぐらい 行うような計算のことです。また、小規模なプログラムというのは行数にして数行∼数百 6 行程度のもの、大規模なプログラムとは1万∼数万行程度のもの、中規模とは小規模と大 規模のあいだのものです(あたりまえか )。※世の中でいう大規模プログラムというのは もう一桁から二桁ぐらい大きなものです。 |||||||||||||| 以下に、各言語について簡単なコメントを書いてみます。 C++ を、オブジェクト指向プログラミングがやりやすいように拡張して作られた、比較的 新しい言語です。現在、パソコン上のソフト開発の主流です。多量の計算を伴う大規模シ ミュレーションプログラム開発を目指す人にお薦めの理由は、 (1)オブジェクト指向のパ ラダ イムはシミュレーションという用途にとても合っていること、 (2)C++のコンパイ ラがつくる実行ファイルの計算速度は早いこと、の2点です。 これより遅い言語は山ほど あり、ほぼ匹敵するものが少しあり、もっと速いものはまずない、と考えていいでしょう。 C 問題点は、文法が少々複雑で、学習に時間がかかること。文法の習得そのものよりも、 その文法を生かしてきちんとオブジェクト指向したプログラムが書けるようになるまでか なりの経験が必要だ、ということです。ゼロから出発して、そこそこプログラムが書ける までに1、2ケ月、きちんとオブジェクト指向するまでに1年、というのがプログラミン グにある程度の適性がある人の標準所要時間のようです。 C 今、あえて C++でなく C を選ぶ理由はないでしょう。C++の C 部分だけを使うという ことはあり得ますが、それでも C++の便利になった機能をわざと使わないということに 積極的な意味はないでしょう。Windows 上で動作する市販の処理系も、C のみサポートし て C++はサポートしないというものはほとんどありません。ただ、C++の勉強のための 第一歩として C を勉強するという選択肢はあり得ます。また、C++ のプログラムから、C のプログラム資産を利用することは簡単です。 Perl での CGI プログラミングによく使われることで一気に知名度が上がりました が、それ以前から数行で書くテキストファイル処理プログラムから数百、数千行のプログ ラムまで、さまざまな用途に使われている柔軟な言語です。これだけで十分という人も多 いでしょうし 、C++で大規模なシステムを、という人でもデータの前処理、後処理や、シ ミュレーションの設定ファイルのたぐいの自動生成など 、さまざまな用途に利用できます。 覚えて絶対損のない言語だと断言してしまいます。 Web page なお、最近のバージョン ((5.0 以上)ではオブジェクト指向のサポートを標榜していま すが、やや無理をしている感もあります。オブジェクト指向プログラミング用には C++か Python がよいと思います。 7 Python 現在売り出し中のスクリプト言語で、オブジェクト指向の本格的サポートが売りです。 日本での浸透度はまだ低いですが、なかなか使い勝手はいいです。Perl の手軽さで、より 整ったプログラムを書くことができます。 FORTRAN 科学技術計算の標準言語としての地位に長きにわたって君臨してきた由緒正しい言語で す。とはいえ、文法上にさまざまな不自由さと不自然さも抱えており、C++よりもすぐれ ている点はほとんどないといってよいと思います。 というわけでその寿命ももはや尽きんとしている.... とずっと言われつづけているよう ですが、なおもしぶとく生き残っています。多量のプログラム資産が蓄積していることが その理由でしょうか。ともあれ、プログラミングをこれから勉強しようという人があえて FORTRAN を選ぶ積極的理由はないでしょう。 Pascal 禁欲的な(=許される書き方が限定された )言語仕様で、教育用にひろく使われていた ようです。この言語の拡張版が、Imprize 社(前 Borland 社)の Delphi に使われています。 Delphi は Windows 上の GUI ソフトを手軽に作るツールとして人気があります。 BASIC ふた昔まえ、日本の国産パソコンについてきた N88-BASIC というものがありました。当 時は 市販のアプリケーションソフトがきわめて限られていたので、パソコンを使うという のは、 ほとんど BASIC でプログラムを書くことと同義に近いものでした。とはいえ、当 時の BASIC は大規模プログラムや大量の数値計算をゴ リゴ リやらせるにはとても不向き なものでした。 その後、いわゆる構造化プログラミングに対応した拡張がなされた方言が作られ、簡単 に GUI プログラムができる(という触れ込みの)Visual BASIC という開発環境で採用さ れたりもしています。プログラミングの通人たちからは疎んじられながらもそれなりの存 在感を維持している言語です。 Excel をお使いならば 、その中で BASIC のプログラムを書いて実行させることもでき ます。 |||||||||||||| <オブジェクト指向プログラミングについて> オブジェクト指向のプログラミングとは、データ処理のプロセスの設計を中心に開発す るのでなく、問題領域に登場する「もの」や「こと」をプログラムの中でどのように表現 するかの設計を中心してプログラミングしていこう、という設計技法です。そのような設 8 計を支援するような文法構造を持った言語が、オブジェクト指向プログラム言語と呼ばれ ます。 オブジェクト指向プログラム言語の元祖としては、Smalltalk という言語があげられるこ とが多いようです。設計は美しいものの、当時の計算機の能力では使い物になる開発・実 行環境を用意できず、実用言語としては広まりませんでした。その後、計算機の能力があ がるにつれて、一部でリバイバルしているようです。 に先んじるオブジェクト指向言語として、Simula という言語がありました。そ の名前から想像がつくように計算機シミュレーションシステムの開発のためにつくられた 言語です。 シミュレーションとはすなわち世界の「もの」や「こと」を計算機中に再現し てみることですから、 オブジェクト指向の技法とはまさにぴったりの相性です。 生態学の 問題領域に登場する「もの」や「こと」をシミュレートする場合にも、オブジェクト 指向 技術を生かすことで拡張性のある自然な計算システムが作れるのではないかと思います。 Smalltalk お金のかからない開発と解析:Linux 久保拓弥 (北大・地球環境) [email protected] http://hosho.ees.hokudai.ac.jp/~kubo/ ここでは Linux という OS が生態学の研究にどのように役に立ちそうかを簡単に説明 する. Linux とは何か ? は現在 (1999 年 3 月) 世界で最も多く使われている無料の Unix 的な OS である. 実際に使っていても筆者などにはその他の Unix 系 OS と区別すらつかない (じゃあ,その `Unix' ってのは何? という疑問だけど……まぁ,30 年ほど前からいろいろなハードウェアで 利用されている堅牢だけど少し無愛想な OS だと思ってください).Linux を入手するには 世界中あちこちにある大学や研究所などの FTP server からダウンロードするか,あるいは 書籍や雑誌のオマケとして配布されているインストール用 CD-ROM を使えばよい.また日 本でもいくつかの会社が「○○ Linux 」といった商品名で Linux インストール用 CD-ROM をパッケイジソフトウェアとして販売している.これらは普通のパソコンショップや大学 生協などで購入できる.つまり,ソフトウェア自体の対価は無料だけれど ,実際に手にい れようと思ったら通信回線費やメディア代その他ぐらいは支払わなければならない.ここ でいう無料はそういう意味だ.ともあれ,ソフトウェア製造会社が作成し販売しているプ ログラムに比べれば , 圧倒的に安価であることは間違いない. Linux なぜ Linux やその OS 上で使用するさまざまなプログラム (GNU プロダクツが多い) は 無料なのか? もちろん,これらが営利目的で作られていない,というのも大きな理由のひ とつだ.しかしながら,それだけではない.もっとも重要なのは,そのソースコードがす 9 べて公開されてしまっている点にある.そしてこれはわれわれ学術研究者にとっても (お 役所書類ふうに言うなら) 研究遂行上必要不可欠なのである. ソースコードが公開されれば,ソフトウェアの秘密がすべて暴露されていてもはや隠す べきものがない.だから,ふつーの商用ソフトウェアのように,秘密の独占によってどこか の企業が金儲けをする,という構図が成立しない.そのおかげで,われわれ利用者は無料 でプログラムを入手できる.また,世界中の物好きたちがよってたかって公開された Linux のあら探しをやって問題点 (バグ ) の指摘を続けている.それが反映されていってソフト ウェアの品質はどんどん向上している. さらにわれわれは学術研究を進めるために計算機のプログラムを使っているのだから, ソースコードがきちんと公開されているソフトウェアを用いるのは,もちろんその目的 (再 現可能な知的生産とその共有) に沿った実に正当なふるまいなのである. は多くのハード ウェア上で動作する.Macintosh で Linux を使うこともできる. これについては加藤悦史さんが解説してくださるのでそちらを参照していただきたい.し かしながら,とくに理由がないならば,Linux を初めて動かそうとする人はハード ウェア として PC を用いるのが無難だと思う.現時点でもっとも多く Linux を動かしていている プラットホームは Intel 系の CPU をもつ `PC' (つまり Windows が動くようなアーキテク チャー) なので,関連情報が得やすいためだ. Linux Linux の利点? それは簡単にプログラムが作れて…… それでは Linux という OS を生態学者が使うと,どのような利点があるのだろうか.こ こではプログラム開発が簡単にできると作ったプログラムを簡単に『接続』できるこの二 つの特徴だけを紹介したい. どれでもいいけれど Linux のディストリビューションをひとつインストールしてみて驚 くのは,OS だけでなく多方面にわたる有用なプログラムが同時にインストールされてし まうことである.とくにプログラム開発環境の充実には目を見はるものがある.C/C++ や Fortran のコンパイラー ( gcc / g++ / g77 といった GNU のコンパイラーはコンパイ ルする以外の様々な機能を持っている) とそのディバッガー,Make や RCS といった開発 支援プログラム,Perl や Python や Ruby といったスクリプト言語,中には (いまの 30 代 後半以上の人々がかの古き良きと懐かしむ) BASIC までインストールされてしまうディス トリビューションまである. という開発環境におけるプログラミングは手軽というほかない.たとえば C++ で 「平方根を求めるプログラム」を書いてみよう.テキストエディターで, Linux #include #include <iostream.h> <math.h> int main(void) { double a; cout << "### Square Root Calculator ###\n" 10 << "Input a real number = ? "; cin >> a; cout << "Sqrt(" << a << ") = " << sqrt(a) << endl; return 0; }; ……と記述して保存する (ファイル名は calcsqrt.cc だとする).次にシェルのコマン ド ラインからただ一行, g++ calcsqrt.cc -o calcroot ……と入力すれば,ただちにコンパイルしてくれる.上のプログラムに問題点があれば「○ 行目にエラーがあります」と教えてくれる.書き間違えなどがなければ calcroot という 名の実行ファイルを新しく作る.それを動かすには./calcroot とだけ入力すればよい. % ./calcroot ### Square Root Calculator ### Input a real number = ? 7 Sqrt(7) = 2.64575 ……という出力が何とも安直に得られてしまう (一行目の%はシェルのプロンプトで…… えー,まぁわからない人はこれ以降も% は無視してください). もっとも,これぐらいの計算プログラムなら Perl を使えば, % perl -e 'print "\nInput a number = ? "; $_=<>; chomp; printf "Sqrt($_) = %g\n", sqrt;' Input a number = ? 7 Sqrt(7) = 2.64575 ……と,一行で書けてしまう ( perl ... sqrt;' まで一行になっている).他にもいろ いろなプログラミング言語が存在するのだけれど ,つまりは利用者の必要と嗜好に応じて 選べば良いのである. ……作ったプログラムをどんどん接続できる! さて,次の「ここが便利!! Linux (など Unix 的 OS) 」としてプログラムの接続が容易に ついて取り上げたい.この特徴こそは Unix 的モノの考え方をよく体現している. 11 をはじめとする Unix 的 OS には最初から多くのデーター処理用の単能プログラム がたくさんインストールされている.その「単能」ぶりの一端を見ると……「表形式デー ターの指定した列だけ切り出す」 「指定した列に着目してソートする」 「ファイルの行にナ ンバーをつけて表示する」 「特定の文字列をみつけたら指定した文字列に変換する」 「二つ のファイルを比較して違いを探す」 「ファイル中の同じ行の数を調べる」……ホントにこれ だけしかできないのである.孟嘗君の食客じゃあるまいし,こんな連中がいくらそろって いても何の役にもたちそうにない.しかしながらパイプと呼ばれる‘ 魔法の糊 ’を使って, こういう一芸プログラムあるいは自作のプログラムを「くっつけて」いくと,面倒な処理 が意外と簡単にできてしまう. Linux たとえば「毎木調査データーの樹木の本数を種類別に数えて本数の多い順に整列させる」 処理を考えてみよう.データーは maiboku.txt というテキストファイルに一行一本づつ 記されているとする.ここで以下の一行の文字列を打ち込んでみると, % cut -f6 maiboku.txt | sort | uniq -c | sort -nr 741 イヌブナ 605 ハクウンボク 600 サワシバ 566 アカシデ 546 オオモミジ ...... (以下略) ...... ……と,簡単にできてしまった.縦棒 ( j ) がパイプである.これが処理と処理をつないで いるのである.さてさて,この一行プログラムはど ういう仕掛けになっているのか? 最初の cut -f6 maiboku.txt はデーターファイル maiboku.txt の 6 列目 (ここに各個 体の樹種名が記入されていた) だけを切り出している.次にそれを sort に渡すと,無秩序 に並んでいた樹種名が 50 音順 (正確には文字コード 順) にソートされる.つまり元データー が b, d, d, a, c, b, a, d (コンマ, は改行と思ってください) だったとすると,sort によって a, a, b, b, c, d, d, d となってしまう.次にこれをパイプを介して uniq に 渡すと,隣り合っている行の内容が同じだったらひとつにされる.先の例で言うと a, a, b, b, c, d, d, d が a, b, c, d と変換されるのである.このときにオプション -c を つけていると,重複している行の数もついでに調べる.つまり 2 a, 2 b, 1 c, 3 d と 出力してくれるのである.最後にこれをもう一度 sort に通すのだが,このときはオプショ ンとして-nr を指定している.これは「文字コードではなく数値の大小で並べ替えろ」 「大 きい順に並べろ」という意味である.2 a, 2 b, 1 c, 3 d という入力から 3 d, 2 a, 2 「 調査地内の樹木の本数を種類別に数えて多い順に並べた b, 1 c という結果が得られる. い」という目的はかくのごとくただ一行のコマンド にて達成されていたのである. このように Linux など Unix 的な OS では「ひとつひとつのプログラムは単能 にしてお く (それゆえに汎用性を獲得しうる) 」 「単能なプログラムを結合 して複雑な処理を行う」と いう明晰かつ経験にうらうちされた原則に基づいてデーターが処理されていく.これこそ は Unix 的 OS がこれまで 30 年近くにわたって存続し,今でもなお多くの分野で広く用い 12 られている理由のひとつに違いない.プログラムがいくら「暴走」しても何百日でも安定 して動作を続ける堅牢性・頑健性 (暴走したプログラムは「きれいに殺して」しまえる!!), そして調査地ごとにデーターフォーマットが異なる生態学のデーター解析には,変幻自在 かつ融通無碍でもある Unix 的 OS こそがまさに最適な電算機環境といえるのではないだ ろうか. Power Macintosh を Linux マシンにする 加藤悦史 (北大・地球環境) [email protected] http://hosho.ees.hokudai.ac.jp/~kato/index-j.html ここ最近の Linux に対しての注目はすさまじいものがありますが 、Linux といえば PC (いわゆる DOS/V) で動くものと一般に思われているようです。もともと 開発者である Linus さんが AT-386 コンピュータでつくったものですから、確かにそれはそのとおりな のですが。しかし現在は多くの人々の努力で Motorola 68k, Digital Alpha, SPARC, Mips, PowerPC などの CPU が入っている機械でも Linux が使えるようになっています。 生態学の研究室では Mac を主に使っているところが多いかと思います。(実際、今の研究 室でも共同のコンピュータとして Quadra とか Centris がいまだに頑張っています) そこで身近にある Macintosh を Linux にしてしまおうということについて 、簡単に書 いておきます。ここでは計算に使うということで 、実行速度の速い Power PC を搭載し た Mac だけに話を限ります。(68k の古いマックで動く PC-UNIX としては NetBSD/m68k と Linux/m68k があるようです。使ったことがないのでどれくらい安定しているかはちょっと分りま せん) で動く Linux としては主に MkLinux と Linux/PPC の二つがあります。こ の二つはカーネルが違うだけで、個々のソフトウエアに関しては binary 互換です (つまり 同じものが使える) ので実用上大きな違いはありません。両者をあわせて Linux for PPC と呼ぶこともあるようです (わかりにくいなー)。 Power Mac ただ LinuxPPC の方が速く動作するようなのでこちらが最近は好まれているようです。 また今後の対応なども LinuxPPC の方が優れていると思います。書店などには MkLinux 本がまだまだありますが、これから使うなら LinuxPPC でしょう。 ただし LinuxPPC は初代 Power Mac (6100, 7100, 8100) には対応していないので、これ らの機械で使う場合には MkLinux を使うことになります。(ということで僕はまだ MkLinux をつかっています。MkLinux の開発も続けられており iMac でもそのうち動くかもしれません) ハード ウエアについて 現在 (Mar 17 1999) のところ Linux が動く Power Mac は http://www.linuxppc.org/hardware/ と http://www.mklinux.apple.com/hardware.html によると 13 LinuxPPC Power Mac G3 desktop, minitower, All-in-One Power Mac 9600, 9500, 8600, 8500, 8200, 7600, 7500, 7300, 7200, 6500, 6400, 6360, 5500, 5400, 4400 Performa 6360, 64xx, 65xx Powerbook 2400 and 3400, G3, G3 Series 20th Anniversary Macintosh Workgroup Server 7250, 8550, 9650 MkLinux NuBus Based Machines 6100, 7100, 8100, 9100 First Generation PCI 7200, 7500, 7600, 8500, 9500 Second Generation PCI 7300, 8600, 9600 Performa and Powermac PCI 4400, 5400, 5500, 6400, 6500, 20th Aniversary Mac G3 Powermacs Desktop, Minitower Powerbooks 5300, 1400, 2400, 3400, G3, G3 Series と、ほとんどのマシン (6360 を除く Performa 52xx, 53xx, 62xx, or 63xx では動かない) で動きます。iMac はまだサポートされていませんが、すでに動かすことは可能で使ってい る人はいるようです。Blue and White G3 ではまだのようですがそのうち動くのではない でしょうか。 最近この Linux for PPC に対して日本でも認識が変ってきたようで、(というか Linux 流行 りに飛び付いているだけ?) 色々なコンピュータ雑誌に最近になって急に取り上げられてきて います。渋いあたりでは Sofeware Design 誌の 3 月号、また Mac の専門誌でも MACLIFE の 3 月号、日経 MAC 3 月号、さらに結構軽い (と僕は思っている) Mac Fan の 4 月 1 日号 でも Linux for PPC の特集が載っていたりします (これらは日本語環境の設定がすでになさ れた Linux for PPC Japanese Edition のリリースの影響ももちろんありますが。これについては http://www.PC-Mind.co.jp/LinuxPPC/index.html 参照) 。 これらの雑誌には CD-ROM もついてますし 、インストールの仕方なんかも丁寧に書い てありますので、興味のある方は一読をお勧めします。(とくに Mac Fan は安いし 、イン ストールについての記事がわかりやすいのでおすすめです) インストールについて を使うに当たって、今まで Mac しか使ったことのない人にはインストールですら 大変だと思うかもしれません。それでも Power Mac で Linux を使う利点として、ハード ウエアが限られているためにそれぞれに設定する必要がなく、Intel 版の Linux より簡単に インストールできるということがあります。上にあげた雑誌を使えば CD-ROM が利用可 Linux 14 能なので (しかも日本語環境)、雑誌の記事を見ながらそれほど苦労せずにインストールでき るでしょう。 そうでない場合は ftp などを使ってネットワークによるインストールが必要ですが 、身 近に Linux のことをよく知っている人がいるならともかく、初めての場合はよくわからな いかもしれません? それでも Ring Server の /archives/linux/linuxppc-jp/1.0/InstallGuide.txt などをよく読ん でみれば何とかなるかもしれません。これは非常に詳しく日本語で書かれています。日本 語でも利用できるようにしてくださった方に感謝です。 Ring Server については http://ring.etl.go.jp/index.html.ja などを見てください。 インストール後について インストールが終わってしまえば 、もう後はいわゆる UNIX を使うこととまったく同じ です (Linux/PPC, MkLinux は RedHat ベースです)。PPC だからという特別なことはありま せん。久保さんが紹介されている、 Text ベースのデータ処理や、シミュレーションなど にどしどし使ってください。 G3 マシンを使えば非常に高速な計算機としても有用だと思います。 Linux についての一般的な情報 (本など ) をほとんど同じように利用することができます。 もちろん UNIX の情報もです。 自分自身の責任で何とかする (at your own lisk) ということさえ理解していれば、Linux をうまく研究に使うことができると思います。(もちろん PPC でつかうことによる不安定さな どもわかって使うということです。) Power Mac で動く Linux の Web 上の情報源 Original (Ocial?) なサイトとして http://www.linuxppc.org/ Linux/PPC のサイト http://www.mklinux.org/ MkLinux の新しいサイト http://www.ppc.kernel.org/ Linux/PPC のカーネルについての詳しいサイト FAQ (よくある質問) http://www.dartmouth.edu/~jonh/lppc-serve/cache/1.html 日本語での情報なら http://ppc.linux.or.jp/ Japan PPC Linux Users Group のページ 15 http://www.y-min.or.jp/~nob/LinuxPPC/index.html 日本の Linux PPC に関するメーリングリストの主催者である村田さんのページ 英語、日本語とも メーリングリストの過去記事の検索ができるので、わからないことがあった ら、まず検索をかければほとんどの疑問が解決すると思います。 せっかく検索ができるようになっているのですから 、こんな便利なものを利用しないてはありま せん。 http://lists.linuxppc.org/ 英語のメーリングリストの検索 http://mail.y-min.or.jp/~nob/ml/linuxppc-jp/ 日本語のメーリングリストの検索 以上、これらの情報はすでに Web 上に存在する多くのものの寄せ集めでしかありませ んが、ここから先は使っていくうちに、自分自身でわかっていくことでしょう。 身近に UNIX のことを聞ける人がいるということも大事かもしれません。 複雑系と生態学 まずカオスから 佐竹暁子 (九大・理・生物) [email protected] 計算機の高速化によって,対象のさまざまなプロセスを自在に取り入れた現実的なモデルを構築 できるようになりました.その一方で,計算機は空間構造の役割などそれなくしては出会えなかっ たような生態学の新しい理論の展開をもたらしています.ここでは,そのひとつであるカオスとカ オス結合系について簡単に紹介します. カオス カオスとは,非線形の決定論的なシステムに生じる確率的な振動現象です.カオスは現段階では 様々な定義がされていますが,生態学の中で有効と思われるカオスの定義としては, “ 初期条件に 関する敏感な依存性 ”があります. カオスの判定:リアプノフ指数 ある時系列データがカオスであるかど うかはリアプノフ指数を用いて定量的に判定することがで きます.ある軌道がそれからわずかにずれたとき,そのずれは時間発展にともなって指数的に拡大 あるいは縮小します. 16 “ リアプノフ指数 ”とはそのずれの拡大率で,例えば, x(t + 1) = (x(t)) で記述される差分方程式ではその時系列 fx(1); x(2); :::g を使ってリアプノフ指数 は X 1 T 01 = lim log j 0 (t)j T !1 T t=0 となります.もし x(t) が安定な平衡点または極限周期軌道に収束すれば,ずれは減衰しリアプノ フ指数 は負の値をとります.しかしカオスの場合にはずれがどんどん増幅され(上図), は正 になります.つまり,カオスの存在は正のリアプノフ指数によって示せるのです. 現在限られた時系列データからそれがカオスかど うかを識別するための手法が多くあみ出されて おり,ハタネズミやマメゾウムシの個体群などでカオスの存在が明らかになっています. カオス結合系 カオス結合系は単独だとカオスを示す要素が互いに結合されて集まったシステムです.カオス要素 が局所的に相互作用する( Coupled Map Lattice |CML )や,大域的に相互作用する( Globally Coupled Map|GCM )が詳しく研究されています.CML は空間的に広がった自由度の大きい カオスで,しばしば時空カオスと呼ばれる空間的にも時間的にも多様な挙動を示します.CML は ホストーパラサイト系のモデルとしてよく活用されており,共存に対する空間構造の重要性が強調 されています.GCM でも興味深い現象がみられます.各要素のカオスの程度が強いと,それぞれ はばらばらになろうとしますが,逆に相互作用が強い時には引き込みがおこり完全に同調します. また,カオスの強さと相互作用の強さが競合しているときにはいくつかのグループに分かれて,そ れぞれのグループで揃って振動します(クラスタリング ).GCM モデルは一斉開花結実現象でみ られる樹木間での種子生産の同調メカニズムを明確にすることにも有効です. Pollen-Coupled Tree Model 樹木は光合成によってエネルギー貯蔵量を増し,花を咲かせ,森林内の他の開花樹木の花粉を利 用することで受粉がおこり成熟種子の生産にいたります.このような一連のプロセスの中で,樹木 のエネルギー蓄積量は光合成による増加と繁殖による減少に従って毎年変化し,繁殖に多くのエネ ルギー量が利用されるとカオス的に変動します.このような単独ではカオス的な種子生産を行う樹 木が集まって花粉をやりとりしているような状態は GCM の一つの例として考えられます(下図). 17 花粉をのやりとりの程度に応じて,林内の樹木は種子生産が同調してくるほか,以下のような多 様なふるまいをみせることが明らかになりました. 計算機は,私達が一般法則を見い出すための新しい思考方法として活躍するでしょう. 自由集会で紹介した研究 1. Hassell MP., Comins HN. and May RM. 1991. Spatial structure and chaos in insect population dynamics. Nature 353: 255-258 2. Hastings A. 1993. Complex interactions between dispersal and dynamics: Lessons from coupled logistic equation. Ecology 74: 1362-1372 3. Isagi Y., Sugimura A., Sumida A. and Ito H. 1997. How does masting happen and synchronize? J. Theor. Biol. 187: 231-239 4. Kaneko K. 1989. Spatiotemporal chaos in one-dimensional and 2-dimensional coupled map lattices. Physica D 37: 60-82 5. May RM. 1974. Biological populations with non-overlapping generations: stable points, stable cycles and chaos. Science 186: 645-647 6. Satake A. & Iwasa Y. Pollen-coupling of forest trees, forming synchronized and periodic reproduction out of chaos. (in review) 18 てくにかる用語集 注) 編者による偏見多し !! ( 編:久保拓弥 OS GUI プログラム 開発 【おーえす / operating system 】プログラムを実行させるときに,必要なメモ リーを割り当てたり,外部装置とのやりとりを助けるソフトウェア.日本の新 聞やテレヴィジョン報道では「基本ソフト」などと呼ばれることもある.よい OS の必要条件としては「実行しているプログラムが暴走しても,それを『きれ いに殺す』」などが挙げられる.代表的な OS としては Unix (Linux / MkLinux / FreeBSD など ),MacOS,Windows (Windows NT など ) がある. 【ぐーい / graphical user interface】ソフトウェアの入出力部分において,文字 ではなくド ット絵,キイではなくマウスによる制御が重要であると主張する思 想の具現.OS などとは本質的に独立なモノなのだが,混同して使われることが 「○○はキイボードが苦手な人でも簡単につかえるわかりやすい 多い (誤用例: OS だねぇ」).代表的な GUI としては,X Window System (Unix 用),Finder (MacOS 用),Windows98 (MS-DOS 用) などがある.GUI でない文字中心の インターフェイスは CUI と呼ばれる. 【ぷろぐらむ / program 】計算機を作動させる情報,あるいはそれを記したファ イル.プログラムのうち, 「 機械には読めるけれど人間には読めない (あるいは読 むのがしんどい) 」ものはバイナリーファイル / 実行ファイル / 機械語プログ ラムなどと呼ばれ, 「 人間に読めるけれど機械には読めない」ものはソースファ 「 人間にも機械にも読める」ものは イル / ソースコード / コードなどと称され, スクリプトなる名前が与えられ, 「 人間にも機械にも読めない」ものは下手くそ なプログラム / へっぽこプログラム / 汚いプログラムとののしられている.プ ログラムを作ることをプログラミングという. 【かいはつ / development】プログラムを作ること.プログラミング.開発環境 というのはソフトウェア開発のためのソフトウェアに何を使うか,ということ. プログラミング言 【ぷろぐらみんぐげんご / programming language 】プログラムを記述するため 語 の言語.代表的なものとしては,C / C++ / Fortran / Pascal / BASIC / Perl / Tcl /Tk などがある. データー構造 【でーたーこうぞう / data structure 】プログラムの中でデーターをどう取り扱 うかという形式.代表的なものとしては,スカラー / 配列 / リスト / ハッシュ などがある. アルゴリズム 【あるごりずむ / algorithm 】 「データーを処理する手続き」を抽象的に表現す る語.具体的なプログラミング言語とは独立である. 「データー構造 + アルゴリ ズム == プログラム」という名言がある. バグ 【ばぐ / bug 】虫.転じてプログラムに含まれる誤り.誤りがあると,計算機 は人間が期待しない動作をする. ディバッグ 【でぃばっぐ / debug 】プログラムに含まれるバグを見つけて修正すること.そ のときにディバッガーと呼ばれるソフトウェアを使うこともある.某社はディ バッグされた修正版プログラムを恩着せがましく service pack などと僭称して いたりする. 暴走 【ぼうそう / crash / freeze 】バグを含むへっぽこプログラムを作成し実行した ときに,永劫に終わることない反復作業を始めたり,メモリをぐ ちゃぐちゃに したり,システムを破壊したりすること.良い OS を使っていれば,暴走した プログラムだけを安全に「殺して」しまえるのだけれど,ダ メな OS ならばシ ステム全体を再起動しなければならない. 19 コンパイラー インタープリター テキストファイル バイナリーファイ ル エディター 構造化プログラミ ング 【こんぱいらー / compiler 】ソースコードを実行ファイルに変換するソフトウェ ア.実行する前に一括して機械に読める形に変換する (コンパイルする) ので, 実行速度が速くなる.ただしプログラムに誤りがあった場合,元のソースコー ド を修正してコンパイルをやり直す必要がある. 【いんたーぷりたー / interpreter】 「人間にも機械にも読める」スクリプトを読 み込んで一行ずつ実行するプログラム.コンパイラーを用いた場合に比べて実 行速度は遅い.しかしプログラムの修正は容易. 【てきすとふぁいる / text le 】人間に読める文字コードで書かれたファイル. ソースコードやスクリプトはテキストファイルで記述することが多い. 【ばいなりーふぁいる / binary le 】テキストファイル以外のファイル.ふつー の人間には読めない.バイナリーとは二進数の意. 【えでぃたー / editor 】何かを編集するソフトウェア.テキストを編集するソフ トウェアはテキストエディターである. 【こうぞうかぷろぐらみんぐ / structured programming 】 「読みにくい汚らしい コードを書くな」という宗教運動.機能ごとに独立したモジュールを用意して おき,必要に応じてそれを呼び出すのがよいプログラムとされ,実行中にソー スコードのあちこちを迷走するのはダメな書き方の烙印を押されて迫害される. オブジェクト 指向 【おぶじぇくとしこうぷろぐらみんぐ / object oriented programming 】比喩的 プログラミング に説明すると,生物集団のモデルをプログラミングするときに各個体に「君は A という種類の生き物だから,ここではこーいうふうに振る舞って……」と何 かあるたびにいちいち教えてやるのではなく,あらかじめ計算機内の個体たち に‘ 教育 ’を行い「私は A なんだからこの状況ではこうしよう」という自覚と 自立心を持たせるのがいいんじゃなかろーか,という宗教運動. FSF 【えふえすえふ / Free Software Foundation】 「ソフトウェアはすべからく無料 かつそのソースコードが公開されていなければならない」という教義をらでぃ かるに実践している戦闘的宗教団体.その影響力は絶大,地球上の貧乏プログ ラマーをあまねく救済している.教祖は Richard Stallman,世界中から尊敬さ れ「恐れ」られている人物.→ GNU GNU 【ぐぬー / ぐにゅ / GNU is Not Unix 】FSF が配布もしくは認可しているフ トウェア.GNU プロダクツとも.GNU という略語は再帰的に定義されている. → FSF Linux 【りぬくす / りーぬくす / りぬっくす / りにゅっくす / りぬぉぅくす / りなっ くす / らいなくす / らいなっくす】読み方は決められていない.ただし,FSF の Stallman の前では「 GNU/Linux」と言わないと説教されてしまう. 「無料」 で高性能な OS.→ 「テクニカルノート」の解説 カーネル 【かーねる / kernel】OS の“ 中核部 ”のこと.ドライヴァーやファイルシステ ムも一体化しているのを「一枚岩 (monolithic) 」カーネル,最小限の機能 ( メモ リと CPU 資源の分配) だけのものをマイクロカーネルという. シェル 【しぇる / shell 】カーネルとユーザーを介在するプログラム. PC 【ぴーしー】コンピューターハード ウェアのガイド ラインのひとつ,あるいは それに従っている機械.日本では「 DOS/V 」とか「 AT 互換機」と呼ばれてい る場合も多い.よーするに Windows なるモノが動くような計算機のこと. 20
© Copyright 2025 Paperzz