月別アーカイブ: 2014年4月

Internet Explorerのセキュリティニュースに絡んで

Internet Explorer(以下IE)の6~11に脆弱性があり、遠隔操作を受ける可能性があるとニュースなどで出ています。

これに対してニュースではIE以外のfirefoxやchromeを使用するよう勧めてきています。

しかしながら、一長一短もあるのと、脆弱性が”ない”とはどのブラウザにも言えないことで、鼬ごっこにならざるを得ません。
さらに、ダウンロードを公式サイトからできるのかという問題もあります。
間違って非公式サイトからダウンロードしてしまう方がいないとは限らず、そこにマルウェアが仕込まれている可能性があります。

Microsoftはセキュリティアドバイス「セキュリティ アドバイザリ 2963983「Internet Explorer の脆弱性により、リモートでコードが実行される」を公開」を日本語で公開しています。

・「Enhanced Mitigation Experience Toolkit (EMET) 」の導入
・「Vector Markup Language (VML) を無効化する」
・「拡張保護モードを有効にする」

特にやりやすいのは「拡張保護モードを有効にする」ではないでしょうか?
ただし、これらの項目で対処した場合、IEを前提としたアプリケーションやプラグインが動かない場合があります。

そういったアプリは、IEの脆弱性が修正されたとしてもIEにかかわりがなくセキュリティホールとなりうるということです。

今回の脆弱性に対してマイクロソフトはパッチを出すということを宣言していますが、WindowsXPはすでにサポートが切れたOSであり、今回の件はサポートされません。
※「マイクロソフト セキュリティ情報 MS14-021 – 緊急」に「WindowsXP Service Pack 3」と「Windows XP Professional x64 Edition Service Pack 2」の更新が記載され、今回特別にXPにも更新が行われるようです。

WindowsXPはサポートされないと書きましたが、発売から12年が経過し、現在からすれば非常に古い構造のOSですから、たとえ今回の脆弱性がなくても攻撃を受けてしまうことでしょう。
マイクロソフトはWindowsXPのサポートが切れることを何年も前、それこそOS発売された時からその日が来ることを宣言しています。

また、ここ一年はさらに告知の強化、導入支援、無料相談、低金利販売制度等、多岐にわたる行動を行なっていました。
これを機会にWindowsXPから現在のところもっともサポート期間の長いWindows8.1への更新を行われてはいかがでしょうか?

まだ移行が行われていない企業などに向けた支援はマイクロソフトを含め各社行っています。

なお、某A社とよく比較されますが、あそこはすっぱりサポートを断ち切って移行/導入支援すら行ってくれない上に、OSとしての寿命は2年程度ですので、さらに詳しい人、企業以外にはすすめられません。

かけ算 九九表です。簡単な問題、フラッシュ暗算もあります

かけ算を勉強するための、日本風の九九表アプリです。
計算の力を伸ばせれるように、簡単な問題を出す機能を搭載しています。

Windows8.1に最適化を行い、フラッシュ暗算機能を搭載しました。
標準では、「桁数は1桁、2桁、3桁の固定」、「出題数は10問まで」、「表示時間は約 1 ~ 0.7 秒まで」、「足し算のみ」、となっています。
アプリ内で機能解除をご購入いただけると、「桁数は1~7桁を最少~最大で設定可能」、「出題数は30問まで」、「表示時間は約 1 ~ 0.2 秒まで」、「足し算と引き算」、となります。

さらに、WindowsPhone8.1(WindowsRuntime)版をuniversal Appsとして連携しており、アプリ内課金によるフラッシュ暗算の機能拡張は共通課金となっています。

Windowsストア版初期画面

Windowsストア版初期画面

Windowsストア版フレッシュ暗算画面

Windowsストア版フレッシュ暗算画面

Windowsストア版
対応言語:日本語 , English , Deutsch, español, français,
português, 简体中国 , 傳統中國 , 한국어

WindowsPhone8.1版初期画面

WindowsPhone8.1版初期画面

WindowsPhone8.1版
対応言語:日本語 , English , Deutsch, español, français,
português, 简体中国 , 傳統中國 , 한국어

