Scala

Scala のケースクラスに制約を持たせる

Scala のケースクラスで値に制約を持たせたい場合にどうするか。 例えば、以下のケースクラスで amount の値を 0 以上となるように制限し、0 未満ならインスタンス化を失敗させる事を考えてみます。 case class Quantity(amount: Int) 使用した環境は以下 Sc…

quill で DDL を実行

quill は Scala 用の DB ライブラリで、マクロを使ってコンパイル時に SQL や CQL(Cassandra)を組み立てるのが特徴となっています。 quill には Infix という機能が用意されており、これを使うと FOR UPDATE のような(quillが)未サポートの SQL 構文に対…

Akka の FileIO でファイルを読み書き

Akka (akka-stream) の FileIO を使ってファイルの読み書きを行ってみます。 Akka 2.5-M1 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20170131/ はじめに akka-stream では Java 用の API は akka.stream.javadsl パッケージに…

Gradle で ScalaPB を使う

前回と同様の処理を ScalaPB で行ってみました。 ScalaPB であればビルドツールに sbt を使う方が簡単かもしれませんが、引き続き Gradle を使います。 Gradle 3.0 ScalaPB 0.5.40 今回作成したソースは http://github.com/fits/try_samples/tree/master/blo…

Gradle と Querydsl Scala を使った Querydsl SQL のコード生成

前回 の JPA に続き、今回は Gradle と Querydsl Scala を使って Querydsl SQL のコード生成を試します。 Gradle 2.5 Querydsl Scala 4.0.3 ソースは http://github.com/fits/try_samples/tree/master/blog/20150810/ はじめに Querydsl SQL の場合は Scala …

Gradle と Querydsl Scala を使った Querydsl JPA のコード生成

Gradle と Querydsl Scala を使って Querydsl JPA の Scala 用コード生成を試してみました。 Gradle 2.5 Querydsl JPA 4.0.2 Querydsl Scala 4.0.2 ソースは http://github.com/fits/try_samples/tree/master/blog/20150727/ はじめに 「Gradle を使った Que…

Apache Spark でロジスティック回帰

以前 ※ に R や Julia で試したロジスティック回帰を Apache Spark の MLlib (Machine Learning Library) を使って実施してみました。 Apache Spark MLlib 1.3.1 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20150427/ ※「 R …

Spark SQL で CSV ファイルを処理2 - GeoLite2

前回の 「Spark SQL で CSV ファイルを処理 - GeoLite Legacy」 に続き、今回は Spark SQL を使って GeoLite2 City CSV ファイルを処理してみます。 GeoLite2 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20141112/ はじめに GeoLi…

Spark SQL で CSV ファイルを処理 - GeoLite Legacy

以前、H2 を使って CSV ファイルを SQL で処理しましたが、今回は Spark SQL を使ってみました。 Spark SQL 「IPアドレスから地域を特定する2 - GeoLite Legacy Country CSV」 で使った GeoLite Legacy Country CSV を使って同様の処理を Spark SQL で実装し…

Arrow (Kleisli) で List モナド - Haskell, Frege, Scalaz

「Scalaz でリストモナド - Kleisli による関数合成 」等で試してきた List モナドを使ったチェスのナイト移動の処理を Arrow (Kleisli) を使って実装し直してみました。 Arrow は計算のための汎用的なインターフェースで、モナドを扱うための Arrow とし…

ジニ不純度の算出 - Groovy, Scala , Java 8, Frege

書籍 「集合知プログラミング」 の 「7章 決定木によるモデリング」 にあったジニ不純度(ジニ係数)の計算を下記の JVM 言語で関数言語的に実装してみました。 Groovy 2.3 Scala 2.11 Java SE 8 Frege 3.21 今回のソースは http://github.com/fits/try_samp…

Scala 2.10 で Apache Spark を使用

Apache Spark をソースからビルドして Scala 2.10 上で実行してみました。 Apache Spark 0.9 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20131121/ Spark のソースをビルド まずは、Spark ソースの scala-2.10 ブランチを git c…

Java で Apache Spark を使用

以前、sbt を使って Scala で Hadoop MapReduce 実装 や Groovy で Storm を使う で実施したお金の数え上げ処理を Spark 0.8 を使って Java で実装してみました。 Spark は以前、Spark を使って単純なレコメンドを実施 で 0.4 を試しましたが、0.8 でも API …

Gradle の Scala プラグインで -Xprint オプションを使用

Gradle の Scala プラグインで -Xprint オプションを試してみました。 Gradle 1.7 -Xprint はコンパイル途中のコードを出力する Scala コンパイラのオプションで、 -Xprint:<フェーズ> のようにコンパイルフェーズを指定して使用します。 例えば -Xprint:typ…

Vert.x 2.0 で Scala 言語モジュールを使用

Vert.x 2.0 用の Scala 言語モジュールを使って簡単な HTTP サーバーを実装してみます。 Vert.x 2.0.1 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20130901_4/ Scala 言語モジュールのビルド Vert.x 用の Scala 言語モジュール…

