その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

コロラド州デンバーで開催されたiOSカンファレンス「360|iDev 2017」に登壇した話 #360iDev

今月の8月13日〜16日にかけて、アメリカ合衆国コロラド州デンバーにて開催された「360|iDev 2017」にて登壇してきました。


Shuichi Tsutsumi

(発表中の様子)


トークのタイトルは "Deep Learning on iOS" で、スライドはこちら。



持ち時間が45分もあったので、スライドの内容プラス、トークの序盤・終盤でライブデモを2つ(配布されているモデルを使用した一般物体認識/自分で学習させたモデルを使用したロゴ認識)実施しました。


360 iDev カンファレンスについて

raywenderlich.com の毎年の恒例記事 "Top 10 iOS Conferences" に3年連続でエントリーしている、歴史と由緒あるカンファレンスです。


参加人数は今年は250人程度とのこと。



開催場所のコロラド州デンバーは、カリフォルニアから東に行った、アメリカのちょうど真ん中あたりにあります。


登壇の経緯

相変わらず招待されたとかではなくて、4月に出したCfPが採択されての登壇でした。今年の3月にtry! Swift TokyoのLTで話した内容 *1 の完全版をどこかでやりたくて、応募しました。


ちなみに今年のCfPはいまのところ4つのカンファレンスに応募して、3勝1敗(通った: try! Swift, 360iDev, iOSDC, 落ちた: UIKonf)です。

カンファレンスの様子

スピーカーは飛行機代が出るのと、会期中のホテルはカンファレンスが用意してくれます。


開催前日の夜はスピーカーディナー。


360iDev Speaker Dinner

(写ってないように見えますが、写ってます。。)


スピーカーディナーは今までちょっと苦手意識があったのですが、今回はAltConfのオーガナイザーやってて僕のことを覚えててくれた人や、日本語勉強してて僕のブログを読んでくれている(!)人、ベルリンのカンファレンスで同じくスピーカーだった人とかもいて、今回は非常に楽しめました。



会場はホテル内にあり、最大4トラックが同時進行します。


360iDev_20170814_8536

(ゲストスピーカー用の一番広い会場)



SlackにはポケモンGOチャンネルやNintendo Switchでマリオカートやるチャンネルとかもありました。


(会場から届くとこにフリーザーが出たのでみんなで狩るの図 )



ランチのシステムがユニークで、カンファレンスでもらえるバウチャー持って、フードトラックが集まる公園まで行って、自分で好きなのを注文して食べる、という形式。



観光にもなるし、会場の外の空気を吸えるので非常にいい仕組みだと思いました。



こちらはスポンサーブースでももらった、Firebaseのハンドスピナー、ホットソース、ウッドステッカー。



ハンドスピナーは(置いて回すときは)回転中もロゴが見えるし、色で個性も出しやすいので企業やサービスのグッズとしては結構いいのではないでしょうか。



僕の出番は2日目のランチ前。


(いよいよ次…)



出る直前はソワソワしましたが、話し始めたら緊張は忘れて、練習時よりもうまくしゃべれたと思います。

Shuichi Tsutsumi


Shuichi Tsutsumi


デモもうまくいったし(バックアッププランもたくさん用意しておいた)、終わった後「良かったよ」と声もかけてもらえました。


ただ正直な所、今回のトークの「内容」については100%最高と思える所まで持っていけたとは思ってなくて、悔やまれる部分もあります。そこらへんは結局のところ自分の準備不足、努力不足に帰結するので、今後精進します。(詳しくは後述)



まぁそんなわけでちょっと発表内容については勝手に凹んだりしてたのですが、かの世界的に有名なiOSチュートリアルサイト "raywenderlich.com" の『360|iDev 2017 Conference Highlights』(360iDevのハイライト)という記事で、なんと僕のセッションが紹介されてました。



"Can't miss"(必見!)と書いてあったので、嬉しかったです。

準備段階での悩み

今回は悩みまくりました。CfPを出した時点では、WWDC17開催前で、つまりCore MLの発表前で、Metal Performance Shaders の CNN API (MPSCNN) 使って実際にiOSデバイス上でGPU AcceleratedでCNN走らせてる人って当時はあまりいなくて、情報もものすごく少なかったので、まだ価値があったわけですよ。


それが、Core MLが発表されて、MPSCNNのレイヤーを直接たたく意味はあまりなくなってしまった。敷居がグッと下がって、注目度がバーンと上がって、プレイヤーもドッと増えて。


Core ML使うとiOS側の実装云々よりもほとんど機械学習側での知見と努力がモノを言うのだけど、Courseraのコースやっただけの自分はまだ人様に講釈するようなレベルではないし。。