*かけ算 九九表です。簡単な問題、フラッシュ暗算もあります
*Is the multiplication times table. A simple problem, there is also a flash mental calculation.
*Multiplikation mal Tisch. Ein einfaches Problem, es ist auch ein Blitz Kopfrechnen
*Mesa de Multiplicación. Un problema sencillo, también hay un cálculo mental de flash
*Table fois de multiplication. Un problème simple, il ya aussi un calcul mental flash
*Vezes Multiplicação mesa. Um problema simples, existe também um cálculo mental de flash
*次乘法表。一个简单的问题,也有闪光心算
*次乘法表。一個簡單的問題,也有閃光心算
*곱셈 구구단 표. 단순한 플래시 암산도 있습니다

Windows8.1ストアアプリ/WindowsPhone8.1でのアプリ内課金メモ2

Windowsストアアプリのアプリ内課金メモ」でWindowsストアアプリでのアプリ内課金コードを記載しましたが、これがWindowsPhone8.1でも可能なことを確認しました。

ただし、WindowsPhone8.1ではいくつかの制限事項があり、そのまま適用とはなりません。
ただコンパイルでエラーが出るということはなく、実行時のエラーとなるのでtry{}は幅広くしておく必要があります。

・Windowsストア版との差
 ・「CurrentAppSimulator」でのデバッグは基本的に無理です。
  これはWindowsストアで操作できた「WindowsStoreProxy.xml」がないためです。
  もちろん今後何かしらのツールが出て同じような設定が可能になるかもしれません。

 ・「CurrentApp」を使用してIISを立てることで購入環境をエミュレーター上でエミュレートする
  これの欠点としては実機では試すことができません。
  この方法は「 伊勢 シン (id:iseebi) 」さんが公開されている「Windows Phone 8 のアプリ内課金をエミュレータで試す : (1)環境を作る」をご確認ください。

・実装結果
 ・自アプリでWindowsストアアプリとWindowsPhone8.1で連携をさせて相互にアプリ内課金が連携するか確認をしました。
  WindowsPhone8.1側で購入し、Windowsストアアプリ側への反映がどれくらいかかるかを確認していましたが、微妙に時間がかかる、または何かしら条件があるのかアプリを再インストールしないと反映しない気配です。
  もちろん、自分の環境で何か起こっている可能性は捨てきれないので、開発機器を使用していなければ問題なかったのかもしれません。

今後も何かしら対応アプリを作成して確認できればと思います。

WindowsPhone8.1アプリ製作時、最初の注意メモ

WindowsPhone8.1では「Windows Phone Silverlight 8.1 Apps」と「Windows Runtime universal Apps」があります。

ここでは「Windows Runtime universal Apps」での作業を元にしています。

WindowsPhone8.1ではタイルサイズが変更になりました。
WP81タイルイメージ
Windowsストアアプリとの互換性が向上した部分がありつつも、微妙にサイズが違うというのが手間ですね。

デザイン時のデバイスでのサイズが「480*800」から「400*640」に変更になっています。

WindowsPhone8.0デバイス

WindowsPhone8.0デバイス

WindowsPhone8.1デバイス

WindowsPhone8.1デバイス

よく見ると「サイズ @120%スケール」となっています。
このため以前の「480*800」デザインをそのまま移植することはできません。
「400*640」をもとにサイズと配置を変えなければなりません。

デバイスに「400*640」があれば、わかりやすく、やりやすいんですが、大幅な変更の割に告知がほぼない変更なのはどうにかならなかったのでしょうか?

画像のスケール%は「100%」「140%」「240%」となっています。
universal AppsでWindowsストアアプリとSharedで画像を共有している場合、Windowsストアアプリには「240%」が無く、WindowsPhone8.1アプリには「80%」がないため「scale-80」「scale-240」を配置しているとコンパイル時に警告は出ますが、今試している限りでは排他されるようで問題がないようです。

自分はアプリのイメージ資産に
「LargeLogo」「Logo」「SmallLogo」「SmallLogoWin」「SplashScreen」「SplashScreenWin」「Square70x70Logo」「Square71x71Logo」「StoreLogo」「WideLogo」と名称をつけて配置しています。

WindowsPhone8.1 Developer Preview 開始

WindowsPhone8.1 Developer Previewが開始され、Developer登録をしている端末のアップデートが開始されたようです。

Developer Previewとなっているように、開発者向けのベータプログラムというべきもので、完全自己責任、文鎮化しても文句言わない、バグや機能の制限がまだあるかもというあくまでも現在開発している人に向けたものです。

