えムナウ Blog

えムナウ の なすがまま

目次

Blog 利用状況

ニュース


follow mnow at http://twitter.com


えムナウのプログラミングのページ

INETAJ

MSMVP for C#
2005/01-2010/12

書庫

日記カテゴリ

ギャラリ

2010年8月10日 #

WPF 選択範囲の調整用 Thumb

コントロールの範囲選択に使うにはとても便利な Thumb の例を一つ。
Drag 用の便利なイベントもあって自分でマウスイベントを取得する必要もない。

 

[TemplatePart(Name = "top", Type = typeof(Thumb))]

[TemplatePart(Name = "left", Type = typeof(Thumb))]

[TemplatePart(Name = "right", Type = typeof(Thumb))]

[TemplatePart(Name = "bottom", Type = typeof(Thumb))]

public class SelectableRect : Thumb

{

    static SelectableRect()

    {

        DefaultStyleKeyProperty.OverrideMetadata(typeof(SelectableRect), new FrameworkPropertyMetadata(typeof(SelectableRect)));

    }

 

    public SelectableRect()

    {

        this.Background = Brushes.Transparent;

        this.BorderThickness = new Thickness(1);

        this.BorderBrush = new SolidColorBrush(Colors.Gray);

        this.Margin = new Thickness(0, 0, 0, 0);

        this.Width = 200;

        this.Height = 200;

        this.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

        this.VerticalAlignment = System.Windows.VerticalAlignment.Top;

    }

 

    public override void OnApplyTemplate()

    {

        base.OnApplyTemplate();

 

        Thumb top = GetTemplateChild("top") as Thumb;

        top.DragStarted += new DragStartedEventHandler(Thumb_DragStarted);

        top.DragCompleted += new DragCompletedEventHandler(Thumb_DragCompleted);

        top.DragDelta += new DragDeltaEventHandler(top_DragDelta);

        Thumb left = GetTemplateChild("left") as Thumb;

        left.DragStarted += new DragStartedEventHandler(Thumb_DragStarted);

        left.DragCompleted += new DragCompletedEventHandler(Thumb_DragCompleted);

        left.DragDelta += new DragDeltaEventHandler(left_DragDelta);

        Thumb right = GetTemplateChild("right") as Thumb;

        right.DragStarted += new DragStartedEventHandler(Thumb_DragStarted);

        right.DragCompleted += new DragCompletedEventHandler(Thumb_DragCompleted);

        right.DragDelta += new DragDeltaEventHandler(right_DragDelta);

        Thumb bottom = GetTemplateChild("bottom") as Thumb;

        bottom.DragStarted += new DragStartedEventHandler(Thumb_DragStarted);

        bottom.DragCompleted += new DragCompletedEventHandler(Thumb_DragCompleted);

        bottom.DragDelta += new DragDeltaEventHandler(bottom_DragDelta);

 

        this.DragStarted += new DragStartedEventHandler(Thumb_DragStarted);

        this.DragCompleted += new DragCompletedEventHandler(Thumb_DragCompleted);

        this.DragDelta += new DragDeltaEventHandler(SelectableRect_DragDelta);

    }

 

    void Thumb_DragStarted(object sender, DragStartedEventArgs e)

    {

        this.Cursor = Cursors.Hand;

        e.Handled = true;

    }

 

    void Thumb_DragCompleted(object sender, DragCompletedEventArgs e)

    {

        this.Cursor = Cursors.Arrow;

        e.Handled = true;

    }

 

    void SelectableRect_DragDelta(object sender, DragDeltaEventArgs e)

    {

        this.Margin = new Thickness(this.Margin.Left + e.HorizontalChange, this.Margin.Top + e.VerticalChange, 0, 0);

        e.Handled = true;

    }

 

    void top_DragDelta(object sender, DragDeltaEventArgs e)

    {

        this.Margin = new Thickness(this.Margin.Left, this.Margin.Top + e.VerticalChange, 0, 0);

        this.Height -= e.VerticalChange;

        e.Handled = true;

    }

 

    void left_DragDelta(object sender, DragDeltaEventArgs e)

    {

        this.Margin = new Thickness(this.Margin.Left + e.HorizontalChange, this.Margin.Top, 0, 0);

        this.Width -= e.HorizontalChange;

        e.Handled = true;

    }

 

    void right_DragDelta(object sender, DragDeltaEventArgs e)

    {

        this.Width += e.HorizontalChange;

        e.Handled = true;

    }

 

    void bottom_DragDelta(object sender, DragDeltaEventArgs e)

    {

        this.Height += e.VerticalChange;

        e.Handled = true;

    }

}

コントロ-ルのテンプレートはこちら。

<Style TargetType="{x:Type local:SelectableRect}">

    <Setter Property="Template">

        <Setter.Value>

            <ControlTemplate TargetType="{x:Type local:SelectableRect}">

                <Border Background="{TemplateBinding Background}"

                        BorderBrush="{TemplateBinding BorderBrush}"

                        BorderThickness="{TemplateBinding BorderThickness}">

                    <Grid>

                        <Grid.RowDefinitions>

                            <RowDefinition />

                            <RowDefinition Height="Auto" />

                            <RowDefinition />

                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>

                            <ColumnDefinition />

                            <ColumnDefinition Width="Auto" />

                            <ColumnDefinition />

                        </Grid.ColumnDefinitions>

                        <ContentPresenter Grid.ColumnSpan="3" Grid.RowSpan="3"/>

                        <Thumb Name="top" Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" Width="10" Height="10" />

                        <Thumb Name="left" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" Width="10" Height="10" />

                        <Thumb Name="right" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" Width="10" Height="10" />

                        <Thumb Name="bottom" Grid.Row="2" Grid.Column="1" VerticalAlignment="Bottom" Width="10" Height="10" />

                    </Grid>

                </Border>

            </ControlTemplate>

        </Setter.Value>

    </Setter>

</Style>

 

コントロール自身も Thumb でドラッグ可能だし範囲選択も Thumb でとても便利です。

image

image

posted @ 21:20 | Feedback (0)

2010年7月28日 #

Reactive Extensions の非同期

Reactive Extensions の非同期 については今まで簡単に書こうというつもりがなく動作検証でいっぱいいっぱいだったため短く1行出かけるパターンをお見せしておきたいと思う。
下のコードはDebug.WriteLineを追加してあるので行数は増えているが抜けば1行でも書ける。

Func<int, int> nullFunc = z => {

  System.Diagnostics.Debug.WriteLine("FromAsyncPattern start"); Thread.Sleep(1000);
  System.Diagnostics.Debug.WriteLine("FromAsyncPattern end"); return z + 1; };


var
fromAsyncPattern = Observable.FromAsyncPattern<int,int>(nullFunc.BeginInvoke, nullFunc.EndInvoke);

var fromAsyncDispose = fromAsyncPattern(1).Subscribe(z =>

        System.Diagnostics.Debug.WriteLine("FromAsyncPattern result {0}", z)

    );

System.Diagnostics.Debug.WriteLine("FromAsyncPattern");

FromAsyncPattern start
FromAsyncPattern
FromAsyncPattern end
FromAsyncPattern result 2

posted @ 2:11 | Feedback (1)

2010年7月25日 #

わんくま同盟 東京勉強会 #50 WD3 お疲れ様でした

わんくま同盟 東京勉強会 #50 WD3 お疲れ様でした。

スピーカの 赤坂玲音さん、マイクロソフト 荒井さん、赤間さん、わんくま 片桐継さん、とても濃くてためになるお話ありがとうございました。

スタッフ、来ていただいた方、USTで見てくれた方ありがとうございました。

今回は見に来ている方がついてこれない濃い内容でも構わないので自分の好きな世界を思いっきり語ってくださいとスピーカ募集段階で言っておいたので、みなさん楽しそうに思いっきりしゃべってもらえました。