悩みに悩んで、

  • MPSCNNであればiOS 10でも使える
  • BNNSとの使い分け
  • Core ML+Visionはどこをどう簡単にしたか
  • デモ

という話で構成しました。こういう切り口としては、わかりやすく、かつ理解と興味がつながっていくようにうまく説明できたと思います。



ただ、try! SwiftでのLT含め、そもそもの僕がこの分野でプライベートの時間を使って勉強したり勉強会やカンファレンスで登壇したりしてきたのは、「いろいろと革新的で面白いことができそう」というワクワク感からで、ここをほとんど「実践」できないまま登壇して、結果的に自分のトーク内容にもその「ワクワク感」があまりこめられなかったなと。理想的には、もっと色々な実案件をやったり大量のデモをつくってみたりして、そういうのを紹介しつつ、どう、おもしろそうでしょう、というところから話を展開したかった。WWDCの発表で大幅に当初の思惑が狂ったとはいえ、既存の知見をこねくりまわしてどう発表に落とし込むかに準備時間の大半を使ってしまったなと反省しています。

その後のデンバー滞在/リモートワーク

生まれて初めてのデンバー行きで、「この広いアメリカ、同じ場所をもう一度訪れるチャンスはそうそうないかもしれない」と思い、滞在を1週間ほど延長して、リモートワークしてました。これが最高に良かったのですが、facebookに日々色々と書いてたのでここでは割愛します。


(皆既日食中のデンバー)

おわりに

360iDev登壇、デンバーの旅、反省点も含め、非常に良い経験になりました。これもあって執筆が遅れていたのですが、今必死で巻き返しております・・・!



*1:LTは5分だったので、具体的なことはほとんど何も説明できなかった

Core ML vs MPS vs BNNS #fincwwdc

昨日FiNCさんのオフィスで開催された「WWDC2017振り返り勉強会」で『Core ML vs MPS vs BNNS』というタイトルでLTしてきました。



iOS 11で追加されたCore MLが非常に注目を集めていますが、「既存の機械学習フレームワークを使って学習させたモデル(のパラメータ)をiOS側に持ってきて推論を実行する」ということ自体はiOS 10からあって、そこに不便さがあったので広まらず、Core MLでやっと使われるようになった、という側面はもちろんありつつも、いややはりそれでも単にそういうことがiOS 10できるようになったということ自体が知られていなかっただけなのではと。




確かに自分も Metal Performance Shaders のCNN APIを用いた機能を実装しようとしたときに、情報があまりに少なく、何ができて何ができないのか、どうやるのかがよくわからなかった、ということがありました。


で、そのへんをシンプルに説明したら、もっと興味をもつ人も出てくるんじゃないかなと思い、実装手順を3ステップで解説してみました。

  • Step 1: モデルをつくる

  • Step 2: ネットワークを実装する


  • Step 3: 推論の実行処理を書く



意外と簡単そう/使えそうではないでしょうか?



ところが・・・




っていうつらさがあり、他にも色々と面倒な点があり、やっぱりCore ML & Visionのおかげで各段に便利になった、という話でした。



最後にAccelerateフレームワークのBNNSの使いどころについてWWDC17のMetal Labで聞いた話が出てきます。




(登壇の様子 by yucovin さん)

なぜこの話をしたのか

上の説明だけを読むとまるでMPSCNNの普及活動をしている人みたいですが、動機はそこではなくて、来月登壇する アメリカのiOSカンファレンス で、"Deep Learning on iOS" というタイトルで発表することが決まっていて、



で、これってWWDC17開催前にCfPを出して通ったやつなので、応募当時はMPSCNNの話をするつもりだったのに、Core MLが出てしまって事情が変わってしまった、どうしよう、という。。


じゃあCore MLの話をすればいいじゃん、と思うかもしれません。その通りかもしれません。でも僕自身がまだあまり試せてないのと、Core MLの場合はiOS側が便利になりすぎてむしろ機械学習フレームワーク側(Kerasとか)がメインになるけどそっちは初心者とすらいえないレベルだし、ってことでMPSCNNの方に解説を寄せよう、という試行錯誤の中で「こんな切り口はどうだろう」と考えたのが昨日の発表なのでした。


実際に話してみて、正直なところコレジャナイ感はちょっとありました。もうちょっとワクワクする感じにならないか、実例とかデモとかを増やす感じでブラッシュアップしてみようと思ってます。(来月のカンファレンスは発表時間が45分もあるので、個々の解説ももうちょっと丁寧にやる予定)

おわりに

WWDCには参加したものの、そのままアメリカにいたのでこういう振り返り勉強会に参加できず(※例年勉強会発表ドリブンで新APIを勉強していた)、あっちではこういうLTで気軽に登壇できる勉強会もあまりないので、1ヶ月後というわりとWWDC勉強会としては珍しいタイミングで開催された本イベントは大変ありがたかったです。


