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

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

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

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

Groovy で Vert.x のモジュールを作成

Vert.x のモジュールを Groovy で作成する方法をご紹介します。 Vert.x 1.1.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120708/ モジュールの配置場所 モジュールは以下のディレクトリに配置できます。 Vert.x の mods ディ…

Vert.x の使い方 - Windows 環境でソースからビルドする方法

Vert.x を Windows 上でソースビルドして実行環境を構築する手順をご紹介します。 ちなみに、わざわざソースからビルドしなくても https://github.com/purplefox/vert.x/downloads からパッケージ(例 vert.x-1.0.final.tar.gz)をダウンロードして解凍すれ…

Commons JCS のキャッシュ保持期間

Apache Commons JCS のキャッシュを保持する期間設定には以下のようなものがあります。 MaxLifeSeconds MaxMemoryIdleTimeSeconds MaxLifeSeconds で一定時間が経つと無効になるキャッシュを設定でき、MaxMemoryIdleTimeSeconds で一定時間参照されないと削…

Hector で JPA の Entity オブジェクトを Cassandra に登録

Java 用 Cassandra クライアント Hector の Object Mapper を使って JPA の Entity オブジェクトを Cassandra に保存する方法をご紹介します。 Cassandra 1.0.8 ソースは http://github.com/fits/try_samples/tree/master/blog/20120311/ 事前準備 Cassandra…

sbt のプラグイン作成 - 単純な Groovy スクリプトをコンパイル

sbt 0.11 プラグインの作成方法を簡単にご紹介します。 題材として、単純な Groovy スクリプトをコンパイルするプラグインを作成してみます。 sbt 0.11.2 ソースは http://github.com/fits/try_samples/tree/master/blog/20120304/ はじめに Groovy スクリプ…

H2 でユーザー定義関数を使用する

H2 Database Engine ではユーザー定義関数(Java で実装)をサポートしており、以下のような 2通りの登録方法が用意されています。 Java クラスメソッドをユーザー定義関数として登録 (Referencing a Compiled Method) ソースコードを指定してユーザー定義…

Drools でルールの有効期間を指定する - date-effective, date-expires

Drools の DRL ではルール毎の有効期間を以下のルール属性を使って指定できるようになっています。 date-effective 開始日時 date-expires 終了日時 どちらも日付の指定に文字列が使えますが、デフォルトの日付フォーマットが "dd-MMM-yyyy" となっており、…

セット割引をルールエンジンで処理 - Drools 使用

カテゴリ A の商品 1点とカテゴリ B の商品 1点の同時購入でセット価格が適用されるといったようなセット割引(セット商品割引)処理をルールエンジン Drools で実装してみました。使用した環境は id:fits:20120104、id:fits:20120105 と同じです。 Drools 5…

Groovy で JBoss Drools を使う2 - CEP機能

前回 id:fits:20120104 に引き続き、今回は Drools の CEP 機能(Drools Fusion)*1を Groovy で簡単に試してみました。 Drools 5.4.0 beta1 Groovy 1.8.5 (java 1.7.0_01 64bit) サンプルソースは http://github.com/fits/try_samples/tree/master/blog/201…

Groovy で JBoss Drools を使う - ルールエンジン機能

JBoss Drools はルールエンジン(Drools Expert)の機能と CEP(Drools Fusion)*1 の機能を兼ね備えており、なかなか興味深いツールです。(さらに BPMN2 等も処理できる)というわけで今回は Drools のルールエンジン機能を Groovy で簡単に試してみました…

Groovy で Storm を使う

