Hironytic Status

ひろんの開発日誌

BAutolock と Autolock テンプレート

2009-01-06 10:27:13 | 情報
SHINTAさんのとこHaiku Coding Guidelines の中に BAutolock を使うなという記述があることを始めて知りました。でも代わりに使えという Autolock テンプレートがどこにあるのかわからなかったのでググって見ました。せっかく調べたので書いておきます。

結局、Haiku 内で Autolock テンプレートを見つけることはできなかったんですが(どこかにあるのかな?)どうやら Haiku Coding Guidelines は、OpenTracker の Coding Guidelines を元にしているようです。全く同じ表現があります。で、OpenTracker には、AutoLock.h というものがあるのでこれが Autolock テンプレートではないかと思います。ただし、このクラス、もともとは Be Newsletters - Volume 4: 1999 にあるものではないかと思いますが。

んでもって、BAutolock と Autolock テンプレートの違いといえば、
  • BAutolock はテンプレートじゃないので引数に BLocker と BLooper をそれぞれとるバージョンが存在する。一方、Autolock テンプレートは Lock()、Unlock()、IsLocked() を実装するクラスなら何にでも適用できる。(具体的には BBitmap にも適用できる)
  • BAutolock はコンストラクタでロック、デストラクタでアンロックという使い方しかできないが、Autolock テンプレートはコンストラクタでロックせずに必要になったときにロックしたり、任意のタイミングでアンロックができる。
くらいのものみたいです。

BAutolock は「スコープに合わせて自動的にロック・アンロックする」という目的だけを持つ非常にシンプルなユーティリティとして提供されているものだと思うので、サードパーティのアプリケーションが目的に合わせて BAutolock を使うことは特に問題ないと思います。
Haiku Coding Guidelines はあくまで Haiku を作るときのガイドラインなので、Haiku にパッチを送ったりするのでなければ、他のカッコの位置とかのルールと同じ程度に参考にすればいいんじゃないかと思いました。

[CoveredCalc] Haiku 環境の更新とか

2008-11-27 09:39:33 | 開発状況
休日はこたつプログラミングを再開。寒いもん。
ノートPC は Aspire One に変わっているんですけどね。Aspire One からリモートデスクトップで別の部屋にあるメインマシンにログオンし、そこから VMware を起動して作業したりとか‥‥なんか間違ってますね。

久々に Haiku の環境を更新。r28724 になりました。CoveredCalc の Issue 38 が治ってました。まあ BeOS ではきちんと動いてたから Haiku の互換性の問題だとは思ってましたが、せっかくなので調査してフィードバックしたいと思いつつも、作業する余裕がなくて放置していたら治ってたという次第です。

ちょっと中途半端ではありますが、Windows 版の XML 言語ファイル対応がほぼ終わった状態です。BeOS/Haiku 版がまったくビルド通らなくなっているのでこれから対応を入れていきます。そろそろいったん google のリポジトリにコミットしなきゃいけないなーと思っているところです。

[CoveredCalc] v2の状況など

2008-11-13 08:46:01 | 開発状況
本業の仕事から帰ってきたあとの時間を利用して、コツコツ CoveredCalc のコーディングをしています。先週末から突然仕事が忙しくなったので今週は全然開発できてません。昨日も家に帰ってきたのが午前1時半。6時には起きないといけないので、とても開発に割く時間なんかなし。悲しい‥‥。

ここのところは、Windows 版の言語ファイルをリソース DLL から XML 形式に変更中です。言語ファイルの定義は、(メッセージなどの)文字列、ダイアログのレイアウト、メニューの 3 つなんですが、そのうち文字列については XML 形式に移行できています。リポジトリにはまだコミットしてませんが。現在はダイアログのレイアウトの対応中です。もともと Windows 標準のダイアログリソースを使ってたので何にもコードが必要なかったところを、XML 形式で書かれたレイアウト情報を元に自分でダイアログ内のコントロールを配置していく実装がいるのでそれに手間がかかってます。メニューはまだ手を付けていませんが、XML 形式ではただの文字列定義になる予定で、そこからメニューを作るところを実装する必要があります。

ダイアログについてもう少し詳しく書くと、CoveredCalc には、カバーブラウザ、バージョン情報、カバーの情報、設定、キーマップの 5 つのダイアログがあります。このうち、カバーブラウザ、バージョン情報、カバーの情報については移行完了済み。キーマップも実装はしましたが、設定ダイアログがないと呼び出せないので確認がまだ。設定ダイアログはこれから実装というところです。

