21世紀の10%が終わる…

今は2009年の年末。ふと気づけば、21世紀の10%が終わろうとしてる。この10年間で印象に残っている個人的な出来事は、2002年のUMLロボコン(現ETロボコン)第一回大会でモデル部門の最優秀賞を取ったこと(Team Off Roaderは私でございます)と、2006年にマイクロソフトに転職したことかな。 組込みソフトウェア関連でこの10年間に起こったことで一番印象的なのが、ネットワーク(特にWebテクノロジー)の発展とインフラ化かな。昨今はやりのCloudもこの流れの一環でしょう。実は私は、20年前にすでにE-Mailやネットワーク共有、オブジェクト指向デスクトップが当たり前の会社で仕事をしていたので、90年代のPCやネットワーク技術の進歩は、後追い的なイメージを持ってたんだけど、2000年代に入ってやっと追い抜かれた感じで、今の技術の進歩は凄く面白い。  Tech Fieldersのコラムでも書いてるけど、組込み機器とネットワークの融合は今後どんどん進むと思う。それから、OSのプラットフォーム化。90年代後半では、自前で一から自社開発HW専用のOSやミドルウェアを開発するってのはまだまだ一般的だった気がするけど、今は一から専用OSやミドルウェア、基本部品を作るなんてコストが合わない時代になってきた。これからは組込み機器もPCが辿ったように、組込み向け汎用OSが当たり前のように使われていく時代になりそうだね。 半導体技術の進化もすごい。特にMEMS技術が進歩して、これを生かしてARや、新しいNatural UIが今、着々と実用化されてきている気がする。一方で、CPUの性能アップ、メモリサイズの巨大化、チップの低コスト化が進んだにもかかわらず、それ以上に要求は巨大化・複雑化してるので、組込み機器はHWリソース制約が厳しいから・・・という組込み機器特有の制約は相変わらず変わってない。これは組込みソフトウェアの宿命か。 他には、開発環境の進化やプログラミング言語の発展、モデル駆動型開発の実用化も着々と進んでいる。2000年代になってすぐぐらいに、「そのうちプログラミング言語はXMLベースになる」、「プログラミング、デバッグ、レビュー、検証とか目的に応じたViewが用意されるようになる」って周りに言っていた時期があって、実際そうなってきてるので感慨深い。GUIを定義するXAMLや、Osloなんかも出てきたし。Visual StudioのDSL Toolkitも、その流れ。この辺りは、やはりCPU性能やメモリ量アップと、プラットフォーム化の恩恵だね。 これから出てくるパラレル・コンカレントのランタイム拡張・プログラミング言語も凄く興味深いね。はじめは何故関数型?と思っていたんだけど、並行性を記述するにはデータフローが適していて、関数型はそれを自然に表せるとは・・・。昔私がやってたShlaer-Mellor法(現Executable UML)のアクション記述言語もデータフローをベースにしたモデリング言語で、あの時、関数型プログラミング言語との親和性に気づいていれば、私も新しいプログラミング言語を世に出せたなぁ、なんて。 以上、徒然なるままに書いてまいりましたが、この10年間、つらい時期もいっときありました。でも、非常にエキサイティングな10年間でした。何かと暗い話題も多い昨今ですが、また次の10年、エキサイティングであることを祈って、来年も、よろしくお願いします。次の10年はロボットがブレークしそうな気がする・・・ あ、そういえば、アメリカで今、2000年代を何て呼ぶか(80年代ならEighties(80’s)、90年代ならNinties(90’s)ってやつ)、なかなか決まらないらしい。サイボーグ009みたいに、Zero Zero Numbersなんてどうだろ…と、くだらないことを考えながら、年の瀬を迎える…。ん?そういえば、次の10年は何て呼ぶの?Teen’s?

0

Windows Mobile 6.5登場