リアルタイムデータ処理の Storm を Groovy から軽く使ってみました。 Storm 0.6.1-rc Storm は CEP(複合イベント処理)の一種のようですが、Esper (id:fits:20081126)などよりも Hadoop (id:fits:20101010, id:fits:20101026)に近いような印象です。(…

Groovy で Apache ZooKeeper を使う - Webコンテンツの分散ダウンロード

id:fits:20110925 や id:fits:20111016 でやったような Web コンテンツのダウンロード処理を Apache ZooKeeper を使って分散処理してみました。Apache ZooKeeper は分散システム間で協調動作させるためのサーバーソフトウェアで、シンプルで可用性が高くなる…

Apache Mahout でレコメンドを実践 - GitHub リポジトリをレコメンド

前回(id:fits:20111113)は適当なサンプルデータを使ったレコメンドだったので、今回は GitHub から API 経由で取得した実データを使ってレコメンドしてみます。 Apache Mahout 0.5 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/…

Apache Mahout で単純なレコメンドを実施 - Groovy

Groovy で機械学習ライブラリの Apache Mahout を使った単純なレコメンド処理を試してみました。 Apache Mahout 0.5 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20111113/ レコメンド処理の実装 Apache Mahout の基本的なレコメ…

非同期処理でWebコンテンツをダウンロードする方法2 - Groovy, Scala, Java, C#

今回は、前回(id:fits:20111016)と同様の非同期ダウンロード処理を Java と C# で実装し、Groovy と Scala は別の実装方法を模索してみました。使用した機能は以下の通りです。 Groovy : Actor (GPars) Scala : 限定継続 + ops Java : Concurrency Utiliti…

非同期処理でWebコンテンツをダウンロードする方法 - Groovy, Scala, F#

前回(id:fits:20110925)、並列コレクション等で Web コンテンツをダウンロードする処理を実装してみましたが、今回はその非同期処理版を Groovy, Scala, F# で実装してみました。(主な仕様は前回と同じ) 実行例 groovy async_download_web.groovy destdi…

信頼されない証明書を使ったHTTPSサーバーにBasic認証でPOST - Ruby, PHP, C#, Java, Groovy

信頼されないSSL証明書(自己証明書)を使ったサイトに対して、Basic認証を行い POST するサンプルを Ruby, PHP, C#, Java, Groovy で実装してみました。サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20111002/ サンプルは、第1引…

並列処理でWebコンテンツをダウンロードする方法 - Groovy, Scala, C#, Java, Ruby

複数のWebコンテンツ(HTMLや画像など)をダウンロードする際に 1件ずつ処理していたのでは非効率です。 というわけで、並列的にWebコンテンツをダウンロードするプログラムを Groovy, Scala, C#, Java, Ruby で実装してみました。主な仕様は以下で、外部ラ…

jclouds の BlobStore API - 単純な Blob の put/get

様々なクラウド環境に対して共通的な API でのアクセスを提供する Java 用ライブラリ jclouds の BlobStore API を試してみました。BlobStore API は Amazon S3, Windows Azure Blob, Google Storage 等、様々なクラウドストレージ環境をサポートしています…

BDDツール spock の Mock

Groovy の BDDツール spock における Mock の使い方を簡単にご紹介します。spock の Mock は定義が簡単なので個人的にはかなり有用だと考えています。 例えば、以下のような記述でモックの処理内容が定義できます。(実行回数と戻り値の組み合わせも可) 戻…

Ratpack + JHaml + Morphia で MongoDB を使った Web アプリ開発

これまで以下のような構成で作成してきたサンプルと同様のものを Ratpack + JHaml + Morphia の構成で作成してみました。 Sinatra + Haml + Mongoid, MongoMapper (id:fits:20110306) express + haml.js + mongoose (id:fits:20110409) Scalatra + Scalate +…

LINQやコレクションAPIを使ってCSVファイルからデータ抽出 - C#, F#, Scala, Groovy, Ruby の場合

id:fits:20110702 や id:fits:20110709 にて、SQL を使ってデータ抽出した処理を LINQ やコレクション API を使って実施し直してみました。(ただし、今回は station_g_cd でのソートを実施していない等、以前使った SQL と完全に同じではありません)今回は…

SQLを使ってCSVファイルからデータを抽出する方法 - Groovy + H2 データベース

CSV ファイルからデータを抽出するのに SQL を使いたいケースがあると思いますが、RDB をセットアップして CSV ファイルをインポートしたりするのは非常に面倒です。そこで、Groovy と H2 データベースを使って手軽に実施する方法をご紹介します。必要な環境…

JVM上の WebSocket サーバープログラム - Jetty, Grizzly, Netty, EM-WebSocket を試す

WebSocket の簡単なサーバープログラムを Jetty, Grizzly, Netty, EM-WebSocket をそれぞれ使って、Groovy や JRuby で実装してみました。 WebSocket のプロトコル仕様は確定しておらず、互換性の無い改訂が行われているようなので、今回は draft-ietf-hybi-…

Embed Jetty - Groovy と Scala で Jetty を組み込み実行

プログラム内での Jetty 組み込み実行を試してみました。 id:fits:20110521 で作成したサンプルの war ファイルを Groovy と Scala から組み込み実行してみます。使用した Jetty のバージョンは以下の通りです。 Jetty 8.0M3 サンプルソースは http://github…

Maven での BDD - Specs, Specs2, RSpec, Easyb, spock

Maven3 を使ったプロジェクトでの BDD(振舞駆動開発)の実施方法をまとめてみました。 今回試した BDD ツールは以下の通りです。 Specs Specs2 RSpec Easyb(Maven2) spock 結果として、この中では Specs/Specs2 か spock あたりを使うのが良さそうです。…

Groovy, Scala, F#, Haskell による関数・クロージャの合成

Groovy 1.8 のクロージャ合成の機能を試したついでに、Scala, F#, Haskell での関数合成の機能も簡単にまとめてみました。サンプルのソースコードは http://github.com/fits/try_samples/tree/master/blog/20101213/ Groovy の場合 Groovy では >> や Groovy…

Ruby, Groovy, Scala での Excel準拠 CSV ファイルのパース処理 - opencsv使用、Iterator.continually() 等

Excel の仕様に準拠した以下のような CSV ファイル(改行・カンマ・ダブルクォーテーションを要素内に含む)をパースし、第1・3の要素を標準出力に出力するサンプルを Ruby、Groovy、Scala で作成してみました。 CSVファイル例 test.csv 1,テスト1,"改行 含…

Groovy から Neo4j を使ってみた - スタンドアロン実行とRMIリモート接続によるNodeの追加と探索

グラフDBの Neo4j を Groovy から使ってみた。 具体的には、スタンドアロン実行と RMI を使ったリモート接続の各々で Node の追加と探索を試してみた。使用した環境は以下の通り。 Groovy 1.7.4 Neo4j 1.1 サンプルソースは http://github.com/fits/try_samp…

JSONデータとして取得したDBの検索結果をExtJSで表示するWebシステムのサンプル - Sinatra, Grails, CakePHP

DB の検索結果を JSON で返して、JavaScript(ExtJS)で表示するような Web システムのサンプルを Sinatra, Grails, CakePHP の 3種類のフレームワークで作成してみました。処理の概要は以下の通りで、MySQL の information_schema データベース TABLES テー…

Groovy, Scala, Ruby, PHP による XML の加工 - 要素や属性の追加・更新・削除

今回は、各種スクリプト言語による XML の加工方法をまとめてみました。 Groovy, Scala, Ruby, PHP を使って以下のような XML を <root> <data id="1">sample1</data> <data id="2" ext="none"> <details /> <details /> </data> </root> 次のような加工を施して (1) id="3" の data 要素を追加 (2) id="2" の data 要素に type 属性を追加 (3) id="1…

Groovy, Scala, Ruby, PHPでのXMLパース処理 - XPath使用

XPath もしくは類似の方法を使ったXMLのパース方法を Groovy, Scala, Ruby, PHP でまとめてみた。 個人的には、XMLのパース用途では Groovy を主に使用し、状況や気分に応じて Ruby, PHP を使用するような感じだ。(Scala はXMLパース用途にはあまり使わない…

Groovy で MongoDB を使用

ドキュメント指向DBであるMongoDBを軽く使ってみました。 環境は以下の通り。 MongoDB 1.3.1 MongoDB Java Driver 1.2 Groovy 1.7.0 MongoDBの起動 MongoDB のアーカイブをダウンロード・解凍、bin ディレクトリを環境変数 PATH に設定して mongod コマンド…

分散 KVS の Voldemort を Groovy で使ってみる

Java で書かれた分散 KVS の Voldemort を簡単なサンプルを作って試してみた。使用した環境は以下の通り。 Groovy 1.7.0 Voldemort 0.60.1 サーバーの作成と実行 今のところ、Voldemort の bin ディレクトリには .sh ファイルしか用意されていないため、Wind…

Grails におけるドメインクラスのユニットテストとインテグレーションテスト - Grails標準テストと Easyb プラグイン使用

前回 id:fits:20091101 の続きとして、今回はドメインクラスの関連をユニットテストする方法とインテグレーションテストの方法を紹介する。 関連のユニットテスト 関連をユニットテストする場合の注意点は、ドメインクラスの save メソッドを呼び出しても関…

Grails におけるドメインクラスのユニットテスト - Grails標準テストと Easyb プラグイン使用

Grails におけるドメインクラスのユニットテストに関して、Grails 標準テストと Easyb(BDD 用のツール) プラグインを使った 2通りを紹介する。ドメインクラスのユニットテストを行ううえでのポイントは、実行時にドメインクラスに適用される save(), valid…

XmlSlurper を使った XML の加工

Groovy には XML を処理する手段がいろいろと用意されているが、今回は XmlSlurper を使った XML の加工(要素/属性の追加・削除)と出力を試してみる事に。とりあえず、属性の追加や削除は以下で実現可。 要素の追加: appendNode メソッドを使用 属性の追加…

Groovy で Windows Update の履歴を出力する - Scriptom を使った COM 実行

Groovy スクリプト上で Windows の COM 実行を可能とする Scriptom モジュールを試すために、Windows Update の履歴を出力する処理を Groovy スクリプトで書いてみた。実行環境は以下の通り。 Java SE 6.0 Update 11 Groovy 1.5.7 Scriptom 1.5.4 WSH スクリ…

Apache Camel で Esper を使ったイベント処理2 - Time・Length batch window

前回(id:fits:20081203)作成した Apache Camel + Esper コンポーネントの環境を使って、ちょっとだけ高度なイベント処理を試してみる。とりあえず、Esper のビルトイン Data Window Views の中から以下のようなものを使う。 Length batch window "win:leng…

Apache Camel で Esper を使ったイベント処理 - Esper コンポーネント使用

Apache Camel の Camel Extra プロジェクトには Camel 上で Esper のイベント処理を行うための Esper コンポーネント(camel-esper ライブラリ)が用意されているので、これを使って Camel 上で簡単な Esper を使ったイベントのフィルタリング処理を試してみ…

Groovy 1.6 のアノテーション @Mixin と @Delegate

Groovy 1.6 の新機能である @Mixin と @Delegate アノテーションを Groovy 1.6 beta2 で試してみた。@Mixin と @Delegate が実現する機能は以下の通り。 @Mixin は実装を取り込む(自分に機能を取り込む) @Delegate は委譲処理を実現(自分に機能を取り込ま…

easyb で dbunit - easyb dbunit プラグイン使用

easyb の dbunit(DBのユニットテストツール)用のプラグインを使ってみる事にする。 ちなみに、dbunit プラグインを使うと database_model メソッド(クロージャで DB に格納する初期レコードを指定できる)が使えるようになる。使用した環境は以下の通り。…

(Java版) Apache Camel を使った HTTP 処理とファイル入出力 - Jettry, File コンポーネント、Gant の利用

id:fits:20080919 で作成したサンプルの Java版は以下の通り。動作は Groovy 版と基本的に同じ。Groovy 版との違いで注目すべき点は getOut().setBody() で String.class の指定が不要なところ。 SampleRoute.java package sample; import java.io.FileInput…

Apache Camel を使った HTTP 処理とファイル入出力 - Jettry, File コンポーネント使用

Apache Camel の Jetty コンポーネントで HTTP リクエストを処理できるようなので、簡単なサンプルを作ってみる事にした。(ついでに File コンポーネントも使う)なお、Jetty コンポーネントを使うには Apache Camel に同梱されている jar ファイル以外に以…

Apache Camel の使用

Apache Camel は Apache ActiveMQ プロジェクトの一部、Spring を基盤とした統合フレームワークで EIP (Enterprise Integration Patterns) を実現するためのクラスライブラリが用意されている。 なお、EIP ではエンタープライズアプリケーションを連携させる…

SVNKit の使い方 - ログ取得

Subversion 用の Pure Java ライブラリ SVNKit を使って、ログを取得してみる。(svn log のような動作を実装)実行環境は以下の通り。 Groovy 1.5.6 SVNKit 1.1.8 事前準備として、groovy コマンドの実行時に SVNKit の svnkit.jar がロードされるように Gr…