Category Archives: 日記

「石語り」というJavaアプレットが印刷できない件

石語り(StoneTalk)(配布ページ)という囲碁の棋譜を表示するJavaアプレットがあるのだけど、これを印刷しようとしてもできないと相談を受けた。例えばこのページ

手元の環境(IE+1.6、Safari+1.5)で試したところ、確かにアプレットの部分がブランクになってしまい、肝心の盤面が印刷できない。
調べてみたところ、画面表示の方法に問題がある模様。
↓こんな感じに、画面描画のためのGraphicsを、Applet#paint(Graphics)の引数ではなく、初期化時にApplet#getGraphics()で取得してそれをずっと使っている。

public void paint(Graphics g) {
...
newg.drawImage(buffer, 0, 0, null);
}
public void init() {
...
buffer = createImage(mywidth, myheight);
myg = buffer.getGraphics();
newg = getGraphics();
...
}

paintメソッドの最後でbufferを描画しているけど、newgじゃなくてgで描くようにしたら、ちゃんと印刷のイメージに盤面が出るようになった。
たぶん、印刷する前にはブラウザが印刷するイメージのバッファを作成するところ、アプレット初期化時に取得した描画コンテクストだと、そのバッファへ描画するように切り替えができないのだろう。
paintメソッドで現時刻を表示するアプレットを作って試してみたところ、アプレット初期化時にgetGraphicsで取得したGraphicsで描画するプログラムでは、印刷や印刷プレビューをすると、時刻の表示が上書きされることが確認できた。
ということで、Graphicsはpaintメソッドで渡されるものを使うのがよいということ。タイミングによってはNullPointerExceptionになることもあるらしい。

Parallelsで最大化したウィンドウがタスクバーを隠す件

恐らくPrallels 4.0にしてからと思うけど、ゲストOSのWindows Vistaでウィンドウを最大化させると、タスクバーを覆い隠してしまっていた。

消えてしまったのではなく、ウィンドウの背後にいってしまう模様。Parallelsは、結構頻繁に画面解像度を勝手に変えたりするので、そのあたり調整できてないのかなーと思っていた。
ところが、これはParallelsではなく、Vistaの問題であったようだ。
Maximizing windows covers windows task bar?? – Parallels Desktop and Parallels Server Support<http://forum.parallels.com/showthread.php?t=32117>

アンサング・ヒーロー


頂上に達した、一握りのノーベル賞受賞者の登攀経路は、すでにたくさんの人々によって拓かれていた。その人々はノーベル賞受賞者と同じくらいの、あるいはそれ以上の切実さをもって、自然の謎を知りたいと願ったのである。
(福岡伸一;日経 あすへの話題;2008年11月27日)
今年のはじめごろ各書評欄で一世を風靡した?「生物と無生物のあいだ」(講談社)の福岡伸一氏が、日経夕刊のコラムを週一くらいで書いている。
「生物と〜」を読んだときも思ったけど、この人文章がうまい。科学技術の進歩を登山に例えて「アンサング・ヒーロー」の説明をしているのだけど、この例えはどこか別のところで使わせてもらおうと思った。

【どう書く?org】数独の問題数を数え上げる

よく見る数独は3×3×3だけど、2×2×2のサイズの大きさで、解ける問題ははいくつあるか数えるという設問。
こういうパズルの解法ロジックに関わるようなものを作るのは初めてかも。頭の中でアナログに解法を考えて、それを抽象化しながらコードにしていくというプロセスが思いのほかおもしろい。
とりあえず何時間かかけて、解く方のプログラムはできたぽい。ぽいというのは問題を公開しているサイトの問題を入れてみたら解けて、自分で適当な数字を入れて解かせてみたら、おかしな結果にならず解けない問題は解けないということが経験的に何となく確からしいかなという話。
解法のロジックができたら後は早いかと思っていたけど、甘かった。解ける問題を数え上げる方法は、適当に総当たりでしらみつぶしにしていこうかと思ったけど、場合の数が多すぎ。
予めある数字がnこある場合、16Cn×4n通り。天文学的数字の予感。n=3の場合で既に215,040通り。これは無理だ。
何とかして問題を絞るか、あるいはやり方を変えて、完成図の方から空白を入れていく方法にするとかかなあ。むずい。なかなか投稿者が出ないだけある。

MacvsWindows.com

