前回 安心したインデクサ表記だが、Silverlight では OUT !! でした。
以下、MSDN Library より。
If you are familiar with WPF data binding, WPF supported property path techniques for retrieving indexed items in a collection , and retrieving attached property values. Silverlight currently does not provide this support. A Silverlight property path is a series of steps into an object model and only supports the "dotted" syntax.
スポンサーサイト
ここ でもちょろっと書いたが、結局治っていないので晒してみようと思う。
―― エクスプローラ (explorer.exe) が頻繁にクラッシュする。
おかげでシステム安定性グラフの数値は最悪時で 3.78 まで落ち込んだ。 (「信頼性とパフォーマンス モニタ」の信頼性モニタから確認できる。最大 10 なのでいかにひどいかわかるだろう)
SP1 になった途端、「問題のレポートと解決策」で「
解決策が表示できません 」すら表示しなくなったのはお笑いだ。
たぶん explorer.exe のバージョンが 6.0.6001.18000 に上がって、謎の英語版解決策も該当しなくなった、とみられる。
SP1 にしてからのクラッシュパターンは今のところ 4 つ。
すべて例外コードは c0000005 。
[1]
障害モジュール : StackHash_fd00
例外オフセット : 840f56c3
[2]
障害モジュール :
TosBtShell.dll_unloaded 例外オフセット : 10004730
[3]
障害モジュール : shell32.dll
例外オフセット : 00135ef4
[4]
障害モジュール : shell32.dll
例外オフセット : 00135ef1
ようやく解決のヒントを 2 つ見つけたので試してみようと思う。
・
「エクスポローラーが動作を停止・・」のエラーメッセージ (その他) - Sony VAIO Hot Street ・
ファイルの移動 (教えて!Vista) - Sony VAIO Hot Street ただ Bluetooth 関連の話なので、[3] [4] は解決しないかもしれない。
ちなみに Bluetooth Stack for Windows by Toshiba Version 5.10.04(SO) が入っている。
3 次ベジェ曲線のパラメータ表示は、
p (t) = (1 - t)^3 *
p0 + 3t (1 - t)^2 *
p1 + 3t^2 (1 - t) *
p2 + t^3 *
p3 ですが、これを 0 ≦ t ≦ 1 で動かす様子を XAML で!
と思ったのだが、どうやら Loose XAML では厳しそうとの結論。
10 個の Point を用意。各 Point 間を結ぶ直線を表現するのに、
LineSegment.Point などに各 Point をバインディングするところまでは OK 。
最初の 1 次のところは
PointAnimation の線形補間で実現できるので、ここもコード不要。
だがこのさき、2 次、3 次は線形補間ではだめで、
PointAnimationUsingPath がうまくいかない。
2 次はうまくいっているように見えるが、実際には速度が間違っていて、3 次になったときにずれていることが判明する。
(当然と言えばそうかもしれんが気づくのに時間がかかった)
で結局、コードを書くことに。
2 次・3 次は
Storyboard.CurrentTimeInvalidated イベント にひっかけて動かし、パラメータ t の値は Storyboard を Clock にキャストし、
Clock.CurrentProgress から取得。
完成品 :
ちゃんと青線が赤線の接線になっている、はず。
なお、比較 →
Wikipedia
XBAP から切り替えて、Silverlight 2.0 Beta1 に挑戦。
まずは Silverlight Tools Beta 1 for Visual Studio 2008 をインストール。
でやってみるのだが…、画像表示にビットマップ (*.bmp) が使えない orz
そもそも画像の大きさ関係のプロパティがない…。
.NET Framework Class Library for Silverlight / BitmapImage Class (System.Windows.Media.Imaging) [MSDN Library]
[追記]
jpg と png のみのサポートだとさ。(
参照 )
プログラム中で 3 次ベジェ曲線の長さを求める必要が出てきたのでメモ。
これも WPF なら余裕。描画なら XAML で BezierSegment とか。
長さの計算も一応 60 行ぐらい。
数値積分は区分求積法ではつまらんので、シンプソンの公式などを Wikipedia で復習 (というか、ほとんど新規学習) 。
で非積分関数部分だが、3 次ベジェ曲線の関数は簡単に 2 次元ベクトル関数で表せるので、ひたすら double の掛け算をごりごり書く必要はなく、たとえば内積ならば
Vector *
Vector で OK 。Point から Vector は
Point - new Point() で。
自分同士の内積、つまりベクトルの大きさの二乗は Vector.LengthSquared でいけます。
やってることは同じだが、ソースコードはすっきり。
参考 :
ニュートン・コーツの公式 [Wikipedia]
XAML ブラウザ アプリケーションで画像をアップロードして、表示するようなとき。
単純に OpenFileDialog.FileName からいくと、FileIOPermission を要求されて XBAP ではアウト。
その場合は、OpenFileDialog.OpenFile() : Stream で。
これは FileDialogPermission ですが、XBAP でも通ります。
参考 :
XBAP からの安全なファイルのアップロードのサンプル [MSDN Library]
最近の動向としては、せっかくの Web アプリケーション作成の機会、XAML を推していく方向です。
そのなかでの学習事項その 1 。
コレクションというか ObservableCollection
を (ListView.ItemsSource とかではなく) Page.DataContext にバインディングして、個々のインデックスに入っている Point にパスをもっていくとき。 最初は Path=Item(0) のようにしなきゃダメかと思ったが失敗。 単純に Path=[0] のように C# のインデクサの書き方で通るのであった。
結局、大学院に進学して卒研続行。
よかったのはパソコンが新しくなったこと。
Core2 Duo E6850 @ 3.00GHz に 2GB RAM というマシンに XP SP2 を載せてるもんだから快適。
おかげでプログラムを動かしててファンがうるさくなることが無くなった。
加えて有線レーザーマウスでマウスパッドとおさらば。
あと、ディスプレイも SXGA になってこれまた快適。
しかし 6698 遺伝子の系統樹作成にまだ 8 分もかかっておる。
ということでプログラムを見直すと、どうも距離行列をつくるときが劣悪らしい。
なにせ距離行列のサブデータ検索がペアワイズのリニアサーチ。よって、O(N^2) 。
で、もうメモリを犠牲にして速度をとることを決意。
すると使用メモリ 20MB 増だが、2 倍速の 4 分になって、今までの時間浪費に涙。
いいかげん毎日ブログをつけようと思います。
―― 今回もあちこちで 4 月 1 日ネタが素晴らしいな。
個人的には Windows 7 関係が壺。
| ホーム |