このページの記事一覧
● 2012年9月30日日曜日 - [Scala] Eclipse に Scala の Maven プロジェクトを インポート。の続き
● 2012年9月28日金曜日 - [Scala] Eclipse に Scala の Maven プロジェクトを インポート
● 2012年9月26日水曜日 - [Scala] REPLを使う
● 2012年9月24日月曜日 - Sakura エディタ で HTML エンコードマクロを作る。
● 2012年9月23日日曜日 - [Scala] match 文の仕組み
● 2012年9月21日金曜日 - [Scala] 正規表現によるマッチ
● 2012年9月20日木曜日 - [Scala] 一般クラスのマッチ
● 2012年9月18日火曜日 - [Scala] Eclipse の Java プロジェクトで Scala を使えるようにする。
● 2012年9月17日月曜日 - [Scala] Maven2 で Scala を使う。
● 2012年9月16日日曜日 - m2e で Eclipse + Maven 環境を作る時に J2SE を指定する
● 2012年9月15日土曜日 - m2e で Eclipse + Maven 環境を作る。の続き
● 2012年9月14日金曜日 - m2e で Eclipse + Maven 環境を作る。
● 2012年9月11日火曜日 - [Scala] シーケンスのマッチ
● 2012年9月9日日曜日 - [Scala] 後のオブジェクトのメソッドが実行される演算子
● 2012年9月7日金曜日 - [Scala] match (Tuple編)
● 2012年9月6日木曜日 - [Scala] match (基本編)
● 2012年9月5日水曜日 - [AppEngine] ログ出力
● 2012年9月4日火曜日 - [AppEngine] JDO の Cross-Group-Transaction
● 2012年9月3日月曜日 - [AppEngine] JDO のトランザクション
● 2012年9月2日日曜日 - [AppEngine] データストアの Quota と Index
● 2012年9月1日土曜日 - [AppEngine] Eventual ということ。

2012年9月30日日曜日

[Scala] Eclipse に Scala の Maven プロジェクトを インポート。の続き

前回、m2eclipse-scalaを使って、Scala プロジェクトの pom.xml を Eclipse にインポートした。
インポートの結果作成された .project ファイルと、.classpath ファイルの中身を確認しておく。

2012年9月28日金曜日

[Scala] Eclipse に Scala の Maven プロジェクトを インポート

Eclipse に Scala の Maven プロジェクトを m2e を使ってインポートする。

m2eclipse-scala を使う。
これをインストールしておかないと、pom.xml を import するときに、 maven-scala-plugin:2.15.2:compile と testCompile の resolve ができずにエラーになってしまう。


2012年9月26日水曜日

[Scala] REPLを使う

これまで Scala は Eclipse IDE で使ってきた。
Eclipse IDE で使う分には Scala SDK のインストールは必要ないのでインストールしていなかったのだが、 ちょっとしたことを確認するのに REPL があると便利なので入れてみる。

Scala の本家 から最新の stable release である Scala 2.9.2 をダウンロード。
Windows 版は zip 版と msi 版があるが msi 版は何がどう設置されるのかわからないので zip 版をダウンロード。 展開して bin ディレクトリにパスを通す。

これだけで準備は完了。REPL を使ってみる。

2012年9月24日月曜日

Sakura エディタ で HTML エンコードマクロを作る。

Blogger で XML ソースを書く際には 特殊文字をエンコードする必要があるのだが、面倒なのでエディタで一括で処理できるようにしよう。普段はサクラエディタ (Sakura Editor) を使っているので、サクラエディタのマクロとして作ることにする。

2012年9月23日日曜日

[Scala] match 文の仕組み

このブログを見て match 文 の仕組みが分かった気がするのでメモしておく。
List のマッチでは case List(x,y) みたいな形式だったので気が付かなかったのだが、 case 句には オブジェクトも書くことができる。

2012年9月21日金曜日

[Scala] 正規表現によるマッチ

正規表現を使った match ... case 文を使ってみる。

