最近、何でもかんでも「見える化」するのが流行っていますね。
私も波に乗って「今、ブロックデバイスのどこにアクセスしてるか?」を見える化してみました。見た目としてはWindows 9x時代のデフラグ(うーん、懐かしい)をイメージしています。
アクセス箇所の取得ドライバ、見える化用のGUI、表示設定用のGUI、くらいがあればできそうです。
思いつきレベルの実装に時間かけるのは無駄だよネ!ってことで、ドライバもGUIも超手抜きで実装してみて、ひとまず動きました。とまあ、説明では意味がわからないと思うので、キャプチャしてみました。
アクセスの見える化開始→ext3でフォーマット→Linux Kernelのtarball展開→make menuconfig→make(途中で中止しています)です。
動画では全部で2500個のブロック表示していて、監視している領域は8GBなので、1個3MBくらいです。水色がReadアクセス、ピンク色がWriteアクセス、R/Wが重なったときは紫になります。
いろいろアクセスパターンを見てみると、mkfs.ext2とかmkfs.ext3は流れ星みたいで綺麗だなーとか、ジャーナルFSはあまり動きがなくて面白くないなー、とか。監視しているとI/O速度が遅くなりすぎて欠伸が出ますけどね。
ローレベルプログラムをJavaで書くのはしんどいし、GUIをCで書くのはもっとしんどい。ってことで、ローレベル側(C)とGUI(Java)で分離することにしました。
で、ふと疑問が沸いたのですが、Cで書いたプログラムからJavaで書いたGUIプログラムにバイナリデータを送るときって、どうやって渡すのが一般的なのでしょう?
あとx86の場合はCとJavaでエンディアンが異なる(Cはリトル、Javaはビッグ)ので、その変換も必要ですが、どっちでやるのが良いのでしょうね??
とりあえず性能無視でC側でビッグにひっくり返して、通信はソケット(TCP)を使っていますけど、C側がとても忙しそうで、性能が悪いです。やることが少ないJava側に押し付けるのも手か。
久しぶりにJavaでSwing使ってGUIを書きました。Swingは画面設計用のツールがなくても、GUIをお手軽に記述できて、非常に便利だと思います。
…ですが、私の場合LayoutManagerの理解がヘボいせいか、やたらズレたり、妙にデカくなったり、思い通りに配置できません。実行して画面を見ては「違う…、何かが違う…!」となってばかりでもどかしいです。
どうも訓練が足らんような気がするので、もうしばらく格闘というか、修行してみます。
Sunのサイトにあったコンテンツは、Sunを買収したOracleのサイトにどんどこ移されているようですが、以前とは違う形になっていることもあるようです。
今一番困っているのが、Sunが公開していたJavaのAPIドキュメント(日本語版)が見られなくなっていることです。OracleはSunと同じように公開してくれていないみたいで、路頭に迷ってしまいました。
APIドキュメントのtarアーカイブ(なぜか非圧縮)が載っているところは見つけましたが、今のところOracleのサイトで参照できる場所が見つけられていません。Java 2 SE 1.3や1.4はまだしも、Java 6は今もアップデートが続いている現役なのに、困ったなあ。
Oracleがこれからサイトのどこかに置いてくれることを祈りつつ、それまでは不便なのでこのサイトにコピーを載せておくことにしました。
Java 2 SE 1.3 API仕様
Java 2 SE 1.4.0 API仕様
Java 2 SE 5.0 API仕様
Java 6.0 API仕様
これって勝手に載せていいのかなあ?ま、アーカイブ自体はOracleが配っているわけだし、文句が来たら来たときで考えましょう…。