「ほっ」と。キャンペーン

<   2008年 10月 ( 51 )   > この月の画像一覧

RoR script/console で最初にすること

Rails のアプリケーションのルートディレクトリで script/console を実行すると、Rails を irb 上でコントロールすることができるが、script/console を実行しただけでは素っ気ないプロンプトが表示されるだけで何ができるのかわからない。

そこで、次のようにして、RoR で使えるトップレベルの定数を表示してみた。

~/console/rails/demo$ script/console
Loading development environment (Rails 2.1.1)
>> self.class.constants.sort.each {|c| print c, ' --- ', eval("#{c}.class"), "\n"}
ARGF --- Object
ARGV --- Array
ActionController --- Module
ActionMailer --- Module
ActionView --- Module
ActiveRecord --- Module
ActiveResource --- Module
ActiveSupport --- Module
ApplicationController --- Class
ApplicationHelper --- Module
ArgumentError --- Class
Array --- Class
Base64 --- Module
BasicSocket --- Class
Benchmark --- Module
BigDecimal --- Class
Bignum --- Class
Binding --- Class
BlankSlate --- Class
Buffering --- Module
Builder --- Module
CGI --- Class
CROSS_COMPILING --- NilClass
Class --- Class
ClassInheritableAttributes --- Module
Comparable --- Module
ConditionVariable --- Class
Config --- Module
Continuation --- Class
DRb --- Module
DRbIdConv --- Class
DRbObject --- Class
DRbUndumped --- Module
Data --- Class
Date --- Class
DateTime --- Class
Delegater --- Class
Delegator --- Class
Dependencies --- Module
Deprecated --- Module
Digest --- Module
Dir --- Class
Dispatcher --- Class
ENV --- Object
EOFError --- Class
ERB --- Class
Enumerable --- Module
Errno --- Module
Etc --- Module
Exception --- Class
Exception2MessageMapper --- Module
FALSE --- FalseClass
FalseClass --- Class
Fcntl --- Module
File --- Class
FileLike --- Module
FileTest --- Module
FileUtils --- Module
Fixnum --- Class
Float --- Class
FloatDomainError --- Class
GC --- Module
Gem --- Module
HTML --- Module
Hash --- Class
HashWithIndifferentAccess --- Class
IO --- Class
IOError --- Class
IPSocket --- Class
IPsocket --- Class
IRB --- Module
Iconv --- Class
IndexError --- Class
Inflector --- Module
InstanceExecMethods --- Module
Integer --- Class
Interrupt --- Class
Kconv --- Module
Kernel --- Module
LoadError --- Class
LocalJumpError --- Class
Logger --- Class
MailHelper --- Module
Marshal --- Module
MatchData --- Class
MatchingData --- Class
Math --- Module
MemCache --- Class
Method --- Class
Mime --- Module
MissingSourceFile --- Class
Module --- Class
Monitor --- Class
MonitorMixin --- Module
Mutex --- Class
Mutex_m --- Module
NIL --- NilClass
NKF --- Module
NameError --- Class
Net --- Module
NilClass --- Class
NoMemoryError --- Class
NoMethodError --- Class
NotImplementedError --- Class
Numeric --- Class
Object --- Class
ObjectSpace --- Module
Observable --- Module
OpenSSL --- Module
PLATFORM --- String
PStore --- Class
ParseDate --- Module
ParseError --- Class
Pathname --- Class
Precision --- Module
Proc --- Class
Process --- Module
Queue --- Class
RAILS_CACHE --- ActiveSupport::Cache::MemoryStore
RAILS_DEFAULT_LOGGER --- ActiveSupport::BufferedLogger
RAILS_ENV --- String
RAILS_GEM_VERSION --- String
RAILS_ROOT --- String
RAILTIES_PATH --- String
RELATIVE_RAILS_ROOT --- String
RELEASE_DATE --- String
REXML --- Module
RUBY_PATCHLEVEL --- Fixnum
RUBY_PLATFORM --- String
RUBY_RELEASE_DATE --- String
RUBY_VERSION --- String
Racc --- Module
Rails --- Module
Range --- Class
RangeError --- Class
Rational --- Class
RbConfig --- Module
Readline --- Module
Regexp --- Class
RegexpError --- Class
RubyLex --- Class
RubyToken --- Module
RuntimeError --- Class
SLex --- Class
STDERR --- IO
STDIN --- IO
STDOUT --- IO
ScanError --- Class
ScriptError --- Class
SecurityError --- Class
Set --- Class
Signal --- Module
SignalException --- Class
SimpleDelegater --- Class
SimpleDelegator --- Class
Singleton --- Module
SizedQueue --- Class
Socket --- Class
SocketError --- Class
SortedSet --- Class
StandardError --- Class
String --- Class
StringIO --- Class
StringInput --- Class
StringOutput --- Class
StringScanner --- Class
Struct --- Class
Symbol --- Class
SyntaxError --- Class
SystemCallError --- Class
SystemExit --- Class
SystemStackError --- Class
TCPServer --- Class
TCPSocket --- Class
TCPserver --- Class
TCPsocket --- Class
TMail --- Module
TOPLEVEL_BINDING --- Binding
TRUE --- TrueClass
TSort --- Module
TZInfo --- Module
Tempfile --- Class
Test --- Module
Text --- Module
Thread --- Class
ThreadError --- Class
ThreadGroup --- Class
Time --- Class
TimeZone --- Class
Timeout --- Module
TimeoutError --- Class
TrueClass --- Class
TypeError --- Class
UDPSocket --- Class
UDPsocket --- Class
UNIXServer --- Class
UNIXSocket --- Class
UNIXserver --- Class
UNIXsocket --- Class
URI --- Module
UnboundMethod --- Class
UsersHelper --- Module
VERSION --- String
XmlSimple --- Class
YAML --- Module
ZeroDivisionError --- Class
Zlib --- Module

