2014年4月26日(土)に開催される.NETラボ勉強会に登壇します。

image

2014年4月26日(土)に開催される.NETラボ勉強会に登壇します。こちら

開催概要を引用すると以下のような感じです。

■日時:2014年4月26日(土曜日) 13:30-18:00 (開場:13:00、退出:18:00)

■会場:日本マイクロソフト 品川本社 (SGT)31F VIP Board Room
http://www.microsoft.com/ja-jp/mscorp/branch/sgt.aspx

■会費:500円(学生無料、懇親会は別途、ゲストスピーカーは懇親会無料)
※会費は運営費とゲスト懇親会費に充てさせてもらいます。

という訳で、.NETラボさんにお呼ばれしましたので、何についてお話するか悩みましたが、ここは季節ものということでBuild 2014のふりかえりをさらっとと、せっかくですのでユニバーサルWindowsアプリについて、お話させていただこうかと思います。

いつにも増して興味深い技術が目白押しだったBuild 2014では興味深い新技術がいくつも発表されたので、それらの技術をあらためて振り返りつつ、いろいろとお話できればと思います。

私の他にもVisioやXamarinのセッションもあり、今回の.NETラボも盛りだくさんのようですので是非ご参加下さい!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Microsoft .NET Native Developer Previewが公開されています。

Microsoft .NET Native Developer Previewが公開されています。こちら

Microsoft .NET Nativeとは従来.NETで利用されていたプログラミング言語C#を用いてC++のような高パフォーマンスのNativeコードのアプリケーションが開発できるというプリコンパイル技術ですね。

折角ですので、MSDNに掲載されている説明を簡単に翻訳しておきますね。

適当翻訳(一部意訳なども含む)なのでいつものように内容は保証できません。気になるようであれば原典であるリンク先を確認して下さいね。

従来、.NETのプログラムでは一度Intermadiate language(通称IL)にプリコンパイルされたあと、Just-in-time(通称JIT) compilerによってアプリケーションの初回実行時にNative codeに変換されていました。

対してWindows Storeアプリではこの変換をILを介さず、直接行っています。

これによって、開発者視点では

  • アプリがNative Codeにより優れたパフォーマンスで実行される
  • 開発は従来利用していたC#で行える
  • .NET Frameworkで利用していたクラスライブラリなどの開発リソースをと用いて開発を続けることができる。これらには自動メモリ管理、ガベージコレクション、例外ハンドリングなどが含まれます。

また、あなたが開発したアプリケーションのユーザーにとっての利点として

  • 高速な実行時間
  • 一貫した起動時間向上
  • アプリケーションメモリの最適化

が挙げられます。

しかし、.NET Nativeは単にNativeコードにコンパイルするだけではありません。.NET Frameworkアプリのビルドと実行方法が変化します。たとえば

  • プリコンパイルの際に、.NET Frameowkrの必要な箇所をあなたのアプリに静的なリンクします。つまり、アプリケーションのローカルにあるライブラリでアプリを実行することが可能になります。 それによってコンパイラーはローカルで総合的な解析がおこなえるようになり、最終的には.NET Frameworkの更新後でも一貫して高速に実行することが可能です。
  • .NET Native Runtimeは静的プリコンパイルするために最適化されて最終的にはパフォーマンスの向上を可能しています。開発者にとって非常に生産的なコアリフクレクション機能であることがわかるでしょう。
  • .NET NativeはC++コンパイラー同じバックエンドが利用されています。これらは静的プリコンパイリシナオリに最適化されています。

.NET Nativeはマネージコード開発者にC++の持つパフォーマンス利点を与えます。それはC++内部で利用されているツールに同じ、または近いものが利用されているからです。

その一部が以下になります。

  .NET Native C++
Libraries .NET Framework + Windows Runtime Win32+Windows Runtime
Compiler UTC最適化コンパイラ UTC最適化コンパイラ
Deployed Ready-to-run binaries Ready-to-run binaries(ASM)
Runtime MRT.dll(Managed Runtime) CRT.dll(C Runtime)

(For Windows Storeアプリ for Windows 8.1, Windowsストアに.NET Native Codeによってコンパイルされたアプリケーションパッケージをアップロードした場合)

