ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Archive for the ‘Silverlight’ Category

Windows Phoneプログラミング – 加速度計の値をAccelerometerから取得すると重力加速度は1、最大加速度は2だが値を超えることもある – 実験機はNokia Lumia 800

leave a comment »

IMG_4035_mid_640_480

<Fig.1 : Wondows Phoneの加速度情報を取得するサンプル>

Accelerometerオブジェクトを使ってWindows Phoneから加速度情報を取得して画面に表示するサンプルを作ってみた。加速度情報はWindows Phoenに対してX、Y、Zの3軸で値を取得するようになっている。Windows Phone本体を上向きで水平状態に保ったとき、XとYの値は「0」、Zの値は「-1」となっている。本体を裏返しにして水平状態に保つと、XとYの値は「0」、Zの値は「1」となる。

本体を表に向けた状態で、右に傾けるとXの値が「0」から次第に増加し、90度傾けて立てた状態にするとXの値は「1」になる。本体を向こう側に傾けるとYの値が「0」から次第に増加し、90度傾けて立てた状態にする、つまりWindows Phoneを逆さに立てた状態にするとYの値は「1」になる。リアルタイムに加速度計の値が変化するサンプルは以前ここで紹介した。

<Windows Phoneアプリ開発 – たった3行でできる加速度センサの利用>
https://matsumotoyoshio.wordpress.com/2012/06/27/windows-phone%e3%82%a2%e3%83%97%e3%83%aa%e9%96%8b%e7%99%ba-%e3%81%9f%e3%81%a3%e3%81%9f3%e8%a1%8c%e3%81%a7%e3%81%a7%e3%81%8d%e3%82%8b%e5%8a%a0%e9%80%9f%e5%ba%a6%e3%82%bb%e3%83%b3%e3%82%b5/

しかし加速度計の値は、単に傾きを取得するのではなく「加速度」を取得するので、Windows Phone本体を振るなどして加速度を与えると「1」以上の値や「-1」以下の値を取得する。瞬間的に「1」や「-1」を超えることがあるのだ。このあたりは加速度の値を使って操作するアプリを作ったとき、値が閾値を超えてエラーにならないように考えなければならない。

では実際にWindows Phoneを振るなどして加速度の値がどのくらいまで取得されるかを試したのが上のFig.1である。このサンプルでリアルタイムに加速度の値を取得して表示すると同時に、X、Y、Z各値の最大値と最小値を表示させるようにしたものだ。テキストボックスの上からXのリアルタイム値、次は左がXの最大値で右がXの最小値、Yのリアルタイム値、Yの最大値とYの最小値、そしてZのリアルタイム値、Zの最大値とZの最小値、である。

サンプルプログラムを実行し、Windows Phoneをいろんな角度に振ると最大値、最長値がわかる。わかったのは、加速度の最大値は「2」、最長値は「-2」で、これはつまり重力加速度の2倍まで検知できると考えていいだろう。また最大値はぴったりではなく、XとYの加速度は最大2.000977まで上がり、Zの加速度は-2.000977まで下がっていることだ。

この原因はWindows Phoneの加速度センサに誤差があるからだろうか。このサンプルプログラムはNokia Lumia 800で実行したものだが、同機種の他の実機で実行したり、他機種モデルで実行して調べてみたい。もし機器の個体差によるものなら、アプリのプログラミングにおいてはこの誤差を考慮する必要があるだろう。

IMG_4054_mid_640_480

<Fig.2 : サンプルプログラムを実行したWindows Phone Nokia Lumia 800>

広告

Windows Phoneアプリ開発 – たった3行でできる加速度センサの利用

with 3 comments

IMG_3857_mid_640_480

<Fig.1 : 加速度センサの値を画面に表示するサンプル>

Windows Phoneにとって、というよりもモバイルデバイスにとって加速度センサの役割は重要である。加速度センサは言葉を変えると「傾きセンサー」であり、これを使うとモバイル機器を傾けることで機器をコントロールすることができる。Windows Phoneは様々なメーカーからモデルが出されるが、加速度センサーは標準仕様であり、必ず実装されなければならないものとなっている。このように基本仕様を決めることは開発にとってメリットがある。開発ツールで標準のライブラリさえ提供できれば、プログラム上で利用することが簡単になるからだ。Windows Phoneプログラミングでは加速度センサーを参照する標準のクラスが用意されており、これを使うと実に簡単に加速度センサの値を取得することができる。

上のFig.1は加速度センサの値をX、Y、Z軸でそれぞれ検知し、テキストボックスに値を表示するサンプルである。

加速度センサを参照するためには、次のようにたった3行でいい。

