2012-01-01から1年間の記事一覧

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 モナドとする)を自作する事にしました。 カウンターを持たせて、バインドで処理を繋ぐ度にカウンター同士を加算する…

Haskell で継続モナド

継続渡し形式 (CPS) をモナドとして扱う継続モナドを Haskell で試してみました。 継続モナドは以下のような処理をモナド化します。 何らかの処理結果を引数として継続と呼ばれる関数を呼び出す(継続は外部から与える) 処理結果を引数にコールバック関数…

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

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

Ext JS 4 で Date を JSON 化するとタイムゾーン指定子がつかない

Ext JS 4.1.1 では*1、Date を JSON 化する際に Ext.JSON.encodeDate() メソッドを使用していますが、 このメソッドはタイムゾーン指定子の無い日付文字列を生成してしまうので、サーバーアプリとの連携などで不都合が生じる可能性があります。 Ext.JSON.enc…

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次に、このプロジ…

非同期処理でWebコンテンツをダウンロードする方法5 - IcedCoffeeScript

IcedCoffeeScript は TameJS の await/defer をサポートした CoffeeScript の拡張版です。 IcedCoffeeScript 1.3.3a 前回(id:fits:20120415)、TameJS + CoffeeScript で実装した Web コンテンツのダウンロード処理を IcedCoffeeScript で実装すると以下の…

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

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

Node.js の非同期処理を関数合成で繋げてみる - 連続コールバック対策

Node.js でプログラミングする際の課題は、非同期処理のコールバックが多段になって分かり難くなってしまう点だと思います。(下記は CoffeeScript の例) func1 引数・・・, (err, 処理結果1) -> if err? エラー処理 else ・・・ func2 引数・・・, (err, …

Express 用のテンプレートエンジンを自作する方法

Node.js 用 Web フレームワーク Express のテンプレートエンジンを自作する方法をご紹介します。 Express 3.0.0beta2 といっても自作テンプレートエンジン側で以下のような処理を用意するだけなので、非常に簡単です。 exports.__express = function(path, o…

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

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

TameJS による継続と CoffeeScript 上での利用 - 非同期処理でWebコンテンツをダウンロードする方法4

TameJS は JavaScript で継続(Continuation)を実現するためのツールです。TameJS によって Scala の限定継続(id:fits:20111016 参照)のような事ができるので、コールバックを多用する Node.js の処理を比較的シンプルに実装できるようになります。そこで…

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

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

Play framework 2.0 での自作プラグイン - Scala版

Play framework 2.0 における基本的なプラグインの作成方法をご紹介します。ちなみに Play framework 2.0 は Java・Scala 用の Web アプリケーションフレームワークで、JPA・Akka・EhCache 等の機能をプラグインとして実装しています。 Play framework 2.0 …

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 スクリプ…

Ext JS MVC + RESTEasy - 一対多の関連を持つモデルデータを JSON で送受信する

Ext JS 4 の MVC 機能を使ったクライアントと RESTEasy を使った JAX-RS サーバー間を JSON データで連携するサンプルを作成してみました。 Ext JS 4.0.7 RESTEasy 2.3.1 GA サンプルのソースは http://github.com/fits/try_samples/tree/master/blog/201202…

Maven で CoffeeScript を使用する

Maven を使った Web アプリケーションで CoffeeScript を使うためのプラグイン coffee-maven-plugin をご紹介します。coffee-maven-plugin を利用するには pom.xml ファイルに以下のようなプラグイン設定を追加します。 coffee-maven-plugin の設定例 <plugin> <groupId>com.t</groupid></plugin>…

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" となっており、…

Hibernate Validator を使ったメソッド引数のチェック - AspectJ による組み込み

JSR 303 - Bean Validation のリファレンス実装である Hibernate Validator と AspectJ を使ってメソッドの引数をチェックする処理を実装してみました。 Hibernate Validator 4.2.0 Final サンプルソースは http://github.com/fits/try_samples/tree/master/…

セット割引をルールエンジンで処理 - 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…