2012年4月30日月曜日

omake Stack_overflow と怒られる

omake で幸せになろうと頑張っている最中に、

Fatal error: exception Stack_overflow

と怒られたので、そのときの対処を備忘録として。

結論からいうと、今作っているものはカレントディレクトリにのみファイルがあるため、

OMakefile の .SUBDIRS をコメントアウトする

という対処を行った。

ここが「.SUBDIRS = . 」となっていたため、無限ループみたいになって、スタックが足りなくなり、オーバーフローを起こしていたのだ。(おそらく)

その他詳細は、何も調べていないので、書けない。

2012年4月29日日曜日

ruby 拡張ライブラリ rb_thread_create サンプル

rb_thread_create のサンプル書いてみた。

下記コマンド実行で動くはず。

$ ruby extconf.rb
$ make
$ ruby fib.rb

test1.c と fib.c が拡張ライブラリで、fib.rb が拡張ライブラリ利用者。

(fib.rb)
 $LOAD_PATH << "."
 require "test"
 include Test

 Test.thread
(fib.c)
#include <stdio.h>
int fib( int n )
{
    if( n < 0 ) return -1;
    if( n == 0 ) return 1;
    if( n == 1 ) return 1;
    if( n > 1 ) return fib( n-1 ) + fib( n-2 );
}
(test1.c)
#include "ruby.h"

int fib();

int gloval = 0;
VALUE wrap_fib( VALUE self )
{
    int n;
    int count = 0;
    for( count = 0; count < 30; count++ )
    {
        n = gloval;
        printf( "fib(%d):%d\n", n, fib(n) );
        gloval = (n + 1) % 30;
    }
    return Qnil;
}
VALUE wrap_thread( VALUE self )
{
    rb_thread_create( wrap_fib, NULL);
    return Qnil;
}
void Init_test()
{
    VALUE module;
    module = rb_define_module( "Test" );
    rb_define_module_function( module, "thread", wrap_thread, 0 );
}
(extconf.rb)
require 'mkmf'
create_makefile( "test" )

ruby rvm 拡張ライブラリ 公開ヘッダ ruby.h 場所

拡張ライブラリを作っていろいろ作業をしている。
直接公開ヘッダファイルを見たいけど、どこにあるのかと探した結果を下記に示す。

andre@andre-VirtualBox:/usr$ rvm -v

rvm 1.13.0 () by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

andre@andre-VirtualBox:/usr$ sudo find / -name ruby.h
[sudo] password for andre:
/usr/lib/ruby/1.8/i686-linux/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p194/include/ruby/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p194/include/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p125/include/ruby/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p125/include/ruby.h

ruby1.9 簡単な拡張ライブラリ 作成時 注意

簡単な拡張ライブラリを作成したとき、
カレントディレクトリに拡張ライブラリと
それを利用するテストrubyを作成すると思う。

ruby1.9になると、テストrubyは拡張ライブラリを取り込むことに失敗することがある。
それは、

カレントディレクトリがLOAD_PATHとして設定されていないからだ。
その一つの対処として、テストrubyに下記を追記する。

(テストruby)
$LOAD_PATH << "."

require 'xx"

2012年4月28日土曜日

ubuntu 11.10 google 日本語入力システム iBus-Mozc インストール

1.下記コマンドを実行する。

$ sudo apt-get install ibus-Mozc

2.ログアウトする。

3.端末(terminal)を起動し、下記コマンドを実行する。

$ ibus-setup

4.表示された画面の「インプットメソッド」タブを選択する。

5.「インプットメソッドの選択」プルダウンから、「日本語」ー「Mozc」を選択する。

6.「インプットメソッド」欄の「Mozc」を選択し、「上へ(U)」ボタンを押下し、最上段へ移動させる。

スクリーンショットがなくて申し訳ない。

VirtualBox ネットできない 原因 共有フォルダ

VirtualBox 4.1.10 上で ubuntu 11.10 を動作させていた。
VirtualBox の共有フォルダの設定をしたら、ubuntu 起動後、ネットができなくなった。
かなしい。

共有フォルダ以外の設定で変更したのは、CPUの数をホストと同じ2に設定しただけ。

2012年4月15日日曜日

ruby rvm version 切り替えできない 解決法

rubyの勉強中。

ruby 1.9.xの環境がほしくて、インストールしようとしたら、ruby 1.8.7 の環境と共存できるツール rvm あると知って、インストールした。

インストール参考:

複数のRuby環境を共存させられるRVM(Ruby Version Manager)を使う - アインシュタインの電話番号☎ : http://d.hatena.ne.jp/ruedap/20110112/ruby_version_manager_rvm_install

rvm を使って versionの切り替えをしようとしたらできなかった。

原因は、bashrcに追記する設定でした。

上記サイト:

if [[ -s ~/.rvm/scripts/rvm ]] ; then source ~/.rvm/scripts/rvm ; fi

修正

if [[ -s /usr/local/rvm/scripts/rvm ]] ; then source /usr/local/rvm/scripts/rvm ; fi

これで、versionの切り替えができるようになった。

andre@andre-VirtualBox:/$ rvm 1.8.7
andre@andre-VirtualBox:/$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-linux]
andre@andre-VirtualBox:/$ rvm 1.9.3 andre@andre-VirtualBox:/$ ruby -v ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]