iOSDC2019に登壇してきました

2019年9月5日〜7日に早稲田大学キャンパスで開催された「iOSDC Japan 2019」という技術カンファレンスで登壇してきました。

fortee.jp

 

f:id:kenmaz:20190923000008j:plain


発表内容としては、昨今のモバイル決済アプリ開発を取り巻く社会の状況や法律に関する話から、私がmerpayの開発で携わったApplePayやコード払い関連の技術詳細、そしてメルカリとの統合についての内容を話してきました。

2年前のiOSDC2017でもアイドル顔画像認識のテーマで登壇しましたが、前回に引き続き今回もあまりSwiftやiOSアプリ開発そのものではなかったので、こんなので大丈夫かなーと思いつつ、とはいえ採択されたわけだし、ってことで、merpayに入って1年半くらいで得た知識や経験をなるべく詰め込んだ30分にしたつもりでした。

最終的にはたくさんの方に聞いていただき、トーク後のAsk the Speakerのコーナーでも同じくFintech系のエンジニアや前職・全前職関係の方々といろいろとお話させていたくことができました。

f:id:kenmaz:20190923000418j:plain

自分の登壇時間以外は以下のセッションに参加しました。

fortee.jp

fortee.jp

fortee.jp

fortee.jp

fortee.jp

 

特に稲見さんの「Swiftプログラミングと論理」では、様々な理論をSwiftで表現するというテーマで、かなり難しかったけど非常に興味深かったです。

また @hak & @tomzoh のトークは「ゲーム機の歴史:ハードウェア、ソフトウェア、演出」という雑談トークみたいな感じで、これまたiOSもSwiftも全く関係ないおっさんホイホイてきなトークでしたが面白かったです。Youtubeに動画も上がってたので、通勤時に聞きながら復習しましたが完全にrebuild.fmでしたw

www.youtube.com

トークの中で、ファミコンの光線銃はブラウン管の走査線を見てそのタイミングで画面上のどの位置を狙っているのか判別している、といった動作の仕組みを解説がありました。ふと自分が中1の頃遊んでたスーファミ版のスーパースコープはどうだったかな・・と調べてみると、そっちは別途テレビの上にセンサーを取り付ける方式のようで、また別もののようでした。

www.youtube.com

こういう技術的昔話ってのはおもしろいですねー。

 

というわけで何の話だったかわからなくなってきましたが、いろんなトークも聞けて色んな人ともお話もできて、良いイベントでした〜。また来年!

 

当日の写真は以下から転載しました。

photos.app.goo.gl

 

宣伝

今回の内容と同様or少し変更した内容で、9月26日の merpay Tech Talk for iOS Engineerというイベントでも話ます。興味のある方がいましたらぜひ〜

mercaridev.connpass.com

 

 

 

iOSDC2019に登壇します

こんにちは@kenmazです。2019年9月5日〜7日にかけて開催されるiOSの技術カンファレンス「iOSDC2019」で「モバイル決済アプリの作り方」という内容で発表をさせていただきます。

私の出番は、9月7日(土)の11:20〜から30分間、300人収容可能なTrack Aホールです。

私は2018年6月から株式会社メルペイで働いています。今回のトークは私がiOSエンジニア・モバイル決済アプリ開発者として、実際に開発に携わった経験が元になっています。

 

以下のような方はぜひお話を聞きに来てください。

 

- モバイル決済アプリを構成する技術要素について気になる人

- QRコードの中にはどんなデータがはいってるのか気になるひと

- Apple Payの仕組みが気になるひと

- 今まさにXXXPayを開発している人

- XXXPayをこれから開発しようとしている人

 

また〇〇Payとか△△Payで働いている方々いらっしゃいましたら、いろいろお話させていただきたいです。

 

資料の内容をすこしだけ貼っておきます。

f:id:kenmaz:20190905143719p:plain

f:id:kenmaz:20190905143743p:plain

f:id:kenmaz:20190905143843p:plain

f:id:kenmaz:20190905143836p:plain

f:id:kenmaz:20190905143840p:plain

f:id:kenmaz:20190905143832p:plain

それでは会場で会いましょう!

2018振り返り

妻の実家から帰ってきて落ち着いたのでいまさら2018年をふりかえり

 

大きい話題としてはこのへん。

転職

5年ほど勤めていたDeNAをやめてメルペイに転職しました。事業内容、環境、待遇もよく日々楽しくやっています。引き続きiOSのコードを書いています。あと出張で初めて中国・上海に行った。

登壇

2018年の登壇2件については、たまたまいいタイミングでいいネタに取り組むことができて、NYCにも招待していただいて、運が良かったなという感じです。

英語

NYCで長尺の英語プレゼンをしたり、仕事上必要だったりってことで、英語をぼちぼち勉強しています。オンライン英会話をやったり、会社の英語話者チャットランチに参加したり、同僚と喋ったりと、コツコツやっています。

子ども

小1と幼稚園年少の女の子2名を育てています。順調に成長しています。いまのところパパ、パパ、という感じでなついてくれていますがさていつまで付き合ってもらえるのでしょう・・

AnimeMaker

かれこれ8年くらい個人でコツコツ運営しているAnimeMakerというサービスなんですが、地味に月間500万PVくらいまでに成長しており、月間収益も自分が新卒1年目の頃の月収くらいには成長してきました。サーバー代(ほとんどCloudFront代)も馬鹿にならなくなってきたので、今年の確定申告のタイミングで、青色確定申告だか、法人登記だかをやったほうがいいのではないかと思い始めてきています。事業買い取るよみたいな誘いもあるんですが愛着もあるので、2019年も引き続き運営していきます。DataDogやDockerとも仲良くなれたのはAnimeMakerのおかげ。

2019の豊富

まずは、とにかくメルペイで作ってるプロダクトをちゃんとローンチして改善して成功させたいなあという気持ちです。その他の活動については、去年は正直登壇ですごくエネルギーを使ったので、今年はまたいろいろ知識を蓄えたりAnimeMakerを育てたりしていきたいです。

🍑

🍑

🍑