・「Cortana」は所謂A社が搭載してるあれのMS的なAI機能も搭載版ですが、米国限定でのプレビュー版です。
・「タイルが透過」するようになって、メイン画面で配置した写真が透過(タイルによる)して見えるようになりました。
・「タイル数が増加」は高解像度機だけで可能だった6タイル配置がWVGAでも可能になったものです。
設定 6タイル
・「通知センター(Action Center)」は、画面上部からスライドすると設定などがここで行えます。
・「Wordflow」はUSキーボードで有効になる新しい入力方法です。
  ちょっと慣れは必要になりそうな気はしますが、慣れると高速入力が可能になりそうです。
・「VPN対応」読んで字のごとくですね、企業でも活用しやすくなるでしょう。
・「ブラウザがIE11」WindowsPhone8.1向けにはなっているもののIE11エンジンになり、操作方法が少々変更になっています。
 FlashやUnityWebPlayerは動きません。
・「Windows Runtime との互換性向上」はWindowsストアアプリとの互換性が向上し、universal Appsという仕組みが導入され、相互作用させやすくなりました。
・「言語設定の拡張」で必要な言語はDLしてインストールする方向になり、Windowsのコントロールパネルにある「言語設定」と同じような操作方法も含んで同じ感じです。

とりあえずこんなところで

Windowsストアアプリのアプリ内課金メモ

基本的な方法はMSのエヴァンジェリスト田中達彦さんが「Windowsストア アプリ 作り方解説 Line Attack編 第8回 ~アプリ内購入(アプリ内課金) ~」で書かれています。

Windows8.1では「RequestProductPurchaseAsync(string,bool)」は古い方法なので書き換えるようにと指示が出ます。(エラーや警告にはならない)

自分はこんな感じに書き替えを行いました。

#if DEBUG
            // 課金テスト用
            // C:\Users\使用しているPCのアカウント\AppData\Local\Packages\アプリのID\LocalState\Microsoft\Windows Store\ApiData
            // WindowsStoreProxy.xml
            // <Product ProductId="1" LicenseDuration="0" ProductType="Durable"> ProductIdを使用しているlicense名に書き換える
            //  <LicenseInformation>
            // <Product ProductId="1"> // ProductIdを使用しているlicense名に書き換える
            // <IsActive>true</IsActive> // true 購入済み false 未購入 テストに合わせて書き換える
            //  </Product>
            //  </LicenseInformation>

            ListingInformation listing = await CurrentAppSimulator.LoadListingInformationAsync();
#else
            ListingInformation listing = await CurrentApp.LoadListingInformationAsync();
#endif

            ProductListing paidAddMode = listing.ProductListings[licenseName01];

            MessageDialog msgBox = new MessageDialog(AppStringsClass.StringPurchase + paidAddMode.FormattedPrice);

            await msgBox.ShowAsync();

            try
            {
#if DEBUG
                PurchaseResults purchaseResults = await CurrentAppSimulator.RequestProductPurchaseAsync(licenseName01);
#else
                PurchaseResults purchaseResults = await CurrentApp.RequestProductPurchaseAsync(licenseName01);
#endif

                switch(purchaseResults.Status)
                {
                        // 購入
                    case ProductPurchaseStatus.Succeeded:
                        msgBox.Content = AppStringsClass.StringThankYou;
                        await msgBox.ShowAsync();
                        break;

                        // 未購入、又は何かしらのエラー
                    case ProductPurchaseStatus.NotPurchased:
                        break;

                        // 前回購入が未完了
                    case ProductPurchaseStatus.NotFulfilled:
                        break;
                }

#if DEBUG
                // 購入完了のdummy
                msgBox.Content = AppStringsClass.StringThankYou;
                await msgBox.ShowAsync();
#else
                // 実際に購入されているかの二重チェック
                if (LicenseInfo.ProductLicenses[licenseName01].IsActive)
                {
                    // purchased
                    msgBox.Content = AppStringsClass.StringThankYou;
                    await msgBox.ShowAsync();
                }
                else
                {
                    return;
                }
#endif
            }

UniversalAppsでWP8.1も同じコードが使えるようになっているのではないかと思うものの、現時点では未検証
今後確認したら記載する

