2005年07月31日

Vista

新しいWindowsは良い感じらしい

ところでβ1は技術的なデモのためでβ1の評価はしたらダメってどっかで読んだ気がするけどこの記事でめちゃレビューしてるけどいいのかなw

クラッシュしづらい、セキュリティ性が高い、というのは毎度の売り文句なのでスルーするとしてMacで言うSpotlightみたいなのがあるらしい。Spotlightは使ったこと無いけど便利そうだなあ。
LinuxではSpotlightみたいなのは無いのかな。

Linuxで高速ファイル検索をするならslocateがあるし、GoogleデスクトップサーチみたいなのはBeagleがある。個々のプログラムでは便利なのがあるけどそれぞれの機能がOSとリンクしてるのはWindowsやMacの利点だよなぁ。
もちろんリンクしていないからこそ、それぞれ自分の好きな実装を選べるというのがLinuxの利点と考えられなくもない。
それで俺も高機能だけど重いKDEは使わずにシンプルで軽いXFce4を選んでいるわけだし。


まぉいくらWindowsが進化してもマシン1台で完結するWindowsより、ネットワークありきで複数台のマシンをシームレスに使えるLinuxの方が使ってて便利だし楽しいしワクワクするのでメインで使うのはLinuxだな。
ネットするぐらいならFirefoxとATOKがあればLinuxもWindowsも全く同じように使えるわけですが。

2005年07月29日

GEF使ってみた

仕事であるモデルをグラフィカルに表示するアプリを作ると言うことでEclipseのサブプロジェクトで作成されているGEF(Graphical Editing Framework)を使ってみた。

主な情報源は
ObserveEclipse

名前の通りグラフィカルに何かを編集するためのフレームワークで、これを使ってUMLを作成するようなプラグインもある。

とりあえず使ってみての感想は「もっと前から使っておけば良かった」という感じ。
ただ本格的なツールを作るためのフレームワークなので軽く使うにはちょっと複雑かな。
でも慣れれば簡単なツールを作るのも楽かも。

フレームワークの概要としてはMVC(モデルビューコントロール)で何らかのモデルをグラフィカルに表示、モデルに対して動的に編集可能(ダブルクリックするとモデル内にエディタが開くとか)

今の仕事は何らかのデータをグラフィカルに表示することが多いのでGEFを自在に使えるようになるとかなり便利そう。
ちょっとコードを書くだけでいろいろ複雑なこともできるみたいだし。

しかし日本語のドキュメントが相変わらず少ないのが辛いなぁ。

2005年07月28日

RAIDのエラー

Gentooマシンをemerge -u world してetc-updateして再起動するとなんかRAIDが認識しなくなった。
バージョンアップとRAIDがおかしくなったかどうかの関連性は不明。

とりあえずdmesgに以下のようなエラーが出ていた。
md: raidstart(pid 6215) used deprecated START_ARRAY ioctl. This will not be upported beyond 2.6
md: invalid raid superblock magic on hdd1
md: hdd1 has invalid sb, not importing!
md: autostart failed!

/proc/mdstatは以下のような感じ
Personalities : [linear]
unused devices:

md0をmountしても失敗。
う~む・・・。
何が原因なんだろうraidtabも以前からいじってないし。
hdd1はそれだけでmountすると正常にマウントできる。
謎。

試しにmkraidをもう一度してみる。
# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block

エラー無く終了。/proc/mdstatを確認するとRAIDが正しく認識していた。
mountすると正しくマウントされる。正常だ。ファイルも残っている。

でも再起動するとまた同じ現象が・・・。
えー、以前は再起動しても大丈夫だったような気が・・・。

う~ん、mkraidすれば良いことだけどなんか気持ち悪いな。

2005年07月27日

GigaBitLanの設定

昨日TurboLinuxマシンをひさびさに再起動するとネットに接続できなくなったので焦った。
原因はギガビットLANのモジュールがロードされていなかった事。
家のLANをギガビットにしてからそこそこたっているのでギガビット化が原因だとはちょっと気がつかなかった。
Linuxマシンはほとんど再起動しないからたまに再起動するとこういう事が起きるな。
新しい設定をしたらそれが起動時に有効になるか確認しておかねば。

TurboLinux 10Fで100M LANからギガビットLANに変更した場合の対応方法
/etc/modprobe.confの
alias eth0 e100

alias eth0 e1000
に変更。
もしギガビットLANカードを追加で刺したりするとeth1になるのでturbonetcfgなどで設定する必要あるかも。
モジュールのロードは新しいハードの検出で設定してくれるかもしれないし、しないかもしれない。


