タグ

ブックマーク / ladybug.hatenadiary.org (16)

  • 省略可能な引数 - is BUG Ready ?

    public void Method() { ... } public void Method(string first) { ... } public void Method(int second) { ... } public void Method(string first, int second) { ... } と、オーバーロードするのが基なんだけど、VB からの見た目を良く(?)するために、 public void Method([Optional]string first, [Optional][ParameterDefaultValue(int.MaxValue)] int second) { ... } などとすると、int.MaxValue が特別な意味を持ってしまうので int の表現できる値をすべてサポートできないし、仮に省略をしめすマジックナッバーとして妥当な値

    省略可能な引数 - is BUG Ready ?
    Wacky
    Wacky 2007/02/23
  • 2006-12-11

    Stream 系と Reader/Writer 系は、ともに Dispose を呼ぶことで、元となっているリソースとの接続を閉じる。Stream 系と Reader/Writer 系の違いは、Stream 系は使用が終わったら可能な限り早い段階で Dispose を呼び出すことが好ましいことがほとんどであるのに対し、Reader/Writer 系は Dispose を呼び出してはいけないシチュエーションが多々あり、呼び出す必要がなければ呼び出さないでも良い、という点。 この2つの区別はクラス名や派生元クラスをみればわかるような形になっているのだが、例外が System.IO.Compression 下の Stream 達。 ここにある GZipStream 等のクラスは機能的には Reader/Writer 系と同様の、ストリームフィルタ(またはストリームパイプ)として機能するようになって

    2006-12-11
    Wacky
    Wacky 2006/12/17
    非同期クライアントコールバックのコールバック関数からクライアントコールバックを呼び出すと、コールバック関数が呼ばれ続ける
  • 2006-10-28

    丸2年ぐらい C++ でコードは書いていなかった気がする。Win32 の DLL をプラグイン的に取り込むソフトのために使ったのだが、色々忘れてますね。 途中でメンバに const 付け歩きとか、代入でコピーコンストラクタが呼ばれなくて…、とか。 続きを読む どうやるのが定番なんだろうか? class A { public: int method1(int arg); int method2(int arg); private: B member1; C member2; }; A を利用する人は、B や C を知らなくてもいい。でも、A の method1, method2 の実装には B, C といった型が必要で、それはメンバで保持している。でも、A の利用者に B や C を公開したくない。 続きを読む

    2006-10-28
    Wacky
    Wacky 2006/11/04
    Win32 の DLL をプラグイン的に取り込むソフトのために使ったのだが
  • 2004-10-06

    単純に、System.Diagnostics.Debugger.Log() を呼び出すだけでよい。 しかし、通常はこんなメソッドを呼び出したりはせず、System.Diagnostics.Debug クラスと System.Diagnostics.Trace クラスを使用する。 これらのクラスには Write() や WriteLine()、階層化をサポートするための Indent() や条件付き書き出すの WriteLineIf() などといったメソッドがあり、Debug クラスの各メソッドは Conditional("DEBUG")、Trace クラスの各メソッドは Conditional("TRACE") の属性が付与されているため、簡単に出力を停止することもできる。 この Debug と Trace の2つのクラスは、ともに TraceListener の派生クラスを保持しており、

    2004-10-06
    Wacky
    Wacky 2006/09/23
  • 2005-03-14

    次のような2つのメソッドを考える。 [DllImport("test.dll", CharSet=CharSet.Auto)] extern void Test1(string msg); [DllImport("test.dll", CharSet=CharSet.Auto)] extern void Test2(IntPtr buffer, int size);前者には小さな問題はあるが大きな問題はない。 test.dll が Ansi 用のエントリポイントしか提供しなければ、引数 msg は現在スレッドのカルチャと OS の文字セットに従った ANSI コードにマーシャリングされるし、Unicode 用のエントリポイントを持っていれば文字コードの変換なしに、いわゆる C-String としてポインタだけが渡される。 問題は、以前、GDNJ の掲示板でも書いたが、後者の buffer

    2005-03-14
    Wacky
    Wacky 2006/09/23
    優先順位として Test1W → Test1 → Test1A ということになる。
  • Trace から TraceSource へ - is BUG Ready ?

    .NET 1.1 における標準的で低レベルなデバッグ情報は、System.Diagnostics.Debug クラスと System.Diagnostics.Trace クラス行える。*1 .NET 2.0 では、さらに System.Diagnostics.TraceSource クラスが追加され、こちらを利用することが推奨になっている。 MSDN: TraceSource TraceSource は拡張されたトレース システムとして機能するためのもので、以前の Trace トレース クラスと Debug トレース クラスの静的メソッドの代わりに使用できます。前バージョンの Trace クラスと Debug クラスも引き続き使用できますが、トレースには TraceSource クラスを使用することをお勧めします。 TraceSource はインスタンスが必要 TraceSource クラ

    Trace から TraceSource へ - is BUG Ready ?
    Wacky
    Wacky 2006/09/23
    前バージョンの Trace クラスと Debug クラスも引き続き使用できますが、トレースには TraceSource クラスを使用することをお勧めします。
  • 同期オブジェクトのスコープは安全か - is BUG Ready ?

    いや、特に .NET に特化した話題じゃなくて、Java なんかでもいえることなのですが、サンプルなんかでもよく this を同期オブジェクトにしているんですよね。 private object cache = null; public object Method() { if (this.cache == null) { lock(this) { if (this.cache == null) { this.cache = new xxx(...); this.cache.SomeProperty = ...; } } } return this.cache; }みたいなかんじで、よくあるサンプルかもしれませんが、this なんていう非常に published なものを lock() の引数にしちゃうのは、非常に危険なことです。private なクラスを private なメンバにもって

    同期オブジェクトのスコープは安全か - is BUG Ready ?
    Wacky
    Wacky 2006/09/23
    this なんていう非常に published なものを lock() の引数にしちゃうのは、非常に危険なことです。
  • 2006-05-21

    親が使っているブラザー工業製の MFC 5840CN がおかしいらしい。 続きを読む 新しいやつは Flash でいろいろやってるみたいだけど、(よく2日分を3つのブラウザで同時に編集開始だけしたり*1するので)これ2つ以上並列に動かした状態でバックアップとか走ったりしてるのは大丈夫なのかな。 *1:リンク元とか見るのに編集を押すのがクセになってて ここのリンク元に最近頻出している id:Ozy さんのところ*1 にあった記述に関するちょっとした小話ですが。 *1:どうも id:yaneurao 経由っぽいので、や氏の影響の大きさを感じる 続きを読む id:Ozy さんのところでは、PKU 用の専用クライアント開発が進んでいるが、(以前に GDNJ にも書いたけど)PKU の Judge のようなコードをあげてどうこうするシステムというのは個人的には興味があって、そういったゲームが作りたか

    2006-05-21
    Wacky
    Wacky 2006/05/27
    Win32でコマンドプロンプトをアプリケーションから起動する場合...IE4 統合シェル環境以降ではマジック名 CMD を指定すると「現在のユーザのデフォルトコマンドラインシェルプログラム」を起動する
  • WinForms の描画処理 - is BUG Ready ?

    id:NyaRuRu:20060203#p2 より 個人的に気にしているパフォーマンスに関しても,トップレベルウィンドウとメニューやツールチップなどの一部の特殊ウィンドウのみをWin32ウィンドウとし,後はクライアント領域に完全自前描画になったことで, (中略) 要はこれまで WinForms が重かったのはアルゴリズム的問題があったということなわけですが このあたりはかなり自前でやってしまっていた、またはやろうとしていた人が多いところではないでしょうか。*1 標準コントロールのどこが重たいのでしょうか。主に、 Win32 から HDC(S) を指定されて WM_PAINT が発生 HDC(S) から GDI+ の Canvas-A を作成 描画用の GDI+ の Canvas-B(Bitmap) を作成 Canvas-B から write-only-pseudo HDC(C) を作成 W

    WinForms の描画処理 - is BUG Ready ?
    Wacky
    Wacky 2006/02/25
    カスタムコントロールでは、Canvas-A に対して GDI+ の描画機能を呼び出すことができるため、手順の多くを省略することができます。
  • 2006-01-24

    この文章は Visual Studio 開発者向けドキュメントの英文を読み解きながら、試行錯誤や実験を行っている内容を記録したメモである。第一回は、最初に抑えておくべきこととして、Visual Studio のプログラム言語モデルを取りあげる。 続きを読む id:akiramei:20060123#p1 とか、これって結構よく話題にあがりますよね。検索すると山のようにでてきそうな話題です。 .NET Framework の日語版ドキュメントでは、「サーバー ベースのタイマの概説」において サーバーのタイマ (System.Timers namespace) Windows のタイマ (System.Windows.Forms namespace) スレッドのタイマ (System.Threading namespace) として解説されています。 続きを読む id:akiramei:20

    2006-01-24
    Wacky
    Wacky 2006/02/04
    Visual Studio 2005 ではプログラム言語を6つのコンポーネントに分割して扱っている
  • 2006-01-27

    Win32 のライブラリには、OS のスレッドに対して敏感な API セットを提供するものがある。これにはウィンドウハンドルやデバイスコンテキストといったものを直接的・間接的に扱う場合や、スレッドローカルストーレジに依存したライブラリに良く見られる。 WinForms では上記のような場合には InvokeRequired プロパティを通じてスレッドの調停を要求するようになっています。*1 この手法では、コンシューマによってオブジェクトに対する操作を適切にマーシャリングすることを要求する方法であって、コンシューマにたいして正確な操作と知識を要求してしまいます。 *1:有名ですが、.NET 1.1 以前と .NET 2.0 では InvokeRequired プロパティを無視した場合の挙動が変化しているのにも注意しなければなりません。 続きを読む 一週間ほど飛びます。仕事が集中できなくなると

    2006-01-27
    Wacky
    Wacky 2006/02/04
    Win32 のライブラリには、OS のスレッドに対して敏感な API セットを提供するものがある
  • 2006-01-12

    .NET のデザイン機能のエクステンダは(IDEのサポートが微妙にアヤシイ割に)かなり便利で優秀な機能だと思う。いわゆる Mix-in 的な機能をデザイン時に設定し、実行時に解決する機能だ。 手元にある .NET 1.1 用のコンポーネントのうち実に6割がエクステンダになっている。 続きを読む id:kurip:20060111#1136989415より 昨年後半に手伝ったプロジェクト日リリースされました. (中略) 気に入らない部分もあるけど,dotNET2.0ベースでのプロジェクトってことで,まぁ結構がんばったかな? .NET 2.0 ベースって、はやー。「昨年後半」が具体的にいつかにもよりますが、おそらくベータリリースなどから開発をつづけて、製品リリースにあわせて調整したかんじでしょうか。

    2006-01-12
    Wacky
    Wacky 2006/01/14
    エクステンダはコンテナ単位に動作し、コンテナ自身およびコンテナ内にある IExtenderProvider を実装するコンポーネントすべてが提供することができる。
  • Compact Framework は大変だなぁ - is BUG Ready ?

    と、いつも思うわけですが。GDNJ:Copyright/ProductName等の取得 とか。 .NET Framework なら Assembly.GetCustomAttributes() で簡単に取得できるわけですが、Compact Framework だと Assembly.GetCustomAttributes() は 2.0 にならないとサポートされていないんですね。 しかし、google などでアセンブリのバージョン取得方法を検索すると Assembly.GetCustomAttributes() を使用せずに GetFileVersionInfo などの API を使うというものばかりヒットしたりもする。アセンブリにつける属性って、属性として認識されていないんだろうか?

    Compact Framework は大変だなぁ - is BUG Ready ?
    Wacky
    Wacky 2005/12/24
    Compact Framework は大変だなぁ
  • 2005-12-09

    中さんところ CLR Profiler for the .NET Framework 2.0 より、 CLR Profilerの2.0が出ました。 これが出る以前から、CLR Profiler はバージョン 2.0 でした。 続きを読む 1点、わすれていました。リソースを用意した後、ブラウザの言語設定に応じて言語を切り替えるために、カルチャ名に auto が指定できるようになっています。 続きを読む

    2005-12-09
    Wacky
    Wacky 2005/12/11
  • is BUG ready ? : アルゴリズムネタ

    知ってる/知らない系ってところですが、最近業務で必要になったもの、 最小公倍数と最大公約数 ビット列を保持した整数変数内の立っている最上位ビット/最下位ビットを得る ビット列を保持した整数変数内の立っているビットの数を数える ユニークでない値を格納したソート済み配列から、特定の値が存在するインデックスの範囲を求める どれも定石な気がするんだけど。 最小公倍数と最大公約数 公式のままってかんじ? /// <summary>最大公約数 </summary> int GCD(int n, int m) { if (n > m) return GCD(m, n); while (n != 0) { int t = m % n; m = n; n = t; } return (m > 0) ? m : -m; } /// <summary>最小公倍数</summary> int LCM(int n,

    is BUG ready ? : アルゴリズムネタ
    Wacky
    Wacky 2005/12/03
    最小公倍数と最大公約数, 立っている最上位ビット/最下位ビットを得る, 立っているビットの数を数える
  • 2005-09-27

    FileIOPermission では「すべてのファイル」「すべてのローカルファイル」が指定できるのに、FileIOPermissionAttribute ではこれらを指定することができない・・・というわけで、それを設定するための属性をでっちあげた、未テスト。 宣言ベースのセキュリティ属性は、目的の IPermission を生成する abstract SecurityAttribute.CreatePermission() を実装すれば、あとは使いやすいように肉付けするだけなので非常に手軽である。*1 *1:CAS の場合は SecurityAttribute ではなく CodeAccessSecurityAttribute から派生することになる。 続きを読む という問題が数日前から仕事場で発生していたのだが、どうやら これ やら これ と同じっぽい。と、探していたら KB893005

    2005-09-27
    Wacky
    Wacky 2005/10/02
    .NET 1.1 SP1 で意識しなければならない問題
  • 1