JSの設定

2012年2月14日火曜日

利他について

タイム・コンサルタントの日誌から : 書評:「持続不可能性」 サイモン・レヴィン著
http://brevis.exblog.jp/14689955/

生物界には、「利他的」としか言いようのない、不思議な現象が時々ある。それを、めぐりめぐって最終的には自己や自種の適応可能性を高めるから、という視点から説明しようという、いかにもネオ・ダーウィニズム的な研究アプローチである。

しかし、本当にそういう説明ですべてが納得できるのだろうか。進化ゲーム理論やネオ・ダーウィニズムには、競争原理はあれども、協働原理は存在しようがない。前提条件から排除されているからだ。

なんか前にもReblogしたような気がするけど・・・既視感かもしれないけど・・・なんか気になるテーマです、利他。
ふつうは生物の進化は自然淘汰がその原理とされている。個体が自分自身のためにつまり「利己的に」生き、その生き方が自分の長寿というか繁栄力をもたらすのであれば、その生き方に対応した遺伝子が次の世代において優勢になる。これは利他を装った利己であっても同じことでしょう。なぜなら「生き方が自分の長寿というか繁栄力をもたらすのであれば・・・」という文章中の「生き方」は、それがどんな内容であっても文章全体の意味を壊さないから。

でも引用文中の「自種の適応可能性を高めるから」という部分は簡単に見逃せない。ここで言ってるのは、ある生き方が(めぐりめぐって最終的に)自分のためにならなくても、自分の生物種の繁栄をもたらすならばその生き方が自然淘汰によって優勢になるという意味かと思うが、るろけんの志々雄真実も言ってるとおり「強い者が生き残るんじゃない、生き残ったものが強いんだ」であり、遺伝子の拡散ってそもそも個体が生き残らないことには起きようがないわけで、仮にある生き方が自分の生物種の繁栄に寄与するものだとしても自分自身のためにならないならその生き方は後世に伝わらない。

といっても、人間なら利他があっても不思議はないかなという気もする。人間には遺伝子とは別の形で文化を伝える手段があり、それぞれ文化Aと文化Bを持つ国家AとBがあって、それらが戦争でもして国家Bが消滅した場合、Bの文化もあらかた消滅するわけであるから文化Aが後世に残るだろう。この場合、利他が国家のためになるなら利他が美徳として奨励されていたのは文化BではなくAのほうである可能性が高い。要するに利他は文化であって本能じゃないんじゃなかろうか。

もし利他が本能なのだとしたら、わざわざ奨励する必要はないわけである。お母さんを大切にしましょう・・・これは遠まわしな利己だ、だからそんなに奨励する必要はない。でも子供が成人したら彼は母親なしで生きていける、だから成人した子供が母親を大切にするのは遠まわしな利己とは言えない、つまり利他だ、だから奨励する必要があって、実際奨励に用いられている言葉は「親孝行」でありその対象は大人である。

もし原始的な生物に利他があるとするなら、その生物種の個体間にも文化的なものがあるんじゃないだろうか。例えば模倣とか。ある個体が気まぐれで利他アクションを起こし、それがなんか真似したい感じだったので近くにいた個体が次々に真似をして、世代間のオーバーラップによって伝えられていくような。集団的にその利他アクションを行うと生物種にとって良い影響があるなら、利他アクションを行わない類似の生物種より繁栄しやすいことになるだろう。

つまり、遺伝子じゃなくアフォーダンス的な反応(原始的な模倣)によって伝わっていくことって実は結構あるのだが、我々から見て利己的と思われる行動は自然淘汰ということにして、利他的と思われる行動は何とか利己に帰着させようという、そういう間違いをしてる可能性ってないのかしらと思ったりした。

2012年1月28日土曜日

SinatraとSequel・Hamlで掲示板アプリを作る そしてHerokuへあげる

WEB+DB Press Vol.65「Write Less, Do More」のコラムから引用:
(Railsの進化によって)Rubyの記述量がどんどん削減された結果、今度はそれ以外のコードがネックになってきたと言えるでしょう。だから次はRuby以外のコードをあまり書かなくていいようにと、SCSSやCoffeeScriptが取り込まれたのでしょう
ネックになってきたというか、なんでrubyは綺麗に書けるのにHTMLとかCSSとかこんな冗長にしか書けないんだという不満が潔癖症のプログラマを動かしたように思う。まぁ、haml・coffee・scssを導入したらしたで、新しい書き方が3つ増えるわけで、一人でやる分にはいいけどチームで開発する時どうなんだという気がしないでもないが・・・やはり目先の学習コストに対する寛容さは人それぞれだと思うし。

それはそれとして、以下のアプリはHamlとsassのイージーサンプルとなっているので掘り起こしてみた。

Ruby Freaks Lounge:第9回 SinatraとSequel・Hamlで掲示板アプリを作る|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/ruby/0009