1.Accelerometerのインスタンス変数を定義する
2.new演算子でインスタンスを生成する
3.myAccelerometer.CurrentValue.Acceleration.Xで値を取得する

実際には上のサンプルは、myAccelerometer.CurrentValueChangedイベントプロシージャでリアルタイムに加速度センサの値が変化するたびにテキストボックスの値を書き換える処理をしている。このサンプルでは、テキストボックスの上から「X値」、「Y値」、「Z値」を表示している。また必要な参照設定を追加し、名前空間の追加も必要である。

IMG_3858_mid_640_480

<Fig.2 : Windows Phoneを右に傾けると加速度センサのX値が正となり増加する>

IMG_3859_mid_640_480

<Fig.3 : Windows Phoneを左に傾けると加速度センサのX値が負となり減少する>

Windows Phone本体を左右に傾けるとX軸の値が変化する。右に傾ければX値が増加し、左に傾ければX値は減少する。平らな状態が「0」であり、最大値は1、最小値は-1だ。また本体を左右に傾けることでZ軸も傾くのでZ値も変化していることがわかる。

IMG_3860_mid_640_480

<Fig.4 : Windows Phoneを向こう側に傾けると加速度センサのY値が正となり増加する>

IMG_3861_mid_640_480

<Fig.5 : Windows Phoneを手前に傾けると加速度センサのY値が負となり減少する>

Windows Phone本体を向こう側や手前に傾けるとY軸の値が変化する。向こう側に傾ければY値が増加し、手前に傾ければY値は減少する。平らな状態が「0」であり、最大値は1、最小値は-1だ。左右に傾けた時と同様に、向こう側や手前に傾けるとZ軸も傾くのでZ値も変化している。

IMG_3862_mid_640_480

<Fig.6 : Windows Phoneをひっくりかえすと加速度センサのZ値が正となり増加する>

加速度センサのZ値は、体感的にはわかりにくいが本体の手前から裏側に向かって突き抜ける回転軸である。Windows Phone本体をどの方向にであれ傾けるとZ軸の値が変化する。通常、表パネルを手前に向けた状態でZ値は負であり、上の写真のように本体をひっくりかえすとZ値は正になる。平らな状態が「-1」または「1」であり、本体が立った状態で「0」となる。

加速度センサは魅力的なインターフェースである。加速度センサーを使うことができれば、いろいろなアプリケーションのアイデアが湧くだろう。どんなアプリケーションを作ろうかと、いろいろと考えるだけで楽しい。30年以上も前、はじめて「パソコン」というものに触れ、プログラミングに熱中してあっというまに朝が来た日々を思い出す。Windows Phoneプログラミングは俺の心を捉えて離さない。

Windows PhoneサンプルプログラムをXAPファイルにして実機にアプリケーション配置する

leave a comment »

IMG_3642_mid_640_480

Windows 7上のエミュレーターで作ったアプリケーションの動作確認をすることもできるのだが、やはり実機で確かめたい。Windows Phoneのプログラムは原則としてApp Hubからのダウンロードしか方法がないのだが、App Hubへ開発者として登録すれば、端末のロックを解除することができ、開発用のPCから直接アプリケーションを配置することができる。

Windows Phoneに開発用PCから作ったアプリケーションを直接配置するには、まWindows PhoneをPCに接続する際にZUNEクライアントが必要になる。MicrosoftのサイトからZune Softwareをインストールするのだ。Zune SoftwareはZUNE端末が米国カナダなど一部の国でしか発売されていないことから、以前は日本語版Windowsにはインストールできなかったが今は全く問題なくインストールできるようになっている。

Zune SoftwareをインストールしてWindows Phoneを認識させたら、Windows Phone SDKの「Windows Phone Developer Registration」を起動してApp Hubを介してデバイスを登録する。そしてVisual StudioやExpression Blendで作ったプロジェクトをビルドする。ビルドするとプロジェクトフォルダの「Bin」-「Debug」フォルダに.XAPファイルが生成する。これがアプリケーションのパッケージだ。これをWindows Phone実機に転送するには「Application Deployment」を使う。

写真は雑誌に載っていたサンプルコードを参考にしてとりあえず作ってみた時計アプリケーションだ。簡単なプログラムでもこうして実機で動くことが確かめられると嬉しい。作ったという実感が持てる。

書評:プログラミング Windows Phone – MSDNプログラミングシリーズ (日経BP社)

leave a comment »

IMG_2562_mid_640_480

この本は、現時点で最もわかりやすく、網羅的かつ詳細にWindows Phoneプログラミングについてまとめられた本であると断言する。もちろんそれは、長年Windows Phoneに取り組んでこられた著者であり日本マイクロソフト株式会社のエバンジェリスト、高橋忍さんの実際的なノウハウが詰まっているからだ。筆者自身がSilverlightテクノロジ、Windows Phoneを愛しているからこその成果である。

