読者です 読者をやめる 読者になる 読者になる

熊小屋日誌

Windows 10 UWPやXamarin, Python、mbed/NetMF/Arduino/Edison, Azureなどぼちぼちと。たまにPCや勉強会、セミナーなどの話題も

Xamarin.Forms入門中~IntelliSenseを使う方法~

Windows 10 MobileとAndroidの両方にアプリをリリースできるよう、Xamarin.Formsを学習してます。 その学習で得たことを書いていきます。

IntelliSenseを使う方法

Visual Studio 2015 Update3で作成したXamarin.Forms(v2.3.3.168)のソリューションで、XAMLでのIntelliSenseが効かなくて困ってたのですが、Twitterでぼやいてたところ、こんな返事が。

早速試してみました。

f:id:kumar:20161129202112p:plain:w350

f:id:kumar:20161129201826p:plain:w350

f:id:kumar:20161129201831p:plain:w350

たしかにIntelliSenseが使えます。

田淵さんのツイートをみるに、Xamarinのバグなのかもしれません。

GR-CITRUSのワークショップに参加して

11月19日に豊洲のルネサス半導体トレーニングセンターにて、GR-CITRUS発売記念のワークショップに参加してきました。

gadget.renesas.com

当日は、GR-CITRUSと、WiFiとSDカードスロットを搭載した拡張モジュールのWA-MIKAN、あと温度などのセンサーを借りて、GR-CITRUSでのプログラミングを体験しました。その感想と、今後やりたいことをまとめてみます。

f:id:kumar:20161119140318j:plain:w250

GR-CITRUSの機能

GR-CITRUSのピン配置を見ると、シリアル4個/I2C 5個/SPI1個(共用あり)、あとアナログ入力4ピン/アナログ出力7ピン/デジタル入出力が20ピン(共用あり)と入出力端子はこれで十分かなと思います。

f:id:kumar:20161127140618p:plain:w250

GR-CITRUSに書き込んだプログラムは、ボード上のジャンパーをショート(ハーフピッチのスイッチを取り付けると便利なようです)させるとPCから切り離して動作させられるようです。

開発環境

GR-CITRUSのプログラミングは3種類あるようです。

  1. WebコンパイラでのArduinoスケッチ開発

  2. IDE for GRでのオフラインでのArduinoスケッチ開発

  3. Rubicを使ったmrubyでの開発

今回は3番目のRubicを使った開発が主でしたが、mrubyを使って非常に手軽に開発できたのが印象的でした。

以下は、照度センサーから読み取ったアナログ値をRubicのログ欄に表示するスクリプトですが、ピンへのアクセスが直感的ですし、Rubyの言語機能を使えばデータの処理も楽そうに思いました(まだ複雑な処理を実装していませんが)。

#!mruby
usb = Serial.new(0)
pinMode(14, 2) #INPUT_PULLUP
100.times do
    usb.println(analogRead(14).to_s)
    delay(100)
end

Wi-Fiへのアクセスも標準で用意されていて、WA-MIKANを使ってIFTTTと連携したりして、GR-CITRUSの応用できる範囲は広そうです。

#!mruby

pinMode(5,1)
digitalWrite(5,0) # LOW:Disable
delay 500
digitalWrite(5,1) # LOW:Disable

Usb = Serial.new(0,115200)
if( System.useWiFi() == 0) then
    Usb.println "WiFi Card can't use."
    System.exit() 
end

Usb.println WiFi.disconnect
Usb.println WiFi.setMode 3
Usb.println WiFi.ipconfig
Usb.println WiFi.connect("ap-xxxxxx","abcdefgh")
Usb.println WiFi.ipconfig
Usb.println WiFi.multiConnect 1
Usb.println WiFi.httpGet("maker.ifttt.com/trigger/citrus/with/key/xxxxx").to_s
Usb.println WiFi.disconnect

これ以外にも、GR-CITRUS特設クラス、メソッド早見表にあるように、I2C、サーボ、RTC、SDカードにアクセスする手段も用意されていて、外部のモジュールを操作したり、IFTTTと連携したりして、いろいろと面白いことができそうです。

個人的にはmbedをよく使っていて、オンラインコンパイラもしくはオフラインの開発環境でC++を使ったプログラミングに慣れていますが、mrubyでの開発も面白いかもしれません。

ワークショップの内容

ワークショップは大きく3つに分かれていて、GR-CITRUS特設サイトの解説ワークショップ進行のガイドを見て、ガイダンスを受けながら進めていきました。解説がしっかり書かれているので、ガイダンスなしでも進めていける内容でした。

  1. GR-CITRUSのmrubyプログラミング → mrubyプログラミング環境の設定、文法学習、Lチカ

  2. センサーネットワークを作ってみる → センサーの読み取り(I2Cとか)、IFTTT

  3. MP3プレーヤー作成デモ+自由時間 → Webコンパイラを使っての作業

センサーの利用はArduinoやmbedと変わらないなという印象です。

f:id:kumar:20161119151133j:plain:w250