またこういう機会をやりたいと思います。

posted @ 11:27 | Feedback (0)

Microsoft Expression Studio 4 日本語版

Microsoft Expression Studio 4 日本語版が 7/21にリリースされてますねぇ。
http://www.microsoft.com/japan/products/expression/products/studio_overview.aspx

英語版の発売時期からしてそろそろだと思っていました。

さっそくダウンロードしなくちゃ。

posted @ 11:19 | Feedback (0)

2010年7月13日 #

わんくま同盟 東京勉強会 #50 WD3

わんくま同盟 東京勉強会 #50 WD3
2010/07/24 10:40-17:20
今回も、赤坂玲音さん、マイクロソフト 荒井さん、赤間さん、わんくま 片桐継さん、と豪華な顔ぶれです。
謎なカードも3枚ほどじゃんけん大会に出るみたいです。

是非ご出席ください。
http://www.wankuma.com/seminar/20100724tokyo50/Default.aspx

 

~~~~~~

今回は、「Wankuma Developer Deep Dive」略して「WD3(キューブ)」と称して、濃い話をする回にしたいと思います。
以前「Microsoft Developer Deep Dive」「MD3(キューブ)」というMicrosoftエバンジェリストが何のしがらみをうけることもなく自分の興味がある研究テーマを思いっきり喋るクローズドイベントがありました。
最近、Microsoftではやってくれないので、わんくまでやってしまおうという試みです、もちろんオープンイベントです。
技術系の濃い話をしたくてしょうがないメンバーをそろえました。
聞いたことのない技術の話が多いと思いますが、新しい世界をかいま見るそんな体験ができると思います。

 

  • 10:20 ~ 開場・受付開始
  • 10:40 ~ 10:50 わんくまについて
  • 10:50 ~ 11:50 「C++ .NET プログラミング」by 赤坂玲音さん Lv3くまー
  • 11:50 ~ 12:50 おひるごはん
  • 12:50 ~ 13:50 「WindowsでGO! Walk on nose!」by 片桐継 Lv2くまー
  • 14:00 ~ 15:00 「コンピュテーションな話題(仮)」by Microsoft 荒井さん Lv3くまー
  • 15:10 ~ 16:10 「Developer Deep Dive into Windows Azure Compute Services」by Microsoft 赤間さん Lv3くまー
  • 16:20 ~ 17:20 「Reactive Extensions for .NET (Rx)の世界」by えムナウ Lv2くまー
  • 18:00 ~ 懇親会
  •  

    ~~~~~~

    posted @ 0:11 | Feedback (1)

    2010年7月10日 #

    Reactive Extensions for .NET (Rx) の トリプルクリック

    Reactive Extensions for .NET (Rx) の トリプルクリック を作ってみた。

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Windows;

    using System.Windows.Controls;

     

    namespace TrippleClick

    {

        public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

     

                var trippleClick = GetMultiClick(button1, 3, 1000);

     

                trippleClick.Subscribe(x => System.Diagnostics.Debug.WriteLine("TrippleClick"));

            }

     

            private IObservable<IEvent<RoutedEventArgs>> GetMultiClick(Button button, int clickCount, int speed)

            {

                Queue<DateTime> timelines = new Queue<DateTime>();

     

                var trippleClick = Observable.FromEvent<RoutedEventArgs>(button, "Click")

                    .Do(e =>

                        {

                            timelines.Enqueue(DateTime.Now);

                            if (timelines.Count > clickCount) timelines.Dequeue();

                        }

                    )

                    .Where(e =>

                        (timelines.Count == clickCount &&

                        (timelines.Last() - timelines.First()).TotalMilliseconds <= speed))

                    .Do(e => timelines.Clear());

                return trippleClick;

            }

        }

    }

     

    posted @ 16:39 | Feedback (0)

    2010年7月2日 #

    Reactive Extensions for .NET のサンプル その2

    Reactive Extensions for .NET のサンプル

    System.Interactive.dll が必要です。

    http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

    using System;

    using System.Collections.Generic;

    using System.Linq;

     

    namespace Enumerable2

    {

        class Program

        {

            static int counter;

     

            static int[] datas = { 1, 2, 3, 4, 5 };

            static int[] datas3 = { 11, 12, 13, 14, 15 };

            static int[] datas4 = { 21, 22, 23, 24, 25 };

     

            static double[] doubledatas = { 0.5, 1.5, 2.5 };

     

            static IEnumerable<int> datasMethod1()

            {

                yield return 1;

                yield return 2;

                yield return 3;

                throw new ApplicationException();

            }

     

            static IEnumerable<int> datasMethod2()

            {

                yield return 6;

                yield return 7;

                yield return 8;

                throw new ApplicationException();

            }

     

            static IEnumerable<int> datasMethod3()

            {

                yield return 11;

                yield return 12;

                yield return 13;

                throw new ApplicationException();

            }

     

            static IEnumerable<int> datasMethod4()

            {

                yield return 1;

                yield return 2;

                yield return 3;

                counter++;

            }

     

            class Person : IDisposable

            {

                public int ID; public string Name;

     

                public void Dispose()

                {

                    System.Diagnostics.Debug.WriteLine("Disposed.");

                }

            }

     

            static void Main(string[] args)

            {

                var let = datas.Let(x =>

                    {

                        List<int> list = new List<int>();

                        foreach (var n in x)

                        {

                            list.Add(n + 1);

                        }

                        return list;

                    }

                );

                foreach (var z in let)

                {

                    System.Diagnostics.Debug.WriteLine("Let {0}", z);

                }

     

                var longcount = datas.LongCount(x => x < 3);

                System.Diagnostics.Debug.WriteLine("LongCount {0}", longcount);

     

                var maxenumerable = datas.MaxEnumerable();

                foreach (var z in maxenumerable)

                {

                    System.Diagnostics.Debug.WriteLine("MaxEnumerable {0}", z);

                }

     

                var memoize = datas.Memoize();      //caches

                foreach (var z in memoize)

                {

                    System.Diagnostics.Debug.WriteLine("Memoize {0}", z);

                }

     

                var memoize2 = datas.Memoize(1024);

                foreach (var z in memoize2)

                {

                    System.Diagnostics.Debug.WriteLine("Memoize2 {0}", z);

                }

     

                var memoizeall = datas.MemoizeAll();      //caches

                foreach (var z in memoizeall)

                {

                    System.Diagnostics.Debug.WriteLine("MemoizeAll {0}", z);

                }

     

                var minenumerable = datas.MinEnumerable();

                foreach (var z in minenumerable)

                {

                    System.Diagnostics.Debug.WriteLine("MinEnumerable {0}", z);

                }

     

                // simple catch

                var onerrorresumenext = EnumerableEx.OnErrorResumeNext(datasMethod1());

                foreach (var z in onerrorresumenext)

                {

                    System.Diagnostics.Debug.WriteLine("OnErrorResumeNext {0}", z);

                }

     

                var onerrorresumenext2 = EnumerableEx.OnErrorResumeNext(datasMethod1(),datasMethod2());

                foreach (var z in onerrorresumenext2)

                {

                    System.Diagnostics.Debug.WriteLine("OnErrorResumeNext2 {0}", z);

                }

     

                var onerrorresumenext3 = EnumerableEx.OnErrorResumeNext(datasMethod1(), datasMethod2(), datasMethod3());

                foreach (var z in onerrorresumenext3)

                {

                    System.Diagnostics.Debug.WriteLine("OnErrorResumeNext3 {0}", z);

                }

     

                // Share & Let

                var prune = datas.Prune(x =>

                {

                    List<int> list = new List<int>();

                    foreach (var n in x)

                    {

                        list.Add(n + 1);

                    }

                    return list;

                }

                );

                foreach (var z in prune)

                {

                    System.Diagnostics.Debug.WriteLine("Prune {0}", z);

                }

     

                // StartWith & Let & Memoizeall

                var publish = datas.Publish(x =>

                {

                    List<int> list = new List<int>();

                    foreach (var n in x)

                    {

                        list.Add(n + 1);

                    }

                    return list;

                },

                0);

                foreach (var z in publish)

                {

                    System.Diagnostics.Debug.WriteLine("Publish {0}", z);

                }

     

                // Serializable & MarshalByRefObject

                var remotable = datas.Remotable();

                foreach (var z in remotable)

                {

                    System.Diagnostics.Debug.WriteLine("Remotable {0}", z);

                }

     

                var repeat = EnumerableEx.Repeat(1).Take(5);

                foreach (var z in repeat)

                {

                    System.Diagnostics.Debug.WriteLine("Repeat {0}", z);

                }

     

                var repeat2 = EnumerableEx.Repeat(1, 5);

                foreach (var z in repeat2)

                {

                    System.Diagnostics.Debug.WriteLine("Repeat2 {0}", z);

                }

     

                var repeat3 = datas.Repeat().Take(6);

                foreach (var z in repeat3)

                {

                    System.Diagnostics.Debug.WriteLine("Repeat3 {0}", z);

                }

     

                var repeat4 = datas.Repeat(2);

                foreach (var z in repeat4)

                {

                    System.Diagnostics.Debug.WriteLine("Repeat4 {0}", z);

                }

     

                // Memoize & Let

                var replay = datas.Replay(x =>

                {

                    List<int> list = new List<int>();

                    foreach (var n in x)

                    {

                        list.Add(n + 1);

                    }

                    return list;

                },

                1024);

                foreach (var z in replay)

                {

                    System.Diagnostics.Debug.WriteLine("Replay {0}", z);

                }

     

                // Exception Retry

                var retry = datasMethod1().Retry().Take(5);

                foreach (var z in retry)

                {

                    System.Diagnostics.Debug.WriteLine("Retry {0}", z);

                }

     

                var retry2 = datasMethod1().Retry(2);

                foreach (var z in retry2)

                {

                    System.Diagnostics.Debug.WriteLine("Retry2 {0}", z);

                }

     

                // IEnumerable

                var returnquery = EnumerableEx.Return(3);

                foreach (var z in returnquery)

                {

                    System.Diagnostics.Debug.WriteLine("Return {0}", z);

                }

     

                try

                {

                    datasMethod1().Run(

                        x => System.Diagnostics.Debug.WriteLine("Run {0}", x),

                        x => System.Diagnostics.Debug.WriteLine("Exception " + x.Message),

                        () => System.Diagnostics.Debug.WriteLine("no error finary")

                    );

                }

                catch(Exception)

                {

                }

                finally

                {

                    System.Diagnostics.Debug.WriteLine("finary");

                }

     

                EnumerableEx.Repeat(1, 5).Run(x => System.Diagnostics.Debug.WriteLine("Run2 {0}", x));

     

                try

                {

                    var doquery = datasMethod1().Do(

                        x => System.Diagnostics.Debug.WriteLine("Do {0}", x),

                        x => System.Diagnostics.Debug.WriteLine("Exception " + x.Message),

                        () => System.Diagnostics.Debug.WriteLine("no error finary")

                    );

                    doquery.Run();

                }

                catch (Exception)

                {

                }

                finally

                {

                    System.Diagnostics.Debug.WriteLine("finary");

                }

     

                var scan = datas.Scan(10, (x, y) => x + y);

                foreach (var z in scan)

                {

                    System.Diagnostics.Debug.WriteLine("Scan {0}", z);

                }

     

                var scan0 = datas.Scan0(10, (x, y) => x + y);

                foreach (var z in scan0)

                {

                    System.Diagnostics.Debug.WriteLine("Scan0 {0}", z);

                }

     

                var selectmany = datas.SelectMany(doubledatas);

                foreach (var z in selectmany)

                {

                    System.Diagnostics.Debug.WriteLine("SelectMany {0}", z);

                }

     

                // lock

                var share = datas.Share();

                foreach (var z in share)

                {

                    System.Diagnostics.Debug.WriteLine("Share {0}", z);

                }

     

                var skiplast = datas.SkipLast(3);

                foreach (var z in skiplast)

                {

                    System.Diagnostics.Debug.WriteLine("SkipLast {0}", z);

                }

     

                var startwith = datas.StartWith(0);

                foreach (var z in startwith)

                {

                    System.Diagnostics.Debug.WriteLine("StartWith {0}", z);

                }

     

                var startwith2 = datas.StartWith(5, 6, 7, 8);

                foreach (var z in startwith2)

                {

                    System.Diagnostics.Debug.WriteLine("StartWith2 {0}", z);

                }

     

                var sumenumerable = datas.SumEnumerable();

                foreach (var z in sumenumerable)

                {

                    System.Diagnostics.Debug.WriteLine("SumEnumerable {0}", z);

                }

     

                var takelast = datas.TakeLast(3);

                foreach (var z in takelast)

                {

                    System.Diagnostics.Debug.WriteLine("TakeLast {0}", z);

                }

     

                var throwquery = EnumerableEx.Throw<int>(new Exception());

                try

                {

                    throwquery.Run();

                }

                catch (Exception ex)

                {

                    System.Diagnostics.Debug.WriteLine("Throw " + ex.Message);

                }

     

                var usingquery = EnumerableEx.Using(

                    () => new Person() { ID = 15, Name = "えムナウ" },

                    p => new int[] { p.ID }

                );

                foreach (var z in usingquery)

                {

                    System.Diagnostics.Debug.WriteLine("Using {0}", z);

                }

     

                counter = 0;

                var whilequery = EnumerableEx.While(() => counter < 2, datasMethod4());

                foreach (var z in whilequery)

                {

                    System.Diagnostics.Debug.WriteLine("While {0}", z);

                }

            }

        }

    }

     

     

    Let 2
    Let 3
    Let 4
    Let 5
    Let 6
    LongCount 2
    MaxEnumerable 5
    Memoize 1
    Memoize 2
    Memoize 3
    Memoize 4
    Memoize 5
    Memoize2 1
    Memoize2 2
    Memoize2 3
    Memoize2 4
    Memoize2 5
    MemoizeAll 1
    MemoizeAll 2
    MemoizeAll 3
    MemoizeAll 4
    MemoizeAll 5
    MinEnumerable 1
    OnErrorResumeNext 1
    OnErrorResumeNext 2
    OnErrorResumeNext 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    OnErrorResumeNext2 1
    OnErrorResumeNext2 2
    OnErrorResumeNext2 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    OnErrorResumeNext2 6
    OnErrorResumeNext2 7
    OnErrorResumeNext2 8
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    OnErrorResumeNext3 1
    OnErrorResumeNext3 2
    OnErrorResumeNext3 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    OnErrorResumeNext3 6
    OnErrorResumeNext3 7
    OnErrorResumeNext3 8
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    OnErrorResumeNext3 11
    OnErrorResumeNext3 12
    OnErrorResumeNext3 13
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Prune 2
    Prune 3
    Prune 4
    Prune 5
    Prune 6
    Publish 1
    Publish 2
    Publish 3
    Publish 4
    Publish 5
    Publish 6
    Remotable 1
    Remotable 2
    Remotable 3
    Remotable 4
    Remotable 5
    Repeat 1
    Repeat 1
    Repeat 1
    Repeat 1
    Repeat 1
    Repeat2 1
    Repeat2 1
    Repeat2 1
    Repeat2 1
    Repeat2 1
    Repeat3 1
    Repeat3 2
    Repeat3 3
    Repeat3 4
    Repeat3 5
    Repeat3 1
    Repeat4 1
    Repeat4 2
    Repeat4 3
    Repeat4 4
    Repeat4 5
    Repeat4 1
    Repeat4 2
    Repeat4 3
    Repeat4 4
    Repeat4 5
    Replay 2
    Replay 3
    Replay 4
    Replay 5
    Replay 6
    Retry 1
    Retry 2
    Retry 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Retry 1
    Retry 2
    Retry2 1
    Retry2 2
    Retry2 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Retry2 1
    Retry2 2
    Retry2 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Return 3
    Run 1
    Run 2
    Run 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Exception アプリケーションでエラーが発生しました。
    'System.ApplicationException' の初回例外が System.Interactive.dll で発生しました。
    finary
    Run2 1
    Run2 1
    Run2 1
    Run2 1
    Run2 1
    Do 1
    Do 2
    Do 3
    'System.ApplicationException' の初回例外が Enumerable2.exe で発生しました。
    Exception アプリケーションでエラーが発生しました。
    'System.ApplicationException' の初回例外が System.Interactive.dll で発生しました。
    finary
    Scan 10
    Scan 11
    Scan 13
    Scan 16
    Scan 20
    Scan 25
    Scan0 10
    Scan0 11
    Scan0 13
    Scan0 16
    Scan0 20
    Scan0 25
    SelectMany 0.5
    SelectMany 1.5
    SelectMany 2.5
    SelectMany 0.5
    SelectMany 1.5
    SelectMany 2.5
    SelectMany 0.5
    SelectMany 1.5
    SelectMany 2.5
    SelectMany 0.5
    SelectMany 1.5
    SelectMany 2.5
    SelectMany 0.5
    SelectMany 1.5
    SelectMany 2.5
    Share 1
    Share 2
    Share 3
    Share 4
    Share 5
    SkipLast 1
    SkipLast 2
    StartWith 0
    StartWith 1
    StartWith 2
    StartWith 3
    StartWith 4
    StartWith 5
    StartWith2 5
    StartWith2 6
    StartWith2 7
    StartWith2 8
    StartWith2 1
    StartWith2 2
    StartWith2 3
    StartWith2 4
    StartWith2 5
    SumEnumerable 15
    TakeLast 3
    TakeLast 4
    TakeLast 5
    'System.Exception' の初回例外が System.Interactive.dll で発生しました。
    Throw 種類 'System.Exception' の例外がスローされました。
    Using 15
    Disposed.
    While 1
    While 2
    While 3
    While 1
    While 2
    While 3

    posted @ 12:02 | Feedback (1)

    2010年7月1日 #

    Reactive Extensions for .NET のサンプル その1

    Reactive Extensions for .NET のサンプル

    System.Interactive.dll が必要です。

    http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

     

    Console アプリケーションじゃないのはなぜって質問はスルーの方向で。

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Windows;

     

    namespace Enumerable

    {

        public partial class MainWindow : Window

        {

            int counter;

     

            int[] datas = { 1, 2, 3, 4, 5 };

            int[] datas2 = { };

            int[] datas3 = { 11, 12, 13, 14, 15 };

            int[] datas4 = { 21, 22, 23, 24, 25 };

            int[] datas5 = { 1, 2, 3, 3, 4, 1, 4, 5 };

     

            IEnumerable<int> datasMethod1()

            {

                yield return 1;

                yield return 2;

                yield return 3;

                throw new ApplicationException();

            }

     

            IEnumerable<int> datasMethod2()

            {

                yield return 6;

                yield return 7;

                yield return 8;

                throw new ApplicationException();

            }

     

            IEnumerable<int> datasMethod3()

            {

                yield return 11;

                yield return 12;

                yield return 13;

                throw new ApplicationException();

            }

     

            IEnumerable<int> datasMethod4()

            {

                yield return 1;

                yield return 2;

                yield return 3;

                counter++;

            }

     

            class Person { public int ID; public string Name; }

            Person[] persons =

            {

                new Person() { ID=1, Name="中さん" },

                new Person() { ID=15, Name="えムナウ"},

                new Person() { ID=34, Name="R・田中一郎"}

            };

     

            public MainWindow()

            {

                InitializeComponent();

     

                var aggregateEnumerable = datas.AggregateEnumerable((x, y) => x + y);

                foreach (var z in aggregateEnumerable)

                {

                    System.Diagnostics.Debug.WriteLine("AggregateEnumerable {0}", z);

                }

     

                var allEnumerable = datas.AllEnumerable(x => x > 0);

                foreach (var z in allEnumerable)

                {

                    System.Diagnostics.Debug.WriteLine("AllEnumerable {0}", z);

                }

     

                var anyEnumerable = datas.AnyEnumerable(x => x > 4);

                foreach (var z in anyEnumerable)

                {

                    System.Diagnostics.Debug.WriteLine("AnyEnumerable {0}", z);

                }

     

                var anyEnumerable2 = datas2.AnyEnumerable();

                foreach (var z in anyEnumerable2)

                {

                    System.Diagnostics.Debug.WriteLine("AnyEnumerable2 {0}", z);

                }

     

                var averageEnumerable = datas.AverageEnumerable();

                foreach (var z in averageEnumerable)

                {

                    System.Diagnostics.Debug.WriteLine("AverageEnumerable {0}", z);

                }

     

                var bufferWithCount = datas.BufferWithCount(2);

                foreach (var list in bufferWithCount)

                {

                    System.Diagnostics.Debug.WriteLine("BufferWithCount list {0}", list);

                    foreach (var z in list)

                    {

                        System.Diagnostics.Debug.WriteLine("BufferWithCount {0}", z);

                    }

                }

     

                var casequery = EnumerableEx.Case(

                    ()=>1,

                    new Dictionary<int,IEnumerable<int>>(){

                        {1,datas},{2,datas2}        // switch case

                    },

                    datasMethod1()                        // default

                );

                foreach (var z in casequery)

                {

                    System.Diagnostics.Debug.WriteLine("EnumerableEx.Case {0}", z);

                }

     

                var catchquery = datasMethod1().Catch((Exception e) => System.Linq.Enumerable.Empty<int>());

                foreach (var z in catchquery)

                {

                    System.Diagnostics.Debug.WriteLine("Catch {0}", z);

                }

     

                try

                {

                    var catchquery2 = datasMethod1().Catch((SystemException e) => System.Linq.Enumerable.Empty<int>());

                    foreach (var z in catchquery2)

                    {

                        System.Diagnostics.Debug.WriteLine("Catch2 {0}", z);

                    }

                }

                catch (Exception ex)

                {

                    System.Diagnostics.Debug.WriteLine("Catch2 exception " + ex.Message);

                }

               

                var catchquery3 = datasMethod1().Catch(

                    (Exception e) => System.Linq.Enumerable.Empty<int>())       // try catch

                    .Finally(() => System.Diagnostics.Debug.WriteLine("finary"));     //finary

                foreach (var z in catchquery3)

                {

                    System.Diagnostics.Debug.WriteLine("Catch3 {0}", z);

                }

     

                var catchquery4 = datasMethod1().Catch(datasMethod2());

                foreach (var z in catchquery4)

                {

                    System.Diagnostics.Debug.WriteLine("Catch4 {0}", z);

                }

     

                var catchquery5 = EnumerableEx.Catch(datasMethod1(),datasMethod2(),datasMethod3());

                foreach (var z in catchquery5)

                {

                    System.Diagnostics.Debug.WriteLine("Catch5 {0}", z);

                }

     

                var concat = datas.Concat(datas3);

                foreach (var z in concat)

                {

                    System.Diagnostics.Debug.WriteLine("Concat {0}", z);

                }

     

                var concat2 = EnumerableEx.Concat(datas,datas3,datas4);

                foreach (var z in concat2)

                {

                    System.Diagnostics.Debug.WriteLine("Concat2 {0}", z);

                }

     

                var contains = datas.ContainsEnumerable(3);

                foreach (var z in contains)

                {

                    System.Diagnostics.Debug.WriteLine("Contains {0}", z);

                }

     

                var count = datas.CountEnumerable();

                foreach (var z in count)

                {

                    System.Diagnostics.Debug.WriteLine("CountEnumerable {0}", z);

                }

     

                var textvalue = "ONE";

                var defar = EnumerableEx.Defer(() =>

                    {

                        if (textvalue == "ONE") return datas;

                        if (textvalue == "TWO") return datas2;

                        return datas3;

                    }

                );

                foreach (var z in defar)

                {

                    System.Diagnostics.Debug.WriteLine("Defer {0}", z);

                }

     

                var distinct = datas5.Distinct();

                foreach (var z in distinct)

                {

                    System.Diagnostics.Debug.WriteLine("Distinct {0}", z);

                }

     

                var distinctUntilChanged = datas5.DistinctUntilChanged();

                foreach (var z in distinctUntilChanged)

                {

                    System.Diagnostics.Debug.WriteLine("DistinctUntilChanged {0}", z);

                }

     

                counter = 0;

                var dowhile = datasMethod4().DoWhile(() => counter < 2);

                foreach (var z in dowhile)

                {

                    System.Diagnostics.Debug.WriteLine("DoWhile {0}", z);

                }

     

                var forquery = EnumerableEx.For(persons, p => new int[] { p.ID });

                foreach (var z in forquery)

                {

                    System.Diagnostics.Debug.WriteLine("For {0}", z);

                }

     

                var forkjoin = EnumerableEx.ForkJoin(datas, datas3, datas4);

                foreach (var array in forkjoin)

                {

                    System.Diagnostics.Debug.WriteLine("ForkJoin array {0}", array);

                    foreach (var z in array)

                    {

                        System.Diagnostics.Debug.WriteLine("ForkJoin {0}", z);

                    }

                }

     

                var generate = EnumerableEx.Generate(0, x => x < 5, x => x, x => x + 1);

                foreach (var z in generate)

                {

                    System.Diagnostics.Debug.WriteLine("Generate {0}", z);

                }

     

                var ifquery = EnumerableEx.If(() => true, datas, datas3);

                foreach (var z in ifquery)

                {

                    System.Diagnostics.Debug.WriteLine("If {0}", z);

                }

     

                bool isempty = datas2.IsEmpty();

                System.Diagnostics.Debug.WriteLine("IsEmpty {0}", isempty);

     

                var isempty2 = datas2.IsEmptyEnumerable();

                foreach (var z in isempty2)

                {

                    System.Diagnostics.Debug.WriteLine("IsEmptyEnumerable {0}", z);

                }

            }

        }

    }

     

    AggregateEnumerable 15
    AllEnumerable True
    AnyEnumerable True
    AnyEnumerable2 False
    AverageEnumerable 3
    BufferWithCount list System.Collections.Generic.List`1[System.Int32]
    BufferWithCount 1
    BufferWithCount 2
    BufferWithCount list System.Collections.Generic.List`1[System.Int32]
    BufferWithCount 3
    BufferWithCount 4
    BufferWithCount list System.Collections.Generic.List`1[System.Int32]
    BufferWithCount 5
    EnumerableEx.Case 1
    EnumerableEx.Case 2
    EnumerableEx.Case 3
    EnumerableEx.Case 4
    EnumerableEx.Case 5
    Catch 1
    Catch 2
    Catch 3
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Catch2 1
    Catch2 2
    Catch2 3
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    'System.ApplicationException' の初回例外が System.Interactive.dll で発生しました。
    Catch2 exception アプリケーションでエラーが発生しました。
    Catch3 1
    Catch3 2
    Catch3 3
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    finary
    Catch4 1
    Catch4 2
    Catch4 3
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Catch4 6
    Catch4 7
    Catch4 8
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Catch5 1
    Catch5 2
    Catch5 3
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Catch5 6
    Catch5 7
    Catch5 8
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Catch5 11
    Catch5 12
    Catch5 13
    'System.ApplicationException' の初回例外が Enumerable.exe で発生しました。
    Concat 1
    Concat 2
    Concat 3
    Concat 4
    Concat 5
    Concat 11
    Concat 12
    Concat 13
    Concat 14
    Concat 15
    Concat2 1
    Concat2 2
    Concat2 3
    Concat2 4
    Concat2 5
    Concat2 11
    Concat2 12
    Concat2 13
    Concat2 14
    Concat2 15
    Concat2 21
    Concat2 22
    Concat2 23
    Concat2 24
    Concat2 25
    Contains True
    CountEnumerable 5
    Defer 1
    Defer 2
    Defer 3
    Defer 4
    Defer 5
    Distinct 1
    Distinct 2
    Distinct 3
    Distinct 4
    Distinct 5
    DistinctUntilChanged 1
    DistinctUntilChanged 2
    DistinctUntilChanged 3
    DistinctUntilChanged 4
    DistinctUntilChanged 1
    DistinctUntilChanged 4
    DistinctUntilChanged 5
    DoWhile 1
    DoWhile 2
    DoWhile 3
    DoWhile 1
    DoWhile 2
    DoWhile 3
    For 1
    For 15
    For 34
    ForkJoin array System.Int32[]
    ForkJoin 5
    ForkJoin 15
    ForkJoin 25
    Generate 0
    Generate 1
    Generate 2
    Generate 3
    Generate 4
    If 1
    If 2
    If 3
    If 4
    If 5
    IsEmpty True
    IsEmptyEnumerable True

    posted @ 18:50 | Feedback (1)

    サーバーバリデーションのテスト ってみんなどうやっているんだろう?

    ASP.NETでTEXTBOXをHTMLで文字数制限かけている奴のサーバーバリデーションのテストってみんなどうやっているんだろう?入力できないから通せないよね。
    TextBox だと MaxLength とかですね。

    でもやっておかないとサイト偽造とかされたら問題が発覚するでしょ?

    ユニットテストで Sesson とかいじって テストするしかないんだろうか?

    posted @ 2:58 | Feedback (1)

    2010年6月30日 #

    T4 テンプレート のサンプルファイル

    T4 テンプレート (この言い方はあまり好きではないのですが T4 じゃ検索に引っかからないらしいので) の DataSet のサンプルファイルをUPしました。

    勉強会で使っていたやつです。
    同じ場所に勉強会のPPTもありますのでご一緒にどうぞ。

    http://www.mnow.jp/tabid/220/Default.aspx

    posted @ 19:38 | Feedback (0)

    2010年6月3日 #

    わんくま同盟 東京勉強会 #48 VS2010CLT

    今回の東京勉強会#48はVisual Studio 2010 の Launch を行います。
    まだ登録も可能です。
    http://www.wankuma.com/seminar/20100605tokyo48/Default.aspx

    マイクロソフト近藤さん・平井さんや、初登壇となるcoddledeggさんを講師にお迎えして、わんくま 中・えムナウも含め Visual Studio 2010 を色々な切り口で語ります。
    ライトニングトークのメンバーもすごいです。
    インフラジスティックスさんとグレープシティさんからの豪華じゃんけん大会もあります。
    Visual Studio 2010 について使いたい人や知りたい人、買おうかどうか迷っている人、どんなに素晴らしい機能が増えているか見に来てみませんか?

    開催日・場所
    2010/06/05 10:50-17:10

    会場情報:東京 マイクロソフト株式会社 本社 新宿オフィス  5F セミナールームA+B(先着100名)
    住所:東京都渋谷区代々木 2-2-1 小田急サザンタワー Telephone 03-4332-5300 

    アクセス情報 :
    JR新宿駅 南口 徒歩3分
    JR代々木駅 北口 徒歩5分

    ステップバイステップによる会場までの行き方

    参加料(寄付):目安1,000円 (今後のサーバ増強費、回線費、講師交通費、会場費などに充当させていただきます。よろしくおねがいいたします。)

    ?10:30 ~ 開場・受付開始
    ?10:50 ~ 11:00 わんくまについて
    ?11:00 ~ 11:30 ライトニングトーク
    ?インフラジステックス池原さん
    ?マイクロソフト荒井さん
    ?グレープシティ八巻さん
    ?ひらぽんさん
    ?11:30 ~ 12:20 「VS2010 デバッグ、テスト、プロファイル」by 中博俊 Lv1くまー
    ?12:20 ~ 13:20 おひるごはん
    ?13:20 ~ 14:10 「デザイナー 的Visual Studio 2010~Silverlight編~」by coddledeggさん Lv1くまー
    ?14:20 ~ 15:10 「Microsoft Test Manager 2010 を活用した新しいテスト」by マイクロソフト近藤さん Lv2くまー
    ?15:20 ~ 16:10 「Visual Studio 2010 による Office 開発」by ジニアス平井さん Lv2くまー
    ?16:20 ~ 17:10 「T4で簡単に疎結合」by えムナウ Lv2くまー
    ?18:00 ~ 懇親会

    posted @ 22:45 | Feedback (1)

    2010年4月23日 #

    IObservable と IObserver

    .Net Frmaework 4.0 で IObservable<T> と IObserver<T> が追加された。
    Observer パターンの実装を簡単に行うためのインターフェースだ。


    その奥には Reactive Extensions for .NET という興味深いプロジェクトがある。
    http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

    非同期実行やイベントの集積を Linq でやってしまおうってのはどんだけすごい発想なんだと思ってしまう。

    posted @ 0:06 | Feedback (0)

    2010年4月18日 #

    T4 のインクルードファイルの置き場所

    T4 のインクルードファイルの置き場所を登録しておけば自動的に見に行ってくれるようです。

    レジストリ「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\TextTemplating\IncludeFolders\.tt」で、Include0 REG_SZ <Your Path> って感じでFullPathを登録します。

    VisualStudio2010は9.0のところを10.0にすればいいです。

    VisualStudio2010は以下のフォルダが既に指定してあります。
    C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes

    T4 のインクルードファイルはMicrosoftは .ttinclude と拡張子を書いていますので、これからはそれにならって書いていくことにします。

    posted @ 11:10 | Feedback (0)

    2010年4月1日 #

    *毎年エプリルフールのまとめを出しているわけだが

    今年はこのサイトがあるので不要な気がする。

    http://gigazine.net/index.php?/news/comments/20100401_matome_april_fool/

    posted @ 14:40 | Feedback (0)

    *伊藤さんの本が出たそうだ

    http://blogs.bitlan.net/ito/?p=731
    拙著:「かんたんC#」のご紹介(Ito Blog)

    伊藤さんの本が出たそうだ

    なんかエイプリルフールじゃなくほんとに出たみたい。
    嘘みたいなほんとの話ってあるんですねぇ。

    posted @ 13:23 | Feedback (1)

    2010年2月25日 #

    Dataset のクラスを T4 で作る

    こんなプロジェクトを作る。

    project2

    DataSet を別DLLで用意する。
    今回は Northwnd サンプルデータベースの Employees を利用する。

    注意点は決して同時にビルドをしないように「ビルド-構成マネージャ」で設定しモデルを先にビルドしておく。
    Manager

    classbody.txt

    namespace    <#= namespacename #>
    {
        public class <#= table.TableName #> {
    <# for (int i = 0; i < table.Columns.Count; i++) { #>
            private    <#= table.Columns[i].DataType.FullName #> _<#= table.Columns[i].ColumnName #> ;
            public    <#= table.Columns[i].DataType.FullName #> <#= table.Columns[i].ColumnName #>
            {
                get
                {
                    return _<#= table.Columns[i].ColumnName #> ;
                }
                set
                {
                    _<#= table.Columns[i].ColumnName #> = value ;
                }
            }
    <# } #>
        }
    }

    T4DataSet.tt

    <#@ template language="C#v3.5" debug="true" #>
    <#@ output extension="cs" encoding="utf-8" #>
    <#@ assembly name="System.Xml.dll" #>
    <#@ import namespace="System.Xml" #>
    <#@ assembly name="System.Data.DataSetExtensions.dll" #>
    <#@ import namespace="System.Data.DataSetExtensions" #>
    <#@ assembly name="System.Data.dll" #>
    <#@ import namespace="System.Data" #>
    <#@ assembly name="C:\Users\hkodama\Documents\Visual Studio 2008\Projects\T4DbTest\T4DbModel\bin\Debug\T4DbModel.dll" #>
    <#@ import namespace="T4DbModel" #>
    <#@ include file="Templates/classbody.txt" #>
    <#+
        string namespacename = "T4DbTest";
        NorthwndDataSet.EmployeesDataTable table = new NorthwndDataSet.EmployeesDataTable();
    #>

    T4DbModel.dll をフルパスで入れなければいけないのが難点。
    また、T4DbModel.dllを使っているので同時にビルドもできない。

    そうすると T4DataSet.cs にこんなソースが出来る。
    MVVM の VM も簡単に作れる。

    namespace    T4DbTest
    {
        public class Employees {
            private    System.Int32 _EmployeeID ;
            public    System.Int32 EmployeeID
            {
                get
                {
                    return _EmployeeID ;
                }
                set
                {
                    _EmployeeID = value ;
                }
            }
            private    System.String _LastName ;
            public    System.String LastName
            {
                get
                {
                    return _LastName ;
                }
                set
                {
                    _LastName = value ;
                }
            }
            private    System.String _FirstName ;
            public    System.String FirstName
            {
                get
                {
                    return _FirstName ;
                }
                set
                {
                    _FirstName = value ;
                }
            }
            private    System.String _Title ;
            public    System.String Title
            {
                get
                {
                    return _Title ;
                }
                set
                {
                    _Title = value ;
                }
            }
            private    System.String _TitleOfCourtesy ;
            public    System.String TitleOfCourtesy
            {
                get
                {
                    return _TitleOfCourtesy ;
                }
                set
                {
                    _TitleOfCourtesy = value ;
                }
            }
            private    System.DateTime _BirthDate ;
            public    System.DateTime BirthDate
            {
                get
                {
                    return _BirthDate ;
                }
                set
                {
                    _BirthDate = value ;
                }
            }
            private    System.DateTime _HireDate ;
            public    System.DateTime HireDate
            {
                get
                {
                    return _HireDate ;
                }
                set
                {
                    _HireDate = value ;
                }
            }
            private    System.String _Address ;
            public    System.String Address
            {
                get
                {
                    return _Address ;
                }
                set
                {
                    _Address = value ;
                }
            }
            private    System.String _City ;
            public    System.String City
            {
                get
                {
                    return _City ;
                }
                set
                {
                    _City = value ;
                }
            }
            private    System.String _Region ;
            public    System.String Region
            {
                get
                {
                    return _Region ;
                }
                set
                {
                    _Region = value ;
                }
            }
            private    System.String _PostalCode ;
            public    System.String PostalCode
            {
                get
                {
                    return _PostalCode ;
                }
                set
                {
                    _PostalCode = value ;
                }
            }
            private    System.String _Country ;
            public    System.String Country
            {
                get
                {
                    return _Country ;
                }
                set
                {
                    _Country = value ;
                }
            }
            private    System.String _HomePhone ;
            public    System.String HomePhone
            {
                get
                {
                    return _HomePhone ;
                }
                set
                {
                    _HomePhone = value ;
                }
            }
            private    System.String _Extension ;
            public    System.String Extension
            {
                get
                {
                    return _Extension ;
                }
                set
                {
                    _Extension = value ;
                }
            }
            private    System.Byte[] _Photo ;
            public    System.Byte[] Photo
            {
                get
                {
                    return _Photo ;
                }
                set
                {
                    _Photo = value ;
                }
            }
            private    System.String _Notes ;
            public    System.String Notes
            {
                get
                {
                    return _Notes ;
                }
                set
                {
                    _Notes = value ;
                }
            }
            private    System.Int32 _ReportsTo ;
            public    System.Int32 ReportsTo
            {
                get
                {
                    return _ReportsTo ;
                }
                set
                {
                    _ReportsTo = value ;
                }
            }
            private    System.String _PhotoPath ;
            public    System.String PhotoPath
            {
                get
                {
                    return _PhotoPath ;
                }
                set
                {
                    _PhotoPath = value ;
                }
            }
        }
    }

    posted @ 22:19 | Feedback (1)

    2010年2月24日 #

    クラスを T4 で作る

    こんなプロジェクトを作る。

    project

     

    classbody.txt

    namespace    <#= namespacename #>
    {
        public class <#= classname #> {
    <# for (int i = 0; i < properties.Length; i++) { #>
            private    <#= properties[i].Typename #> <#= properties[i].Privatename #> ;
            public    <#= properties[i].Typename #> <#= properties[i].Publicname #>
            {
                get
                {
                    return <#= properties[i].Privatename #> ;
                }
                set
                {
                    <#= properties[i].Privatename #> = value ;
                }
            }
    <# } #>
        }
    }

    propertydefine.txt

    <#+
        class PropertyDefine
        {
            public string Typename;
            public string Privatename;
            public string Publicname;
            public PropertyDefine(string typename, string privatename, string publicname)
            {
                Typename = typename;
                Privatename = privatename;
                Publicname = publicname;
            }
        }
    #>

    T4Test.tt

    <#@ template language="C#v3.5" debug="true" #>
    <#@ output extension="cs" encoding="utf-8" #>
    <#@ include file="Templates/classbody.txt" #>
    <#@ include file="Templates/propertydefine.txt" #>
    <#+
        string namespacename = "T4Test";
        string classname = "T4TestClass";
        PropertyDefine[] properties = {
            new PropertyDefine("string","a","A")
        };
    #>

    すると T4Test.cs にこんなソースができる。

    namespace    T4Test
    {
        public class T4TestClass {
            private    string a ;
            public    string A
            {
                get
                {
                    return a ;
                }
                set
                {
                    a = value ;
                }
            }
        }
    }

    classbody.txt や propertydefine.txt は使い回しが出来る。
    classbody.txt を変更すれば MVVM のVM も簡単に作れる。

    便利な時代になったもんだ。

    posted @ 16:28 | Feedback (0)

    2010年2月21日 #

    シアトル

    子供が大学入試で毎日猛勉強している。
    世間は不況で仕事も順調とは言いにくい。
    そんな時期だからこそ私もシアトルで未来に向けての猛勉強をしてこようと思う。
    過去3回のシアトルは確実に私の生活にいい影響を与えていると思っているので、今回もより成長して帰ってきたい。

    初日 2/16
    2/16の夕方飛び立って2/16の朝に到着。
    ホテルのチェックインとMVPのレジストをして、
    昼食はMichikoさんを筆頭に9名でハンバーガー屋に、
    私はコーラとみんなで頼んだオニオンタワーだけ。
    オニオンリングをタワーにして10個以上積み上げたやつ。
    皆さんはもう一皿ハンバーガーやパスタを頼んでいたが、
    私は無理そうだったので・・・
    結局皆さんも残したりオニオンタワー結構残ったり・・・
    4時からキーノートなどのセッション。
    去年はなかったある食べ物は今年は復活とのこと。
    一番盛り上がっていた。
    その後のパーティーで早速出てきたが私は食べなかった。
    インフラジスティックの集まりに参加INETAJの理事ということで、
    名刺交換をする。
    その後部屋飲みだったんだけどさすがに眠いのでパス。

    2日目 2/17
    7時にすっきり起きられた。
    早速寝起きの一服にホテル外に行って、
    戻ってきてネットを立ち上げる。
    これから、歯磨き、朝食、シャワー(時間がなかった)、マイクロソフトへの予定。
    セッションが9時からです。
    C#に行かないで一日WPF・Silverlightのセッションを受ける。
    オメーは一日ここで聴けみたいなお仕着せに反発するMVPが多いことをあいつらは学習していないようだ。
    まぁ、C#は4月にリリースなのであまり新しいネタがないのも実情。
    パーティはC#とVBの合同パーティだったがそこでもC#なのにSilverlightのパーティにもぐりこんでいる奴らまで出る始末。
    どんだけ境界がなくなっているんだと驚くともにちょっと危ない予感もする。
    部屋飲みはかるあさんのコネで韓国グループと合同で10人以上となる。

    3日目 2/18
    昨日が7時起きで結局シャワー時間が取れなかったので6時半起きにする。
    朝食を食べて一服してインターネットをする。
    シャワーを浴びて8時過ぎにバスに乗る。
    C#のセッションと一部日本語の翻訳セッションを受ける。
    C#のセッションはSilverlightで聴いたのと同じものがあってがっかりした、まぁしょうがないか。
    日本語の翻訳セッションは興味深い情報を日本語で確認できるのがいい。
    これだけは言わせてくれとMVPリードに了解とって。

    VSTA すげ~~~~!!! 本当にすげ~~~~~!!!

    いつものお遊びのパーティはプールバー兼ボーリング場で飲む。
    夜中の11時頃まであいているのでゆっくりと。
    部屋飲みは買い出し部隊が帰ってきてメンバーを集めようとしたら集まらないのでやめにしたということらしい。残念。

    4日目 2/19
    午前中はネット接続ができなかった。
    7時半の目覚ましなのに7時に起きて朝食・ネットに接続を試しながらシャワー、ネットをあきらめて翻訳付きのKeyNoteに出席。
    NDAに値しないKeynote何度もみせられている未来のイメージをだれがありがたがるというのだろうか?
    午後からは日本語通訳の要望吸収セッションここぞとばかりに色々発言する。
    このセッションはアメリカのマイクロソフトでも評判がいいようで毎年続けられるようである、いいことだと思う。
    日本のパーティはまたしてもプールバー、リードに文句言う、昔みたいなシーフードがいいよう。
    部屋飲みは今回残りすぎ、たつにいが無料で提供私も無料で提供したんだが、ごみとかしたのも多い模様。

    5日目 2/20
    8時半に起床、9時15分まで帰りの荷物をパッキングして部屋でポーターにあづける。
    10時までにチェックアウトして帰る。
    クラムチャウダーうめ~。

    6日目 2/21
    2/20の夕方飛び立って、2/21の夕方に成田着。

    楽しい有意義な日々であった。
    マイクロソフトや関係者に大感謝。

    posted @ 20:13 | Feedback (1)

    2010年2月7日 #

    Windows7 IIS7.5 VisualStudio2008 の構成

    Windows7 64bit IIS7.5 VisualStudio2008 の構成で ASP.NET のデバッグができない、なんでだろう。

    Webサーバーでデバッグを開始できません。オブジェクト識別子が有効なオブジェクトを表現していません。(HRESULTからの例外:0x800710D8)

    posted @ 22:15 | Feedback (3)

    2010年1月17日 #

    わんくま同盟 東京勉強会 #42 ありがとうございました

    スピーカのマイクロソフトのジニアス平井さん、大西さん、グレープシティ八巻さん、++C++管理人さん、とっちゃんお疲れさまでした。マイクロソフトの荒井さんも飛び入り参戦ありがとうございました。

    スタッフ・LT参加の方・ご来場の方・USTでご覧の方もありがとうございました。

    3回も参加料(寄付)のご案内をしてしまって申し訳なかったですが、おかげさまで多めに集まりましてスタッフ一同感謝しております。

    今回は「わんくまについて」の説明後にすぐLTをやりました。セッション内容が充実しているためLTをアイスブレークとして活用したかったからです。

    セッションの1番目はマイクロソフトの大西さんの「Silverlight 4 Beta Overview」です、Silverlight 4の最新技術をデモしながら説明していただきました。事情があって資料配布なし、ストリーミング、撮影なし、聞いた内容についてのブログ・Twitterなどでの公開無しの条件でやっていただいた関係からか朝からの出席率が良かったようです。

    午後からのセッションは、グレープシティ八巻さんです、WPFやSilverlightであまり気にせずに使っていて、それでいて便利で奥の深いリソースの解説をしていただきました。

    続いて、++C++管理人さんの「フーリエ変換」です、内容的には数学っぽかったですがSilverlightでグラフ化するデモを中心にいろんな波形をフーリエ変換して何次まででどういうグラフになるとか解説していただきました。

    次は、とっちゃんの「Per-User インストーラを作ってみよう!」です、インストーラを実行したユーザーのみ利用可能なインストーラで管理者権限が不要です、VS2008+WiX3.0 を使って実際に作って見せていただきました。

    「WPF 4.0 新機能レビュー」、ジニアス平井さんの登場です、WPF 4.0 新機能をいつもの軽妙な解説とDemoで笑いを取りながら勉強になる新機能の解説をしていただきました。

    最後は私(えムナウ)の「コーディングしながらあなたのお題に答えます」なんですが、お題がSilverlight中心ということもあって、マイクロソフトの大西さんが用意してくれた「RSSリーダー」を一からコーディングした部分や用意しておいた部分を合わせて解説していただきました、Silverlightの他のお題に関してはマイクロソフトの荒井さんが飛び入りで解説していただけました、時間があれば私もMVVMの解説をコーディングしながらやりたかったのですが残念ながら時間切れということで出来ませんでした。

    全体としてご来場の皆さんの反応も良くスピーカーさんも楽しかったようでまたこういう機会を作ってみたいと思います。

    posted @ 17:47 | Feedback (1)

    2010年1月2日 #

    MVP表彰の報告

    マイクロソフトから Visual Developer - C#の カテゴリで、MVPの再表彰していただくことになりました。
    よりいっそう自己の研鑽とコミュニティ発展の協力に努めるよう頑張ります。

    MVPの表彰も6回目になりました。
    応援・協力していただいた皆様ありがとう御座いました。
    これからもよろしくお願いいたします。

    今年から事前に教えてくれるメールが来なくなったようです、シアトルの元日早朝に送ってくれたようで、謹賀新年と別になってしまいました。

    「.Net ユーザーエクスペリエンス研究所」よろしくお願いします。
    http://mnow.jp/

    「えムナウのプログラミングのページ」よろしくお願いします。
    http://mnow.wankuma.com/

    INETA JAPAN の理事もやらせていただいてます。
    http://www.ineta.jp/
    http://www.ineta.jp/tabid/73/Default.aspx

    ことしは色々とやっていきたいと思います。
    よろしくお願いいたします。

    posted @ 7:10 | Feedback (5)

    2010年1月1日 #

    謹賀新年

    あけましておめでとうございます。
    今年もよろしくお願いします。

    「.Net ユーザーエクスペリエンス研究所」よろしくお願いします。
    http://mnow.jp/

    「えムナウのプログラミングのページ」よろしくお願いします。
    http://mnow.wankuma.com/

    INETA JAPAN の理事もやらせていただいてます。
    http://www.ineta.jp/
    http://www.ineta.jp/tabid/73/Default.aspx

    ことしは色々とやっていきたいと思います。
    よろしくお願いいたします。

    posted @ 0:00 | Feedback (3)

    2009年12月29日 #

    わんくま同盟 東京勉強会 #42

    2010/01/16 10:20 ~ 開場 新宿パークホテル2F
    http://www.wankuma.com/seminar/20100116tokyo42/Default.aspx

    今回は WPF/Silverlight Day と名付けて 、マイクロソフトのジニアス平井さん、大西さん、グレープシティ八巻さん、++C++管理人さん をお迎えして一日WPF/Silverlightにどっぷりつかってみましょう。

     

    マイクロソフトのジニアス平井さん、大西さん が WPF4/Silverlight 4のネタで最新機能について語ってくれます。
    WPF4/Silverlight 4の最新機能の解説が、一つの勉強会で聞けるのって日本初じゃないだろうか。

    大西さんのセッションは 11:10 からでしかも、資料配布なし、ストリーミング・撮影なし、聞いた内容についてのブログ・Twitterなどでの公開無しの条件でやります。
    来ない人は絶対に聞けないのでぜひ皆さん遅刻しない出来てください。

    グレープシティ八巻さん、++C++管理人さん、とっちゃん にも、各自の得意なところでWPFを語ってもらいます。

    また、WPFやSilverlightについてのお題にマイクロソフトの平井さんや大西さんと私がコーディングをしながら解説します。初めての試みなので妙なリアル感が出そうでどきどきしながら楽しめるといいなと思っています。
    このスタイルはよくドン・ボックスがやっているのですが、そんなに長時間いっぱいのネタをやれないだろうということで、マイクロソフトの平井さんや大西さんにもお手伝いをお願いしています。

     

    WPFやSilverlightについてのお題を大募集します。

    聞きたい内容 や 知りたい内容、疑問点など、何でもいいですのでこのブログにレスしてください。

    会場でも募集するのですが何も出ないと何もできないので(笑
    是非よろしくお願いします。

    posted @ 3:19 | Feedback (3)

    2009年12月25日 #

    我が家の環境

    自宅のネットワーク環境を書いてみます。
    自宅サーバーを置いているので固定IPです。
    データ交換用とバックアップ用にNASがあります。

    ゲーム機のDSは正直何台あるか何台まだ動くのかわからない状況。
    ケーブルテレビはメンテの時のみ必要だそうで。
    ノートは有線と無線の便利な方を使っています。

    ダイニングにルータとNASを置いています。ダイニングのケーブルテレビには線がいってない。
    リビングは妻と子供のパソコンやゲーム機やテレビ類、ケーブルテレビには必要な時だけ指す感じで。
    仕事場はサーバー2台と仕事用2台、ノートが1台とつなげりゃ使える状態のを1台です。

    自宅環境

    つなげりゃ使える状態のなんか使わないままに廃棄すんだろうけどね。

    posted @ 1:00 | Feedback (0)

    2009年12月19日 #

    Windoes7の64bit

    Windows7の64bitでは VisualStdio2008 SP1 に Silverlight3_Tools を入れても IE8 では Silverlightアプリケーション のシンプルなものがデバッグ実行で動作しなかった。

    Firefoxを既定のブラウザにして確認したら Silverlightアプリケーション のシンプルなものがデバッグ実行で動作した。

    Firefox でも DeepZoom はデバッグ実行で動作せず。

    結局、Virtual PC で Windows Vista の32Bitで VisualStdio2008 に SP1 を入れて Silverlight3_Tools を入れて DeepZoom デバッグ実行確認した。

    なんかものすごい疲れたけど。
    この動きって正しいんですかね?

    Windows7の64bitで VisualStdio2008 SP1 に Silverlight3_Tools を入れて IE8 で Silverlightアプリケーション デバッグ実行で動くよって人いますかね?
    同じくDeepZoom デバッグ実行できるよって人もいますかね?

    何か私が間違えているんでしょうか???

    posted @ 0:34 | Feedback (2)