[Scala]Ubuntu11.xx上でPlay framework 2.0 for Scalaで、ImageMagick/jMagickを使ってみる
Ubuntu 11.xx上で、Play framework 2.0 for ScalaからImageMagickを使う ということで、今回のコンセプトですが cookpadにはtohuがある ぼくらにはない でもapacheのモジュールで作るのもしんどい という事で、Play framework for Scalaで作るという事なのです まずはJDKのインストール これは、 からダウンロードします。 しかし、SunがOracleに買収されたのは未だにショックです。。 というのはおいといて ダウン ...
[Scala]Play framework 2.0でプロジェクトルートのパスを取得する方法
Controllerの中などで、 Play.current.path.getPath() とする
[Scala]Play! Framework2で、Ruby on Railsのmigrationのような事
Ruby on Railsは、フルスタックで、テーブルのスキーマもリビジョン管理が出来るフレームワークですが、Play! Frameworkもそれに近い事が可能となっています。 Ruby on Railsで言うマイグレーションファイルは、Play! Frameworkでは conf/evolutionsディレクトリになります。 このディレクトリに1.sqlという感じに、連番でsqlファイルを作成すると その順番で実行時にスキーマの更新が行われます。 では、この1.sqlのファイルの中身はというと ...
[Scala]RubyでいうFile.joinに似た事を実装してみる
Scalaでパスを生成する時 素直にStringのジョインにする "/tmp" + "/" + "data" とか "/" + ("" /: Array("tmp", "data")) (_ + "/" + ?) とか毎回やるのが面倒になったので、 Array("tmp", "data") createPath という感じで/tmp/data という文字列を作れるようにしてみる。 trait createpathtrait; implicit def createpathimp(a: Array ...
[Scala]Scalaプロジェクトをsbtを使って管理する時に、実行可能なjarを作成する方法
sbtでパッケージ管理しているScalaのプロジェクトから 単体で実行できるjarファイルを作成するには。 sbt-assemblyというプラグインを使います。 githubはこちら インストールは プロジェクトのディレクトリ内で project/plugins.sbt というファイルを作り、この中に addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.7.4") resolvers += Resolver.url("sbt-plugin-rele ...
[Scala]sbtを使ってScalaのプロジェクトをeclipseで編集する
前の記事で、Scala IDEのインストールについては書きました。 その上で、sbtでパッケージ管理をしたいといった場合の方法です。 sbtのbuild.sbtなどで依存パッケージを定義した場合など、eclipseのビルドパスに反映されません。 そーいう時は、 sbteclipse というプラグインを使います。 githubはこちら このプラグインは、sbtで定義した依存関係をもとに、eclipseのビルドパスを設定してくれるという物です。 また、sbteclipseはsbt 0.11.2以降で ...
[Scala]Play frameworkで作ったプロジェクトをeclipseで編集する
Play frameworkでは、eclipseでプロジェクトを開けるようにするコマンドが存在するのでその機能を使用する。 まず、作ったプロジェクトのディレクトリに移動する。 $> cd PlayScalaExample コマンドを叩く $> eclipsify これで、eclipseで読み込む準備が完了 続いてeclipse側でPlayScalaExampleをインポートします。 eclipseのworkspaceにPlayScalaExampleを移動して、eclipseのメニュ ...
[Scala]Play frameworkでHello Worldちょい手前まで
Liftを使うかPlay frameworkを使うか、というところで、悩んでいるので とりあえず、Play frameworkも試してみる。 Scalaをセットアップするのは、JDK入れて適当な場所にScalaを展開してパスを通すだけで良いので、これは省略する。 Play frameworkは 本家() からダウンロードする。 Scalaを展開したディレクトリの隣あたりにPlay frameworkを展開。 Play frameworkへのパスを通す コマンドラインで $> play と入 ...
[Scala + Lift]HTMLのキャッシュ
Scala + Liftは、プロダクションモードで起動した場合には、htmlをキャッシュするみたいです。 自分自身は未確認ですが、確認方法は GlassFishの場合 - - - の項目に -Drun.mode=production を追加してGlassFishを再起動。 また、意図的にキャッシュを無効化するには LiftRules.templateCache = Full(NoCache) と言う行をBoot.scalaに書く。
[Scala]LiftかPlayか
中身は全然濃いくないです。 単純に自分はどうしたらいいか、悩んでいることを書いてみるだけです。 Liftは、comet対応とかで、デフォルトだと接続がキープされたりするようだ。 少人数しかアクセスのないサイトで、リアルタイム更新を重視するのであれば この方式で問題ないのだが、大人数接続で考えると、ちょっとややこしくなる。 接続をキープしない設定も出来るが。 また、ビューファーストなので、今までのRailsのやり方とはずいぶんと違う感じになる。 Railsからの移行を考えるのであれば、Play F ...
[Scala]Liftで、ProtoUserを継承したUserモデルで、locale と time zone を使用しない
Userモデルのobjectの所に override def signupFields: List= List(firstName, lastName, email, password) を追加する
[Scala]インスタンスのクラス名を取得
val str = "文字" str.asInstanceOf.getClass
[Scala]protectedの挙動
protectedの挙動ですが、まず scalaでは、class とか object のメンバーはデフォルトではすべてパブリックとして定義されます object PublicObject { val publicVal var publicVar def publicMethod = 1 } この例では、3つのメンバーは全部publicとして定義される privateとprotectedは、Javaに良く似ています。 privateはJavaとほぼ同等の動きですが、protected ...
[Scala]MD5 ハッシュ値
ScalaでMD5を生成するには… Javaのライブラリを呼び出して生成することになります。 import java.security.MessageDigest val digestedBytes = MessageDigest.getInstance("MD5").digest("arekore".getBytes) digestedBytes.map("%02x".format(_)).mkString Rubyの場合は requ ...
[Scala]派生クラスでtype aliasの指定を強制
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 ...
[Scala]Scala + Liftで、JNDIでデータベースに接続する時に、JNDI名を変えて接続する
前回「Scala + Liftで、GlassFishの接続プールを使う」の中で、JNDI名はデフォルトでは「lift」であると書いたが、このJNDI名を変えて接続してみたい。 設定は簡単で、 Boot.scalaの中のBootクラスの中のbootメソッドの一番最初に class Boot { def boot { DefaultConnectionIdentifier.jndiName = "custom" … という記述を追加するだけ。 これで、customという名のJ ...
[Scala]Scala + Liftで、GlassFishの接続プールを使う
GlassFishはWeb ・EJBコンテナなので、せっかくなので、Scala + Liftの環境からJDBC接続プールを使いたい。 幸い、liftにはJNDIでDB接続する仕組みが入っているようです。 liftがデフォルトで参照するJDBC接続プールは、liftという名前のJNDIなので、今回はliftという名前で設定します。 GlassFishはほぼ標準状態で入っている前提で。 まずはmysqlのjdbcドライバをGlassFishのlibにコピーします。 からダウンロードして c:\gla ...
[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 ...