🍑 

2018年の推し事まとめ(本題)

今年は有安脱退が衝撃的でした。ミュージカル、青春ツアー千葉公演、あたりが満足度高かったです。2019年もやっていくぞ

try! Swift 2018 New York で登壇してきました

f:id:kenmaz:20180905123525j:plain

2018年9月4日〜5日にニューヨークで開催された try! Swift 2018 New York に登壇してきました。25分のトーク+25分のオフィスアワーで質疑応答、というのが私に与えられた枠でした。トーク内容は前回のtry Swift Tokyo の5分間LTで発表した超解像+CoreMLの話のロングバージョンです。

www.tryswift.co

発表資料は以下

speakerdeck.com

動画もそのうちYouTubeに上がると思います。 

いまは空港で帰りの飛行機待ちです。時間があるので忘れないうちに、時系列順で起きた出来事、行ったこと、思ったことを書き綴ります。面白かったセッションは最後に列挙します。

2018-04-04 Natashaからの招待

3月に行われたtry! Swift Tokyoが終わって数週間後に主催者のNatasha から9月のニューヨークで話さない?と招待が来ました。おそらくTokyoでのLT発表がそこそこウケた+英語での発表だった、というあたりが招待された理由なのかなと思います。発表内容については、できればTokyoでのLTの発表内容のロングバージョンがいい、という要望がありました。

ちょっと悩む

NYCで登壇できるチャンスはそうないので即答でOKと言おうかと思ったけど、ちょっと悩みました。メルカリへの転職の選考が進行中だったからです。このとき取りうる選択肢としては以下のようなものがありました。

  • (A) 転職しない + 登壇する
  • (B) 転職時期を9月以降にずらす + 登壇する
  • (C) 転職する + 登壇しない
  • (D) 転職する + 登壇する

 まず(A)について。そもそも超解像についてはほぼプライベートの時間を使って取り組んでいましたが、前職のマンガアプリ開発との親和性が非常に高い。DeNAにこのまま留まって業務と絡めてより知見を深めつつ、しっかり準備した上で満を持してNYCで登壇する、というのが多分一番安牌な選択だったかなと思います。

とはいえ、そこそこ考えた末、転職をしようと思っていたわけで、別の理由でそこにストップを掛けるってのはどうかなとも思いました。ってことで(B)のプランも浮かびましたが、なんというか、さすがにいろいろ多方面に不義理な感じがしたので、これは選択肢から外しました。

というわけで転職はすると決めたのですが、転職してあまりフィットしなかったりいきなり激務になったりして全然登壇準備ができなかったらどうしよう、という不安が湧いてきました。しかも今回はフル英語での発表+質疑応答なので、そっち方面の準備もしっかりする必要があります。なので(C)もちらっと頭に浮かんだのですが、これは流石にせっかくのチャンスなのにもったいない、ってことで、多分最もタフな(D)を選択しました。

誰か(誰だったかな?)が「迷ったら面白そうな方、一番タフそうな方を選べ」ってことを言っていて、これまでも度々その言葉に従ってきましたが、今回もその言葉に従うことにしました。
社外発表は社としても推奨しているので、本業と折り合いをつけて業務中に作業してもいいよ、と前もって聞いていたので、まあなんとかなるでしょう、という気持ちで、Natashaに承諾メールを返信しました。

2018-05 有給消化期間

無事メルペイへの転職がきまり、5月はほぼ1ヶ月有給消化してました。転職後はきっとバタバタするので、この期間にガガッと準備を進めてやるぜと意気込んでいました。まずテーマ決めからはじめましたが、このとき気になっていたのが以下の論文です。

[1708.00853] Audio Super Resolution using Neural Networks

ResNetを使って音声データに対して超解像するぜという手法についての論文です。こいつをCoreMLでうまくiOSバイス上で動かして、「はい、画像を超解像できることがわかりましたね。では画像だけですか?いいえ、音声に対してもできます!フー!!!」みたいな感じで発表できたら盛り上がるやろな、と思って早速調査を開始しました。で、結果としてはこれは失敗に終わりました。かなりハマりつつもなんとか動くものができたわけですが、処理があまりにも重すぎて実用に耐えない感じになってしまったからです。それ以前にCoreMLに変換できるようにKerasで実装する部分でかなりハマったりして、なんかゴニョゴニョやっているうちに5月が終わってしまいました。この期間は発表準備の他にも、個人プロジェクトとして長年運営しているAnimeMakerのサーバーサイドをAWSに移す作業もしたりしてて、発表の準備作業は実質フルで8日間くらいの稼働だったかな。

2018-06 ~ 2018-09 メルペイでの業務開始+発表準備

6月からメルペイの仕事が開始しました。入社後から2つのプロジェクトに関わらせてもらってるのですが、とっても楽しくて6,7月はあまり準備作業はやってなかった気がします。さすがに8月もそろそろ近づいてきた段階でやばいなと思い、業務と平行して発表準備を進めました。

英語との格闘

メルカリには英語力向上プログラムとして、DMM英会話、英語話者との週に一回のチャットランチ、専門の先生とのレッスン、などなどが備わってるのでフル活用することにしました。なんと言っても僕の英語力はひどくて、たとえば「ABC」のことをこれまで「エービーシー」と発音してましたが、じつは「スィー」だということを知ったのがこの8月末です。妻も引くくらい知識がぽっかりと欠如している部分があるのです。あとチームメンバーも半分くらい英語話者エンジニアなので、彼らとなるべく英語で話すように心がけてました。でもやっぱり難しいし、聞き取るのが特に難しいです。

2018-09-02 いざ出発

9/2から5泊7日でいよいよ出発。羽田空港10:30ころ発。旅費とホテル代は主催者持ち。自腹でANAプレミアムエコノミーにアップグレードしておいたおかげか、ずっと機中でプログラミングしていたおかげか、13時間のフライトもあっという間でした。JFK空港に到着後はsimカードや両替はスキップしていきなりタクシーに乗り込みました。これがちょっと失敗で、イエローキャブ?っていうんですかね、運転雑だし、エアコン効いてないし、なんか怖いし、ドル現金持ってないし、オフラインだし、ちゃんとホテルに到着するだろうか?という不安とともに30分くらいでホテルに到着。

