「逆FizzBuzz」をErlangで

趣味と勉強を兼ねて「逆FizzBuzz」(d:id:matarillo:20120515)をErlangでやってみました。

以下のソースをifb.erlというファイルに保存し、Erlangのコンソールから「c(ifb).」「ifb:sample().」で実行できます。


1> c(ifb).
{ok,ifb}
2> ifb:sample().
[fizz] -> [3]
[buzz] -> [5]
[fizz,buzz] -> [9,10]
[buzz,fizz] -> [5,6]
[fizz,buzz,fizz] -> [3,4,5,6]
[fizz,fizz] -> [6,7,8,9]
[fizz,fizz,buzz] -> [6,7,8,9,10]
[fizz,fizzbuzz,fizz,buzz] -> [12,13,14,15,16,17,18,19,20]
[buzz,fizz,buzz] -> error
ok

「憂鬱な勇者」をErlangで

趣味と勉強を兼ねて「憂鬱な勇者」をErlangで作ってみました。

以下のソースをUTF-8でyy.erlというファイルに保存し、Erlangのコンソールから「c(yy).」「yy:start().」と入力すると実行できます。

Erlangらしく複数プロセスで構成しました。

  • system … ゲームシステム
  • hero … 勇者
  • monster … モンスター
  • rand … 乱数

すべてのモンスターはそれぞれ別のプロセスとして作成されます。乱数はプロセスごとに初期化されるため、一貫した乱数を作成するために別プロセスに独立させました。

以下のようにメッセージを送り合いながら動作します。

Erlang初心者なのでおかしな部分があると思います。アドバイスがありましたらよろしくお願いします。

Play 2からMicrosoft Accessの日本語テーブルに接続する方法

Play 2のScalaコードからMicrosoft Accessの日本語テーブルに接続する方法の説明です。
動作確認環境: Play 2.1.1+WindowsXPMDB(Access 2000形式)

こんなテーブルに接続

以下のようなテーブルに接続します。

接続はODBCデータソースにシステムDSNとして設定しました。


日本語テーブルに接続するコード

play newで新しいアプリケーションを作成し、controllers/Application.scalaとviews/index.scala.htmlを次のような内容にします。

実行すると次のように表示されます。コードを簡単にするため1行だけ表示させています。データベースへのアクセスにはAnormを使用しています。

以下でポイントを説明します。

ポイント1: 標準のデータベース設定は使わない

Playではconfig/application.confに接続情報を書くことでデータベースに自動的に接続してくれます。(JDBCコネクションプールの設定)

しかし文字コードがUTF-8に決め打ちになっているため、Microsoft Accessの日本語テーブルに接続するとエラーが発生します。

そこで、自前でConnectionを作成しています(Application.scala 16〜17行目)。

ポイント2: JDBCドライバの文字コードSJISにする

charSetとしてSJISをセットしたプロパティを用意し(Application.scala 13〜14行目)、それをDriverManager.getConnectionの第2引数に渡しています(17行目)。

以上でMicrosoft AccessのテーブルにSJISで接続することができます。