Windows Mobile 6.5がリリースされました。私の持っているT-01A(Windows Mobile 6.1)を先週やっと6.5にアップしてみました。機種変更せずに携帯電話OSをバージョンアップ出来るなんて。 メールを選択すると関連するスレッドのメールがリスト表示されて結構便利かも。来年はWindows Mobile 6.5の次のメジャーアップデート版が出るので、かなり楽しみ。実は私は、Mobileの担当でもあったりするので、来年はWindows Phone関連のポストが増えます。 OSのアップデートは、いったんPCでアップデートファイルをダウンロードして、PC上でダウンロードしたファイルを実行し、Windows Mobile端末上でアップロードするファイル一式を作成し、それを端末に転送して実行する、手はずになっています。ちゃんと手順書を読んでやれば問題ないので、T01AユーザーはアップデートしてWindows Mobile 6.5をお試しあれ。 そういえば、Windows Mobile for Marketplaceの開発者向けキックバックキャンペーンももうすぐ終わってしまうので、まだ登録してない人は、早めに登録してくださいね。

0

Windows 7 Sensor & Location Platformを使ってみよう – その6

あーっと言う間に年末ですね。気温も随分下がって、寒い毎日が続いていますねっ。私はノースブルー生まれ(嘘です。単なる北国生まれです)のわりに、寒さに弱いので往生してますが、気温と言えば、小学校の夏休みの宿題で、課題研究というのがあって、ある年、何もネタが思い付かず、夏休み中の温度を2学期の始業式直前に新聞をひっくり返しつつ、片っぱしから書き出して、グラフと、お天気マークを入れていったことが思い出されます。あんときゃぁ、しんどかったぜぃ…って、もうかなり昔のことなので良くは覚えていないんですけどぅ。 前置きが長くなりましたが、Windows 7のSensor APIで温度を計測したとき、それをグラフにしたくなりますね。というわけで、今回は取得したデータを表示する方法として、WPFのChartコントロールを紹介します。 このコントロール、Visual Studio 2008 SP1(.NET Framework V3.5 SP1)までは、WPF Toolkitとして公開されていました。Visual Studio 2010(.NET Framework V4.0)からは、標準の部品として加わったようです。WPFのツールボックスに“Data Visualization”というカテゴリーがあって、そこに、Chartという名前でリストに入っています。XAMLのデザイナーで、ツールボックスからドラッグ&ドロップすればすぐ使えます。 このChartコントロール、棒グラフや折れ線グラフ、円グラフ、等々、かなりいろんなグラフの種類がサポートされていて、で、もちろん、Data Bindingも出来るし、凡例やラベルをStyleで指定できるので、見栄えの良いグラフを簡単に、そして、動的に描画することができる、優れモノです。多分、一般的に、データを収集、テキストファイルとして保存、Excelに読み込み、グラフ作成、・・・みたいな流れをやっちゃう人がたくさんいる?、もしくはOpenGL等を使ってゴリゴリ書くのが、理系の技術者の発想のような気がしますが、そんな手間は一切要りません。Silverlihgtでももちろん使えます。この忙しい年の瀬、やりたいことがパッとできるって、ありがたいよね。 上の図は、ツールボックスからドラッグ&ドロップして、そのあと、以下のように成形した状態。(Visual Studio 2010を利用) <Window x:Class=”…”        xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”        Title=”Graph” Height=”400″ Width=”600″        xmlns:chartingToolkit=            “clr-namespace:System.Windows.Controls.DataVisualization.Charting;            assembly=System.Windows.Controls.DataVisualization.Toolkit”>    <Window.Resources>        <Style x:Key=”DateTimeAxisLabelStyle1″            TargetType=”{x:Type chartingToolkit:DateTimeAxisLabel}”>            <Setter Property=”StringFormat”                 Value=”{}{0:yyyy/MM/dd HH:mm:ss}”/>            <Setter Property=”RenderTransform”>               ※ ここ何やってるかというとグラフの目盛の値が               ※ 表示の際重ならないように、位置ずらし、斜め化してる                <Setter.Value>                                      <TransformGroup>                        <ScaleTransform/>                        <SkewTransform/>                        <RotateTransform Angle=”315″/>                        <TranslateTransform Y=”70″/>                    </TransformGroup>               …

0

Windows Embedded Server