まあでも、XML 形式に移行してしまえば、今後、言語ファイルを作るのは楽になりそうです。これまでは英語の言語ファイルを作るときなんか、Virtual PC で英語版 Windows 起動 → VC6 (英語版) 起動 → リソースを変更してビルドという流れだったので。それがエディタだけで済みます。あと、開発環境を Visual C++ 2008 Express Edition にした関係でリソースエディタがなくなっているのでその点も楽になるかもとか。

なお、現時点で BeOS/Haiku 版はビルドが通りません(爆)
まあ、BeOS/Haiku 版の言語ファイルも変更する予定があるので共通部分だけ変更してるからなんですけどね。

[CoveredCalc for Windows] Unicode ビルド

2008-09-17 23:11:21 | 開発状況
CoveredCalc for Windows で Unicode 版としてビルドできるようにしました。
これまでの MBCS 版では、例えば日本語版の Windows なら Shift_JIS で使える文字しか扱えません。
Unicode 版では、Unicode 全部の文字が扱えます。もちろん、フォントが対応していないとダメですが。
代わりに、Windows 98/Me では動作できません。

次バージョンを予定している CoveredCalc v2 では、Unicode 版でリリースする気の方が強くなってます。
Windows 98/Me で動作しないことに不満がある人がもう少ないんじゃないかなあと思うので。

スクリーンショットはいろんな言語の文字を同時に表示できているところ。
まあ、BeOS 版だと最初からこれが当たり前なわけですが。

[CoveredCalc for Haiku] ビルド環境構築

2008-09-01 22:37:29 | 開発状況
これまで BeOS 版の開発は BeIDE を使って行っていて、Makefile は公開用バイナリ(デバッグ情報なし)を作るために存在していました。Haiku では BeIDE は存在しないので開発スタイルを変更する必要があります。もっとも、BeIDE も相当古い開発環境でそれほど高機能ではなく、さらにプロジェクトファイルがバイナリなので何がどう変わったのかわかりづらいという不満も以前からありました。なので、この機会に BeOS 環境でも BeIDE を使わないようにしようと思ってました。
それから、BeOS 版の Makefile は OS が提供している makefile-engine を使っていたのですが、少なくとも現状の Haiku では makefile-engine がありません。

というわけで、とにかく Makefile を通常ビルドするのに使えるようにする必要があると思い、コツコツ修正していたのですが、ようやく納得のいく状態になりました。また、Haiku 上でもビルドが通るようになりました。これからようやく Haiku 上での開発もできそうです。