(左から照度、温湿度、加速度、角速度、地磁気センサ)

f:id:kumar:20161119154458j:plain

(温度センサーで温度・湿度を取得中)

時間の都合で最後のMP3プレーヤーはやり切れなかったですが、時間があるときに続きをしようかと思います。

今後やりたいこと

ワークショップでやったこと(Lチカ、センサー、IFTTT、MP3(スピーカ出力、SDカード))以外で何かを作ろうと考えてましたが、まずはLCDでの表示(文字、グラフィックそれぞれ)でしょうか。

GR-CITRUSを単独で動作するガジェットにしたとき、状態の表示にLEDが使えますが、より細かい情報を表示するためにLCDを使いたくなります。

LCDの操作はmrubyには用意されていないので、Webコンパイラで提供されているLiquidCrystalライブラリを使うことになりそうですが、手持ちのキャラクタLCD(ACM1602NI-FLW-FBW-M01)がI2C接続なので、ライブラリを少しいじる必要がありそうです。

時間があればmrubyにLCDアクセスを組み込むことができるのか調べてみようかと思います。

FalconでWeb API開発

先日にWeb APIを実装したとき、FalconというPython向けのWebフレームワークを使ったのでメモ。

falconframework.org

Flanconを使った感想は、Web APIの処理の実装に集中できる、でしょうか。 PythonでWebアプリを実装するとき、Flask、BottleなどのWebフレームワークを使うのですが、これらのWebフレームワークはWeb APIには不要な画面表示のテンプレートを扱う機能が含まれています。

FlanconはWeb APIに特化していて、処理の実装に集中できるのが特徴です。

Flanconでの実装例

FalconはHTTP verbに応じたメソッド(on_get, on_post, ...)を定義して、 引数のHTTP requestを処理して引数のHTTP responseに結果を返す処理を記述します。

例えば、JSONデータを返すGETメソッドを定義した例が以下になります。 GETメソッドの記述だけを考えればいいので、見通しがよく、書きやすいです。

# -*- coding: utf-8 -*-
import falcon
import json

class HelloAPI:
    def on_get(self, req, resp):
        resp.status = falcon.HTTP_200
        result = { 'message':'hello world', 'lang':'en' }
        resp.body = json.dumps(result)

api = falcon.API()
api.add_route('/hello', HelloAPI())

FalconのAPIはWSGIサーバで実行できるので、実行するときはgunicornなどを使って

$ pip install falcon
$ pip install gunicorn
$ gunicon hello:api 

とすれば動きます。 Windowsではgunicornがfcntlモジュールの問題で動作しないため、waitressを使う方法があります。

> pip install waitress 
> waitress-serve hello:api
Serving on http://DESKTOP-A9B9C9D:8080

curlコマンドなどでGETアクセスしてみると、実装した通りJSONデータが帰ってくるのが分かります。

$ curl -XGET http://localhost:8080/hello
{"message": "hello world", "lang": "en"}

POST/PUT/DELETEやファイルなどのデータの処理はまた別途まとめます。

Xamarin Dev Days Tokyoに参加してきて~Please install packageエラー

Xamarin Dev Days Tokyoに参加してきました。午前中はXamarinやXamarin.Formsの概要についてのセッション、午後は課題を各自で解くハンズオンでした。

Xamarinは以前にもハンズオンに参加して簡単なアプリを作ったことがあるのですが、それ以降アプリの作成時間が取れず放置してました。

今日のXamarin Dev Days Tokyoに参加して、Xamarin、特にXamarin.Formsでアプリを作る方法が掴めたように感じます。 Android版を出したいと思っていたアプリがいくつかあるので、そろそろXamarinのプロジェクトを起こして、開発を進めていこうかと思います。

Please install packageエラー

今日のハンズオンではまっていたことを。

正確な発生条件を把握してないのですが、初回のビルド時にAndroid版のプロジェクトをビルドするために、Classファイルが含まれたZIPファイルをダウンロードするようです。

そのサイズが200MBあって、ビルドを開始してからVS2015の出力に何も表示されない状況がしばらく続いて、ついキャンセルしてしまったのですが、それ以降、ビルドをすると"Please install package: 'Xamarin.Android.Support.…' available in SDK installer"というエラーが大量に出て失敗する現象が発生しました。

これは、ダウンロード中だったZIPファイルが不完全な状態で残っていて、そこから必要なClassファイルを取得できないことが原因でした。

後から詳しく調べてみたら、田淵さんのブログにこの現象と対応策が書かれていました。

Xamarinの開発環境の準備

11/12(土)に開催されるXamarin Dev Days Tokyoでハンズオンがあるため、6月に購入した新ノートPCにXamarinの開発環境を整備してました。

前のVaio Duo 11には構築してあったのだけど、すっかり移行を忘れてました。

そろそろAndroidとWindows 10 UWPの両プラットフォームにXamarinを使ってアプリを出していく予定なので、ちょうどよい機会でした。

参考にしたドキュメント

Xamarinの開発環境の設定手順は、田淵さんが以下で公開されているドキュメントが分かりやすいと思います。

