[Scala]Maven + Scala + LiftのプロジェクトをGlassFish上にデプロイしてeclipseでデバッグする
なんか長いタイトルですが 要はMavenで作ったScala + LiftのプロジェクトをGlassFishにデプロイしたい で、eclipseでGlassFishにデプロイしつつデバッグもしたい という欲張り企画なんですが eclipseのプロジェクト作成とか、Mavenのプロジェクト作成では これらの要件を満たす設定になってくれないので 手動で設定を変更します。 必要な物 eclipseは「Eclipse IDE for Java EE Developers」 scala 2.9.1 mave ...
[Scala]PartialFunction 部分関数?
とりえあず、以下のようなコードを書きます。 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 ...
[Scala]Schemifier.schemifyでテーブルを作った時にカラム名がuid_tとかなってしまう場合(カラム名を自分で指定したい)
class User extends LongKeyedMapper with IdPK { def getSingleton = User object uid extends MappedString(this, 24){ override def dbColumnName = "uid" // <= こんな感じ } } という感じで書く
[Scala]Schemifier.schemifyでテーブルを作った時にuser_tとかなってしまう場合(テーブル名を自分で指定したい)
object User extends User with LongKeyedMetaMapper { override def dbTableName = "users" } という感じでテーブル名を指定する
[Scala]LiftでMySQLに繋ぐ(sbt編)
前々回くらいで、【Scala】LiftでMySQLに繋ぐ(Maven編)では、MavenでMySQLにつなぐための設定をしたが、今回はsbtでMySQLにつなぐための設定を。 project/build/LiftProject.scalaファイルに、MySQLのドライバの設定を追加します。 override def libraryDependencies = Set( "net.liftweb" %% "lift-webkit" % liftVersion ...
[Scala]Liftのrunmodeについて
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 ...
[Scala]LiftでMySQLに繋ぐ(Maven編)
Scala + Liftの環境は、最初はH2DBにつながるようになっている。 一般的にサービスを提供する場合、やはりMySQLなどに繋いで使いたい ということで、MySQLに接続する方法 Mavenでプロジェクトを作っている前提で pom.xmlファイルのdependenciesに以下を追加 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</arti ...
[Scala]Parallel Collections
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 並列処理出来るコアの数を取得する sca ...
[Scala]1~10を加算する処理
1~10を加算する処理を書くと (0 /: (1 to 10))(_+_)
[Scala]foldLeft(/:)
「/:」という物が何か知りたくて調べてたら、これは foldLeftのエイリアスだと知った。 で、foldLeftというのは、何かというと、 Rubyでいうとinjectみたいなもの? rubyのinjectは .inject(0) {|result, item| result + item} と書くと、2 + 3 + 4 + 5 の結果が返ってくる 要は、0を初期値として、リストのアイテムごとにブロックで指定した処理をして、戻り値としてresultを返すという物だ これをScalaで書くと v ...
[Scala]eclipseでMavenを使ってScalaのプロジェクトを作り、Specsでテストするようにする
まずはMavenでプロジェクトを作成する scala-archetype-simple v1.3 を選択 あとは順次進んでプロジェクトを作成する できあがったプロジェクトは一度eclipseから削除する ※間違えてもディスクから削除はしない エディタなどで「.project」ファイルを開く <natures>タグの中に以下を1行を追加 <nature>org.scala-ide.sdt.core.scalanature</nature> <name ...
[Scala]Date型をフォーマットして文字列にする
"%tY-%<tm-%<td".format(new Date) %tyのtは日付および時刻変換文字用の接頭辞 %<tmの<は引数のインデックスを指定するインデックスで、以前の書式指示子の引数が再利用されます つまり、 %$1tmと同じ意味になります。 $1というのは、引数のインデックスで val d1 = new Date val d2 = new Date val d3 = new Date "%tY-%$3tm-%$2td".format(d1, d2, d3) と ...
[Scala]WindowsのJDK(32bit)をJDK(64bit)に入れ替えたときにエラーが出る
Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.internal.Kernel32 このようなエラーが出た場合、tempディレクトリにキャッシュのdllが残っているのが原因。 以下のコマンドで削除できる del %TEMP%\jansi.dll del %TEMP%\jline_.dll
[Scala]Liftでコンソールを使う
Liftでコンソールを起動してモデルの動きなどを確認したい場合 プロジェクトフォルダで以下のコマンドを打ち込む C:\project> mvn scala:console -DmainConsole=LiftConsole scala> import myproject.model._ そうすれば、モデルへアクセスが出来るようになる
[Rails]updated_atカラムを自動更新しないようにする
RailsのActiveRecordは、updated_atとcreated_atカラムがある場合、created_atには新規作成時、updated_atは新規と更新時に自動で日付が設定されます。 普段はこの動きで便利なんですが テストをする時などにupdated_atを操作したりしたい。 そんなときは以下のように書けばupdated_atに自動で日付が設定されるのを防ぐ事が出来る。 ActiveRecord::Base.record_timestamps = false record.sav ...
[Scala]View BoundとContext Boundについて
View BoundとContext Boundとは 「頻出する暗黙(implicit)変換・パラメータの利用方法」のシンタックスシュガー implicitとは scala> implicit val a:Int = 1 scala> implicit val s:String = "a" scala> def some(implicit v:Int) : Int = v scala> some res0: Int = 1 def some(implicit v:Int) ...
[Scala]abstract
abstractとは 抽象 abstract class Main とすれば、抽象クラスになる abstract
[Scala]パラメータ化された型について(<:とか)
クラスに型パラメータを追加 class クラス名 定義例 class Sample { protected var t: T = _ def set(in: T): Unit = { this.t = in } def get(): T = { t } } 使い方 val s = new Sample s.set("abc") val v = s.get() 型パラメーターの境界(<:とか>:とか) クラスの定義と継承が以下のような状態の場合に class A1 class A2 e ...
[Scala]liftで、 ProtoUserを継承している場合のログイン画面変更
liftで、 ProtoUserを継承している場合のログイン画面変更方法 loginXhtmlメソッドでhtmlを生成しているので、たとえばUserモデルの場合 ※デフォルトで作成されるUserモデル object User extends User with MetaMegaProtoUser { def loginXhtml = { (<form method="post" action={S.uri}><table><tr><td ...