MVVMの個人的なメモ

何でいまさらという感じですが、UniversalAppsを作成するためにはMVVMの考えを把握しておかないとコードの共有などで問題が出そうなのと、正直自分ではまだやり切れていない、理解し切れていないので、整理、勉強がてらメモしていくことにしました。

MVVMはModel-View-ViewModel(M-V-VM)の略で、MVC(Model-View-Control)では表現しきれない環境、WindowsストアアプリやWPF等で「XAML」が導入されてControlは?という部分もありMVCから派生して作られたソフトアーキテクチャパターン

で、言葉としてはM-V-VMとなっているものの、本来の並びはV-VM-M(View-ViewModel-Model)で構築されます。
また、Viewに関しては「見られている」ではなく「見ている」場所という説明を見たことがあり、此れはすっと入ってきました。
出来上がったものは見られているものでも、中からすれば「結果が出る場所を見ているもの」だと考えます。

XAML-Binding-Codeでつなぐ形で構築する、ただしこれに縛られすぎないで、どうしても必要なことであれば、VやVMにCodeが入り込んだり、MにVに引きずられる場所があることもあるのかなと。

BindingはINotifyPropertyChangedを継承したプロパティクラスを用意しておくと変更通知のやり取りができるので、データをやり取りし、画面変更などもスムーズ。

受け取る側や引き渡す側はObservableCollection、INotifyCollectionChangedなどで実装する。

DataModelはModelの下、ModelでDataをシリアライズしてVMに引き渡す、VMで変更を感知したらModelからDataへ引き渡して整合をとるという形でしょうか?
もちろんVMで定義したものを利用することはできると思いますが、この辺がまだ理解不足でうまくやれていないです。

今後も勉強をしていかないとかなと思います。
ここ可笑しい等のご指摘ありましたら、よろしくお願いします。

WindowsPhone8.1にRoamingStorageが追加

WindowsPhone8からWinストアアプリ準拠のStorageAPIが追加されていたものの、Localのみでしたが、WindowsPhone8.1からRoamingStorageAPIが有効になり、Windows8.1ストアアプリとWindowsPhone8.1アプリでアプリIDを共通化することでRoamingStorageが同期するようです。

このRoamingStorageでありがたいのは、今までのWP8ではセーブデータのバックアップ機能は自力で実装する必要(例えばOneDriveへ)があったものが、ネットワークにつながっていれば、自動的に同期されていくというところ。

ただ、これも万能ではないと思うので、バックアップ機能の実装そのものは無駄ではないと思いますが。

もちろんこれはWindowsPhone8.1がリリースされ、各端末へのアップデートや新しい端末が一定以上シェアを持たないとWP8での開発をやめるわけにはいかないので、しばらくはそのままでしょう。

さらに言えば、Windowsストアアプリ側の対応(改修)も必要な場面があるでしょうし、すでに公開済みの物を対応させようという場合は、密に確認をして対応を行わないといろいろと問題が出ることでしょう。

ですが、これに対応しているということが一つの売りにもなることであり、今後UniversalAppsによる開発の統一を考えるとXBOXも含めて連携していくものと思われます。

Visual Studio 2013 Update 2 RCが公開

現在開催中のBuild 2014 に合わせて「Visual Studio 2013 Update 2 RC」が公開され、新たに「ユニバーサル アプリ」「WindowsPhone 8.1 アプリ」の開発が行えるようになりました。

newuniversalapps

ユニバーサルアプリはWindows8.1ストアアプリとWindowsPhone8.1アプリを同一コードで開発できるようになったテンプレートです。
今後は「XBox」も同一で行えるようにしていければというもののようです。

WindowsPhone8.1向けは、今後WP8.1を搭載した端末が4月末から5月にかけて出るようなのと、Lumia向けには夏にはWindowsPhone8から更新の形で、配布されるようです。
Lumia以外の端末に関してはいまのところ告知されていないようです。

ユニバーサルアプリですが、本当の意味で同一コードというわけではなく、同一ソリューションでプロジェクトが混在可能であり、PCL等による共通化をtemplateにしたという感じです。

hubuniapps

既存のコードを変換というのは手間になりそうな気配ですが、新規で作成したプロジェクトに移植という形であれば統一しやすいのではないかなーという感じです。