F# ブート キャンプが開催されます

2016年11月19日に、イギリスのケンブリッジより来日した Tomas Petrics さんが参加する F# Boot Camp が開催されます。Tomas さんは、Microsoft Research で Don Syme さん(F#の言語設計者)と一緒にF#の言語設計に携わっており、F# Foundation の設立メンバーでもあり、F#の啓発活動を幅広く実施されいます。プログラミング言語の開発に携わった方のお話を聞ける機会ですので、ご興味のある方は是非、ご参加ください。 そして、前日の11月18日の夜には、F#談話室が開催されます。F#談話室は、無償の勉強会ですが、Tomasさんが参加されます。通訳者はいませんが、下手な英語でもTomasさんとコミュニケーションしてみませんか?

0

UWP で廃止された UserInformation クラスについて

今更ですが、Windows 10 の UWP アプリで、Windows 8.1 のストア アプリとの比較で廃止予定の API があることに気が付きました。そのクラスは、以下になります。 UserInformation クラスWindows 8.1 までで使用できたクラスで、Windows 10 では正常に動作しなくなっています。 User クラスWindows 10 の UWP より提供された新しいクラスで、UserInformation を使用していた場合は置き換える必要があります。 この変更の背景ですが、Windows 10 ではプライバシー設定に新しく「アカウント情報」が追加されています。このアカウント情報には、User クラスを使ってアカウント情報へアクセスするアプリに許可を与える操作(ダイアログが表示されます)を行ったアプリが表示されます。また、User クラスを使用するアプリの場合は、Package.Appxmanifest の機能で「アカウント情報」を指定しておく必要があります。 プライバシー設定に「アカウント情報」が追加されたことにより、Windows 8.1 までのアプリの動作に影響を与えてしまいます。Windows 8.1 までは、UserInformation クラスを使ったアカウント情報へのアクセスが自由にできるようになっていました。というのは、プライバシー設定で「アカウント情報」という分類がなかったからです。Windows 10 では、「アカウント情報」が新設されたことにより、Windows 8.1 までのアプリは UserInformation クラスの GetDisplayNameAsync メソッドなどが値を返さなくなります。この問題を避けるには、アプリを UWP に作り替えるしか方法がありません。なぜなら、Package.Appxmanifest の機能で「アカウント情報」を指定できるのが UWP しかないということと Windows 10 SDK を使用しないと新しい User クラスへアクセスすることができないからです。 User…

2

Windows ランタイム コンポーネント ブローカーについて

de:code 2016 のサンプルに Windows ランタイム コンポネント ブローカーの UWP が含まれており、その使い方のドキュメントも含めていました。まだ日本語訳はありませんが、「Windows ランタイム コンポーネント ブローカー」の記事が公開されました。この記事には、 サンプル (IPC サーバーのみ) UWP 用のプロジェクト テンプレート へのリンクが含まれています。また、vcvarsall.bat の引数なども解説されています。このドキュメントの公開と同時期に、Windows ストア アプリのドキュメントも英語版が更新されています。 プロジェクト テンプレートでプロジェクトを作成して、プロジェクト ファイルを見れば、マネージ デスクトップ アプリとUWP で説明したプロジェクト ファイルへの変更が行われていることも確認することができます。 技術的には、Windows 10 には、デスクトップ ランタイム(.NET Framework)、Windows ストア アプリ ランタイム(Windows 8.1互換ランタイム)、UWP アプリ ランタイム(Windows ランタイム、.NET Core)の3種類があるので、Windows ランタイム コンポーネント ブローカー自体はデスクトップ ランタイムで動作しますので、動いて当たり前というものになりますが、テンプレートが公開されましたので、これを使用することで容易に Windows ランタイム コンポーネント ブローカーを Visual Studio 2015 で作成できるようになったということになります。  …

0

バイナリ シリアライザについて

