旧鯖時代の雑記です。新しいの。リンク切れに注意。
2007:
12345678910
2006:
123456789101112
2005:
123456789101112
2004:
456789101112
概要が発表されました。ショート部門、HSPTVで動かすということはゲームを主な対象としていますね。常駐物だとかはお呼びでないっぽい。さすがに今回はパスかなぁ。
コメントはありません。
何か急激にHDDの容量が消えていくと思ったら、¥Local Settings¥Application Data¥Microsoft¥Outlook¥に4.6GのOutlook.pstが作成されてました。何コレ?マカフィーとウィルスバスター(オンラインスキャン)では反応なし。再起動すると発生しないし、何かのアプリのバグ?
コメントはありません。
AvalonのウィンドウはWin32のウィンドウと概念がかなり変わっているっぽい。Window.Contentが代入しかとらないので直下に複数のコントロールを含めることはできない?複数のコントロールを配置する方法は調査中。
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
class MyApplication : Application {}
class MyWindow : Window {
public MyWindow() {
this.Text = "Hello, World.";
Button button = new Button();
button.Content = "押す";
button.FontFamily = new FontFamily( "MS ゴシック" );
button.FontSize = 24;
button.VerticalAlignment = VerticalAlignment.Top;
button.Click += delegate(object sender, RoutedEventArgs e)
{ MessageBox.Show( this, "Hello, World." ); };
this.Content = button;
}
}
class Program {
[STAThread]
static void Main() {
Application app = new MyApplication();
app.Run( new MyWindow() );
}
}
ウィンドウクラス名から推測するに、XP版ではMessage.Boxは内部的にWin32 API MessageBox()を呼び出しています。フォントなどは美しくありません。
コメントはありません。
もし妹が義理だったら以下略な人がほーむぺーじが作りたいとか言ってたので、ブックマークとか巡回先から参考になりそうなとこを探してみるも、思想的に偏ってたり、中途半端だったりで適当な講座系サイトが見つからず。とりあえず、リファレンスとしてばけらのHTMLリファレンス。文法チェッカのAnother HTML-Lintにリンク。
Window.Opacity, Wndow.RenderTransformはWinFX@XPだと使えないっぽい。Window.Opacityは背景が黒として、クライアント領域のみが透過描画(ウィンドウは透過されない)され、Window.RenderTransformは例外が投げられます。VPCから動かしてるのでビデオドライバが関係しているかもしれませんが。。。
コメントはありません。
Gridコントロール使えばできるっぽい。でもサンプル見るかぎりコードに起こすのはなぁ。XAML書けってこと?
コメントはありません。
正式公開されたのでざっと見て気になったところを幾つか。なお、思いつきでほとんど検証していませんので。
相変わらず命令の命名規則に一貫性(mmload→名詞+動詞, sendmsg→動詞+名詞。と動詞と名詞の順番に一貫性がない。略語は個人的に好きではないが趣味に分かれるか)が見られず、目的のものを探しにくい。中途半端に互換性を残さずしっかりとしてほしかった。
内部文字はマルチバイト文字。マニュアル表記が文字数となっているが、文字数ではなくbyteで処していると思われ。
manifestが埋め込まれており、XPではコモンコントロール6.0が使用される。このためmesboxとinputの扱いには注意。バッファオーバーフローはしないっぽいが文字制限数が異なる。
コンパイル時のエラーチェックが強化。2.xのように実行して初めて文法ミスに気づくということがなくなった。
mci命令は健在、TearDrop組みなおしますか。。。
コメントはありません。
System.Windows.Threading.DispatcherObject型の変数を作ろうとしても、型がコンパイラに認識されずコンパイルが通らない。バグっぽいが。。。
using System;
class Program {
void Method( System.Windows.Threading.DispatcherObject do ) {}
[STAThread]
static void Main() {}
}
コメントはありません。
コントロールの配置をXAMLで書いてみる。よく見かけるxamlファイルを使ったレイアウトはmsbuildを使う必要があるっぽい。プロジェクトファイルの書き方がわからないので、今回はパス。
using System;
using System.IO;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Serialization;
class MyWindow : Window {
public MyWindow( string xaml) {
try {
MemoryStream stream = new MemoryStream( xaml.Length );
StreamWriter writer = new StreamWriter( stream );
writer.Write( xaml );
writer.Flush();
stream.Seek( 0, SeekOrigin.Begin );
object obj = Parser.LoadXml( stream );
if (obj is FixedDocument ) {
FixedDocument doc = obj as FixedDocument;
obj = doc.Pages[0].GetPageRoot( false );
}
this.Content = obj as UIElement;
}
catch( Exception e ) {
// TODO: 適切な例外処理を実装
}
}
}
class Program {
[STAThread]
static void Main() {
string xaml = @"<Grid
xmlns='http://schemas.microsoft.com/winfx/avalon/2005'
Background='#000000'>
<Button Opacity='0.8' Foreground='#aaff0000' FontSize='26'
VerticalAlignment='Top'>押す</Button>
<TextBox AcceptsReturn='True'
VerticalScrollBarVisibility='Visible'
Opacity='0.8' Foreground='#aaff0000' FontSize='26'
RenderTransform='rotate 20'>Test</TextBox>
</Grid>";
Application app = new Application();
app.Run( new MyWindow(xaml) );
}
}
コメントはありません。
ねっちゅーしょーにかかったぽい。明日は引きこもりかなー。
コメントはありません。
お・り・が・み#4。パワーバランスがだいぶ落ち着いてきて、話はそこそこまともに。ただ締めがイマイチな気がする。やはり前作のほうが好み。
コメントはありません。
熱中症じゃなくて風邪っぽい。不規則な生活してたし、ツケが回ってきたか。。。
コメントはありません。
VSをインストールすれば勝手にやってくれるのでしょうけど、そんな空き容量ないのでmsbuild使ってコマンドラインからコンパイルする方法。
まず、MyApplication, MyWindowクラスを作ります。
<!-- App.xaml --> <Application xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" x:Class="MyApplication" > <Application.Resources /> </Application>
// App.xaml.cs
using System.Windows;
public partial class MyApplication : Application {
protected override void OnStartingUp ( StartingUpCancelEventArgs args ) {
MyWindow mainWindow = new MyWindow();
mainWindow.Show();
}
}
<!--Window.xaml --> <Window xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" x:Class="MyWindow" Text="Hello, World." > <TextBlock VerticalAlignment="Stretch">Hello, World.</TextBlock> </Window>
// Window.xaml.cs
using System.Windows;
public partial class MyWindow : Window {
public MyWindow() {
this.InitializeComponent();
}
}
msbuild用のcsprojファイルを作ります。
/Project/ItemGroup/ApplicationDefinition要素にApplicationクラスを定義している、XAMLファイルを渡します。このXAMLファイルが定義しているApplication.Run(string[])を呼び出すMainメソッドが自動的に作成されます。
/Project/ItemGroup/Page要素にWindowを定義しているXAMLファイルを渡します。
/Project/ItemGroup/Compile要素にコンパイルするcsファイルを渡します。./DependentUpon要素に結合するXAMLファイルを指定します。
後はcscのコンパイルオプションそのままなので、わかるでしょう。
<!-- make.csproj -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AssemblyName>hello</AssemblyName>
<TargetType>winexe</TargetType>
<OutputPath>.¥bin</OutputPath>
</PropertyGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
<Page Include="Window.xaml" />
<Compile Include="App.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Window.xaml.cs">
<DependentUpon>Window.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Reference Include= "System"/>
<Reference Include= "WindowsBase"/>
<Reference Include= "PresentationCore"/>
<Reference Include= "PresentationFramework"/>
</ItemGroup>
<Import Project="$(MSBuildBinPath)¥Microsoft.CSharp.targets"/>
<Import Project="$(MSBuildBinPath)¥Microsoft.WinFX.targets"/>
</Project>
これで準備は整いましたので、msbuildを実行すれば完了です。
コメントはありません。
Name属性の値がクラスのinternal フィールドとして定義されています。
コメントはありません。
これができないとMenuItemを使いまわせないのでコピペする必要が。でもって変更した際に片方の修正を忘れて。。。てなことが起こる可能性があるので、使いまわせるようにしてほしいかな。
ContextMenu c1 = new ContextMenu(); ContextMenu c2 = new ContextMenu(); MenuItem mi = new MenuItem(); mi.Header = "MenuItem"; c1.Items.Add( mi ); c2.Items.Add( mi ); // ここで例外Win32だとできるので、何か解決策がある気もしますが。。。
コメントはありません。
らき☆すた#2。目的だった本は見つからず。。。
コメントはありません。
調べてることが拡散してきたので、とりあえずメモ。英単語の語彙が少ないため検索する単語がわからないのが痛い。まじめにやっとくべきだったか。後悔先立たず。
コメントはありません。
googleツールバーで特定の文字を検索するとトロイが検出される@McAfee。。。何コレ?
コメントはありません。
急に暇がなくなる。むぅ。
コメントはありません。
また徹夜。。。体調崩してるのに何やってるのだか。
コメントはありません。
1週間後かー。それまでは準通常営業予定。といってもWinFXいじってるくらいなのですけど。
コメントはありません。
改行コードが¥r¥nじゃなくて¥n,¥rだけでも改行してくれ模様。
コメントはありません。
弟君のパソコンが不安定だとか言うので見てみると、ウィルスが22個検出。削除するのも面倒なので、ハードディスクの内容を消去するも、リカバリCD紛失により再インストールできず。とりあえずネットしか使わないだろうから、Fedora Core入れてお茶を濁してみる。ていうか感染度(低)のウィルスばかりになんで感染する。
コメントはありません。
プログラミング Microsoft .Net Framework購入。なんというかすぐに改訂版が出そうなのが怖い。。。
コメントはありません。
ふと巷にあふれているVistaのスクリーンショットを見てみるとメニューに下線がついていない。この機能は撤廃ってことですか?しかしキーボードで操作できないのは不便な気が。。。
コメントはありません。
今夏中にやらないといけない、.netアセンブリのアンロードを調査中。とりあえず、AppDomain.CreateInstance〜を使ってインスタンスを作れば、AppDomain.UnLoadでアンロードするとプロセスから消えてくれます。注意すべき点として、AppDomain.Load()でアセンブリを読み込むとカレントドメインにも読み込みます。そのためアセンブリはアンロードされずプロセスに存在しつづけます。
とりあえず目下の問題点は自作クラスをコンストラクタの引数に要求するクラスのインスタンスが作れない点。引数自体はCreateInstance〜のobject[]に渡せばいいと思うのですけど、何を渡せば?初期化メソッドを用意して対処させるかなぁ。
コメントはありません。
忙しくはないですが、体力が持ちません。暇はあるけどいろいろとやりたいことができない。。。
ノート1台だとさすがに厳しいので自作PCについて調べてみた所、自分が知ってるとき(CPUのクロックがが1GHz越えたあたり)より大きく変わっていてわけわかりません。今Intel系で固めるならPentiumD+i945でいいのかなぁ。グラボはさしあたって必要ないので内臓で。
デュアルコアならPentiumDよりもAthron 64 X2のほうがいいと思います、SSE3にも対応していて値段も安いですし。
投稿者: 芝やん (2005/08/21[Sun] 19:20)
うーん、コストパフォーマンスを追及するのならAMDも選択肢に入るのです。しかし、安定性とか相性とかも考えるとIntelで固めたほうが無難な気がするのですけど、最近は違うのでしょうか?
投稿者: 方位記号 (2005/08/22[Mon] 00:04)
以前よりは相性などの問題は改善されています、と言っても安定性を求めるのならIntelマザー + Intel CPUの組み合わせが最適になりますね。性能自体はPentiumDよりAthlon 64 X2のほうがいいです、メモリ周りが非常に影響しているので。
投稿者: 芝やん (2005/08/22[Mon] 00:15)
やはり信頼性ではIntelですか。アドバイスありがとうございます。
投稿者: 方位記号 (2005/08/22[Mon] 00:31)
普通に引数付のコンストラクタを持つインスタンスを作れた。。。原因は単純に渡す引数を間違えてたと。ドキュメントはちゃんと読みましょうってことで。
で、作成するインスタンス、渡す引数はMarshalByRefObjectを継承しておく必要があるのですが、こいつをプラグインDllではなく、プラグインとアプリが共通で読み込むクラスを定義したDll(説明難しいな)で用意すると、プラグインDllがカレントドメインにも読み込まれる(=アンロードできない)素敵仕様。共通して読み込む部分はインタフェースにしてプラグインでMarshalByRefObjectを継承ということですか。何か冗長。。。
パフォーマンスは案の定最悪。何もしないメソッドを10万回呼び出すのに大体1.9秒。普通のリフレクションだと0秒。この差は大きい。メソッドに重たい処理をさせる場合の計測はまた今度。
コメントはありません。
例によって10万回メソッドを呼び出しています。メソッドは引数を受け取りません。
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile()でファイルのMD5ハッシュ値を計算してみたところ、アプリケーションドメインをまたいだ場合4.7秒, 通常のリフレクションの場合2秒程度。
続いて32Mのファイルから100byte読み込んでbse64エンコード。メソッド内でファイルロード→エンコードした場合はアプリケーションドメインをまたいだ場合が15秒弱、リフレクションが8.1秒となりました。一方で{static}コンストラクタでファイルを読んで(=配列を初期化しておく)おいた場合アプリケーションドメインをまたいだ場合が2.1秒程度でリフレクションが0.07秒と空メソッドと同程度のパフォーマンス。
MD5ハッシュ値の計算が2倍以上の時間差があるのに対し、ファイルロードでは2倍以下に縮まっていることから、重たい処理ほどパフォーマンスの差は縮まっていくと考えられます。次は引数を持つ場合の調査かなぁ。
コメントはありません。
よく考えると、数秒かかるような重たい処理を繰り返し呼び出すシチュエーションって何?こんな想定しないパフォーマンスを調査する意味はあるのでしょうか。
ちなみに32MB読み込んで1回だけbase64エンコードする場合は誤差の範囲でしか差がありませんでした。結果が逆転する場合もあります。繰り返しのコストは大きいですが、単発呼び出しだとパフォーマンスの差はないと言ってよいでしょう。
コメントはありません。
そんなぶっちゃけられましても。ロードマップ見ると2006頭にコアがかわるっぽいのでそれまで待つのもあり?ていうかパフォーマンスが下がるって具体的にどの程度?
何かATXに変わりBTXとかいうのがあるそうですが、まったく見かけません。秋葉とか日本橋では出回ってるようなのであるところにはあるのでしょうが。こういうのを通販で買うのはなぁ。。。
コメントはありません。
いくら(単純なシチュエーションで)ベンチとっても実際どうかってことで、みら〜じゅの設計をぼちぼち始めているわけですが、プラグインに主要素を分離しているため、無意味に複雑化して脳内では限界。UMLとか覚えるべきかなー。本末転倒な気もしなくないですが。
コメントはありません。
Windows SDK公開されてます。さすがにこの状況で英語ばかりは読む気しない。。。まぁVistaはすぐにやるわけでもないのでぼちぼちと。
コメントはありません。
さて意味があるのかわからないアプリケーションドメイン回りのベンチの続き。
まずは勘違いしていたので訂正。アプリケーションドメイン間で通信を行うにはクラスがMarshalByRefObjectを継承しているほかに、Serializable属性を持っている場合でも可能なようです。ただし、自作クラスがMarshalByRefObjectを継承せずにSerializable属性のみを持つ場合激しくパフォーマンスが劣化します。
今回は引数渡しに関するパフォーマンスの計測。次のインスタンスを引数に持つメソッドが10万回呼び出された場合の大体の時間。メソッド自体は何もしません。
Serializable属性を持つ自作クラスに比べ、mscorlib.dllの2つのクラスが異常に早いのが気になります。System.Windows.Forms.Formは自作クラスと同じ時間です。.NET Framework クラスライブラリのDllすべてが、というわけではなさそうですがmscorlib.dllは根幹Dllですし、ここのクラスは特殊なのでしょうか?
コメントはありません。
Conroeまではやっつけですか。Longhornリリース時に買うという当初の計画だとスケジュール的にちょうどよいのが微妙に悔しい。まぁPenDを選択する主な理由が64bit対応とNXbitだったりするので。。。パフォーマンスはぶっちゃけそこまで目に見えて変わらないでしょうし。
時にPenD、Pen4を2つくっつけただけだとHyper-Threadingがなしでは稼働率悪くないですか?素人考え?
コメントはありません。
リカバリCDないなら送ってくれといわれていた弟君のPCがリカバリされて戻ってきました。いや、かなり前から戻ってきてたのですけど、いじるのが面倒で放置してました。で、とりあえずメーカー製PCなのでわけのわからないパーティション区切り(Cドライブ空き4Gで何をしろと)がされているわけです。そこでGNU Parted(解説サイト:http://nobumasa-web.hp.infoseek.co.jp/partition/parted/)でも使ってパーティション結合するかという話になるわけですが、FDDなんて最近のパソコン(そんなに新しいものでもないけど)にはついてないわけです。USB接続のFDDはあるのですが、使えないっぽい。で、探してみるとありました。Partboot for USB floppy drives(Toru Shionoさん作)。とりあえずこれを使って全部Cドライブに結合。空きができたところで次はXPのインストール。これはかったるいのでまた今度にしよう。。。
で、一番の問題はリカバリディスク代わりに買ったTrue Image Parasonalがリカバリしてくれないことですか。日本語ファイル名がまずい?
コメントはありません。
そろそろアプリケーションドメイン周りのまとめをしないとまずい。。。ていうかサイトリニューアルの予定がー。
コメントはありません。
無理しすぎ?そろそろ戻してかないと後々にひびくなー。
コメントはありません。
みら〜じゅの根幹設計している暇がないのでアプリケーションドメインかましたパフォーマンスの運用調査はキャンセル。現在持っているデータだけでまとめに入ろう。
コメントはありません。
想像以上に熱いらしい。かといってPenMは64bitに対応してないし。。。それよりも手ごろなモニタが見つからないのが問題。SXGA+のパネルどこか出してくれないかなー。
コメントはありません。
Copyright(C)方位記号
ありがとー(゚∀゚)マウマウ!!
投稿者: 普通の妹・・・・・・ (2005/08/03[Wed] 00:43) [mail]