ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

RubyからRを動かす(rserve利用:Linux編)

2015-10-14 15:15:58 | Ruby
ちょっと、redmineのプラグインから(つまり、Ruby on Railsから)
Rにアクセスしたいことがあって、
rserveを使ったんだけど、いろいろトラぶったので、
手順をメモメモ。




■概要
大きく言うと、以下の手順
・LinuxにRを入れる
・rserveを入れる
・Rubyからrserveを呼び出すための準備と呼び出し
以下、順に説明




■LinuxにRを入れる

今回はさくらのVPS、Cent OSに入れました。
入れ方は、

CentOS 6.4 に R をインストールする
http://qiita.com/na_ga/items/6ffe45e6ab89e110f709

にあるとおり

rpm -ihv http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install R

インストールの確認は
rpm -qa | grep R-

RPMのパッケージの最新版の確認方法は、上記サイトを参照のこと




■rserveを入れる

R on Rails with Rserve
http://web-salad.hateblo.jp/entry/2013/02/07/000000

に書かれていることを行う

つまり

【Rを起動する】
 →コマンドラインから
R
と打つ(大文字でR)
そうすると、なんか、説明みたいな、Rのいつものがでてくる

【Rserveインストール】
install.packages("Rserve")

と入力

そうすると、どこから取ってくるかを選ぶようになっている
・ミラーサイトを選ぶ(たしか、一番最後)
・ミラー一覧が出たら、日本(Japan)のどこかを選んだ・・
気がした・・まちがってたらごめん

そうすると、インストールできる

確認の為
library()
を実行して、Rserveあること確認

【Rserve-Ruby-clientインストール】

コマンドライン(ターミナルというべき?)から
gem install rserve-client

確認の為
gem list




■Rubyからrserveを呼び出すための準備と呼び出し

まずは、

【rserveを起動する】

RubyからRの機能を使う

にあるように、コマンドラインから

R CMD Rserve

を実行すると、Rのいつものがでてきたあと、Rserveが動いたことが分かるメッセージ

【bundle installではまる】

このあと、Gemfileをなおす。
今回は、redmineプラグインなので、redmineの入っているフォルダの
htdocsの下にあるGemfileに

gem 'rserve-client', require: 'rserve'

を追加して、

bundle install

を書かれているように実行したら、エラーになった。依存性がおかしいらしい。
ということで、今回はbundle installの代わりに

bundle install --no-deployment

を実行した。これを実行しないと、

Ruby on Railsに関する質問です。
http://q.hatena.ne.jp/1204017444

にあるように、irbやrubyで動かすと動くのに、
Railsで動かすと動かないという状態になる。

【プログラム】

あとは、
require 'rubygems'
require 'rserve'
すれば、いろいろかける。
上記に挙げたサイトにサンプルがあるが、
他に書き方については、別エントリで書きたいと思っている。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

mrubyの事例とか

2013-08-09 16:04:44 | Ruby
OSSユーザーのための勉強会 <OSS X Users Meeting>の第4回mbuby
のときに聞いてきた話のメモメモのつづき(これでおしまい)




IIJによるmruby事例紹介
・SEIL(さいる):企業向けルーター
 アーキテクチャ
   NetBSDベース
   ルーティングエンジン
   コンフィグ管理システム

・ルーター:
  C,C++
    エラーハンドリング:割と大変・煩雑
    文字列処理:大変
    コンフィグ管理=mruby

・事例紹介1
  バックボーン計測
  プローブの開発にRuby→mruby化したい

・事例紹介2
  SEIL:イベントスクリプト処理

・事例紹介3
  SACM(サービスアダプターコントロールマネージャー)
  機器の自動接続、一元管理
  http://www.scam.jp/
  機械SA-W1は無償:月額で、機能に対してお金を払う
  SA-W1にmruby(レシピフレームワーク)
   →開発効率が上がる

・組み込み機器の開発プロセスが進化する
  今までの組み込み機器開発
   ドライバ、アプリすべてC
  今後
   速度が要求されるところC

