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

16進カラーコードをColorに変換する

WindowsPhone SilverLight 8.1(以下WPSL8.1)で「Brush」へカラーを設定するときがよくあります。
その際に下記のような形でコード上では設定すると思います。

Brush _brushColor = new SolidColorBrush(Colors.RED);
Brush _brushColor2 = new SolidColorBrush(Color.Color.FromArgb(255,255,0,0));

これで設定していると、HTMLでよくある「#FFFF0000」のような設定ができないことが、不満に感じる時があると思います。
そこで、変換コードを書いてみました。

        /// <summary>
        /// ARGB16進カラーcodeをColorに変換する
        /// </summary>
        /// <param name="colorCode">#00000000</param>
        /// <returns></returns>
        public static Color GetArbgColor(string colorCode)
        {
            try
            {
                // #で始まっているか
                var index = colorCode.IndexOf("#", StringComparison.Ordinal);
                // 文字数の確認と#がおかしな位置にいないか
                if (colorCode.Length != 9 || index != 0)
                {
                    // 例外を投げる
                    throw new ArgumentOutOfRangeException();
                }

                // 分解する
                var alpha = Convert.ToByte(Convert.ToInt32(colorCode.Substring(1, 2), 16));
                var red = Convert.ToByte(Convert.ToInt32(colorCode.Substring(3, 2), 16));
                var green = Convert.ToByte(Convert.ToInt32(colorCode.Substring(5, 2), 16));
                var blue = Convert.ToByte(Convert.ToInt32(colorCode.Substring(7, 2), 16));

                return Color.FromArgb(alpha, red, green, blue);
            }
            catch (ArgumentOutOfRangeException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : colorCode OutOfRange");
            }
            catch (ArgumentNullException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : \"#\" not found");
            }
            catch (AggregateException)
            {
                throw new ArgumentOutOfRangeException("GetArbgColor : \"#\" not found");
            }
        }

あまりきれいなコードとは言えませんが、上記コードで16進数カラーコードをColorで返すことができます。

Brush _brushColor = new SolidColorBrush(GetArbgColor("#FFFF0000"));

このように書けるので、HTMLで使いたいカラーを引っ張ってきたときには便利ではないかと思います。

今回のコードはWPSL8.1向けとしていますが、WPSL8.0でもWindows Runtimeでもそのまま使えるはずです。

ViewBox下でManipulationを行う場合

Viewbox>Canvas>UIElement
画面サイズに左右されないように、上記のような構成で行っているの場合が多いと思います。
この時にManipulationを使用してUIElementを移動させる場合、ずれが出ます。
Viewboxがサイズだけでなく移動距離も変換しているためとみられます。

これを解決する方法としては、Viewboxの変換スケールを取得して、移動量をスケールで除算することで可能です。

private void ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
        var scaleX = Viewbox.ActualWidth / Viewbox.Child.DesiredSize.Width;
        var scaleY = Viewbox.ActualHeight / Viewbox.Child.DesiredSize.Height;

        double x = e.Delta.Translation.X;
        double y = e.Delta.Translation.Y;

        x = Canvas.GetLeft(obj) + (x / scaleX);
        y = Canvas.GetTop(obj) + (y / scaleY);
}

0除算チェックなどはしてないコードですが、こんなのでどうにかなります。