ちなみに、エディタは pe を使うことにしました。MPW(Macintosh Programmer's Workshop)の MPW Shell を思い出すような Worksheet がついていてビルドにすごく便利です。‥‥というものの MPW を使ったことはあんまりないんですけどね。もうほとんど覚えてないし。

Haiku のビルド

2008-08-14 14:31:19 | 情報
CoveredCalc Haiku 版を作るための作業としてまずは Haiku を用意することにしました。うちでは既に実機は用意できない状態なので、Windows 上の VMware Player を使います。なお、CoveredCalc for BeOS 1.10.0 は実は VMware 上の BeOS で開発しました。(^^;

Haiku Files にある vmware イメージだと開発ツールが付属しないのですが、Senryu だと余分なものがありすぎるということで、ソースからビルドすることにしました。その方が Haiku の更新も追いやすいですしね。

だいたい、次のサイトを参考にさせてもらってビルドに成功しました。
・muraiさんのHaikuインストールメモ(Linuxホスト編)
・SHINTAさんの白 Be 全般

実際は試行錯誤してるのでこのとおりやってうまくいくかどうかはわかりませんが。メモとして残しておきます。

  1. VMware Player とか、VMX Builder とかはインストールされているとして。
  2. Haiku ビルド用の Linux として Ubuntu の日本語ローカライズドVMware用仮想マシン をダウンロードします。ubuntu-ja-8.04-vmware-i386.zip を使いました。
  3. ダウンロードした Ubuntu を VMware Player で起動して、Haiku のビルドに必要なものを揃えます。
    sudo apt-get install subversion autoconf automake texinfo flex bison gawk build-essential

  4. Haiku buildtools のチェックアウト
    svn checkout http://svn.berlios.de/svnroot/repos/haiku/buildtools/trunk buildtools

  5. Haiku ソースのチェックアウト
    svn checkout http://svn.berlios.de/svnroot/repos/haiku/haiku/trunk trunk

  6. Jam のビルド
    cd buildtools/jam
    make
    sudo ./jam0 install

  7. Haiku buildtools のビルド
    cd trunk
    ./configure --build-cross-tools ../buildtools/ --include-gpl-addons --use-gcc-pipe

  8. trunk/build/jam/UserBuildConfig を作成。中身は次のとおり。

    HAIKU_VMWARE_IMAGE_NAME = haiku.vmdk ;
    HAIKU_IMAGE_SIZE = 256 ;

    AddOptionalHaikuImagePackages Development Pe ;

    # Canna
    AddFilesToHaikuImage beos system add-ons input_server methods : canna ;

    # Timezone
    AddSymlinkToHaikuImage home config settings
    : /boot/beos/etc/timezones/Asia/Tokyo : timezone ;

    # Keymap
    AddFilesToHaikuImage home config settings : <keymap>Japanese
    : Key_map ;

    # Sound
    AddOptionalHaikuImagePackages OpenSound ;


  9. Haiku のビルド
    cd trunk
    jam -q @vmware-image

  10. trunk/generated の中に haiku.vmdk ができているので、これをドラッグ&ドロップで Windows 側に持ってくる。
  11. Haiku.vmx ファイルを用意。Senryu のものを流用してディスク関係のところだけ変えました。VMX Builder で Haiku.vmdk 以外に Work.vmdk を新規 HDD として用意。Haiku.vmdk は Haiku の更新のたびに作り直すと思うので、消えてほしくないものはこっちの HDD に入れておきます。
  12. Haiku.vmx ファイルを VMware Player で起動。あと、DriveSetup で Work.vmdk の方の HDD を BFS で初期化しておきます。


ちなみにてきとーな MP3 ファイルを再生させたらサウンドも鳴りました。いい感じです。

[CoveredCalc] version 1.10.0 リリース

2008-08-08 00:01:29 | 開発状況
CoveredCalc version 1.10.0 を リリースしました。
キー定義のカスタマイズがメインです。
1.9.0 をリリースしたのが 去年の 11 月。もともとキー定義のカスタマイズも 1.9.0 で実現する予定でしたが、規模が大きくなるので見送ったのでした。ただ、1.10.0 のリリースまでにこんなに時間がかかるとは思ってませんでした。まあ、CoveredCalc の開発ばかりしてたわけでもないので、放置期間もあったわけですが。(^^;;;

さて、この次のバージョンでは、少し大幅な変更を加えたいなと思っています。
Windows 版を内部 Unicode 動作のアプリにするとか(現在は ANSI/MBCS 動作です)、Win64(64ビットWindows)への対応準備とか。
BeOS 版は Haiku バージョンを作りたいとか。
他にもいくつか、いい機会だと思うので、根本的なところを修正していく予定です。
リリースまでには 1.10.0 にかけた時間よりもっとかかるかもしれませんね(爆)

[CoveredCalc for Windows] メッセージの横取り

2008-07-24 10:27:01 | 開発状況
Windows版のおはなし。

現在開発中の CoveredCalc のメインはキーカスタマイズなのですが、そのカスタマイズを行うダイアログではどのキーとどの機能を結びつけるかを設定します。「どのキー」を指定するためにキー入力して押されたキーを表示するコントロールを作りました。作りましたっていってもただの Edit コントロールをサブクラス化しただけなんですが‥‥。このコントロールにフォーカスを移した状態で、例えば Shift キーと H キーを押せば、コントロールに「Shift+H」と表示されて Shift+H に対する機能の割り当てができるわけです。
ところが、Alt キーと他のキーを押したとき、コントロールには「Alt+××」と入力されるのですが、そのあと、ダイアログ上のアクセスキーが反応してしまって、別の機能が実行されます。例えば「割り当て(A)」というボタンがあるのですが、Alt+A を押すとこのボタンが押されたことになってしまいます。
‥‥というのが今月のあたまに起こっていたこと。

WM_SYSKEYDOWN メッセージで処理したよと返してやってもシステムが勝手にやっちゃうみたいなんで、BeOS の BMessageFilter みたいに通常のディスパッチに流れる前にメッセージを横取りして、場合によってはディスパッチしなきゃいいんじゃない?と思って、自分のメッセージループにメッセージを横取りする仕組みを加えました。ところが、ダイアログ上ではメッセージが横取りできませんでした。それもそのはず、モーダルダイアログが表示されているときは、Windows API の DialogBox() 関数の中の Windows の用意したメッセージループにいるのです。自分のメッセージループでは横取りできません。ぐはー。
‥‥というのが 2 週間ほど前に起こっていたこと。

どうやって解決しようかなー、MFC みたいにモーダルダイアログに見えるけど実はモードレスダイアログで作って自分のメッセージループを回していましたー的な方法はどうかなー? と思いながら、すごく面倒くさくなって 2 週間プログラムを放置してました。おかげでドラクエ IV が結構進みました(爆)
昨日になって、ようやく、その似非モーダルダイアログを実装してみました。その結果、期待した動きを得ることができました。つーか実装に 1 時間もかかってない気が‥‥。2 週間の放置はなんだったんだろう。

Subversion のビルドとか

2008-05-29 11:45:21 | 近況
CoveredCalc は Windows 版で一応キーカスタマイズのダイアログができた程度です。BeOS 版をこれから実装。キー入力コントロールを作るところから。遅遅として進みません。
それはそうと、そろそろ Haiku 版も作ってみたいところ。ちょこちょこ Haiku の VMware イメージとかもいじってみたりしています。

ところで、Haiku でも使われている Subversion はファイル名やログメッセージを内部で UTF-8 として保存しています。svn クライアントはローカルの文字コードと UTF-8 の相互変換を行ってくれますので、ユーザーは特に気にしなくていいのですが。‥‥ですが、BeOS 版としてパッケージされているやつは非 ASCII なログメッセージに対応していません。こんな感じになります。
baron@:~# svn log http://coveredcalc.googlecode.com/svn/trunk -r HEAD
------------------------------------------------------------------------
r42 | hironytic | 2008-03-22 18:56:14 -0800 (Sat, 22 Mar 2008) | 7 lines

?\232?\168?\173?\229?\174?\154?\227?\131?\128?\227?\130 ....

この現象は 4 年ほど前、Subversion 1.0.0 リリースの直前頃に経験しているのでなんとなくわかってます。きっと、BeOS 上でビルドしたとき APR-Utility の apu.h で APU_HAVE_ICONV が 0 になってたんだろうと想像しています。APR_HAVE_ICONV が 0 だと APR-Utility で変換が必ず失敗するんで、svn は非 ASCII 文字を仕方なく文字コード表記にするのです。ただ、BeOS はローカルの文字コードが UTF-8 なので、特に変換を行わないように改変すればそれで問題ないんです。

というわけで、今まで BeOS 上ではこのときビルドした version 0.37 (1.0.0-RC1) を使っていたのですが、この機会に(何の機会だ?)最新 stable の 1.4.6 (のクライアント)をビルドしてみようと思いました。

‥‥結果からいうと、make 中にリンクエラーが出て、そこで挫折しています。細かいことはもう少し調べてからまた書きます。

ちなみに Subversion は大きなバージョンアップである 1.5.0 がそろそろ出そうな感じなんですけどね。

gcc をバージョンアップ

2008-05-05 11:19:11 | 近況
ふと思いついて、BeOS 版開発環境の gcc を新しいのに入れ替えてみることにしました。
BeBits にある gcc-2.95.3-beos-070218です。
以前にもそれを考えたことがあったんですが、BeOS 環境が 1 つしかなく、その環境の構築にも苦労していたので、入れ替えて問題があって元に戻せなかったら嫌だなあという思いがあって実行していなかったのでした。今回、VMware Player の仮想マシンで BeOS の開発をできる環境ができたので、すぐに元に戻せるという気楽さからやってみました。

入れ替え自体は README に書かれているとおりで簡単にできたのですが、それで CoveredCalc を make して実行すると Segment Violation になりました。
最適化を OFF にするとこの問題は発生しません。それで、このページを見たところ、どうやら、
・Be コンパイラは、自動的に生成された関数を、それが使われているところのオブジェクトファイルに入れる。これは gcc でいうところの multiple symbol spaces。
・このバージョンの gcc は最適化が OFF のときのみ multiple symbol spaces を使う。
・古いコンパイラでは dynamic_cast などで生成される typeinfo-functions が使っているオブジェクトファイルに入っていたが、このバージョンでは最適化時に single symbol space を使うので‥‥。
・(※私の英語読解力が低いのでよくわからないが)、Beライブラリが持ってる BDirectWindow-typeinfo-function が変なので困ると。

それで、この gcc にはなんか対処は入ってるみたいなんですが、それでも CoveredCalc は落ちているわけで、ためしに multiple symbol spaces を強制してみました。(コンパイルオプションに -fmultiple-symbol-spaces を追加)
すると落ちなくなりました。ばんざーい。

で、実際にこっちの gcc を使うかどうかについてはまだ悩むなぁ。