f:id:kenmaz:20180902115433j:plain

タクシー

Yotel NewYork

スピーカー勢はみんなここに泊まるみたいです。部屋にあった案内をみると東京のカプセルホテルに着想を得たホテルらしく、狭くはあるがクリーンで機能的、ってのが売りのホテルのようです。非常に快適でした。

f:id:kenmaz:20180902123835j:plain

ホテルの部屋

タイムズスクエア

ホテルにチェックイン後は歩いて10分くらいのところにあるタイムズスクエアへ。でっかいLEDがビルの壁にびっしりあったり、人混みでごった返していたり、渋谷センター街あたりの雰囲気がありました。京都のような碁盤目にそった町並みで、ビル群はどれも巨大で大規模な丸の内のよう。屋台のブリトーを食ってストリートパフォーマーを眺めたあと、AT&Tに行ってSIMカードをゲット。2GBで$25。

f:id:kenmaz:20180902141917j:plain

タイムズスクエア。裸のおっさんが集会してる

2018-09-03

2日目は午後にtry Swiftのワークショップがありますが、それまではフリーなのでちょっと観光。

MoMA

ホテルから歩いて途中ニンテンドーストアによりつつ、MoMA ニューヨーク近代美術館に到着。ゴッホやアンディー・ウォーホルなどが展示されてました。

f:id:kenmaz:20180903112529j:plain

アンディー・ウォーホル

f:id:kenmaz:20180903110601j:plain

ゴッホ

f:id:kenmaz:20180903111631j:plain

ルネ・マグリット

Appleストア巡礼

その後はセントラル駅内にあるアップルストアへ訪問。立派な駅の建物の二階部分がまるっとストアになってて荘厳な雰囲気のストアでした。

f:id:kenmaz:20180903125648j:plain

奥の二階部分が全部アップルストア

try! Swift Day0 ワークショップ

僕がうけたのは暗号通貨+iOSというテーマのワークショップでした。ブロックチェイン、イーサリアム、スマートコントラクトといった概念の説明から、実際にイーサリアムフレームワークを使ってアプリを作ってみようというワークショップでした。なんとなくわかったけど、こっから更に踏み込んでやろうか、という気にはまだなれてない。ちなみに会場は TANOOKI LABSという会社のオフィス。TANOOKI = 狸ですって。TANUKI、じゃないんだね。
ちなみにここでサンフランシスコで働いている keitaitok と初めて出会う。日本語が通じる!

f:id:kenmaz:20180903153338j:plain

ワークショップ会場

スピーカーディナー

