ページ

2013年2月23日土曜日

Java Decompiler が Eclipse Juno で動かない

Scala コンパイラが生成するクラスファイルが、Java としてどうなっているのかを確認したかったので、 Java の逆コンパイラを導入する。

Java の逆コンパイラといえば Jad が有名だが Java 1.5 以降には対応していないなど古くなってきていて、 最近はその名の通り Java Decompiler というのがよく使われているようなのでそちらを採用。 Eclipse 用に JD Eclipse という Plugin もある。

がどうやっても JD Eclipse が動かない。
結局断念して単独の GUI 版を使うことにした。

いつかの再挑戦に備えて今回の敗退の記録を残しておく。

2013年2月18日月曜日

[Scala] 無名関数中での return 文

無名関数の中で return 文を使うと、関数を抜けるのではなく、 無名関数を定義した関数自体を抜けてしまう。
  def main(args:Array[String]) {
    println("main start")
    test();
    println("main finish")
  }
  
  private def test() {
    val f = () => return;
    println("test start")
    f();
    println("test finish")   // 実行されない。
  }

------------------
main start
test start
main finish

test() が f() 呼び出しで return していることがわかる。
関数なのだから なんとなく 無名関数 だけを return しそうな気がするので 気を付ける必要がある。

2013年2月16日土曜日

Android 機のスクリーンショット

Android4.0(ICS)以降ならアプリを使わず、OS の標準機能でスクリーンショットが取れる。


端末の電源ボタンと音量調節のダウンボタンを同時に押す

2013年2月12日火曜日

どうぶつしょうぎカップの棋譜の傾向

前回の記事 で、 どうぶつしょうぎカップの棋譜を取り込んだので、その傾向を見てみよう。

全21局中、▲B2ひよこ:12局、▲C3きりん:7局、▲C3ライオン:2局 だった。
やはり、▲C3ライオンはいまいちか。

全勝優勝の中田プロは先手局では、
▲B2ひよこ:2局、▲C3きりん:2局。
中田プロに負けた以外は全勝の武田アマは
先手局 2局とも▲B2ひよこ。

2013年2月8日金曜日

どうぶつしょうぎカップの棋譜

第23回1DAYトーナメント・どうぶつしょうぎカップのページに 同大会での棋譜がある。

棋譜はこのページで対局ごとに Flash で再生できるのだが、 データ自体は、 http://www.liblog-sns.jp/doubutsu/XXX.txt という形式で入っている。
対局は4局同時対局で7局目まであるので、XXXの部分は、 101~104、・・・、161~164まで計28局分。

どうぶつしょうぎカップは第33回1DAYトーナメントでも開催されているが、こちらの棋譜は見当たらなかった。

2013年2月7日木曜日

どうぶつしょうぎ ▲C3ライオン

動物将棋その2

初手 ▲C3ライオン の後を調べてみよう。
△A2ライオン は ▲C2ライオン 以下先手の勝ちなので、 後手の応手は △B3ひよこ か △A2きりん。

2013年2月5日火曜日

どうぶつしょうぎ

以前話題になっていた「どうぶつしょうぎ」。
初手は何がいいのだろうか?

盤面は左からA、B、C、
上から1、2、3、4。
ありうる手は、
  • B2ひよこ
  • A3ライオン
  • C3ライオン
  • C3きりん
の4手。

2013年2月4日月曜日

[Scala] Lazy による遅延評価

変数宣言時に Lazy キーワードをつけるとその値が必要になるまで値の評価を遅延できる。
  var x = 1;
  lazy val z = x*2;
  x = 2;
  println(z);

--------------------
4
変数宣言時には x の値は 1 だが、println(z) 呼び出しで z の値が必要になった時点で評価されるので、 出力は 4 になる。

2013年2月2日土曜日

[Scala] 名前渡し

Scala で関数を定義する際、仮引数名と型名の間に 「 => 」を記載すると名前渡しとなり、値が必要になったときに式の値が評価される。
  var x = 1;
  
  def main(args: Array[String]) {
    x = 1;  
    notdelayed(x*2);
    x = 1;  
    delayed(x*2);
  }

  def notdelayed(value : Int) {
    x = 100;
    println("notdelayed: " + value)
  }  

  def delayed(value : => Int) {
    x = 100;
    println("delayed: " + value)
    x = 200;
    println("delayed: " + value)
  }

--------------------
notdelayed: 2
delayed: 200
delayed: 400