気持ち早めに帰着。
もそもそとコーディング。
ボタンに画像を貼るのにオーナードローボタンを使うとビジュアルスタイルを
合わせるのが大変な感じになります。昔のフラットなボタンだとがんばれば
どうにか見た目を合わせられるものの、XPスタイルの艶があったり角が丸かったり
するのは合わせるのは無理があります。そこで知ったのが
OpenThemeData()やDrawThemeBackground()。これを使ってボタンをレンダリングした
後に画像をアルファ付で自力合成してみました。ひとまず見た目は合わせられるように
なったのですが、マウスカーソルがフォーカスした時にジワジワ色が変わるのとかは
面倒臭過ぎてやっぱり合わせられず(^^;
そんな訳でuxtheme.hとvsstyle.hのD言語バインディングが成果物になってみたり。
早くも無く遅くも無く。
「7+ Taskbar Tweaker」というソフトの存在を知ったり。
タスクバーを色々カスタマイズできるというものです。
WindowsXPのときはTaskbar++というソフトで、タスクアイコンを
タブのように移動できてて幸せだったのですが、Windows7では
タスクアイコンを動かせるようになったものの、グループ毎の
移動しかできないのが不満でした。7+ Taskbar Tweakerでは
グループをバラせるようになった為、実質WindowsXPでTaskbar++を
使うのと変わらない操作ができるようになり幸せが戻ってきました(^^)。
そういや以前、東京MXの物理チャンネルが
20chから16chに変更されるということを知ったのですが、何気に
16chに合わせてみたら受信できるようになってました。現在は20chと16chの
両方の電波が出ているようです。我が家では16chはアンテナレベル41、20chは
アンテナレベル37と、16chの方が若干アンテナレベルが高いみたい。まぁ、
他の局は60以上出ているので、それから言うと誤差みたいなもんですが。
早くも無く遅くも無く。
もそもそとコーディング。
気持ち早めに帰着。
もそもそとコーディング。
早くも無く遅くも無く。
ちょろり調べごと。もそもそと実験コーディング。ふーむ。
AM中に起床。
Web巡回したりコードをリファインしたり。
新世紀エヴァンゲリオン(13)。おおよそ旧劇場版通りに進んでいるような気も。
次はまた2〜3年後でしょうか。
AM中に起床。
64bit化で一つうまくいっていないのにタブレットコントロールがあります。
Webを検索するもいまひとつこれってのが見つけられなかったのですが、
wacom Software Developer Support
のサンプルコードを試してみたり。結果からいうとひとまず64bit gccでは使えそう。
マウスとタブレット入力を統一的に扱う目的でマウスモードでデータを取得していたのですが、
WT_PACKETメッセージで扱う方に変えた方が良いみたいです。
以前どうすりゃいいのか判らなかった
のですが、どう変えるのが良いかまた考える必要がありそう。
アパートの契約更新で不動産屋に。来週もう一回行く必要があったり。
ちょろり本屋に。色々散在。
そういや、DMD2.060対応版のMinGW-gdc実行バイナリが
bitbucketの方に
アップロードされているみたいです。
64bitのタブレット対応の件。ひとまず解決。
PACKETDATAフラグにPK_CONTEXTを立てて、PACKET構造体メンバー変数に「HCTX pkContext;」
を含めていました。このメンバー変数はポインタ型の為、32bitと64bitとでサイズが
変わってしまう訳なのですが、ここがうまくなかったため後ろに続くメンバー変数が
壊れてしまっていたようです。PACKET構造体内のpkContextは使用していなかった事
から、PACKETDATAフラグからPK_CONTEXTを外し、PACKET構造体からpkContextも外して
みたところ、正しく座標を取ることができました。
そんな訳で、ひとまずマウスモードでデータ取得する方法のままで対応完了という感じ。
これで手持ちコードで64bit化できてないものは無くなったという感じ。
昼ごろ起床。寝すぎ。
カイジ2。冒頭 10分ほど見てなかったらあっという間に地下から出てた。
調べごと。
気持ち早めに帰着。
あまりに眠さに急速停止。
早くもなく遅くもなく。
手持ちD言語コードをもそもそと64bit化したり。
あまりの眠さに急速停止。
早くもなく遅くもなく。
gdc。64bit版で メソッド呼び出しがうまく行われない事がある件、原因判明。
メソッド呼び出しがうまく行われないのではなく、RegisterClassEx()に
失敗しているのが原因でした。正確にはWNDCLASSEX.lpszClassNameに
string型の変数を wchar* でキャストして代入するのではダメでUTF16変換する必要が
あったという、以前気づいていた
件でした。古いコードを64bit対応させた時に変更を忘れていました(^^;
面倒臭いのは動いたり動かなかったりする点。オプティマイズレベルや
writef()を挟むか否かで動きが変わる気があまりしないのですが変わります。
遅めに帰着。
gdc。64bit版で メソッド呼び出しがうまく行われない事がある件を少し調べたり。
原因まで到達できず。
AM中に起床。
MinGW gdc。覚書き。
使用したのはvenix1(==DanielGreen)氏のforkバージョン
(f35ec0f857)で、
ベースgccは4.6.3を使用。
起きたら午後もいい時間。
DMD2.060対応のgdc64bitビルド。ファイルダイアログが開かなくなった件は、
以前構造体のメンバー変数のアライメントが
32bitのそれと違っていた為、align()キーワードを使ってサイズを無理やり
合わせていました。それが新しいコンパイラではアライメントが変わった為か、
構造体のサイズもまた変わってしまっていたのが原因でした。align()キーワード
を削除してOKになったのですが、そうすると前のコンパイラではダメに
なるので新しいコンパイラが問題無い状態でなくては困った事に。
format()が変な値を返している件。std.formatではなくstd.string.formatの方が変っぽい。
自前のあるモジュールに限定して変になっているのですが、ここって大分前から何か
変な感じだったりしてました。何か間違っているのかも。
そういや、core.simdでdouble2型などを使用した時に乗算がバグってて
使えなかった件は直っているようです。
$ cat simd_test.d import std.stdio; import std.string ; import core.simd ; int main() { version( GNU ) writef("I am GNU\n" ) ; version( Unix ) writef("I am Unix\n" ) ; version( Windows ) writef("I am Windows\n") ; version( MinGW ) writef("I am MinGW\n" ) ; version( cygwin ) writef("I am cygwin\n" ) ; version( Win32 ) writef("I am Win32\n" ) ; version( Win64 ) writef("I am Win64\n" ) ; version( Posix ) writef("I am Posix\n" ) ; version( X86 ) writef("I am X86\n" ) ; version( X86_64 ) writef("I am X86_64\n" ) ; double2 a,b,c,d,s ; a = 6 ; b = 5 ; c = 4 ; d = 3 ; for( int i=0 ; i<2000000000; i++ ){ s = a / b + c * d ; a = s - 7.2 ; c = s - 9.2 ; } writef("a = %s\n",a.array) ; writef("b = %s\n",b.array) ; writef("c = %s\n",c.array) ; writef("d = %s\n",d.array) ; writef("s = %s\n",s.array) ; return(0) ; }
$ gdc -m32 -O2 simd_test.d $ time a.exe I am GNU I am Windows I am MinGW I am Win32 I am X86 a = [6, 6] b = [5, 5] c = [4, 4] d = [3, 3] s = [13.2, 13.2] real 1m13.518s user 0m0.000s sys 0m0.031s
$ gdc -m64 -O2 simd_test.d $ time ./a.exe I am GNU I am Windows I am MinGW I am Win64 I am X86_64 a = [6, 6] b = [5, 5] c = [4, 4] d = [3, 3] s = [13.2, 13.2] real 0m20.506s user 0m0.000s sys 0m0.030s
$ cat strformat_bug.d import std.stdio ; import std.string ; import std.conv; void main(string[] args) { if( args.length==2 ){ double fval=to!(double)(args[1]) ; writef("%f %s\n", fval, format("%f",fval)) ; writef("%f %s\n", fval, xformat("%f",fval)) ; } } $ gdc -O2 strformat_bug.d $ ./a.exe 1.23 1.230000 0.000000 1.230000 1.230000
大幅に日付け越え。
gdc。64bitビルド。32bitと同じソースで対処も同じ感じでビルド完了したり。
概ねOKそうな感じなのですが、std.formatが何やら変なのに加えて、
ファイルダイアログを開けなかったり。うーむ。
日付け越え。
gdc。32bitターゲットのビルドでは概ね手持ちコードのビルドはOK
なのですが、std.formatが何やら変な値を返していて、そこだけがまだダメな感じ。
基本的にはwritefと同じなのだと思っていたのですが、どうもそうではないらしい。
日付け越え。
昨日のpow式のバグ。std.regexだけならバグを踏まないワークアラウンドを
入れれば良いかな?と思ったのですが、他でも結構使われていた為、
コンパイラを直すのがよさげな感じだったり。
因みに昨日のコードのアセンブラコードを出してみて、正しく動く2.058対応
のgdcのと比べてみたり。
__Dmain: __Dmain: pushl %ebp pushl %ebp movl %esp, %ebp movl %esp, %ebp subl $24, %esp subl $24, %esp movl $3, %eax movl $3, %eax movl $LC0, %edx movl $LC0, %edx movl $262144, 8(%esp) | movl $0, 8(%esp) movl %eax, (%esp) movl %eax, (%esp) movl %edx, 4(%esp) movl %edx, 4(%esp) call __D3std5stdio17__T6writefTAyaTiZ6writefFAyaiZ call __D3std5stdio17__T6writefTAyaTiZ6writefFAyaiZ movl $0, %eax movl $0, %eax leave leave ret ret
$ diff -c constfold.c.org constfold.c *** constfold.c.org 2012-11-11 03:34:56.000000000 +0900 --- constfold.c 2012-11-15 01:52:23.612038100 +0900 *************** *** 581,592 **** if (e1->type->isfloating()) { r = new RealExp(loc, e1->toReal(), e1->type); ! v = new RealExp(loc, ldouble(1.0), e1->type); } else { r = new RealExp(loc, e1->toReal(), Type::tfloat64); ! v = new RealExp(loc, ldouble(1.0), Type::tfloat64); } while (n != 0) --- 581,592 ---- if (e1->type->isfloating()) { r = new RealExp(loc, e1->toReal(), e1->type); ! v = new RealExp(loc, 1, e1->type); } else { r = new RealExp(loc, e1->toReal(), Type::tfloat64); ! v = new RealExp(loc, 1, Type::tfloat64); } while (n != 0) *************** *** 598,604 **** } if (neg) ! v = Div(v->type, new RealExp(loc, ldouble(1.0), v->type), v); if (type->isintegral()) e = new IntegerExp(loc, v->toInteger(), type); --- 598,604 ---- } if (neg) ! v = Div(v->type, new RealExp(loc, 1, v->type), v); if (type->isintegral()) e = new IntegerExp(loc, v->toInteger(), type);
遅めに帰着。
先日のstd.regexの実行でエラーする件。コード内のエラーチェックで
エラー検出して例外が飛んでいるので、デバッガで追っかければ原因が判るだろう
と思ったのですが、gdbで実行すると何故かSegfaultして実行できず。
因みにエラーは次のような感じ。
GameLoopError: maximum compiled pattern length is exceeded Pattern with error: `^` <--HERE-- `mtllib\s+(\S+)`
$ cat beki.d import std.stdio; import std.string ; void main() { writef("%x\n",2^^18) ; } $ gdc beki.d $ ./a.exe 0
遅めに帰着。
MinGW向けgdcのアップデートが来ないなぁと思っていたら何やら
色々コミットされてたり。何故ジャストタイミングなのかは謎(^^;
ひとまずx86でビルド。cc1d.exeのリンクにg++ではなくてgccを使っている
せいでリンクに失敗するのを手で解決、libphobosの std/__fileinit.oが
ソースが無くてビルド失敗するのを手で外してひとまずlibphobosのビルド
にも成功しました(^^)v。
手持ちのコードをコンパイルしてみたところ、libgdruntime内の
core/sys/windows/mingwex.oに含まれる関数とlibmingw内に含まれる関数が
衝突していてリンクエラー。core/sys/windows/mingwex.oをlibgdruntime.a
から外したり。
で、リンクにも成功したのですが、std.regexの正規表現のコンパイルでエラー
している模様。よく判らないのですが、行頭を示す「^」やただの「.(ピリオド)」
がダメになってたり。なにこれ?
昼前起床。
壊れたビニール傘を捨てられるように解体したり、不要になった古い風呂の蓋を
細かく切ったり。ノコギリ(弓ノコですが)なんて久しぶりに使いましたよ。
昼頃起床。
WiiUのTVCMが流れ始めていたり。
そういやgdc。MinGW向けにビルドを試しているのかなぁ?と思っていたのですが、
その後パッタリと更新が止まってたり。やはりlibphobosのビルド対応が
難しい感じになっているのでしょうか.....
早めに帰着。
ヱヴァンゲリヲン序を見ていたらあまりの眠さに急速停止。
日付け越え前に帰着。
チャンネルザッピングをしていたら水森亜土氏(いわゆるあどちゃん)が
出ていたり。オーディション時にでまかせで両手で絵が描けると言ったとは
驚きです。
Wikipedia
を見ていたらPS2用「塊魂」の挿入歌「真っ赤なバラとジントニック」のボーカルを
務めていたのを初めて知ったり。TANEの塊デビューはPS3のトリビュートからなので
YMCK版しか知りませんでした。
遅めに帰着。
ちょろり調べごと。
遅めに帰着。
ちょろりモデリング。んー、なんかイマイチ。
遅めに帰着。
ちょろりモデリング。
昼過ぎ起床。
過去の日記をたまたま見たら
以前レンダリングした
シーンファイルのレンダリング時間の記録があった
ので、現PCで試してみたり。これまでの分も含めて以下のような感じ。
CPU | レンダリング時間 | POV-RayVersion | 日記タグ |
PentiumIII(550MHz) | 約11d16h | 3.1 | 2000/10/28 |
Pentium4(3.06GHz;1thread) | 2d07h06m40s | 3.6.x | 2006/12/06 |
i7-377K(3.5GHz;7thread) | 7h11m30s | 3.7 RC6 | 2012/11/04 |
昼過ぎ起床。
ちょろり本屋に。「ONEPIECE(68)」。色々盛りだくさん。次巻くらいから
色々片付いていく感じか。
早めに帰着。
いつの間にか寝てたり。
日付け越え。
眠くて死亡。