いつ頃だったか、itmedia.co.jpかどこかで「もうみんなマックつかえばいいと思う」なんてな記事があった。要はブートキャンプでWindows使えるようになったので、Macのほうが選択肢が広いということだ。
おいらの場合、Mac OSにも慣れておこうくらいのつもりでMacにして、かれこれ1年とちょっと。最初のうちはMac用のドライバってどうやってインストールすんの?デバイスマネージャみたいなのはないの?という感じだったが、何となく慣れて、本日に至る。
Windowsだと使っていくに従って、すこしずつWindowsというOSの機能について知識が増えていったように思うのだけど、Mac OSにはそれがないように思う。何となく使うことができて、困らない。わからないこともきっとあるだろうけど、まあ何とかなりそう、みたいな。
かつてWindowsのコントロールパネルはしばしば使っていたと思うんだけど、Mac OSのそれに相当する「システム環境設定」というものは、もう何週間も実行すらしてない。という気がする。
ということをMacvsWindows.comを読みながら思った。英語だけどOSの挙動の違いをいい感じにまとめていておもしろい。
ちなみにMac OSの最悪な点は、ウィンドウのエンティティがDockのアイコンと一致してない点だと思う。他にもリサイズハンドルが右下にしかないとかあるけど、一番はそれ。ExposéとかDockのなかったバージョン9までは一体どうやってウィンドウを切り替えていたのか謎。

【どう書く?org】島の数をカウントする

どう書く?orgの問題に初挑戦。お題は「島の数をカウントする」。1時間少しくらいかかった。最初問題をちゃんと読まずに島の総数を数えていた。

おいらと同じJavaで書いた人が現時点でひとりいて、既にカウントした島の判断方法とか、データの持ち方とかが違うけど、再帰的アルゴリズム使っていて、まあ基本的な流れは同じぽい。
実は1年くらい前、マインスイーパを作ってて、そのときに同じようなコードを書いた。ゲームの中で任意の区画をクリックして、そこに爆弾がなかったら、周辺を調べて同じように爆弾のない区画を全部表示しないといけない。
で、再帰アルゴリズムでひとつひとつ周辺を調べていく方法を用いたんだけど、これが数百×数百みたいな広大なフィールドでやると、スタックが足りなくなってランタイムエラーになったんだよね。
99×99の区画に99個の地雷を置いたフィールド。
スタックオーバーフローして地雷原が途中までしか開いてないの図。
ということで、再帰じゃない方法で書かれてないかなーと見てみたけど、知らん言語が多くてよくわからん。でも大体みんな再帰してるぽいね。なんとなくだけど。

自動車保険契約を更新

自動車保険の更新があった。

なんと昨年と同等プランで27,390円も安くなっている。どういう仕掛けだ? ノンフリート等級が8→9になっただけとは思えないのだけど。携帯電話みたいに継続利用で割引になってるのか?
というわけで3年間車にのっていて初めて保険契約を継続した。対人対物無制限、車両保険限定A付きで5万ちょっと。
確か1年目の時は某ネット系のとこで、結構な手厚い補償にして12万くらい。あの頃は、話を聞いた他の人の保険料に比べて、なぜ自分のは高いのか不思議だったけど、まあ色々あって徐々に安くなってくるものなのだと思った。

【習作】FloatingBalls

思い立つところがあって、久々に日曜プログラミング。最初は、Windowsのスクリーンセーバーのラインアートを作ってたのだけど、いつの間にか線じゃなくて円になった。実質的に変わらないけど。
作り始める前にあんまり考えていなかった問題として、線なり円なり、塗りつぶす色をどうやって決めているのかということ。少しずつ色が変わっていくのをどうやって得るか。
Windowsのラインアートでどうやっているのかはわからないけど、3次元の立方体の箱の中で、直線運動をしていて壁に当たったら跳ね返るような点の座標(x,y,z)をそのままRGBにしたらそれっぽいのになるのでないかと思い至った。
そんでよく考えたら円の座標も2次元というだけで同じことなので、n次元のハコの中で動き続ける点の座標を供給するためのFloatingPointなるクラス作ってみた。そういう仕組みってきっと既にあるのだろうけど、何か呼び方があるのだろうか。
座標用(2次元)と色用(3次元)の2つのFloatingPointを持つFloatingBallなるクラスを作って、とりあえず100個画面に出してみた。(上の図)
問題点:まれにRGBのビット深度が255越えてColorのコンストラクタでエラー発生することがある模様(だめじゃん)。浮動小数点の誤差??(調べる気なし)

エクスペリエンスインデックス上がってた

Parallels 4.0にしたらVistaのエクスペリエンスインデックスがちょっと上がってた。

プロセッサ 3.7→3.7
メモリ 2.9→2.9
グラフィックス 1.0→1.9
ゲーム用グラフィックス 1.0→1.0
プライマリハードディスク 5.9→5.9

なお、2つか3つくらい前のMac mini(Core Duo 1.83GHzでメモリ2GBでOS X 10.4)+Parallels 4.0