“今日から使える”アプリコンテスト – 紹介

Digi International主催の”今日から使える”アプリコンテストの紹介です。詳しくは、 http://www.digi-intl.co.jp/campaign/contest/index.html を見ていただきたいのですが、このコンテストは、Digi International様の製品を使って「これは便利、こんなのが欲しかったわ」と奥様も納得して、直に使えて役に立つ、生活に密着したアプリケーションを作って競い合う、アプリケーションコンテストです。 日頃、何だかよくわからない裸のボードを使ってゴニョゴニョやって、「やった完成!!」と見せびらかしても、奥さんには白い目で見られるそんなあなた(あれ、私のこと?)、このコンセプトでアプリを作って投稿しませんか? このコンテスト、日本マイクロソフトも協賛させていただいております。もう随分昔(といっても2年前ですが)、TechDays2010のキーノートで披露した、Windows 7 Sensor & Location Platformで、ZigBee無線付テーブルタップをPCにつなぎ、さらさらヘアーをドライヤーの熱風で靡かせて、電力見える化のデモをやりましたが、このデモも、ZigBee無線付テーブルタップがDigi International様の製品なので、一応、このコンテストの範疇になります。他にも、Digi Connectは、Windows CEをOSとして使っていたり、XBee Wi-Fiドングルは、超有名なドングルなので、私のブログの読者の中には、家に帰れば2、3個転がっていそうですね。こういった製品をWindows 7 PCや、Windows Phone 7、.NET Micro Framework等と連携させるとか、デバイスとWindows Azure上のサービスを連携させるとか・・・ 組込みGeek系突っ走りだと、いまひとつ、「奥様の納得」感を得るのは難しいので、是非、パソコンやクラウドなどの連携まで試してみてくださいね。 コンテストの募集要項をよぉっく見ると、賞品の項目に「マイクロソフト賞」とありますね。この賞は、Digi Internationalさんの製品と、日本マイクロソフトの製品とを組み合わせて活用し、「奥様も納得」するアプリを作っていただいた応募者向けの賞です。 締切は5月18日、まだまだ先です。どしどし応募してくださいね。3月22日には、関連セミナーも実施予定です。「え~組込み系は良くわからないんだよねぇ…」という開発者の方も、「え~クラウドとかスマホとかPCアプリとか、IT系は判らないんだよねぇ…」という方々どちらも、この機会にチャレンジです!!  

0

.NET Micro Framework + Windows Azure + Windows 7 + Windows Phoneでセンサークラウドプロトタイプ

