WCFのお勉強

正月休みを利用して、未だちゃんと把握できていない.Net第三世代のブリーフィングを。
まずは個人的に最も関心があるWCFについて、MMでまとめてみる。

概要については2年前くらいのTechEdで聞いているはずなのだが、
さっぱり記憶から抜け落ちているのでMSDNライブラリをもとにざっくり予習。

WS-AT絡みのトランザクションフローの実現や、現行WebServiceからの移行・相互運用については、
仕事ですぐにでも必要になりそうなので、とくに注目して知識吸収をしておきたい。

あと、P2PやWebプログラミングなどのオマケ?機能も楽しそう。

MacBook AirMacカードがインストールされていません

突如出現。
以下の手順により復活。

1. Connect to network via Ethernet.
2. Go to Network in System Preferences.
3. Select AirPort and under the gear dropdown choose Make Service Inactive.
4. Hit the plus and add a new AirPort service (Airport 2 or whatever).
5. In the Advanced tab add the name of the wireless network you wish to join.
6. Hit Apply.
7. After a few moments, the new service found my network. I deleted the "original" Airport service and renamed the new one to Airport.

元ネタ

マインドマップツールを試してみる

会社ではJude think!を使ってる。
これはこれで軽くて安くてよいのだが、どうもプライベートで使おうという気にはならない。
(私のマインドマッピングスキルが低いこともあるが、なんとなく、ビジネス色たっぷりなドキュメントになっちゃう・・・ :-< )

んで、家のMacでサクッと動くcoolなツールはないものかと物色してみることに。
よさげなのを2つほどピックアップしてトライアル開始!


まず一つめ。MiNDPiECE

これは「アイデア粘土細工ソフトウェア」と説明があるように、
マインドマップに似た方法による、思考をビジュアル化するツールという位置づけですか。

サイトもそうだが、ソフトじたいも非常にグッドルッキングで、道具として使ってやろう!という意欲が湧く。
背景のテンプレートが数多く用意されてて、そのままプレゼン用の資料作成に便利な印象。
操作性も洗練されてるし、動作もキビキビ。いいですね〜 こんなアプリ作ってみたい。。


もう一個試す。iMindMap
MindMapの提唱者Buzanさんの冠をかぶった公認ツールとのこと。
英語サイトのみだったが、使ってみるとメニューやチュートリアル(一部?)が日本語化されてたのはうれしい誤算。

軽く使っての感想は、なにより手書き感がすごくでているツール。
スケッチブックにクレヨンで描いていく過程がよく再現されてます。

ノード上にではなく、放射線上に沿ってラベルを配置していけることで、
箱に文字を埋めて、並べて・・・というビジネスドキュメントちっくな整然さが取っ払われて、
イデアを直感的に表現できる感覚が非常に楽しい。
ツールとしての使用感もシンプルで、思ったほど動作も重くない。



二つとも第一印象がよく、価格帯は同じくらいなので、どちらを選択するか悩ましいところ。
マインドマップを描く目的では、やはり現段階ではiMindMapのほうに惹かれてるかな〜
試用期間中にいろいろ使い倒してみようと思う。

 sort_by便利ね

仕事では.Net使いの肩書きで生きてるけど、家ではRubyRailsを触って楽しんでる今日この頃。
最初は息抜きのつもりだったけど、しらないうちに家のPCはすべて非Win化してたりしてます。
#まあ、たまにはXPも起動してるけど。Parallesの上で。。。


仕事の延長上、というのではなく、違うスタンスでPCや技術に触れることも大事ですよね。
まだしばらくこの業界と付き合っていきたいし。


さておき、今日もRailsの自分用アプリを作りながらRubyの調べ物を。

sortとsort_byの二通りあることは気づいてたけど、
sort_byはただのシンタックスシュガーと思ってたら、実はパフォーマンスも違うってのは知らなかった。

プログラミング言語 Ruby リファレンスマニュアル

sort_byだと、要素分の評価結果を先に用意しとくんですね(たぶん)。賢いですね。


さいきんc#でも、デリゲートや匿名メソッドを使いたがり・書きたがり的な安直なソートや検索ロジックをよく目にします。
人ごとではなく、自分でも油断すると書いてるか。

いろいろと便利になったせいで、コンパイラユニットテストがOKって言ってりゃそれで満足してしまって、
ロジックのコストを問いただす機会もあまりなくなってしまってるのかもしれない。

「毎回このソート評価重くない?」とか、「マジでリニアサーチする気?」 とか、
細かいところもソースレビューで突っ込んでいかなきゃなと、自戒。

Generic ClassのCreateInstance

  1. GenericのTypeを取得
  2. 指定型のTypeを取得
  3. GenericのTypeから、MakeGenericType()を叩いて生成するTypeを取得
  4. Activator.CreateInstance

てな流れ。リフレクション万歳だねぇ。。


プロパティ(PropertyInfo)からGeneric型を動的生成した例

//Get generic type
Type genericType = property.PropertyType.GetGenericTypeDefinition();

//Get argument types
Type[] argsType = property.PropertyType.GetGenericArguments();

//Get type for construction
Type createType= genericType.MakeGenericType(argsType);

//Create!
object genericObject = Activator.CreateInstance(createType);

MSDN:How to: Examine and Instantiate Generic Types with Reflection | Microsoft Docs

IBindableComponent実装

今日は非コントロールクラスのデータバインド対応でちょっとハマった。

IBindableComponentインタフェースの実装でミスってて、
各プロパティのgetterで無ければ新規インスタンスをちゃんと返してなかっただけの話だった。 ;_;
忘れそうなのでメモっとく。

#あと、INotifyPropertyChangedの実装やら、Binding作成時のDataSourceUpdateMode.OnPropertyChangedあたりの設定も忘れずに。。。

インタフェースの実装部分

       #region IBindableComponent Members

        BindingContext bindingContext;
        public BindingContext BindingContext
        {
            get
            {
                if (this.bindingContext == null)
                {
                    this.bindingContext = new BindingContext();
                }
                return this.bindingContext; 
            }
            set { this.bindingContext = value; }
        }

        private ControlBindingsCollection dataBindings;
        public ControlBindingsCollection DataBindings
        {
            get{
                if (this.dataBindings == null)
                {
                    this.dataBindings = new ControlBindingsCollection(this);
                }
                return this.dataBindings; 
            }
            set { this.dataBindings = value; }
        }

        #endregion