Digitalians' Alchemy Diary Archive



あるけみすとの居る風景:2009 年 12 月

2009/12/27(日)

 年賀状完了。今年はスケッチ風ドロー(の私的改造版)を使ったのだが、直接プリントがなぜかイマイチで、pdf にエキスポートしてから GraphicConverter で 600dpi のビットマップに変換し、それをさらにプレビューで開いて印刷する、という回り道になってしまった。それに加えて、プリンタがやや挙動不審で、1〜2枚の印刷だと大丈夫なのに、数十枚をまとめて印刷するとだんだん印刷位置がずれてくる。最初はドライバの問題かなと思っていたのだが、位置がずれた末に本体が「カットリッジ位置のエラー」で止まってしまった。少し異音も出ているので、どうやらハードウェアのトラブルらしい。一応印刷は完了したが、そろそろ買い替え時かなあ。買ったのは6年半前だものな。

2009/12/26(土)

 クリスマスプレゼントに LaQギフトセットをあげた。最初は「ふーん、これなに?」という感じだったのだが、1日たつとすごい勢いでいろいろなものを作り始めた。レゴともちょっと違う感じで、面白いものができあがる。パーツがすぐに足りなくなるのが悩ましい。

2009/12/23(水)

 ヒメの新体操発表会。今年は選手コースの個人演技が小学生の子だったのでちょっと驚いた。この子は、ヒメのクラスにも来て練習をリードしてくれていて、ヒメたちもずいぶんお世話になっているし可愛がってもらっている。ヒメの演技は、僕はビデオ係だったのであまりちゃんと見てないのだが、妻によると去年にくらべてもずいぶん上手になったということだった。あとでビデオで見直そう。と言っても、どこにいるのかわからんかったからアップで映してなかったりするのだが。

 夜、LED でクリスマスツリーの電飾の製作。ツリーは11月の終わり頃にもう飾っていたのだが、電飾を出すのを忘れていて、つい先日出したらどこかが断線していてぜんぜん点灯しないことが判明。電飾なしでもまあしゃあないか、と思っていたのだが、電子工作用に買った LED がまだ少し余っていたのを思い出して、試しに作ってみることにした。一応できたんだけど、LED の数が少ない上に(全部で16個しかなかった)大して明るくないため、部屋を暗くして目をこらさないと光っているかどうか確認できない、というショボい電飾になってしまった。まあ、ないよりマシか。

2009/12/20(日)

 mopac6 を MinGW でビルドしようとしてまたハマってしまった(なんでそんな古いバージョンを使うのか、せめて mopac7 を使え、という話はともかく)。Mac OS X 上の gfortran だと普通に動くのに、MinGW 上だと動かない。「またスタックサイズか?」とか「入力ファイルの改行コードの問題か?」とか丸2日さんざん悩んだあげく、ついに不正現場を取り押さえた。

--- gettxt.f.orig Sat Apr 2 07:07:04 2005 +++ gettxt.f Mon Dec 21 00:05:39 2009 @@ -89,7 +89,7 @@ READ(5,'(A)',END=100,ERR=90)TITLE ENDIF ELSE - READ(5,'(A)',END=100,ERR=90)KOMENT,TITLE + READ(5,'(A80)',END=100,ERR=90)KOMENT,TITLE ENDIF GOTO 50 40 WRITE(6,'(A)')' SETUP FILE MISSING OR CORRUPT'

 KOMENT,TITLEという2つの文字列を読み込んでいる場面で、最初の1行をKOMENT、次の行をTITLEに読むのが期待される動作。ところが、フォーマットが '(A)'だとKOMENTに最初の行が入って、TITLEには同じ行の2文字目以降が入る。これは明らかにおかしい。フォーマットを '(A80)'にすると、一応期待した通りの結果になる。もっとも、どう書く「べき」かはよくわかっておらず、「実験してみたらたまたま動作した」という、非常によろしくない状況である。しかしまあ、古くてしかも人様のコードだし、この手の修正をやり始めたらきりがないような気もするし、どうしたもんかなあ。

2009/12/13(日)

 Cocoa 使いが wxWidgets を使ってみる (3) で書いた CLAPACK のビルド。ある事情でもう一度やってみたところ、コンパイルはうまくいったがテストで失敗するではないか。前は、コンパイルだけやってテストはすっぽかしていたらしい。これはよくない、と調査にかかったが、こいつが難航した。MSYS のコンソールから実行すると、「予期せず終了しました」ダイアログが出る。gdb で調べてみると、_do_global_dtors 中の probe という関数で SIGSEGV で死んでいる。dtors って何よ、C++ なんか使ってないぜ? と思ったのだが、ネット検索してみるとこんな記事が見つかった。

Re: [uClinux-dev] do_global_dtors problem
From: David McCullough
Date: Sun Nov 04 2001 - 17:37:38 EST
(中略)
> Has anyone else seen this behavior? Isn't do_global_dtors
> a c++ function? Any enlightenment on the constructor/
> destructor functions would be appreciated.

It is unlikely that the problem is with do_global_dtors. What happens is in the later version of gcc (ie 2.95) main calls __main which processes do_global_[cd]tors lists. So you get them with 'C' as well. Actually, I think that atexit is processed this way, but I may be wrong.

The fact that the program has run to completion and then crashed would make me look at the stack size and see if it could be overflowing into the top of the BSS/data sections.

 ひぇー、スタックサイズ。そんな落とし穴があったんか。ちなみに、MinGW でのデフォルトスタックサイズは 2MB らしい。FORTRAN プログラムを f2c でコンバートしているので、自動変数 2MB ぐらいなら平気で使ってそうだ(確認してないけど)。そこで、make.inc に

LOADOPTS = -Wl,--stack=33554432

という1行を加えてみたら、見事にテスト通過。いやはや、これだから FORTRAN は。(というか f2c を使うというのがそもそも筋悪という話も。)

2009/12/05(土)

 職場の後輩からギターを譲ってもらった。Morris M-60 というやつらしい。3弦が切れているので、いきなり弦を張るところからやらないといけない。とりあえず残りの弦だけでざっとチューニングして、子供たちに遊ばせてみている。ちなみにうちにはギターを弾ける人はいません。

2009/12/03(木)

 Canvas の Mac 版が無くなってしまったので、代替品を探しているのだが、なかなか決定版が見つからない。Inkscape は X11 アプリでめんどくさいし、DrawBerry はビットマップを貼付けた時の挙動がちょっと変。DrawKit はすごく期待度大きいんだけど、残念ながらプログラマー用のサンプルしか提供されていない。ところで、DrawKit の作者の Graham Cox さんってなんか聞いたことあるな、と思ったら、MacZoop の作者だったんだね。MacZoop は C++ で書かれたアプリケーションフレームワークで、Classic Mac OS 時代はお世話になったものだった。なつかしい。

 お絵描きアプリの話に戻るが、コンパクトで使い勝手がいいのはスケッチ風ドロー。Xcode 付属のサンプルコードを元にしている、という性格上(?)、最新バージョンは最新の OS でしか動かない、というのがちょっとつらいところ。手元では Leopard 用のソース(今はもう公開されていない)に少し手を入れて使っている。