2010-01-06[n年前へ]
■重複部分がある1次元データを繋ぐメソッドをRubyのArrayクラスに追加する
重複部分がある1次元データを繋ぐメソッドを、RubyのArrayクラスに追加するコードを書いてみました。どういう機能かと言うと、たとえば、[1,2,3,4,5]というデータと[2,3,4,5,6]というデータがあったとしたら、それらの重複部分(同じものを示していると考えられる部分(すなわち[2,3,4,5])を重ね・重複しないように繋ぎ、[1, 2, 3, 4, 5, 6]というデータを出力するという機能です。
だから、そのメソッド"connect"を使うと、たとえば、
require 'pp'
pp [1,2,3,4,5,6,"a","b",6].connect([6,"a","b",6,"3"])
a=[1,2,3,4,5].connect!([2,3,4,5,6])
pp a
なんていうコードを書くことができます。そして、その結果、
[1, 2, 3, 4, 5, 6, "a", "b", 6, "3"] [1, 2, 3, 4, 5, 6]という出力がされます。
注意事項は、a.connect(b)というコードを書くときには、a.length>=b.lengthである必要があります。また、1次元のArrayを念頭に書いてあります。
というわけで、適当に書いたArrayクラスの拡張コードは下記のような具合です。
class Array
def connect(another)
ret=nil
if self.length!=0
aLength=another.length
lastElements=self[self.length-aLength..self.length]
aNum=0
aLength.times do |num|
diff=0
(aLength-num).times do |i|
begin
diff+=1 if lastElements[i+num]!=another[i]
rescue
diff+=1
end
end
aNum=num
break if diff==0
end
ret=self+another[(aLength-aNum)..aLength]
else
ret=another
end
ret
end
def connect!(another)
self.replace(self.connect(another))
end
end
こんな機能を使う人はいないような気もしますが、自分の手習いも兼ねてここにコードをメモしておきます。上記コードの場合で言うと、connect!のような破壊的メソッドをを書くときには、"self=hoge"ではなく、"self.replace(hoge)"と書くのですね。
2010-03-22[n年前へ]
■「Mathematica からRuby on Railsのモデルを使う」のメモ
以前、「Mathematica からRuby on Railsのモデルを使う」でメモした、Mathematica User Conference 2009の資料、 Using Ruby on Rails Models with Mathematicaの内容を簡単にメモ書きしたので、ここに書いて(貼り付けて)おきます。
この資料は、大きく分けて次の4つの内容からなります。
- Rubyの紹介
- Ruby on Railsの紹介
- Mathematicaから直接SQLデータベースにアクセスする実践例 1つと、Ruby on RailsのActive RecordをMathematicaから使う実践例2つ
- MathematicaからRailsアプリで作成したWEB APIにアクセスする実践例1つ
ちなみに、1の例は、RubyスクリプトからActive Recordを使い、中間ファイルを作り、そのファイルを介してMathematicaでActive recordモデルのデータを読み込む例で、3の例は中間ファイル無しに(けれど、原理的には1と同じやり方でSQLサーバ内のARモデルにアクセスするものです。
データを管理するのはSQLサーバで、(そのデータに対して)演算処理を行うのはMathematicという役割分担、そんな処理分担を使って作業してみたい人は、特に「そんなことをしてみたいけれど、よくやり方がわからない人」は一回眺めてみると良いと思います。とても、わかりやすい資料で、「技術紹介資料は、かくあるべし」とすら感じさせる資料です。とはいえ、この資料を楽しめるのは、MathematicaもRubyもRailsも、そのいずれをも少しはかじったことがある人に限られるのかもしれません。
こういう資料を眺めていると、この実践例は、MathematicaからRuby on Railsのactive Record モデルのデータを使う場合ですが、その逆に、Ruby on Railsのactive Record モデルにMathematicaの機能をメソッドとして実装した実践例も作りたくなりますね。