ごんれのラボ

iOS、Android、Adobe系ソフトの自動化スクリプトのことを書き連ねています。

iOSDC JAPAN 2022に初プロポーザルを提出しました #iosdc

概要

毎年楽しみにしているiOSDCに今年は初めてのプロポーザルを提出してみました。

fortee.jp

提出したプロポーザル

20分版

fortee.jp

LT版

fortee.jp

思い的なもの

元DTPオペレーターからiOSアプリエンジニアになった自分ならではのテーマがないかと考えた結果、他の人とかぶらないようなテーマのプロポーザルが出せました。
数年前に私が実際に依頼された内容をベースに、Illustratorの実例を交えたお話ができたらいいなと思っています。
まだ採択されてないけど。

さいごに

文章考えるの、難しいね

2022/02/17開催の【技育CAMP】株式会社ゆめみのiOSエンジニアによるiOSアプリ アーキテクチャ入門で登壇しました

概要

株式会社サポーターズ様の学生向けの勉強会で、ゆめみのiOSエンジニア3人が設計やアーキテクチャについて発表しました。 私は「設計を知るための第一歩を踏み出そう」というタイトルで発表しました。

talent.supporterz.jp

資料

speakerdeck.com

感想

発表資料を作りながら設計とはなにかを再度勉強し直す機会となり、私自身にとっても得るものが多かったです。 また社内でなにをテーマとして発表するか決めたり、発表者3人がどういう構成で話すか決めたり、私が聞きたいことを盛り込んでもらったり、事前準備含めて勉強になりました。 設計は一家言ある方が多いテーマですが、発表を聞いてくださった方になにかしら実りがあったらうれしいです。

最後に

株式会社サポーターズ様、ご参加いただいた皆様、発表してくださった皆様、ゆめみの運営サポートメンバーの皆様、ありがとうございました!

2022/04/22開催のYUMEMI.自動化 feat. note tech meetupで登壇しました

概要

2022/04/22開催のYUMEMI.自動化 feat. note tech meetupで登壇しました。

yumemi.connpass.com

noteさんとの共同開催の勉強会で、YUMEMI枠、note枠、公募者枠に応募した登壇者が自動化について発表しました。 私はYUMEMI枠のうちの一人として、「AutomatorでFFmpegを呼び出して動画ファイルをGIFに変換するフォルダアクションを作った」というタイトルで、動画ファイルをGIFに変換する作業をAutomatorを経由することで自動化する方法について発表しました。

資料

speakerdeck.com

Qiita記事

qiita.com

感想

いろいろな分野の自動化のお話が聞けて、参加者としても楽しかったです。 だっしーさんのAmazon Aurora Serverlessの話を聞いてDBのオートスケールってすごい時代だなって思ったり、noteさんのZapierの活用っぷりすごいなって思ったり、shirailyの発表を聞いて改めて住所入力フォームって統一してほしいよねって思ったりしました。 fromkkさんからMacのショートカットアプリでなんか自動化できそうですよねって宿題を投げられたので、今後はその路線でもなにか自動化できるネタがないか探してみようと思います。

最後に

ご参加いただいた皆様、発表してくださった皆様、ゆめみの運営メンバーの皆様、ありがとうございました!

Adobe の ExtendScript が Apple Silicon 環境で動作するか簡単に検証した

概要

フォロワーさんから「Adobe の ExtendScript が Apple Silicon 環境で動かないという話を聞いたが、実際どうなの?」と質問されたので、簡単に調べてみた

調べたこと

  • targetengine の指定があると ExtendScript が起動しないという話は本当か
  • BridgeTalk の指定があると ExtendScript が起動しないという話は本当か
  • VS Code の ExtendScript Debugger が Apple Silicon 環境で動かないという話は本当か

結論

  • InDesign 2021、InDesign 2022 では targetengine の指定があっても ExtendScript は起動した
  • Illustrator 2021 では、Apple Silicon 環境で ScriptUI + BridgeTalk + ExtendScript は起動せず、Illustrator 2021 を Rosetta 環境で起動したら起動する
  • VS Code の ExtendScript Debugger は Apple Silicon 環境では起動せず(正確には読み込まれていない?)、Intel 版をインストールして Intel 版を起動すると ExtendScript Debugger が使用できる

調査メモ

targetengine の指定があると ExtendScript が起動しないという話は本当か

