Windows 8.1でLEGO MINDSTOMRS NXTを制御するサンプルコード

もうちょっと形を整えてから…と思ったのですが、時間がたってしまったので、暫定的な形になってしまいますが、LEGO MINDSTORMS NXTをWindowsストアアプリで制御するための、ライブラリ、アプリテンプレートをサンプルとして公開します。 ファイル一式は、 http://eg-sample-filedowload.azurewebsites.net/FileDownload/GetFile?id=NXTControl からダウンロードしてください。基本、http://nxtnet.codeplex.com で公開されている.NET FRAMEWORK版のライブラリをWindows Runtimeに移植したものです。将来的には、ちゃんと、オープンソース的な体裁を整えてどこかできちんと公開しますので、暫定的に使ってください。 ダウンロードしたZIPファイルには、 NxtWinRTSolution.zip LegoNXTSDK.zip LegoNXTSDK.vsix BrickControlApps.zip README.txt の5個のファイルが格納されています。※README.txtは必ず読んでくださいね。 最初のNxtWinRTSolution.zipには、以下の3つのプロジェクトが格納されています。 NxtWinRT       NXT.NETのWinRT対応 - ライブラリ形式 NxtWRTC       NXT.NETのWinRT対応 - コンポーネント形式 StoreAppsWRTCTest  サンプルコード NXTとBluetooth Serial通信の処理の具体的な中身が知りたい方は、こちらを参照してください。基本的な使い方は、StoreAppsWRTCTestのMainPage.xaml.cs を見てみてください。 次に、2番目のLegoNXTSDK.zipですが、この中には、3番目のLegoNXTSDK.vsixを作るためのプロジェクトです。LegoNXTSDK.vsixをダブルクリックして実行すると、NxtWinRTSolutionのNxtWRTCで作成された、コンポーネント形式のライブラリが、Visual Studioに組み込まれます。4番目のBrickControlApps.zipは、このLegoNXTSDK.vsixをVisual Studioに組み込んだ状態で、NXTと連携するストアアプリを開発するためのテンプレートです。ドキュメントフォルダーの下のVisual Studio 2013の、 Templates¥ProjectTemplates¥Visual C# の下にそのままZIP形式でコピーして、Visual Studio 2013を起動してください。新規プロジェクト作成で、Visual C#カテゴリの下に、Lego NXT Appsというプロジェクトテンプレートが現れます。これを選択すれば、コンポーネント形式のNxtWRTC(LegoNXTSDK.vsix)を組み込んだ形のストアアプリが出来上がります。 作成したアプリが上手くビルドできない場合は、プロジェクトへの参照追加で、NxtWinRTSolutionのNxtWRTCプロジェクトを追加してください。それでビルドは通るはずです。 ちなみに、このライブラリを使ったストアアプリは既に、 http://apps.microsoft.com/windows/app/brick-drive/87a0f77d-bebf-4a39-b9e4-169111c9b72c http://apps.microsoft.com/windows/app/brick-piano/6cd96ca7-cf25-4ad4-b363-b6d2584b01a7 の二つが公開されています。 ※あくまでもサンプル公開ですので、自己責任でお使いください。  

0

Philips hueをWindows ストアアプリから制御する

de:code 14等で紹介した、Philips hueをコントロールするストアアプリのサンプルを公開します。 http://eg-sample-filedowload.azurewebsites.net/FileDownload/GetFile?id=RemoteLightControlTemplate ストアアプリのプロジェクトテンプレート形式で公開しているので、ダウンロードしたZIPファイルを、各自のVisual Studio 2013フォルダー(Projectsフォルダーのあるところ)の Templates\ProjectTemplates\Visual C# というフォルダーにコピーして、Visual Studio 2013を起動し、新規プロジェクト作成で、 Remote Light Control Appを選んでプロジェクトを作成してください。UI部分を作りかえれば、ほぼ、ストアに申請可能な形式です。この中に、UDP Multicast Group通信によるUPNPのSSDPプロトコルや、hueを見つけるコード、REST APIアクセスなどすべてあるので、是非、参考にしてくださいね。 ※あくまでもサンプルコードです。利用は各自の責任において行ってください。利用したことにより発生するいかなる責任も負いませんのでご承知おきください。    

0

Windows ストアアプリでUPnPデバイスを発見する

