RをScalaから呼び出し、Eclipseのspecs2でテストする

以外と面倒だったのでメモ

環境
  • Mac OS X 10.10
  • eclipse 4.4
手順 

Rのインストール

scalaプロジェクトの作成

rjavaを使うためのライブラリをコピー

テストを作成

build.sbt

plugin.sbt

build.properties

eclipse用変換

Rの設定

Eclipseの設定
  1. Eclipseを起動し、プロジェクトを取り込む
  2. プロジェクトのプロパティからjava build path > libraries > add jarsでJRI.jarを追加
  3. JRI.jarの左三角マークをクリックしnative library locationにlibディレクトリを追加
  4. RTest.scalaを右クリックから、Debug Configuration > environment にR_HOMEを設定

これで実行できます

sbtプロジェクトを作成しeclipseでテストする

ちょっとハマったのでメモ

sbtプロジェクトを作成したのちに、eclipse上でJunitテストをできる環境を構築します。

Eclipseで右クリックからの scala Junit Testができるので非常に便利 

まずディレクトリおよびファイルを以下の構成で作成します

次にファイルの中を記述します

  • build.sbt

  • build.properties

  • plugins.sbt

  • Model.scala

  • ModelSpec.scala

Eclipseようにファイルプロジェクトファイルを作成してやります 

.project .classpath .settingsが作成され、依存するjarファイルがlib_managedに取り込まれいるのが確認できます

このままeclipseで読み込んで、ModelSpec.scalaを右クリックからのScalaJunitTestでテストできます。

Application.scala

index.scala.html

こんな感じでいけるかと思います

scalaのRedisクライアントbrandoを使ってみる(その3)

PlayFramework2.2でscalaのRedisクライアントbrandoを使用する際にはちょっと注意が必要です。

brando1.0はakka2.3対応らしく、Play2.2ではまだakka2.2の対応となっているためそのままでは動きません。

仕方がないのでbrando0.3にバージョンを落として使用します。

また前回のサンプルだと、キーに値がない場合にはエラーになってしまいます。

そこでbrando0.3を少し改造します

  • brand.Brando.scala

これで使いやすくなりました

scalaのRedisクライアントbrandoを使ってみる(その2)

前回brandoを使用してRedisの値をGETできたので今回はSubscribeしてみます。

Redisサーバ側から値をプッシュし、それをPlayのWebsocketでブラウザ側に流すため用に特化しています

試行錯誤をかなりしましたが意外と単純でした。

ポイントは起動するクラスをActorとして作成し、PubSubMessageをReceiveするだけです

これだけでした。

scalaのRedisクライアントbrandoを使ってみる

ちょっとはまったのでメモ。

scalaのRedisクライアントには何種類か有ります。

http://redis.io/clients

当初scala-redisを使っていたのですが、Pub/Subする際に、内部的にスレッドを生成しているようで、大量のPub/Subを作成したい場合(数千)にはOutOfMemoryで落ちてしまいます。

そこでActorモデルのbrandoを使用してみました。

ネット上にはほとんど情報もなくちょっとはまってしまったので記録しておきます

https://github.com/chrisdinn/brando

こちらからダウンロードしてsbt packageでJarを作成します。

あとakkaが必要なので2.3をダウンロードしておきます。

いろいろと試行錯誤し以下のコードでとれました

Pub/Subとかこれから確かめます

Scala+SlickでTupple22問題を解決してみた

slickというかscalaには有名なタプル22問題があります。

23項目以上のメンバを持ったcase classが作れない。

どうやらscala2.11では解消されているようですが、まだベータ版ということで使うのにはためらいます

そこでネストしたcase classを用いて23カラム以上持つデータベースのテーブルを取得するものを作成してみました

  • scala2.10.2
  • slick2.10-1.0.1
  • eclipse 4.3
  • Tests.scala

  • TestsTest.scala

  • eclipse4.3で実行

とりあえず動いているようです