月別アーカイブ: 2008年4月

Ubuntu 8.04

さて Ubuntu 8.04 をインストールしたのであるが、
今回は気が向いたので VirtualBox にインストールしてみた。
だってスナップショット機能が欲しいんだもの。

なので普通に CD イメージをダウンロード。
HTTP は混んでいるだろうから torrent で、Opera 使いの利点だね。
でも最後の数 MB がなかなか落ちてこない…皆自分が済んだ時点で切断なのだろうか?

VirtualBox は窓の杜から落としたけどメニューが既に日本語化されているのね。
知らなかったよ、英語と格闘を覚悟していたけど問題無いや。

ということで両方を解凍して準備完了、CD を焼く必要は無い。
VirtualBox の新規ボタンを押して開始。

Linux カーネルは 2.6 を選択。
とりあえず新規で空の HDD 領域を 8GB 作る。
メモリはデフォが小さすぎ…512MB にしないと Ubuntu は動かないよ。
後は自作経験があるならなんとなく解ると思う。

ちなみにココで確保するメモリサイズは仮装マシン起動時にすべて確保する。
Windows が使う領域を含めて物理メモリは 2GB 以上無いとマジでキビシイ。

で、作った仮想 HDD をWクリック。
「インストールメディアを選択」でイメージファイルを選択する。
そのまま OK。

で例のライブ CD が動くはずである、そういえばそうだった…
デスクトップのアレを W クリックするとやっとインストールされる。

仮装マシンの設定で Windows DirectSound を選択しないと音は出ないので注意。

起動するとアレコレ警告が出るけど全部無視でよし、一応読んだほうがイイ。
特に「右 Ctrl キーで Windows に戻る」は絶対に覚えておこう!

コレで完了なのだがこのままでは 800×600 以上の解像度にできない。
Guest Additions をメニューからインストール(正確にはマウント)する。
デスクトップに CD アイコンが現れたら端末にて

$ cd /media/cdrom0
$ sudo sh VBoxLinuxAdditions.run

終わったらアンマウントしてお約束の再起動。
でもコレだけではまだ 800×600 のまま。
特にオイラは 1280×800 で使いたい!

/etc/X11/xorg.conf を編集するのだがイチイチ端末を使うのは面倒だ。
シェルスクリプトを作ってまえ!

右メニューの「ドキュメントの生成」から(テキトーな名前).sh を作る。

gksudo gedit /etc/X11/xorg.conf

と書き込んでプロパティから「プログラムとして実行できる」にチェック。
後はコイツをWクリックしてパスを打てばいいだけだ、恐るべき手抜き。

んでもって以下のセクションを書き換える

Section "Device"
	Identifier	"Generic Video Card"
	Boardname	"VESA driver (generic)"
	Busid		"PCI:0:2:0"
	Driver		"vboxvideo"
	Screen	0
EndSection

Section "Monitor"
	Identifier	"Generic Monitor"
	Vendorname	"Generic LCD Display"
	Modelname	"LCD Panel 1280x800
	Horizsync	31.5-48.0
	Vertrefresh	56.0 - 65.0
	modeline  "640x480@60" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync
	modeline  "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
	modeline  "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
	modeline  "1024x768@60" 65.0 1024 1048 1184 1344 768 771 777 806 -vsync -hsync
	modeline  "1280x800@60" 83.91 1280 1312 1624 1656 800 816 824 841 -vsync -hsync
	Gamma	1.0
EndSection

Section "Screen"
	Identifier	"Default Screen"
	Device		"Generic Video Card"
	Monitor		"Generic Monitor"
	Defaultdepth	24
	SubSection "Display"
		Depth	24
		Virtual	1280	800
		Modes	"1280x800@60"	"1024x768@60"	"800x600@60"	"800x600@56"	"640x480@60"
	EndSubSection
EndSection

そしてやっぱり再起動。

やったぜベイビー(古すぎる!
ココまで何回初期化…スナップショット機能はありがたすぎる。
後はアプリ色々だ、最初からはやっぱり面倒。

最近の Ubuntu

今週は忙しいです。

ところで、一月から Ubuntu ネタが止まっております。
まあ実際しばらく禁 Linux して開発していましたので。

でもマイブームが終わって放置しているんではないの?
とか思われそうなので現状をコソッと。

Dynabook に入れた奴は初期化して XP のみに戻しました。
音が出ないなりに使おうとも思ったけどちっとも使わないので。
やっぱり VMware で切り替えながらでないと利用しない。

というわけで現在はこうなっている。

ようするに Java と Python プログラミング用途に使うということで。
なんかこの2つは Windows で利用する理由が見あたらない。

というか IronPython を使うので Python は被らせたくなかった。
Java も .NET と同居がイヤなので Eclipse もコッチということで。

まあこういう使い方が仮想マシンには最適ではないかと。
ホストの Vista と被っているのは PHP と Ruby だけである。

あぁすっかり言語ヲタクに…今日はこのへんで。

同一カラム表示

むむ、そうか。
StackPanel を使えば同じカラムに同時表示できるんだ。

<DataTemplate x:Key="tpl_name">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding Path=image}"/>
        <TextBlock Text="{Binding Path=name}" HorizontalAlignment="Left" TextTrimming="CharacterEllipsis" />
    </StackPanel>
