GridView
は列数を numColumns
で指定すると、
GridView
の横幅に応じて セルの幅を自動的に決めてくれる。しかし、縦幅はセルに指定したアイテムの縦幅が採用されるので、 行数も固定して
GridView
を綺麗に固定するには
GridView
のサイズに応じて、アイテムの縦幅を調整する必要がある。
GridView
は列数を numColumns
で指定すると、
GridView
の横幅に応じて セルの幅を自動的に決めてくれる。GridView
を綺麗に固定するには
GridView
のサイズに応じて、アイテムの縦幅を調整する必要がある。
図1は、相腰掛ゾウ基本定跡(相ゾウ冠基本定跡)で 22手目に後手が △A3ゾウ とした局面。 本筋では先手は ▲A4ライオン として、以下△C1ライオン、▲C4キリン、△B2ゾウ と進む。 今回は、23手目に先手が ▲A4ライオン に替えて ▲C4 ライオンとしてきた場合の変化を見てみる。 先手の狙いは ▲A4ヒヨコ打。後手は A3 のゾウの捌き方が焦点になる。 棋譜はこちら → 棋譜 |
|
package kuro.misc.image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class TransparentColor { private static String FILE_IN = "C:/work/temp/test.png"; private static String FILE_OUT = "C:/work/temp/test-out.png"; public static void main(String[] args) throws IOException { BufferedImage image = ImageIO.read(new File(FILE_IN)); ImageIO.write(image, "PNG", new File(FILE_OUT)); } }
BufferedImage image = ImageIO.read(new File(FILE_IN)); System.out.println( "Image transparency = " + image.getTransparency()); ----------- Image transparency = 1
package java.awt; public abstract interface Transparency { public static final int OPAQUE = 1; public static final int BITMASK = 2; public static final int TRANSLUCENT = 3; public abstract int getTransparency(); }
BufferedImage
にしておく必要がある。
Image
の拡大java.awt.Image#getScaledInstance
を使う方法。
private static Image magnifyImage(Image img, int scale) { int width = img.getWidth(); int height = img.getHeight(); Image scaledImage = img.getScaledInstance( width * scale, height*scale, Image.SCALE_DEFAULT); return scaledImage; }
Image
から BufferedImage
に変換する方法Image#getScaledInstance
を使うと、拡大したイメージは、
java.awt.Image
になってしまうので、
ImageIO.write
を使うためには、
java.awt.image.BufferedImage
に変換する必要がある。private static BufferedImage convertImageToBufferedImage(Image img) { BufferedImage bimg = new BufferedImage( img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics g = bimg.getGraphics(); g.drawImage(img, 0, 0, null); g.dispose(); return bimg; }
ぴよ替わり後の▲C3きりん型 (相キリンの翼)の変化を見てみる。 図1は12手目に後手が △C1ヒヨコ打 とした局面。 本筋では ▲C4ライオン と引いたが、実戦では ▲B4ライオンと引くことが多い。 ▲C4ライオン の場合は、△B3キリン と奥のゾウを取り込んだが、 ▲B4ライオン の場合は △B3キリン では負けになってしまう。 ここは、△C2ヒヨコ とする必要がある。 この場合の棋譜はこちら(→棋譜)。 |
|
前回、5手目に先手が ▲A4ゾウ と引く場合の変化を調べてみた。 この後、△A3キリン、▲B3ゾウ という手順だったが、 実戦では △A3キリン に対して、ほとんどの場合先手は ▲B3ヒヨコ打 と応じてくるので、 この変化も調べておく。 図1までの手順は、 ▲B2ヒヨコ、△同ゾウ、▲B3ゾウ、△A2キリン、 ▲A4ゾウ、△A3キリン、▲B3ヒヨコ打 棋譜はこちらを参照(→ 棋譜 ) |
|
winLoseTable.cc
(と winLoseTable.h
) に手を入れれば何とかなりそう。
Version | 生成方法 |
1 | MAC-Address と 生成時刻によるもの |
2 | DCE Security version |
3 | 名前(byte列)のMD5 ハッシュによるもの |
4 | ランダム |
5 | 名前(byte列)の SHA-1 ハッシュによるもの |
xxxxxxxx-xxxx-Vxxx-xxxx-xxxxxxxxxxxx
https://spreadsheets.google.com/macros/
[warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: UNRESOLVED DEPENDENCIES :: [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: play#sbt-plugin;2.0.3: not found [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] [warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes. [warn] play:sbt-plugin:2.0.3 (sbtVersion=0.12, scalaVersion=2.9.2) [warn] sbt.ResolveException: unresolved dependency: play#sbt-plugin;2.0.3: not found
package controllers import play.api._ import play.api.mvc._ import play.api.mvc.RequestHeader object Application extends Controller { def index = Action.apply { request => val currentVal : String = request.session.get("hoge") match { case Some(x) => x; case None => ""; } Ok("hoge = " + currentVal).withSession( request.session + ("hoge" -> "hogege")); } }
request.session.get
は Option を返すので、
パターンマッチで Some
か None
かを判定して、Some
から値を取り出す必要がある。... val currentVal : String = request.session.get("hoge").getOrElse(""); ...とする。こっちの方が簡単でいい。
package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { Ok(views.html.index("Your new application is ready.")) } }
play.api.mvc.Action[play.api.mvc.AnyContent]になっている。
図1は序盤によく出てくる先手が中央にキリンを持ってきた中キリン局面。 初手からの典型的な手順は ▲C3キリン、△A2キリン、 ▲B2ヒヨコ、 △同ゾウ、 ▲B3キリン 他にもいろいろな手順でこの局面に行き着く。 後手勝ち局面で先手後手最善を尽くすとあと68手で後手が勝つ。 この手順(中キリン定跡)を見てみよう。 棋譜は こちら 。 |
|
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 13.04 Release: 13.04 Codename: raring
sudo mkdir /media/shared
sudo mount -t vboxsf Shared /media/sharedファイルタイプは vboxfs ではなく vboxsf。
$ ls /media/shared テスト.txt
前回、田中先生の完全解析結果を使うツールの準備をしたので、
最善手順以外も調べてみよう。 ▲B2ヒヨコ、△同ゾウ、▲B3ゾウ、△A2キリン。 先手一手損ぴよ替わり型から、後手がキリンを突きだした形。完全解析結果では、ここで先手は「▲A2同ゾウ」となっている。 しかし、実際には▲C3キリン と先手もキリンを突き出すことが多い。 この後の最善手順を見てみよう。 この局面からの完全解析ツールによる最善手順はこちら。 |
|
予期しないエラーが発生しました。 このパッケージに問題がある可能性があります。 エラーコード:2732。
aTurtle =Turtle ! create (blue) linecolor 1 linewidth。 aTurtle ! penup 200 200 moveto pendown. [ | i | aTurtle ! 5 forward (90 * sin(i)) rightturn. ] ! 3000 repeat.
前回の記事 に引き続き、無名関数中の return 文の仕組みについて調べてみる。
今回は 匿名関数を引数に引き渡して深い階層からリターンしてくる場合を見てみよう。
今回の Scala コードはこれ。
def main(args:Array[String]) { println("main start") test(); println("main finish") } private def test() { val f = () => return; println("test start") test2(f); println("test finish") // 実行されない。 } def test2(f: () => Unit) { println("test2 start") f(); println("test2 finish") // 実行されない。 } ------------------ main start test start test2 start main finish
test2() 内の 匿名関数実行で test2()、test() を一気に脱出している。
この前の記事で、Scala の無名関数中での return 文の動きについてみてみた。
今回はその仕組みが Java 的にどうなっているのか見てみる。 JD-Plugin の導入には前回失敗したので、デコンパイルには Java Decompiler の GUI 版を使った。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
Scala コンパイラが生成するクラスファイルが、Java としてどうなっているのかを確認したかったので、
Java の逆コンパイラを導入する。
Java の逆コンパイラといえば Jad が有名だが Java 1.5 以降には対応していないなど古くなってきていて、
最近はその名の通り Java Decompiler というのがよく使われているようなのでそちらを採用。
Eclipse 用に JD Eclipse という Plugin もある。
がどうやっても JD Eclipse が動かない。
結局断念して単独の GUI 版を使うことにした。
いつかの再挑戦に備えて今回の敗退の記録を残しておく。
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
前回の記事 で、 どうぶつしょうぎカップの棋譜を取り込んだので、その傾向を見てみよう。
全21局中、▲B2ひよこ:12局、▲C3きりん:7局、▲C3ライオン:2局 だった。 |
棋譜はこのページで対局ごとに Flash で再生できるのだが、
データ自体は、
http://www.liblog-sns.jp/doubutsu/XXX.txt
という形式で入っている。
対局は4局同時対局で7局目まであるので、XXXの部分は、
101~104、・・・、161~164まで計28局分。
どうぶつしょうぎカップは第33回1DAYトーナメントでも開催されているが、こちらの棋譜は見当たらなかった。
var x = 1; lazy val z = x*2; x = 2; println(z); -------------------- 4変数宣言時には x の値は 1 だが、println(z) 呼び出しで z の値が必要になった時点で評価されるので、 出力は 4 になる。
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
Android 機で普段音楽等を聞くのに使っている Bluetooth ヘッドフォンだがマイク機能もついている。 通話などではヘッドセットとして使用できるのだが、録音アプリやWeb会議などのアプリではマイク機能が使えないので少し調べてみた。
val a : Function2[String, String, Unit] = (x,y) => { val xx = x + y; println(xx); } a("abc", "def") -------------------- abcdef