皆さん、Windows Embedded Serverという製品をご存知ですか? 今年新たにWindows Embedded 製品ファミリーに加わった製品群です。 http://www.microsoft.com/windowsembedded/ja-jp/products/server/default.mspx Windows Server 2003、2003 R2、2008、2008 R2を、工場の制御システムをはじめとする各種機器制御、ルーターその他、特定用途向けのライセンスです。使用形態が限定目的に限られますが、中身は通常と同じで、通常のライセンスより安く購入できます。この製品の最大の特徴は、サポート期間がその他のWindows Embedded製品群と同様に、15年間と長く設定されているところにあります。一度稼働したら長期間使用される特定用途向けとしてお使いください。専用システム用のWebサービス、ストレージのほか、仮想機能を利用したプライベートクラウド的な使い方もできます。 他にも、Windows 7のEmbeddedライセンスも販売開始しています。 http://www.microsoft.com/windowsembedded/ja-jp/products/weenterprise/default.mspx こちらも中身はデスクトップと全く同じで、デスクトップ上で開発したプログラムはすべて動作可能です。

0

「組込み機器+クラウド」コラム第二回目アップしました

第一回目のコラム「クラウドと組込み機器で拓く新しい世界」から、早半年、ようやく、第二回目を公開しました。 http://www.microsoft.com/japan/powerpro/TF/column/ho2_02_1.mspx 第一回目をお読みになった方、SWESTやET2009、その他様々な場所で、太田の講演を聞かれた方、ぜひ、ご一読ください。

0

Windows 7 Sensor & Location Platformを使ってみよう – その5

さて、5回目、さっそくいってみようっ 4回目までは、本質が見えにくくならないよう、Managedコードでの使い方を紹介してきました。(Sensor & Location Platformの概念や使い方はわかっていただけましたか?)しかし、やはり場合によっては、COMを使った、Nativeコード開発も必要です。ざっとVC++(Native)でプログラムを組む場合のコードを、まずは、紹介してしまいます。 センサーリストの取得: // SensorMangaerのCOMインターフェイス取り出しCComPtr<ISensorManager> pSensorManager; HRESULT hr = CoCreateInstance(  __uuidof(SensorManager),NULL,CLSCTX_INPROC_SERVER,  __uuidof(ISensorManager),(LPVOID*)&pSensorManager);// SensorCollectionインターフェイスの作成CComPtr<ISensorCollection> pSensorCollection;hr = pSensorCollection.CoCreateInstance(CLSID_SensorCollection);// センサーリスト(照度センサー)を取得hr = this->m_pSensorManager->GetSensorsByType(SENSOR_TYPE_AMBIENT_LIGHT, &pSensorCollection); まずは、こんな感じです。もちろん実際には、HRESULT型の戻り値はちゃんとチェックして(!SUCCEEDED(hr)って感じ)エラーの場合には処理が必要です。また、”Sensors.h”の#includeも必要になります。Managedのときと違って、長ったらしいですね。全てのコードを見せていくのは煩雑なので、以後、Windows API Code Packで使っているCOM Interopの紹介を通じて、読者の皆さんに使い方のあたりをつけてもらいます。 Code PackのSensorsプロジェクトのObjectModelフォルダーにある、SensorManager.csを見てください。この中で、SensorManagerクラスが定義されていて、GetAllSensorsやGetSensorsByCategory等のメソッドは、内部で、nativeISensorManagerというインスタンスを使っているのがわかります。このnativeISensorManagerをC#テキストエディタ上で選択し、右クリック→”定義へ移動”を選択すると、InteropフォルダーのISensorManager.csが開き、nativeISensorManagerに表示が変わります。そこには、 using System.Runtime.InteropService;…[ComImport, InterfaceType( ComInterfaceType.InterfaceIsIUnknown ), Guid( “BD77DB67-45A8-42DC-8D00-6DCF15F8377A” )]internal interface nativeISensorManager{….   [PreserveSig]    HRESULT GetSensorsByCategory(        [In, MarshalAs( UnmanagedType.LPStruct )] REFSENSOR_CATEGORY_ID sensorCategory,        [Out, MarshalAs( UnmanagedType.Interface )] out ISensorCollection ppSensorsFound ); という、定義がなされています。インターフェイスに付与されたComImportやPreserveSig、In,…

0

T-Kernel+.NET Micro Framework V4.0