ということで、またおもしろそうな技術が出てきましたね。また、時間があるときにでも少し勉強会とかでお話させてもらおうかな。ということでメモ。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

「僕のやったXAML戦略」セッション資料を公開しました。

 

image

本日(2014/3/22)に開催されました、MVP Communituy Day 2014で実施した「僕がやったXAML戦略!」のセッション資料を公開いたしました。

よろしければご参照下さい!

デモのダウンロードはこちら

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

MVP Community Camp 2014明日(2014/3/22)開催です!

image

というワケでMVP Community Camp 2014のオフラインイベントがいよいよ明日となりました。

私は東京会場のRoom Aの15:00頃から「僕がやったXAML戦略」というタイトルでXAMLプログラマに向けた初心者~中級者向けのお話をさせていただく予定です。

東京会場では他にも魅力的なセッションが数多くあるのでこの機会に是非!

公式ページはこちら

東京会場のセッションプログラムやお申込みはこちら

MVPCommCamp2014

Twitterのハッシュタグは#MVPComCampだそうです!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

2014年3月22日に開催されるMVP Community Campに登壇します。

MVPCommCamp

来る2014年3月17日から22日までの間、世界同時開催勉強会イベント、MVP Comminuty Campが開催されます。こちら

MVP Comminity CampではMicrosoft MVPやITコミュニティが協力し、上記の期間に7カ国23都市でオンライン・オフラインによる勉強会が開催されます。(前回はCommunity Open Day 2013というイベントでしたが、今回は規模も大きくなって開催されます!)

 

私はDay 6(2014年3月22日[土])に開催される東京会場のRoom Aで15:00から「僕がやったXAML戦略」と題して、XAMLの独学が大変だったポイントをピックアップしてお話しさせていただく予定です。(初心者~中級者向けのお話になります)

東京会場のお申し込みはこちら

当日は終日会場のどこかにいることになると思いますので、お気軽にお声がけ下さいね!

また、東京会場以外の会場でのお申し込みや会場に来られない方でも当日UStream配信も実施しておりますので、詳しくはこちらのリンク先の中程にある「カンファレンス」をご覧下さい!

当日、各会場では豪華プレゼントもあるようですので、是非ご参加下さい!

会場でお待ちしています!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

第4回業開中心会議でお話した「デスクトップ・アプリの価値を高めるモダン化」のセッション資料を公開しました。

image

大変遅くなりました。

第4回業開中心会議でお話した「デスクトップ・アプリの価値を高めるモダン化」のセッション資料をSlideShareに公開しました。

セッション実施からすでに2か月過ぎていますが、ようやく時間ができましたので、公開しました。

 

 

既に議事録についてもこちらのほうに公開されておりますので、よろしければそちらのほうもご覧ください。 こちら

image

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Microsoft RMS SDK 3.0が公開されています。

Microsoft RMS SDK 3.0が公開されています。

Windows Store用がこちら

Windows Phone 8用がこちら

Android用がこちら

iOS用がこちら

OS X用がこちら

(SDKのダウンロードにはMicrosoftアカウントによる登録が必要になります。)

RMS SDKとは正確にはRights Management System Software Development Kitで、ドキュメントやファイルなどの著作権管理システムですね。

企業などで作成される機密文書や公開範囲をきちんと管理したいようなドキュメント類に対しての制御を行う仕組みとしてActive Directory RMSが存在するのですが、こちらのSDKはそれらの仕組みをモバイル向けのプラットフォームにも適用できるようにするためのSDKですね。

公開されたのは昨年の10月なのですが、なかなか時間が取れずに確認が先送りになっていましたが、簡単で便利そうなのでちょっと見てみました。

リンク先やドキュメントは英語なのですが、サンプルコードなどもあるのでそれほど難しいものじゃなさそうですね。

やはり、幅広いプラットフォームで一元管理できるのは便利そうですねーということでメモ。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

今年もお世話になりました。

IMG_2186IMG_2190

さて、これを書いているのがちょうど大晦日なので、このポストは年内に読んでもらえないかもしれませんが、一年の締めくくりということでご挨拶させていただきます。

今年は個人的には公私ともにバタバタとしており、なんとも慌ただしく1年が過ぎてしまいました。

それもあり、1年を通して十分な情報発信もしきれなかったと少し後悔のある年となってしまいました。

