SciRubyをVM環境にインストールして触ってみる


インストールからサンプルを動かすところまでを説明したいと思います。

SciRuby
http://sciruby.com/

##vagrant及びubuntuのインストール

Mac OS X LionなどにSciRubyをインストールしようとすると、ATLASやLAPACKのネイティブコンパイル周りで色々苦労します。VM上にubuntuをインストールし、その上に構築した方が楽です。
VagrantとVirtualBoxを利用し、前準備も簡潔化します。それぞれを事前にインストールしておいてください。

Vagrant
http://vagrantup.com/

VirtualBox
https://www.virtualbox.org/

```
$ vagrant box add ubuntu4sciruby https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box
$ vi Vagrantfile 
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant::Config.run do |config|
  config.vm.define :ubuntu4sciruby do |ubuntu4sciruby_config|
    ubuntu4sciruby_config.vm.box = "ubuntu4sciruby"
    ubuntu4sciruby_config.ssh.forward_x11 = true
    ubuntu4sciruby_config.vm.customize do |vm|
      vm.memory_size = 2048
      vm.name = "ubuntu4sciruby"
    end
  end
end
$ vagrant up ubuntu4sciruby
$ vagrant ssh ubuntu4sciruby 
```

##Rubyのインストール

```
$ sudo apt-get update 
$ sudo apt-get install curl
$ curl -L https://get.rvm.io | bash -s stable --ruby
$ rvm install ruby-1.9.3-p194
$ rvm use ruby-1.9.3-p194@SciRuby --create
$ mkdir workspace
$ echo rvm use ruby-1.9.3-p194@SciRuby > workspace/.rvmrc
$ cd workspace
```

##SciRubyのインストール

```
$ sudo apt-get -y install libatlas-base-dev libgtk2.0-dev librsvg2-dev libcairo2-dev build-essential libgsl0-dev

$ gem install nmatrix
$ gem install sciruby
...
（インストール失敗）
Fetching: gsl-1.14.7.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing sciruby:
	ERROR: Failed to build gem native extension.
...
matrix_complex.c:1523:12: error: conflicting types for 'gsl_matrix_complex_equal'

現状、名前がコンフリクトしてしまい、インストール出来ないので、少々アドホックですが、以下のようにソースを書き換えて別途gslをインストールします。

$ sudo apt-get install -y subversion
$ svn checkout http://rb-gsl.rubyforge.org/svn/trunk/rb-gsl
$ cd rb-gsl/
$ vi ext/vector_complex.c
-static int gsl_vector_complex_equal(const gsl_vector_complex *v1,
+static int xgsl_vector_complex_equal(const gsl_vector_complex *v1,

-  ret = gsl_vector_complex_equal(v1, v2, eps);
+  ret = xgsl_vector_complex_equal(v1, v2, eps);

$ vi ext/matrix_complex.c
-static int gsl_matrix_complex_equal(const gsl_matrix_complex *m1,
+static int xgsl_matrix_complex_equal(const gsl_matrix_complex *m1,

-  ret = gsl_matrix_complex_equal(m1, m2, eps);
+  ret = xgsl_matrix_complex_equal(m1, m2, eps);

$ vi Rakefile	
-require 'rake/gempackagetask'
-require 'rake/rdoctask'
+require 'rubygems/package_task'
+require 'rdoc/task'
  
-Rake::GemPackageTask.new(spec) do |pkg|
+Gem::PackageTask.new(spec) do |pkg|

$ rake gem
$ gem install pkg/gsl-1.14.7.gem

$ gem install statsample-optimization 
$ gem install sciruby
```

##サンプルの実行

```
$ git clone git://github.com/clbustos/statsample.git
$ cd statsample/examples/
$ ruby correlation_matrix.rb  
Analysis 2012-11-18 10:53:24 +0000
= Statsample::Bivariate.correlation_matrix
  Correlation Matrix
+---+-------+-------+-------+-------+
|   |   a   |   b   |   c   |   d   |
+---+-------+-------+-------+-------+
| a | 1.000 | -.009 | .015  | .008  |
| b | -.009 | 1.000 | -.010 | -.047 |
| c | .015  | -.010 | 1.000 | .023  |
| d | .008  | -.047 | .023  | 1.000 |
+---+-------+-------+-------+-------+
```

##プロット周りのセットアップ

SVGでプロット表示出来るようにします。

```
$ sudo apt-get -y install xdg-utils desktop-file-utils
$ sudo update-desktop-database
$ sudo apt-get -y install xorg gnome-core gdm gnome-applets gnome-system-tools gnome-utils ubuntu-artwork compiz-gnome sysv-rc-conf gconf-editor inkscape
$ sudo vi /usr/share/applications/defaults.list
image/svg+xml=inkview.desktop
$ sudo cp /usr/share/applications/{inkscape.desktop,inkview.desktop}
$ sudo vi /usr/share/applications/inkview.desktop  
%s/inkscape/inkview/g
```

##プロットサンプルの実行

```
$ ruby histogram.rb
```

![ヒストグラム](http://img.pics.livedoor.com/011/2/b/2b8d837ba823f7de7c20-LL.jpg)

##お疲れ様でした

SciPyやmatplotlibなどライブラリ群の充実により、科学分野の人達にはpythonが好まれる傾向があり、ライブラリ群も発展していくエコシステムが出来上がっているようですが、rubyでもそうなったら嬉しいですね。

Rubyアソシエーションの2012年度助成金対象にも選ばれています。
http://www.ruby.or.jp/ja/news/20121003_2.html

次回は、実際の使い方についてご紹介できたらと思います。