Gentooマシンは追加でギガビットLANカードを刺したのでeth1を追加する必要があった。
Gentooに追加でギガビットLANカードを使う場合は

emerge e1000してe1000をインストール。
/etc/init.d/net.eth0を/etc/init.d/net.eth1としてコピー
rc-updateでnet.eth1が有効になるように設定
/etc/modules.autoload.d/kernel-2.6にe1000を記述してe1000が起動時に読み込まれるようにする。
/etc/conf.d/net を編集し iface_eth1 の項目を追加。gatewayを変更する場合はgatewayも修正。

で行けた気がする。
作業メモは残してないので間違ってるかも。


どうでも良いことだけどネットワーク上のマシンにニックネームを付けて管理している人がいた。
そういえば最初に入った会社でもサーバにSleipnirなど北欧神話の神獣の名前がサーバに付けられていたなぁ。

俺はたいてい入ってるディストリビューションの名前をマシン名にしたりしてるけどニックネーム派はどれぐらいいるんだろうか。
仕事で使うとディストリビューションは統一するだろうし、同じ目的のサーバが複数台あるのでニックネームで管理する方がわかりやすかったりするのかもしれない。

ニックネームの方が愛着がわいたりもするのかな、まぁどうでも良いことですが。

2005年07月19日

Windowsのスタイル変更が原因でSWTが落ちる

SWTを使ってアプリを作成していて変な現象が発生したのでそのメモ。

昨日まで動いていたアプリが今日動かなくなった。例外のスタックトレースは以下の通り。
Exception in thread "main" org.eclipse.jface.text.Assert$AssertionFailedException: Assertion failed:
at org.eclipse.jface.text.Assert.isTrue(Assert.java:177)
at org.eclipse.jface.text.Assert.isTrue(Assert.java:162)
at org.eclipse.jface.text.source.LineNumberRulerColumn.getBaselineBias(LineNumberRulerColumn.java:812)
at org.eclipse.jface.text.source.LineNumberRulerColumn.doPaint(LineNumberRulerColumn.java:688)
・・・・以下略

どうもStyledTextの行番号を表示するRulerの部分で落ちているようだ。
確かにRulerを表示しないようにするとちゃんと動く。
同じコードで別のマシンに持って行くとちゃんと動く。

動いていた状態から変更したと言えばWindowsのスタイルを変更したぐらいだ。
うそーん、と思いつつ原因を調べることに。

スタックトレースからLineNumberRulerColumn.javaの812行目でアサートに失敗しているのでとりあえずEclipseのソースをCVSから取得。

すると「1行の高さよりフォントの高さの方が小さい事」、とAssertしていた。
う~ん、これが原因か。
確かにスタイルを変更するとエディタ部分のフォントがMS ゴシック以外のフォントになってしまっていたがこれがダメなのか。
そしてそのWindowsスタイルのフォントにはtahomaが設定されていた。

もしかしたら、テキスト描画の縦幅を計算するときは英語のtahomaフォントを使用して、日本語を描画するときは別の日本語フォントが自動で選択されたためにフォントの設定に差異が生じてバグっていたのかもしれない。
とりあえずWindowsのスタイル設定で使用するフォントをすべてtahomaからMS Pゴシックに変更するとエラーが出なくなった。すばらしい。


問題が起こったときに原因を自分で調べることができる。オープンソースバンザイ。

でもクライアントのフォントの設定によって動いたり動かなかったりするアプリはまずいよなぁ。
まぁWindowsにわざわざパッチ当ててスタイル変更できるようにする人は少ないから問題ないか。
それに変なフォント入れてなければ普通にMS ゴシックが使われるからエラーにならないし。
ちなみにこのAssertはjface独自で実装されたAssertなのでjavaオプションでAssertをオフにしてもこのAssertを無効にすることはできなかった。

2005年07月11日

DirectX

ちょっとオンラインゲームを作成したくなった。
本格的なモノじゃなくて技術的なテストのために。

Java信者な俺はもちろんJavaで開発をしようと思ったんだけどオンラインゲームで必要な「ゲーム内での日本語変換処理」をJavaで実現できなかった。(Swingでゲーム作るなら可能だったけど)
一応SDLでそれを実現するのはあったのでSDLJavaを使いつつJNI経由でそのライブラリをいじればできるかもしれないけどそこまで根性はなかった・・。

と言っても仕方ないのでDirectXで作成することに。
DirectXのサンプルを見るとDirectXなGUIが使えるフレームワークでちゃんとIMEが使用できるコンポーネントがあった。
さすがDirectX。
このGUIもなかなかかっちょいい。