LTですが非常に中身の濃い発表が多く、勉強になりました。懇親会で出てくる料理もさすがFiNCさん、ヘルシーで美味しいものばかりでした。どうもありがとうございました!

追記:BNNSについていただいたコメント

Facebookでsonsonさんからコメントいただきました。


BNNSとMPSCNNの使い分けは,難しいけど,電力と計算スピードのバランスかなぁと思います.


あと,GPUのメモリとCPUのメモリ間の転送に時間がかかるので,オーバーヘッドをカバーできるくらい,データや計算量大きくないと,GPUは意味ないでしょう.
BNNSは,SIMDなので,これも当然CPUのコンテキストスイッチのためのオーバーヘッド(ノーマルモードSIMDモードの切り替え)があるのですが,GPUほどではないので,小さいネットワークだとGPUよりBNNSの方が速いというのはありそうです.


まぁ,なんで,電力と速度の限界に挑戦する場合は,ベンチマークとって極限を目指そうって感じですかねw


なるほど、単に「CNNの計算はGPUが向いてるでしょ」とか「Appleの人も言ってた」とかってだけでBNNSのことは忘れようとか言ってちゃいけないですね。確かにGPU↔CPU間の転送速度のボトルネックGPUによる高速化がどれぐらい見込まれるかのバランスによる、というのは非常に納得です。また「SIMDモードへの切り替えのオーバーヘッド」(はあるがGPUとの転送ほどではない)というあたりもまったく考慮できてなかったところです。


CPU、GPUの負荷がそれぞれどれぐらいか、というのはXcodeで簡単に見れますが、GPU↔CPU間の転送状況を見る方法もあるのでしょうか?GPUまわりの計測・デバッグ手法はもうちょっと勉強したいところです。


ちなみにsonsonさんは例の(私も参加させていただく)クラウドファンディング本で「Core ML」のパートを担当されます。


7/28まで買えるみたいなのでまだの方はぜひご検討を!


iOSの技術書をクラウドファンディングで執筆します - 共著者8人の紹介 #peaks_cc

「PEAKS」という技術書のクラウドファンディングサービスで、今日から9人の執筆陣によるiOSの解説書「iOS 11 Programming」のファンディングが始まりました。



9人の著者陣に僕も入ってるので、宣伝といえば宣伝なのですが、技術書大好きな自分としては、自分が入ってなくても絶対に買うであろう執筆陣/内容なので、いち読者としてもぜひとも成立して欲しいと思ってまして、本記事を書こうと思った次第です。


そう、念のため書いておきますが、クラウドファンディングなので、成立しなければ出ません😭

購入締切日時 2017年07月28日 23:59 までに、購入者数が目標の 500人 に達した時点で執筆開始となります。購入額の決済は、目標人数が達成された時点で行われます。(目標人数に達しなかった場合はプロジェクト不成立となり、決済は行われません。)


ページ内の著者コメントにも書きましたが、僕がお世話になった著書の執筆者であったり、いつもお世話になってる著名オープンソースライブラリのコミッタの方であったり、いつも素晴らしい記事を書かれている方であったり。期待しかない布陣なのです。


万が一それが伝わってなくても悲しいので、僕「以外」の方々についておこがましいですが簡単に紹介させていただきたいと思います。以下サイトに載ってる順に。*1

吉田 悠一 - Core ML

通称ソンソン(sonson)さん。「iOS SDK Hacks」のメイン著者のひとり。


iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
吉田 悠一 高山 征大 UICoderz
オライリージャパン
売り上げランキング: 226658


2010年とかなり黎明期に書かれた本ですが、Method Swizzling や Accelerate.framework といった他著では扱ってないトピックについて書かれていて、その後何年も本書を開いて参考にさせていただきました。


コンピュータビジョンや機械学習を専門とされていて、今回Core MLについて書かれるということで、ブログ記事や他著にありそうなチュートリアルをなぞってみた的なところを超えた、「中身がわかってる人ならではの解説」が非常に楽しみです。

池田 翔 - Swift 4の新機能とアップデート

通称いけしょーさん。あの Carthage、ReactiveSwift のコミッタであり、Himotoki の作者です。Carthageというパッケージマネージャ、ReactiveSwiftというリアクティブプログラミングをするためのライブラリ*2、Himotokiという「Swift自体がそのコアコンセプトを後追いすることになった」JSONパーサの中身をコミッタ・作者レベルで理解している人が解説するSwift 4、読みたすぎます。

坂田 晃一 - Xcode 9 の新機能

僕は坂田さんと呼んでますがID的にはhuinさん。今年出版された「モバイルアプリ開発エキスパート養成読本」の著者のひとり。


