Scala

val str = "文字" str.asInstanceOf.getClass

Ruby on Rails 3 Tips, Ruby on Rails メモ

バッチ処理として書いたrbファイルをテストする場合 テストケース内で system("ruby バッチファイル") としても良いが たとえばTimecopで日付を固定してテストする場合には具合が良くない。 バッチのプロセスが別プロセスで動くため、Timecopの設定がバッチに反映されない。 なので systemで呼び出している部分を load "バッチファイル" というように、loadに変えると、そのバッチ処理が都度ロードされるので テストを実行しているプ ...

Ruby on Rails 3 プラグイン

日時によって表示項目を制御したりする場合に、よくDate.todayとかDateTime.nowとかを使ったりすると思うが このシステム日時を取得している場所のテストをうまく実行したい場合に役に立つプラグインが Timecop です。 ようは、Date.todayとかで返ってくる日時を固定してしまうというプラグイン。 インストールは Rails2.*系であれば、config/environments/test.rbあたりに config.gem 'timecop', :version => ...

Scala

protectedの挙動ですが、まず scalaでは、class とか object のメンバーはデフォルトではすべてパブリックとして定義されます object PublicObject {   val publicVal   var publicVar   def publicMethod = 1 } この例では、3つのメンバーは全部publicとして定義される privateとprotectedは、Javaに良く似ています。 privateはJavaとほぼ同等の動きですが、protected ...

Lift, Scala

ScalaでMD5を生成するには… Javaのライブラリを呼び出して生成することになります。 import java.security.MessageDigest val digestedBytes = MessageDigest.getInstance("MD5").digest("arekore".getBytes) digestedBytes.map("%02x".format(_)).mkString Rubyの場合は requ ...

Scala

abstractなclass とか trait に、型指定のないtype aliasを書くと、派生クラスでこのtype aliasの定義を強制します。 abstract class Oya { // このクラスを継承した派生クラスでは、Xのtype aliasを明示しなければならない。 type AT // X型はこのクラス内で使用可能。 var x:AT def getAt:AT = x } class Ko extends Oya { KoType => type AT = KoTyp ...

Lift, Scala

前回「Scala + Liftで、GlassFishの接続プールを使う」の中で、JNDI名はデフォルトでは「lift」であると書いたが、このJNDI名を変えて接続してみたい。 設定は簡単で、 Boot.scalaの中のBootクラスの中のbootメソッドの一番最初に class Boot {   def boot { DefaultConnectionIdentifier.jndiName = "custom" … という記述を追加するだけ。 これで、customという名のJ ...

Lift, Scala

GlassFishはWeb ・EJBコンテナなので、せっかくなので、Scala + Liftの環境からJDBC接続プールを使いたい。 幸い、liftにはJNDIでDB接続する仕組みが入っているようです。 liftがデフォルトで参照するJDBC接続プールは、liftという名前のJNDIなので、今回はliftという名前で設定します。 GlassFishはほぼ標準状態で入っている前提で。 まずはmysqlのjdbcドライバをGlassFishのlibにコピーします。 からダウンロードして c:\gla ...

Eclipse, Lift, Scala

なんか長いタイトルですが 要はMavenで作ったScala + LiftのプロジェクトをGlassFishにデプロイしたい で、eclipseでGlassFishにデプロイしつつデバッグもしたい という欲張り企画なんですが eclipseのプロジェクト作成とか、Mavenのプロジェクト作成では これらの要件を満たす設定になってくれないので 手動で設定を変更します。 必要な物 eclipseは「Eclipse IDE for Java EE Developers」 scala 2.9.1 mave ...

Scala

とりえあず、以下のようなコードを書きます。 val pf:PartialFunction] = { case null => None case "" => None case s => Some(s) } これで、nullはNone、""もNone、普通の文字列はOptionに変換という処理をしてくれます。 関数の使い方は val list = List("test1", null, "test2", " ...

Scala

Scalaで可変長引数を受け取る関数を定義する時は def func(args: String*) = args.foreach(println) と書く で、この関数に対して func( "test1", "test2", "test3") とすれば、 test1 test2 test3 となる で、本題で、「: _*」ですが この可変長引数を取る関数にリストを渡す時に使用します。 val list = List("test ...

Lift, Scala

class User extends LongKeyedMapper with IdPK { def getSingleton = User object uid extends MappedString(this, 24){ override def dbColumnName = "uid" // <= こんな感じ } } という感じで書く  

Lift, Scala

object User extends User with LongKeyedMetaMapper { override def dbTableName = "users" } という感じでテーブル名を指定する

Lift, Scala

前々回くらいで、【Scala】LiftでMySQLに繋ぐ(Maven編)では、MavenでMySQLにつなぐための設定をしたが、今回はsbtでMySQLにつなぐための設定を。 project/build/LiftProject.scalaファイルに、MySQLのドライバの設定を追加します。 override def libraryDependencies = Set( "net.liftweb" %% "lift-webkit" % liftVersion ...

Lift, Scala

Liftにはrun modeが6つ準備されている development test staging production pilot profile デフォルトでは、developmentが選択される。 run modeを変えて起動する場合、 -Drun.mode=production というように、起動時にオプションを指定することで変えることが出来る run modeでDBの接続する先を変えたりする場合 src/main/resources/propsにproduction.default.p ...

Lift, Scala

Scala + Liftの環境は、最初はH2DBにつながるようになっている。 一般的にサービスを提供する場合、やはりMySQLなどに繋いで使いたい ということで、MySQLに接続する方法 Mavenでプロジェクトを作っている前提で pom.xmlファイルのdependenciesに以下を追加 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</arti ...

Scala

2.9からParallel Collectionsが実装されてますが、よく分かりません。 foreach, map, filterなどの処理をする時にマルチコア対応したコレクションという事ですかね。 import scala.collection.parallel.mutable._ しておく必要がありそうです。 例 Array(1, 2, 3, 4, 5).par.sum // または ParArray(1, 2, 3, 4, 5).sum 並列処理出来るコアの数を取得する scala.col ...

Scala

1~10を加算する処理を書くと (0 /: (1 to 10))(_+_)

Scala

「/:」という物が何か知りたくて調べてたら、これは foldLeftのエイリアスだと知った。 で、foldLeftというのは、何かというと、 Rubyでいうとinjectみたいなもの? rubyのinjectは .inject(0) {|result, item| result + item} と書くと、2 + 3 + 4 + 5 の結果が返ってくる 要は、0を初期値として、リストのアイテムごとにブロックで指定した処理をして、戻り値としてresultを返すという物だ これをScalaで書くと v ...

Eclipse, Scala

まずはMavenでプロジェクトを作成する scala-archetype-simple v1.3 を選択 あとは順次進んでプロジェクトを作成する できあがったプロジェクトは一度eclipseから削除する ※間違えてもディスクから削除はしない エディタなどで「.project」ファイルを開く <natures>タグの中に以下を1行を追加 <nature>org.scala-ide.sdt.core.scalanature</nature> <name ...