iOSDC 2019に参加してきました

2019/09/05〜07まで2.5日、iOSDCに参加してきました。
(iOSDCのCはカンファレンスのCなのですが、個人的にはiOS開発者のお祭りだと思っています。)

参加は今年で3回目、昨年に引き続き幸いにもプロポーザルが採用されたため登壇2回目です。

というわけで今年もSPEAKERチケットGETです。
f:id:ta_ka_tsu:20190908164858j:plain

昨年まではLT&15分トーク&30分トークという構成だったのに対し、今年はLT&30分トーク&60分トークという構成だったためか、昨年より開催日が1日少ないことを考慮に入れてもあっという間に終わった印象です。
1つのテーマについて深い内容でじっくり聞くことができ、慌ただしくトラック移動することも少なかったので良かったと思います。
その一方で、聞けた発表が例年より少なかったのは少し残念でした。うーん、アンビバレンツ。
(3.5日で30分&60分だと丁度いいかもとか無責任なことを言ってみる)

聞きに行ったセッションの中でも特に印象が強かったものを以下にいくつか。

スクリーン配信機能の実装が大変だったので知見をお伝えします。
非常に情報がレアなフレームワークReplayKitに関する話が聞けたのが興味深かったです。
動画というただでさえ情報量が多く、なおかつリアルタイム性の求められるデータを、さらに限られたメモリの中でどう扱うかという工夫を聞くことができて面白かったです。
携帯端末という計算リソースの限られたプログラムではこのようなリッチなコンテンツをいかにして自然に見せるかという知見はとてもためになります。

Advanced Segue (2019年のSegue事情)
著書である「詳解UIKit」「よくわかるAuto Layout」で散々(勝手に)お世話になった所さんのセッションです。
私は可能であればGUIでやってしまいたい派なのでSegueもきっと私の知らない便利な使い方があるはず、ということで聴講しました。
特にCustom Segueは使ったことがなく、static table viewの特定のセルにだけ特定の動作をさせたい時にtableView(_:didSelectRowAt:)内でindexPathのsection/rowを条件分岐して書くみたいなコードや、肥大化するprepare(for:sender:)といった常々ブサイクだと思いながらも仕方なく書いていたコードを回避できると知れて良かったです。

クロマキー合成を使い透過動画をAR空間に表示する
こちらも携帯端末の限られた計算リソースの中で動画、AR、クロマキー合成というヘビーそうな処理をどう行っているのか知見を聞きたかったので聴講しました。
実際に動画がクロマキー合成されてARで再生されるデモのインパクトは想像以上で、ユーザーに強い印象を与えられるコンテンツ作りへの夢が広がりました。

iOSアプリに「意識」は宿るのか?ディープラーニングの先にある人工知能(AI)
60分のセッションのうち1割も理解できていないと思いますが、脳の仕組みを模倣したモデルでパラメータを変えてセルオートマトンのパターンが有機的に変化するのは見ていて面白かったです。
何を以て「意識」とするかの定義は難しいですが、大変興味深いセッションでした。

今こそwatchOS
かつてApple Watchには「小型で高機能なコントローラー」としての役割を期待していました。watchOS1、watchOS2の頃に実際に開発をして「小型だがそれなりのことしかできない時計」以上の評価ができず、もう開発することはないと思っていました。
が、知らない間にソフト面ハード面で強化を果たし、SceneKitでぐるぐる3D描画が動作するのを見て、もうあの頃のAppleWatchではないのだなあと思い知らされ、まさに「今こそ」という可能性が見えました。
可能性が見えたら帰りに丸の内で買って帰るという旨のツイートをしましたが、すみません、数日後にAppleの発表があるのを忘れていました。新しいApple Watchが出てからにします。



「聞きたかったけれども諦めたトーク」も沢山あるのですが、ありがたい事にiOSDCは毎回後日YouTubeで動画が公開されるという安心感があります。
そのため「ぜひこれだけはライブで聞きたい」というものを重点的に選んで聞きに行きました。
ぜひライブで聞きたいというトークが集中している時間帯は流石にギリギリまで悩みましたが、それも一つの醍醐味ですね。


さて、今年初めての試みであるiOSDCチャレンジという随所に散りばめられたトークンを探すという企画は割と本気で上位を狙いに行くつもりでいました。
あらかじめスポンサー様のブログ、公式Webページをチェックして見つけたトークンを集めておき、受付とほぼ同時に入力しまくるという作戦で初日のしばらくの間は1位でした。
が、その後一向にトークンが見つけられず順位がズルズルと後退、そのまま11位まで転落しましたが「キリ番ラッキー賞」ということでTシャツを頂けました。結果オーライです。
f:id:ta_ka_tsu:20190908170511j:plain

Web黎明期に一時期流行ったWeb脱出ゲーム的なノウハウ(?)を駆使し、
・背景と同じ色の文字を全選択で浮かび上がらせる
・HTMLソースを表示し、ブラウザにレンダリングされない文字列を探す
といった方法が思い通りハマったのには懐かしさを感じました。

