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

Sodium で関数型リアクティブプログラミング2 - skip・take 処理

前回に続き、Sodium を試してみます。 Sodium 今回は 「RxJava で行単位のファイル処理 - Groovy, Java Lambda」 で実装したものと同等の処理を Sodium を使って実装してみました。 ソースは http://github.com/fits/try_samples/tree/master/blog/20141209/…

Sodium で関数型リアクティブプログラミング

関数型リアクティブプログラミング(FRP)用のライブラリ Sodium を試してみました。 Sodium Sodium には現時点で Java・Haskell・C++・C# 用のライブラリが用意されていますが(Embedded-C や Rust 用のライブラリも実装中の模様)、今回は Java 用のモジュ…

Java アプリケーションの起動スクリプト - Windows・Linux

指定ディレクトリ内の全 JAR ファイルをクラスパスへ指定して Java アプリケーションを起動するスクリプト例です。 今回のソースは http://github.com/fits/try_samples/tree/master/blog/20141103-1/ Windows の場合 (bat) lib ディレクトリ内の全 JAR フ…

IPアドレスから地域を特定する2 - GeoLite Legacy Country CSV

前回、GeoLite2 と GeoIP2 Java API 等のライブラリを使って IP アドレスから国と都市を特定しましたが、今回は GeoLite Legacy の Country CSV ファイル (IPv4用) を使って国を特定する処理を実装してみます。 GeoLite Legacy なお、前回は IPv6 でも処理…

IPアドレスから地域を特定する - MaxMind DB Reader, GeoIP2 Java API

MaxMind が提供している無償の IP Geolocation DB である GeoLite と Java 用ライブラリを使って IP アドレスから国や都市を特定してみました。 今回は Java 用ライブラリの下記 2種類を試してみる事にします。 MaxMind DB Reader GeoIP2 Java API どちらも …

SQL から参照しているテーブルを抽出 - FoundationDB SQL Parser

FoundationDB SQL Parser を使って SQL から参照しているテーブル (from 句で使われているテーブル) を抽出する方法をご紹介します。 FoundationDB SQL Parser 1.4.0 これを応用すれば SQL から CRUD 図を生成するような処理も比較的容易に実装できると思…

Apache FtpServer で FTPS サーバーを組み込み実行

Apache FtpServer を使って Groovy で FTPS (FTP over SSL/TLS) サーバーの組み込み実行を試してみました。 Apache FtpServer 1.0.6 ソースは http://github.com/fits/try_samples/tree/master/blog/20140916/ FTP サーバーの組み込み実行 まずは、普通の …

成功するまで次を試すような処理へ Either モナドを適用 - FunctionalJava

成功するまで次の処理を試していくような処理に対して Either モナドを適用してみました。 使用した環境は下記の通りです。 Java SE 8u20 FunctionalJava 4.2 beta1 ソースは http://github.com/fits/try_samples/tree/master/blog/20140825/ はじめに Eithe…

Java用 SSH クライアントライブラリ - ganymed-ssh2, sshj, JSch, Apache SSHD

主要な Java 用の SSH クライアントライブラリを使って簡単なサンプルを作成してみました。 Ganymed SSH-2 sshj - SSHv2 library for Java JSch - Java Secure Channel Apache SSHD ソースは http://github.com/fits/try_samples/tree/master/blog/20140814/…

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

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

Apache Solr を組み込み実行

オープンソースの全文検索エンジン Apache Solr は、 Servlet として実装されており、通常は jetty 等のサーブレットエンジン(コンテナ)で実行しますが、今回は組み込み実行を試してみました。 Apache Solr 4.9.0 ソースは http://github.com/fits/try_sam…

ジニ不純度の算出 - 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…

Gradle を使って JAR ファイルへ AspectJ を適用