約400ページの書籍であるが、そのうち第1章から第3章までの約30ページにWindows Phoneの概要、開発環境などについて簡潔にまとめられている。この本の真骨頂は続く第4章からである。第4章「コントロール」、第5章「パネル」、第6章「スタイルとテンプレート」、第7章「グラフィックス」、第8章「アニメーション」、第9章「バインディング」、第10章「データと通信」、第11章「タッチ操作とジェスチャー」には具体的な例をもとに詳細な解説がなされている。

第12章は「ナビゲーションとライフサイクル」について述べられる。マルチタスクが基本的に禁止されているWindows Phoneでは、アプリケーションの起動と終了だけでなく、バックグラウンドにまわったときの処理を考える必要がある。バックグラウンドにまわったアプリケーションは休止状態「非アクティブ」になるが、場合によっては強制的に終了されてしまうことがある。このことがナビゲーションとかかわってくる。またバックグラウンドで動作する「エージェント」についても解説され、ここで「バックグラウンドオーディオ再生」と「リマインダー」についても説明されている。

第13章では「Launchar」と「Chooser」、「Bing Mapsコントロール」、「WebBrowserコントロール」などの使い方、第14章では「加速度センサー」、GPSなどによる「ロケーションサービス」、「カメラ」、「電子コンパス」、「ジャイロスコープ」、そして「モーションセンサーオブジェクト」の利用が説明されている。第15章は「タイルとプッシュ配信サービス」、第16章は「PivotとPanorama」、そして第17章には「XNAを使ったゲームアプリケーション開発」が解説される。ここではページ数としてはあまり多くは割かれていないが、Windows Phone Gameプロジェクトの基本構造についてや、SilverlightとXNAを組み合わせたアプリケーションを構築する方法など、他所にない突っ込んだ記述がされている。

第18章は「Windows Phone 7.5の新機能」としてトピック的な解説がされている。そして面白いのは最後の第19章だ。「Windows Phone開発Tips」として、まさに開発者として取り組んできた実際的なTipsが紹介されている。すでにWindows Phone開発をやっている中級、上級者にとっても、この章を読むだけでも価値がある。

「あとがき」にはWindows Phoneに取り組み、この本を執筆するに至った著者の熱い思いが伝わってくる。技術者魂といおうか、マイクロソフトのエバンジェリストの中でもスター的に華々しく活躍し表面的にはスマートでクールなイメージのある筆者だが、じっくりと時間をかけて丁寧に、地道にSilverlightテクノロジとWindows Phoneに真摯に取り組んできたことがうかがえる。

IMG_2561_mid_640_480

書評:Windows Phone ゲームプログラミング (ソフトバンク クリエイティブ)

leave a comment »

IMG_2559_mid_640_480

先に紹介した「はじめてのWindows Phoneプログラミング―プログラミングツール「Visual Studio」&デザインツール「Expression Blend」 (I・O BOOKS)」がWindows Phoneプログラミング開発において最初に読むべき本だとすれば、この本はその次に読むべき本である。

Windows Phoneのプログラミングでは、大きく分けてXNAプラットフォームを使う方法とSilverlightを使う方法がある。XNAは1秒間に30回の描画を行うプラットフォームで、ユーザーの入力を30分の1秒ごとに検知しながらプログラムが実行される。これはリアルタイムに動くゲーム作りなどに適している。一方Silverlightはイベントドリブン型のプログラミングに適している。こうした2つのプラットフォームの違いを説明しながら、主としてXNAによるゲーム開発について説明されている。

俺はこのような本を読むとき、いきなりマシンに向かってコードを書くのではなく、まず一度最初から最後まで通読することにしている。そうすることで開発の全体像がつかめるからだ。読みながら理解できない概念がたくさんでてくるが、気にせずどんどん読み進める。これが新しい技術修得に近道だと思っている。

Chapter 4ではほぼ50ページを使いシューティングゲームを実際に作る手順が説明されている。サンプルコードが示されるが、基本的にVisual Studioを使ったC#プログラミングの知識があることが前提だ。サンプルコードを示しながら、リアルタイムゲームにおけるキャラクターの扱い方やクラス、メソッド実装の実際がわかるようになっている。たとえばキャラクターの位置はVector2クラスを使う、衝突判定はIntersectsメソッドを使えばいい、といったことがわかる。コードをごりごり書く必要はないのだ。