UPnP(Universal Plug and Play)対応のデバイスをWindows ストアプリで発見する方法を紹介します。UPnPアプリを発見するプロトコルであるSSDPを使ってデバイスの定義を取得する方法です。DLNA対応機器や、Philips Hueなど、この解説を使ってアドレスを取得することができます。 SSDPは、UDPのMulticast Group通信を使っており、ストアアプリでは、DatagramSocketを使用します。 DatagramSocket ssdpSocket = new DatagramSocket(); と、データグラムソケットを一つ作成します。そして、データグラムソケットに、UPnPデバイスからの応答を受け取るためのハンドラ―を登録します。 ssdpSocket.MessageReceived += ssdpSocket_MessageReceived; SSDPは、239.255.255.250、1900というグループアドレス、グループポートを使います。この情報を使ってマルチキャストグループにジョインします。     var ssdpGroup = new HostName(“239.255.255.250”);    string ssdpGroupPort = “1900”;    await ssdpSocket.BindEndpointAsync(null, “”);    ssdpSocket.JoinMulticastGroup(); そして、SSDPの規約に従った、デバイス発見の為の送信メッセージを組立て送信します。     string discoverPacket = “M-SEARCH * HTTP/1.1\r\n”;    discoverPacket += “HOST: ” + ssdpGroup .DisplayName +”:” + ssdpGroupPort + “\r\n”;    discoverPacket += “ST: upnp:rootdevice\r\n”;    discoverPacket += “MAN: \”ssdp:discover\”\r\n”;    discoverPacket…

0

日本以外は英語で日本は日本語で表示するWindowsストアアプリの作り方まとめ