最近、電力見える化や農業クラウドなど、センサークラウドが実用化の時期を迎えつつあります。タイトルに挙げたテクノロジーを使えば、センサークラウドのプロトタイプが廉価で手軽に実現できるのでは、ということで投稿してみました。想定としては、 このポストで説明した方法でプロトタイプを作成し実証実験 結果をもとに本格稼動に向けて、デバイスやサービス、アプリを構築 といった流れを考えています。 センサークラウドの基本構成要素は、 センサーデバイス+小型組込み機器   センサーノードとしてフィールドにばら撒かれる データ収集用ネットワークストレージ    ネットワーク上で稼動 データ分析・活用ネットワークサービス   ネットワーク上で稼動 システム管理者向けアプリ          PC等で稼動 ユーザー向けデータ活用アプリ       PC、タブレット、スマートフォンなどで稼動 になるかと思います。最初に挙げたセンサー機器で測定対象の各種データ(電力や温度、湿度、大気圧、照度、などなど)を収集し、2番目のストレージに格納、3番目のサービスで活用し、4番目でシステムを管理、5番目でユーザーが見たり指示したり、といった構成です。あい これらとタイトルに挙げた技術をそれぞれマップしていくと、 センサーデバイス+小型組込み機器 プロトタイプを作るなら、.NET Micro Frameworkデバイスが利用可能です。.NET Micro Frameworkが動く市販のデバイスは、GHI Electronics社のFezシリーズやNetduinoがあります。これらは、ボードだけなら4000円~1万円程度、接続可能なセンサーデバイスも多数売られている(数百円から数千円)ので、プロトタイプのレベルなら多額の投資がなくても利用可能です。アプリケーションはC#やVBを使って、.NET Framework系のネットワーク機能が豊富に揃ったライブラリを使えるので、デバイス上のプログラムも容易に作成できます。.NET Micro FrameworkはApache V2ライセンスで提供されるオープンソースなので、ライセンスフィーもいりません。 データ収集用ネットワークストレージ ネットワークストレージには、Windows Azureのストレージサービスや、SQL Azureが利用可能です。Webから申し込み手続きをしてすぐ使え、実験中だけ稼動し、終わったら、契約を終了可能です。実験環境としては最適でしょう。 データ分析・活用ネットワークサービス こちらは、Windows Azureが、データ分析・活用サービスのホスティングサイトとして利用可能です。こちらもSQL Azureと同様、使いたい時だけ使えるので、プロトタイプ向きといえるでしょう。また、Windows Azure上で作成したサービス向けクライアントアプリはWindows系アプリだけでなく、アンドロイドやiPhone向けのものが作成可能です。 システム管理者向けアプリ こちらは、Windows 7 PCが利用できます。Windows Azure上にRIAとして構築しても構いませんし、ネットワークサービスと連携するPC上で動くアプリを用意するのも良いでしょう。特に専用のPCを用意する必要もなく、通常のPCで十分です。もしゲートウェイや専用デバイスが必要であれば、Windows 7の組込み版OSであるWES7や、Windows Embedded Compact 7 デバイスが利用可能です。 ユーザー向けデータ活用アプリ こちらは、Windows 7 PC、Windows Phone 7を使って、RIAサービスや、それぞれのOS上で動くクライアントアプリを作るこことも出来ます。ブラウザ内で動くアプリだけでよいのではと思う方もいるかもしれませんが、画面の大きさや操作性、各デバイスが装備している機能との連携を考えると、今後はむしろネットワークサービスとして連携してデバイス二インストールされて動くアプリのほうが主流になるのではないかと私は予想してます。デバイス側もどんどん進化しますからね。 以上、ざっと紹介しました。上の組合せであれば、開発環境はVisual Studio 2010で全て開発可能ですし、同じ言語、同じ流儀のライブラリーを使える、つまり同一スキルセットでプロトタイプ作成が可能です。本格システムの場合は、認証や暗号化などセキュリティが必要になりますが、App Fabricを使えば、何とかなりそうです。 図にするとこんな感じ 以上、簡単ですが、今後も方々でこの話題は話したり、ブログ書いたりする予定なのでよろしくお願いします。ではまた…

0

Windows Phone 7.1 センサー利用時の注意