val p : Regex = ".*no=([0-9]+),name=(.*)".r;
val values = List(
  "no=10,name=ten",
  "no=11,name=eleven",
  "no=20,name=twelve" );

for (value <- values ) {
  value match {
    case p("10", v) => println("name for 10: " + v)
    case p("11", v) => println("name for 11: " + v)
    case p(n, v) => println("name, value= " + (n,v))
  } 
}

name for 10: ten name for 11: eleven name, value= (20,twelve)

2012年9月20日木曜日

[Scala] 一般クラスのマッチ

List や Tuple ではない一般のクラスの場合、unapply、unapplySeq いわゆる抽出子(extractor)を定義しておくことで match ... case 文で使えるようになる。

...
  val a = new MatchSampleClass;
  a match {
    case MatchSampleClass(x, y) => 
      println("x: " + x + " y: " + y);
    case _ => println("OTHER: " + a);
  }
....

class MatchSampleClass
object MatchSampleClass {
  def unapply(obj : MatchSampleClass) : Option[(String, String)] = {
    return Option(("ONE", "TWO"));
  }
}

x: ONE y: TWO

2012年9月18日火曜日

[Scala] Eclipse の Java プロジェクトで Scala を使えるようにする。

目標: 既存の Java プロジェクトで Scala も使えるようにすること。

基本的には、.project ファイルと .classpath ファイルに手を入れればできるはず。
やってみよう。

前提条件は、Eclipse に Scala IDE が導入されていること。
環境は、Eclipse Juno + Scala IDE nightly build 版( Juno 対応版)。

.project や .classpath ファイルを直接編集するので、Eclipse は終了しておくか編集対象プロジェクトを Close しておく。

2012年9月17日月曜日

[Scala] Maven2 で Scala を使う。

Mavan2 を使って Scala をビルドできるようにしておこう。
Maven-scala-Plugin を使う。
主な情報源は以下の2つ。
基本的に必要な情報はだいたいこの2つにある。

Maven-scala-Plugin の 最新版は 2.14.2-SNAPSHOT、最終更新は 2010-08-04 15:42 と記載されているが、 実際にリポジトリ上には現時点で 2.15.2(Sun Feb 06 08:52:23 CST 2011) がアップロードされている。

2012年9月16日日曜日

m2e で Eclipse + Maven 環境を作る時に J2SE を指定する

これまで、 の両記事で m2e での import の動作についてみてきた。
m2e で pom.xml をインポートする際に、

Build path specifies execution environment J2SE-1.5. 
There are no JREs installed in the workspace that are strictly compatible with this environment.

という警告が出ていたのだが、これは pom.xml に maven-compiler-plugin の configuration を書くことで抑止できる。
やってみる。

2012年9月15日土曜日

m2e で Eclipse + Maven 環境を作る。の続き

前回、m2e で Eclipse + Maven 環境を作成した。
Eclipse に インポートした際に作成される .project や .classpath の中身を確認しておこう。

2012年9月14日金曜日

m2e で Eclipse + Maven 環境を作る。

以前は、Eclipse + maven といえば、 m2eclipse プラグインMだったが、 最近は Eclipse プロジェクトに統合されて m2e となっている。 m2e で maven プロジェクトを Eclipse に取り込んでみる。

2012年9月11日火曜日

[Scala] シーケンスのマッチ

List などシーケンス(Seq)のマッチを見てみよう。
Tuple と同様に型や出現位置によってマッチングを行い、変数への値の設定が行われる。
Tuple と違って List は可変長なので各 case 句の要素数の違いによるマッチもできる。

2012年9月9日日曜日

[Scala] 後のオブジェクトのメソッドが実行される演算子

Scala では 「:(コロン)で終わる演算子」 を中置記法で使うと 「後のオブジェクトのメソッド」 が実行される。代表的な例が、List#:: 。

val aList = List("A");
println (aList.::("x")); 
println ("x" :: aList);

List(x, A) List(x, A)

