白 Be 2006 年 2 月

 BeOS 及びパソコン関連の日記です。といっても毎日書いているわけではありませんが(^^;)。タイトルは「はくび(白眉)」と読んで下さい。BeOS が最も優れた OS になってくれたらいいなぁ、などと期待しながら……。
 各日記の日付の部分は、その日記のアドレスへのリンクになっています。他の雑談や日記からこの日記へリンクを張る際の URL 取得用としてご利用下さい。


<< 前の白 Be ] [ 翔星 Be ランド Home ] [ 次の白 Be >>


2006/02/27 日本語インライン入力 / 続 

 テストプラグラムを作って IM 関連のメッセージを眺め中。
 BView のフラグに B_INPUT_METHOD_AWARE を追加すると(そしてそのビューにフォーカスを当てると)、IM 関連のメッセージが BView に届くようになる。
 IM メッセージは what が常に B_INPUT_METHOD_EVENT。"be:opcode" フィールドを見て、IM メッセージの種類(B_INPUT_METHOD_STARTED、B_INPUT_METHOD_ENDED など)を判別する。


2006/02/26 B Intel Core Duo 対応マザーボード一覧表

 2ch の Core スレを見て、Intel Core Duo (Yonah) 対応のマザーボードについてまとめてみた。Core 2 966 レスまで、Core 3 12 レスまで。

メーカー型番サイズチップセット発売予定日予価拡張スロット備考
AOpeni945GTm-HLmicroATXi945GT / ICH7M2 月下旬未定PCI-e x16(1)
PCI-e x1(1)
PCI(2)
DIMM(2)
APC Hotline 1/7
i945GTt-VFAMini-ITXi945GT / ICH7M未定未定PCI-e x1(1)
Mini PCI(1)
SO-DIMM(2)
P-ATA(1)
S-ATA(2)
Akiba2GO! 2/1
PCeek 1/10
i975Xa-YDGATXi975X / ICH72 月下旬37,000 円前後PCI-e x16(2)
PCI-e x1(2)
PCI(2)
DIMM(4)
S-ATA2(5)
hermitage 2/2
APC Hotline 1/14
ASUSN4L-VM DHmicroATXi945GT / ICH7M未定未定PCI-e x16(1)
PCI-e x1(1)
PCI(2)
DIMM(2)
P-ATA(1)
S-ATA2(2)
eSATA(2)
PCeek 1/9
DFI945GT-MGFmicroATX945GT / ICH7M4 月未定2ch 2/18
ECS945GT-MmicroATX945GT / ICH7M-DH3 月未定2ch 2/18
PF23ATX975X / ICH7R3 月未定2ch 2/18
GIGABYTEGA-8I945GMF-Y-RHmicroATX不明未定未定DIMM(4)
S-ATA2(4)
写真
GA-8I945GTMF-Y-RHmicroATXi945GT / ICH7M-DH3 月未定PCI-e x16(1)
PCI-e x1(1)
PCI(2)
DIMM(2)
S-ATA2(1)
Akiba2GO! 2/1
電腦領域 HKEPC
MSI945GT SpeedstermicroATX / ATXi945GT / ICH7R3/1628,800 円前後PCI-e x16(2)
PCI-e x1(1)
PCI(0/2)
DIMM(2)
P-ATA(1)
S-ATA(4)
PC Watch 2/22
APC Hotline 2/11

 欲しい機能を考えてみると……。
 グラボ用に PCI-e x16 が 1 つ、サウンドと GbE 用に PCI が 2 つ、OS 起動用と光学ドライブ 2 つ用に P-ATA が 2 つ、あたりかな。今時 P-ATA 2 つなんてのもなかなか無いだろうから、1 つで我慢しようか。
 現時点で発売日と価格が判明している MSI のマザーにしようかねぇ。


2006/02/26 A 日本語インライン入力 

 日本語のインライン入力って、どうやって実現するんだろう? MuTerm のソースを眺めてみようかな。


2006/02/25 B yu-Link Ver 3.2 β

 限定公開
 バックアップ、リストア、エクスポートの UI を実装。


2006/02/25 A yab βテスト

 yab Interpreter のβテスターになってみた。yab は Yabasic の移植ものということでいいのかな?
 まだ正式版ではないのでインストール作業が必要だが、とりあえず起動に成功。サンプルプログラムをいくつか動かし、ウィンドウやボタンの動作などを見てみた。
 俺は VB 知らないけど、VB みたいなものなのかな〜って思った。


2006/02/19 グラボメモ

・ASUS Extreme AX550GE/TD
 GE が付かずただの TD のモデルはファン付きみたいなので注意。

・GIGABYTE GV-RX60P256DP
 ドスパラでは現在販売してないようだけど、人気過ぎたのか、不具合があったのか……。


2006/02/18 C キャストとポインタの値

 こんな感じのテストプラグラムを作ってみた。

	NonVirtualDerived_N*	nvd_n = new NonVirtualDerived_N();
	NonVirtualBaseA*		nvba = nvd_n;

	cout << "NonVirtualDerived_N: " << nvd_n << endl;
	cout << " as NonVirtualBaseA: " < nvba << endl;

 NonVirtualDerived_N は NonVirtualBaseA から派生しているクラス。NonVirtualDerived_N のインスタンスを作り、それへのポインタを格納した時と、NonVirtualBaseA へアップキャストしてポインタを格納した時とで、ポインタの値が変わるのかどうかを見ている。
 ZETA 1.1+GCC 2 で試した結果、基底クラスや派生クラスが仮想関数を持つかどうかに関係なく、単一継承の場合と、多重継承の場合の最初の基底クラスへのキャストではポインタの値は変わらず、多重継承の 2 つ目の基底クラスへのキャストではポインタの値が変わった。
 ポインタの値が変わらない場合は reinterpret_cast しても正しく動作するが、変わる場合はダメだ。
 しかし、今回の実験結果が、GCC のバージョンが上がった場合や他の OS の場合でも同じになるのかどうかは不明。
 テストプラグラムの全ソースコードと実行結果はこちら


2006/02/18 B クエリの謎

 MP3 の ID3 タグを属性にして、クエリで検索してみようと思い立った。最終的には出来たのだが、当初はうまくいかなかった。
 右は、ZETA メニューの検索で表示されるダイアログの、現在の状態。「属性で検索」にして、ファイルタイプを「MPEG audio file」にすれば、「Artist」やら「Title」やらで検索できる。しかし、当初はこれらの属性が表示されず、検索できなかった。
 いろいろ試行錯誤しているうちに表示されるようになったのだが、何で表示されるようになったのかは不明。id3attr を -i オプション付きで起動し、属性インデックスを作成したから表示されるようになったのだろうか? でも、ZETA では最初から Artist などの属性は登録されているようだし、id3attr 実行時もエラーメッセージが表示されて属性インデックスの作成には失敗した模様だしなぁ。


2006/02/18 A MDX Suite for BeOS のページで実験

 Google で「MDX Suite for BeOS」と検索すると、ちゃんと MDX Suite for BeOS の URL が表示されるのは良いのだが、要約文が Main.htm のものになってしまう(_BL_BeWare_MDXSuite.htm ではなく)。
 そこで、MDX Suite for BeOS のページへのリンクを、_BL_BeWare_MDXSuite.htm?DefaultStyle とするようにしてみた。MDX Suite for BeOS のページから要約文を作成してくれるようになるかな?


2006/02/17 問題はグラボを何にするかということ

 近々、Intel Core Duo のマシンを組もうと思っているけど、一番悩ましいのはビデオカードを何にするかということ。種類が多すぎて訳分からない。
 せっかく CPU が省電力&低発熱なのに、グラボが爆熱というのでは全く意味が無くなってしまうから、ローエンドでファンレスのやつでも買おうかな。それでも今の GeForce2 MX400 よりはだいぶ性能が上がるんじゃないのかな。別に 3D ゲームをやる訳じゃないし、十分かなと。
 ちらっと雑誌を見たら、ASUS の EXTREME AX550 GE/TD は安い割に性能がよいらしく、しかもファンレスでヒートシンクが小さめなので、発熱も少ないんじゃないのか。


2006/02/14 reinterpret_cast 調査 / 続 2 

 どうやら、同じ実体でも、(安全なちゃんとした)キャストによってポインタの値は変わることがある模様。つまり、

SomeClass	some = new SomeClass();
AnotherClass*	ano = dynamic_cast<AnotherClass*>(some);

のようなコードにおいて、some と ano は 1 つの実体を指しているが、値が違うことがありえる。reinterpret_cast でキャストする場合には、some と ano が変わらない場合のみ、正しく動作する。
 肝心の、どんな場合に some と ano が変わるのかをまとめたページを見つけることが出来なかったものの、ポインタの値が変わるのは vtable(vtbl、仮想関数テーブル)がらみらしいことまではつかめた(実際には vtable というよりはクラスのメモリ配置の問題なんだろうけど)。
 単一継承ならば、vtable は 1 つなので、キャストによってポインタの値は変わらない。

class SomeClass {
	virtual	SomeFunc();
}
class AnotherClass : public SomeClass() {
}

しかし、基底クラスが vtable を持たず(仮想関数が 1 つも無い)、派生クラスが vtable を持つ場合は変わるのかもしれない(未確認)。
 多重継承すると、vtable が複数になるので、1 つ目の基底クラスとのキャスト以外ではポインタの値が変わる。

class AnotherClass : public ThirdClass, public SomeClass {
}

 ただし、これは言語仕様上なのか、それとも、実装によっては 1 つ目のクラスでポインタの値が変わってそれ以外で変わらないことがありえるのか、そこまでは分からなかった。
 この辺りについてまとめている情報、または、クラスがメモリ上でどのように配置されるかという情報をご存じの方、教えて下さい。


2006/02/13 B reinterpret_cast 調査 / 続  

 ん、さっきのページの親ページを発見。これ見ると、「多重継承を使っている場合に」問題をひきおこすと書いてある。
 するともしかして、自分のテストプラグラムでの結果のように、多重継承の 1 つめのクラスとの型変換は大丈夫なのか(テストプラグラムの結果がたまたま大丈夫だったというわけではなく、仕様的に保証されているのか)?
 どうやら、クラスが派生した場合のポインタの取り扱いについて勉強する必要がありそうだ。同じ実体でも、どのクラスと見なすかによってポインタの値は変わるらしい?


2006/02/13 A reinterpret_cast 調査 

 ここなどを見ると、reinterpret_cast で派生関係を処理するのは NG みたい。
 やりたいのは、new で確保したクラス変数のポインタを BMessage に詰めて、メッセージを受け取った側でそのクラス変数にアクセスするということ。しかし、派生関係を正しく解釈できないのなら、違う方法を採るしかないな……。
 面倒くさいけど、真面目に BArchivable::Archive() を実装するか……。


2006/02/12 C reinterpret_cast は分からない

 reinterpret_cast はどこまでの型変換が出来るのだろうか? yu-Link 開発中にハマったのでテストプラグラムを作ってみた。

	BApplication	app("application/x-vnd.test");

	BButton*	h = new BButton(BRect(), "myButton", "label", NULL);
	h->SetTimeout(777);
	void*		i = h;

	BControl*	j = reinterpret_cast<BControl*>(i);
	cout << j->Timeout() << endl;
	
	BInvoker*	k = reinterpret_cast<BInvoker*>(i);
	cout << k->Timeout() << endl;

 BApplication は BButton のインスタンスを作るために必要なので仮に置いてあるだけで、本筋には関係ない。
 BButton は BControl から派生しており、BControl は BView と BInvoker から多重継承している。
 このテストプラグラムでは、BButton のインスタンスを作成し、void 型として変数 i に格納する。ここで、reinterpret_cast<BButton*>(i) とすればもちろん正しくキャストできるが、BButton 以外のクラスにキャストするとどうなるのか?
 変数 j では、BControl としてキャストしており、変数 k では BInvoker としてキャストしている。
 reinterpret_cast を使わずに、h を直接 j や k に代入すれば、それぞれ正しく動くはずだ。しかし、このテストプラグラムで実験したところ、reinterpret_cast 経由だと、BControl にキャストしたときはうまく動いた(Timeout() が 777 と表示された)が、BInvoker にキャストするとうまく動かなかった(Timeout() が 0 と表示された)。
 想像するに、多重継承の 2 つめ以降の親クラスとしてキャストするとうまくいかないのではと思うが、本当のところはどうなのか?


2006/02/12 B ZETA の入手経路

 こんなページがあるんだけど、ここから買えるのかな? 価格が「発注個数によります」って書いてあるから、どちらかといえば法人向けみたいだけど。


2006/02/12 A 2 年半かぁ……

 yu-Link の開発開始は 2003 年 6 月。
 既に 2 年半が経過しているが、未だに正式リリースできないとは。


2006/02/11 MDX Suite for BeOS 紹介

 MDX Suite for BeOS が、移植元の GORRY さんのページで紹介された。


2006/02/07 yu-Link 開発再開

 とりあえずこれ以上の機能拡張はひとまずやめにして、品質を高めるバージョンアップをしようと思う。しかし、やるべきことがいっぱいありすぎてどれからやればいいのやら。道は長い……。


2006/02/05 BeWare 機能一覧表更新

 BeWare の機能一覧表を更新
 MDX Suite for BeOS の情報を更新。


2006/02/04 B MDX Suite for BeOS Release 2

 公開
 MDX エンジンライブラリが Lib MDX となり、また、MDX detractor の設定やライブモニタなどを行う MDX detractor コントローラを追加。


2006/02/04 A 5 万 3 千円かぁ……

 AKIBA PC Hotline! によれば、Intel Core Duo T2500 (2GHz) の最安値は 2/3 現在 53,340 円。
 昔 Athlon MP 1800+ を買った時は 1 個 24,000 円くらいだった気がするから、それと同じ 48,000 円くらいにまで値下がりしてくれるといいな〜なんて思うんだけど。


2006/02/02 MDX detractor コントローラ進捗状況

 ものすごい馬鹿をやっていた。いつの間にか、ライブモニタにエンバグしていて、描画の更新が 10ms 毎ではなく 100ms 毎になっていた。原因は凄く単純で、メンバ変数にしなければいけない変数をローカル変数にしてしまっていて、毎回初期化されて同じ値になっていたこと。バグを見つけた時には、我ながら馬鹿さ加減にあきれてしまった。細かい音符の描画がいまいちだなぁと思っていたのだが、こんなことになっていたとは……。


2006/02/01 Winny の技術

 金子勇著、アスキー刊。Winny の作者が Winny を技術面から語った本。
 Winny は、一般的には匿名性の高い P2P ソフトだと思われているが、この本を読むと、実は匿名性よりもネットワーク効率を重視して設計されていると書かれており、ネットワーク効率を上げるために苦心した足跡が記されている。
 P2P によるファイル共有の場合、すべてのノード(参加している PC)に検索クエリを投げていたら、参加するノードが増えてくると O(N2) のオーダーでトラフィックが増大するので、あっという間に帯域が満杯になってしまう。
 Winny が画期的だと思ったのは、ノードを上流・下流に分類し、検索クエリを上流のみに流すようにしたことだ。P2P ではノード同士が対等なので、すべてのノードを平等に扱わなければならないという固定観念に陥ってしまうが、Winny ではあえて、回線速度に応じてノードの役割を変えている。早い回線のノードを上流としてたくさんの情報が集まるようにすることで、遅い下流のノードは上流のノードだけ検索しに行けばたいていの情報が見つけられるようになる。
 その他にもたくさんのアイディアが詰め込まれて出来上がったのが Winny であり、非常によく練ってあるという印象だ。
 それから、技術とは関係ないが、無機質なコンピュータをネットワークで結ぶと、人間社会のようなコミュニティーの側面を帯びてくるのは面白い。


<< 前の白 Be ] [ 翔星 Be ランド Home ] [ 次の白 Be >>


最初前先頭次最後ホーム