リストが長くなってしまったが、RoR ではこれだけの数のクラスやモジュールを使うようだ。
[PR]
by tnomura9 | 2008-10-31 22:06 | Ruby | Comments(0)

プログラミングは語学だ

このところ Ruby のプログラムの記事ばかり書いている。集中してプログラミングに関する作業をしているうちに、プログラミングは語学との共通性が多いということに気がついた。

英文の読解をするのに必要なのは、単語の知識と文法と用例の知識だ。単語の知識を明確にするための道具は辞書だし、文法の知識は文章の構造を知るのに不可欠だ。しかし、用例をたくさん知っていなければ語学を実用的に使うことはできない。

プログラミングもそうで、プログラム言語の単語と文法の知識と、snippet などの用例の三本柱でプログラム言語を習得し、プログラムを書けるようになる。

したがって、プログラムが読めないときは、キーワードの定義や意味を理解しているか、キーワードの並びかたの文法を知っているか、そのキーワードを使用する用例を思いつくことができるかと三つの要素に分解して、今自分がどれが足りないために理解できないのかと自問自答すると自然に分かるようになる。

また、単語・文法・用例の三本の柱はプログラム言語の習得に限らず、技術書を理解していくときの基本的な要素だ。技術書の場合はプログラム言語と違って文章を理解するのに特別の工夫はいらないが、用語の定義とその適用範囲をしっかり把握すること。用語の表す概念の間の論理的な構造を把握すること。それらを使った応用例をたくさん知っていることという3点には共通点が見られる。

結局のところ言語という記号でコミュニケーションを図るということが、言語にも、プログラミングにも、技術書の読解にも共通している。つまり、言語という記号には本質的に意味はなく、言語という媒体を解釈することによって意味の伝達が行われるということによる特徴だ。本来無意味な記号を、意味を運ぶ媒体として利用するために本質的な要件が、単語の定義、単語間の構造である文法の認識、そうして、記号と意味との直接の関係の見本である用例という三つの要件で構成されているのだ。
[PR]
by tnomura9 | 2008-10-31 07:58 | 考えるということ | Comments(0)

optparse その2

optparse の OptionParser.new はブロックを受け付ける。ブロックの引数は生成したインスタンスなので、それを使って on メソッドによるオプションの登録や、parse! メソッドによる ARGV のパースができる。

また、optparse::チュートリアルによると、on メソッドの引数には、引数付きのオプションや、 --foo のようなロングオプションや、--help のときに表示されるメッセージを渡すことができる。