モバイルアプリ開発エキスパート養成読本
技術評論社 (2017-04-11)
売り上げランキング: 38,762


iOSDC等のカンファレンスや勉強会でよく発表されていて、わかりやすくてためになる内容に定評がある方です。

加藤 尋樹 - Drag and Drop / Files と Document Based Application

通称すこんぶさん。try! Swiftの記念すべき第1回目に登壇されていました。

上記はすこんぶさんのブログですが、技術記事はいつも他の記事には書いてない「一歩踏み込んだ」内容で、めちゃくちゃ勉強になります。

川邉 雄介 - UIKitのガイドラインの変更点とAutoLayoutの新機能、アップデート

僕は川邊さんと呼んでますが、ID的にはjeffsukeさん。「よくわかるAuto Layout」の著者の方です。


よくわかるAuto Layout  iOSレスポンシブデザインをマスター
川邉 雄介
リックテレコム
売り上げランキング: 130,872


この本の紹介記事にも書きましたが、「こんなに詳しく、しかも噛み砕いててすごい」と驚く内容の良さでした。*3


ブログ記事もちょっと込み入った内容を綺麗に構造化してわかりやすく書くのが上手い方だなーと思います。

岸川 克己 - Core NFC / PDFKit / SiriKit

通称きしかわさん。きしかわさんです!Realm、try! Swiftの主催、色々な会社の技術顧問、KeychainAccessの作者等いろいろな顔がありますが、なんといっても岸川さんの勉強会等での登壇内容は、そのまま本にして欲しいぐらい詳しく、他で説明されてないような内容まで網羅されていて、それでいてわかりやすいです。


PEAKSクラウドファンディング第1弾は岸川さんの「Inside Swift」でしたが、ぜひとも成立して欲しい企画でした。目標部数が高すぎるからだ!と思わずPEAKSにアンケートでクレームを入れたぐらいでした😭


今回こそは成立させて、岸川さんの書く章を読みたいです。というか、「PDFKit」は何となく岸川さんが書きそうなイメージがありますが、「Core NFC」「SiriKit」というチョイスは個人的にはちょっと意外で、だからこそますます読んでみたい気持ちが高まります・・・!

所 友太 - HomeKit入門とiOS 11における新機能

僕は普通に「ところさん」と呼んでます。みんな持ってたあの「UIKit詳解リファレンス」を書いた方。


iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 355,345


「よくわかるAuto Layout」の監修でもあります。あと #potatotips の創始者でもあります。


「UIKit本の次回作は書かないんですか?」と会う度に聞いてて「今書いてます!」と言ってたのに7年経ってもまだ出てないので、こういう機会でもないとなかなか書いてくれない気がしますw 所さんのHomeKit解説、ぜひ読みたいです。

永野 哲久 - Audio/Media関連 新フレームワークとアップデート

iOSのオーディオまわりをいじる人はみんな参考にしたあの「iPhone Core Audioプログラミング」の著者。


iPhone Core Audioプログラミング
永野 哲久
ソフトバンククリエイティブ
売り上げランキング: 88,410


2009年刊行ですが、オーディオ周りの低レイヤのAPIのうちのいくつか(大部分)はこの本にしか書かれてないことが多く、一時期は1万円を超えるプレミア価格がついてました。プログラミング界隈においてはだいたいの情報は英語が源泉ですが、この本をネイティブで読めるので日本語できて良かったーとまで思った一冊です。


この企画の話をいただくまで知らなかったのですが、実はPEAKSの中の人はこの永野さん。今回の発起人でもあります。

おわりに

もしかしたら個人的な思いがほとばしりすぎて宣伝にすらなってないかもしれません。。プロジェクトが成立(=購入者数が目標数に到達)してから執筆される本なので、ある程度内容については著者陣を信用してほしいということになりますが、ガジェット系等のクラウドファンディングと違って成立しなければ決済されないので、"支払ったけど本(電子書籍or紙の本)は届かない"ということはないのでその点はご安心いただきつつ、気になった方はぜひ応援の購入をしていただければありがたいです。


よろしくお願いいたします🙇🏻



*1:なお、紹介に出てくる著書はもちろん全て個人的に所有しております

*2:こういうの何て総称するんでしょう?

*3:「わかりやすいけど内容が薄い」、または「内容は詳しいけど公式ドキュメントの直訳でわかりにくい」(著者が咀嚼できてない)、というパターンは実際にたまに見かける

【iOS 11】ARKitについてWWDCのラボで聞いてきたことのメモ

iOS 11から追加された、AR機能を実装するためのフレームワーク「ARKit」についてWWDCのラボ(Appleのデベロッパに直接質問できるコーナー)で聞いたことのメモです。注目のフレームワークなので行列ができてましたが、丁寧に色々と教えてくれたので、忘れないうちに書いておこうと思います。