「 aList.::("x") 」では普通のメソッドと同様に aList の :: メソッドが実行される。
「"x" :: aList 」と中置記法で書くと、通常は演算子の前のオブジェクトがレシーバーになるのと違い、 演算子の後にある aList がレシーバーになる。

2012年9月7日金曜日

[Scala] match (Tuple編)

Tuple に対する match...case のパターンマッチを見てみる。これがかなりに強力。
引数の型や数によってマッチする case 節を判定し、マッチした case 節の変数に値を割り当ててくれる。

val list1 : List[Any] = List(
    ("one", 1), (2, 2), ("three", "tri", 3) );

for (elem <- list1) {
  elem match {
    case (v1: String, v2:Int) => 
        println("[String, Int]: " + v1 + ", " + v2);
    case (v1: Int, v2:Int) => 
        println("[Int, Int]: " + v1 + ", " + v2);
    case (v1, v2, v3) => 
        println("[Triple]: " + v1 + ", " + v2 + ", " + v3);
    case _ => println("OTHER");
  }
}

[String, Int]: one, 1 [Int, Int]: 2, 2 [Triple]: three, tri, 3

2012年9月6日木曜日

[Scala] match (基本編)

多彩な機能を持つ Scala のMatch 文を見ていくことにする。

まずは基本形。

val a : Int = 2;
a match {
  case 1 => println("ONE");
  case 2 => println("TWO");
  case _ => println("OTHER: " + a);
}

いずれの条件にもマッチしなかった場合、Java でいうところの default は 「case _ 」で書く。

2012年9月5日水曜日

[AppEngine] ログ出力

Google App Engine ではファイル出力ができないので、 何か記録を残そうとしたらデータベースに書くかログに出力することになる。
App Engine ではデフォルトでは java.util.logging を使用する設定になっている。

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException, ServletException  {

        Logger logger = Logger.getLogger("SampleLogger");
        logger.info("INFOログです。");
        logger.warning("WARNINGログです。");
        resp.setContentType("text/plain; charset=utf-8");
        resp.getWriter().println("ログ出力テスト");
    }

管理ツールのLogsで見るとこんな感じに出力されている。

管理ツールのLogs画面で Timezone を選択できる。ログの時刻はここで選択した Timezone を使って表示される。

2012年9月4日火曜日

[AppEngine] JDO の Cross-Group-Transaction

AppEngine のデータストアでは、デフォルトではトランザクションの中で複数のエンティティグループにまたがる変更を行うことはできない。
複数のエンティティグループにまたがるトランザクションを実行するには、クロス グループ トランザクションが必要になる。今回はこのクロス グループ トランザクションを試してみる。

2012年9月3日月曜日

[AppEngine] JDO のトランザクション

JDOでのトランザクションの基本。

PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = null;
try {
    tx = pm.currentTransaction();
    tx.begin();
    MyData data = new MyData();
    data.setName("one");
    pm.makePersistent(data);
    tx.commit();
} finally {
    if ( tx != null && tx.isActive() ) {
        tx.rollback();
    }
    if ( pm !=null && ! pm.isClosed()) {
        pm.close();
    };
}

2012年9月2日日曜日

[AppEngine] データストアの Quota と Index

前回、調子に乗ってデータストアのテストをしていたらあっという間に、無料分の Quota の制限に達してしまった。 AppEngine 管理コンソールで詳しく見てみる。

「Quota Details」 画面で見てみると、引っかかったのは「Datastore Write Operations」 の 「0.05 Million Ops / 24 hour」。

2012年9月1日土曜日

[AppEngine] Eventual ということ。

前回の記事で、データの追加、削除、更新、取得をやってみた。
一応動くのだが、たまに表示される結果にデータの変更内容が反映されていないことがある。

Google App Engine のデータストアの形式には以前は、「Master/Slave」形式と「High Replication」形式があったのだが、「Master/Slave」形式は廃止されて、現在はアプリケーションを作成する際には「High Replication」しか選択できないようになっている。
「High Replication」ではデータの取得が eventual である、すなわり取得したデータが最新ではない可能性があるとのこと。どうやらそのせいのようだ。