オブジェクトをシリアライズする時に、どのシリアライザを使用するかによってデータの互換性を含めて、様々な問題が発生することがあります。.NET Framework や Mono を使った開発で、利用するシリアライザの種類を列挙します。 バイナリ シリアライザBinaryFormatter が標準で組み込まれていますので、使われるケースが多いと思われます。標準以外にも様々なシリアライザが OSS として開発されていたりします。 XML シリアライザDataContractFormatter が標準で組み込まれています。 JSON シリアライザ標準で用意されているシリアライザを使用したり、Json.net を使用することが多いと思います。 バイナリ シリアライザを使用する時の資料は、MSDN ライブラリに掲載されています。バイナリ シリアライザを使用する時の注意は、以下の点になります。 シリアライズするクラスの型を持つアセンブリをライブラリにすること。 後日にクラスにメンバーを追加した場合は、バージョン トレラントを確保すること。 バイナリ シリアライズで作成されたバイナリ データには、「アセンブリ識別子(アセンブリ名、バージョン、カルチャ、パブリック トークン)」と「型の完全名(名前空間。クラス名)」、「シリアライズするフィールド名」と「データ」が記録されています。クラスという型の情報は、アセンブリのType Definition で定義されており、デシリアライズする時に型情報が一致しないとデシリアライズが失敗します。この理由で、シリアライズする型を定義するアセンブリをライブラリにしておくことで、デシリアライズのエラーを削減できるようになります。 シリアライズの基本的な使い方 シリアライズ対象になるクラスが、SerializeSample というアセンブリで、Person クラスが以下のように定義されていたとします(シリアライザは、内部でリフレクションを使用しています。リフレクション API が変更されると、その影響を受けることもあります)。 using System; namespace SerialSample { [Serializable] public class Person { public Person() { } public string Name { get; set;…

0

de:code 2016 の CLT-004 のサンプルを公開します

いつもながら、遅筆の荒井でございます。de:code 2016では、「CLT-004 Windows 10 におけるアプリの互換性と移行」と「CLT-012 インサイド UWP アプリ」を担当させていただきました。参加されました方は、有難うございました。この記事には、CLT-004 Windows 10 におけるアプリの互換性と移行 で使用したデモのサンプル コードを添付しています。含まれるサンプルは、以下のようになります。 Windows Forms における高 DPI クリップボード ドラッグ & ドロップ 拡張子の関連付けとカスタム プロトコルの関連付け アプリ サービス Northwind アプリ ブローカー アプリ ブローカー:このサンプルはデモで使用していませんが、Windows ランタイム コンポーネント ブローカーを作成するための学習用のものです。 含まれていないデモとしては、Desktop App Converterでサイトー企画様よりデモでの使用を許可していただいた「秀丸エディタ」を変換し、自分で作成した.NET Framework 4.6の WPF アプリを変換し、「Desktop To UWP Project」テンプレートを使用した Windows Photo と連携させたものがあります。この WPF で使用したサンプル コードの基本的な考え方は、アプリ サービスに含まれる「LaunchUrlForResultAsync メソッド」の使い方と同じになりますので、ご興味がある場合は、自分で試してみてください。 サンプル コードの使用に関しては、自己責任でお願いします。 CLT-009 サンプル…

0

マネージ デスクトップ アプリと UWP

Windows ストア アプリの時は、「マネージ デスクトップ アプリと Windows ランタイム」というドキュメントがありました。Windows 10 の UWP アプリのランタイムをデスクトップから使う方法がないかと調べたので、その使い方を簡単にまとめます。 WPF アプリなどのプロジェクトを Visual Studio 2015 で作成します。 ソリューション エクスプローラで、プロジェクトをアンロードします。 アンロードしたプロジェクトのコンテキスト メニューより、コードの編集を行います。 <PropertyGroup> <TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion> </PropertyGroup> 上記のコードをプロジェクト ファイルへ追加して、上書き保存します。 プロジェクトの再読み込みを行います。 参照の追加を行います。 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd と C:\Program Files (x86)\Microsoft SDKs\NETCoreSDK\System.Runtime.WindowsRuntime\4.0.10\lib\netcore50\System.Runtime.WindowsRuntime.dll の2つへ参照を設定します。 後は、必要なクラスを使用するだけです。 Windows.winmd は、Windows Runtime の参照用のメタデータになります。 System.Runtime.WindowsRuntime.dll が、Microsoft SDKs\NETCoreSDK になっている理由は、UWP アプリが .NET Core がランタイムになっているためです。Windows 8.1 までは、.NET Framework のサブセットという位置づけでしたので、C:\Program…

1

Osaka ComCamp 2016

遅くなりましたが、2/20 の大阪 ComCamp 2016 で使用したスライドを公開します。こちらでは、「.NET 2015 発表後の .NET はどうなったか」というタイトルでお話しをさせていただきました。 CoreCLR は、1月に名称変更があり ASP.NET Core、.NET Core CLI (旧DNVM、DNX)などになり、ASP.NET Core 関係の CLI 対応版は、まだリリースされていません。でも、最新ビルドでは、v1.0.2-rc3-23826 (2016/2/29 15:38 JST+9)になっています。この最新ビルドを試される場合は、.NET Core CLIの使用が必須となります。従って、ASP.NET MVC5を試される場合は、RC1となり DNVMを使用することになります。 試されると理解できますが、.NET Core CLI は、nuget v3 形式の API に統合されており、現時点では.NET Core “dev” builds に依存しています。nuget.orgではありませんので、ご注意ください。 What’s .NET Framework after .NET2015

2

WPF の半透明の子ウィンドウの使い方について

.NET Framework 4.6 のリリースに伴って、WPF では 透過的な子ウィンドウのサポートが提供されました。具体的な使い方としては、WPF チームのブログの The Roadmap for WPF という記事の、コメント欄にサンプル コードがあります。 私も見落としていて、先週末に教えていただいたのですが(有難うございました。見落としていました)、このサンプルを動かすための条件があります。MSDN ライブラリーの.NET Framework の新機能には「Windows 8.1以降」という記述もありました。この透過的な子ウィンドウというのは、半透明なChild Window をサポートするというもので、具体的には HwndSourceParameters.UsesPerPixelTransparency プロパティを使用するというものになります。ドキュメント上の要件は、.NET Framework 4.6以上とだけ記述されていますが、私が確認した限りは Windows 8 以降で動作します。WPF Blogに掲載されていたコードを次に示します。 IntPtr parentWindowHandle = new WindowInteropHelper(this).Handle; HwndSourceParameters windowParams = new HwndSourceParameters(“SemiTransparentChildWindow”); windowParams.ParentWindow = parentWindowHandle; //int values of WS_CHLID, WS_CLIPCHILDREN, and WS_VISIBLE int styleParams = 0x40000000 | 0x02000000 |…

0

Windows 10 SDK の UWP サンプルについて

Windows 10 が公開されてから、ユニバーサル Windows プラットフォームのサンプルも更新されました。5月に公開されてから、6月にサンプルの更新が行われて、最終的に Windows 10 SDK の公開後に更新されました。リリースをみると、4種類があります。 August 2015 Update2 August 2015 July 2015 Build the samples August 2015 をベースにして、Build カンファレンス リリースからどのような変更があったのかを調べてみました。大きくは、次の2点に集約されています。 サンプル名の変更 たとえば、ScreenCasting が AvancedCaastingになり、AllJoinSecureClient と AllJoinSecureServer が AllJoin になったり、accountpicturename と accounts が UserDataAccountManager と UserIinfo になったり、UniversalCamera が CameraStarterKit になったりしています。サンプル名が、明示的に何のサンプルを示しているかという観点の変更になっています。 新しいサンプルの追加 追加されたサンプルは、私が調べたところ65種類のものがありました。その一覧を記載します。 ApplicationData ApplicationResources Appointments AppServices AssociationLaunching AudioCategory BackButton BasicFaceDetection BasicFaceTracking BasicInput…

0

パフォーマンスと診断ハブの使い方

先週末(12/20)は、.NET ラボにお邪魔して「パフォーマンス診断 Windows ストア アプリ」というテーマでお話をさせて頂きました。今回は、この時にお話しした内容と時間の関係で割愛したデモなども含めて記載します。お話した内容は、大きく分類すると以下の2種類になります。 パフォーマンスを設計段階から考慮する 設計したパフォーマンスを診断する Visual Studio パフォーマンスと診断ハブ Windows パフォーマンス ツールキット 全く同じものではありませんが、de:code でパフォーマンスに関するセッションがありましたので、以下の動画も参考にして下さい。 de:code Track 1 Devices トラック Windows アプリのデバッグ、パフォーマンス測定、テスト、Windows App Certification Kit (WACK) パフォーマンスを設計段階から考慮する パフォーマンスを意識してアプリを設計し、実装することがとても重要です。アプリをリリースしてから、パフォーマンス問題が発生してチューニングするのとでは、かかる工数自体が異なることから、パフォーマンスを意識して設計しなければなりません。 設計するときの前提知識として、CPU、メモリ、補助記憶装置、ネットワークなどにおける物理的な速度を意識して適切な組み合わせを考えることが重要であることと、一般的なレイア アーキテクチャが保守や構築しやすというメリットはあるが、パフォーマンスを重要視する局面ではパフォーマンス面で不利になることを説明しました。大切なことは、要求される事項に応じて適切にアーキテクチャを組み合わせて、パフォーマンス重視であれば意図的にアーキテクチャを無視することも必要になるということです。 たとえば、適切に設計されたコンポーネントの1つのメソッドを呼び出すと、マシン語レベルではcall命令が発行されます。call命令が発行されるということは、プログラム カウンタなどの様々な情報が呼び出された命令へと切り替わるわけです。これは、数回や100回程度であれば問題にならなくても(仮に、1msとして100msです)、数万の回数になるとしたらどうなるでしょう?(10秒の単位になりますよね)。パフォーマンスを向上させるということは、このような処理にかかる時間を削ることになりますから、設計が素晴らしいことと比例しないのがパフォーマンス向上という世界になるわけです。 このような世界がパフォーマンス向上になるわけですから、設計段階からパフォーマンス目標を明確にして、その目的達成のために様々な工夫をする必要があるわけです。たとえば、ユーザー インターフェースが関係する場合であれば「応答なし」の状態は、もっとも避けるべき状況になるわけです。この「応答なし」を避けるためには、UI スレッドと異なるスレッドで実行したり、処理状況を可視化したり、ユーザーの操作の合間に分散して処理させたりなどの様々な工夫が考えられますし、要求される状況におうじて適切に組み合わせる必要があります。このような様々な工夫をした結果、パフォーマンスを達成できているかを確認する作業が診断作業になるわけです。診断した結果から、目的が達成されているかどうかを分析し、達成できていなければボトルネックを分析し、プログラムに対処コードを組み込んで、その結果を診断するという作業を繰り返すことになります。これらの診断に使用できるツールが、Visual Studio パフォーマンスと診断ハブか Windows パフォーマンス ツールキットになるわけです。 Visual Studio パフォーマンスと診断ハブ 実際のデモで使用したコードは、「パフォーマンスと診断のページからの分析ツールの実行」を基にして、ETW のトレースを組み込んだものになります。最初に、Visual Studio を起動して、診断に使用するプロジェクトを開いておきます。そうして、[分析]-[パフォーマンスと診断]からパフォーマンスと診断ハブを起動します。 パフォーマンスと診断ハブで注意する点は、以下のようなことです。 ターゲット アプリケーションは、必ずリリースモードにしておくこと。 使用可能なツールの中で「メモリ使用量」、「JavaScriptメモリ」、「JavaScript関数の応答性」とその他の項目は排他的になるため、組み合わせることはできません。 ここでは、CPU 使用率だけにして開始ボタンをクリックします。そうすると、目的のアプリが起動します。 アプリで診断する操作を行ってから、Visual Studio…

0