(WWDCセッションスライドより)

既存実装とどう共存させるか?

先日の記事にも書いたのですが、今働いている会社のアプリ「Fyuse」はスマホで3D的な写真を撮るアプリで、その撮影を補助するために、撮影対象の周囲に3Dの「ARガイド」を表示するという機能をAVFoundation+Metal+SceneKit+独自の画像処理ライブラリ(トラッキング等)で実装しました。



ARKitを使うとなると、要iOS 11以上、要A9以上のプロセッサという条件を満たす必要があるわけですが、当然2017年現在では多くのアプリはこれよりもっと広いiOSバージョン、iOSデバイスをサポートしたいはずです。


で、まず聞いたのは、そういう既存実装とARKitを共存させるのに、

if <# iOS 11以上 #> && <# A9以上 #> {
    // ARKitを使う実装
} else if <# 既存実装を使う条件 #> {
    // 既存実装
} else {
    // それ以外
}

みたいなのを避ける方法があったりしませんか?と。



回答:ない。ARKitを使うにはiOS 11以上、A9以上が必要だ。



・・・はい。そりゃそうですね。変な質問してすみません。でもせっかく来たので食い下がって聞いてみました。


「他のAR利用アプリもiOS 10以下はまだ切れないと思うけどみんなどうしてるの?たとえばポケモンGoとか」



回答:知らない。



・・・はい。そりゃそうですよね。(もし知ってても言えないですしね)


既存実装と比較したARKitのアドバンテージは何だと思うか?

質問が悪かったので、「じゃあ既に実装が済んでいて、ARKitを使うとなると既存実装にプラスしてバージョンわけが必要というデメリットがありつつ、それでもARKitを使う理由はあるのか」という観点から、我々の既存実装と比較したARKitを使うメリットについて聞いてみました。



→ 回答:

  • Appleの純正フレームワークは公開APIよりもっと下のレイヤーを利用した実装ができるので、サードパーティ製の実装よりもハードウェアに最適化されている。よってバッテリー消費量や処理速度の面で優れていると考えられる
  • ユーザーがタップしなくても、ARのセッションを開始した時点でシーンの解析が完了している(これは厳密には我々の用途にとってはアドバンテージではないが、「違い」ではある)
  • デバイスの姿勢も考慮してキーポイントを抽出してるので、デバイスを動かすと云々(すみません、実はこのへんちょっとよくわかりませんでした)

結局のところ、ARのシーンとしてはどういうものが検出できるのか

我々の要件としては、水平面に何かを置きたいわけじゃなくて、対象オブジェクトを囲むように3Dノードを表示したいわけです。



ところがARKitは検出した床やテーブル等の水平面に何かを置く実装しか見当たらないので、「こういうのってARKitでできるの?」ということを聞いてみました。



で、回答としては、今のところ「水平方向」(horizontal)の「平面」(plane)しか検出しないそうです。


`ARPlaneAnchor.Alignment` というenumがありますが、実はまだ `horizontal` という要素ひとつしかなくて、`vertical` というのはまだありません。つまり壁のような「垂直方向の平面」を検出したり、我々のアプリのように人間や銅像や動物といった任意のオブジェクトを検出したり、そういうことは現状ではサポートしてないようです。


なので、ポケモンGoのようにキャラクターの3Dモデルを表示するタイプのARにはいいですが、我々のアプリのような用途や、実世界のものに合わせて何か情報を表示したり、みたいなタイプのARにも現状では向いてなさそうです。



どういう水平方向の平面が認識されるかについても教えてくれたのですが、ある程度の大きさが必要で、たとえばイスの座面は十分な広さがあるので水平面として検出されるが、背もたれの上(伝わりますかね?)みたいな狭いものは水平面としては検出されないと。



ただもう一つ提案として言ってくれたのは、検出したキーポイントはAPIから取れるので、それらを使って自分で垂直方向の面なり何なりを再構成することならできる、と言ってました。これはありかもしれません。

深度情報は使用しているのか?

たとえばiPhone 7 PlusのようにDepth(デプス/深度)を取れるようなデバイスの場合、それを使ってより精度良く検出するような処理を内部でやってたりするのか?ということを聞きました。



回答:使ってない



普通のカメラだけで精度良く動くようなアルゴリズムになっていて、デバイスによる処理の差異はないそうです。

おわりに

結論としては、我々の用途には今のところは合ってなさそうです。が、今後のアプリ開発の可能性を広げてくれる非常におもしろいフレームワークであることには代わりはないので、プライベートでは引き続き触っていこうと思っています。


API Diffsから見る iOS 11 の新機能 #WWDC17