来年は仕事もしっかりと調整して、定期的に情報発信できるよういろいろとがんばりたいと思います。

是非来年もこのブログともどもよろしくお願いいたします。

よいお年をお迎えください。

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

動的にXAMLを表示する。

この記事は「XAML Advent Calendar 2013」の22日目の記事です。

前日はyone64さんの「WPFだからできること」でした。

さてさて、今日は小ネタです。

今日はロジックを持たないXAMLファイルを直接読み込んで表示する方法をご紹介しましょう。

こちらは以前、MicrosoftさんでSilverlightのセミナーを行っていた頃にやっていたDemoのひとつなのですが、WPFでも簡単にできそうなのでやってみましょう、

まずはベースとなるMainWindow.xaml

まず、Visual StudioでWPFアプリケーションプロジェクトを作成し、MainWindow.xamlを開きます。

次に、以下のようにTabControlおよびTabItemを1つ配置します。

<Window x:Class="DynamicXaml.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TabControl Name="tabControl1">
            <TabItem Header="DynamicXaml">
                <Button Content="XAMLでどん" FontSize="40" />
            </TabItem>
        </TabControl>

    </Grid>
</Window>

TabItemにはButtonコントロールを配置しました。

Buttonコントロールにイベントハンドラを追加

次にデザイナーでButtonコントロールをダブルクリックし、Clickイベントを追加します。

<Button Content="XAMLでどん" FontSize="40" Click="Button_Click"/>

動的に表示するUserControlの作成

そして、プロジェクトにプロジェクトにはあらかじめロジックのないUserControlを1つ追加します。

ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[新しい項目の追加]を行います。

image

続けて、[WPF]のテンプレートの中から「ユーザーコントロール(WPF)」を選択し、適当な名前をつけます。(今回は[UserControl1.xaml]というファイルを作成しました。)

image

追加したら、コードビハインドのcsファイルは削除し、XAMLのルート要素にあったx:Class属性を削除します。

あとは適当なXAMLを記述して下さい。

私が作成したXAMLは以下になります。

<UserControl
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid Background="#FFFF6565">
        <TextBlock 
            TextWrapping="Wrap" 
            Text="Merry Chiristmas!" 
            FontSize="40" 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center" 
            Foreground="White"/>
    </Grid>
</UserControl>

こちらのファイルをソリューションに追加したら、ソリューションエクスプローラーでUserControl1.xamlを選択します。

続けて、「ビルドアクション」を「なし」に変更、「出力ディレクトリにコピー」を「常にコピーする」に変更します。

image

 

コードを追加

それではMainWindow.xamlに戻って、コードビハインドの編集を行いましょう。

MainWindow.xaml.csを開いて(またはMainWindow.xamlのデザイナーで右クリック→[コードの表示]でもOK!)で、先ほどダブルクリックしたことでClickイベントハンドラのスタブができあがっていると思いますので、以下のようにロジックを追加します。

private void Button_Click(object sender, RoutedEventArgs e)
        {
            using (var sr = new StreamReader("UserControl1.xaml"))
            {
                var xml = XmlReader.Create(sr.BaseStream);
                var ctrls = XamlReader.Load(xml) as UIElement;
                var item = new TabItem()
                {
                    Header = "読み込んだUserControl",
                    Content = ctrls
                };
                tabControl1.Items.Add(item);
            }
        }

 

完成

さて、それでは実行してみましょう。

image

ボタンをクリックすると…

image

TabItemが増えました。切り替えて見ると!

image

こんな感じで簡単にXAMLを追加できます。

まぁ、ロジック追加はあとから…となるので利用用途は選ぶかもしれませんが、よかったら参考にして下さい!

完成したソリューションはこちらに置いておきますねー!

http://sdrv.ms/197dijM

というワケで、少し遅刻してすみませんでした!

明日(もう今日か。)はtmytさんですね!

それでは、メリークリスマス!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Tupleの使いどころ。

このエントリーは「C# Advent Calendar 2013」の21日目のエントリーです。

前日はterry_u16さんの「【C#】niconicoAPIを使ったりスクレイピングしたり」でした。

今回は時間がなくなってしまって、ちょこっとした内容ですが…。