これは特にソースは見つからなかったけど、おそらく BridgeTalk の話と一緒くたになってそう。
手元で試したところ、特になにもせずスクリプトを起動できてしまった。
試したコードは以下。

//@targetengine "hoge"

var progressBar = makeProgressBar('プログレス');
progressBar.show();

function makeProgressBar(title) {
    var palette = new Window("palette");
    palette.text = title;
    palette.preferredSize.width = 700;
    palette.preferredSize.height = 60;
    palette.alignChildren = ["center","center"];
    palette.spacing = 10;
    palette.margins = 16;

    palette.myProgressBar = palette.add("progressbar", undefined, undefined, 
                            {name: "myProgressBar"});
    palette.myProgressBar.maxvalue = 100;
    palette.myProgressBar.value = 0;
    palette.myProgressBar.preferredSize.width = 450;
    palette.myProgressBar.preferredSize.height = 20;
    palette.myProgressBar.alignment = ["center","center"];

    var button = palette.add("button", undefined, undefined, {name: "OK"});
    button.onClick = function () {
        alert('Button clicked!');
    }

    return palette;
}

BridgeTalk の指定があると ExtendScript が起動しないという話は本当か

私が販売しているスクリプトが動かないという報告を受けて、その際に「BridgeTalk を利用しているとだめっぽい」と教えていただいた。
ググったところ、UserVoice にもあがっていた。 https://indesign.uservoice.com/forums/601180-adobe-indesign-bugs/suggestions/43993263-scripts-using-bridgetalk-do-not-work-on-m1-macs-r

これ、Vote 数少なくないけど、困っている人そんなにいないんですかね。
Illustrator で ScriptUI + BridgeTalk + ExtendScript という構成で作成していると、詰むはずなんだけど。
根本原因は Adobe に解決してもらうしかないので、当座の対策として Rosetta 環境で Illustrator を起動するしかなさそう。
なんのための Apple Silicon なのか。
ちなみに Rosetta 環境で起動させる手順は以下のとおり。 1. Finder で 該当アプリケーションを選択する 2. 情報を見る 3. 開いたダイアログ内の「Rosetta を使用して開く」にチェックを入れる 4. アプリケーションを起動する

VS Code の ExtendScript Debugger が Apple Silicon 環境で動かないという話は本当か

これは人づてに聞いた話がもとで調べた。
ググったら Adobe のコミュニティで解決策が提示されていた。
https://community.adobe.com/t5/indesign-discussions/vscode-extendscript-debugger-on-m1-doesn-t-ask-to-select-target-and-selectactivetarget-not-found/td-p/12006537

要約すると 公式サイト の Intel Chip をダウンロードしてインストールし、ExtendScript Debugger をインストールすればよい。
Universal、Apple Silicon も試してみたが、だめだった。
すでに ExtendScript Debugger がインストール済の場合は、VS Code を起動した時点で読み込まれるっぽい。
複数バージョンの VS Code が存在することになるので、ちょっと鬱陶しいけど、解決するまではこうするしかなさそう。

補足

  • 手頃なスクリプトが手元になかったので、InDesign で ScriptUI + BridgeTalk + ExtendScript は試していない。動かないかもしれない
  • Photoshop も滅多にスクリプトを書かないので試していない

まとめ

Apple も Adobe も 環境的に DTP に向いていない気がする。
正直だいぶやる気を削がれている。
UXP になったら少しは改善するんですかね。

『ラクマ x STORES LTイベント ~ iOS開発の裏側 ~』に参加しました

概要

お昼休みを利用して久しぶりに社外の勉強会に参加しました。
自分の備忘録代わりにブログに残しておきます。

参加した勉強会

『ラクマ x STORES LTイベント ~ iOS開発の裏側 ~』 https://hey.connpass.com/event/236189/

発表内容

「SwiftLintをもっと活用する (仮)」by @natsumi_oishi

.swiftlint.ymlを使い分ける

  • テストが書きにくい
  • force unwrapとかでエラーになる
  • Tests配下に.swiftlint.ymlを配置するとディレクトリ配下で適用される
    • 親子で設定が競合した場合、子で上書きできる
    • Build Pharesではswiftlinのコマンドだけでよいが、CLIはconfigオプションで複数指定する(そのときは親→子の順にする)

swiftlintの実行時間を短くする

  • 処理対象のファイルを絞り込んで実行すると短くなる
  • Issueに書いてあったスクリプトを書換えて使っている