しかしJavaの命名規則になれるとC++のはソースが読みにくいなぁ。
まぁ慣れだろうからしばらくすると気にならなくなるだろうけど。

DirectXをちょっといじるとなんか使い勝手の悪い部分がある。
特に画面のフルスクリーンを切り替えるといちいちデバイスが消失するからオブジェクトをそのたびにリセットしないとダメな部分が・・・。
一部はDirectXが管理してくれるけど管理してくれない部分は自分で実装しないといけない。
この辺は何とかならないんかな。

画面の描画もなんかめんどくさいのでその辺を簡単にできるスプライト&スプライト管理ライブラリみたいなのから作り始めるか。
SWTで言うImageRegistryみたいな感じで。
C++いじるのは学生時代ぶりなので激しく忘れているのが不安だけど・・・。

・・・なんか肝心のネット部分にたどり着く前に飽きてしまいそうだ。

2005年07月05日

SWTのImageData

SWTで画像の生データのバイト配列はImageDataで扱う

depthが32の場合は1ドットで4バイト使うので以下のようにすると1ドットの情報が得られる。
4つめのバイトは使われていない模様。アルファチャンネルは別にデータを持ってるしなぁ。

bytedata[( x * bpp ) + ( y * imageWidth * bpp) ] = R
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 1 ] = G
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 2 ] = B
bytedata[( x * bpp ) + ( y * imageWidth * bpp) + 3 ] = ?


よく見たらこれに関しての詳しいドキュメントがあるじゃないか。Standard Widget Toolkit でのJava 2D画像

最初に書いた式では16bitの場合画面が乱れることがあった。どうもImageの横幅が奇数ドットの場合に乱れていた。これに関しても以下のように説明&解決策があった。日本語ドキュメントバンザイ。
と言うことで最初に書いた式では完璧に動作するわけではない。が、めんどくさいので放置。

各ピクセルは3バイトでコード化されていますが、24ビット画像の場合はピクセル中の1ラインのピクセル・サイズは必ずしも3*widthではありません。2ラインのピクセル間で、一部のインデックスは使われずに残る場合もあります。(次のラインがどのインデックスで始まるかを知るために)各ラインのピクセルに対して実際に何バイト使われているかを知るには、ImageDataのbytesPerLineフィールドの値を使う必要があります。

2005年07月04日

Nvu正式リリース

HTMLエディタのNvuが正式リリースした。

以前はバグバグだったけど正式リリースしてどうなってるだろうか。
ちょっとさわってみた感じ以前気になっていたバグは直っているようだけど。

DreamWeaverのようにHTMLを気にせず書けるので良い感じのツール。
しかもLinux版もある。すばらしい。

Nvuのサイト
Nvu日本語化サイト

Xを飛ばす

リモートでログインした先でプログラムを実行し、そのウインドウだけ現在表示中の画面に表示する。

SSHクライアント側で.ssh/configに
ForwardX11 yes
ForwardX11Trusted yes
を記述。

SSHサーバ側で
/etc/ssh/sshd_config の X11Forwarding を yes に変更。

これでリモートにログインしてemacsとかするとリモートで実行されたemacsのウインドウが画面に表示される。
Windows出身の俺にはなんかカルチャーショックだ。う~ん、すごい。


で、これはLinuxでのやり方で、WindowsからLinuxのプログラムを実行してウィンドウをWindowsの画面に飛ばす。

まずCygwinを入れる。
C:\Documents and Settings\ユーザ名\.ssh\configに上記の設定
Cygwinからstartxwin.shを実行する。
ターミナルが表示されるのでLinuxマシンにログインする。
emacsなどを実行する。

するとLinuxで実行したemacsのウインドウがWindowsの画面に表示される。
う~む、やるなX Window。

2005年07月03日

CentOS その後

VMwareにCentOSを入れ現在のメインサーバと同じ環境を構築。
手順をメモにしてあとはメモ通りに進めれば同じ環境になる。
HDのバックアップも取った、準備は完了。

CentOSをインストールしてみる。

が!
RAIDを認識しなかった・・・orz
IBMのサイトで確認するとRHEL4でのデバイスドライバが提供されていなかった・・・。
俺の苦労はいったい・・・。

SATAは認識されるのでSoftwareRAIDでRAID1を構築すればいいんだけどそれじゃ意味がない。

う〜ん、しばらくWBEL3使い続けるか・・。
それかCentOS3って手もあるが。

う〜ん、どうしよう・・・。

2005年07月その他のエントリー