株式会社コア様が、.NET Micro Framework V4.0のT-Kernel上へのポーティングを行っていただきました。ハードウェアはMP201(ARM926EJ‐S)、ベースOSは、T-Kernel SDK for ARM9で、その上で、.NET Micro Framework V4.0が動作します。前にポストしたように、.NET Micro FrameworkはV4.0から、コミュニティー開発に移行し、無償で製品でご利用いただけます。ソースコードも一部を除き開示されています。マルチタッチやカラー描画、HTTPやHTTPS、DPWSといったミドルウェアを使い、C#で容易にアプリケーションを作成できます。コア様のこの成果を、昨日五反田のユビキタスネットワーク研究所で行われたTronshow記者会見で、坂村教授からご紹介いただきました。私もお邪魔し、.NET Micro Frameworkの概要説明と、MS米国本社の.NET Micro FrameworkのプロジェクトマネージャーのColin Millerからのメッセージを紹介させていただきました。その後、コア様から、T-Kernel+.NET Micro Framework上のアプリケーションのデモを実演いただきました。デモは、タッチ&ジェスチャーによる、アプリアイコンのアニメーション動作、ダブルタッチによるアプリケーション起動・終了、ベクター描画、Windows Live FrameIt(http://frameit.live.com/)からのお天気表示です。 デモアプリは、私も一部開発に携わりましたが、Visual Studio 2008を使ってC#でアプリを組み、エミュレータを使ってロジックテストが出来、そのまま実機で動くので、非常に楽だ…と改めて感じました。今回のコア様が作成した、T-Kernel上のHALの部分は、他のT-Kernelへも容易に移植可能です。 明日(12/9)からはじまるTronshow(東京ミッドタウン)では、コア様と、マイクロソフトのブースが出ていますので、詳細を知りたい方は、ぜひ、お越しください。 余談ですが、今回利用したFrameIt(まだベータですが)は、結構凄いし、面白いです。Windows系のOS(XP/Vista/7、CE、Mobile、Automotive)であれば、すごく簡単に表示デバイスや、写真リモコンを開発することができます。

0

12月17日は札幌です

12月17日は、エンベデッドキャラバンが札幌で予定されています。http://www.microsoft.com/windowsembedded/ja-jp/news/events/embedded_kumikomi_Seminar.mspx#sapporo Windows 7 Sensor & Location Platformの紹介、使い方を説明の予定です。デモは、 パワーグローブで世界を掴め 脳波で地球を回せ 雲の向こうにデータを飛ばせ などなど、予定しております。すべてVisual Studio 2010での実演です。 是非、参加してくださいね。最後の懇親会もいます。では、北海道在住の皆さま、当日お会いしましょう。

0

Windows 7 Sensor & Location Platformを使ってみよう!! – その4