analyzeを使う

  • メモに必死で聞き逃した
  • ドキュメントにanalyzer: Yesのものがanalyzeで使える
    • ただし、全体で4つしか指定されていないので、必要なものが使えない
  • Unused importを採用してみたが、必要なときに消されてしまったり、不要なものが追加されたりするので、うまく使えなかった

「ラクマでのSwiftUI導入方針とTips」by @darquro

SwiftUI導入方針

  • 2021/2ぁら徐々に導入
  • 画面全体もあれば一部導入もある
  • MVPをベースにしていて、ViewModel Protocolパターンを導入した

困ったこと

  • iOS13/iPadOS 13のサポートを切ろう!
    • テキストフィールドのキーボード入力まわりの挙動がおかしい
  • Previewがエラーになって時間ばかりかかる
    • 諦めてシミュレータ起動したほうが早いこともある
  • if statementを多用しない
    • Xcodeのコード補完が壊れて無限にローディングする
  • if #available をViewModifierで使用しない
    • リリースビルドしたアプリでcrashする
    • 該当の画面をひらいたときにcrashする
    • Crashlyticsでどう見えるか→リリースしてないからログにでていない
      • STORESも困っている

Tips

  • ViewDidLoadModifierを作る
  • AlertBinding
    • iOS14と15でAlert周りが変わったので、互換をもたせて使いたい

「SwiftUIっぽくした話」by @chocoyama

  • STORESレジアプリの話
  • フルSwiftUIで実装している
  • 今日はレシート印刷の話をする
  • XMLをCALayerにパースしてレイアウトしている
  • XMLベタ書きをSwiftUIっぽくした!
  • XMLは宣言的→SwiftUIも宣言的→SwiftUIから宣言的にXMLにできるのでは
  • XMLっぽさ2ではFlutterっぽいIFのフレームワーク
    • だいぶ書きやすくなった
    • 型で指定できるのでコード補完も効いて書きやすくなった
  • 課題
    • 要素を配列に渡す→制御構文をかけない
  • XMLっぽさ3ではresultBuilderを使う
    • 内部DSLを生成できる

「SwiftUIで STORES 予約 をフルリニューアルした話 」by @yoshikei

  • STORES 予約をSwiftUIでフルリニューアルした
  • SwiftUIを採用した経緯
    • リソースが限られていたので、宣言的にUIを実装して効率をあげたかった
    • Flutterはほかアプリとの親和性を考慮して見送った
    • 新しい技術に対応できるタイミングだった
    • iOS13を気にしなくてよかった
    • アプリの内容がシンプルだった
    • フルリニューアル=フルスクラッチだったので、デザインなどの問題があってもデザインチームに相談できるので、挑戦できた
  • アーキテクチャはSwiftUI+Combine+MVVM
  • APIはREST(すでにあるAPIの関係)
  • パッケージ管理はSPM
  • 強み
    • コンポーネント単位でUIを作れる
    • コードベースが比較的シンプル
    • UIの変更に強くレビューしやすい
  • 弱み
    • OS間で実装をわけないといけないことがあった
      • 14と15の差異を吸収するため
    • ベストプラクティス&挙動が安定していない

まとめ

  • お昼時間の勉強会、初めて参加したけどいい体験でした
  • レシート用のXMLをSwiftUIの宣言的レイアウトから効率よく生成するというアプローチが面白かったです
    • DTPのころにXML自動組版という夢を見た身としては、XML懐かしいなーって思いました
  • SwiftUIの導入実績を耳にすることが多いけど、各社だいたい似たようなところでハマっている印象を受けました
    • そして各社乗り切っているところもすごいですね

2021 年の振り返り

はじめに

2021 年の振り返り記事です。

本業

Android アプリチームに異動

2 月から 11 月まで Android チームに異動して、Android エンジニアに転向していました。
Android アプリ開発自体は浅く関わってきていたんですが、今年は本腰いれて開発してみたいと思って、チームを異動しました。
担当したタスクで思い入れがあるものを、いくつか具体例として挙げます。

とある画面のボトムシート化と付随する新機能開発

ドラッグで画面を閉じれないようにするという仕様があったのですが、ライブラリのバージョンの関係で isDraggable が使えない(バージョンをあげると他の影響が大きすぎて断念)ので、state を細かく制御して強引に実現しました。
だいぶ時間をかけてしまったけど、満足のいく機能になったかと思います。
isDraggable を使ったボトムシート制御もそのうち実装してみたいですね。

