MSDNにWindows8.1とWindowsServer2012R2のRTMが来た

MSDNサブスクリプションにWindows8.1とWindowsServer2012 R2のRTM、所謂工場出荷版ということですから基本的にはこのまま製品として出てくるものが公開されたということです。
ただし、MSとしてはこれが製品版ではなく各メーカーとの調整がまだ存在していることを宣言していて、10/18のリリース日に出る物で確認が必要としている。
また、VS2013はRC、製品候補なため開発環境が整っているわけではないんですよね、、、

まあ、動作検証を行うにはこの版で行えば製品が出た際にあわてなくてもいいということではあります。

とは言え、検証以外で使用するのは待ったほうがいいとは思います。
絶対大丈夫というのはないので、本番環境への適用は製品版での検証が終わって、かつ現状進行してるプロジェクトがクローズするまでは更新できないようにしておくべきでしょうね。

そういえば、製品版はストアから入れることが出来てしまうような形だったと思うけど、企業の担当者が制限できるのかなこれ?

Spotlightという企画が始まった

MSエヴァンジェリスト、高橋忍さんのブログで情報が公開されたものです。
アプリ開発企画 Spotlight スタート!

第0回 お題 「ホワイトボード アプリケーション」
アプリケーションの必要条件
Windows 8 ストアアプリケーション
マグネット(のようなもの)を置ける、外せる
ペン(タッチ)で書ける

テンプレートも用意されているのでさくっとまずは作ってみるのがいいのではないでしょうか?

取りあえず自分もテンプレートを使って「シンプルサッカー戦術ボード」を作成/公開しました。

Windows8.1はタブレットの選択肢を増やすのか?

現在「Windows8.1 Preview」がMSから自己責任、正規版へのアップデート不能の条件で提供されています。※条件付きで更新可能でした m(_ _)m
正規版が出た際は「8.1 Preview」を入れていない場合は、アップデートインストール、入れている場合は、新規インストールを行うようになるようです。
提供はWindowsストアを経由してアップデートを提供するようですが、出てすぐ入れるよりは、動作確認を待って入れたほうがよいと思っています。

現状、開発者や動作検証向け専用で、一般の方が使用するのは進められないものですが、自分は仮想環境にインストールして少々動作を見てみました。

仮想環境下で動作が大幅に遅くなるかと思いましたが、思ったより快適に動作しています。
もちろんDirectXを使用したものは仮想環境なので厳しいですが、通常の操作ではストレスを感じるレベルではなく、正規版での動作を期待させるものでした。

Windows8.1はx86(x64)環境とARM環境(SurfaceRT等)双方に提供され、ARM環境用でビジネス向けにうれしいこととしてはOutlook 2013 RTの提供ではないでしょうか?
メールをPOP3受信が可能になるというのはビジネス上重要ではないかと思っています。
また、画面解像度が1024*768で小型(7インチ以下)の端末が解禁されたようで、縦持ち(ポートレート)を推奨する機種が出てきていることがタブレット分野への切込みとしては大きいと思っています。

Surface RT/PROは確かにいい端末だとは思いますが、大きさやその重さから他のiOSやAndroidのタブレットと比較された場合に分が悪いことがあります。
また、アプリのさらなる拡充が急がれるのではないかと思われ、特に日本では小型端末でのソーシャルゲームやSNS端末としての需要が大きく、今後国外でも小型端末と通常の大きさの物での使い分けが増えるのではないかと思います。

もちろん、現在日本では発売されていないWindowsPhone8との連携が整備されれば、さらに選択肢としては幅が広がり、デスクトップ、タブレット、スマートフォンすべてWindows環境での連携となることでしょう。

しかしながら、現状では「Iconia W3(x86)」くらいしか小型タブレットがなく、ARMの小型タブレットが出てきていません。
これはx86環境のアプリが使えたほうがいいという判断と、Windowsタブレットが盛り上がりに欠けているということなのかもしれません。

ただ、今後8.1がリリースされれば消費電力や動作の軽さがさらに改善されるのではないかと思われるので、x86、ARM双方の小型タブレットが出るのではないかと期待しており、タブレットの選択肢が増えていくのではないかと思っています。

※「Windows8.1 Preview」に関して、プレビュー版から正規版への更新は可能なようです。
 ただし、個人のドキュメント以外のアプリなどはすべて入れ直しが必要になるなどがあるようです。

Windowsストアアプリでの物理キーボードの有無

物理キーボードの有無を確認することで、「キーボード操作」とタブレットでの「コントローラーUI操作」の表示切替を実装することができる。

「KeyboardCapabilities Class」を使用して確認
「KeyboardPresent」が読み取り専用であるので、これを確認すること。

下記のページで確認したもの
http://msdn.microsoft.com/ja-jp/library/windows/apps/windows.devices.input.keyboardcapabilities.aspx

Windowsストアアプリで使用できるグラフコントロール

Modern UI (Metro) Charts for Windows 8, WPF, Silverlight
License:Microsoft Public License (Ms-PL)

・これから調べる

WinRT XAML Toolkit
License:The MIT License (MIT)
上記のチャートは「Windows 8 Toolkit – Charts and More(License:Common Development and Distribution License (CDDL))」からのポート
・これから調べる
・WinRT XAML ToolkitはどうやらWin8.1ベースでVS2013になっている模様

