うさぎ駆動開発

UWP, Xamarin.Macを中心によしなしごとを書いていきます。

ABC2016 Autumn デブリーフィング

一週間も経ってしまって今更ですが,ABC2016 Autumnでバザール出店とハンズオンを実施してきました。

タイムテーブル | ABC 2016 Autumn

バザールでは Blynclight ネタを。

ハンズオンはconnpassに登録いただいた方こそ8名でしたが,一時は10台用意したPCが埋まるほどで総計30名ぐらいの方には体験いただけたのではと(数えていない)。

jxug.connpass.com

メンターとして @nuits_jp さん, @masatoru さん, mishizakiさん, nakashoさん にお手伝いいただきました。ありがとうございました!

f:id:ailen0ada:20161126165826j:plain

今回はMicrosoftにXamarin インストール済みの Surface Pro 4 を10台用意いただいたので,スムーズに進めることができました。いや,スムーズに進めるために環境のチェックと修正を加えてくださったメンターの皆様のおかげです。本当にありがとうございました。

ハンズオンに来てくださった方と手を動かしていると,「なぜこうしなければならないのかがよくわからない」「この操作がどういった意味をもっているのかが知りたい」という声がちらほらあったように思います。そういったところをフォローできるように精進していきたいです。今後ともよろしくお願いします!

Connect(); // 2016 キーノートのライブ中継日本版に参加した

とか言っていたはずなのに、日本独自番組にサポートメンバーとして参加してまいりました。

録画はこちら。

http://microsoft-japan-events.azurewebsites.net/2016/connect/

一緒に参加した @ytabuchi さんのレポというかまとめというか、はこちら。

ytabuchi.hatenablog.com

うーん。書くことがないぞ?

もくもくしてた

裏ではもくもく会状態で11月19日のABCの準備をしつつ、VisualStudio RCを入れつつ、VS4Macを入れてました。忙しい。

今回の発表

VisualStudio for Mac

VisualStudio と銘打ったからにはガンガン投資していってくださるんですよね!ということでいい兆候だと思います。

現在 VisualStudio と Xamarin Studio の間にあるギャップが少しずつでも埋まっていくといいかなと思います。UWPとかUWPとか。Xamarin.FormsはUWPにも対応しているのに、現状XamarinStudioでは作れなくて悲しい感じなので。

VisualStudio 2017

LiveUnitTest が dotCover 入れなくてもできるようになるのは素敵。ただ発表されてる新機能はEnterprise以上限定な機能が結構多くて差別化を進めてる印象。

Azure FunctionsがGA

Lambda芸を輸入しなくては。

ABCに参加します

11月19日のABCはこれのことです。人のブログに完全に乗っかる形ですが、ぜひ!

ytabuchi.hatenablog.com

MVP Global Summit に参加して散財した

11月6日から行われたMVP Global Summitに参加してきました。この文章は帰りの機内で書いています。

サミットで何が行われたのかはにゃーんなので全く書けません。

会話に関して,英語力不足というよりは,「全部拾わなくていいし,もうなんかしゃべっちゃえばいい」と吹っ切れるまでに時間がかかった感じ。別に同じコンテキスト共有してるし,なんとなく考えてることを垂れ流しておけば向こうに拾ってもらえると。

あ,でももうちょっと街中で使う英語は予習しておいた方がよかったかもしれぬ。それぐらいは復習しておこう。

来年のために,ここからはいかに私が散財したかを記録しておこうと思います。

続きを読む

Microsoft MVP を初受賞しました

Microsoft MVP for Visual Studio and Development Technologies を受賞することができました。

いつもXamarin.Macの人として応援いただき,またいじっていただいたりする皆様のおかげです。 本当にありがとうございます。

Xamarin.Mac プロジェクトが Visual Studio で開けるようになったり,Xamarin.Forms が macOS 向けにも実装が進んでいたりと,面白そうなトピックが続々出てきそうです。

これからも頑張ります。今後ともよろしくお願いいたします。

AWS API Gateway Lambda proxy integration を使う

API Gatewayに,20日に新機能がリリースされました。

Amazon API Gateway に API 設定を簡素化する 3 つの新機能を追加

今まではAPI Gateway側の設定をいろいろ通ってからLambdaファンクションに到達していましたが,認証後はリクエストをするっとLambdaに流せると。 まあ便利。ということでさっそく使ったのですが,何をやっても502エラーになる。

レスポンスはこのように返しましょう。

class ApiGatewayResponse
{
    constructor(){
        this.statusCode = 200;
        this.headers = {};
        this.body = "";
    }
}

exports.handler = (event, context, callback) => {
    const res = new ApiGatewayResponse();

    // 任意のレスポンスヘッダ
    res.headers["x-custom-header"] = "foo";

    // body は string で。Objectは不可
    res.body = JSON.stringify(event);

    // context.succeed は deprecated
    callback(null, res);
};

Xamarin.iOS + AVFoundation でフロントカメラからキャプチャする

ここまでMac, UWPとやってきたのでiOSでもやってみます。 リポジトリはこちら。

github.com

Mac のコードコピペでよい

いろいろ書こうと思ったのですがほぼコピペで動きます。AVFoundationのAPIはほとんど同一です(もちろん意図的に揃えてる)。 面白くないので,あまり本質的ではないですが少し変更しましょう。

iOS 10のAPIを使う

iPhone7 Plusではカメラが増え,AVCaptureDevice.DevicesWithMediaType() では取得できません。iOS 10で追加された AVCaptureDevice.GetDefaultDevice か, AVCaptureDeviceDiscoverySession を使っていきます。

void InitCaptureSession()
{
    session = new AVCaptureSession();
    session.SessionPreset = AVCaptureSession.PresetHigh;

    // iPhone 7 Plusで全てのデバイスを列挙するなら
    // var deviceTypes = new[] { AVCaptureDeviceType.BuiltInDuoCamera, AVCaptureDeviceType.BuiltInWideAngleCamera, AVCaptureDeviceType.BuiltInTelephotoCamera};
    // var discoverySession = AVCaptureDeviceDiscoverySession.Create(deviceTypes, AVMediaType.Video, AVCaptureDevicePosition.Unspecified);
    // var devices = discoverySession.Devices;

    var defaultCamera = AVCaptureDevice.GetDefaultDevice(AVCaptureDeviceType.BuiltInWideAngleCamera, AVMediaType.Video, AVCaptureDevicePosition.Front);

    NSError error;
    var input = new AVCaptureDeviceInput(defaultCamera, out error);
    session.AddInput(input);

    photoOutput = new AVCapturePhotoOutput();
    session.AddOutput(photoOutput);
}

カメラへのアクセス許可を取得するためにAVCaptureDevice.RequestAccessForMediaTypeのほか,iOS10からはInfo.plistに下記記述が必要です。文章は何でもいいです。 f:id:ailen0ada:20160922124025p:plain

あとはmacOSのものからコピペして,NS*なものをUI*に置き換えたり,オーバーライドするメソッドをちょこっと変えたりすれば動きます。