一方、絶対トークンが隠されているはずだとアタリをつけていたにも関わらず公式パンフレットのトークンを見つけられなかったのは悔しいと言うよりも改めて老眼を痛感して少ーしだけ切なくなりました。
(これ↓)
f:id:ta_ka_tsu:20190908164904j:plain
f:id:ta_ka_tsu:20190908170653j:plain

突然来ますからね、老眼。皆さんも目は大切にしましょう。


当たり前ですが皆さん様々なバックグラウンドを持ち、様々なアプローチで技術に取り組み、様々な技術分野での知見をお持ちで毎度のことながらとても刺激を受けます。
同じトークを聞いていても他の方の質問でそういう視点もあるのか、と気付かされることも少なくありません。
普段仕事をしているだけでは絶対に交流できない方々と交流できるこのような機会というのは何事にも変えられない機会だと思います。
面白そうだけど自分の仕事には関係なさそうだし…という方にこそ参加してみてほしいイベントです。

自分自信も、このようなイベントが無かったら片田舎で限られた人とだけ仕事をし、仕事に必要な限られた技術領域だけで生活をするためだけにプログラミングをして、そしてそのうちプログラムの楽しさを忘れていったかもしれません。
プログラミング・エンジニアリング・知識の吸収って本来楽しいものですよね。
そういう意味で私の人生に影響を与えたイベントだといっても過言ではないです。

最後に毎年協賛下さっているスポンサー様、ありがとうございます。
スタッフの方々、スムーズな運営で毎年とても楽しく快適に過ごさせてもらっています。お疲れさまでした。
発表者の皆さんも聴講者の皆さんも本当に気さくに交流させてもらってとても刺激になりますし、何より楽しいです。ありがとうございます。


来年も開催されるのを心待ちにしております。
またまた懲りずにCfP出します。

あと「アウトプット大事」というのはわかってはいたものの今回本当に痛感しましたので、できるだけアウトプットしていくようにします。

iOSDC 2019でシェーダーについて話してきました

というわけでiOSDC 2019にてシェーダーアートについて話してきました。

speakerdeck.com

WebGLやUnityでシェーダーをやっている人は多いんですが、iOS、とくにMetalでやっている人はあまり見かけないので何も知らない人を想定して発表しました。

そのため、基礎となる構成要素を重点的に説明した内容となり、タイトルとは裏腹になかなか地味なスライドとなっていますがレイマーチングの説明でかねたさん(@kanetaaaaa)のシェーダーを利用させて頂けたおかげでなんとか見栄えするものになりました。
会ったこともないのに「作品を発表に使わせて下さい」という図々しいお願いに快く応じて下さったかねたさんに感謝致します。

人生初の60分トーク、なおかつサンプルを山程書かなければいけない内容だったため準備が超大変で何度か心が折れそうになりましたが、8月に行われたスピーカーディナーで何人かのスピーカーの方々に
「聞きに行きます」
「楽しみにしてます」
と言って頂けたおかげでなんとか当日を迎えられました。

昨年は終盤の発表だったのでドキドキしながら他の方の発表を聞いていましたが、今年は序盤の発表だったため心安らかに他の方の発表を楽しんで聞けています。
iOSDC残りあと1日というのが信じられませんがゆっくり楽しみたいと思います。


なお、心残りは「頭おかしい」と言わせられるものが作れなかったことです。(去年は2人ぐらいに言われた)
来年また改めて頭おかしいものを引っさげてプロポーザルを出そうと思います。


P.S.
プロポーザルが採択されてから約二ヶ月、家や子供のこと任せっぱなしでスマン&引き受けてくれてありがとう。>嫁さん

iOSDC 2019でシェーダーアートについて60分話します!

なんだかんだで1年ぶりのブログです。
今年もiOS開発者の祭典iOSDCがやってきます。

今年も幸い登壇させて頂けることとなりました。

なんと今年は60分枠が登場です。
気がつくとなぜかその60分枠にも応募しており、そのプロポーザルが通ってしまいました。
(昨年LT枠と15分枠で応募して採用されなかった内容の60分版なのでまさか採用されるとは思ってもなかったのです)

というわけで、今年は
「めくるめくシェーダーアートの世界」というテーマで60分話します。
(※スターをつけて頂けると心の力が16回復します)
fortee.jp

  • シェーダーアートとは何か?
  • どうやって動作しているのか?
  • iOSでどう実装するのか?

に始まり、Metalのシェーダー言語であるMSLの組み込み関数やシェーダーアートを構成する基本的なテクニックを紹介しようという試みです。
私自身が熟練者ではない上に、シェーダーアートを知らない方や初心者向けの内容ですので、シェーダーの発表としては簡単な内容になります。

簡単とはいえこんなものが作れるようになります。

f:id:ta_ka_tsu:20190903230207p:plain
f:id:ta_ka_tsu:20190903230219p:plain

また、カメラの入力を利用するとこんな事もできます。


ピクセルに対して色を決めるだけ」というこの上なくシンプルな仕組みとは裏腹に、非常に奥深い世界です。
普段とは全く違うプログラミングの世界の一端をご紹介しますのでご興味のある方はどうぞ。

2019/09/06(金) 10:50〜 Track Dでお待ちしております。

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

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