Windows Phone 7.1センサー利用時の注意点を幾つか挙げておきます。センサープログラミングに関しては、センサープログラミングの基礎を見てください。 その1) いつでもあると思わないでね Windows Phoneのハードウェア仕様を見ると、CompassとGyroは、オプションであると明記されています。製品によってはCompassとGyroscopeは使えない場合があるということです。この二つのセンサーが搭載されているかは、両方のクラスのスタティックプロパティのIsSupportedを参照すればわかります。このプロパティがfalseならば、残念ながらそのデバイスにはセンサーが搭載されていないことになります。アプリケーションを設計する時には、必要なセンサーが無い場合の対策を入れておきましょう。例えば、 搭載されていない場合は提供機能を縮小する 代替策がある場合は、別のセンサーやエミュレーションで機能ロジックを補完する 必要なセンサーが搭載されていないことを表示する Marketplaceのアプリ概要説明で、必要なセンサーを明記 などです。 if (!Compass.IsSupported){    MessageBox.Show(“王舞我”);    … その2) 必要な時だけ使う 繰り返しになりますが、センサーデバイスを使っているとそれなりに電池を食います。無駄にセンサーであたうぃを取得し続けると、他のいざという時電池切れ・・・なんてことになりかねないので、センサーが必要になるタイミングと必要なくなるタイミングをきちんと設計して、Start()、Stop()メソッドをコールしましょうね その3) その値、本当に正しい? 4つのセンサークラスには、IsDataValidというプロパティが用意されています。特にCurrentValueを使って同期的に値を取得する場合、この値がtrueの時だけ正しい値を取得可能です。センサーはセンサーデバイスなどハードウェア的な仕掛けを使うので、そのハードウェアの初期化やら何やらの手続きが必要でStartメソッドをコールしてから、実際に値が取得できるまで時間がかかる場合もあります。例えばMSC2011のD1-401でお見せしたARデモでは、Compassが直ぐには計測できなかったので、以下のようなコードを書きました。 var compass = new Compass();compass.Start();while (!compass.IsValid){    System.Threading.Thread.Sleep(100);  // この秒数が妥当かどうかは現時点では不明。無限ループの可能性があるので、何回かトライしたらExceptionを発生するなどの対策が必要} デバッガーでのステップ実行では人間がF10を押す間にIsValidがtrueになってしまうので、このコードを入れなくても、ちゃんと動いてしまいます。知らないとなかなか見つけられない問題なので、ステップ実行では動作するのにするっと動かすと正常に値が取れていないような場合は、IsValidを疑ってみましょう。 その4) その値、本当に正しい? Again 物理的事象を精密に計測する場合、精度と誤差を必ずきちんと考える必要があります。大雑把な動きや方向などをアプリに取り込む場合は問題ありませんが、ある程度正確な値が必要な場合は、例えば平均をとって慣らすなどの処理を入れましょう。(まぁもともとコンシューマーデバイスのセンサーなので、あまり厳密な計測には向かないかも…です)Compassには、Calibrateというイベントが用意されています。これはTrueHeadingの値が±20度以上違うとシステムが認識した時に発火するイベントです。ナビゲーションアプリケーションなど、ある程度正確な方位が必要なアプリを作る場合には、このイベントにもきちんと対応しましょう。キャリブレーションの方法はまた別途ポストしますね。 その5) なるべくMotionセンサーを使いましょ Motionセンサーはアプリケーションが利用しやすい形にセンサーデバイスの計測値を加工してくれるので、出来る限りMotionセンサーを使いましょう。 その6) 実行スレッド 非同期的に計測データを取得するには、CurrentValueChangedイベントにハンドラーを登録して、システムから通知を受けますが、ハンドラーをコールするスレッドは、アプリのメインスレッドとは異なるので、そのままSilverlightのコントロールを操作しようとするとExceptionが発生します。しばらくぶりにプログラミングすると、大抵忘れているので、Exception発生した時には思い出してください。 Deployment.Current.Dispatcher.BeginInvoke(()=>{    var accel = e.Accelaration; このブロックの中での処理は、メインスレッドのディスパッチャーキューに入って順番に実行されているので問題ないですが、コントロールアクセスがなく単にクラスのメンバー変数を更新する場合など処理を委譲せずにそのままハンドラーをコールしたスレッドで処理を行うような場合は、lockやMutexなどを活用してきちんとスレッド間の排他処理を入れましょう。   と、まぁ、こんなところでしょうか。 センサーとは、デバイスを取り巻く実世界の様々な事象を数値化して取り込んでくれるものです。その類のフィーチャーは、Accelerometer、Gyroscope、Compass、Motionの4クラス以外にも、位置情報やカメラ、マイク、FM電波の強度、電池の残りなど、他にも沢山あります。これまであまり活用されていなかったフィーチャーを使い倒して、魅力的なアプリケーションを是非、開発してくださいね。

0

XAMLで作る簡単メーターコントロール

いつも、センサー、センサー、云うてますやん。データ計測したら見たいですやん。…という事で、XAMLで作るメーターコントロールを紹介します。 見た目は、こんな感じ。タイトルは変更可能、数字をセットすると針が動くというものです。 XAMLはざっと     <Canvas>         <TextBlock Name=”tbTitle” Text=”Electric Power” FontSize=”20″  HorizontalAlignment=”Center” Height=”32″ Width=”200″ Canvas.Left=”20″ Canvas.Top=”0″ />         <TextBlock Name=”tbValue” Text=”1000000″ FontSize=”20″ Canvas.Top=”38″ Canvas.Left=”75″/>         <TextBlock Name=”tbUnit” Text=”Watt” FontSize=”20″ Canvas.Top=”128″ Canvas.Left=”96″/> <!– 5つのRectangleは、目盛 –>        <Rectangle Width=”20″ Height=”4″ >             <Rectangle.Fill>                 <SolidColorBrush Color=”Red”/>             </Rectangle.Fill>             <Rectangle.RenderTransform>                 <TranslateTransform X=”10″ Y=”178″/>             </Rectangle.RenderTransform>         </Rectangle>         <Rectangle Width=”20″ Height=”4″ >             <Rectangle.Fill>                 <SolidColorBrush Color=”Red”/>             </Rectangle.Fill>             <Rectangle.RenderTransform>                 <TransformGroup>                     <TranslateTransform X=”10″ Y=”178″/>                     <RotateTransform CenterX=”120″ CenterY=”180″ Angle=”45″/>                 </TransformGroup>             </Rectangle.RenderTransform>         </Rectangle>         <Rectangle Width=”20″ Height=”4″ >             <Rectangle.Fill>                 <SolidColorBrush Color=”Red”/>             </Rectangle.Fill>             <Rectangle.RenderTransform>                 <TransformGroup>                     <TranslateTransform X=”10″ Y=”178″/>                     <RotateTransform CenterX=”120″ CenterY=”180″ Angle=”90″/>                 </TransformGroup>             </Rectangle.RenderTransform>         </Rectangle>         <Rectangle Width=”20″ Height=”4″ >             <Rectangle.Fill>                 <SolidColorBrush Color=”Red”/>             </Rectangle.Fill>             <Rectangle.RenderTransform>                 <TransformGroup>                     <TranslateTransform X=”10″ Y=”178″/>                     <RotateTransform CenterX=”120″ CenterY=”180″ Angle=”135″/>                 </TransformGroup>             </Rectangle.RenderTransform>         </Rectangle>         <Rectangle Width=”20″ Height=”4″ >             <Rectangle.Fill>                 <SolidColorBrush Color=”Red”/>             </Rectangle.Fill>…

0

脳波で地球を廻せ、のソースコード公開

昨年、ビデオストリーミングや、HowToで概要を披露した、Neuroskyさんの脳波センサーを使ったデモ(集中すると地球がぐりぐり回るやつ)のソースコードを公開しました。 http://cid-e4da7a95eedb6b89.office.live.com/self.aspx/SampleCode/WpfAppBrainEarth.zip Windows API Code Packのバージョンは1.0(ご勘弁、時間が無く)です。 ZIPファイルを解凍して、WpfAppBrainEarthフォルダーに並ぶようにWindowsAPICodePack.V1.0フォルダー以下一式をコピーしてから、WpfAppBrainEarthのWpfAppBrainEarth.slnをVisual Studio 2010で開いてください。コードの解説は、 http://code.msdn.microsoft.com/CXAML-Brainwave-Sensor-WPF-0720da19 http://code.msdn.microsoft.com/CXAML-Brainwave-Sensor-WPF-75c97a2c を参照してください。 脳波センサーのセットアップは、 http://neurosky.jp/thinkgearsensor.html を参照してね。ではLet’s Turn The Earth!!  

0

ENEX2011出展

久しぶりのポストです。 昨日(2月8日)から、国際展示場で開催中のENEX2011に出展しています。出展内容は、昨年のTechDays2010のキーノートで披露した、ドライヤーの・・・もとい、使用電力量の見える化と、小型組込み機器(家電や制御機器のパネル、ネットワークセンサーなど)のクラウド連携です。 富士ソフト(株)、Digiインターナショナル(株)、(株)デバイスドライバーズ、日本マイクロソフト(株)の4社共同出展です。マイクロソフトの、Windows 7 Sensor & Location Platform、Windows Azure、Silverlight、Windows Comunication Foundation、.NET Micro Frameworkをプラットフォームとして、Digi インターナショナル(株)の、ZigBee無線でPCとつながる電源タップ、富士ソフト(株)のSensor & Location Platform対応デバイスドライバー、Windows Azure上のホスティングサービス&SilverlightのRIAによるテーブルタップで計測した電力を可視化するアプリケーションの展示です。基本構成は、昨年のTechDays2010と同じですが、5個のテーブルタップが同時計測可能になり、かつ、複数の地点で計測した値が表示されるようになるなど、格段にパワーアップしています。 また、(株)デバイスドライバーズが代理店の.NET Micro Framework対応小型デバイス、FezCobraによる、Azure連携の展示や、電池がないのにスイッチを押すと、FezCobraにスイッチのOnOff状況が表示されるという、ルフィーなら「あぁ不思議スイッチだな」って言いそうな展示も行っています。※このデバイスは普段は若松通商のアキバNET館に展示されています。 展示場には、このデバイスがネットにつながってRESTやSOAPで通信できたら、いろんな応用が即できそうだという凄い省エネ関連機器があふれています。IT系企業の皆さんも是非、会場に来て夢を膨らませてもらえればと思います。省エネやスマートエネルギー、スマートグリッドのテクノロジーは、まだまだ独自の閉じた製品が多いですね。昨日の講演でもお話しましたが、今後、ITシステムで標準に使われているRESTやSOAP、WebサービスといったテクノロジーでITシステムとの連携が図れる形にして様々な産業と連携が進むことを切に望みます。 展示は明日(2011/2/10)までです。興味のある方は是非会場までお越しください。

0

Windows 7 Sensor APIのCOM Wrapper

このポスト、書いて公開するのをすっかり忘れていることに、今気がつきました。既にNESLが出てしまったので、このままお蔵入りさせようかとも思ったのですが、考えてみたらガジェットでセンサーAPI使う時、これの類がないと駄目じゃん。ってことで、3ヶ月遅れぐらいで公開です。以下、当時のままポストします。 お疲れ様です。 結構前からTwitterでつぶやいたり、PDC TokyoやTech Fieldersセミナーのネタでちら見せしてきましたが、COM Wrapper作ってCodePlexに登録してあります。これ使うと、Windows 7 Sensor & Location Platformのセンサーのほうの機能が、SilverlightのOOBで使えたり、デスクトップガジェットで利用できたりするんですね。 http://sensor7dotnet.codeplex.com まぁ、久々のNative系プログラミングだったので、結構しんどかったですが、もしよければ開発に参加してくださいまっせ。 で、使い方ですが、ビルドして出来上がったやつ、SensorCOMW.exe、を引数 /RegServer 付けてコマンドラインでまずは実行してください。これで、このWrapperがレジストリに登録されますんで。そして、Silverlightのアプリケーション作って、以下のような感じで使う訳っす。 using System.Runtime.InteropServices.Automation;…    if (Application.Current.IsRunningOutOfBrowser){ // OOBで実行していることを確認        // センサーCOM Wrapperを取り出す。取り出したオブジェクトはSensorManagerに相当        dynamic sensorcom = AutomationFactory.CreateObject(“Sensr7COMW.DispSensorManager”);        dynamic sensors = sensorcom.GetAllSensors(); // すべてのセンサーを取得        dynamic aSensor = sensors.GetAt(0); // センサーの取出し        // TypeIdを指定して特定の種別のセンサーを取り出す。        dynamic lightSensor = sensorcom.GetSensorsByTypeId(“{97F115C8-599A-…”});  後は、コードを見てお試しください。 …てな感じで。ガジェットで使う方法は、また別途ポストしますね。

0

SONY VAIO P搭載のSensor & Location Platform対応センサー

今年(2010)に発売されたSONY VAIO P、実は、Windows 7 Sensor & Location Platformに対応した方位センサーを搭載しています。 コントロールパネルでセンサーデバイスを確認すると、 Windows API Code Packを使って、以下の様なプログラムを書いて、どんなセンサーが搭載されているか調べてみます。 using Microsoft.WindowsAPICodePack.Sensors; …     foreach (var s in SensorManager.GetAllSensors())     {         writer.WriteLine(“Sensor:TypeId={0}, FriendlyName={1}”, s.TypeId, s.FriendlyName);         writer.WriteLine(“Supported Properties:”);         foreach (var p in s.GetSupportedProperties())         {             writer.WriteLine(”    Property:FormatId={0}, PropertyId={1}”, p.FormatId, p.PropertyId);         }     } このプログラムを実行すると、VAIO-Pは、以下のセンサーを搭載していることがわかります。 Sensor:TypeId=76b5ce0d-1d77-414d-93a1-e127f40bdf6e, Magnetic Sensor Supported…

0

Sensorデータをデータベースに蓄積・活用する

7月3日のオープンソースセミナー2010@愛媛でお見せした、センサーデータをWindows 7 Sensor & Location Platform APIで取出し、ADO.NET Entity Data Modelで作成したSQL Serverのデータベースに格納・格納したデータをグラフや3Dモデルで見せるデモの、Entity Data Modelの部分について詳細を紹介します。 これまで、いろんな機会で紹介してきたセンサーデモですが、今までのものは、Sensor APIから取得した情報を元にWPFの各種コントロールを制御するものでした。センサーデータを取得する方法は全く同じです。http://msdn.microsoft.com/ja-jp/windows/ff432707.aspx で紹介しているように、Windows 7 API Code Packを通じて取得します。 デモアプリは、“LCASensorCloud”という名前でWPFアプリケーション(C#)を一つ作っておき、Windows 7 API CodepackのCore、Shell、Sensorsを参照として追加しておきます。 ※私の環境はVisual Studio 2010の英語版が入ってます。メニューやコマンドなど適宜日本語への読み替えをお願いします。 取得したデータを格納するデータベースが必要になる訳ですが、次の手順で作っていきます。 SQL Server Management Studioで、“LocationContextSensorDB”という名前のデータベースを新たに作成。 Visual Studio 2010で“LCASensorCloud”プロジェクトに、データのADO.NET Entity Data Modelテンプレートを使って、新規項目を追加する。名前は”LCADataModel.edmx”としておきましょう。 Entity Data Model Wizardで、”Empty Model”を選択し、”Finish”ボタンをクリック。 すると、空のEntity Data Model Designer(いかにもDSL Toolkitで作りましたといった感じ)が開きます。蓄積したいSensorのデータ、及び、関連データを蓄積するためのEntity Modelを作成します。ツールボックスのEntityを配置、Entity間のAssociationを定義していきます。デモでは、下図のようなEntity Modelを作成しています。定義の要領は、Shlaer-Mellor法のクラスモデルの作り方と同じ。(関連クラスがないぐらいか) 一応説明しておくと、 エンティティ 説明 Device センサーが装着されているPCや機器…

0

Release版 .NET Framework 4のSystem.Device.Loation

Techdays2010のセッションで、System.Device.Locationを説明するセッションを担当しました。あの当時は、Beta2で公開されていたものをベースに説明して、ブログでも書いていた気がします。そして、時は経ち、この間このライブラリーに関する仕事をしていたら、なんと、クラス構成から何から全然違うぢゃないですか。 ということで、再度最新の使い方を紹介します。 最新のクラス構成は、下図のようになっています。   これらのクラスは、System.Device.Locationという名前空間で提供されます。Visual Studio 2010で使う場合には、プロジェクトの参照に、System.Device.Locationアッセンブリーを追加してください。勘の良い方だと、なんとなく使い方が想像できるような名前のクラス群ですね。基本的な使い方は、GeoCodinationWatcherインスタンスを作成して、このインスタンスの位置情報変更通知イベントにハンドラーを追加して、位置情報が変わったら通知を受けるというものです。コードで書くと以下のようになります。 using System.Device.Location;… GeoCoodinateWatcher wather = new GeoCoodinateWatcher();watcher.PositionChanged +=    new EventHandler<GeoPositionChangedEventArgs        <GeoCoodinate>>(LocationChanged);watcher.Start();… void LocationChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e){    GeoCoordinate current = e.Poisitoin.Location;    double longitude = current.Longitude;    double latitude = current.Latitude;    DateTime changedTime = e.Poisition.Timestamp;    … GeoCoodinateWatcherクラスのプロパティを調べると、位置がどのくらい変わったら通知を受けるか等を指定するためのパラメータがあるのが判るでしょう。 また、位置情報はイベントハンドラーコール時に渡されるイベント引数の、Position.Locationに、GeoCoordinateクラスとして格納されています。上のサンプルコードに示すように、ここから緯度、経度、高度、位置情報変化時間を知ることができます。 更に、この位置情報をCivicAddressResolverインスタンスに喰わせると、論理レベルの住所情報が取得できるような構造になっています。 デフォルトでは、Microsoft Location Selectorが動いていないので、これらの機能は使えません。フル機能を使うには、コントロールパネル→位置センサーとその他のセンサー を開き、左下の“既定の位置”をクリックします。地域の項目に“Microsoft Location Selectorを起動してコンピュータの現在の位置を検出します。”という項目があり、これをクリックします。

0