commands/console.rb ではこの方法が使われている。

ファイル名; sample2.rb

~/console/Ruby$ code sample2.rb
require 'optparse'

OptionParser.new {|opt|

  opt.on('-a') {|v| p v}
  opt.on('-b') {|v| p v}

  opt.parse!(ARGV)
}
p ARGV

実行例

~/console/Ruby$ ruby sample2.rb -a foo -b bar buz
true
true
["foo", "bar", "buz"]
[PR]
by tnomura9 | 2008-10-31 07:27 | Ruby | Comments(0)

optparse

command/console.rb に標準ライブラリの optparse が使ってあったが、管理人は使ったことがなかったので、ネット検索してみた。Ruby リファレンスマニュアルの optparse::チュートリアルを読むと次の順序で使うとのことだ。

1. OptionParser オブジェクト opt を生成する。
2. オプションを取り扱うブロックを opt に登録する。
3. opt.parse(ARGV) でコマンドラインを実際に parse する。

1番のOptionParserオブジェクトを生成する。というのは、require 'optpase' で OptionParser クラスがロードされるので、そのオブジェクトを作るということだ。次のように、コーディングする。

opt = OptionParser.new

簡単だ、2番のオプションをとり扱うブロックを opt に登録するというのは、たとえば、-f というコマンドラインオプションがあった時、foo という処理をしたければ、OptionParser の on メソッドを使って、-f というオプションと foo という処理を opt に登録する。処理の方の foo はブロックで渡すことになる。コードのスタイルとしては、

opt.on('-f') { foo }

のようになる。3番目の parse! メソッドで実際に ARGV として渡された引数のリストからオプションを選びだして抜き出し、それぞれの処理をすることになる。parse! のように ! がついているのは、ARGVのリストからオプションは抜き出されてしまうからだ。コード例は次のようになる。

opt.parse!(ARGV)

optparse::チュートリアルにならって次のような sample.rb を作ってテストしてみた。

ファイル名: sample.rb

require 'optparse'
opt = OptionParser.new

opt.on('-a') {|v| p v}
opt.on('-b') {|v| p v}

opt.parse!(ARGV)

p ARGV

実行例

C:\Users\********\Ruby>ruby sample.rb -a foo -b bar buz
true
true
["foo", "bar", "buz"]

こんな便利なものをどうして今まで使わなかったのだろう。

大きいアプリケーションを探索するのは億劫だが、ロールプレイングゲームだと考えると気が楽になる。たとえば、この optparse などはさしずめ迷路で見つけた宝箱だ。全クリできるかどうかは自信がないが、ときどき、Rails の迷路を探索するのも悪くはない。
[PR]
by tnomura9 | 2008-10-30 17:08 | Ruby | Comments(0)

RoR commands/console.rb

RoR の commands/foo.rb の中でもっとも簡単そうなのは、command/console.rb だ。そこで、その本体を覗いてみた。

やっていることは、

1。コマンドラインオプションを読んで、options ハッシュの :sandbox と :irb に対応する値を設定する。
2.script/console を起動するときに同時に読み込むライブラリを、文字列 libs に設定する。
3.環境変数 RAILS_ENV の値を設定する。
4.options[:sandbox] が真なら、メッセージを表示する。
5.options[:irb] に設定されている irb を libs 文字列と --simple-prompt オプションで起動する。

つまり、script/console を起動すると、まず、config/boot.rb で Rails の初期設定がされて、次に、その環境下で irb が起動される。したがって、Rails のモジュールやクラスの挙動を irb で調べることができることになる。

RoR はパーツ単体の動作を確認するのが簡単にできるので、ロールプレイング・ゲームの感覚で少しずつ謎を解いていくことができる。もちろん全体像をきちんと把握するためには文書を読まないといけないだろうが、Rails 本体だけでも結構遊べる。

~$ locate commands/console.rb
/usr/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/console.rb
/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/console.rb
~$ cat /usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/console.rb
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'

