気持ち遅めに帰着。
ちょろっとコーディングして眠くて死亡。
気持ち早めに帰着。
TV見てたらいつの間にか寝てたり。
Cygwinのパッケージインストールしたりスナップショットをビルド
したり。
cairoの使い方を探ったり。結局、cairoのソースアーカイブ内
にあるテスト用のコードが、全体の流儀を知るには一番良いという
結論だったり。なんとなく文字表示方法が判ってみたり。
気持ち早めに帰着。
DUITのページを何気に眺めていたら、ソースツリーのビュワーが
あるのに気づいたり。見てみた所、cairoを使った時計デモの
ソースがつい最近コミットされており、また、cairoへのアタッチ
ソースも存在しているようなので、これぁタイムリーだと
ダウンロードしてみる事に。
最初、CVSか何かでダウンロードするものかと思ったら、
ソース一覧表示の下の方に、zipアーカイブで取り出すボタンが
付いており、それを押すと今のスナップショットが取れると
いう仕掛けになってました。いや、便利なもんです。
OpenGL系ソースで存在しない関数を消す話と、DLLのロードパス
やcairoのDLL名の変更を手で入れてビルドしてみたり。
そしてほどなく終了。ビルドできてみたり。そして、cairo
を利用した時計アプリは次のような感じ。
JSTじゃなくてGMTになってますが、それはそれとして。
で、fedoraに持っていってコンパイルしてみたり。結果は
これまでのDUITと同様、起動時にSegfaultでずっこけて立ち上がらず。
朝普通に起きてみたり。
OpenGL窓に文字描画をする話。Win32APIのTextOut()と混在で
文字表示がうまくできない件で、
以前解決方法がイマイチ
よく判らなかったのですが、GLUTのglutBitmapCharacter()実装を見てみると
他関数と深い繋がりがある感じではなかったので、glutBitmapCharacter()
を使ってみたり。この関数を使いたい為だけにglutライブラリが必要
なのもイマイチな感じですが、まぁそれはそれとして。
何気にcairoの使い方を
探ってみたり。DUITにデモコードが入っているには入っているのですが、
全然何をする訳でも無いコードになってて参考にならなかったり。
とりあえずCで書かれたの時計のコードを見つけたので眺めてみたり。
それにしても、探し方が悪いせいか、firefoxのレンダリングエンジンに採用される
話は見つかったのですが、日本語で書かれたサンプルコードが
見当たらなかったり。まぁ、用途的に結構限られたところで使用される
ライブラリなので、少ないだろうというのは予想できる所なのですが、
ほぼ皆無というのは思いもよらないところだったかも。
DUITの掲示板を眺めているとcairoを使ったテストコードへのリンク
が張ってあったので、ダウンロードしてみたり。Cで書かれた時計のコード
をDUITに移植した感じだったので、これぁ参考になるかもと、とりあえず
makeしてみたり。ところが、エラーしてコンパイルできず。コード自体は
2006年の春ごろのコードみたいでしたが、そこから大分DUITの
構成自体が変わっている所によっているみたい。んー、参考コードを見た
感じ、OpenGLをGTKにアタッチするのにDUITのsrcglディレクトリ下のコード
が使われているのですが、なんとなく、以前は cairoもOpenGLに似たGTKへの
アタッチコードが用意されていた模様。
昼前に起床。
TV観ながらぐうたら過ごしたり。
しつこくキーボードイベントの続き。ふと思いつきで、MainWindow
に対してイベントハンドラを入れるのはどうか?と思ったり。
すると、この方法であれば、キーボードイベントを捕らえる事が
できました。OpenGLの描画WidgetはMainWindowの子ウインドとして
はめ込んでいる訳なのですが、キーイベントが子ウインドまで
伝わっていないという感じになるのかも。でも、MainWindowsで
イベントを取ってしまうせいか、キーボードによる
NoteBook(俗に言うタブ)やボタンの切り替えは効かなくなって
みたり。階層をずらせばメニューバーのショートカットも効く
ようなので、着目しているWidgetの一つ上の階層で取るといける
のかなぁという感じ。まぁ、イベントを捕まえられさえすれば、
どうにかする方法はあるだろうという感じ。
fedoraの方でダメなのは結局追求せず。判らずじまいのまま。
そんな訳でテストコードを書いてみたり。GLUTやWin32APIでこなして
いたレイヤーをDUITに差し替えてみた感じ。でも、何故か初回表示の
アスペクト比が微妙に狂っていて悩んでみたり。調べた所 ウインド
のリサイズイベントが発生した際、何故かウインド幅と高さに-1が
返る場合があり、それをgluPerspective()に食わせてしまった為に
変になっている事が判ったり。何故そういう事になってるのか
判りませんが、とりあえず変な値の場合は無視するというコードを
入れてみたり。
Macの新しいCM。いやいや、いくらWindowsでもXPならばそんな
勢いで再起動は必要にならんでしょう。まぁ Windowsとは言って
ませんが。
早くもなく遅くもなく。帰りに思いっきり雨が降っててぐったり。
猛烈に眠くなって早々に死亡。
早くもなく遅くもなく。
先日ビルドしたlibglibを手で差し替えた所、不当命令でずっこけ
なくはなったものの、別の関数でやっぱりsegfault。なんで?
シンボルが付いていなかったので、関数の引数とかが判らず。
ステップ実行してもただ死ぬだけ(^^;もっかいビルドし直してみるか....
気持ち早めに帰着。
デバッガでDUITの動きを追いかけて、GTK関数群の使われ方を
見るのはどうじゃろ?と思ったり。Cygwinのgdbだと何かとすぐに
固まるので、fedoraの方でやってみる事を考えたり。でも、
fedoraの方はそもそもDUITのデモプログラムがsegfaultで
起動できないという問題があり、まずはそちらを解決してみる
事にしたり。glibのthread初期化関数を実行しているようですが、
そこで何故かずっこけている模様。同じ関数をWindowsの方でも
ブレークポイントを張ってみた所、こちらは停止する事無く
立ち上がってみたり。単純に問題の関数呼び出しをコメントアウト
してみたのですが、そんなことでは解決せず(^^; うーむ。
デモプログラムのメインソースを見ると、Win32とそれ以外とで
Duit.init()を使うかDUIT.initMultiThread()を使うかが切り替え
られていて、Windowsは前者を使っていたり。でも、Thread初期化
の実行ありなしの違いしか無いので、試しにコメントアウトした時
と結局動きが変わらず。
Windowsのそれと動きが同じになってるハズという事で、Windowsでも
同じように止めながら進めてみようとした所、ちっとも
ブレークがかからず。正確に言うと、Dソースのシンボルでは
ブレークがかかるものの、glibやgtk系の関数シンボルは
スルーしてしまう感じ。うむー、うまくいかないなぁ。
で、fedoraの方は次のような感じで、不当命令実行で死ぬ感じ。
Program received signal SIGILL, Illegal instruction. [Switching to Thread -1208268592 (LWP 8698)] 0x081adef4 in g_shell_unquote () (gdb) where #0 0x081adef4 in g_shell_unquote () #1 0x4ef95105 in gtk_parse_args () from /usr/lib/libgtk-x11-2.0.so.0 #2 0x4ef951d4 in gtk_init_check () from /usr/lib/libgtk-x11-2.0.so.0 #3 0x4ef95214 in gtk_init () from /usr/lib/libgtk-x11-2.0.so.0 #4 0x080a1e8a in _D3gtk4Duit4Duit4initFAAaZv () #5 0x08096a93 in _Dmain () #6 0x0810fbce in _D9dgccmain211_d_run_mainUiPPaPUAAaZiZi2goMFZv () at ../../../libphobos/internal/dgccmain2.d:83 #7 0x0810fcba in _d_run_main (argc=1, argv=0x1, main_func=0x1) at ../../../libphobos/internal/dgccmain2.d:93 #8 0x0810ec17 in main (argc=1, argv=0x1) at ../../../libphobos/internal/cmain.d:5
早くもなく遅くもなく。
しつこくキーイベント取得の続き。
Cベースの別の例でイベント発生でシグナルを飛ばす例を見たり。
やっぱりgtk_widget_set_events()を使ってイベントマスクを
上げれば良いように見えてみたり。で、Webを探ってみたところ、
GTKの1.2のドキュメントの中にウインドを実体化する前にイベント
マスクをセットする必要がある事を見つけたり。確かに、
gtk_widget_show_all()した後でset_eventsを実行しても
無効になる事が判ったり。
という事を踏まえてDUITコードを色々書き換えてみるも反応
示さず。惨敗。
溜池観たり。自由すぎ(^^;
早くもなく遅くもなく。
先日のキーイベント取得の続き。Cベースの例を順に見ていった
所、
GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS); という
フォーカスフラグをセットするステップがあり、これの
有無でキーイベントが発生するか否かが変わるという事が
判りました。ことろが、このフラグセッターはマクロで実装
されていて、どこをどう設定してるのかを追いかけ切れなかったり。
CAN_FOCUSなどの文字列をキーに、DUITのソース内をgrepで
探ってみたのですが、イマイチ相当する操作を見つける事が
できなかったり。
ひとまず、マウスモーション時のSHIFTキーやControlキーと同時押し
はコールバック関数の第一引数となる GdkEventMotion* の
メンバー変数 state に対して、 enum ModifierType でもって
フラグ検査を行えば良いらしい。これはこれで収穫(^^;
朝普通に起きてみるもぐうたら過ごして一日終了。
DUITでキーイベントを取得しようとしようとしたところ、何故か
反応せず。addOnKeyPress()でもって、イベントに反応させようと
したのですが、イベント自体が発生していない予感。一応DUITの
ソースにもデバッグコードを入れて反応を見てみたのですが、
イベント自体が発生していない感じ。マウスのボタンイベントと
同じようなコードなので、マウスボタンとキーボードとでは
違いが無いと思われるのですが.....
Webを探ってみた所、C言語ベースでGTKのキーイベントを取得する
例を見つけたのですが、g_signal_connect()を使うのと同時に、
gtk_widget_add_events() で反応するイベントを追加するような例
が載っていたり。それを元にもう一度DUITのコードを見てみると、
マウスボタンのaddOnでは addEvents(EventMask.BUTTON_PRESS_MASK)
を使って起こるイベントを追加しているようでしたが、
キーボードの方にはそれがありませんでした。てっきりイベントは
勝手に発生するものなのかと思っていたのですが、そうでは無いのか?
という訳で、
addEvents(EventMask.KEY_PRESS_MASK|EventMask.KEY_RELEASE_MASK);
てな感じで足してみたりもしたのですが、やっぱり変わらず。
あれぇ?
朝一瞬普通に起きてみるも、二度寝したら昼過ぎ。
マジシャンのセロの出てる番組(たぶん再放送)を見たり。
ハンバーガーをポスターから出したり食ったり戻したり、破れた
障子を直したり、いつ見ても、てゆーか、見る度に強力になって
いるような気がしてなりません。
たまたまチャンネルザッピングしてて見た「美の巨人たち」。
平櫛田中(ひらくしでんちゅう)という木彫刻家の回でした。
TANEは別に彫刻芸術に詳しい訳でもなんでも無いのですが、
その造形をみるや思わず「スゲー」とTVに話しかけてしまいました(^^;
CGを使って立体とか作っていると、あーだこーだといじりまわす事ができる
ので、時間をかければそれなりの物は出来てしまうのですが、
木や石の場合「ぐりっ」っていっちゃうと元には
戻せない。木や石が彫刻で形になっているのは、それだけで凄い事だと
思う所なのですが、今回見た作品群は、なんかもうね、迫力が違うって
感じな訳です。是非一度、実物を見てみたいかもと思ってしまいました。
DUITでOpenGLを試したり。基本的な使い方はGLUTと似た感じに
なっている様で、initGL(),drawGL(),resizeGL() と、他必要に応じて
addOnほげほげ()でマウスなどのイベントを拾うという感じみたい。ふむー。
povray 3.7beta19が出ていたので試してみたり。beta18での、レンダリング
終了後もcpu使いっぱなしになる不具合は直っているもよう。でも、
まだサポートされてない機能とかあるようなので、仕上がる絵は3.6とか
とは違う場合がありますなぁ。
久々に日付越え。
眠さに耐えられなくて、インターネットTVのバイファム見た後
すぐに死亡。
気持ち遅めに帰着。
DUITでOpenGLを使うサンプルコードを眺めて終わり。
早くもなく遅くもなく。
そういや、DUITって使っている人居るかしら?と思い、検索して
みたところ、見事に日本語ページは出てこなかったり。最初
「duit gtk」で検索してみたのですが、出てこなかったので、
duitだけにすると、今度はやけにひっかかったり。英単語では
なさそうなので、いくつかヒットしたページを見てみたところ、マレーシア語
で「お金」の事らしい。なんかやらしいなぁ。調べるんじゃなかった(^^;
早くもなく遅くもなく。
Widgetを色々いじったり調べたりして終了。
気持ち早めに帰着。
DUITいじり。スライダの値を動的に得る方法を習得したので、
それを使って実際に画像ウインドを変化させるコードを書いてみたり。
ところが、何故か画像の再描画がかからず。先日のテーブル再描画
と同じくshowALL()してみても変わらず。で、調べてみた所、
領域の無効化を行って、再描画イベントを発生させる必要があったり。
gtk_window_invalidate_rect()とかを使う例があったのですが、
DUITの場合はgtk_widget_queue_draw(GtkWidget*)を使用した
queueDraw()というメソッドが実装されていたので、Pixbufの
内容をいじった後に、queueDraw()を実行してやる事で、再描画
が行われるようになりました。これでひとまず簡単な事をやらせる
アプリは作れそうな予感。気のせいかも知れませんが(^^;
AM中に起きてぐうたら過ごしたり。
DUITで遊んでいたり。DUIの実験コードを移行してみたのですが、
画像の表示で再ロードを行うと何故か画像表示されず。
一回目の表示はできている為、表示コードが間違っている
という感じではないと思われ。デモコードの方でも再ロード時
の表示がうまく機能していない為、DUITの問題っぽい予感。
Image自体は再ロードしたファイルの情報を得られている為、
画像をはめているTableの動きに問題がありそうな予感。
もう少し調べてみたところ、
TableをshowAll()メソッド(基底クラスWidgetのメソッド)で明示的
に再表示指示をする必要があるっぽい。
一番最初はnewでTableインスタンスを割り当てるのですが、その時は
どこかで表示されることが指示されているものと思われます。一方、
再ロードではテーブルを一度removeAll()でクリアした後、新しい
Imageをテーブルにはめ込み直すという動きを行っていますが、
ここで明示的にshowAll()を使用して中身の表示を行う必要があるっぽい。
DUI時には特に何もしなくても再表示されていたのですが、
DUIとDUITの実装の違いまでは追跡できず。
DUITのページから
辿れる(公式?)掲示板を眺めてみたり。どうやってコンパイルすりゃ
いいのか?とか、最初につまづく感じの質問とかが多くて、
実際にバグやら不具合やらを報告する感じのものはまだ無さげ。
てゆーか、恐らく作者以外に本気で使っている人はほとんど居ない
というのが現状っぽい。まぁ、インプリに対する高級な話をされても
ついていけないので(主に英語が読めないところによる)、まだ
それくらいの方がTANE的には丁度良い所なのですが(^^;
どうやらDUITの作者さんはLinuxの方がメインで、Windows用の方が
ポートっぽいらしい。そういえば、画像表示のサンプルで、
パスを含むファイル名の先頭が'/'(ルートからの絶対パス指定)でなければ、
カレントディレクトリのとあるディレクトリ名を足してファイルをロード
するようなコードが入っているのですが、Windowsでは 絶対パス
指定が C: のドライブ名始まりだったりする為、うまく動作し
なかったりするのはその為らしい。
掲示板を読んでいるとOpenGLコードも既に含まれているようなことが書かれて
いたので、「あれ?そうなの?」と思い、アーカイブの中を見てみると、
srcglというディレクトリが別に用意してあり、その中にOpenGL関連コードが入っていたり。
てか、何故分かれてるの?
早速コンパイルを試してみたり。OpenGL系関数だけextern(Windows)宣言
する必要があるのと、一部Cygwinパッケージのw32api/{libopengl32.a,libglu32.a}
には含まれていない関数があるのを削る必要がありましたが、デモコードは
コンパイルできてみたり(原因が判るまで苦戦したのは秘密)。
昼ごろ起床。TVなど観ながらぐうたら過ごしたり。
DUITの調査。WindowsでDLLローディングがうまくいかない件について
調べたり。そもそも何が失敗しているのかと言うと、
\Program Files\Common Files\GTK\2.0\bin\
から始まるパスからDLLをロードしようとしているのですが、そこには
インストールされてなくて、別のパスにインストールしていました。
どこから\Program Files\....というパスが出てくるのかを調べた
所、src/lib/paths.dに固定パスで埋め込まれていた為、そこを
とりあえず今インストールしてあるパスに書き換えてビルドし直した
所、うまくビルドした実行ファイルを起動する事ができました(^^)v。
Windowsの方はそれが原因だっただけのようですが、Fedoraでダメな
理由はイマイチよく判らず。
DUIと基本的な使い方は変わらないようですが、DUIのビルドはdoolと
いう外付けライブラリが必要だったのが、DUITでは外付けライブラリ
不要になっていて、依存性が無い点などは良いかも。
まだOpenGLの方はソースが足りなくてビルドできないようですが、
DUIの方で(少し手を入れる必要がありましたが基本的には)使えて
いたので、普通に使えるようになるのも時間の問題かなぁと思われ
ます。
DUITを使ってみたり。マウスのドラッグなんかは addOnDragMotion()
てのが追加されていたりするので、それを使えば解決......
と思ったのですが、どうにも反応していないような。
ソースを眺めてみたのですが、そもそもイベントがどのように
してボタンやスライダーに伝わるのかがよく判らなかったので調べたり。
生のGTK(正確にはGTK2ではglib)でsignalに反応させる場合、
gulong g_signal_connect( gpointer *object, const gchar *name, GCallback func, gpointer func_data );
気持ち早めに帰着。
RubyでもGTK+を使用する事ができるという事で、少し実装を探ってみたり。
あまり高度にラップしている感じでは無さげ。シグナル設定もsignal_connect()
を使って行うみたい。
で、DUIでのイベント処理をよく見たり。その結果、addOnほげほげ()
というメソッドが用意されており、ほげほげの部分がイベント種類によって
各種用意されているという事が判りました。マウスのクリックやモーション
などのイベントで反応したければ、addOnClick()やaddOnMotionNotify()
にコールバック関数を引数として指定するという感じ。signal_connect()
を使うよりも生っぽくない感じがするので、DUIの実装の方が個人的には
好みかも。
で、ドラッグにはどうやって反応すれば良いの?と思ってソースを眺めて
みたところ、未実装っぽくも見えるのですが、サンプルコードでは
マウスドラッグで絵を描く事ができていたので、応用の範囲内っぽい。
そんな訳で、DUIの正式版となるDUITのpre-releaseをダウンロードして
みたり。ビルドの手段が良くわからなかったので、gdmdを使って
スクリプトでビルドしてみたり。とりあえずエラー無くリンクできたものの、
DLLのローディングがうまくできなくて終了。外部関数呼び出し(ローディング)
に技が使われているっぽい。
Windowsはダメだったので、Fedoraでビルドしてみたり。リンクはうまく
できるものの、やっぱりライブラリのローディングで失敗したり。むぅ。
遅めに帰着。
んー、signalの通知方法がよく判らず。
早めに帰着。
そういや、pkg-config を使ってGTKが使用するライブラリやらヘッダ
ファイルやらを自動的に検査してリンクするようなMakefileを
書いていたのですが、ある日を境に突然うまく動かなくなって
謎に思っていました。久しぶりにCygwinのMailingListを
眺めてみると、CR/LF問題と称した改行コード問題というのが
あるらしく、もしやそれか?と調べてみたところ、どうやら
ビンゴっぽい模様。
$ pkg-config --cflags gtk+-2.0 | dump | tail -1 00000140 6c75 6465 2020 0d0a lude .. ^^^^この為、
$ gcc -o sample.exe sample.o -mno-cygwin -Wl,--subsystem,windows `/gtk/bin/pkg-config --libs gtk+-2.0` : No such file or directoryてな感じで、エラーして動作せずとなってました。
気持ち遅めに帰着。
GTKのマニュアルを眺めたり。2.0系は意外と日本語化されてなくて、
これって情報が得られず。GLIBが想像以上に複雑な事をやっている
のを初めて知ってへぇと思ったり。
昼過ぎ起床。ぐうたら過ごして一日終了。
暇つぶしで観ているインターネットTVのじゃりン子チエですが、
ヒラメちゃんの出てくるのってこんなに後の方だったっけ?
と思ったり。
GTKのpixbufのマニュアルを眺めたりコードを調べたり。
特に生産物は無く。
AM中に起床。
テストコードをいじりながらDUIの反応を見たり。
utf-8ならメニューに日本語使えるなぁとか。メニューはJavaなんかと
同じくボタンクラスを作って配置してとかそんな感じなのですが、
パッキングで勝手にレイアウトするので適当に並べてもそれなりに
配置されたりとか。
FOX toolkit
とか非常に良くできているツールキットは存在するのですが、
C++で書かれているのがDでのラップを困難にしている理由だったりする
のは寂しいところ。C++のクラスをDでもそのまま利用できると、
かっこいいのですがそれはそれとして。
まぁ結局の所、言語でもコンパイラでもなくて、ライブラリが
使いものになるか否かで用事になるかどうかが決まるというだけ
なのかも知れません。まぁいいや。
で、Windowsだと画像表示テストで正しく表示できなかったりしたのですが、
UNIX系とWindowsとのファイルパス表現の違いからくるものだったり。
DUIでは画像を扱うクラスは JavaのImageクラスっぽい感じで実装されて
いるのですが、直接ピクセルを扱う為のメソッドは実装されていなかった
ので追加してみたり。互換性を考えるなら継承して機能追加する
べきなのですが、gtkのラップを必要とする分については、やっぱり
DUIのクラスに直接メソッド追加する方が良いんだろうなぁとか、
ごちゃごちゃといじりまわしたり。
AM中に起床。もう普通の土曜日という感じ。
gdc-0.21をビルドしてみたり。cygwinビルドはエラー無く通った
のですが、mingwビルドがconfigureオプションを変えたせいか
なかなか通らず。
fedoraの方は、例の
/usr/lib/libstdc++.so.6
シンボリックリンク問題がyumのアップデートのせいかまた元に
戻っていましたが、それ意外はエラー無く通り、いくつかテストコードの
コンパイルも問題無し。
mingwビルドの方は事前の仕込みが足りないだけでした。てへっ。
以下mingwビルドを行うための事前仕込みのメモ。これまでの
積み重ねがありますので、クリーンな状態から始めると少し手順
が足りなかったりするやも知れません。
../configure --prefix=/usr/local/gdc021 --target=i686-pc-mingw32 --with-gnu-ld \ --with-gnu-as --enable-threads --disable-win32-registry --disable-shared \ --enable-sjlj-exceptions --disable-nls --enable-languages=c,c++,d
気持ち早めに帰着。
先日の続き。_utf8付き関数へ書き換え。そしてDUIアーカイブに
含まれるテストコードをコンパイル&リンクできたものの、アクセス
違反で死亡。むー。
いわゆるハローワールドレベルでウインド自体を開く事ができる
のかをテストしてみたり。唯一見つけたWebページのコードを
参考に次のようなコードを書いてみたり。
private import dui.DUI; private import dui.Label; private import dui.MainWindow; class HelloWorld : MainWindow { this() { super("Start GUI Programing"); add(new Label("こんにちはDUI")); setSizeRequest(150,20); show(); } } void main(char [][]args) { DUI dui = DUI.dui(args); new HelloWorld(); dui.go(); }
仕事始め。早めに帰着。
DUIを直したり。やっとエラーを取る事ができたり。importの順番とか
が微妙に影響するようになったり、import のデフォルトがprivateに
変更になったりした事が影響していた模様。
で、肝心のテストプログラムのリンクは失敗。一つは、doolという
外付けのライブラリが必要なのですが、それも完全にコンパイルできる
必要がある点、もう一つはgtkの関数がリンクできず。後者はOpenGLの
それと同じ理由だと思われるので、extern(Windows)で解決しそう
な見込みなのですが、前者のdoolというライブラリのコンパイルで
つっかかりまくり。
そもそも、以前よりversion()文で指定できる定義済みバージョン識別子
の一覧を得る事ができない為、どれでも無い場合を踏んでしまって
関数が見つからないという感じになっているのですが、具体的に
どう直せば良いのかが判らず。そんな訳で、次のようなしょーもない
テストコードで調べてみたり。
$ cat main.d import std.c.stdlib ; import std.c.stdio ; int main() { version(linux) { printf("I am linux\n" ) ; } version(Windows){ printf("I am Windows\n") ; } version(Win32) { printf("I am Win32\n" ) ; } version(GNU) { printf("I am GNU\n" ) ; } version(Unix) { printf("I am Unix\n" ) ; } return(0) ; } $ gdc main.d $ ./a.exe I am GNU I am Unix $ gdc -mno-cygwin main.d $ ./a.exe I am Windows I am Win32 I am GNU
$ gdc main.d $ ./a.out I am linux I am GNU I am Unix
昼過ぎ起床。
DUIという
GTKのラッパーモジュールをダウンロードしたままほったらかし
にしていたのを思い出したので、触ってみる事にしたり。
でも、コンパイルが通らない所から始まる罠。
いくつか廃止となった記述を使用している為それを直してみたものの、
もう一つ別のライブラリが必要と判ってそれをダウンロード。同じく
記述修正をしてみたりするものの、こちらもエラーしまくり。むー。
新たな発見として、versionコントロールに変数の様に代入できる
事を知りました。次のような感じ。
version(linux) { version=CommonUnix; } version(Unix) { version=CommonUnix; } : version (CommonUnix) { : }
昼過ぎ起床。
で、先日のUSB-SCSI変換機を探してみる事に。近所のPC屋を
見てみたのですが、当然のように置いていなかった為、秋葉まで
繰り出してみたり。で、思いっきり探し回るも、まず「SCSI」と
いう単語自体が出てこない。で、やっとこその変換機を見つけて
みるも、あまり安く無い(ほぼ定価売りで7000円也)。UltraSCSIの
PCIボードの方が安かったりする罠。あと、どうしてもアンフェノール
-ピンタイプの変換コネクタを見つける事ができず(まだ休業の店が多かった
のもあるのですが)。最後の頼みとMac向けのサプライ品置き場を
見たところ、やっとそれらしい変換器を見つけたのですが、
次のような感じで形状が合わず。
┌─┐ ┌─┐ ┌─┐ ┌─┐ │ │ │ │ │ │ │ │ │ └──┘ │ │ │ │ │ │ ┌──┐ │ │ ├─────┤ │→スキャナ │ │ │ │ │ │ │ │ └─┘ └─┘ └─┘ └─┘ ピン50♀ AH50♂ AH50♂ AFull │ │ │ │ └見つけた変換器─┘ └スキャナ側ケーブル┘ AH50 :アンフェノールハーフピッチ50pin AFull:アンフェノールフルピッチ
明けましておめでとうございます。今年もよろしくお願いします。
そういや年越しカウントダウンを見ていて、日テレだけカウントダウンする
事無く淡々とガキ使のスペシャルやっていたのが新鮮だったり。
ちょっこりボリュームレンダリングについて調べたりTVを観たりしながら
ぐうたら過ごしたり。
ベンチマークプログラムである所の3DMark6を入れてみたり。表示解像度が
変えられないという所はあるのですが、大体どのベンチマークも1fps以下と
いう感じで全く勝負になっていないという結果でした(^^;
オンラインに繋がないとスコアが見れないのがイマイチでしたが、
スコアは459でした。相当遅い方です。因みにfastestは13046....って
どないやねん(^^; fastestシステムはCPUはQuadCoreの2.66GHz、
ビデオはATI RADEON X1950 CrossFire Edition というやつらしい。
3GHzのPentium4と比べてもCPUだけでは3倍がせいぜいだと思いますので、
残りはビデオで稼いでいるのだろうなぁと推測します。
それにしても、グラフィックカードの性能だけでこれを60fpsにできるの?
という所の方に驚きを感じたりします。逆に、ベンチマークを除けば、
ビデオをこれだけ使うアプリはゲームくらいしか無い訳で、あればある
だけ性能を使う唯一の用途なのかも。
で、システムの詳細を見てみると、非常に細かな情報が採取されていて驚きました。
その中で、以前、真のプロセッサ数の区別
はできるのか?という事を書いたのですが、3DMarkの結果を見てみると、
PhysicalProcessors×1とLogicalProcessors×2という形で表示されており、
ハイパースレッドとDualコアの区別が付くような表示になってました。
他にもメモリの物理的な実装(どのスロットにどういう容量のDIMMが載っているか
まで表示できている)や、ビデオドライバのバージョン、現在起動中の
プロセスやなど、ベンチマーク実行時の情報がことこまかく表示されてました。
これだけ情報が細かければ、例えばアプリが落ちる時の環境の情報表示としても
十分な感じがするので、デバッグ情報としても有効に利用できる感じが
しました。
何気にWebを眺めていたら、USB-SCSI変換するアダプタの存在を
知りました。で、それを使ってエプソンのスキャナであるところの
GT-5000WINSを接続して使う事ができるらしいという情報を得てみました。
X68kに接続して使っていたスキャナですが、PCの方にはSCSIボードを
搭載しなかったので、X68kをしまいこんだのと同時にスキャナも
しまいっぱなしになっていました。そういうのがあるのならば、
折角なので使えるようにしてみようかと思った次第。で、更に調べて
みたところ、変換自体は良いのですが、SCSIコネクタがピンタイプになる
ようで、アンフェノール(セントロニクスとも言うらしい)にするのに
もう一段変換が必要臭い。明日探してみるか....