上の通り、公開されてるコード( http://github.com/yhara/sinatbbs/tree/magazine )をとってきて動かせばローカルで掲示板アプリがサクっと動くが、Herokuで動かすには少し修正がいる。以下、その手順をメモ。

◯ファイル追加など
- Gemfile
 sinatra, haml, sequel, sqlite3, heroku をGemfileに書き、bundle install --path ./vendor/bundle としておく。

- start.rb 修正
 require './model/comment.rb' (./を先頭につける)

Ruby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった - ぬいぐるみライフ(仮)
http://d.hatena.ne.jp/mickey24/20100907/1283869273

- comment.rb 修正
 Sequel.connect(ENV['DATABASE_URL'] || "sqlite://db/development.sqlite3")

デプロイ時も考慮して、DBへの接続は Sequel.connect(ENV['DATABASE_URL'] || 'sqlite://my.db') という感じで書く必要あり。 - Lost+Found
http://d.hatena.ne.jp/Snaka/20090704/1246712748

- migration用ファイルの作成
 db/migrate/001_create_posts.rb
class CreateComments < Sequel::Migration
  def up
    create_table :comments do
      primary_key :id
      text :name
      text :title
      text :message
      timestamp :posted_date
    end
  end
end
- Rakefile作成
require 'rubygems'
require 'rake'
require 'sequel'
require 'sequel/extensions/migration'

namespace :db do
  desc "migrate database"
  task :migrate do
    DB = Sequel.connect(ENV['DATABASE_URL'] ||'sqlite://db/development.sqlite3')
    Sequel::Migrator.apply(DB, './db/migrate')
  end
end

- config.ru作成
require './start.rb'
run Sinatra::Application


Ruby Freaks Lounge:第23回 Rackとは何か(1)Rackの生まれた背景|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/ruby/0023

◯ローカルで動かしてみる

# rake db:migrate
※sqliteなので不要だが、herokuで必要なので確認しておく
# rackup

◯Herokuで動かす

# git init
# git add ./
# git commit -am "<コメント>"
# heroku create <app名>
# git push heroku master
# heroku rake db:migrate
# heroku open

http://bbs-sp3.heroku.com/
完成。


参考サイト:
CSS拡張メタ言語「SCSS(Sass)」と「LESS」の比較 - (DxD)∞
http://dxd8.com/archives/217/

Ruby Sequel DBアクセスライブラリ - yshのメモ日記
http://d.hatena.ne.jp/yshgt/20080629/1214720897

herokuでsqliteなsequelつかうときのメモ - Lost+Found
http://d.hatena.ne.jp/Snaka/20090709/1247155835

sequelでmigration | ゆーすけぶろぐ
http://yusukezzz.net/blog/archives/1574

Sinatraの使い方 - ayaketanのプログラミング勉強日記
http://d.hatena.ne.jp/ayaketan/20111219/1324295283

2012年1月22日日曜日

Heroku で lokka

lokkaという、sinatra(軽量rails)上で動くcmsをHeroku(ruby版Paas)にアップする手順メモ。

◯環境

Mac OS X 10.6.8
MacPorts 2.0.3
rvm 1.10.2
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]
gem 1.8.15
heroku (2.18.1)
git version 1.7.7.4

◯環境構築手順

http://www.macports.org/install.php
macportsのインストール(略)
rvmのインストール(略)
rubyのインストール(略)
gitのインストール(略)

git clone git://github.com/komagata/lokka.git #lokkaを取得する
cp -p database.default.yml database.yml #lokkaディレクトリ内にdatabase.ymlを作成
bundle install ./vendor/bundle --without development postgresql #postgresを使わない設定
bundle exec rake db:setup
bundle exec rackup #ローカルでlokkaが確認できる

gem install heroku #ここからherokuにデプロイしていく
heroku create
git push heroku master #ssh公開鍵を作成しておく必要がある
heroku rake db:setup
heroku open #デプロイされたlokkaを確認できる

gem install taps #ローカルでlokka確認したときユーザ作成などしていたらDBをpushする
heroku db:push sqlite://db/development.sqlite3

◯できたもの
http://spinel3-lokka.heroku.com/

◯参考サイト

HerokuでWebアプリ開発を始めるなら知っておきたいこと (7)ブログならLokka - アインシュタインの電話番号☎
http://d.hatena.ne.jp/ruedap/20110505/ruby_heroku_web_app_development_tips_7

LokkaをインストールしてHerokuにデプロイした - kk_Atakaの日記
http://d.hatena.ne.jp/kk_Ataka/20111127/1322329546

HerokuでDBのデータをダウンロードしたりアップロードしたり - アインシュタインの電話番号☎
http://d.hatena.ne.jp/ruedap/20110222/ruby_heroku_database_sqlite3_download_upload

HerokuにWebアプリ(Sinatra)をデプロイする手順をまとめた - kk_Atakaの日記
http://d.hatena.ne.jp/kk_Ataka/20111126/1322240459