UNICODE にならん

pinvoke.net: StrCmpLogicalW (shlwapi)

むむっそうか、やっと自然順ソートで無限ループしてしまう問題が解決。

//[DllImport("shlwapi.dll")]  だけでは無限ループ
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]

ココが問題だったとは…なんつー解りにくい仕様。
C# 内部コードは UNICODE だから勝手に UNICODE で渡ると思い込んではダメだね。

やっとリストビュー部分の見た目だけが完成、ここまで長かったぞ!
ツリービューとアドレスバーで更に苦しみそうな気配。

Google のコードサーチで StringLogicalComparer なんてのも見つけたけどね。
C# コードのみで実装できるから魅力的なのであるが、こっちだと何故か順番が違う。

それにライセンスもイマイチ不明瞭だし、他人のコードを使うのは怖いというのもある。
今後ソースコードはすべてライセンス放棄で公開すると決めているのだから。

後 STL で作った IniFile8 クラスの C# 化もやっているんだが…
typedef の代わりは using で可能とかは検索では見つかったんだけーが…
コレでは型名として使えないようでインテリセンスに怒られまくり、まいった。

あぁ、ほとんど進まないまま連休が終わってしまった。
きっと Ubuntu が悪いんだ、又しても禁 Linux しなきゃいけないか?
でもブログアクセスのほとんどが Ubuntu ネタという現実はなんとも。

いっそ Ubuntu + Python + Qt とかに早めに移行したほうがよさげかも。
Palepoli が一段落したらやるつもりだったんだが…いつになるやら。

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 のまま…
そりゃ今までのスキルが生かせるけど時代に合わないんだってば!