XamarinHOL/XamarinHandsOn_Prepare_JXUG.pdf at master · ytabuchi/XamarinHOL · GitHub

Xamarinのセットアップ、かなり前にAndroid SDKをVSから起動するとSDKをDLできない(Program Files配下なので)トラブルがあったような記憶があるのだけど、今は権限を変えて起動してるようで問題ないですね。

自分がはまったポイント

(1) AndroidプロジェクトのビルドでUnsupportedClassVersionErrorエラー

これはJava8のSDKをインストールすると解消しました。 Android SDKの新しいバージョンだとJava8が必要のようです。

(2) Java8 SEをOracleのサイトからダウンロードしようとすると、Due to your country location, we are unable to process your request.とエラーが出てダウンロードできない。

これは、OracleのWebサイトの問題だったようで、翌日には解消されていました。

(3) VS2015でソリューションを新規作成したとき、XamarinのBlank、Portable Formsを選択したとき、WinPhoneとWindowsのサブプロジェクト作成でエラーダイアログが出る。

f:id:kumar:20161112104103j:plain:w250f:id:kumar:20161112104108j:plain:w250

これはUWPのプロジェクトでNuGetパッケージの管理を実行して、パッケージを更新したら解消しました。

f:id:kumar:20161112104111j:plain:w300

無事にAndroidアプリをデプロイ

Nexus5xはGoogle USB DriverでPCにUSBデバッグで接続できました。

作成したXamarinソリューションのコードを変更せずそのままビルドして、アプリをデプロイして実行すると…

f:id:kumar:20161112104114j:plain:w300

無事にAndroidアプリを実行できました。

NUGM (NEO User Group Meeting)vol.2に参加しました。

Windows 10 MobileのNuAns NEOのユーザ会に参加しました。

eventon.jp

内容は、トリニティ株式会社代表取締役社長の星川さんをはじめ、開発メンバーの方々による NuAns NEOの開発秘話のセッションで、他にもITジャーナリスト本田さん、林さんの突発トークセッションもありました。

一からデザインを起こしてスマートフォンの新しい形を検討されたその考え方、過程がとても興味深かったです。 また、本会と懇親会を通してNEOの状況について詳しくお話を伺えてよかったです。

ユーザ会の最後に、参加者のNEOを並べて記念写真を撮りました。

f:id:kumar:20160604181605j:plain:w300

FLIPが1台だけだったのと、TWOTONEのケースが上下とも被ったのが1組2台だけ (そのうちの1台は自分のです…涙)だったのが印象的でした。 TWOTONEのケースの組み合わせのバリエーションが多く、ユーザが個性を出せる NEOのデザインが表に出たのかなと思いました。

会場では、NEO関連のアクセサリや、それ以外のトリニティさんが扱うアクセサリを購入することもできました。 今回は、NEO付属のUSB Type-Cのケーブル、それとFLIPケース(エードグレイ)です。 かずきさんのFLIPを見ていたら意外とよさげで思わず購入してしまいました。

f:id:kumar:20160604180646j:plain:w300

Kumalicaの発表

実は、数日前にKumalicaを紹介する発表を頼まれていたのですが、 当日にタイムテーブルを見ると、星川社長、NEO開発メンバーの皆さん、 ITジャーナリストのお二方の他に話すのは自分だけで、 「えらい状況で発表を引き受けてしまったな…」と冷や汗ものでした。

f:id:kumar:20160605114837p:plain

この「kumalica トークセッション」では、Kumalicaの機能と開発の経緯を NEOを使うようになったきっかけも交えて話させていただきました。会場の皆さんに聞いたところ、 9割近くの方が利用しているとのことで、うれしい限りです。

なお、発表で使ったスライドはいつもの通りSlideShareで公開しています。

Kumalicaのご紹介(公開用)

Kumalica 0.4.1をリリース

Windows 10 Mobile向けFelicaカードリーダアプリのKumalicaのリリース0.4.1がアプリ認定を通過しました。まもなくストアで公開されると思います。

www.microsoft.com

リリース0.4の不具合に対応したバージョンです。

更新履歴

1.不具合の修正

  1. 交通系ICカードの利用履歴の検索結果画面で、出場駅が正しく表示されない不具合を修正しました。

  2. カード読み取り結果画面からCSVファイル保存、DBファイルバックアップ、寄付の各機能を実行すると異常終了する不具合を修正しました。

  3. WAONの利用履歴について、チャージ金額が利用履歴データベースに正しく格納されない不具合を修正しました。

フィードバックのお願い

Kumalicaを使ってみた感想、また今後の要望についてフィードバックをいただけると幸いです。 個々のフィードバックにお返事ができない場合もありますが、 一つ一つ目を通してKumalicaの開発の参考とさせていただきます。

フィードバックは以下のどれかの方法で教えてください。

  1. Twitterでハッシュタグ #kumalica を付けてツイート
  2. アプリ評価のコメント欄
  3. ブログなどの記事

よろしくお願い致します。