ホテルに戻ってスピーカーディナーに参加。ここで@d_date@satoshi(と初めて合流。@Satoshiとは実際に会って話すのはほとんど初めてな気がする。そして同じメルカリに勤める@JonBottとも合流。彼はKotlinのWorkshopの講師として参加していたんだけど、会場のネットワークの不調で1時間ほどWorkshopが中断しちゃったとのこと。ちなみに今回は2回もブロードウェイ・ミュージカルを見たんだけど、Jonに強くオススメされたからです。ほかにも主催の@natash、インドから来た@Gopal、台湾からきた@Audreyコロラドから来た@Tomたちとお話をした。

f:id:kenmaz:20180903192805j:plain

スピーカーディナー

2018-09-04

朝起きると軽い頭痛だったので薬を飲んで凌ぐ。時差ボケで変な時間に目が覚めてちょっとつらい。時差ボケは3日くらいでだいたい治りました。

try! Swift Day1

いよいよメインイベントの初日がスタート。東京のときは800人くらい参加者がいましたが、ニューヨークでは300人くらいのひとが参加している模様。会場は傾斜のある座席で正面にステージがあり、小さい劇場のような感じ。実際try Swift day2後にはジャージー・ボーイズのコンサートが行われていたみたい。

f:id:kenmaz:20180904095013j:plain


スピーカー受付後、簡単な会場ツアーをしてもらう。運営スケジュールのレクチャー、ステージ機材の説明、バックステージ、スピーカー控室、など一通り案内してもらう。
一日の流れは、朝食、25minトークx3、30min休憩、25minトークx3、昼食〜、みたいな流れ。休憩時間が結構長めなので、そこで会場の他の参加者とおしゃべりすることができる。テーブルも数少ないので、この席ご一緒していいですか?から始まり、どっから来たんですか、という感じで自然におしゃべりができる感じになっていました。

f:id:kenmaz:20180904090925j:plain

300人なので最終日には結構顔ぶれを覚えられました。Appleの人とも話ができた。なんかSwiftNIOのチームメンバーが東京にもいるみたいなこと言ってたような気がした。

ミュージカル: fozen

初日終了後、ボーリング上でパーティがあったみたいなんだけど、僕はそれには参加せずfrozenのミュージカルを見に行く。チケットは$150くらいで前日にインターネットで購入できて、すごくお気軽。ブロードウェイでは毎日100くらいのミュージカルがやっているらしくびっくり。日本で言うところの劇団四季の劇場みたいなものがあちこちにあって、しかもそれらが毎日上演されているっていう。文化として完全に根付いている。でfrozenはどうだったかというと、今にして思うとすごく良かった。まず映画版を何回も見ているので、多少言っていることがわからなくても内容は完全に理解でき、しかもほとんどの曲がわかる、ってのが非常にでかい。演出もド派手で、エルザのあの氷の魔法が舞台装置やプロジェクションマッピングでうまく再現できていて迫力がある。ミュージカルといえば舞台下のオーケストラピットでの生演奏もライブ感があって良く、それで「レリゴ〜」とか歌うわけですから、かなり盛り上がります。お薦めです。

f:id:kenmaz:20180904184228j:plain

frozen

2018-09-04 try! Swift Day2

いよいよ登壇当日。

登壇

13:00からリハーサル。出番は14:30から。今回はスライド+iPhone実機でのデモ、という構成でしたが、スライドとiPhoneの画面表示はPAの人が切り替えてくれるようになってました。特に切り替えボタンなどはなく、「Let's go to the demo」と言ったらいいタイミングで画面を切り替えてくれて、「Back to the slide」と言ったら戻してくれる、といった具合。マイクはハンドマイクではなく、お尻ポッケに機械を入れてTシャツの中から線を通して胸元につけるタイプのテレビっぽいあれ。ピンマイク?そしてスライドのページめくりはWWDCとかでみんな持ってるあのリモコンみたいなやつが使える。本格的な機材構成となっていました。

f:id:kenmaz:20180905131010j:plain

リハ

リハ中に舞台袖でスタンバイしていると、NSHipsterでお馴染みのMattと一緒になった。おお、あの有名なMattだ、と思いブログ読んでるよー、っていったらクックックッ、あれねえ、、みたいな感じの反応でした。なんか結構変わった人だった。あといろいろNYCのおすすめ情報とか教えてくれた。
とかなんとか言ってるうちに本番スタート。

f:id:kenmaz:20180905143517j:plain

正直あんまり発表中の記憶がないんだけど、とりあえず自分の英語が通じてるのかどうかわからない不安がずーっとあった。舞台上から観客席のお客さんの顔もバッチリ認識できて、ウケてるのか、ウケてないのか、理解できてるのか、できてないのか、あ、あの人席を立った帰っちゃうのかなー、とかとか。

やはり内容以前に、自分の英語が通じてるのかわからない、という点が一番不安だった。普段の会話であれば相手の相槌などを見ればわかるが、発表となるとお客さんとは距離があるので、よほど大きく相槌してくれないかぎりはわからない。何を言ってるんだこいつは・・。みたいな変などよめきは無かったのでとにかくそこは気にせず話し続けた。

そんな中でしたが、デモはそれなりにウケたような気もする。前日にデモ中に小ネタというか、ちょっとクスッとしてもらえそうな要素をいれておいたんだけど、それにちゃんと反応してくれたのでホッとした。ただ後半にかけて割と淡々と進めちゃったので、もうちょっと2,3箇所、そういう要素を入れておいたほうがもうちょっとやりやすかったかなー、などなど反省しています。とりあえず噛まずにはっきり発音できるように、その練習ばっかりしていたので、そのへんまで気が回っていなかったなー。

f:id:kenmaz:20180905143257j:plain

ステージから

てことでだいたい25分の持ち時間のうち、23分間くらいを使って発表を終えて、スピーカーQ&Aブースへ移動。誰も来なかったら悲しいなーと思ってたけど、スピーカーのAudrey、Gopal、そしてはじめましてのBerta、スピーカー以外にも、Jermaineや他2, 3名くらいの人が質問に来てくれて、とにかく喋りまくったので終わったら喉がカラカラになった。

f:id:kenmaz:20180909191943j:plain

取り囲まれる

f:id:kenmaz:20180905160859j:plain

最近機械学習の勉強を開始したという人

発表後はしばらく呆然としつつ、d_dateの発表を見る。内容がきっちりまとまってて、面白かったな〜。さすがやで。compactMapValue使っていこうな。

f:id:kenmaz:20180905172056j:plain

d_dateさん

Pizza

終了後はCyberAgentリクルート、eurekaの日本で働くメンバーたちと合流してピザを食いに行く。今回の旅行で一番うまかったかなー。その後もしばらくウロウロしてホテルに戻って即寝落ち。

f:id:kenmaz:20180905194050j:plain

ピザ

2018-09-05 Meetup & 観光

パンケーキMeetup

satoshiに声をかけてもらって、ホテルのレストランでみんなでパンケーキを食う会に参加。そして皆さんとお別れ。また会いましょう!

f:id:kenmaz:20180909192118j:plain

パンケーキ

その後は一日かけて観光&おみやげ探し

ハイライン

古い貨物列車の線路跡をつかった散歩コースみたいな感じのところ。30分くらい歩く。めっちゃ暑かった

911メモリアル博物館

ツインタワー跡地の池を眺め、博物館で当時の状況を振り返る。観光客は多かったけど、みんな神妙な面持ちで、他の観光地とはまったく雰囲気が違いました。2時間くらいかけて回った。

f:id:kenmaz:20180906130158j:plain

グラウンド・ゼロ

メトロポリタン美術館&セントラルパーク

地下鉄でアッパータウン方向へ向かう。この辺はダウンタウンよりも静かで比較的きれいな街だった。メトロポリタン美術館についた頃には夕方で17:30に閉まっちゃうので、20分くらいしか滞在できなかった。自然博物館のほうにもいきたかったけど、このスケジュールじゃ無理ですね。また来たいところ。

f:id:kenmaz:20180906165922j:plain

外から

帰りにセントラルパークを歩いていたらリスを発見。めっちゃ可愛かった。

ミュージカル観劇: CHICAGO

汗だくになったので一度ホテルに戻り、シャワーを浴びてから、今回2度めの観劇、CHICAGO。frozenとは全然違ってJazzバンドが舞台したのピットではなく舞台上にデデンと並び、その前でザ・ブロードウェイといった感じのムキムキでキレキレの男女がピシパシ歌って踊るというミュージカルでした。そして圧倒的に英語がわからず、ジョークもわからず、話の筋もわからず、そして圧倒的な睡魔により、上演中に何度も寝てしまうという結果に。俺にはまだ早かった・・・・。

f:id:kenmaz:20180906222958j:plain

シカゴ

2018-09-06 帰国

そしてあっという間に帰国の日。Lyftで空港に向かう。Uberもつかったけど、便利過ぎますねコレ。

f:id:kenmaz:20180909192438p:plain

スクショ

その他・雑感

家族との通信

家族とはLINEボイスメッセージと娘からのお手紙で主にやり取りをしていました。

f:id:kenmaz:20180902213605j:plain

こんな手紙の写真が何度か届く

ニューヨーク雑感

住みたいかと言われたらあまり住みたくはない。でもアッパーとかブルックリンのあたりはもうちょい住みやすそうな感じなのかな。ニューヨークを語れるほどの経験はまだ足りてないけど、まだ見たかったものとかもあるし、自由の女神もスキップしちゃったし、ブルックリンにも行ってないし、またチャンスがあったら行きたいです。

現地エンジニアたちとの会話

やっぱりもっと自由にみんなと交流できるともっと楽しかっただろうなとは思います。1:1ならまだしも、複数人の会話になるとついていけないことがほとんどなので(これは前からわかっていたが)、引き続き訓練あるのみ。今回はスピーカーとして参加したので、何かと向こうから話しかけてもらうことも多く、こちらから話しかけるときも話のきっかけが作りやすくて、よかったです。

おもしろかったセッション

Taken For Granted

speakerdeck.com

Swiftの歴史について。コミットログをさかのぼり、Swiftが世に初めて公開されるまでにどんな変遷を経てきたかという非常に興味深いセッションでした。Swift was Ruby.

Idea to launch

起業とプロダクトづくりの話。最初はテックの話じゃないのかよーと適当に聞いてましたが共感するところも多く、印象に残った。

www.tryswift.co

SwiftNIO

ClientでSwiftNIOを使うわかりやすい説明。SwiftNIOを使って、SMTPクライアントをiOS上で作るという例。わかりやすかった。

www.tryswift.co

Creating a delightful tactile user interface

Appleのデザイナによるデザインの話。スライドも凝ってて面白かった

www.tryswift.co

Trusting SDKs

みんなCocoaPodとかでSDKを気軽にインストールしてるけど簡単にハックされまっせ的な話。発表社はFastlaneの作者の人でしたが、ほとんどFastlaneの話は出てきませんでした。が、興味深い内容だった。

www.tryswift.co

Compassionate Code Reviewer

ギスギスしないためのコードレビューのコツ。レビュワーコメントの書き方のいい例・悪い例をたくさん紹介してくれて、すぐい仕事でも活用できそう。

www.slideshare.net

Hacking Mazipan

自分の一つ前の発表で舞台袖にいたので見れなかったけど、絶対面白いだろうなという発表。あとで見る。

speakerdeck.com

Super Resolution with CoreML

自分の発表。はい。

speakerdeck.com

Strings Seven Ways

www.tryswift.co

NSHipsterのMattによる文字列関係のあれこれ。あんまりちゃんと聞いてなかったけど

Make our Swift better

d_dateさんの発表。compactMapValue !!!

speakerdeck.com

まとめ

ということで怒涛の5泊7日が終了しました。準備はめっちゃ大変でしたがとにかく無事終わってよかった。大成功!ってことにしとこうな。ここから年末くらいにかけては、ひとまず本業のほうに全力を注いでいく感じになりそうです。来年くらいになんかまた登壇できるような何かを仕込んでいこう。やっていこうな!

 

 

try! Swift Tokyo 2018 でLT登壇しました&学習済みCoreMLモデルを公開しました

2018/3/1〜3/2に開催された try! Swift Tokyo 2018 に参加&LT登壇してきました。LTではCoreML + 超解像について話しました。

 

色々感想を・・と、その前にお知らせです。

学習済みモデルを公開しました

発表中では「学習済みモデルについては大人の事情で公開できませんでした」と話しましたが、つい先程以下のレポジトリで公開しました。

github.com

発表では業務で使っている画像データを学習させていたのですが、今回公開したモデルは二次使用フリーの漫画「ブラックジャックによろしく」の全13巻分の画像データを使って学習させたものです(訓練:検証=6:4くらい)。 ある程度の精度は出てるので、実際にどんな雰囲気なのか確認できると思います。

git clone git@github.com:kenmaz/SRCNNKit.git
cd SRCNNKit
git submodule init
git submodule update
open SRCNN-ios/SRCNN-ios.xcodeproj/

みたいな感じでXcodeを開いてRunすれば実際にデモを試すことができます。 こんな感じ。

f:id:kenmaz:20180311012821p:plain

f:id:kenmaz:20180311035851p:plain

ブラックジャックによろしく 佐藤秀峰 Give My Regards to Black Jack SHUHO SATO

発表について

今回の発表は、ディープラーニングを使って低解像画像から高解像画像を生成する技術である「超解像」を、CoreMLを使ってiOSバイス上で動かす、という内容でした。

今回の発表のためにデモアプリを実装しましたが、これが割りと性能が良く、最初に見たときは自分でもかなり感動したことを覚えています。

とりあえず発表内容はさておき、このデモさえ見せれば、それなりに盛り上がるんじゃないかな・・と思っていましたが、期待どおりデモを行ったときに会場から「お〜」という声が上がったので、ホッとしました。また、今回のデモで使ったコードをオープンソースとして公開することを発表したときも、会場の反応は非常に良かったです。

今回のような大規模な会場での登壇は何度か経験がありましたが、今回の発表がいままでで一番ウケたような気がします。頑張って準備しておいてよかったー!

f:id:kenmaz:20180302115714j:plain try! Swift Tokyo 2018 参加レポート - Technology of DeNA より

ということで、ここから前後日談をだらだらと書きます。

前後日談

2018/1/16 CfP提出

社内slackで人事チームから「LTのCfP出したら採択結果に関わらず try! Swift の参加費出すよー」というアナウンスがあったので、せっかくならなんか話したいな、と思い色々ネタを考え始めました(別にCfP出さなくても金は部署から出してもらえるんですが)。

ちょうどその時読んでいた 「Chainerで作る コンテンツ自動生成AIプログラミング入門 」 という本で、超解像の仕組みと実装について知り、気になっているところでした。

Chainerで作る コンテンツ自動生成AIプログラミング入門

Chainerで作る コンテンツ自動生成AIプログラミング入門

この時点ではまだ1行もコードを書いたり実験をしていたわけではないのですが、これだったらKerasとCoreMLでサクッと行けそうだな、とぼんやり考えつつ、見切り発車でCfPを提出しました。まあSwiftに直接関係する内容でもないし落選するだろ、採択されたとしてもまあどうにかなるやろー、と楽観視していましたが・・

2018/1/29 採択通知と混乱

なんと採択通知が来ました。この時点では軽く論文を読んだりはしてましたが、その他はまったく何の準備もできてません。発表までわずか1ヶ月。ケツに火がつきました。ここから帰宅後やチームの20%ルールを使って、発表の準備をシコシコとやっていました(ちなみに実験用のEC2 GPUインスタンス代は部署の金で使わせてもらった)。

話の流れとしては、

  1. 仕事で扱っているマンガの画像データを使って超解像モデルを訓練
  2. アプリに組み込む
  3. 実用的な結果が出た
  4. ワーイ

というものを最初は想定していました。

既存実装としてはどんなものがあるかな、とググてみたところいきなり発見したのが、発表でも紹介した waifu2x-ios

github.com

なんだもう実例あるじゃん、と発表の意義が薄れかけたましたが、実際に動かしてみると、有名なwaifu2xのiOS移植版というだけあって、さすがにかなりきれいに超解像化されてます。ただ、マンガのセリフ部分が潰れてしまうことに気づいたので、じゃあ発表内容は「自前データを使って学習させてwaifu2x-iosをマンガに最適化してみたよ」的な流れにしようかなー、と方向転換しました。

となるとまずやることは、waifu2x-iosに組み込める学習済みモデルを用意することです。waifu2x-iosはどうやらwaifu2xのCaffe実装である、waifu2x-caffe で生成したモデルをcoremltoolsで変換したものを組み込んでいるようです。そこで waifu2x-caffe の実行環境をまずは整えてみるか、と調べてみるとwaifu2x-caffeはWindows環境で動作するように作られているらしく、いきなりつまづきました。Windows機持ってないし。。

もうちょい調べてみるとwaifu2x-caffeをubuntu上で動かすようにカスタムした waifu2x-caffe for Ubuntu を発見したので、これだー!と思いAWSGPUインスタンスを借りて環境構築を始めたのですが・・・うまく環境を構築できない。ある程度深追いはしてみたんですが、どうも駄目感が漂ってきました。てことでこれは断念

そうだ、本家waifu2xで作ったモデルをなんとかCoreMLモデルに変換する方法があるのでは、、と思い、本家waifu2xの実行環境を構築してみたところ、これはかなり簡単に成功しました。よしよし、と思いましたが、ここでまた問題が。本家waifu2xは lua + Torch7 で書かれてます。当然どっちも触るのは初めてです。luaとTorchで学習させたモデルを、さらにどうやってCoreMLモデルに変換するか・・。そのパスは公式には用意されていないので、また色々ぐぐったところ、lua + Torch7 -> pyTorch ➔ CoreML を実現する torch2coreml を発見したものの・・やはりうまく動かず。

この時点で日時は 2/5。ああやばいな1ヶ月切っちゃった、、ってことでwaifu2x路線は捨て、ぜんぶイチから書く方針にまた進路変更を決定

2018/2/6 方向性固まる

イチから、ってことで改めて論文をしっかり読む。

http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html

読んでみるとやっていることは非常にシンプル。こんなので本当にいい結果がでるのかな・・と思いつつも、久しぶりの Python + Keras で論文に忠実になんとなくコードを書いて走らせてみると・・たしかにちゃんと超解像できてる。。さらにKerasで書いてるのでCoreMLモデルへの変換も全くスムーズに成功し、しかも割りと速い。

そもそも何故ここまでwaifu2xに乗っかる路線で行こうかと思っていたかというと、waifu2xのコードをみるとかなりいろいろ細かいことをやっているので「なるほど、論文通りに実装してもきっと精度でないんだろうな・・」などと勝手に思い込んでいたからです。実際にやってみると拍子抜けするくらいにちゃんと動く。

ここでようやく方向性が固まりました。

try! Swiftの運営チームから2/15に一旦発表資料を提出してくれと言われていたのでスライドをまとめつつも、検証を進める。

2018/2/16 技術検証

で、検証はすんなり進んだのですが、ここでさらに厄介なことが。自前でKerasで書いたコードはちゃんと動くんですが、どうもなんか生成される画像がちょっと暗い。暗いだけなら生成後に適当に決め打ちで調整してやればいいっちゃいいんですが、論文ではそんなこと言及されてなかったし。。ってことで、ここから地道なデバッグ作業がはじまり、いろいろ試して(本業が逼迫しつつも)10日後くらいにようやくまともなモデルが出来上がり。

(暗くなる問題については、実はまだきっちりとは原因の分析ができておらず、整理が着いたらQiitaにでも書くかも)

ここからは技術的にハマるところは特になく、さらにgpuマシンで学習を進めてみたり、iOS側の実装をしたりして過ごす。

2018/2/25 OSS

このあたりで権利周りのことが気にかかってくる。スライド中で使うマンガのコマ画像などの権利関係を社内調整しつつ、このへんでむくむくと今回のコードをオープンソース化したいなぁ、、と思い始める。どう考えても急すぎるんですが、社内の関連部署の方々の協力を得て、だいぶゴタゴタしつつも、なんとか公開できる見込みが立つ。ほんとすいません。。その節はもう感謝しかありません。。。

あとは発表練習。妻に聞いてもらって辛辣なダメ出しをもらいつつも、夜な夜なブツブツ呟く日々を過ごす。

2018/3/1 初日とスピーカーディナー

ついに当日。自分の出番は2日目なので1日目はわりと余裕。自社ブースに顔出したり、セッションを聞いたりと楽しく過ごす。 ここで皆さんの発表を見ていて気づいたことが。まず、多くのスピーカーのスライド資料が、英語であるということ。海外からの参加者が多いとは聞いていたが、実際に会場の1/4くらいは海外の方であることがわかり、焦る。一方自分のスライド資料は完全日本語。ってことで、会場でセッションを聞きつつも、いそいで自分の資料を英語化する。

よっしゃこれで準備OKってことで、1日目終了後にはtry! Swiftのスピーカーとスポンサーだけが参加するパーティがあるってことで、ヨロヨロと新宿パセラに向かう。そこで飯を食いつつ、堤さんとCoreMLの話をしたり、いろんな人と話をしていると、kitasukeさんk_katsumiさんに「いやこんだけ海外の人きてるんだし、発表も英語ですべきでしょうー」とアドバイスを受ける。英語で話すという発想はまったくなかったですが、たしかにこんだけ海外の人がいるからな・・・と感化され、こうしちゃおれん、ということでパーティ会場からそそくさと退散し、さっそく帰りの電車内でiPhoneのメモアプリを使ってトーク内容を英語化する作業を始める。そして帰宅して英語での発表練習を繰り返す。せっかくなら誰かに英語のチェックをしてほしかったが、もう間に合わないのでそこはぶっつけ本番で。

たしか英語でプレゼンするのは、かれこれ10年以上前に部署内向け研究成果発表会での1回きりだった気がする。今回のように大勢の人の前で英語でしゃべったことは一度もなかったが、なぜかその時は意外といけるんじゃないかなーという自信があり、まあ5分だしどんなにトチっても問題なかろう・・・ってことでやはり2:00くらいまで練習して寝る。

(ちなみにこの件で発表当日、主催のd_dateさんに通訳の関係でめっちゃご迷惑をおかけすることになったのであった。すいませんすいませんすいません)

2018/3/2 発表当日

当日は機材のテストのため、6:30起床、8:30に会場入り。睡眠不足ではあるが、緊張と発表のワクワク感でそれほど眠さは感じず。あっという間に自分の発表の出番が来る。5分のトークは一瞬で終わったけど会場の反応もよく、ほっと一安心。ステージから降りて自分の席に戻ると、まわりの海外の方々からハイタッチされたり、よかったよ的な言葉をかけられたりして嬉しかった。

ここから先は燃え尽き状態になり、自社ブースで弁当を食いながらしばしぼーっとする。二日目が終わりアフターパーティーに参加。現職・前職時代の同僚がたくさん来ており、色々話す。知らない人ともわりと話す。

そんな感じで私の怒涛のtry Swiftは終了。。。(あその一週間後アフタートークにも1日だけ参加したのであった)

try! Swift全体について

前回 try! Swift に参加したのは第1回のとき(しかも1日だけ)でしたが、今回は2日間全て参加し、登壇以外にも、会社のブースの手伝いがあったりと、かなり参加している感がありました。

半年前のiOSDCでの登壇のときは発表時間も長く緊張と準備で他の人のトークはほとんど聞けませんでしたが、今回は割りと余裕がありガッツリ色んな人のトークを聞けました。

印象に残ってるのは以下

Event driven networking for Swift

  • Appleエンジニアによるトーク。豪華だ
  • 7年前くらいに仕事でブロッキングなソケットベースのサーバー書いてたことあったけど、ノンブロッキングなやつに挑戦できずじまいでどんどんサーバーの仕事から離れていって今日に至る。
  • ってことでswift-nioで再挑戦するぞ(まだ触ってない)

ASTメタプログラミング

  • さすがkishimwaさんといったてんこ盛りな内容
  • Eclipseプラグイン作ってた時代を思い出す。またこういう感じのもの作りたい気分が高まってきた

iOSでCharlesを導入する

  • お世話になっております!
  • これからもお世話になります。LOVE

UIImageView vs Metal

  • わかりやすいMetalの話
  • 誰かwebpデコーダーをMetalで書いてくれないかなー(チラチラ

以上、だらだらとすいません。

皆さんお疲れ様でしたー。

そして運営チームの皆様貴重な場を設けていただきありがとうございました。

また頑張ります。

iPhone Xを買いました

このブログは全部iPhoneの音声入力で文字を入力しています。

 

iPhone Xが発売して1週間ぐらい経ちますけどまだ僕は手に入れてなくて、なぜなら予約開始日の時に予約するの忘れていて会社の会議とかやっていたからです。

でAA予約はなんとかしたんですけど入荷が12月になる位の感じだったので枕待てないなぁと言うことで、どうやらアップルのウェブサイトに行くとApple Storeのサイトに行くと朝6時位にiPhone Xの在庫がだぶついて大吾は何か解放される。当日入所が見たい8で限定数量で毎日ちょっとずつ誤解されてるってことわかって毎朝朝6時に目覚ましを鳴らしてちょん、Apple StoreのサイトにアクセスしてiPhone iPhone Xの在庫があるかどうかをチェックしてたんですけど別日からチェックし始めたんですけど在庫があるなぁってわかってからいざ予約しようとするとそこで売り切れるって言う感じでかなり数量限定な感じだったんでが火曜日は水曜日は朝6時に起きて予約に挑戦していたんですけどついね今朝6時在庫確保することができましたじゃんかゆ

て事で銀座のApple Storeに今日の昼行ってきてiPhone Xを受け取ってきましたAppleCareを合わせると165,000位、非常に高い買い物でしたがまぁ毎日使うものなので、あと仕事にも仕事にも直接関連するものなのであまり気にせずに買っちゃいました。

で職場は渋谷なんですけどせっかく東京の東側の銀座に来たんでもうちょっと北に上がって前々から行きたかった秋葉原の事かと土曜に行こうかなと思って、それは何かってますと僕が好きなももクロちゃんの深夜テレビで紹介されていた、角煮カツ丼、て雄こってりした食べ物食べに行きたいなーと思っていたのです

 

こってりパトロール、てやつです。

というわけで銀座から日比谷線に乗って秋葉原に向かったなんですけど、どうやら電車に乗る方向間違えていたらしく日比谷線に乗ったら間違えて恵比寿のほうに行っちゃってうかいしてましたって言うことで仕方なく渋谷に戻って立ち食いそばを食って仕事に戻ったのでした。

と言うことでiPhone Xオススメです皆さんもぜひ母購入を検討ください

iOSDC2017でCoreMLの話をしてきました(あるいは法律相談事務所に行ってきた話)

発表内容

久しぶりに技術イベントで発表してきました。こういうちゃんとした形式のカンファレンスで話すのは、DeNA Tech Con 2016 以来だな。

資料はこちら

speakerdeck.com

 

f:id:kenmaz:20170919005528j:plain

同僚が撮ってくれた写真

 

内容は、これまでひっそりやってたことを15分でまとめた感じです。

qiita.com

qiita.com

イベント自体の感想

非常に申し訳ないのですが、Day1は房総半島の方で非常に重要な推し事があり参加できなかったんですが、前夜祭後のスピーカーディナーと、Day2に参加しました。

スピーカーディナー

@fhisaさんはベビメタヲタってことで、そっち方面の話ですっかり話し込んでしまいましたが、時間があればもっと色んな人と話をしたかった。それくらい濃かったです。

Day2

前日の疲労もあり、昼からの参加になりましたが、会場についたら想像以上に

ってことで、会場着くなりランチを食いながらプレゼン練習して、TrackA会場に移動した後も、ハンズさんの話を聞きながらスライド見直して、さらに自分の出番が終わったらAsk the Speakerコーナーに移動して、何人かの方とお話して、という感じで、あまり他の方のトークを聞く余裕はありませんでした。

それはそうと、発表を聞いていただいた方々、終わった後声かけていただいたり、Ask the Speakerコーナーに来ていただいた方々、またTwitter等でトークについての感想を書いていただいた方々(しっかりエゴサさせていただきました)、みなさまありがとうございました!

LT

一段落ついて会場に戻ったらLT大会が始まっていて、そっちはしっかり楽しめました。ちなみに私は以下のLTに投票しました。

iosdc.jp

ってところが面白かったのでぜひスライドを公開してほしい。

クロージング

ベストスピーカーは安定の選外でしたが、最後の主催者の長谷川さんの締めが良かったです。スタッフの皆さんは非常にいい感じで、テキパキ動いてくださってました。帰り際のハイタッチも楽しそうで、ちょっとしか参加してない自分もスタッフの皆さんと一緒に謎の達成感を得ることができました。お疲れ様でした!

 

・・・

 

以下、暇な人向けの前日談。

前日談

2016年あたりから機械学習に興味持ち始めて、それこそ最初の方は数学の微分からおさらいをはじめたくらい基礎知識も何もなかったんですが(微分は高校の時やったはずだが高校時代は剣道部とバンド活動のことしか覚えてない)、コツコツ専門書など読んだり実験や実装をしたりして、そろそろ外に対してちょっとくらい話しても恥ずかしくはないかな、と考えていました。

というときに、社内Slackで同僚の方から「iOSDCやるからCfP出してねー」っていうアナウンスがあったので、15分でいいんならちょうどいいな、と思い応募しました。

CoreMLをテーマで1件だけ応募したんですが、NDAの問題もあるしきっと落選するだろうな〜と思い応募したことを忘れかけていた頃、なんと採択のメールが届いたというわけです。

NDA

採択メールが来たのは8月初旬の段階ではiOS11の詳細なリリース日は未定だったので、CoreMLやiOS11に関してはとりあえず現段階で公開されている範囲で話せば問題無いだろう、くらいで楽観的に考えていました。

しかし直前のAppleイベントでiOS11のリリースが日本時間9/20早朝と発表され、トーク内容もNDAの制約をしっかり受けることが確定しました。

さらに

というやり取りを目の当たりにし、こりゃほんとに問題ないかちょっと真面目に再チェックしなきゃなって思ったところ、以下の記事を発見しました。

d.hatena.ne.jp

1. iOS Dev Center にログインする

2. Member Center に行く

3. [Your Account] > [Legal Agreements] > [iOS Developer Program License Agreement] を開く

4. "WWDC" で検索する (-> 10.1 Information Deemed Apple Confidential が引っかかる)

5. そこを読んでお前の弁護士と相談しろ

なるほど!

ってことで、人生で初めて行ってきました、法律相談事務所に。

f:id:kenmaz:20170914140223j:plain

 

弁護士と相談

行ってきたのは渋谷のタワレコの横の銀行ビルに入ってる法律相談事務所です。¥5400/30minくらいでアレコレ相談に乗ってくれるそうです。知識と経験を金で買えるなんて便利ー

相手をしてくれた弁護士は若い賢そうなお兄さんでした。終始にこやかに対応してくれました。おっさん弁護士が出てきて説教されたらどうしようと思いました。

で、スライド資料見せたり、印刷したAppleとの契約書を見せたりしながらいろいろ話しましたが、結論としてはまー大丈夫じゃね、ってことになりました。

 

しかし、AppleとのNDAよりやばいことがスライド資料の中に発見されました。

肖像権

今回のトークテーマが「アイドル顔識別アプリ」を作ろう、ってことだったので、もともとのスライドでは、某「いま会えるアイドル」の写真をふんだんに使っていました。

著作権的には、研究や実験内容の説明のためであれば、引用元をしっかり書いておけば公式サイトに転がってる写真とか使ってOK、みたいなことを大昔に聞いた覚えがあったんですが、肖像権はまた別で、こっちは結局のところ芸能事務所やらに個別に許可を得る他ない、ってことを指摘されました。

念のため所属事務所の問い合わせフォームや、マネージャーのTwitterアカウントに対して確認を取っては見たものの返答はありませんでした。

 ということで、すべての写真たちを「いらすとや」のフリー素材に差し替える作業に追われることとなったのでした。

会社にも相談

今回は個人エンジニアとして話そうかなと思っていたのですが、念のため社内の関連部署にも確認してみると、同じようなことを指摘されまして、この年にして社会人としての未熟さを実感したのでありました。

まとめ

  • iOSDCで自分が勉強してきたことを整理してみんなの前で話せてよかった
  • 資料の最初にも書きましたが「おもしろそう」「自分でもやってみようと思った」のような感想を多く聞けたので、発表のゴールは達成できた
  • 意図せず契約や肖像権についての知識をプロから学ぶことができた
  • トーク内容についていろんな人と話をさせてもらったが、モノノフは一人もいなかった。ももクロもまだまだだな!(謎の決意)