ListAdapter を導入

新画面で RecycleView を追加する必要があったので、プロジェクトに初めて ListAdapter を導入してみました。
iOS の CompositionalLayout と同じように差分更新を OS がいい感じにやってくれるのと、コードの記述量が少なく読みやすくもなるので、以降私が RecycleView + ListAdapter で実装するようになりました。
クリックイベントを ViewModel でハンドリングするように試みたりもして、RecycleView + ListAdapter + DataBinding の組み合わせはめっちゃ好きですね。

Java から Kotlin への置き換え

新機能の開発時に Java から Kotlin に置き換え、ついでにモダンな構造に置き換えました。
2 つの言語の違いがわかる作業で、好きな作業でした。

MVP から MVVM に置き換え

MVP の構造がコードを追いづらいよねっていう話がチーム内で定期的にあがるので、シンプルな画面を MVVM に置き換え、ついでに Coroutine を使ったり、LiveData に置き換えました。
Flow を使ってみたいなと思ったのですが、怒涛のタスクラッシュに見舞われて調査時間が取れず、誰でも理解できる LiveData で妥協しました。
この作業も楽しかったです。

Bitrise のワークフローの見直し

長年理由がわからず動いていなかった Bitrise 上の UITest を動くように直しました。
やったことは単純で、公式ドキュメントの Device testing for Android を参考にして、ワークフローを作り直しただけです。
iOS チームにいたときにも Bitrise のお守りをしていたので、CI/CD のお守りも結構好きな作業かもしれないです。

Arctic Fox にしたらビルドできなくなった UnitTest の見直し

Arctic Fox にしたらなぜか UnitTest のビルドができなくなってしまった問題が発生したので、直しました。
stackoverflow を参考に対応しただけ。

未経験で入社した方との 1on1 やメンター的なこと

実装ではないですが、未経験で入社した方との 1on1 やメンター的なことをやりました。

実装タスクだけじゃなくて、地ならしやチームマネジメントみたいなことまで、いろいろやりましたね。
なかなか満足のいく成果がだせたと思っています。

Kotlin の書き心地がいいのと、JetPack Compose が気になっているので、Android のキャッチアップは来年も続けていきたいです。

iOS エンジニアに戻った

12 月に転職して、iOS エンジニアに戻りました。
今後も Android エンジニアとしてキャリアを積んでいく道も考えたけど、やっぱ iOS の世界観が好きだなーって気づいて iOS エンジニアに戻ることにしました。
関係ないけど、Findy、Lapras のオファー的なのは Android のほうが多かった印象がありますね。
まだまだ Android エンジニア不足は続くのかしら。
そのうち転職エントリ的なものを書くかもしれないし、書かないかもしれない。

副業

DTP スクリプト開発の技術顧問

DTP スクリプト開発の技術顧問的なお仕事をしています。
大阪 DTP の勉強部屋で登壇したときの 資料 がきっかけで声をかけていただきました。
業務内容は、クライアントが実装したスクリプトのレビュー、ワークフローやスクリプトの困りごとの相談、スクリプトの実装です。
実装だけでなく、クライアントのコードレビューやワークフローの相談を受けることで、私も勉強になっています。
来年も引き続きお力添えしていきたいです。

カタログ系の自動化ツール開発

今年もカタログ系の自動化ツール開発を受注しました。
データの作りがしっかりしているのと、過去に受注したスクリプトでいろんなパターンをスクリプトに落とし込めているので、短期間で満足いただけるものを納品できてよかったです。
来年も受注できたらいいな。

もくもく会

DTPerのスクリプトもくもく会 を主催して、来年の 5 月で 5 周年になります。
今年もオンライン開催しかできなかったですが、6 回開催できました。
ご参加いただいた方、またいつも準備に余念がないメイン主催 id:uske_S 、ありがとうございました。

DTPerのスクリプトもくもく会 #21 - オンライン
DTPerのスクリプトもくもく会 #22 - オンライン
DTPerのスクリプトもくもく会 #23 - オンライン
DTPerのスクリプトもくもく会 #24 - オンライン
DTPerのスクリプトもくもく会 #25 - オンライン
DTPerのスクリプトもくもく会 #26 - オンライン

来年も引き続き開催していきたいので、ご参加お待ちしています。

作って公開したもの