Gradle を使って既存の JAR ファイルへ AspectJ を適用してみました。 Gradle 1.12 AspectJ 1.8.0 Gradle 用の AspectJ プラグインとして gradle-aspectj というものがあるようですが、今回は AspectJ (aspectjtools) に含まれている Ant 用の AjcTask (i…

Gradle で任意の Maven 設定ファイルのローカルリポジトリ設定を適用する

Gradle のビルドスクリプトにて mavenLocal() を使用した際、${user.home}/.m2/settings.xml ファイルに localRepository 設定があれば、これを反映してくれますが、現時点では任意の Maven 設定ファイル (settings.xml) の localRepository を反映する方…

Groovy のトレイトと @Immutable

Groovy 2.3 からトレイト機能が追加されています。 Groovy 2.3 ここで、トレイトと @Immutable アノテーションを共に使用した場合、現バージョン (2.3) では以下のような注意点がありました。 トレイトで定義したプロパティの値は変更可能 (immutable と…

Java で ISO-8601 日付文字列をパース

Java で 2014-04-27T13:10:02+09:00 のような ISO-8601 形式の日付文字列をパースし java.util.Date を取得する方法として、主に下記が考えられます。 (1) 日付フォーマットのタイムゾーンに 'X' を使用 (Java SE 7 以降) (2) Apache Commons Lang の Date…

Java 8 ラムダ式の実装メソッド名を取得 - SerializedLambda

Java 8 ラムダ式の実装メソッド名を実行時に取得する方法を探ってみました。 ソースは http://github.com/fits/try_samples/tree/master/blog/20140413/ はじめに 前回、ラムダ式をデコンパイルしてみましたが、ラムダ式の処理は lambda$main$0 のような syn…

CFR で Java 8 のラムダ式をデコンパイルする

Java 8 のラムダ式にも対応した CFR という Java のデコンパイラをご紹介します。 CFR - another java decompiler 使い方 使い方は簡単で、http://www.benf.org/other/cfr/ から JAR ファイルをダウンロードして下記のように実行するだけです。 java -jar cf…

Javaの列挙型(Enum)へ新しい要素を追加2 - Javassist

前回、Java の列挙型(Enum)へ新しい要素(識別子)を追加するためリフレクションを駆使しましたが、今回は Javassist を使ってもっと容易に実現する方法をご紹介します。 Javassist 3.18.1 ソースは http://github.com/fits/try_samples/tree/master/blog/…

Javaの列挙型(Enum)へ新しい要素を追加

Java の列挙型(Enum)へ新しい要素(識別子)を動的に追加する方法を探ってみました。 列挙型の場合、普通のリフレクションクラスではインスタンス化できませんので、下記のように sun パッケージのクラスを使用する必要があります。 (1) sun.reflect.Const…

Gradle で Jetty9 を使用

今のところ Gradle 標準の jetty プラグインでは Jetty6 しか使えないようなので、Servlet 3.0 を使いたいケースでは不便です。 この場合、build.gradle で Jetty9 の起動処理を自前で実装する手も考えられますが、Gradle Jetty Plugin for Eclipse Jetty (…

Commons OGNL でマッピング・フィルタリング・畳み込み

以前、Java でマッピング・フィルタリング・畳み込みを試しましたが、 今回は Commons OGNL を使って OGNL 式によるマッピング・フィルタリング・畳み込みを Groovy で試してみました。 Commons-OGNL 4.0-SNAPSHOT サンプルソースは http://github.com/fits/…

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 …

Groovy で ZooKeeper を組み込み実行

以前、Groovy で Apache ZooKeeper を使う にて ZooKeeper のクライアントを Groovy スクリプトで実装しましたが、今回は ZooKeeper のサーバーを Groovy で組み込み実行してみました。 Apache ZooKeeper 3.4.5 サンプルソースは http://github.com/fits/try…

Gradle でアプリケーションを zip 化する

Gradle を使って Vert.x を組み込み実行する単純な Web アプリケーションを zip 化してみました。 Gradle 1.8 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20131020/ zip 化のタスク定義 とりあえず、Gradle のビルド定義 build.…

CommonsとSpringのBeanUtils.copyProperties

Commons BeanUtils に Bean のプロパティをコピーする BeanUtils.copyProperties() というなかなか便利なメソッドがありますが、同名のメソッドが Spring にもあります。 (当然ながらパッケージ名は異なります) ちなみに Seasar2 にも BeanUtil.copyProper…

Gradleでリソースファイルの出力先を変更

Gradle で Java プラグインを使う場合、main のクラスファイルやリソースファイルの出力先は下記のようになっています。 Gradle 1.7 ファイル種類 出力先の設定 デフォルト値 クラスファイル sourceSets.main.output.classesDir build/classes/main リソース…

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 言語モジュール…

Frege 上で Java クラスを使用する

前回、Frege で Functor や Applicative を試しましたが、今回は Frege のソース内で Java クラスを使用してみました。 Frege サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20130901_3/ はじめに 一部の Java クラスは初めから Fr…

Netty 4 で WebSocket

以前、Jetty, Grizzly, Netty(3.2.4), EM-WebSocket を使って WebSocket の簡単なサンプルを実装しましたが、今回は Netty 4.0.7 を使って同様の処理を実装してみました。 Netty 4.0.7 Final サンプルソースは http://github.com/fits/try_samples/tree/ma…

Java SE 8 で関数合成

以前 に Groovy や Scala 等で実施した関数合成と同様の処理を Java 8 で試してみました。 Java SE 8 EA b102 (現時点の最新は b104 のようです) サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20130901/ andThen と compose Jav…

Vert.x を組み込み実行

Vert.x を Groovy と Java で組み込み実行してみました。 Vert.x 2.0.1 ソースは http://github.com/fits/try_samples/tree/master/blog/20130825/ Groovy で組み込み実行 まずは Groovy で組み込み実行してみます。 通常の Vert.x スクリプトとの違いは下記…

JVM用の純粋関数型言語 Frege で Applicative Functor を使用

Frege は Haskell によく似た JVM 用の純粋関数型プログラム言語です。 Frege なかなか面白そうな言語だったので、関数を Applicative として使うサンプル (書籍「すごいHaskellたのしく学ぼう! 」より) を試してみました。 ソースは http://github.com/f…

Maven を Gradle 上で実行 - SVNKit によるソースのチェックアウト付き

前回 は Groovy スクリプトで Maven を実行してみましたが、今回は Gradle 上で実行してみる事にします。 Gradle 1.6 Maven 3.0.5 ソースは http://github.com/fits/try_samples/tree/master/blog/20130731_2/ 既存資産の pom.xml を Gradle に移行するのが…

Maven を Groovy スクリプト上で実行

Groovy スクリプト上で Maven を実行するには下記のような単純なスクリプトを用意するだけです。 Groovy 2.1.6 Maven 3.0.5 ソースは http://github.com/fits/try_samples/tree/master/blog/20130731/ mvn_run.groovy (Maven 実行スクリプト) @Grab('org.a…

Cucumber を Groovy で実行2 - Maven, Gradle

はじめに 前回 に続き、今回は Maven と Gradle を使って cucumber-jvm を実行してみます。 フィーチャやステップ定義は前回と同じものをそのまま使いますが、common.groovy の @Grab('org.seleniumhq.selenium:selenium-java:2.33.0') は不要なのでコメント…

Cucumber を Groovy で実行 - 単体実行

はじめに cucumber-jvm は BDD ツール Cucumber の Java 実装版です。 cucumber-jvm 様々な JVM 言語 (clojure、Groovy、Scala、JavaScript 等) を使ってステップ定義を実装できるので、今回は Groovy でステップ定義を実装、単体実行してみる事にします。…

Sequel + ojdbc1.4 で TIMESTAMP 変換エラー

はじめに Sequel 3.48.0 で ojdbc14.jar (10.2.0.5) を使って TIMESTAMP 型のカラムを含むテーブルを検索したところ下記のようなエラーが発生しました。 (JRuby 1.7.4 で実行) ただし、ojdbc5.jar・ojdbc6.jar (11.2.0.3) ではこのようなエラーは発生…

Java Scripting API で CoffeeScript を実行

はじめに Java SE 6 から実装されている Java Scripting API を使えば JavaScript を JVM 上で実行できます。そして、CoffeeScript は JavaScript にコンパイルできます。 と言う事で Java Scripting API を使って CoffeeScript を実行する Groovy スクリプ…

Functional Java で Iteratee - take の実装

Functional Java の Iteratee を使って、以前試した Play2 の Iteratee (http://fits.hatenablog.com/entry/20130212/1360681996, http://fits.hatenablog.com/entry/20130216/1361027691) や RxJava (http://fits.hatenablog.com/entry/20130310/1362876…

記号文字の URL エンコード - Java, .NET, JavaScript, Ruby, Python, PHP

下記のような文字をいくつかのプログラム言語の標準的な API で URL (URI) エンコードしてみたらどうなるか試してみました。 ; / ? : @ = & % $ - _ . + ! * ' " ( ) , { } | \ ^ ~ [ ]使用した言語は下記の通りです。 Groovy (Java API) C# (.NET Fram…

RxJava で行単位のファイル処理 - Groovy, Java Lambda

前回 (id:fits:20130224) のファイル処理と同様の処理を RxJava を使って実装してみました。今回作成したソースは http://github.com/fits/try_samples/tree/master/blog/20130310/ Groovy で実装 まずは Groovy で実装してみました。 Groovy 2.1.1 前回の…

軽量 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…

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

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

Functional Java で List モナド - Groovy, Java 8 Lambda

id:fits:20120912 にて Scalaz で実装したナイト移動の List モナド処理を Functional Java を用いて Groovy と Java SE 8 Early Access with Lambda Support(b56) で実装してみました。使用した環境は以下の通り。 Functional Java 3.1 Groovy 2.0.4 Open…

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 プ…