ワールドワイド向けにストアアプリを公開したい場合、英語でUIを構成すれば十分です。しかし、日本向けには日本語で表示されるアプリにしたい…そんな方は多いと思います。多国語化対応に関する記事や解説は多く出ていて、ネット上で探せば対応できるのですが、いちいち探すのは面倒なので、この投稿で、ハブアプリプロジェクトテンプレートをベースに開発する場合について、英語と日本語を適切に切り替える方法をまとめて解説しておきます。 やりたいことは、 OSのロケールがja-jpの時→アプリ実行時の全てのテキスト表示を日本語化し、アプリ名表示も日本語表示 OSのロケールがja-jp以外の時→アプリ実行時の全てのテキスト表示を英語化し、アプリ名表示も英語表示 です。ハブアプリテンプレート作成時、プロジェクトの構成は、 こんな感じです。先ずは、日本語で全てアプリを開発してしまいましょう。DataModelフォルダーのSampleData.jsonに日本語を記載する場合は、保存オプションの詳細設定で、”Unicode(UTF-8 シグネチャ付き – コードページ 650001”を指定して保存しなおしてください。 一通りこれを英語化していきます。 その1)SampleData.jsonの二カ国語化 このファイルに記載されている内容はアプリのグループやアイテムの情報として表示されるわけです。これが日本語だったり英語だったりすれば切り替わらないですね。このファイルの中に日本語英語を両方詰め込むやり方も考えられるのですが、インテリセンスも効かないし、間違えやすいので、ダブルファイルによる解決を採用しますこのプロジェクトをファイルエクスプローラーで開いて、DataModelフォルダーのSampleData.jsonをSampleData-jp.jsonという名前でコピーします。コピーしたファイルを、ソリューションエクスプローラー上で、DataModelフォルダーを右クリック→追加→既存の項目を選択し、プロジェクトに追加します。このファイルのプロパティのビルドアクションを”コンテンツ”に変更することを忘れずに。で、元のSampleData.jsonの記述を英語化します。DataModelフォルダーのSampleDataModel.csのSampleData.jsonを読み込んでいるコード(SampleDataSourceのGetSampleDataAsyncメソッド)を、以下の様に修正します。             string fileName = “SampleData.json”;            if (Windows.Globalization.ApplicationLanguages.Languages.Count>0)            {                if (Windows.Globalization.ApplicationLanguages.Languages[0] == “ja”)                {                    fileName = “SampleData-jp.json”;                }            }            Uri dataUri = new Uri(“ms-appx:///DataModel/” + fileName);            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);            string jsonText = await FileIO.ReadTextAsync(file, Windows.Storage.Streams.UnicodeEncoding.Utf8);            JsonObject jsonObject = JsonObject.Parse(jsonText);  これで、OSのロケールに合わせて日本語の場合には、SampleData-jp.jsonを、日本語以外の場合には、SampleData.jsonを読み込むことになります。 その2)UI固定部分の表示の二カ国語化…

0

Internet Of Things ハンズオン公開

昨年(2013年)のMSC、ET2013で展示、デモした2つのシステム(http://blogs.msdn.com/b/hirosho/archive/2014/01/07/overviewmsc2013demosmicrodevicewithcloud.aspx  )、これをもっと簡略化したハンズオン資料を作成したので、ここで公開しておきます。 .NET MF+Windows Azure+Windows Store App+αの連携システムを一気通貫で実践できるハンズオンです。是非お試しください。 先ず、SignalRを使ったセンサー計測値リアルタイム通信連携システムに関するハンズオンです。 http://sdrv.ms/1kMGMK4 ※このハンズオン実施中に、ASP.NETのプロジェクト実行でエラーが出たら、http://rionscode.wordpress.com/2014/02/13/when-mvc5-signalr-and-nuget-just-wont-get-along/  を参考にしてMicrosoft.Owin、Microsoft.Owin.Securityを更新してください。 次に、Windows Azure Mobile Service を使った環境センサー蓄積・共有システムに関するハンズオンです。 http://sdrv.ms/1dYjqJb 今後、Visual StudioのTFSを使ったプロジェクトマネージメントも含んだハンズオンも作ろうかな…なんて思ってます。 是非、トライしてみてください。 ボードは、http://tinyclr.jp から購入可能です      

0

Plug and Playデバイスの扱い

このブログでは、USB(WinUSB/HID)やBluetooth LE/SerialPortでPCに接続する周辺機器をWindows 8.1 ストアアプリから制御する方法を幾つか解説してきました。これらの周辺機器は、PC実行中に抜き差しが可能ないわゆる、”Plug & Play”デバイスです。ということは、ストアアプリ起動時に周辺機器がPCに接続されていなかったり、アプリ実行中に周辺機器がPCから切断されたりする可能性があるわけです。 これまでの投稿で説明してきた、DeviceInformationクラスのFindAllAsyncメソッドは、つながっていない周辺機器は検索できず、また、実行中に切断された場合は、制御用の通信を止めたり通信用のソケットを閉じたりしないといけないので、動的な抜き差しに対応したプログラムを書く必要があるわけです。動的な管理は、DeviceWatcherクラスを使います。このクラスのオブジェクトは、DeviceInformationクラスのCreateWatcherメソッドを使って作成します。作成したDeviceWatcherオブジェクトのデバイス状態変化を通知するイベントにメソッドを登録し、デバイスの追加・削除を監視します。ストアアプリがバックグラウンドになった時、監視を止める必要があるので、クラスメンバー変数として、DeviceWatcherのオブジェクトを宣言します。 DeviceWatcher deviceWatcher; 周辺機器の監視を開始したいコードで、以下を実行します。Bluetooth SerialPortを例にして説明します。他の種類の周辺機器も処理の流れは一緒で、CreateWatcherの引数を周辺機器の種別に合わせて変更すれば対応可能です。     if (deviceWatcher == null)    {        deviceWatcher = DeviceInformation.CreateWatcher(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));        deviceWatcher.Added += deviceWatcher_Added;        deviceWatcher.Removed += deviceWatcher_Removed;        deviceWatcher.Updated += deviceWatcher_Updated;        deviceWatcher.EnumerationCompleted += deviceWatcher_EnumerationCompleted;    }    deviceWatcher.Start(); これで、PNPデバイスがシステムに追加されると、deviceWatcher_Addedがコールされ、削除されると、deviceWatcher_Removedがコールされます。このコードが実行された時点でシステムに複数PNPデバイスがシステムに追加されていると、順次deviceWatcher_Addedがコールされ、全てを列挙し終わった時点で、deviceWatcher_EnumarationCompletedがコールされます。ストアアプリで制御したいPNPデバイスが決まっているなら、deviceWatcher_Addedメソッドでお目当てのデバイスがシステムに追加された時点で処理を開始すればよいし、複数の中から選ばせたい場合は、Start()メソッドコールとともにProgressRing等の表示を開始し、Addedであらかじめ用意したリストに順次追加して、EnumerationCompletedのタイミングでProgressRingの表示を止め、選択をユーザーにお願いする、といった作りが可能です。deviceWatcher_Addedメソッドは、引数として、DeviceWatcherと追加されたデバイスのDeviceInformationオブジェクトが渡されます。FindAllAsyncメソッドで列挙した場合と同じ方法で、DeviceInromationオブジェクトから、周辺機器と接続するための処理が行えます。 お目当てのデバイスが見つかった、あるいは、アプリがバックグラウンドに回るタイミングで、デバイスの監視を止めます。     deviceWatcher.Stop(); これで監視は止まりますが、アプリの中で監視を止めるロジックが複数あるようなプログラムの場合は、deviceWatcherのStatusプロパティをチェックして、Stopped、あるいは、Stopping以外の時だけStopメソッドをコールすると良いでしょう。 さて、以上の記述で、「システムに追加される」といった微妙な表現を使ったことにあれ?と思った読者もいらっしゃるでしょう。そうです。例えば、設定チャーム→PC設定の変更→PCとデバイス→Bluetoothでペアリングしたり、USBで機器を接続した時点で、インターフェイスに関する情報はシステムに追加されてしまいます。実は、DeviceWatcherクラスが監視できるのは、システムへのデバイス情報追加・削除・変更でしかありません。削除について言えば、PC設定の変更でBluetoothデバイスを削除したり、デバイスマネージャーでUSB機器を削除しない限りはRemovedメソッドはコールされないし、一度システムに追加されたデバイスは、PCに接続されていなくても、FindAllAsyncメソッド、DeviceWatcherクラスともに情報を取得できてしまいます。 これだと、まだPNPデバイスが一度もPCに接続されていない状態でストアアプリを起動したときにお目当てのデバイスをつなぐよう促す場合を除いて、実際にPNPデバイスがPCに接続状態なのか非接続状態なのか判断できません。 PNPデバイスの実際の接続状況を調べるには、PnpObject、PnpObjectWatcherを使います。先ずは、クラスのメンバー変数として、PnPObjectWatcherを宣言しておきます。 PnpObjectWatcher pnpWatcher; そして、     var props = new List<string>() { “System.Devices.Connected”, “System.ItemNameDisplay” };    pnpWatcher = PnpObject.CreateWatcher(PnpObjectType.DeviceContainer,…

0

Bluetooth SMART デバイス(LE GATT Profile)と連携するWindows Store Appsの開発

最近、Bluetooth SMARTというロゴのついた健康器具や時計など、ガジェットが増えてきました。家電量販店に行ったらパッケージをガン見していくと、結構おいてあります。そして、残念ながら、AndroidやiOS対応と書かれているもの多数で、Windowsストアアプリ対応のものが少ないのが現実。うん、でも、欲しければ作ってストアから公開してしまえばよいのです。それがソフトウェア開発者の生きる道(なんてね) Bluetooth SMARTのロゴがついているデバイスは、Bluetooth Low Energy GATT(Generic Attribute) Profileという、標準規格に則ってインターフェイスが規定されています。 http://blogs.msdn.com/b/hirosho/archive/2013/10/04/whatkindofdevicestobeabletoconnecttowindows81storeapps.aspx で紹介したように、これ、Windows 8.1で追加された新しいAPIでアクセス可能です。基本は上のURLのページを見て勉強してください。Bluetooth SMARTのインターフェイス群は、 https://developer.bluetooth.org/gatt/Pages/default.aspx で公開されています。一つのデバイスは、複数のServiceを提供し、Serviceには複数のCharacteristicsが含まれ、Characteristicsは、Descriptorを含む場合があります。これらすべて、Bluetooth Orgのページにデータの取得方法について記載があります。 標準化されているプロファイル膨大です。売られているガジェットにはどんなServiceをサポートしているか公開されているものはほとんどありません。連携するStoreアプリを開発するには、先ず、各ガジェットがサポートするService群を調べる必要があります。 サポートしているServiceを調べるために、ストアアプリを作って公開してみました。 http://apps.microsoft.com/windows/app/eg-bluetooth-smart-gatt-profile/87207696-068a-410c-bfdd-a96f44d43b3f 調べたいガジェットを先ず、設定チャーム→PC設定の変更→PCとデバイス→Bluetooth でペアリングしてください。Bluetooth SMARTデバイスは大抵の場合ボタン電池で動いていて、PCに近づければデバイスのリストに表示されるはずです。 ペアリング後、このアプリを起動してください。リストにBluetooth SMARTデバイス群が表示されます。調べたいデバイスをタップすると、そのデバイスがサポートしているServiceがリストの右側に表示されます。Serviceの項目をタップすると、そのServiceが含んでいるCharacteristicsのリストが表示されるページに移動します。更にDescriptorのリストが表示され、詳細を調べていくことが可能です。 点線で囲んだ部分をタップすると、Bluetooth ORGの仕様詳細ページに飛びます。 Service、Characteristics、Descriptorで、水色のWinRT API Supportedアイコンが表示されている項目は、Windows.Devices.Bluetooth.GenericAttributeProfile名前空間の、GattServiceUuids、GattCharacteristicUuids、GattDescriptorUuidsで、あらかじめWinRT APIの列挙子として定義されているものであることを示しています。 ストアアプリ内でのデバイス発見は、     var deviceWatcher = DeviceInformation.CreateWatcher(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.BloodPressure));    deviceWatcher.Added += deviceWatcher_Added; こんな感じで、WinRT APIで定義された列挙子定義を使って取り扱いが可能なものです。 一方、 という、アイコンの項目のものは、WinRTには定義がありません。でも問題Nothing。私が公開したアプリで表示される各項目のUuid、これを直接指定してガジェットと接続することができるんです。例えば、     var deviceWatcher = DeviceInformation.CreateWatcher(GattDeviceService.GetDeviceSelectorFromUuid(Guid.Parse(“{00001816-0000-1000-8000-00805f9b34fb}”))); こんな形で、Uuidの値を直書きすれば接続できます。ちなみにこの値は、CYCLING_SPEED_AND_CADENCE です。GattDeviceService、GattCharacteristicクラスのメソッドにそれぞれ、Uuidを指定して含んでいる定義の取り出しが用意されていますが、それらも、全て同じ感じでアクセス可能です。Uuidは、アプリが表示するUuidを使ってください。で、具体的にどんなデータ構造、とか、呼び出し形式とかは、Bluetooth Orgの標準仕様の説明を見てくださいね。 サンプルは、http://code.msdn.microsoft.com/Bluetooth-Generic-5a99ef95 を参考にすると良いでしょう。 はい、では、連携アプリどんどん作ってくださいね。 あ、ストアアプリ+デバイス連携については、Facebookのグループページもあるので、興味のある方ご参加ください。ストアで公開されたアプリの自慢もOK。…

0

Windows Store アプリでUDP Multicast Group通信

このブログでは、過去に、.NET Micro Frameworkや、Windows Phone 7、デスクトップアプリによるUDP Multicast Group通信について解説しました。 そろそろ、Echonet-LiteとかにもWindows Storeアプリつなぎたいし、.NET Micro Frameworkや、他のPlatformのスマホアプリとも連携したいな…ってことで、Windows Storeアプリで、UDP Multicast Group通信をする方法を解説します。 UDP Multicast Group通信って何?って方、同じローカルネットにつながっている端末同士で、UDP/IPを使って同報通信する為のプロトコルです。インターネット上のサービスにアクセスする場合に指定するURLなど必要なく、あらかじめ知っているグループアドレス(224.0.0.0 ~ 239.255.255.255)とグループポート番号に対して、仲間入りすれば、そのグループアドレス、ポート番号にデータを送るだけで、仲間入りしているデバイスがデータを受信できるという、単に情報を発信してあとは受信したデバイスの自由的な通信ができます。WS-DiscoveryのようなAd-Hocに端末やサービスを見つけ出すプロトコルなどでも利用されています。イメージとしては、何かのパーティで、部屋のWi-Fiに、タブレットと複数のスマートフォンやタブレットをつないで、ビンゴゲームをするとか、複数名が自分の端末で自分の手札と山だけを見ながらカードゲームをし、傍からそのゲームの進行状況を見てる、なんていうアプリが作れるわけです。 早速本題に入ります。 Windows Storeアプリでは、WinRT APIのDatagramSocketを使ってUDP Multicast Group通信を行います。先ずは、Multicast GroupにJoinするところまでのコードです。 先ずは、クラスのメンバー変数として以下を定義しておきます。 DatagramSocket udpMCSocket;DataWriter udpMCDataWriter;string groupAddress = “2xx.xxx.xxx.xxx”;int groupPort = 50000;string joinigMessage = “Hello Joined”; 次に、グループにJoinするコードです。     var groupIp = new HostName(groupAddress);    udpMCSocket = new DatagramSocket();    try    {        udpMCSocket.MessageReceived += udpMCSocket_MessageReceived;           …

0

Windows 8.1 ストアアプリで、USBで接続されたWebカメラやマイクと連携する

USBで接続したWebカメラから画像を取り込みたい場合もありますよね。最近のNote PCやタブレットではカメラがほぼデフォルトでついていますが、デスクトップやちょっと前のNote PCだとついていないので、WebカメラをUSBでつなぐシーンはよくある事と思います。 最近、BluetoothやUSBで接続する機器との連携方法を解説していますが、プログラムの流れはほぼ同じで、Visual(カメラ)デバイスやAudio(マイク)デバイスを列挙して接続、MediaElementやCaptureElementで利用、という流れになります。 先ず、デバイスの列挙ですが、     var devInfoCollection = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);    DeviceInformation cameraDI=null;    foreach (var devInfo in devInfoCollection)    {        if (devInfo.Name == “Camera Device Name”)        {            cameraDI = devInfo;            break;        }    } Windows.Devices.Enumelation名前空間のDeviceClassの列挙子を使って、FindAllAsync()で列挙します。DeviceClassにはAudioなど幾つか種類が用意されているので、列挙したいものを指定してください。Camera Device Nameは、つないでいるWebカメラの名前です。コントロールパネルのデバイスマネージャーで確認しましょう。実はこのデバイスの列挙で、Note PCやタブレットに装備されているカメラも取り出すことができます。XAMLでUIを定義していて、任意の場所に画像を取り込みたい場合にもこの記事は活用可能です。 Webカメラからの画像は、MediaCaptureクラスを使って取り出し、CaptureElementクラスを使ってUI上に表示します。     var mediaCapture = new Windows.Media.Capture.MediaCapture();    var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();    settings.VideoDeviceId = cameraDI.Id;     devInfoCollection = await DeviceInformation.FindAllAsync(DeviceClass.AudioCapture);    var…

0

11/11のWin8.1+周辺機器連携ミニハッカソン紹介

周辺機器を操るスマートフォンやタブレットのアプリを創っている皆さん、こんにちは。 11月11日にWindows 8.1 ストアアプリ+周辺機器連携のミニハッカソンを開催します。お申し込みは https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032568380&Culture=ja-JP&community=0 から。 当日は、実際にデバイスと連携するアプリの動作確認ができるよう、各社様のご協力により、いくつかガジェットを用意してます。当日使えるガジェットは、 (株)アフレル様より Lego Mindstorms EV3 Bluetooth 2.0 SPPでシリアル通信可能です。 次は、ELECOM様提供のUC-SGT RS232Cケーブルで接続する周辺機器と連携可能です。このケーブルを使いたい方は、RS232Cで接続できるガジェットとヌルモデムケーブルを持参してください。会場では、.NET Gadgeteer RS232接続式を1セット用意しています。 次は、カシオ様のG-SHOCK   Bluetooth LE GATTプロファイルで制御可能。 他にも、会場では幾つかWindows 8.1ストアアプリと連携するガジェットの展示を予定しているのでお楽しみに。イベント参加登録ページに記載されている要件を満たす周辺機器を持参していただいても構いません。 セミナーの名前がコミュニティーフレーバーではありますが、真面目なセミナーです(コミュニティー系のイベントも勿論真面目なものがほとんどですが)ので、自社製品・ガジェットと連携するWindows 8.1ストアアプリ開発の技術スキルを身に着けたいという仕事系の皆さんも大歓迎です。当日はその道のプロ?が会場に揃っているので、Q&Aなどしてみてください。 このイベントで、ストアアプリを創ってストア公開まで行くと、良いことあるかも。それは当日のお楽しみということで、では、参加お待ちしております!!      

0