・スクリプト言語があつい
  NetBSDカーネルでLuaが動く




福岡SCSKでのmruby活用
・軽量rubyへの取り組み
  mrubyの活用
  mrubyの啓蒙
  軽量ruby

・事例:産業用ロボット
  リアルタイムOS上で複数のmruby VM
  お絵かき上をロボットが追随
  RTOS:VxWorks タスク4つ

・今後の取り組み
  ロボットDSL
   JOB言語を覚えなくてもmrubyでロボットが動く

  MindstormNTXをmrubyで動かす
   きびしい?
   →新しいMindStorm
      Linux,ARM9,メモリいっぱい

  enzi
   http://enzi.cc
   mrubiを手軽に実行できるプラットフォーム
   実行環境はwebブラウザ(そのまま使える)
    →AWS上に構築
   Web上でボードシミュレーター
   Cortex-M4 168MHz
   RAM 192K+1M
   Rom 1M
   クロック落としたかんじでシミュレーション可能

   近日発売予定 6980円予定




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「組み込みにもRuby」のmrubyの話

2013-08-09 12:09:33 | Ruby
OSSユーザーのための勉強会 <OSS X Users Meeting>の第4回mbuby
のときに聞いてきた話のメモメモ(いくつかにわけて、送る予定)のつづき




Ruby
・オブジェクト指向プログラミング言語
・高い生産性と可読性
・国際標準規格ISO/IEC30170:2012
・今年で20周年 Ruby2.0登場
・Ruby On Railsの登場で大ブレイク
・Web界のトップ3
  Java、PHP、Ruby

Rubyを組み込み開発業界にも
・組み込み業界の課題
  高機能、高付加価値の要求
  製品サイクルの短期化
  低コスト化
・C/C++ベースの開発の限界

・地域イノベーション創出研究開発事業
  軽量Rubyを用いた組み込みプラットフォームの研究・開発
  Rubyのよさをそのままに軽量化

  2012年4月にmruby公開
  https://github.com/mruby/mruby

mrubyの特徴・仕様
・軽量なruby
・mrubyのm
  eMbedded→erubyは存在
  Moduler
  Minimalistic
  matusmoto
・提供されるもの
  ソースコード
    ビルド  make
    C,Ruby,bison→標準Linuxならいけるかな?
  モジュール
    mrbc,mruby,mirb,libmruby.a
・コンパクトな処理系
  仮想マシンmrubyVM
  コンパイラ言語
  中間表現(バイトコード)を実行
  容易にカスタマイズ可能→ライブラリも
  環境非依存→Cがコンパイルできれば
・拡張性
 mruby版GEM 「mrbgems」
   Rubyによる拡張
   C言語による拡張
    C/C++既存資産の有効利用
 CRubyのGEMとは互換性なし
・組み込み可能
  システムに組み込む
   さまざまなOS(OSなしも)で動作可能
  アプリケーションに組み込む
   ソフトウェアの一部としてのRuby
・ソフトウェアリアルタイム
  インクリメンタルGC
   GCによる停止時間の短縮
  C言語よりも遅い
   10倍以上
   ハードリアルタイムには不向き
   人間が気づかない程度には速い
・その他
  ISO規格のRubyに準じる言語仕様
  環境依存しないライブラリ群
   環境依存部はmrbgemsで拡張
  MITライセンス
・適用例
  iosアプリケーション
  Webサーバー拡張
  ルーター
  自販機
  mruby学習キット
・課題
  ライブラリが少ない
  ドキュメントが少ない
  安定バージョンが不明

まとめ
・mruby
  OSSとして日々進化中
  いろいろなところに組み込める素材

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今ならmrubyの星になれるかも!軽量Rubyフォーラムただいま会員1ケタ

2013-08-09 09:35:13 | Ruby
OSSユーザーのための勉強会 <OSS X Users Meeting>の第4回mbuby
のときに聞いてきた話のメモメモ(いくつかにわけて、送る予定)