さて、今回は、Visual Studio 2010 Beta 2に入った、ロケーション系のManagedライブラリを紹介してみましょう。 まず準備として、Visual Studio 2010 Beta 2をインストールします。インストールは、http://www.microsoft.com/japan/visualstudio/products/2010/default.mspxから。 そして、ロケーション情報を取得するための、GPSやサービスが必要です。私のWin 7 PCのコントロールパネルの”ハードウェアとサウンド”→”位置センサーとその他のセンサー”を開くと、OrionやLegacy GPS Driver、Skyhook Wiress XPS Location Sensorなどが入っています。皆さんの環境がどうなっているか分からないので、とりあえず、Bingで調べてみたら、http://www.u-blox.com/ja/usb-drivers/windows-7-driver.htmlがあったので、紹介しておきますね。私は、Legacy GPS Driver(アメリカでMSが販売しているStreet & Trip付属のGPS)を使いました。 まず、Visual Studio 2010でWPFアプリケーションプロジェクトを作成します。次にプロジェクトに参照を追加します。追加するのは、System.Device.dllです。.NET V4のアッセンブリーの一覧に出てきます。 プログラムの先頭に using System.Device;  を追加し、MainWindows.xamlにボタンを一個追加し、XAML Editorでボタンをダブルクリックしてハンドラーを用意します。そこに、 GeoLocationProvider provider = new GeoLocationProvider();provider.Start();GeoLocation location = provider.Location;……provider.Stop(); と書き、F5デバッグ実行し、ボタンをクリックしてみましょう。GeoLocationには、以下のプロパティが用意されています。 Address Coordinate Heading Speed Timestamp Addressは、住所や郵便番号など論理的な位置情報です。(私の環境では取得できなかった)Coordinateは緯度、経度、高度が得られます。(こっちは取得できた)Headingはちょっとわからないな。Speedは移動距離、Timestampは、位置情報を取得した時間を参照できます。これらの値は、Windows 7 SDKのsensors.hで定義されているLocationセンサーのプロパティとして定義されているものがそのまま取得できるようになっているようです。詳しいことは、すでにMSDNのライブラリhttp://msdn.microsoft.com/en-us/library/system.device.location(VS.100).aspxに書かれているので(ベータレベルなのでちょっと情報不足?)、見てみてね。 先ほどのコードは、同期参照のコードでしたね。位置情報が変わったときに通知されるアプリを書きたい場合は、GeoLocationProviderのLocationChangedにイベントハンドラを登録すれば、非同期参照が可能です。まだ確認はしていませんが、LocationChangedに登録したイベントハンドラには、GeoLocationChangedEventArgs型の変数が送られてきます。この変数には、先ほど紹介したGeoLocation型のプロパティLocationを持っているので、これを使えば、位置情報が参照できます。 このライブラリのメリットは、位置情報取得の役割が抽象化され、位置情報を供給しているのがGPSセンサーだろうが、無線LANのルータだろうがなんだろうが関係なく、位置情報を取得できる点にあります。COMレベルのSensor & Location Platform APIの単なるラッパーとして定義しなかったところにセンスの良さを感じますね。まぁ、といっても、COMを使う機会があると思うので、次回は、Windows API…

0

Windows 7 Sensor & Location Platformを使ってみよう!! – その3

三回目は、いよいよ、センサーデータの取り出し方を説明します。センサーの取得方法は、その2を見てくださいね。 Sensor & Location PlatformのAPIには、センサーデータの取り出し方が二種類用意されています。一つ目は、”見たい時に見る”方法(同期参照)、二つ目は、”データが変化したときに通知を受ける”(非同期参照)です。センサーデバイスやデバイスドライバによっては、同期参照しかできないものもありますが、アプリケーションシナリオで、センサーの値が必要な時だけ見ればよい場合には、同期参照を、ほぼリアルタイムにセンサーの値を見ながら制御をしたい場合には、非同期参照を使います。 では、まず、同期参照から。同期参照の場合は、以下のようなコードで記述します。 Sensor sensor = …;sensor.TryUpdate();SensorReport report = sensor.DataReport;DateTime updatedTime = report.TimeStamp;foreach (var propertyKey in report.Values.Keys){    Guid propertyId = propertyKey;    foreach(var propertyValue in report.Values[propertyKey])    {        // propertyValueが同一propertyIdに属する一連のプロパティの値    }}  コードの中で、”一連のプロパティの値”と書いていますが、Windows 7 SDKのsensors.hを覗いてみると、たとえば、3軸加速度センサーの値は、 となっていて、Guidで示されるプロパティ値に、X方向、Y方向、Z方向が、それぞれ2,3,4で定義されているのがわかります。上のコードで3軸加速度センサーの値を取得すると、順にX方向、Y方向、Z方向を取得できます。上のコードは、色々な種類のセンサーを扱うような場合に、有用なコードですが、特定のセンサーしか使わないアプリケーションの場合は、 PropertyKey propertyKey =    new PropertyKey(        “{3F8A69A2-07C5-4E48-A965-CD797AAB56D5}”,        2);var accel3DX = sensor.GetProperty(propertyKey); といったように、プロパティのGuidと、フォーマットIDを指定して、GetPropertyメソッドで取得できます。 次に、非同期参照を紹介します。この方法は、センサー値が変化したときに呼びだしてもらうイベントハンドラをセンサーに登録しておき、イベントハンドラが呼ばれたら、センサー値を取り出します。 sensor.DataReportChanged +=    new DataReportChangedEventHandler(        sensor_DataReportChanged);….void sensor_DataReportChanged(Sensor sender, EventArgs e){    SensorReport…

0