技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Scala

Scala から MongoDB へアクセスする Casbah を真面目に使ってみる

MongoDBをScalaで触る準備 - 謎言語使いの徒然 でScalaからMongoにアクセスする為のライブラリはインポートしてみたが、使ってなかったので、改めて使ってみる。 MongoDB のデータ構成 まずどんな階層構造でデータを保持してるのかを確認する。 Getting Star…

Ubuntu 13.10 に Riak を入れてScalaから操作してみる

ぶっちゃけ公式読みながらサンプル書いて、ソース読んで、必要以上に難しそうに書いてる箇所を簡略化しただけ。 Riak ほとんど純粋なKVSで、認証機構がないので、ほしければ自力でセキュリティを設定する必要がある。 まぁ IP Tables でいいんじゃないかと思…

Playframework2.2 から scala activerecord を使う

Scala ActiveRecord まずは build.sbt でプラグインを指定Playframework2.2 でまだフォームインテグレーションは試してないけど、O/R として使う分には問題なかったのでメモ。 libraryDependencies ++= Seq( "com.github.aselab" %% "scala-activerecord" % …

WSライブラリの Playframework2.1 以降の変更

WSライブラリ Playframework 2.0.x 系は WS コマンドで外部サイトアクセスできるのですが、2.0 系から気づけば応答値が変更されていて色々戸惑ったので。 2.0.x 系は val promise:Promise[Response] = WS.url("http://xxx.xxxx.net").get() Promise 型は独自…

自力でFacebookのOAuth2に対応してみた

やることはFacebookアカウントでサイトのアカウント作って、ログイン認証したいだけだったのだが、どうも Playframework2.2 では Pac4J が対応していなかったので、自力で認証してみた。 まずは設定に Facebook のアプリケーション情報を突っ込む auth { fac…

Pac4J をPlayframework2.2 に突っ込んでみて挫折(2013/11/01 時点で未対応)

Playframework2.2 になってから projects/Build.scala が抜けて、build.sbt に直接書くようになってるので注意。 っても、sbt 知ってればどうという事もない。 resolvers += "Sonatype snapshots repository" at "https://oss.sonatype.org/content/reposito…

Webjars が何気に便利だった件

公式サイトは http://www.webjars.org/ 何ができるかというと、様々な JavaScript ライブラリの css やら js やらを手動で assets とかに突っ込まなくても利用できるようにしてくれるライブラリ。 知った経緯は TypesafeActivatoer でPlayframeworkのサンプ…

おすすめアイテムの計算

類似度をベースにお勧めのアイテムを計算する。 相変わらずデータセットは http://white-azalea.hatenablog.jp/entry/2013/10/08/000419 計算は http://white-azalea.hatenablog.jp/entry/2013/10/08/231209 やってることは、 他人との類似値を計算する 本人…

2人間の類似値を取得する(2)

ピアソン相関を使って類似度を出力する ピアソン相関ってなんぞ?と思った人は統計学の講座。 参考になるのが下記 http://kusuri-jouhou.com/statistics/soukan.html http://www.koka.ac.jp/morigiwa/sjs/les10801.htm 片方は薬学ですがキニシナイ。 論よりR…

2人間の類似値を取得する

ユークリッド距離で計算。 まずはデータソース val source = Map( "azalea" -> Map( "Java" -> 5, "C#" -> 5, "Python" -> 2, "Perl" -> 2, "Scala" -> 5, "C" -> 4, "C++" -> 4 ), "nullpobug" -> Map( "Ruby" -> 4, "Python" -> 5, "Java" -> 4, "PHP" -> …

暗号化を利用する

といってもハッシュを作るだけですが、Playにはcryptが存在する ライブラリは play.api.libs.Crypto で、基本的に下記の定義がある 不可逆(ハッシュ化) sign(String):String sign(String, Array[Byte]):String 可逆 encryptAES(String):String encryptAES(St…

定期実行処理を書く

一番手っ取り早いのは Global の onStart に仕掛ける方法 import play.api.libs.concurrent.Akka import play.api.{Application, GlobalSettings} import scala.concurrent.duration.DurationLong object Global extends GlobalSettings { override def onSt…

テンプレート配置を階層構造化する

公式では view 直下にしか配置されていないが、複数階層を用意すると、下記の様なクラスにコンパイルされる。 import views.html.path.to.class.templateName

ScalaのRegexParser使ってみた

RegexParser って何よ? Scalaのパーサコンビネーターと呼ばれる字句解析ライブラリのうちの一つ。 他に派生クラスで JavaParser とか、基底で Parser とかがあります。 字句解析っていってピンとくる人はきっと大学とかでコンパイラの授業受けた人ですね。 …

Scala で markdown パースするだけではなく、出力を少しいじる

前回 knockoff なるライブラリを紹介したのですが、ちょこっと内容を変更してみます。 knockoff でパースした型というのは def knockoff( source : java.lang.CharSequence ) : Seq[Block] = { なんて定義になっており、要は Block と呼ばれる解析データのシ…

markdown をざっくり

というか正直量が少なすぎて、書くべきか迷った。 まずはいつぞや書いた Play 記事を markdown で用意。 SBT の libraryDependencies に "com.tristanhunt" %% "knockoff" % "0.8.1" 突っ込む 下記のコードを突っ込む import java.io.PrintWriter import sca…

evolutionsを利用する

conf/evolutions/defaults ディレクトリに「(数字).sql」ファイルを配置します。 この数字順に実行されますので、テーブルの作成等をここに記述していきます。 尚、コメントで特別なもので、下記があります。 # --- !Ups # --- !Downs Ups : 新規にアップデ…

RSS フィードを拾う

使うのは ROME というライブラリ。http://mvnrepository.com/artifact/rome/rome/1.0そのまま sbt に "rome" % "rome" % "1.0" としておけば利用可能。 コード的に難しいものはなく、 import com.sun.syndication.io.SyndFeedInput import com.sun.syndicati…

WS API でWeb上のデータを引っ張る

HTTP なコマンドで拾えるものは大概拾える。 import play.api.libs.concurrent.Execution.Implicits._ import play.api.libs.ws.{Response, WS} import scala.util.{Failure, Success} object RssLoader extends Logger { def firstUri(uri:String) = { def …

フォームエラーをまとめて表示したい

Playframework2.1.1 のフォームに値をバインドし、エラーを表示する際に、エラーのみを一覧表示で取得したい場合がある。 その方法を探してみた。(そのまま今作ってるやつ) val userCreateForm = Form( tuple( "account" -> nonEmptyText(6, 16).verifying(M…

Form をテンプレート上でバインドする

先ずはフォームヘルパーを使用します。 @helper.form(action = controllers.routes.User.create, 'id -> "user") { @* any contents here */ }ここにフォームをバインド下HTMLコンポーネントを配置していきます。テンプレートヘルパーは /framework/src/play…

Playプロジェクトを作成する

作成したいディレクトリまで移動し、下記のコマンドを実行する。 play new [プロジェクト名]するとウィザードが起動しますので、順に回答していきます。 この例では、デフォルトディレクトリに Sample というアプリケーションを作成しています。 azalea@samp…

Form を使う

Playframework にはPOSTデータ等を簡単にバリデーション、及びオブジェクトマップする方法があります。先ずは簡単にフォームを使いましょう。 import play.api.data._ import play.api.data.Forms._ val loginForm = Form( tuple( "email" -> text, "passwor…

Playframework の Form メッセージ多言語化

この Forms を使用した時のバリデーションエラーメッセージや、画面にバインドしたときのメッセージを多言語化する場合の方法。 まず、このフォームバリデーション定義がどこにあるかというと、 ディレクトリ : play-2.1.1/framework/src/play/src/main/scal…

Playframework の Akka 設定を読み解く

※ Play2.0.3 時代の古いやつです Playframework は Akka を利用しており、性能に直結してる。 もし、CPUやメモリに余裕があり、更に大規模なアクセスに対応したい場合は、設定を上書きできる。application.conf で設定可能だが、Playのデフォルト設定は下記…

PlayFramework をインストールする

Playframework 2.1.1 をインストールする手順です Java6 以上を入れます(この詳細はJavaの物を探してください) Play Framework - Build Modern & Scalable Web Apps with Java and Scalaから2.1.1 をダウンロードしてきます 適当なディレクトリへ解凍し、パ…

Playframework のバグに全力でハメられたのでメモ

https://github.com/playframework/Play20/issues/1086このバグ、、、要するに Playframework 2.1.1 は何らかの問題*1で less css を正常に認識できずコンパイルできないらしい。 これで 2h 位嵌められたよ、、、、。 *1:コード追ってないけど

Playframework 2.1.1 ビルドとテストを非同期に

Playframework でそれなりにプロジェクトの規模が大きくなると無視できなくなるのがビルド時間、、、。 特にUT走らせるとなると、ビルド時間が指数関数的に増えること請け合いです。 しかもコンパイル中はソースの改修もなにもできないという、、、、。後IDE…

sbt で書いたものをサービスとして動かす

極論停止は kill 出来れば良いやの感覚です。 というのも、 sbt run &なんて馬鹿正直に書くと、sbt プロセスが何故か停止してしまう。 fg するとまた動くのだが、bg 出来ないから冗談ではない。なので、デーモン化を考える。http://stackoverflow.com/questi…

AkkaのMailboxサイズを引っこ抜く

高スペックマシンで普通に余裕があるのは当たり前として、問題は AthronNEO なんてへちょいスペックではたして動くだろうか?(;´∀`) 常時起動できないと集計にならんし、かといって高スペマシンの常時稼働はお財布に厳しい。 仕方がないので10秒ごと位にキ…