2012-01-01から1年間の記事一覧
Scalaz の Codensity を試してみました。Codensity モナドは継続モナドと基本的に同じですが、処理の型が以下のように異なっています。 継続モナドの場合 Codensityモナドの場合 (A => R) => R (A => F[B]) => F[B] つまり、Codensity は何らかのコンテナ(L…
以前(id:fits:20121104)、Haskell で実装した継続モナドのサンプルを Scalaz で実装してみました。なお、今のところ Scalaz に継続モナドは用意されていないようで、id:fits:20121111 のような方法で自作する必要がありました。ただし、実際のところ Scala…
今回は、Haskell と Scalaz でモナドを自作してみました。良い題材を思いつかなかったので、とりあえず以下のような単純なモナド(Counter モナドとする)を自作する事にしました。 カウンターを持たせて、バインドで処理を繋ぐ度にカウンター同士を加算する…
継続渡し形式 (CPS) をモナドとして扱う継続モナドを Haskell で試してみました。 継続モナドは以下のような処理をモナド化します。 何らかの処理結果を引数として継続と呼ばれる関数を呼び出す(継続は外部から与える) 処理結果を引数にコールバック関数…
Java でコレクションのマッピング(map)・フィルタリング(filter)・畳み込み(foldLeft)のような処理を使いたいケースがありますが、今のところ標準で用意されていません。そこで、以下のようなライブラリを使って試してみました。 Functional Java 3.1 …
今回は関数をモナドとして扱う 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"…
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…
今回は、ログを追記する 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…
前回 id:fits:20120828 に引き続き、今回も書籍「 すごいHaskellたのしく学ぼう! 」 のサンプルを Scalaz で実装してみる事にします。今回は、リストモナドを使ったナイト移動 *1 の処理です。 Scalaz 7.0.0-M3 sbt 0.12.0 サンプルソースは http://github.c…
書籍「 すごい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.1.1 では*1、Date を JSON 化する際に Ext.JSON.encodeDate() メソッドを使用していますが、 このメソッドはタイムゾーン指定子の無い日付文字列を生成してしまうので、サーバーアプリとの連携などで不都合が生じる可能性があります。 Ext.JSON.enc…
Markdown 形式の文字列を HTML 変換する処理を複数のプログラム言語で試してみました。処理としては、標準入力から UTF-8 の Markdown 形式の文字列を取得し HTML 変換した結果を標準出力へ UTF-8 で出力しています。ちなみに、Markdown 文字列は LOGGiX プ…
Play framework 2.0 で作成した Web アプリを Eclipse 上でデバッグする方法をご紹介します。 準備 まず、play eclipsify を実行し、Eclipse 用のプロジェクトファイルを生成します。 Eclipse 用プロジェクトファイル作成 > play eclipsify次に、このプロジ…
IcedCoffeeScript は TameJS の await/defer をサポートした CoffeeScript の拡張版です。 IcedCoffeeScript 1.3.3a 前回(id:fits:20120415)、TameJS + CoffeeScript で実装した Web コンテンツのダウンロード処理を IcedCoffeeScript で実装すると以下の…
Vert.x のモジュールを Groovy で作成する方法をご紹介します。 Vert.x 1.1.0 サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20120708/ モジュールの配置場所 モジュールは以下のディレクトリに配置できます。 Vert.x の mods ディ…
Node.js でプログラミングする際の課題は、非同期処理のコールバックが多段になって分かり難くなってしまう点だと思います。(下記は CoffeeScript の例) func1 引数・・・, (err, 処理結果1) -> if err? エラー処理 else ・・・ func2 引数・・・, (err, …
Node.js 用 Web フレームワーク Express のテンプレートエンジンを自作する方法をご紹介します。 Express 3.0.0beta2 といっても自作テンプレートエンジン側で以下のような処理を用意するだけなので、非常に簡単です。 exports.__express = function(path, o…
Vert.x を Windows 上でソースビルドして実行環境を構築する手順をご紹介します。 ちなみに、わざわざソースからビルドしなくても https://github.com/purplefox/vert.x/downloads からパッケージ(例 vert.x-1.0.final.tar.gz)をダウンロードして解凍すれ…
TameJS は JavaScript で継続(Continuation)を実現するためのツールです。TameJS によって Scala の限定継続(id:fits:20111016 参照)のような事ができるので、コールバックを多用する Node.js の処理を比較的シンプルに実装できるようになります。そこで…
Apache Commons JCS のキャッシュを保持する期間設定には以下のようなものがあります。 MaxLifeSeconds MaxMemoryIdleTimeSeconds MaxLifeSeconds で一定時間が経つと無効になるキャッシュを設定でき、MaxMemoryIdleTimeSeconds で一定時間参照されないと削…
Play framework 2.0 における基本的なプラグインの作成方法をご紹介します。ちなみに Play framework 2.0 は Java・Scala 用の Web アプリケーションフレームワークで、JPA・Akka・EhCache 等の機能をプラグインとして実装しています。 Play framework 2.0 …
Java 用 Cassandra クライアント Hector の Object Mapper を使って JPA の Entity オブジェクトを Cassandra に保存する方法をご紹介します。 Cassandra 1.0.8 ソースは http://github.com/fits/try_samples/tree/master/blog/20120311/ 事前準備 Cassandra…
sbt 0.11 プラグインの作成方法を簡単にご紹介します。 題材として、単純な Groovy スクリプトをコンパイルするプラグインを作成してみます。 sbt 0.11.2 ソースは http://github.com/fits/try_samples/tree/master/blog/20120304/ はじめに Groovy スクリプ…
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 を使った Web アプリケーションで CoffeeScript を使うためのプラグイン coffee-maven-plugin をご紹介します。coffee-maven-plugin を利用するには pom.xml ファイルに以下のようなプラグイン設定を追加します。 coffee-maven-plugin の設定例 <plugin> <groupId>com.t</groupid></plugin>…
H2 Database Engine ではユーザー定義関数(Java で実装)をサポートしており、以下のような 2通りの登録方法が用意されています。 Java クラスメソッドをユーザー定義関数として登録 (Referencing a Compiled Method) ソースコードを指定してユーザー定義…
Drools の DRL ではルール毎の有効期間を以下のルール属性を使って指定できるようになっています。 date-effective 開始日時 date-expires 終了日時 どちらも日付の指定に文字列が使えますが、デフォルトの日付フォーマットが "dd-MMM-yyyy" となっており、…
JSR 303 - Bean Validation のリファレンス実装である Hibernate Validator と AspectJ を使ってメソッドの引数をチェックする処理を実装してみました。 Hibernate Validator 4.2.0 Final サンプルソースは http://github.com/fits/try_samples/tree/master/…
カテゴリ A の商品 1点とカテゴリ B の商品 1点の同時購入でセット価格が適用されるといったようなセット割引(セット商品割引)処理をルールエンジン Drools で実装してみました。使用した環境は id:fits:20120104、id:fits:20120105 と同じです。 Drools 5…
前回 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…