Chapter 5では加速度計を使ったバランスゲームを作る。加速度計はWindows Phoneの傾きを検知するもので、Windows Phoneの基本スペックに入っている。XNAプロジェクトで加速度計を使うには参照設定が必要であり、名前空間の指定、フィールド定義とStartメソッドの記述など使い方が説明される。加速度計を使えばWindows Phoneの筐体を傾けるアクションで操作するゲームを作ることができる。

Chapter 7ではSilverlightでGPSを使った「位置ゲーム」を作る。GPSもWindows Phoneの基本スペックになっている。位置ゲームではGeoCoordinateWatcherクラスを使って位置情報を取得し、Bing Mapを使って地図上に位置を示す。位置情報を分離ストレージに保存する手法も解説されている。Chapter 8ではアドベンチャーゲームを作る。

この本は、とにかく本格的なゲームつくりをしてみたい人にうってつけである。この本で基本的なテクニックをマスターすれば、あとは創造力をフルに発揮して、いろいろなゲーム作りに応用できるだろう。著者は日本マイクロソフト株式会社のエバンジェリスト、田中達彦さんだ。

IMG_2558_mid_640_480

書評:はじめてのWindows Phoneプログラミング―プログラミングツール「Visual Studio」&デザインツール「Expression Blend」 (I・O BOOKS)

leave a comment »

IMG_2555_mid_640_480

翔泳社や技術評論社といった大手IT技術書の出版社とは一味違う本を出してくれる「工学社」のI・O BOOKSだ。ほぼA5サイズに近い21×15cmという小型版でページ数も191ページと少なめだ。個人的に思っているのは工学社の本には「はずれ」がないことで、読者の目線で書かれている良書が多い。この本もそうである。

この本ではWindowqs Phoneプログラミング開発のためのWindows Phone SDK 7.1を使い、「Visual Studio 2010」と「Expression Blend 4」による開発を説明している。これらのツールはMicerosoftのサイトからダウンロードでき、すべて無償で利用できる。

この本ではまず「Windows Phoneとはどんなものか」という基本的な説明から、アプリケーションを登録するための「App Hub」について、Windows PhoneやWindows 8のUIである「Metro」について、開発環境の整え方など、はじめてWindows Phoneアプリケーションの開発をするための基本的な事柄がうまく整理されている。

第四章から実際のアプリケーション開発の手順が示されるが、「Silverlightで開発する」ではボタンとテキストボックスによる基本から、画面遷移と画面間の情報の受け渡しの手法、「Bing Map」の利用と写真の表示、カメラの利用をサンプルとして「BingMapsTask」や「PhotoChooserTask」、「CameraCaptureTask」などの「Launcher」と「Chooser」の利用、HTTP通信のサンプル、GPSの利用、加速度センサの利用など基本的なプログラミングを体験できる。しかもコード記述の方法が丁寧に整理されているので、C#プログラミングに精通していなくてもサンプルアプリケーションを作って確かめることができるだろう。

第五章は「Expression Blend」による開発が説明されているが、さすがにこれだけの紙面ではExpression Blendを説明しきれない。とはいえ「オブジェクト」パネルや「プロパティ」パネル、そしてアニメーション作成する「タイムライン」パネルなど画面構成をわかりやすく説明し、「Hello World」アプリケーションの作成から簡単なキーフレームアニメーションの作成まで説明されている。

とにかくこの本を読むと目からうろこが落ちる。ここまでWindows Phoneアプリケーション開発が簡単になっているとは、と。はじめてWindows Phoneのプログラミングをしようと思うなら、まずこの本を勧めたい。

IMG_2553_mid_640_480

Windows Phoneアプリ開発 – たった4行でできるBing Mapの利用

leave a comment »

IMG_2811_mid_640_480

Windows Phone開発用のMicrosoft Visual Studio 2010 Express for Windows PhoneでBing Mapを利用するアプリを作っているところだ。PC上のシミュレーターで作ったプログラムの動作確認をしている。

「作ったプログラム」と書いたが、実際はたった4行しかコードを書いていない。

1.BingMapsTaskのインスタンス変数を定義する
2.new演算子でインスタンスを生成する
3.GeoCoordinateクラスを生成しBingMapsTaskのインスタンスに割り当てる
4.BingMapTaskインスタンスをShowメソッドで表示する

これだけで画面タッチに対応したズーム機能のある地図アプリケーションができる。実に簡単だ。

Windows Phoneプログラミングの魅力のひとつに豊富なオブジェクトが利用できることがある。BingMapの利用はその典型的なものといえる。

と書いていて忘れていた。usingステートメントで名前空間の指定をしなければいけないので、実際は6行のコードである。

5.Microsoft.Phone.Tasks名前空間の指定
6.System.Device.Location名前空間の指定