読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Playframework 2.5 で足りてなさそうなセキュリティヘッダ設定を追加する

セキュリティヘッダなんて、ヘッダに組み込むだけのものなので、ザクッと。 package filters import javax.inject.{Inject, Singleton} import akka.stream.Materializer import play.api.Configuration import play.api.mvc.{Filter, RequestHeader, Result…

Scala 関数型デザイン&プログラミング:Exercize3.16-3.23

Scala 関数型デザイン&プログラミング:Exercize3.2 - 3.13 - 謎言語使いの徒然 の続き。 Exercise 3.16 各要素に +1 したリストを返す関数を作れ。 なんか仕様的に map 関数に似てるなーと思った。 とりあえず フォイ def map[A, B](as: List[A], func: A =>…

Scala 関数型デザイン&プログラミング:Exercize3.14-15

相変わらず教科書はこれ。 Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ出版社/メーカー: インプレス発売日: 2015/03/20メディア: 単行本…

Scala 関数型デザイン&プログラミング:Exercize3.2 - 3.13

前回 からの続き 教本はこれ Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ出版社/メーカー: インプレス発売日: 2015/03/20メディア: 単行…

Scala 関数型デザイン&プログラミング:Exercize2.2 - 2.5

引き続き勉強がてら Exercise をやってみる。 Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ出版社/メーカー: インプレス発売日: 2015/04/30メディア: Kindle版…

Scala 関数型デザイン&プログラミング:Exercize2.1

真面目にやろうかと思った。 書籍はこれ Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ出版社/メーカー: インプレス発売日: 2015/04/30メディア: Kindle版この…

Play2.4 でネストしたJsonをバインドする

何で今更かというと、これつかえねーかなと思ったから。 最初は、Forms でのバインドをしようとしたのだけど、早速フォーラムが見つかりました。 キーワードは Play recursive form https://groups.google.com/forum/#!topic/play-framework/Ya1hPmR2QtY こ…

Java/Scala 比較。一定期間の曜日ごとの購買集計

単純なお題。 標準出力から、日数と、その日数に応じた日々の購買金額が入力されたとき、曜日ごとの集計額を計算しなさい。 ただし日数は 7 の倍数であることが保証され、曜日の先頭は日曜日である。 入力例: 14 日間を指定、各日付の購買数は、下記の通り…

Kuromoji 形態素解析を使ってみた

ぶっちゃけこれ kuromoji - japanese morphological analyzerwww.atilika.org Scala2.11.6 +SBT 0.13.x で使ってみたログ。 まずは build.sbt libraryDependencies ++= Seq( "org.atilika.kuromoji" % "kuromoji" % "0.7.7" ) にこんなん書いて、 import org…

play framework で react.js やろうとしてみたメモ

Playframework に ReactJS 突っ込もうかと思ったのだが、そもそもが JSX ベースの開発だ。 Playframework のデフォは Coffee しか対応していない。 他の人はどうしてるのかなぁと思って調べてみたが ssorallen/react-playgithub.com なんてのがあった。 中で…

フォームヘルパーをタグ調整する(Play 2.3.x)

何がしたかったかと言うと、Bootstrap の形状にうまく乗せたかった。 で、試行錯誤して自分で使っててまぁ違和感がなくなったのでメモ書き Playframework の Form については本家を参照すべし。 まず、Playframework の helper で吐き出すと、デフォルトは以…

K-平均法

データを分類する為のアルゴリズム。 データの分類にはデンドログラムというアルゴリズムが有名。 デンドログラムとは 何らかの評価関数で、全ての要素間の類似度を計算する。 最も類似していると判定される二つをまとめて、平均値を持った1要素とする 「全…

ランダムフォレストを実装する

ランダムフォレスト? 実装してみた感じ、教師ありデータから分類・学習し、その後に与えられた未知のデータに対して、識別・分類を行うアルゴリズム。 正答率は 7-8 割位が目安。余り複雑な学習はできない。他のアルゴリズムと組み合わせて使うといい感じに…

Xitrum web framework 弄ってみた

何か ScalaJP で Xitrum という単語があったので使ってみた。 まず新しいプロジェクトを作ろうか。 curl -L -o xitrum-new.zip https://github.com/xitrum-framework/xitrum-new/archive/master.zip 後は解凍して終わり。 インストールが必要ないのは楽でい…

Tanimoto関数でを勉強してみる

で、Tanimoto 関数は何かというと、T=Nc/(Na + Nb - Nc) で、ブックマークの情報で例にすると、A さんのお気に入りブックマーク数を Na、B さんのお気に入りブックマーク数を Nb、二人が共通してお気に入りに入れているブックマークを Nc としていると。 つ…

HikariCP + ScalaActiveRecord + MySQL5.1 をやってみた

何故にメモかというと、HikariCP がそもそもサンプル無さ過ぎて地獄を見たから。 まずは基本的な ScalaActiveRecord アプリを作る Play のサンプルアプリケーションをまずは作る。 play new HikariSample ウィザードくらいは任せた。 で、速攻、 ScalaActive…

可変長の追加フォームを作成する

可変長のフォームに対応する - 謎言語使いの徒然 の続き。 ついでだから動的にフォームを突っ込んでみる。 まずは build.sbt に下記を突っ込む。 coffeescriptOptions := Seq("bare") Coffee コードをコンパイルする際に、ラップをしない操作。 で、coffee …

Blog からいい感じに名詞を抽出したい

オライリー先生の課題で Blog ごとの比較とクラスタリングをするという例題があって、例題が英語だったので、日本語で対応しようとがんばってた。 日本語というだけで一気に難易度が上がる。 英語圏は空白でパースするだけで済む筈ですが、日本語だと形態素…

Playframework へのアクセス全部に共通のセキュリティヘッダを食わせる

まぁやってる事は ServletFilter とあんまり変わらない。 まずは適当にフィルタを作る。 コピペで安心はモットーです(2.2.1 で確認他のバージョンは知らん) package utils import play.api.mvc.{RequestHeader, Filter} import scala.concurrent.Future impo…

ログイン必須のアクション定義

ログインしてなかったら…という処理は皆書く筈。 Playframework 2.1 あたりから Security クラスが出来たらしい。 当然 2.2 でも使えるのでメモ。 package controllers.helpers import play.api.mvc._ import controllers.routes trait LoginController { se…

Scala_curl で HTTP クライアントを作ってみる

このエントリは Scala Advent Calendar の 22 日目になります。 事の始まりは Playframework の WS を使いにくいと感じたこと。 multipart/form-data in WS POST そもそも、WS で multipart を想定していないとのことでした。 そして、その下で動いてる Asyn…

Scala っぽいHTTPクライアント作ってみた

https://github.com/m3dev/curly これの作りがすごいなーと思ったけど、 微妙に対応しきれてない類のものがあったの 自分で作ろうか パケットを自力で書くとか正気の沙汰じゃない!? Java 対応捨てて Scala で ApacheCommons 使って書くか で作ったのがこれ…

Playframework2.2 でファイルアップロードとか

結構みんな探しそう、、、というかきっとアクセス増えそうというあざとい意図で書いてみる。 で、HTTPからファイルを送信するパターンは二つ。 純粋に HTTP Request body にバイナリ突っ込む方法これは単純ですよね。 // routes に追加 // POST /simple cont…

Play2.2.1のWSがもう少しどうにかならんかと思って解析してみた

経緯:試しに書いたらこんなことになり、フォーラムでは対応してないとか言ってて、じゃぁテストとかどうすんだろう?とか思ったらこの辺 で テストで「WS.url で multipart 飛ばせないの?」→「FakeRequest作りこんでテストして」とかそういう話があったの…

Scala2.10.3 から Redis 弄ってみた

scala-redis https://github.com/debasishg/scala-redis Maven のURLも無いし、ドキュメントはそのままビルドしてそうな感じだったので、clone して publpish-local して使った。 Apache2 ライセンスなので、ソース取り込むのが正解かもしれない。jar 配布っ…

ScalaCheck のジェネレータをムリクリ突っ込んでみた

まず、(ScalaCheck)http://www.scalacheck.org/というのがテストツールの一種。 ブラックボックステスト用のツールで、ランダムに値を生成して関数の挙動を見るというものだ。 sbt 定義は scalaVersion := "2.10.2" resolvers ++= Seq( "Sonatype OSS" at "h…

Salat でMongoDBのデータをCaseClassにマップする

Scala から MongoDB へアクセスする Casbah を真面目に使ってみる - 謎言語使いの徒然 の続き。 CaseClass にマップさえできればいい(極論それ以外はKVSだけあればどうとでもなる) Lift-mongodb にしようかと思ったら assembla がダウンしててドキュメントが…

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…