今年はWWDC会場よりお送りしております。特に何も期待しないまま参加したのですが、開発者的には非常にワクワクする発表がたくさんありました。


基調講演の内容からではなく、ベータ公開されたiOS Dev CenterのAPIリファレンスを見て、個人的に/開発者目線から気になった新APIを挙げていきます。

Core ML

iOS 10からMetal Performance Shaders(以下MPS)に追加されたCNN関連機能、足りないものが色々とあり、ここらへんは拡充されたら嬉しいなとは思っていましたが、新フレームワークとして登場しました。


おいおい、さらに増えたら MPSCNN / BNNS / Core ML とどう使い分けるんだ、と思いましたが、ドキュメントの図で棲み分けがわかりました。



Keras や Caffe で学習したモデルを BNNS や MPSCNN で使えるようにするのが Core MLのようですね。

import coremltools
coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')
coreml_model.save('my_model.mlmodel')


実際、学習済みモデルを持ってくるところは扱いづらい仕様だったので、これは嬉しいです。

Metal Performance Shader

上でMPSという略語を何度かもう出しましたが、MPS自体にもいくつか新規追加APIがあります。その中でも目を引くのが Recurrent Neural Networks(RNN / 再帰型ニューラルネットワーク)関連のAPI群。

  • MPSRNNImageInferenceLayer
  • MPSRNNMatrixInferenceLayer
  • MPSRNNSingleGateDescriptor
  • MPSGRUDescriptor
  • MPSLSTMDescriptor
  • MPSRNNSequenceDirection

RNNは、文書解析に向いていて、自然言語処理の分野で成果を挙げているとか。勉強します。

Vision

これも新フレームワーク。画像解析・コンピュータビジョンで顔を識別したり、シーンを分類したりするフレームワークのようです。APIを見てると Core Image の CIDetector の下回りがこれなのかなぁという品揃えです。

  • Face Detection and Recognition
  • Machine Learning Image Analysis
  • Barcode Detection
  • Image Alignment Analysis
  • Text Detection
  • Horizon Detection
  • Object Detection and Tracking

ちなみにドキュメント冒頭で "detect faces" ではなく "identify faces" という言い方をしてるのと、"Face Detection and Recognition" とわざわざ書いてあるので、顔検出ではなく、「これは誰々だ」という顔の認識までしてくれるのかなと期待しましたが、今のAPIを見た限りだと従来の顔の矩形検出っぽいです。今のところは。


いや、それにしてもこれは嬉しいです。もっとAPI掘ってみます。

ARKit

これは基調講演でも盛り上がってましたねー *1



私事ですが、勤めている会社のアプリ Fyuse でこういうものを実装しました。



Fyuseというアプリはスマホで3D的な写真を取るアプリなのですが、実装した機能というのが、タップして選んだ対象の周囲に3Dの「ARガイド」を表示して、撮影を補助するものです。



で、これがiOSの実装的に言うと、

  • カメラからの入力画像を解析してリアルタイムに物体追跡
  • カメラの姿勢と対象物体の位置・角度からARガイドを表示する

というところで、AVFoundation、Metal、SceneKit(+コアとなる画像処理:弊社リサーチチームによる実装)が要素技術になってきます。


僕は3Dの取り扱いにまだ慣れてなくて、カメラからの入力・iPhoneのスクリーンという2Dの世界と、デバイスの姿勢・SceneKitで構築する3Dの世界とを行き来するのに苦労しました。


こういうのをARKitはやりやすくしてくれるものなのかなと思います。具体的なAPIはまた後ほど見たいと思います。

Depth API

基調講演で「Depth API」って言ってて、「きたー!」と思いましたが、


AVFoundationを見るも、新規追加APIはなし


どこにあるのでしょうか・・・?


→ FacebookやTwitterで @hkato193 さん、@Gemmbu に教えていただいて、 AVCaptureDepthDataOutput という新規APIがあることがわかりました。(新しいドキュメントのdiffの見方を間違ってました)

Core Bluetooth on watchOS

Core Bluetooth が watchOS でも使えるようになったようです。



ドキュメント見ると、核となるクラスである CBCentralManager や CBPeripheralManager が "watchOS 2 +" となっていて、"4.0+" の間違いなのかほんとなのか謎ですが、いずれにせよ、時計から外部デバイスを操作できるって、ワクワクしませんか・・・?僕はします。またウォッチいじりたくなりました。


Core Bluetoothについて新たに勉強したくなった方にはこちらの書籍がおすすめです。

Core NFC

基調講演でチラッとNFCの文字が見えましたが、新フレームワークが追加されてました。何ができるようになったのか、あとでAPIを見ます。


→ その後FacebookでNoriaki Misawaさんより、以下のように情報いただきました。

CoreNFCはType1-5までのNDEFが読めるようになりました。それだけみたいです。コード書いて試そうとしたら、7じゃないとダメだそうで、それ知る前に6sをiOS11にしてしまったので焼き直しです。。

SiriKit

開発者ドキュメントでは"Lists and Notes"という、NotesやToDoリストを作成・管理するものが追加されてますが、基調講演では他にももっとたくさんできることが増えたって言ってたような。

その他

MusicKit

基調講演でチラッと行ってた気がするけどAPIリファレンスに見当たらないような。。。


いや、Musicライブラリまわりの連携って、実は結構苦しいこと多くないですか?なので、何が新たにできるようになったのかは知っておきたいなと。


→ FacebookでIkuya Omatsuさんより以下のように情報いただきました。

AppleMusicAPI Refならありました

(今日のWWDCのMusicKitのセッションのResourceリンクにもこれが貼られてました)

RPScreenRecorder(ReplayKit)

ReplayKitに追加された、アプリのスクリーンビデオを撮るためのクラス。そもそもReplayKitってそういうものじゃなかったでしたっけ?たまに画面を録画する機能をサクッとつくりたいケースはあるので、以前のと何が違うのか、見ておきたいなと。


→ コメント欄に @k_katsumi さんよりコメントいただいてるのでご参照ください。

SCNCameraController(SceneKit)

何をするものでしょうか?あとで見る。

NEHotspotConfiguration

WiFi関連のAPIが今更新たに公開されるのって、どういう文脈に沿ってるんでしょうか?何にせよ外の物理的な何かと連携するAPIは好物なので、見ておきたいです。

Xcode 9

いろいろ劇的に改善されましたね。

*1:個人的には、ポケモンGoのARはあまりARの良さを活かしているものではないと思ってるので(みんなARモード切って使ってますよね)、あれがARの代表例としていつも挙げられる度にうーんと思ってしまうのですが

「あきらめ」からはじめる英会話 #clem_jp

英語を勉強しているエンジニアやデザイナーのためのミートアップ「CLEM」というのがありまして、本日その第5.2回(5月の2回め?)でLTをしてきました。

(主催のKayokoさんのツイートより写真をお借りしました)

こじらせ続けてきた英語への苦手意識

昨年10月からサンフランシスコの会社でエンジニアとして働き始めたのですが、


英語が話せるから入ったのではなく、英語に猛烈な苦手意識があり、いろんな勉強もしてきたが続かないので、もう「英語を使わざるを得ない環境」に飛び込むしかない、というのが入社を決めた理由のひとつです。

「そうは言っても話せるんでしょー」

と思う人は、以下の録音を聞いてみてください。入社を決めた当時の僕のリアルな英語力が伝わると思います。

※これは会社の人と話してるのではなく、そのちょっと前に「ハッカーパラダイス」というコミュニティに参加した際のスカイプ面談です。


こんな程度の英語力なので、当然英語でのコミュニケーションには恐怖すらありました。会話する機会があっても(「早くこの場から逃げ出したい」)といつも思ってました。

「あきらめる」ことでのブレークスルー

で、そんな僕ですが、いくつかのことを「あきらめる」ことで英会話においてブレークスルーがあったと自分の経験から感じることがあったので、それについて同ミートアップでシェアさせていただきました。



具体的な「あきらめTips」を紹介していますが、要点としては「あきらめることで、挑戦のハードルを下げる」というところです。僕はこれで何年もこじらせた英語への苦手意識からやっと前に進めた感がありました。


どなたかのお役に立てば幸いです!

反応










Swiftの各機能が「なぜ」存在し「いつ」使うべきかを解説した技術書 - Swift実践入門

著者の石川さん、西山さん、およびWEB+DB PRESS plus様より、『Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語』をご恵贈いただきました。


Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
石川 洋資 西山 勇世
技術評論社
売り上げランキング: 5,087


今年の2月に出版されたばかりですが、観測範囲では「Swift実践入門輪読会」「Swift実践入門読書勉強会」といった会も開催されていて、もう世間ではすっかり教科書のような定番の良書として認知されている感があります。

他のSwift本との違い / Appleの公式ドキュメントで十分?

Swiftについて書かれた技術書は既に数多出ています。入門本はたぶんそれだけで本屋のコーナーができるほど出てますし、リファレンス本や逆引き辞典のような書籍もあります。また、Appleの公式ドキュメントも相当丁寧に、サンプル付きでわかりやすく書かれています。


そんな中、本書の存在意義は何かというと...前書きでグッと来た一説を引用します。

Appleの公式ドキュメントをはじめとして、どんな(what)言語仕様があり、それらをどのように(how)使うかに関しては豊富な情報源があります。しかし、それらがなぜ(why)存在し、いつ(when)使うべきかについてまとまった情報源があるとは言えません。本書は、読者のみなさんの「なぜ」や「いつ」を解消することにも主眼を置いています。


そうそう、そうなんですよね。多くのプログラミング言語の解説本って、「なぜそれを知らないといけないのか」「これを知っておくとどういう場面で役に立つのか」かについて述べられてないことが多いんですよ。


その点、本書は前書きにある通り、各章の冒頭で「これを知っておくと開発現場のどういう場面でどう嬉しいのか」ということがシンプルな具体例でわかりやすく書かれています。



たとえば、本書の第8章、「ジェネリクス」の章の冒頭文では、

ジェネリクスとは、型をパラメータとして受け取ることで汎用的なプログラムを記述するための機能です。

とあります。よくある言語の本って、解説これだけで終わっちゃって、さっさと使い方の解説に行ってしまうと思うんですよ。


他言語でジェネリクスという概念に既に触れてたり、C++のテンプレートとかを知っている人にとってはこれだけで「はいはい、あれね」ってなると思うんですが、僕みたいにSwift以前はほぼObjective-Cしか書いたことない人間からすると、「文章としては理解できるけど・・・『型をパラメータとして受け取ることで汎用的なプログラムを記述できる』から何・・・?」ってなっちゃうわけでして。


ところが本書の場合はこの章の最初に、まずはジェネリクスを使用「しない」例をサンプルコード付きで示したうえで、それがジェネリクスを利用するとどうなるか、というbefore / afterを示してくれています。しっかりジェネリクスを学ぶモチベーションを喚起されてから使い方の解説に進める、というわけです。

目次 / 個人的な読み方

本書の目次は大見出し、中見出し、小見出しとかなり詳細に区分けされているのですが、長くなってしまうのでここでは各章のタイトルだけ紹介します。

  • 第1章 Swiftはどのような言語か
  • 第2章 変数、定数と基本的な型
  • 第3章 制御構文
  • 第4章 関数とクロージャ
  • 第5章 型の構成要素 ── プロパティ、イニシャライザ、メソッド
  • 第6章 型の種類 ── 構造体、クラス、列挙型
  • 第7章 プロトコル ── 型のインタフェースの定義
  • 第8章 ジェネリクス ── 汎用的な関数と型
  • 第9章 モジュール ── 配布可能なプログラムの単位
  • 第10章 型の設計指針
  • 第11章 イベント通知
  • 第12章 非同期処理
  • 第13章 エラー処理
  • 第14章 実践的なSwiftアプリケーション ── Web APIクライアントを作ろう
  • 第15章 SwiftからObjective-Cを利用する

詳細な目次は公式ページで確認できます。


著者の一人がAPIKit作者の石川氏なので、第14章から読む人も多いようです。



個人的には、

  • パラパラとめくりつつ「この機能は知らないな」「このへんちゃんとわかってないな」というところを見つけたらその項の「why」や「when」にあたる解説を読む
  • 興味がわけば詳しく解説を読む

という感じで読み進めていきました。

その他

Swiftがバージョンアップしたら?

Swiftは(これまでのところは)毎年のようにメジャーアップデートされていて、まだまだ変化の激しい言語です。本書は現行の Swift 3 ベースに解説されたものですが、2017年秋には Swift 4 がリリースされる見込み。そうなると、本書の内容は古くなってしまいうのでしょうか?


私は依然として価値を持ち続けると思います。言語仕様が少々変わっても、それは表面的な書き方(how)の変更であったり、できること(what)が増えたりといった公式ドキュメントでも補完できる部分であり、各機能がなぜ存在するのか(why)、いつ使うべきか(when)といった核となる考え方自体は変わらないはずであり、本書はその「Swiftの核となる考え方」について解説したものだからです。

Swiftは気になるけどiOSには興味がない

という方も多いと思います。


本書のサンプル/解説ではUIKit等のiOSやmacOSに依存するフレームワークやそのAPIは出てこず、基本的にはSwiftの標準機能とFoundationのようなコアライブラリだけを用いて解説されています。


僕はiOSの人間なのでiOSベースで書かれていたとしても全然嬉しいのですが、最近は「iOSには興味がないけど、Swiftでサーバーサイドを書くことには興味がある」「Swiftという言語自体に興味がある」という声も聞くので、そういった方々にも本書はいいのでは、と思います。

まとめ

以上の紹介でピンと来た方はぜひ手にとってみてください。個人的には超勉強になりました。


Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
石川 洋資 西山 勇世
技術評論社
売り上げランキング: 5,087


Kindle版はありませんが、Gihyo Digital Publishingで電子版(EPUB/PDF)を購入できるようです。


(著者の一人、ishkawa氏にサインをいただきました)