どちらもベータで、「Modern UI (Metro) Charts for Windows 8, WPF, Silverlight」には折れ線グラフはまだない

有料であれば、下記のようなものもあります。
NetAdvantage for Windows UI

デスクトップでWindowsRuntimeAPIを使う場合の忘備録

MSエヴァンジェリストのVS魂100連発から
http://www.youtube.com/watch?v=xmwTbfWKDyA

・最初の設定
デスクトップアプリのプロジェクトをいったん「プロジェクトのアンロード」を行う
アンロードしたプロジェクトを右クリックして「.csprojの編集」をクリック
「PropertyGroup」内に「TargetPlatformVersion」を追加して「8.0」とする
上書き保存したらプロジェクトを再読み込みする
「参照設定」から「参照の追加」をクリックすると左側に「Windows」が増えているのでコアから「Windows」を追加
「ブラウズ」から「参照」で「\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5」から「System.Runtime.dll」を追加する。
「using Windows.Foundation;」を追加する。
「System.Runtime.dll」は.NETのCollectionとRTのCollectionに互換性がないため、その互換変換のために必要になる。

・async/awaitの非同期に対応する
「参照設定」から「参照の追加」をクリック
「ブラウズ」から「参照」で「\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5」から「System.Runtime.WindowsRuntime.dll」「System.Threading.Tasks.dll」の二つを追加
これを追加することで「async/await」が使用可能になる。
使わない場合「IAsyncOperation」をもとに書くようにする。

今更ながらの忘備録、これでストアアプリ管理ツールの作成などにもWindowsRuntimeAPIを使える。

indexを指定可能なIntデータCollectionProperty

collectionなPropertyにIndexを指定して通知したい場合に下記のように行う
通常ではIndex指定でやり取りはできないと思うのでメモがてら

    /// <summary>
    /// IntデータcollectionProperty
    /// </summary>
    public class CollectionDataProperty : CryEarth.lib.cryearthlib.NotifyPropertyChangedMethod
    { 
        private readonly Collection<int> items = new Collection<int>();

        public CollectionDataProperty()
        {
            items.Clear();
        }

        public int this[int index]
        {
            get
            {
                // indexの境界チェック
                if (items.Count < index)
                {
                    return 0;
                }
                return items[index];
            }
            set
            {
                //indexの境界チェック
                if (items.Count < index+1)
                {
                    items.Add(value);
                }
                else if (items[index] == value)
                {
                    return;
                }
                else
                {
                    items[index] = value;
                }
                OnPropertyChanged(ITEMS);
            }
        }

        private const string ITEMS = "Item[]";
    }

デバッグ用のメモ

TDDを徹底すればこれはあまり必要ないかもしれないが、あって困るものではないので、メモ代わりに書いておく
公式サンプルなどから集めたものなので、あまりきれいではない。
機能を追加するとすれば、ローカルストレージ(またはSQL)への保存機能を追加することで、追いかけやすくなるのではないかと思われる。

using System.Runtime.CompilerServices;
public static class DebugLoging
{
// WinRTコアイベントのDispatcher
// 使用する際は「Window.Current.Dispatcher;」を渡すこと
// debug情報ページをInFreamに読み込んでいる
public static CoreDispatcher coreDispatcher;
// 書き出しに使用するTextBlock
public static TextBlock debugOutputTextBlock;

// Cでのマクロ、__LINE__ , __FILE__ や
// C#(WindowsPhone)でのStackFram は使用できないので、
// C#5.0の「System.Runtime.CompilerServices」を使用する
public static async void DebugPrint(string msg,
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0,
[CallerMemberName] string member = "")
{
var fullMessage = string.Format("{0}:{1}\r\n\t{2}: {3}", file, line, member, msg);

Debug.WriteLine(fullMessage);

if (coreDispatcher != null)
{
await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
debugOutputTextBlock.Text =
debugOutputTextBlock.Text +
DateTime.Now.ToString(@"M/d/yyyy hh:mm:ss tt") + " " + fullMessage + "\r\n";
});
}
}
}

PageのFrame読み込みに関するメモ

PageをNavigationでそれぞれ個別ページ遷移呼び出しではなくFrameを宣言して、その中に読み込むことができる。
所謂HTMLでいうところの「iframe」のような形が可能

・元PageでのXAML宣言

<Frame x:name="otherPageFrame" />

・元ページでの呼び出し

otherPageFrame.Navigate(typeof(OtherPage), this);

PageをFrameとして入れ込んでいるため、各ページでコードを管理できるが、呼び出し順(Loadedイベントで特に)などで問題が起きやすいものと思われる
UIコントロールが有効になっていない時に読み込むことはできないので、当たり前とは思われる。
・直接LoadedイベントをXAMLに宣言せず、「InitializeComponent()」の後、または「OnNavigatedTo」でイベントを有効化する
・「OnNavigatedFrom」でイベントを解除するのを忘れないこと

//まだまとまっていないので、掘り下げること

Windows Media エンコーダーをWindows8で使用する

64Bit版ではありますが、この版をWindows8 64bit版で使用可能なようです。

Windows Media Encoder 9 Series x64 Edition
http://www.microsoft.com/ja-jp/download/details.aspx?id=1786

Windows8 32Bit版は非対応ですので、現状では使用できないようです。