require 'optparse'
options = { :sandbox => false, :irb => irb }
OptionParser.new do |opt|
  opt.banner = "Usage: console [environment] [options]"
  opt.on('-s', '--sandbox', 'Rollback database modifications on exit.') { |v| options[:sandbox] = v }
  opt.on("--irb=[#{irb}]", 'Invoke a different irb.') { |v| options[:irb] = v }
  opt.parse!(ARGV)
end

libs =  " -r irb/completion"
libs << %( -r "#{RAILS_ROOT}/config/environment")
libs << " -r console_app"
libs << " -r console_sandbox" if options[:sandbox]
libs << " -r console_with_helpers"

ENV['RAILS_ENV'] = case ARGV.first
  when "p"; "production"
  when "d"; "development"
  when "t"; "test"
  else
    ARGV.first || ENV['RAILS_ENV'] || 'development'
end

if options[:sandbox]
  puts "Loading #{ENV['RAILS_ENV']} environment in sandbox (Rails #{Rails.version})"
  puts "Any modifications you make will be rolled back on exit"
else
  puts "Loading #{ENV['RAILS_ENV']} environment (Rails #{Rails.version})"
end
exec "#{options[:irb]} #{libs} --simple-prompt"
[PR]
by tnomura9 | 2008-10-30 07:39 | Ruby | Comments(0)

RoR script/about

script/about というコマンドはチュートリアルにも出ていないので使ってみた。

~/console/rails/demo$ ruby script/about
About your application's environment
Ruby version 1.8.6 (i486-linux)
RubyGems version 1.3.0
Rails version 2.1.1
Active Record version 2.1.1
Action Pack version 2.1.1
Active Resource version 2.1.1
Action Mailer version 2.1.1
Active Support version 2.1.1
Application root /home/********/console/rails/demo
Environment development
Database adapter sqlite3
Database schema version 20081013000959

Rails を起動した後、ブラウザで http://localhost:3000 にアクセスした時に最初に表示される、

Welcome aboard
You’re riding Ruby on Rails!

というページの About your application’s environment というリンクをクリックした時に表示されるデータがターミナルに表示された。
[PR]
by tnomura9 | 2008-10-30 01:56 | Ruby | Comments(0)

RoR script ディレクトリのスクリプト

RoR の script/server のスクリプトがやけに短かったので、ひょっとしたら script/generate などのスクリプトも同じではないかと思って試してみたら、予想通りだった。

最近、疲れぎみだが、これくらいの作業ならできる。