個人的には、移動までスケール変換されるのはどうなのかなとは思いますが、仕様ということならしょうがない(;´Д`)

でも、これはこれで修正されるとこのコード入れてるのがおかしくなるだろうから痛し痒し、がらっとバージョン変わった時でないと分離できないかなー

シンプルサッカー戦術ボード for WindowsPhone8.1 リリース

シンプルサッカー戦術ボード WindowsPhone8.1版をリリースしました。
これは先にリリースしていたWindows 8.1 ストアアプリ版をWindowsPhone8.1用に編集、再編したアプリです。

また、このアプリとWinストア版のアプリはuniversalアプリとして連携しています。

シンプルなサッカー戦術ボードアプリです
マグネットを移動出来ます。
また、マーカーで指示記入ができます。
ゴール前ボードに切り替えることが出来ます
Tweet 機能を搭載しています

試用版でも、機能制限は一切ありません。
気に入っていただけたら、ご購入下さい。

WPS_Download_cyan

*対応言語:日本語,English,português,español,italiano,русский,Deutsch,
français,简体中国,한국어

シンプルサッカー戦術ボード

*Simple soccer tactics board
*Simples Placa das táticas do futebol
*Simple tablero de tácticas de fútbol
*Simple tactique de football bord
*Semplice bordo tattiche di calcio
*Einfache Fußball Taktik Bord
*Простой тактики футбола доска
*심플 축구 전술 보드
*简单的足球战术板

Windopws Phone SilverLight 8.1 アプリをuniversal Appとして申請する場合のメモ

Windows8.1ストアアプリ側でInkManagerなどを使用したアプリを作成していた場合、WindopwsPhone SilverLight 8.1(以下WPSL8.1)で、アプリを作成しなければならなくなります。

このWPSL8.1アプリをユニバーサルアプリとして連携させる場合、ひと手間かかります。

sys000

上記のように同じソリューション内にWPSL8.1用のプロジェクトを作成するのが一般的だと思います。

作成はそのまま進めることで問題ないですが、そのままではアプリ登録時の検証でエラーが発生します。

sys001

WPSL8.1用の「Package.appxmanifest」をダブルクリックすると上記のように表示されるので、「パッケージ名」を登録済みWindowsストアアプリの「Package.appxmanifest」からコピーします。

次にWPSL8.1用「Package.appxmanifest」を右クリックし、「ファイルを開くアプリケーションを選択」>「ソースコード(テキスト)エディター」を選択して、XMLをテキストとして開きます。

sys002

「Identity」にある「Publisher=”CN=~”」をWindowsストアアプリの「Package.appxmanifest」、発行者に書かれている「CN=~」をコピーしてペーストします。

これらの書き換えはWindowsストアアプリが登録済みでなければできないので、WPSL8.1アプリを先行させている場合は、更新時に連携設定と書き換えを行う形になります。

WinRTベースのユニバーサルアプリを作成する場合は共有となり「Publisher=”CN=~”」の書き換えなどは必要ないので迷わず行えます。

今回はWPSL8.1アプリで説明しましたが、universal連携そのものはWP7.5/8アプリでも可能なようです。
おそらく同じような方法で連携設定を行うことになるのではないかと思いますが、自分は環境をWP8.1に移行していますので、検証できていないことをご了承ください。

de:code 2014 day2 #decode14

さてさて、二日目です。

・Kinect update 2014 ~テクノロジの進化~
 新Kinectの話題、いろいろできそうだなー
 新型はWindows8以降対応の予定、Core i7以上、DirectX11(GPU使っているため)、メモリ4GB以上など少々負荷が高め
 新型はサービス動作なので複数アプリから動作可能
 旧型は複数台可能、旧型+新型も可能、新型の複数台は未定

・WindowsPhone8.1アプリ開発徹底解説
 WinRTJSが投入された。
 APIは90%共有しているから、ほぼそのままWin8.1のコードが流用可能。
 WP8.1はSilverLight(以下SL)8.1を搭載しており、これまでのWP7のSL、XNA、WP8でのSL8.0、DirectX、WinRTのAPIが使用可能
 開発の際はSL8.1をベースにするとWinRTも使えるので、非常に強力な開発が可能。
 端末固有の機能はSL8.1でしかアクセスできないものがある(カメラなど)のでそういう意味でも、SL8.1をベースにするのが良いのではないか?
 バックグラウンド音楽再生機能などの一部機能がSL8.1では未実装だが、早いうちに更新されるのではないか?

・Internet of ThingsをWindowsプラットフォームで実践~センサークラウド、M2M、Big data、つないで、連携して、溜めて、活用~
 BTLE Gatt protocol等つなぐためのプロトコルにいろいろ対応
 今後マイクロソフトがIoT向けのサービス、エージェントを直接提供する
 6月にIoTイベント「Microsoft IoT Summit 2014」を開催
 「.Net Micro Framework」は「FEZ」というボードが対応している
 「FEZ」は「TINYCLR社」の商品で日本では「株式会社デバイスドライバーズ」が取り扱っている
 ※VS2012までの対応なので、現在のところはVS2013は非対応

・ユニバーサルWindowsアプリの画面設計~4インチから82インチまで~
 高DPI、画面の解像度、モニタのサイズが非常に幅広い
 30cm前の4インチと3メートル先の40インチは同じサイズに見える
 縦長への対応どうする?
 そして正方形の画面になる場合が存在するがどうする?
 横前提なら、縦長への対応をすっぱり割り切って横表示だけにする、横表示で狭いなら広げて使ってもらうように促す画面を表示する
 ゲームなどの場合メインの「表示/プレイエリア」を正方形で作ってしまい、周辺のUIをサイズに合わせて移動させるのもあり(例としてアナ雪のパズルアプリ)
 解像度ごとの対応はscaleで複数用意することができて自動的に変更してくれるが、一枚で済ませたいのなら、(必要なサイズの)400%サイズの画像を用意して配置する。

・de:code参加者に捧げる最新Microsoftデモ・プレゼンの極意
 短時間ではあったものの、スピーチテクニック、デモテクニックについて濃い内容でした
 自分もこうできるように訓練しよう
 西脇さんは本を出されているのでリンクを置いておきます。
 Kindle版もあるよ

二日間にわたって参加してきましたが、非常に濃い技術漬けの二日間でした。
ただ、どちらかといえば導入向けのセッションがDeviceセッションでは多かったかもしれません。

今後順次ビデオなどがMicrosoft Virtual Academy等で公開されるそうです

参加者の皆様、関係者の皆様、お疲れさまでした。

de:code 2014 day1 #decode14

日本マイクロソフトのデベロッパーイベント「de:code」に参加してきました。
早期割引でとは言え、自分には少々重い負担ではありましたが、非常に濃く、刺激を受けることができました。

・キーノート
 樋口泰行氏、伊藤かつら氏、MSエヴァンジェリストの皆様
 キーノートでは先にアメリカで開催されたBuildを元に日本での技術、開発者向けイベントを開催するにあたって、マイクロソフトの現在の方向性が「Mobile First、Cloud First」であることを再度訴えていました。

 今回、教材として東芝とインテルの協力で「dynabook TAB VT484/22K(8int WindowsTab)」を配布するので、ストアアプリの開発、普及に活用してくださいとのことでした。

 さて、自分が気になっていた事というかメインは日本での「WindowsPhone」の展開に関してですが、樋口氏からは「今日は何も発表ございません」とのことで、周辺からやはりかとがっかりした雰囲気が漂いました。

 しかしながら伊藤氏スピーチの際に、「各国からかき集めたWindowsPhone8端末を教材としてお渡ししますので体験してください」との発言の際は会場から驚きが上がりました。
 ただ、この端末は技適には通っていないので「通信機能をOFF」で使用するようにとの注意は付きました。
 一応とは付きますが日本での「WindowsPhone」展開に関しては含みを残した状態でキーノートは終わりました。

 もちろん、WindowsPhone以外にも、

 ・今後もde:codeを開催する
  TechEdからde:codeへ、毎年開催すると宣言されていました。

 ・Microsoftのフォーカス
  ・Mobile
  ・Cloud
  ・Usage(使ってもらってなんぼ)
  ・Engineer

IoT(MSとしてはIoYT=Internet of YOUR Things)
  すべての物がネットに接続される、MSとしては身近な物、使うものだから「YOUR」を追加

 ・Project Siena
  タブレットでタブレットアプリを作るためのツールということで、紹介されたプロジェクト
  グリッドアプリを配置と、Excelのような関数、Bindの簡易化などで、手軽にプリプロできる、簡単な物ならそのまま提供可能なアプリを制作可能

 等々、時間中に可能な限り二日間の内容を凝縮したようなキーノートでした。

 Channel 9に伊藤かつら氏の部分が公開されていました
 「de:code | Channel 9
 今後公開可能なセッションはさらに追加されていくことでしょう。

・Windowsアプリ開発、どこへ向かうのか。~Deviceトラックの歩き方~
 奥主洋氏
 今回「Deviceセッション」が非常に多く、どのような感じなのかを分類してチラ見せしつつこの講義はチェックということを解説されました。
 また、ストアアプリをお勧めはするけども、デスクトップアプリを切るわけではなく、共存進化させていく。
 ただ、タブレット等のタッチデバイスへの対応を考えるとストアアプリ化を進めていただいたほうが便利で楽に作れますとのこと。

・Xbox One apps~新世代エンターテイメントの提案~
 鵜木健栄氏
 日本での発売日が決まったXbox Oneに関するセッションでした……が、ごめんなさい都合により書けません。

・HTML/JavaScript/CSSとC++で作る、Windows、WindowsPhone、Xbox One アプリ
 WP8.1でWinRTの共用が図られた結果、HTML5+JSで両方のアプリが使えるようになった。
 ライブコーディングで、ほぼそのまま動作。
 ほぼというのは、読み込むJSが違うので、宣言をすることを忘れずにとのこと。

・WindowsPhone8.1プラットフォーム徹底解説
 WPアプリは現在25万アプリだそうです。
 非公開配布(URL知ってれば別として)機能はWPだけ

・デスクトップアプリケーションとWindowsストアアプリの連携ーアプリ間の連携技術ー
 非常にマニアックな内容ではあったんですが、なんだか懐かしいセッション内容
 言ってしまえば「プロセスフック(乗っ取り)」でアクセスする
 いやー懐かしい話だなーw
 もちろんこれはストアに提出してもはじかれるものではあるんですが、企業内アプリをタブレットなどのタッチデバイス化したい場合に有効ではないかなと思います。

・参加者パーティ
 DJやazure#というグループが歌ったりとなかなかに派手でした。

一日目はこんなセッションに参加していました。