さて、本年2回めのC# Advent Calendarですが、以前からずっと気になっていたクラスの1つでTupleクラスがあります。

まず、Tupleクラスについて簡単にご説明するところから始めましょう。

Tupleクラス

Tupleとは組みを表す単語で、語源は確かDoubleとかTrippleなどの組み合わせの数字がおおきくなってくるとquintuple(5組み)、sextuple(6組)と増えていく中、徐々に表現しずらくなることから10tuple、11tupleという表現となった・・・と聞いたことがあります(不確定ですみません(^^;)

.NET Framework においては.NET Framework 4より、名前が不確定な複数のオブジェクトをのひとかたまり(1組み)を表現するのにTupleクラスが追加されました。。

利用方法はGenericのメソッドにより生成する形になります。

Tuple.Create<T1>(T1)
Tuple.Create<T1, T2>(T1, T2)
Tuple.Create<T1, T2, T3>(T1, T2, T3)
Tuple.Create<T1, T2, T3, T4>(T1, T2, T3, T4)
Tuple.Create<T1, T2, T3, T4, T5>(T1, T2, T3, T4, T5)
Tuple.Create<T1, T2, T3, T4, T5, T6>(T1, T2, T3, T4, T5, T6)
Tuple.Create<T1, T2, T3, T4, T5, T6, T7>(T1, T2, T3, T4, T5, T6, T7)
Tuple.Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1, T2, T3, T4, T5, T6, T7, T8)

生成されるオブジェクトは構造体であり、値型です。

12/23追記:生成されるTuple自体はクラスから生成された参照型のオブジェクトでした。失礼しました。

http://msdn.microsoft.com/ja-jp/library/vstudio/dd386941%28v=vs.110%29.aspx

http://msdn.microsoft.com/ja-jp/magazine/dd942829.aspx

(いげ太さん、ご指摘いただいたありがとうございました)

 

これに似たような機能としてKeyValuePair構造体がありました。KeyValuePairがKeyとValueのデータを保持するのに対して、Tupleは最大8つの値を保持することが可能で、各項目の取り出しは以下のような形で行えます。

            var tupleData1 = Tuple.Create<int, int, int>(1, 2, 3);
            Console.WriteLine(tupleData1.Item1);
            Console.WriteLine(tupleData1.Item2);
            Console.WriteLine(tupleData1.Item3);

            //こうでも大丈夫
            var tupleData2 = Tuple.Create(1, 2, 3);
            Console.WriteLine(tupleData2.Item1);
            Console.WriteLine(tupleData2.Item2);
            Console.WriteLine(tupleData2.Item3);

 

実行結果は以下の通りです。

image

このように利用方法はとても簡単です。 そのため、テスト用のデモアプリを作ったりする場合には非常に重宝しています。

また、メソッドから複数の値を返す場合にカスタムクラスを作ったり、outパラメータを使ったりしなくても、Tupleで用が足りそうです。

が! いざ、業務で開発するような場合はコレクションなどと異なって、使いどころがなかなか難しい。 だいたいの要件は匿名クラスで足りるでしょうし、敢えて戻り値で返すならきちんとカスタムクラスを定義したほうがよさそう…。

見ての通り、各項目の取り出しは「Item1, Item2…」といった特に名前に特徴のないプロパティによってマジック変数化してしまって難読化されてしまうのが難点。

ただ、単体テストとかならなんとか利用できるのではないか…と思ってやってみました。

テストの対象はこちら。

namespace ClassLibrary1
{
    public class Class1
    {
        public static int Add(int x, int y)
        {
            return x + y;
        }
    }
}

で、単体テストはというと…。

using System;
using System.Collections.Generic;
using ClassLibrary1;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var testCase = new List<Tuple<int, int, int>>()
            {
                Tuple.Create(1, 1, 2),
                Tuple.Create(2, 1, 3),
                Tuple.Create(1, 2, 3)
            };

            testCase.ForEach(c => Assert.AreEqual(Class1.Add(c.Item1, c.Item2), c.Item3));
        }
    }
}

こんな感じ。

んー、やはり匿名クラスでもよい気がしますが…判断はおまかせします(^^;

というワケで、結論のないエントリですみません。

21日目のエントリーは以上になります。

次はmoririringさんです!よろしくお願いします!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]