作りかけのものはここに挙げたもの以外にもいくつかあるのですが、公開に至ったものだけ挙げています。
4 リポジトリしか公開に至らなかったので、来年は作りかけのものを完成させたり、別になにかを作ってもっと公開していきたいです。

レノ

体重が一時期8キロを超えてしまい、獣医と相談してダイエットフードに切り替えました。
原因は日々隙をみて虎次郎のご飯を盗み食いしているからです…。
切り替えたご飯は 猫用 pHコントロール+満腹感サポート ドライ です。
レノくんはストルバイトが原因で下部尿路疾患になったことがあるので、pH コントロールのご飯を食べる必要があって、ちょうどロイヤルカナンから新しいご飯が発売されたので、それに切り替えました。
最初はあんまり食べてくれなかったけど、最近は諦めたのか食べてくれるようになりました。
獣医に相談して、猫用鰹節をふりかけているからかもしれない。

虎次郎

幼少期からたまに発生していた発作が特発性てんかんと診断されました。
二ヶ月ぐらい各種検査(血液検査とか)をするために週末に通院する日々が続き、MRI もうけました。
毎日薬を飲ませる必要があって、日々試行錯誤の日々です。
医療用ちゅーるに乗せてみたり、ちゅーるに乗せてみたり、投薬用のおやつにくるんでみたり。
結果的にすべて見破られてしまい、結局保定して口の中に薬をいれてごっくんさせるという昔ながらの方法で落ち着きました。
薬を飲んだあとはちゅーるを袋半分だけあげるルールが定着しているので、最近は虎次郎も前ほど暴れずに受け入れてくれるようになりました。
焼きがつおちゅーるが約束されたおいしいものと認定されているので、もう我が家は焼きがつおちゅーるを欠かせなくなりました。

そのほか

正月に PUBLIC TOKYO で買った緑色のコートがお気に入りなので、来年はいろんなところに着ていけたらいいなと思っています。
また、M1 Mac が発売されてしばらく経ち、そろそろ手元にほしいなと思っていたところに、M1 Max MacBook Pro が発表されたので、二週間くらい悩んで買いました。
M1 Proで十分だった可能性が高いですが、まぁ大は小を兼ねると思って。
謎のスリープ中のバッテリー消費問題があるものの、大満足です。
Intel Mac は Adobe アプリのスクリプト開発で使うことがありそうなので、手元に残しています。
それ以外の開発環境を削除して容量をあけて、妻にレンタルする予定。

最後に

オフライン、オンラインでお会いした方々、また SNS で遊んでくれた方々、今年もお世話になりました。
来年はリアルで飲み会とかしたいですねぇ。
おいしい日本酒やウィスキーを好きな人とただただ飲む時間をすごしたい…。

また、個人開発でなにか作りたい欲もあるので、それもがんばりたい。
SwiftUI か Flutter かなやんでいるけど、どっちにしようかな。

せっかく M1 Max にしたので、Blender や Houdini などの 3DCG もやってみたい。

来年もいろいろやりたいことがありますね!
それではみなさん、よいお年を!

After Party iOSDC Japan 2021 に参加した

概要

After Party iOSDC Japan 2021 に参加したので、セッションのメモなどを残しておく。

cookpad.connpass.com

セッションメモ

チームでSwiftUIを書くために 〜読みやすく保守しやすいSwiftUIの設計について考えたこと〜

  • https://speakerdeck.com/natmark/after-party-iosdc-japan-2021-swiftui
  • 買い物機能はKaimono muduleで開発している
    • やっぱマルチモジュール
  • 買い物機能はSwiftUI
  • 買い物機能がクックパッドアプリの最大のモジュールになっているそう

    課題

  • iOS13対応が疲弊する
    • iOS13だけ挙動が違う
  • パフォーマンスが犠牲になっているめんがある
  • 柔軟性が高いためUIの組み方が人によって変わる
  • コンポーネント分割の粒度も人それぞれ

今後もSwiftUIを使うか

  • 使いたいと思っている
  • Try & Errorがしやすいと感じている

保守しやすい設計を考える

  • サービス特性を考える
    • ScrollViewに詰め込んでいる
    • 複雑多様な状態
  • 画面が縦に長くなりやすい
  • 状態が多いと分岐も多くなり、読みにくい

統一した書き方でレイアウトを設計する

  • RootViewのbodyに書くべきものを決める
  • 規約を決めたい
  • 画面をSectionとして意味ある単位に分割
    • さらにSection内で分割する
  • デザイナーと相談して決める
  • コンポーネントはAtomicデザインの考え方を適用
    • OrganismをSectionとして考えている
    • Atomicレベルのコンポーネント化はしていない