~/rails/demo$ for f in script/*; do echo $f; cat $f; done
script/about
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
$LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
require 'commands/about'
script/console
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/console'
script/dbconsole
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/dbconsole'
script/destroy
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/destroy'
script/generate
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/generate'
script/performance
cat: script/performance: Is a directory
script/plugin
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/plugin'
script/process
cat: script/process: Is a directory
script/runner
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/runner'
script/server
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'

どれも config/boot.rb で Rails を初期化して commands/foo に作業を任せていただけだった。

commands/foo の場所だが、

/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/foo.rb

にある。このディレクトリのコマンドの概要をみるには次のようにする。

$ locate commands/server.rb
/usr/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/server.rb
/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/server.rb
$ ls -R /usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands
/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands:
about.rb destroy.rb performance runner.rb update.rb
console.rb generate.rb plugin.rb server.rb
dbconsole.rb ncgi process servers

/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/ncgi:
listener tracker

/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/performance:
benchmarker.rb profiler.rb request.rb

/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/process:
inspector.rb reaper.rb spawner.rb spinner.rb

/usr/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/commands/servers:
base.rb lighttpd.rb mongrel.rb new_mongrel.rb webrick.rb
[PR]
by tnomura9 | 2008-10-29 23:24 | Ruby | Comments(0)

わかりやすさの秘密

管理人が、楽しみにしているブログの一つに「タイム・コンサルタントの日誌から」というのがある。管理人の職種とは違うが、議論の進め方が面白くてわかりやすいので、専門的なことはわからないが時々読んでいる。今度読んだ「生産システムの性能を測る」という記事もとても面白かった。

そこで、何でこの文章が面白かったのかを考えてみた。

まず、議論の進め方について考えた。著者は冒頭で、製造業における生産活動をささえる仕組み全体を、『生産システム』と命名し、『生産システム』の機能を、「需要情報というインプットを、製品というモノ(あるいは製品に実現された付加価値)に変換してアウトプットする」ことと定義している。

次に生産システムの中心には「人間系」があり、これが、機械的なシステムと質的にちがうところで、マネジメントの中心的な対象であると主張する。

さらに、マネジメントの目的は外部環境の違いによって変化することが主張される。

外部環境の変化が少なく、システムが一応のアウトプットを保っているときは、マネジメントの目的はシステムの安定維持のみになる。そこでは、前例と慣習のみが重視され、官僚的な硬直したシステムになる。このようなシステムは、『ピーターの法則』 -- 組織の昇進のシステムから、管理職はその担当者がその職で能力を発揮できなくなった時にその位置にとどまる。したがって、次第に管理職はその位置では能力の発揮できない人材で埋まり、組織は次第に機能不全に陥っていくという法則 --- から、必然的に機能不全に陥ってくる。

外部環境が変化するときは、このような硬直的なシステムでは対応できなくなる。日本の製造業の直面した問題がまさにこのような外部環境の変化にシステムが対応できないという事態だった。そうして、この問題を解決するのが難しかったのは、企業がシステムの性能を図る尺度を持ち合わせていなかったからだと述べる。

それでは、変化に対応できるシステムを構築するための尺度をどうやって作ることができるかという疑問がでてくる。それにたいしては、著者はそれは、『抽象化』と『類推』という道具が必要だと言う。

『抽象化』という観点から、生産システムは「有効性」と「効率性」と「頑健性」の三つの観点から評価される。また自動車のしくみを例にとる『類推』から「有効性」とは思った方向にはしれるかどうかということ、「効率性」とはいかに燃費良くはしれるかということ、「頑健性」とはすぐに揺れたり壊れたりしないことと説明する。

そのあとは、個別に『有効性』、『効率性』、『頑健性』についての検討がなされている。その中でも、とくに、システムの『頑健性』とは生産に従事する人間が安定して働いていることであると主張される。「労働者」と十把一絡げにされる人間達が、安心して快く働き続けられなかったら、生産システムなどすぐにバラバラになる。職場の『頑健性』はその職場の事故率や離職率の逆数で測られねばならないのだ。

最後に、この『頑健性』は『有効性』や、『効率性』とはトレードオフの関係にあり、現代の”モダンな管理思想”からは軽視されやすいが、生産システムの鼎の足を形成している重要な要件であり、これをきちんとマネジメントしていかなければ健全なシステムの管理はできないと締めくくっている。

著者の主張は納得できると思うが、ここに引用したのはその議論の進め方が、よく構造化されているのが面白かったからだ。

たとえば、最初に自分が何について議論をしたいのかをのべ、必要な用語に明確な定義を与えている。次に、その論点についてどういう問題が発生しており、どういう経緯でそれが障害となってきたのか、どうすればその障害を克服できるのかを分析する。

必然的に、その解決法についての議論が続くが、どういう道具立てでその議論を進めるか、つまり、抽象化と類推という道具を使うことを最初に明記してある。したがって、次の議論がどういう発想のもとで組み立てられていくかを予想しやすくなる。

それから、ここの解決法の議論に進んでいくが、ここでも、用語の定義とその具体例を提示し、その用語によって著者が何を言いたいのかを明確にする工夫がなされている。「有効性」、「効率性」、「頑健性」についての考察も、最初に目録的に何について述べるか、何個の要素についてのべるかを提示したあと、個々の考察がなされている。

そうして最後にシステムの「頑健性」が今までのマネジメントで欠落しており、そのためにシステムの有効な運営ができなくなっているという主張でまとめてある。

これらの議論の進め方についての著者の工夫をまとめると、「議論の対象を明確にする。」、「用語に対しはっきりした定義をしてその用途を限定する。」、「議論の構造を最初の段階で示しておく。」、「抽象化と具体例のバランスをとった記述をする。」、「論理的な整合性を意識した順序に記述する。」、「議論の空間的な配置が見えるように記述する。」などになるだろう。

いずれにしても、わかりやすいとかんじる文章にはこれだけの工夫と労力がこめられているのだ。
[PR]
by tnomura9 | 2008-10-28 07:27 | 考えるということ | Comments(0)

面白いブログの見つけ方

自分のブログを作るのに少々疲れがでてきたので、無性にひとのブログを読みたくなった。ところが面白いブログがなかなか見つからない。人気ブログランキングなどをみてももう一つしっくりこない。たぶん管理人の興味の対象が偏っているからだろう。

Googleで「面白いブログの見つけ方」で検索したけれど、RSSを云々と難しそうだった。ふと、思いついて、自分に興味のあるキーワードと「ブログ」でGoogle検索をかけてみたら結構ヒットした。ただし、今度は多すぎて困りそうな気がしてきた。

ブログを読んで面白いと思うには適切な分量というものがあるような気がする。パッと見て何が書いてあるのか推測できないと読み続ける勇気がわかないし、逆に走り書きのようなものはこちらで想像して補わなければならないので億劫だ。

最初の画面にほぼ収まってしまうくらいが適量なのではないだろうか。
[PR]
by tnomura9 | 2008-10-27 13:26 | 話のネタ | Comments(0)

プライムレート

サブプライム問題で全世界が大変だが、なぜなのかがもう一つわからないそれで、ネットで検索してみた。

まず、プライムレートとは何かだ。プライムレートとは、銀行が優良な顧客に貸し出す際の最優遇貸出金利のことだ。したがって、焦げ付きの可能性の高い顧客への金利はこれよりも高くなる。

銀行の貸し付けは優良な顧客への融資が多ければ、金利による利益は安定する。しかし、金余りのため、優良な顧客への貸出の余地がなくなってしまったらしい。そこで考えられたのが危険性の高いサブプライム層への貸出だ。しかし、そのままだと、貸し倒れの危険性が高く、利益どころか損失を被る危険性が高くなる。

ところが、一時、米国では日本のバプルの時期のように不動産価格が安定して上昇していた。そのため、サブプライムの顧客でも最初にサブプライムの金利で借り入れをしておいて、不動産の価格が上昇したときに、上昇した不動産価値を担保にして、プライムレートのローンに借り換えることができると考えられた。

この考えを支持したのが、クレジット スコアリングだ、カードで支払うのが一般化している米国ではカードの支払の履歴をデータマイニングすることによって顧客の信用度を図ることができるとかんがえられた。実際にサブプライムローンを組んだ顧客の credit score がプライムローンの顧客に劣らないものだったため、サブプライムローンの信用度は確立されたもののように思われていたのだ。

統計に対する過信が、実体経済に対する嗅覚を失わさせる結果になってしまったわけだ。数学が悪いわけではなく、数学の中身とその限界を理解せずにその結果だけを利用したためだ。

しかし、落ち着いて考えると不動産価値が永遠に上がると言うことはありえない。ひょっとすると、サブプライムローンを仕掛けた人はそれを十分に知っていて、初期のうちに売り抜けていたかもしれない。原油にしてもそうだ。原油の需要と供給を考えても価格が永遠に上がり続けることはありえないのだ。

こうしてみると、冷静に長期的展望をもっていれば、明らかに予測できる破綻を、短期的な収益だけに目を奪われていると、いろいろな合理化によってその先の破綻を見ないようにしているという図式が見られるような気がする。

サブプライムローンのような熱狂はポジティブフィードバックの振る舞いに似ている。ポジティブフィードバックは必ず成長の限界に突き当たって破綻する。培養溶液に細菌を入れると最初は爆発的に増殖するが、やがて養分が枯渇し成長は止まり死滅していく。栄養が豊富にある時は、増殖が短期的には細菌の生存のための最適な方法だが、それは永遠に続けられるものではない。

10年先のことを見通すことはできないが、何らかの長期的な視野を持っていないと思いもかけないカタストロフィーに突入していく危険が増してくるのではないだろうか。闇雲に短期的な利益のみを追い求めていく今のやりかたでは、科学が進歩すればするほどその影響力と変化のスピードが増し、制御不能な破綻を引き起こしていくのではないかというような悲観的な考え方もおきてくる。
[PR]
by tnomura9 | 2008-10-26 19:31 | 話のネタ | Comments(0)