</DataTemplate>

のテンプレートを使って

<GridViewColumn Header="名前" CellTemplate="{StaticResource tpl_name}" />

で Explorer と同様の名前カラムに仕上がる。

後はアイコン取得と種類取得を行えばリストビュー部分は完成だ。
といってもインターフェイスだけだが、肝心の操作面はまだ何も…
そろそろツリー部分をやろう。
という間に日が変わった、明日も忙しいので寝なきゃ…先は長い。

Binding

あーやっと WPF の Binding っつーのが解ってきたぞと。

class ob
{
public BitmapImage bi{get;set;}
public string fName{get;set;}
public string nSize{get;set;}
}

とかクラスを作ってデータを詰め込んで listView に Add する。

ob ob1 = new ob();
//…略
listView1.Items.Add(ob1);

そのクラスメンバの名前をデータが入る場所に指定しておけばイイわけだ。
死ぬほど解りにくい…もの凄く限定された使い方しか理解していないし。

ファイルアイコンの取得はどうすればいいのだろう?
System.Drawing は使えないし方法が見つからない、あぁ初心者状態。

それよりスクリーンショットを見れば解るだろうけど、
WPF の ListView は選択なんかが Vista の Explorer と同じ描写になる。

前から不思議に思っていた、Vista の Explorer はチラつかない。
急激にリサイズしようがグルグル回そうが何をしようが全然チラツキしない。
ソレが気になるようになったので色々ファイラを探したがモレなくチラついた。

もしかして WPF もしくは DirectX 直使いで描写しているのかなと。
こうやって試したがやはりそういうことみたい、同じになるもの。

WinFX での描写はやはり WPF でやるべきだ。
結局は GDI 描写になる WindowsForm では何の意味もない。
この美しい描写をアピールすればもっと Vista を理解する人が増えるだろうに。

Visual Studio 2008 の本がボチボチ出てきたけど、どれも WindowsForm のまま…
そりゃ今までのスキルが生かせるけど時代に合わないんだってば!

ウインド表示直後に処理

久々に SDK チップスネタでも書こう。

WM_SHOW を捕まえて処理するとウインド表示に時間が掛かる場合がある。
このイベント処理が終わった後でないと実際の描写が行われないからだ。

だから表示された直後に作成や描写を行えば見た目の起動速度が向上する。
しかしそんな都合のよいメッセージは飛んでこない。

が、実はデルヒャァにはある。

procedure CMShowingChanged(var Message:TMessage);message CM_SHOWINGCHANGED;

をフォームの private に定義してハンドラを書くだけ…
但し表示状態が変わる毎に飛んでくるので一番最初に捕まえた時以外は弾くこと。
Y901 はそのツマラン方法で見た目の起動時間を短縮するセコイことをやっていた。

はて、CM_SHOWINGCHANGED なんて無い VC++ ではどうすんだ?
で考えた、PostMessage を使ってまえ!

SendMessage は処理が終わるまで制御を戻してくれない。
PostMessage はキューにメッセージを放り込んで即制御を戻す。
だから WM_SHOW 処理の一番最後で適当なメッセージを投げればよい。

#define WM_SHOWEND (WM_APP + 3)

とか定義しておいて WM_SHOW 処理の一番最後に

PostMessage(hWnd, WM_SHOWEND, 0L, 0L);

とすればキューに自分宛の WM_SHOWEND がセットされる。
キューって何?な人は Windows をもっと勉強してください。
後は WndProc で普通に

case WM_SHOWEND:

を処理、これで見た目の起動時間が早いアプリのできあがり!
詳しくは Cinema のソースコードで、オープンソースは楽だ。

フォーム表示直後に実行されるメソッド OnShowed を作る – Sakura scope

他にも同じコトを考える人がいるのね。
ビルダァ(名古屋弁化できん…)には CM_SHOWINGCHANGED は無いのかな?
でも WM_USER を使うのは止めておいたほうがいいみたいよ

WM_APPの薦め。

それより Windows SuperFetch がある Vista ではあまり意味が無い…