Play2 の Iteratee を使った行単位のファイル処理2 - Enumerator.generateM, Enumerator.fromCallback1

前回 id:fits:20130212 は Enumeratee.grouped() を使って行単位のファイル処理を実装しましたが、今回は Enumerator.generateM() と Enumerator.fromCallback1() をそれぞれ使って同様の処理を実装してみました。sbt のビルド定義ファイルなどは前回と同様…

Play2 の Iteratee を使った行単位のファイル処理1 - Enumeratee.grouped() の利用

id:fits:20130116 で使った Play2 の Iteratee を単体利用して行単位のファイル処理を実装してみました。 play-iteratees 2.1.0 Iteratee は Enumerator や Enumeratee と組み合わせて使用し、それぞれ以下のような役割を担います。 Enumerator : データを生…

Scala で WebSocket - Unfiltered

前回(id:fits:20130116)は Play2 Mini で WebSocket サーバー処理を実装しましたが、今回は同様の処理を Unfiltered で実装してみました。 Unfiltered 0.6.5 (Scala 2.10.0) サンプルソースは http://github.com/fits/try_samples/tree/master/blog/2013…

Scala で WebSocket - Play2 Mini

前回 id:fits:20130114 と同等の WebSocket サーバー処理を Scala 2.10.0 で Play2 Mini 2.1 RC2 を使って実装してみました。 クライアントは id:fits:20130114 で作成したもの(HTML + JavaScript)をそのまま使用する事にします。サンプルソースは http://…

軽量 Web フレームワークで REST API を実装 - Vert.x, Gretty, Play2 Mini, Socko, Restify

個人的に REST API の実装では JAX-RS (Java)*1 や Sinatra (Ruby) あたりを使っていますが、今回は選択肢を増やす目的で下記のようなフレームワークを試してみました。 Vert.x (Java, Groovy, JavaScript, Ruby, Python) Gretty (Java, Groovy, Scal…

Scalaz で Codensity モナド

Scalaz の Codensity を試してみました。Codensity モナドは継続モナドと基本的に同じですが、処理の型が以下のように異なっています。 継続モナドの場合 Codensityモナドの場合 (A => R) => R (A => F[B]) => F[B] つまり、Codensity は何らかのコンテナ(L…

Scalaz で継続モナド

以前(id:fits:20121104)、Haskell で実装した継続モナドのサンプルを Scalaz で実装してみました。なお、今のところ Scalaz に継続モナドは用意されていないようで、id:fits:20121111 のような方法で自作する必要がありました。ただし、実際のところ Scala…

Haskell と Scalaz でモナドを自作

今回は、Haskell と Scalaz でモナドを自作してみました。良い題材を思いつかなかったので、とりあえず以下のような単純なモナド(Counter モナドとする)を自作する事にしました。 カウンターを持たせて、バインドで処理を繋ぐ度にカウンター同士を加算する…

Java でマッピング・フィルタリング・畳み込み - FunctionalJava, totallylazy, Commons Collections, Guava, Java 8 Lambda

Java でコレクションのマッピング(map)・フィルタリング(filter)・畳み込み(foldLeft)のような処理を使いたいケースがありますが、今のところ標準で用意されていません。そこで、以下のようなライブラリを使って試してみました。 Functional Java 3.1 …

Scalaz で Reader モナドと Applicative

今回は関数をモナドとして扱う Reader モナドを Scalaz で使ってみます。 Scalaz 7.0.0-M3 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20121013/sbt 用ビルドファイルは以下の通りです。 build.sbt scalaVersion := "2.10.0-M7"…

Scalaz で Writer モナド

今回は、ログを追記する Writer モナドを Scalaz で使ってみます。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120917/ 使用した sbt 用ビルドファイルは以下です。 build.sbt scalaVersion := "2…

Scalaz でリストモナド - Kleisli による関数合成

前回 id:fits:20120828 に引き続き、今回も書籍「 すごいHaskellたのしく学ぼう! 」 のサンプルを Scalaz で実装してみる事にします。今回は、リストモナドを使ったナイト移動 *1 の処理です。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.c…

Scalaz で Ordering モノイド

書籍「 すごいHaskellたのしく学ぼう! 」 の Ordering モノイドを使った lengthCompare 関数を Scalaz で実装してみました。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120828/ lengthCompare 関…

Markdown の HTML 変換 - Ruby, PHP, Groovy, Scala, Node.js

Markdown 形式の文字列を HTML 変換する処理を複数のプログラム言語で試してみました。処理としては、標準入力から UTF-8 の Markdown 形式の文字列を取得し HTML 変換した結果を標準出力へ UTF-8 で出力しています。ちなみに、Markdown 文字列は LOGGiX プ…

Play framework 2.0 のアプリを Eclipse でデバッグする方法

Play framework 2.0 で作成した Web アプリを Eclipse 上でデバッグする方法をご紹介します。 準備 まず、play eclipsify を実行し、Eclipse 用のプロジェクトファイルを生成します。 Eclipse 用プロジェクトファイル作成 > play eclipsify次に、このプロジ…