複雑多様な条件について対処する

  • deliveryStatusという状態でViewのだしわけを制御する
  • コード上の見通しはよくなった
  • Sanboxアプリ化して条件に応じた画面を出せるようにしている

意識をチームに浸透させる

  • ドキュメント化
  • 知見まとめた社内ブログ
  • 設計を語る会

QA

  • UIVIewRepresentableはなるべく使いたくないとのこと

Compositional Layoutsを用いたUI開発の事例とそこで得たtipsのご紹介

活用例

気をつけたいポイント

  • estimatedに気をつけろ
    • 文字数に応じて高さを変えたりしてくれる
    • カルーセルと組み合わせると動作が不安定になる
    • タップ領域がずれて押下できなくなる
    • シミュレータと実機で挙動が違う
  • カルーセルは突き抜けて表示される
    • デザイナーとすり合わせるしかない

良かった点

  • 実装料が減り、開発効率が向上
    • 複雑なレイアウトをひとつのCollectionViewで実現できるので実装料が減った
  • コードの見通しがよくなった

QA

  • 参考になるのはAppleのサンプル
  • iOS14以上ならlistを使うことでTableViewを使わずに済みそう

機能ごとに動作するミニアプリでプレビューサイクルを爆速にした話 After Talk

QA

  • Sandboxアプリは開発者の確認使っている
    • QAは接続テストも兼ねることがあるので、Mockのデータを表示するアプリではテストできない
    • デザイナーが自分でビルドするときに便利という声がある
  • Sanboxアプリの整備は誰がやっているか
    • 基盤チームのメンバーがやっている
    • スクリプトの整備、ダミー実装の整備など
    • 画面の実装や利用は開発者チームがやっている
  • 実際どれぐらい効率化できたか
    • Sanboxアプリの計測をしていなかった…
    • 今後定量的に計測する予定
  • SwiftUIの共存はどうしているか
    • Sanboxアプリ前提の仕組みになっている
  • Xcode Previewsは利用しているか
    • 最近までXcode Previewsが使えなかった
      • コード量が多すぎる?
    • ワークアラウンドで動かせそうな気配を感じているので、Sanboxアプリでも使える仕組みを用意している
    • SandboxアプリとXcode Previewsの共存になると思う
  • Sandboxアプリは使いすてか
    • コミットしてメンテしていく前提
    • 最低限のコードの安定性を担保するためにPRのたびにCIでチェックしている
  • Sanboxアプリを社内に推進する方法
    • マルチモジュールのセッションで詳しく話している
  • アカウント機能はどう提供しているか
    • 画面ごとに固定値を返す
    • 設定画面でランタイムで値を変更する方法も検討するとよい
  • Sandbox座談会気になる
    • 仕組みを整備する基盤チームがSandboxに関する開発チーム側の意見を取り入れ改善するために実施
    • 事前にスプレッドシートに意見を書いてもらって、わいわい談義する

Sandboxアプリどうですか

  • 特定のJSONでレイアウトが壊れることがあって、そのときにレスポンスのJSONを流し込んで確認できるSandboxアプリが便利
  • フルビルドが15分ぐらいかかってたので、角丸治すのにも時間かかってたけど、Sandboxアプリだと30秒ぐらいなので、よい

Multipeer Connectivityを使った動画のリアルタイム端末間共有 〜料理動画撮影アプリの事例〜

  • Multipeer Connectivity
    • iOS 7から使える
  • 資料あとで見直そう

後日談

Multipeer Connectivityでなにかつくりたい

  • いいアイデアがでてこないので、みんな教えて
    • ゲーム
  • 世界のおもしろ事例
    • FireChat
      • チャットアプリ
      • クローズ済
      • 政府によるインターネット利用の規制下や抗議運動などの際に広く使われた
    • iTranslate
      • 翻訳アプリ
      • 手元の端末でしゃべった内容が相手側で翻訳される
    • Metronome Touch
      • メトロノームのアプリ
      • 複数の端末でメトロノームが同期する
    • Playr Audibly
      • 音楽再生アプリ
      • ワイヤレスサラウンドシステムを実現できる

最後に

大規模開発をしながら新しいことを取り入れて改善していて、それが自然な姿になっているのですごいなと思った