iOSDC Japan 2023に参加&登壇します

iOSDC2023

今年もまた祭の季節がやってまいりました。
早稲田のキャンパスに入ると「帰ってきた」と感じるのは私だけでしょうか?

さて明日9/2はiOSDC Japanのday1。

今年も幸いプロポーザルを採択して頂きまして今回は『正規表現を"微分"する!? 爆速で自作できる正規表現エンジン』という、ややキャッチーなタイトルで話します。
iOSDCで登壇するのは4回目、しかもなんと2年連続で正規表現について話すという事態になりました。
(昨年は『正規表現って結局何なのさ?〜エンジニアのためのコンピューターサイエンス入門〜』でした。)

『爆速で自作できる』と書いて応募したものの、実は応募時点では実装したことすらありませんでした。もちろん理屈としては知ってはいましたが。
採択の通知を受け、慌てて実装することになったのですが…なんと拍子抜けするぐらい簡単に実装できてしまいました。所要時間は30分程度。
今なら5分ぐらいで実装できるでしょうか。

5年前に登壇した、『作ってわかるレンダリングパイプライン CPUで3D描画』でもやはり応募時点で実装はゼロだったのです。
背景の理論がわかっていれば意外と何とかなるものですね。
takatsu.hatenablog.com

ですから今回も理論に重きを置いてしっかり説明した後、どのように実装したのかを解説します。
非常に簡単な理屈ですので、本トークを聞いた後は皆さんお好きな言語で正規表現エンジンを作ることができるようになるでしょう。

タイトルに"微分"とあるため尻込みする方もいるかもしれませんが実は数学的な知識は全く必要ありません。
文字列の連結:「"iOS"という文字列と"DC"という文字列を繋げたら"iOSDC"になる」

文字列から文字の削除:「"knight"という文字列の先頭の文字を削除したら"night"になる」
がわかれば問題なく理解できます。実質誰でもウェルカム。

非常に敷居が低いトークとなっておりますのでぜひご興味がある方は聞きにいらっしゃって下さい。

9/2(土) day1 16:15〜 Track Dでお待ちしています。

iOSDC Japan 2022に参加&登壇してきました

2022/09/10〜2022/09/12に開催されたiOSDCに参加してきました。
今回は初の試みとなるオンライン&オフラインのハイブリッド開催でした。

地方に住んでいるので、交通費と宿泊費を考えるとオンラインで参加するのがリーズナブルではあるのですが、やはりオフライン開催に参加してiOSDCの虜になった身としてはオフライン開催があるのにオンラインで参加するという選択肢はありませんでした。
オフライン参加者の人数を例年の半分程度に絞ったとはいえ、それでも「祭の熱」のようなものを現地で肌で感じられたのが良かったです。

今回も面白いトークばかりでしたが、ベストトーク賞を受賞していた『Xcode が遅い! とにかく遅い!! 遅い Xcode をなんとかする方法』が特に面白かったです。
現在の最新の開発環境も、結局は先人たちの作り上げてきたコードの上に成り立っており、そしてそれを実装したのはやはり人なのだなと妙な感動を覚えました。
fortee.jp


また、今回も幸いCfPを採択して頂けたので私も正規表現の理論について発表させて頂きました。
誰も来なかったらどうしようと毎回直前まで心配するのですが、完全に杞憂でTrack Dが満席になるほど多くの方に聞きに来て頂けました。ニコ生でも多くのコメントを頂けて嬉しかったです。
40分で話せる内容に圧縮したので駆け足になりましたが、ゆっくり見直せば理解できるように資料を作ったつもりです。
本来であれば言語の生成規則や正規文法、そして正規表現よりも表現能力が高い文脈自由言語や文脈依存言語にも触れたかったのですが流石に無理でした。
興味のある方は参考文献の本を参照して下さい。
www.docswell.com


なお、自己紹介の時に触れた「エンジニアと人生コミュニティ」はこちらです。
community.camp-fire.jp
今回はこのコミュニティの方ともお会いできるいい機会となりました。

ちなみに今年も上位に食い込むと意気込んでいたiOSDCチャレンジですが、今回は入力忘れや全角括弧/半角括弧両方を試さず失点などケアレスミスが目立ち、上位に食い込むことはできませんでした。
たまたま運良く11位というラッキー賞でラインストーンバージョンのTシャツを頂けました。

いまだ祭の後の興奮冷めやらず、ふわふわした気分で仕事をしていますがまた来年楽しく皆様のトークを聞けるように、そして自分も新たなトークができるように仕事をしていこうと思います。
初のオンライン&オフラインのハイブリッド開催ということでスタッフの方も大変だったと思いますが、おかげさまで楽しい時間を過ごせました。
参加者の皆様、スタッフの皆様お疲れさまでした。

また来年を楽しみにしております。

iOSDC 2022に参加します&登壇します

今年も祭りの季節がやって参りました。
昨今のコロナ禍により2020年、2021年はオンライン開催でしたが3年ぶりのオフライン(+オンライン)開催です。
オンライン開催もオフラインに特化したとても素敵なイベントでしたが、やはりオフライン開催はテンションが上ります。

というわけでその上がったテンションでプロポーザルをいくつか提出したところ、「正規表現って結局何なのさ?」というプロポーザルを採択していただきました。


やはり今年のWWDCでSwiftの正規表現機能の強化が発表されたこともあって採択されたのだと思います。

2018年「作ってわかるレンダリングパイプライン〜CPUで3D描画〜」
2019年「めくるめくシェーダアートの世界」
以来3回目の登壇となります。

多くのプログラミング言語コマンドラインツール、またエディタの検索に搭載されておりプログラマーには馴染みの深い正規表現ですが、「正規表現とは?」と改めて問われると答えに窮する方も多いのではないでしょうか。
そこで今回は「そもそも正規表現の定義とは何か?」から始め、理論から正規表現を眺めてみます。

興味のある方、ぜひ9/11(日) 14:10〜 Track Dに起こし下さい。お待ちしております。

そして昨年惜しくもBest3入りを逃した(昨年4位)iOSDCチャレンジもまた上位を狙っていきます。
久々のオフライン開催楽しみましょう!!私も楽しみます!!

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応募するつもりです。