一番最後のパート、「NPO法人 軽量Rubyフォーラム」について




軽量Rubyフォーラム
・軽量Rubyの維持メンテナンスなど
・2013/1から
・現在、デバッガない
・はやく安定バージョン
・啓蒙活動、教育
・各種イベント
ワーキンググループ
・5つ
・RubyチップWG
企業7社、個人3人
mrubyのボードEAPL-Trainer(ILC)
  8月24日:ルネサス 16800円(ボードこみ)
部門とかでも入れる
http://forum.mruby.org


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その50 9.8

2011-11-18 17:18:26 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて

9.8 コミュニティ

から




■9.8.1 グループ

・日本Rubyの会(http://jp.rubyist.net/)
  Web雑誌 Rubyist Magazine(http://jp.rubyist.net/magazine/)を発行している

・Rubyビジネス・コモンズ(http://rubybizcommons.jp/ja/)

・Rubyアソシエーション(http://ruby-assn.org/ja/)


■9.8.2 メーリングリスト(http://www.ruby-lang.org/ja/community/mailing-lists/)
・ruby-list(日本語)
・ruby-dev(日本語)
・ruby-talk(英語)
・ruby-core(英語)

■9.8.3 IRC
IRCnetの#ruby:*.jp
freenodeの#ruby (英語)

■9.8.4 ニュースグループ
・fj.comp.ruby
・comp.lang.ruby (英語)

■9.8.5 イベント
・日本Ruby会議(http://www.rubykaigi.org)
・RubyConf(http://www.rubyconf.org/)

■その他
・Ruby公式サイト(http://www.ruby-lang.org/ja/)
・Ruby hotlinks 五月雨版(http://www.rubyist.net/~kazu/samidare/)




いくつかのページはURLを現在のものに更新しています。

これで、この本はおしまいです。

次回からは・・・別のエントリーで何をやるか書きます。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その49 9.7

2011-11-16 16:14:12 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて


9.7 Rubyの情報源

から




■9.7.1 リファレンス

・Rubyリファレンスマニュアル
  http://www.ruby-lang.org/ja/documentation/

・Rubyリファレンスマニュアル刷新計画
  http://doc.loveruby.net/

・Ruby-Doc.org
  http://ruby-doc.org/

・各種形式のリファレンスマニュアル
  ftp://ftp.ruby-lang.org/pub/ruby/doc






■9.7.2 リポジトリ

・RubyForge
  http://rubyforge.org/

・RubyApplicationArchive(RAA)
http://raa.ruby-lang.org/




■9.7.3 書籍

The Ruby Programming Language

Rubyクックブック

・プログラミング Ruby第二版
  言語編
  ライブラリ編

Ruby Way




リンク先は、本で示されているものと、一部変えています。
また、書籍のリンク先は、Amazonにいきます。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その48 9.6

2011-11-14 21:41:52 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて


9.6 Rubyの黒魔術

から




■9.6 Rubyの黒魔術
・Rubyには、俗に「黒魔術」と呼ばれる危険な領域が存在する
 →良く理解して使わないと、可読性を下げたり、セキュリティホールになる
 →それだけの代償を払っても魅力的な機能




■9.6.1 eval族
・eval族:組み込み関数eval
     Object#instace_eval
     Module#module_eval
     Class#class_eval

・文字列評価
 eval族を使えば、実行時に文字列をRubyコードとして解析・実行できる
 →外部からコードを入力して実行することすらできる

・コンテキストのすり替え
 eval族を用いれば、コードの評価コンテキストをするかえることもできる
  →本来ならインスタンスの中でしかアクセスできないはずのインスタンス
   変数も、外部からアクセスできる


・言語内DSL
 コンテキストのすり替えは、言語内DSLを構築するには欠かせない存在




■9.6.2 method_missing

・呼び出されたレシーバーが存在しないとき
  →Object#method_missingが呼ばれる
    →NoMethodError例外が発生する

・method_missingをオーバーライドすると、実際には、存在しないメソッドを
 存在するかの容易振舞わせることができる




■9.6.3 set_trace_func

・set_trace_func
  →ruby処理系にフックを仕掛けられる
・メソッドが呼ばれたり、戻ったり、クラスが定義されたり、インスタンス化
  →そのたびいコールバックルーチンが呼ばれる




■9.6.4 継続
・継続とは、プログラム実行中のある時点において、以降で使われるであろう
 計算、処理のこと

・Continuationオブジェクトとして操作できる




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その47 9.5

2011-11-10 14:41:20 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて


9.5 GUI

から




■9.5 GUI

・1章:標準添付ライブラリのtkを使った

・ここでは wxruby gemを使う
  →クロスプラットフォームなGUIツールキット
   wxWidgetsをrubyから利用するライブラリ



今回はここまで。
次回から、ちゃんと長くなる。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その46 9.4

2011-11-09 16:02:55 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて


9.4 画像

から




■画像

・さまざまな画像ライブラリがある
 →Ruby/GD2ライブラリ




今日も、これだけ(あしたまで、少ない)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その45 9.3

2011-11-08 17:02:33 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて

9.3 データベース

から




■データベース

・各種のデータベースに対応するライブラリがgem形式で提供されている
 →ActiveRecordライブラリを利用する
   →Ruby on railsで利用されているO/Rマッピングライブラリ




9.3は、これだけ(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その44 9.2

2011-11-07 16:12:00 | Ruby
「初めてのRuby」を読むの続き

今日は

9章 本書を越えて

9.2 ネットワーク

から




■9.2 ネットワーク

・Ruby標準添付ライブラリには、各種のネットワークプロトコルをサポートする
 クラスライブラリが含まれている
  →HTTP,SMTP,POP3,IMAP,FTPなど
  →socketライブラリも存在
  →open-uriライブラリ



今日は、みじかかったでした・・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その43 9.1

2011-11-04 18:21:54 | Ruby
「初めてのRuby」を読むの続き

今日から

9章 本書を越えて

 この先の話題や、Rubyの学習に役立つ資料紹介だそうです。

今日は

9.1 RubyGems

から




■9.1 RubyGems
・デファクトスタンダードなRubyのパッケージ管理システム
  →アプリやライブラリを簡単に取得、導入、更新、削除できる
  →1.9では、標準添付




■9.1.1 主なコマンド

・RubyGemでは、アプリケーションやライブラリをgemという単位で管理
・gemコマンドでgemを操作できる

・一覧
 gem listコマンド:インストール済みのgemをリスト
 -rオプションでインストール可能な全てのgemの一覧

・検索
 gem searchコマンド:パターンにマッチするgemを検索

・導入
 gem install コマンドは新しいgemをシステムに導入
 実行にはシステム管理者権限が必要

・更新
 gem updateコマンドは導入済みのgemを新しいバージョンで更新

・その他のコマンド
 gem help command





■9.1.2 おすすめGems
・rake
 Rubyによって実装されたmakeコマンドの代替

・ruby-debug
 Rubyデバッガ

・active-support
 アプリケーション開発、特にWebアプリ開発に便利な各種ユーティリティを
集めたライブラリ(Ruby on Railsの一部)

・eval-ruby
 Ruby処理系があえて実装しない機能を無理やり実現する「邪悪な」gem

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その42 8.6

2011-11-02 23:07:52 | Ruby
「初めてのRuby」を読むの続き

8章 オブジェクトとクラス
8.6 メソッドの探索

から




■8.6 メソッドの探索
・オブジェクトがメッセージを受け取ったとき、
 呼び出されるメソッドはどのように決定されるか
  →基本的にはオブジェクトの属するクラスによって決定

(1)最初の候補は特異メソッド
(2)次に属するクラスのインスタンスメソッド
(3)includeしたモジュールのインスタンスメソッド
(4)親クラスにさかのぼって探す
(5)クラス最上位までさかのぼって見つからなかったら
   →object#method_missingを呼び出す
     →NoMethodError例外発生

・モジュールのincludeもクラス継承の変形といえるので、
 呼び出されるべきメソッドの探索はクラスの継承階層を
 遡りながら行われるといってよい




■8.6.1 オーバーロードの不能性

・メソッドの特定はメソッド名のみによって行われる
  →引数の数や型によるオーバーロードは不可能

・組み込みのArray#[]メソッド:オーバーロードではない
  →とりあえず可変長の引数を受け取って、内部で引数の数やクラスを
   調べて処理を振り分けている

・multi gemのような外部ライブラリの助けを借りれば、手で振り分け処理
 を書かずとも実質的なオーバーロードを実現できる



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その41 8.5

2011-11-01 16:40:18 | Ruby
「初めてのRuby」を読むの続き

8章 オブジェクトとクラス
8.5 モジュール

から




■8.5 モジュール
・モジュールはクラスに似ている
 →インスタンス化出来ないクラス
  →クラス=モジュール+インスタンス化能力
・役割は大きく2つ
  Mix-in
  名前空間




■8.5.1 Mix-in
・制限された多重継承
  →多重継承:他のクラスに対して、ちょっとした「トッピング」をする
  →Rubyも単一継承のみサポート
    →Mix-inで多重継承のメリット取り込み

・Rubyは
  ・クラスは1つしか継承できない
  ・モジュールという「クラスのようだがクラスでない」のは何個でも
   継承できる

・クラスがモジュールを継承することを、特にincludeするという

・モジュールと継承
 includeしたモジュールは、クラスのancestorメソッドに現れる
 kernelモジュールは組み込み定数や組み込み関数を保持しているモジュール
 ObjectクラスがKernelクラスをincludeしているので、すべてのクラスで
 これらの機能が使える

・インスタンス化不能性
  モジュールをインスタンス化することはできない




■8.5.2 名前空間
・モジュールのもうひとつの用途は名前空間の提供
・現代のプログラミング言語には、名前の衝突を避けるために、名前空間
 あるいはパッケージと呼ばれる機能が付いている
・Rubyは名前空間を提供するためにも、モジュールを利用する



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その40 8.4

2011-10-31 15:54:11 | Ruby
「初めてのRuby」を読むの続き

8章 オブジェクトとクラス
8.4 特異メソッドと特異クラス

から




■8.4 特異メソッドと特異クラス
・特定のオブジェクトためだけのクラスやメソッド
  →特異クラス、特異メソッド




■8.4.1 特異メソッド
・特異メソッドは、クラスではなくインスタンスに直接所属するメソッド
・def式のメソッドの部分に(オブジェクト).(メソッド名)形式を記述
   →そのオブジェクトだけに属するメソッドを定義

・Singletonパターン
 特異メソッドの用途のひとつは、Singletonパターンの代替
  →集中管理したいという要望から、複数のインスタンスがあると困る
     →GoFのSingletonパターンの利用
     →Rubyの場合、特異メソッドを利用
     →特異メソッドの英訳はsingleton method




■8.4.2 特異クラス
・特異クラスは、ある特定のインスタンスのためだけにあるクラス
・class式においてクラス名を指定する代わりに
   << オブジェクト
 (<<は本当は半角)と記述する
・標準クラスライブラリは、特異クラスがあまり表に出てこないように作成
 されている
・特異メソッドとの関係
 概念上は、特異メソッドはインスタンスに直接属するメソッド
 実装上は、特異メソッドは、特異クラスのインスタンスメソッド




■8.4.3 クラスメソッドとメタクラス
・クラスメソッドとは、実はClassオブジェクトの特異メソッド
・メタクラス
 特異メソッドと特異クラスは実質上、同じものを表現する文法
 なので特異クラスを用いてクラスメソッドを定義する流儀もある
 一般に「Classオブジェクトの特異クラス」がメタクラス

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする