iOSDC JAPAN 2018に参加&登壇してきました

f:id:ta_ka_tsu:20180904113923j:plain 2018/08/30〜2018/09/02に開催された iOSDC Japan 2018に参加してきました。

昨年参加し、このカンファレンスの雰囲気にすっかり心奪われてしまった私は、今度はスピーカーとして参加したいと思いCfPを4種5つ出しました。

結局応募締切ぎりぎりまで応募しようかどうか迷っていた「作ってわかるレンダリングパイプライン CPUで3D描画」が採用されました。

なぜぎりぎりまで迷っていたかというと、アイデアとしては考えていたものの応募時点で実装は全く無かったからです。 そのためプロポーザルの最後は「描画させてみます」ではなく「期待通りに描画されるのかを検証してみます」と若干弱気になっています。

できてよかった。

f:id:ta_ka_tsu:20180904114001j:plain というわけで今年は念願のスピーカーネームプレートもGetです。

会場

今年も昨年と同じ会場だったので田舎者の自分も下調べ無しで安心して向かえました。 ただその油断が命取りで、渋谷駅ダンジョンで3回くらい同じ場所を通り、到着予定時刻から30分以上も遅れました。

それはともかく今年も昨年と同様、非常に快適な時間を過ごせました。 延べ800人超の参加者が集う場所で、このような快適な空間を提供するためにスタッフの方がどれほどの活動をされているのかと考えると頭が下がります。

f:id:ta_ka_tsu:20180904230411j:plain 有志の方々だけで運営されているとはとても信じられません。

f:id:ta_ka_tsu:20180904223744j:plain 今年のお昼ご飯もとても美味しかったです。

聞いたトーク

今年もどのトークを聞こうか非常に悩みました。 まぁ実はその悩んでる時間もそれはそれで楽しいのですが。

個々の感想は書ききれませんが、昨年同様とても興味深い内容でした。 15分、30分と限られた時間の中で視覚と聴覚からものすごい情報量が流れてくるので自分はただただキーワードのメモを取るのが精一杯でした。今もメモとスライドを突き合わせ、内容を見ながら咀嚼中です。

何より皆さん知識も豊富だがトークが本当に上手い。

結局私が聞いたレギュラートークは以下の通り。

前夜祭
  • ARKitのための3D算数
  • キラリと光るテクニック。アプリをデモするときの心構え
  • iOSエンジニアの為のgrpc-swift入門
  • 再利用可能なUI Componentsを利用したアプリ開発
  • ツールとして利用するUIテスト
  • アルゴリズムを通じてよりよいアプリを
day 1
  • 複数のライブ映像を同期再生するのが大変だったので知見をお伝えします
  • MicroViewControllerで無限にスケールするiOS開発
  • 安定したチャットを実現するためのアプリとAPI設計
  • grpc-swfitを使ってiOSアプリでも快適なgPRC通信を行う
  • 肥大化しがちなアプリの起動経路を整理する
  • iOS WKWebViewの魔改造
  • Swiftコードから状態遷移図を自動で生成し、継続的にメンテナンスしやすくする
  • 差分アルゴリズムの原理について
day 2
  • iPhoneが数秒おきにクラッシュするんだけど!
  • 詳解Fastfile
  • Depth in Depth
  • ARKit Maniacs
  • Synchronized iPhones!
  • iOSアプリ設計パターン入門 執筆陣によるトーク(アンカンファレンス:正式名称不明)
day 3
  • TextKitから表現が広がる
  • ライブ配信アプリのアイテム再生をMetalで実装する事になった話
  • AutoLayoutエラー診断所 〜発狂しないためのデバッグ手法〜
  • (登壇)

この自分の発表の後、LLDBの話を聞こうか圏論の話を聞きに行こうか直前まで迷っていましたが、緊張の糸が緩んだのでしょうか。しばらく放心状態になっている間に結局時間が過ぎ、どちらも行けませんでした。勿体無い。

登壇

というわけで最終日、発表当日。実は偶然にも誕生日でした。

自分で言うのもなんですが、それなりにいい出来だったのではないかと思います。

3D描画の仕組みを解説し、Swiftでどのように実装したかを簡単に説明しました。 そしてデモでは実際に自作のパイプラインで色々なオブジェクトを表示し、簡単な3Dグラフィック表現を解説しました。 使ったモジュールはFoundationとsimdのみです。

リクエストが有ったのでコードは少し整理した後、近日中にアップロードする予定です。

(2018/09/05更新:GitHubに公開しました。リリースビルドしないと遅いです。)

f:id:ta_ka_tsu:20180904225417g:plain

speakerdeck.com

反省点

タイトル

まず、タイトルに「レンダリングパイプライン」は使わないほうが良かったなと後悔しています。 CfP応募時の注意書きにも書いてあった気がしますが、やはり一般的でない用語は避けるべきでした。

申し訳程度に「CPUで3D描画」とは付けていましたが、よくよく考えるとそもそも3D描画処理がどこで行われているかに関心がある人はそれほど多くないと気づきました。 ARKitもSceneKitもMetalもAPI、つまり結局はインターフェースなので実装側がどうなっているかは別に意識しなくても良いわけです。

まさにお2人のおっしゃる通りで、 「3D描画エンジンを作る」 「SceneKitなどを使っていない」 ことを明確に主張すべきでした。 そのほうが「えぇ!?一体どうやって!?」と、好奇心を刺激でき、もう少し人を集めることができたかもしれません。

デモアプリ

もう一つの反省点は一言で言えばデモアプリに関して注意が足りなかった点です。 当日の朝、接続チェックを行った時点で実機で動作することを確認し、QuickTimePlayerで実機の画面をスクリーンに表示できることも確認しました。これでもう準備万端だと思い込んでいました。

が、発表直前にデモ用アプリを起動すると クラッシュしました 。それはもう血の気が引きました。 開始時間も迫りスタッフの方も緊急事態を察知したのか「どうしました?」「デバッグログ見たほうがいいかもしれません」と色々助言を下さいましたが、さすがにデバッグしている時間は無いと判断。 結局シミュレーターでデモを行うことにしました。

「シミュレーターで動作しているということはMetalを使っていない証拠です」

とか、苦し紛れの言葉が出てきましたが、 OpenGLESや上位レイヤーのSceneKitならシミュレーターでも動作させられる ので実は説得力はありません。 せめてパイプラインの途中でブレークポイントを仕掛けて、生成されたフラグメントの中身を見てみるぐらいの機転が利けばよかったのですが。

で、肝心のクラッシュした原因なのですが、メモリの使いすぎです。

そうです。ご存知、 Message from debugger: Terminated due to memory error です。

デモで使用した*.objファイルのサイズは大したことは無いのですが、ファイル読み込みから頂点列を生成するにはそこそこ時間がかかります。 タップして数秒待ってモデルが表示される、というのは見る人にとってもストレスですし、なにより発表時間を無駄に使うことになります。 そのため、起動時にデモで使用する全てのモデルを読み込みあらかじめ頂点列を作っておいて、UITableViewをタップして切り替える、という方針を取ったのですがこれが良くありませんでした。

つまり、当日の朝に接続チェックをした時点ではたまたまギリギリ動いていただけで、本番直前ではOSに「メモリ使いすぎ」と強制終了させられていたのです。

実は、当日の午前中 @noppe さんの発表内で

*.movファイルを画像のシーケンスにしてUIImageViewで表示する方法を試した

→Message from debugger: Terminated due to memory error

という箇所があり、「わはは、あるある。」などと聞いていたのです。 実際、その時の私のツイートがこちらです。

そのまさに数時間後、 それをデモアプリで発表直前にやらかしたわけです。 あぁ顔から火が出るほど恥ずかしい。メモリ使用量ぐらい確認しとけよ、お前一体何年ソフトウェアエンジニアやってんだよ、と。

まぁそんなわけでもうお恥ずかしいとしか言いようが無いのですが、今後の戒めのために晒しておきます。

最後に

今年はスピーカーとして参加できました。発表準備も大変でしたが、スピーカーとして参加できて本当に良かったと思います。 去年より顔見知りの方が増えて、スピーカーディナーでも懇親会でも絶え間なく誰かと話せました。今年は3Dプログラミングをやっている人ともたくさん知り合うことができました。

また来年も参加したいと思います。

なお、懲りずにまたCfP応募するつもりです。

iOSDC JAPAN 2018に登壇します!&おまけ企画

早いもので、この宣言からもうすぐ一年近くになります。

というわけで宣言通りiOSDC JAPAN 2018のCfPに応募しました。

せっかく応募するならできれば採択されたい、ということで「下手な鉄砲も数撃ちゃ当たる」作戦を敢行。 特に得意分野もない中で、4つのテーマを何とか絞り出し応募しました。そのうち1つは15分枠とLT枠で同じものを出したので計5つです。

ところが最終的に応募総数は540にもなっていたので、撃った弾数が足りなかったか…と半ば諦めていましたが、なんと!採択されました!

テーマは「作ってわかるレンダリングパイプライン CPUで3D描画」です。

実は応募したテーマの中でも締め切りギリギリまで提出しようか迷った挙げ句、半ばヤケクソで応募したCfPです。出してみるものです。 try! Swift 2018 After Talksに続いてまたもやレンダリングパイプラインに関するテーマです。 もはやパイプラインの人とか呼ばれかねません。

実を言うと、自分がすごく聞きたいと思っていたトークの裏になってしまいました。 が、くよくよしていられません。後日に例年通り超絶クオリティの編集動画を観ることができると期待して切り替えます。

なにより30分枠。そんなに長く喋ったことはこれまで一度もありませんが、採用されたからには全力を注ぎます。

内容

Metalを始め、3D描画APIに備わっているレンダリングパイプラインという概念について説明します。 また、レンダリングパイプラインがどのような処理で構成されているのかについて、各処理の入出力に着目しながら細かく解説します。 各処理において随所に凝らされた工夫についても解説します。 そして実際にその仕組みをSwiftで実装し、CPUだけで3D画像を描画させてみようという試みです。

こんな人向け

  • 3Dプログラミングに興味がある方
  • 3D描画APIの仕組みが知りたい方
  • Low-Levelの仕組みが好きな方
  • 実用的でなかろうが面白ければ良し!という方

興味のある方はぜひ聞きに来て下さい。小躍りして喜びます。

9/2(日) 14:20〜 Track Bで僕と握手!

おまけ企画

iOSDCとは全く関係ないのですが、最近ぼんやりと圏論の勉強してみたいなー、などと思っていたら先日こんなことをやらかしました。 f:id:ta_ka_tsu:20180817002613j:plain 買ったことを忘れて再度買うという大失態。忙しいからと言って積読はダメですね。買ったら読まないと。

せっかくなので、iOSDC期間中(8/30〜9/2)に私を見つけて 圏論の本下さい」 と声をかけて下さった方にこの本をプレゼント致します。 興味のある方はネームプレートのアイコン(はてなのアイコンと同じです)を頼りに探してみて下さい。私のトークを聞く聞かないは全く問いません。

もちろん 先着一名様限り ですが、私の顔を知っている方はごくごく少数のはずですので、最終日でも可能性は充分あると思います。

ぼっち参加なので、できるだけ知らない方ともお話ししたい&少しでも多くの方に顔を覚えて頂きたい、という意図です。

また、9/2 15:10 Track Cでは@inamyさんによる圏論とSwiftへの応用というトークもあります。予習復習にいかがでしょうか?

それでは当日を楽しみにしています!

try! Swift Tokyo 2018に参加してきました&try! Swift 2018 After Talksに登壇してきました

3月1〜2日に開催されたtry! Swift 2018に参加してきました。
f:id:ta_ka_tsu:20180331144517j:plain

今回はスポンサーブースがとても広くて驚きました!
f:id:ta_ka_tsu:20180331144514j:plain

登壇者に直接質問ができるスペースAsk the Speakerのコーナーが素敵でした。
ホワイトボードがあるのもいいですね。
f:id:ta_ka_tsu:20180331144521j:plain


今年の参加者は800人だったそうです。
今年の印象としてはSwiftの言語としての側面に加えて、SIL/Clangモジュール/ASTなどSwiftを支える技術の話が多かった印象があります。
3日目のワークショップでもOpen Source Swiftが大人気だったようですね。

また、ネットワークフレームワークであるSwiftNIOや超解像SRCNNKitの当日オープンソース発表も熱かったです。
全てのトークを理解し消化できたわけではありませんが、どのトークも登壇者の方々の開発にかける熱量を感じる発表ばかりで、あっという間に時間が過ぎてしまいました。

中でも個人的に一番インパクトがあったのが2日目最後のKrzysztof Zabłockiさんのトーク
開発効率や開発経験の改善や向上に関するプロセスの徹底的な追究が圧巻でした。

そしてAfter Partyはこの人数!
f:id:ta_ka_tsu:20180331144525j:plain

多くの開発者の方々と交流し、技術的な話をしたり皆さんの開発したアプリを見せてもらったりできました。

気が早いですが今から来年が楽しみです。

f:id:ta_ka_tsu:20180331170818j:plain

Yes, I did!


さて、実はLT枠に応募していたのですが残念ながら不採用。
が、幸いにも翌週のtry! Swift After Talksにお声をかけて頂きまして、登壇する機会に恵まれました。
tryswift-tokyo-after-talks.github.io

3Dプログラミングの基礎概念であるレンダリングパイプラインについて解説しました。

Swiftに全く関係のない話で、なぜこの内容で応募したのか我ながら謎です。
しかし関係ないながらもやはり発表してみると多くの方に声をかけてもらえたため、懇親会でも沢山の方々と交流できたので応募してよかったと思っています。

今後も積極的に応募していきます。