hirax.net::Keywords::「結合」のブログ



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つの内容からなります。

  1. Rubyの紹介
  2. Ruby on Railsの紹介
  3. Mathematicaから直接SQLデータベースにアクセスする実践例 1つと、Ruby on RailsのActive RecordをMathematicaから使う実践例2つ
  4. MathematicaからRailsアプリで作成したWEB APIにアクセスする実践例1つ
 最後の「Mathematicaから直接SQLデータベースにアクセスする実践例 1つと、Ruby on RailsのActive RecordをMathematicaから使う実践例2つ、さらにrailsで作成したWEB APIにアクセスする実践例1つ」がどのようなものかを描くと、下の図のような具合です。1と3がactive Record(AR)を使った場合の処理で、2がMatheematicaから直接SQLサーバを叩く場合の例です。さらに、4番目の例は、RailsでWEB APIを作成する、という、まさに「疎」な結合の例です。この4番目の例は、…そもそも、MathematicaとRubyの両方を知っている人・そもそも作ることができる人しか楽しめないような気がしますから(人が一度に新しい事を知ることができるのは”ひとつ”まで、だと私は思っています)、「実際に役に立つ・新しい情報として楽しむことができる」のは3番目の例まで、かもしれません。

ちなみに、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の機能をメソッドとして実装した実践例も作りたくなりますね。

「Mathematica からRuby on Railsのモデルを使う」のメモ「Mathematica からRuby on Railsのモデルを使う」のメモ「Mathematica からRuby on Railsのモデルを使う」のメモ








■Powered by yagm.net