try! Swift Tokyo 2018 (Day 2)の参加メモ。(Day 1はこちら)
try! Swift Tokyo 2018
セッション
Expression Problem を解決する
- 同じUIでもプラットフォームが異なるとコードが再利用できない
- View Protocolを使うと、macOS/iOSで再利用可能なUIコードを書くことができる
- Final Tagless Approachで検索すると詳細情報を確認することができる
Swift もくもく会 in Barcelona
- バルセロナでのもくもく会の紹介
Swift によるアルゴリズムの可視化
- Playgroundを使ったベジエ曲線の描画デモを紹介
Kitura で Codable ルーティング
- Swift 4で追加されたCodableを使うとJSONのEncode/Decodeが型安全かつ簡単にできる
- アプリにKituraKit、サーバーにKituraのCodable Routingを使うとJSON変換処理をKituraに隠蔽でき、また型定義もアプリ=サーバー間で共有できるようになる
超解像+CoreML+Swiftを使ってアプリの画像データ転送量削減に挑戦する
- 漫画の画像をwaifu2xで高解像度化してみたが、思ったより綺麗にならなかった
- DeNAで独自開発したSRCNNKitとCoreMLを使うと綺麗に高解像度化できるようになった
- SRCNNKitと機械学習トレーニング用のスクリプトはオープンソースとして公開済み(ただし、DeNAが作ったトレーニング結果(モデルファイル)は大人の事情で非公開)
iOSでCharlesを導入する
- ネットワーク通信のデバッグに困っていたため、18年前にCharlesを開発した
- Charlesを使うとネットワークのどの部分で問題が発生したか簡単にデバッグできる
- iOS上で動作するCharles for iOSを開発した
- HTTPS通信のデバッグも簡単に実行でき、ログをMacと共有することもできる
- ただし、Charles for iOSはApple審査中でまだリリースできていない
業務メモ
- Charles for iOSに感動した、是非導入したい
拡張現実における体験設計
- ARの概要と導入事例を紹介
- ARを使ったアプリを開発するためのテクニックを紹介
Swift エンジニアのための Kotlin 入門
- 同じ処理をSwiftとKotlinで書いた場合の違いを紹介
- KotlinはSwiftに似ている
- map、filter、reduceは両方の言語に存在するが、reduceは若干挙動が異なる
- SwiftにあってKotlinに無いもの、またKotlinにあってSwiftに無いものがある
- guardはSwiftのみ存在する
- applyはKotlinのみ存在する、Kotlinから盗むべきもの
- ネイティブコードにコンパイルできるKotlin Nativeというコンパイラもあるが、まだαレベル
- Kotlinを学びたい場合は、EDU Toolsを使ってみると良い
Swift5のOwnershipに備える
- Swift 5で追加予定のOwnershipを使うと、Swiftで高度なメモリ管理ができるようになる
- Ownershipはパフォーマンスチューニングが必要な部分で威力を発揮する
- 学習コストは高いが、オプトイン機能であるため使わないという選択もできる
デジタル信号処理 in Swift
- Accelerate Frameworkを使ったビジュアライザーのデモを紹介
Codableが導く型安全な世界
- CodableはJSON変換以外にも使える
- ProtocolとCodableを組み合わせるとデータ変換が型安全かつ簡単にできる
- ただし、Encoder/Decoderのコード量は多い
iOS / Swift における対話型インターフェースの作成
- 音声認識を使うことで、ユーザーの負担を減らすことができる
- 音声認識のサービスはいろいろあるが、まだ勝者はいない
- iOSのSpeech Recognition APIは1時間1000リクエストの上限があるが無料で使える
- AmazonのLexは無料では1ヶ月5000リクエストの上限があるがクロスプラットフォームで使える
UIImageView vs Metal
- UIImageViewに画像を設定して表示する処理をMetalを使って書き、GPUの挙動を見るデモの紹介
- 既にUIKitはMetal上に実装されている
Swiftが動くDockerコンテナの各OSの性能比較
- Ubuntu 16.04と14.04でパフォーマンスはほぼ同じ
- Docker ImageのサイズはUbuntu 16.04の方が小さい
型とパフォーマンスで見るType-erasureの利点
- Type-erasureを使った型消去とパフォーマンスチューニングの紹介
Make faces big by Vision and CoreGraphics
- Visionを使った顔認識とCore Graphicsによる顔のみの画像拡大のデモを紹介
開発者ツールと経験への時間投資
- 開発効率を上げるためのツールを紹介
- Swift/Objective-Cの両方で使えるKZPlaygroundの紹介
- ファイル変更を監視して再読込を行うKZFileWatchersの紹介
- ボイラープレートやFakeオブジェクトのコード自動生成を行うSourceryの紹介
業務メモ
- KZFileWatchers、Sourceryは現行プロジェクトに使えそう