radioc@?

レディオキャットハテナ

【勉強会メモ】モバイルメソッド大阪 第1回

classmethod.connpass.com

  • 日時:2018/05/10(木) 19:00 〜 21:00
  • 場所:クラスメソッド株式会社大阪オフィス

クラメソさん主催のモバイルアプリ勉強会がスタートしました。モバイルアプリ全般ということですが今回は全てSwiftの勉強会です。

Serverless Swift

クラスメソッド株式会社 田中孝明さん

dev.classmethod.jp

SwiftのOSS

  • Ubuntuでのビルド
  • パッケージマネージャの公式対応

VAPOR

github.com

運用事例

aial.shiroyagi.co.jp

  • まだまだ運用事例が足りない
  • もっと気軽に使えれば

Serverlessへのアプローチ

サーバーレスアーキテクチャの教科書

speakerdeck.com

RestAPI⇒Swiftでもやりたい

AWS Lambda

Serverless server Side swift with Hexaville

medium.com

  • コードをデプロイして実行⇒動かない

サーバレスコンピューティング

サーバーについて検討する必要がなくなる

AWS Fargate

aws.amazon.com

  • サーバーやクラスタを管理することなくコンテナを実行

所感

  • AWS LambdaでSwiftを動かすのは現実的ではなさそう
  • サーバを意識しない構成としてFargeteの選択は良さそう

【ゲスト登壇】今さら聞けないRxSwift入門

株式会社tech vein 猪俣充央さん

speakerdeck.com

RxSwiftとは

  • 各言語で実装されているRxのSwiftライブラリ

ReactiveX

⇒組み合わせて実現

ここが嬉しいRxSwift

  • あらゆるデータをストリームとしてスマートに処理
  • コールバック地獄からの開放
  • 疎結合
    • 改変の影響範囲が小さい
    • 部品化・共通化
  • 各種ストリームを使う便利な道具が揃っている

RxSwiftの基本

  • Observable
  • Subject
  • Disposable

肝になるのはこの3系統のクラス

ストリームのイベント

  • ストリームはnextでデータを流し、completedで終了
  • completedが来たらその先はnext/errorできない
  • error(例外)が来たら、その先はnext/complated/errorは流せない

RxSwiftのSubject使い分け

  • PublishSubject…ボタンのタップイベント
  • BehaviorSubject…スイッチON/OFFユーザーステータスなど
  • ReplaySubject…あまり使ったことはない。履歴系で使えるかも(直近N件を取るなど)

Disposable

  • Subscribeすると戻り値として返ってくる
  • disposeを呼ぶと非同期処理のキャンセルなど監視する側として処理を止める

DisposeBag

  • 監視元インスタンスが死んだら自動でぜんぶdispose
  • DisposeBagインスタンスに突っ込んでおくとdisposeBagが解放される時にまとめてdispose
  • Rx標準ではないがめちゃくちゃ使える

オペレーター

Streamを操作する

  • map:ストリームを変換する
  • filter:ストリームをフィルタする
  • flatMap:ストリームを変換する
  • mapに近いが戻り値はObserver

try RX!

RxCocoa

  • RxSwiftのサブセット的なライブラリ
  • iOS/Mac開発に便利な付属クラス・拡張を提供
  • UIKit提供クラスのrx化

参考

ReactiveX

github.com

Codable用のDecoder/Encoderを作ってみる

クラスメソッド株式会社 中安佑一さん

Codableって使ってますか?

  • Swift4からFoundationに標準搭載
  • 特定の「フォーマットのデータと特定のクラスや構造体との相互変換を簡単に行える

Codable追加した構造体

  • JSONEncoderにSearchConditionを渡してやる
  • JSONDecoderにJSON文字列を渡してSearchConditionの型を指定してやる

Standard Prepared

  • Swift4で用意されているEncoder/Decoder

標準は2つだけ⇒自作してみよう

  • URLQueryItemEncoder
    • URLのクエリを生成
  • URLQueryItemDecoder
    • URLQUeryItemの配列を渡すとCodableなオブジェクトを返す

登場人物

  • EncodingContainer
  • Keyed
  • Unkeyed
  • SingleValue

Decorderも同様

CodingKey

コンテナ

  • EncoderとDecoderにそれぞれ3つのコンテナ

ネストコンテナ

  • ネストされた情報をコンテナに実装

共通するインターフェース

  • プリミティブな型に全部対応

Keyedコンテナ

  • "キー:値" になっている形式はこれが呼ばれる

共通メソッド

  • CodingKeyからキー名をstringValueで取得

エンコーダーの実装

  • コンテナから呼び出すためのfileprivateなメソッド作成
  • Keyedコンテナを返す
  • encodeメソッドは自前で作る(外から呼ばれる)

※メモ

Encoding and Decoding Custom Types | Apple Developer Documentation

qiita.com

iOSアプリ開発における単体テスト入門

クラスメソッド株式会社 山田良さん

テストの壁

  • テストしにくい部分が出て来る
  • 諦めも肝心

テストしやすいコード

  • DIする
  • 依存するモジュールを内部で生成するのではなく注入する

SwiftでのDI

  • protocolを上手に使う
  • 自分で書いたクラスであればinitializeで依存関係を注入
  • ViewControllerにDIできるライブラリも存在
    • 今回は別途Injectメソッドで対応

Presenterに絞って解説

  • ViewController
    • viewDidLoadでpresenterを作る

presenter

  • subscribeで成功したら画面表示
  • errorはダイアログ表示

⇒Mock化

単体テストしやすいモバイルアーキテクチャ

テストしやすいコードを無視して失敗した例

  • keychainを操作するシングルトンを使用したSDKをPresenterで直接操作してKeychainの値を書き換えてしまった

SDKがシングルトンオブジェクトを使っていた時の回避方法

  • Wrapperクラスを作ってprotocolを継承

単体テストを導入した弊害

  • 実装量は多くなる
  • インターフェースが変わる仕様変更の際、修正量が多くなって精神的につらい

ほか

  • APIを叩くテストを書きたかった
  • Schemeを分けて実APIを叩くテストを別途作成
  • CIツールにて単体テストAPIを叩くテストは対象外

感想

  • 破壊的変更を防げた場面はあった
  • 書き慣れていないので作業がなかなか進まない
  • ゆくゆくはTDDを導入したい

【勉強会メモ】スクラム道関西 第104回オープン・ジャム

scrumdo-kansai.connpass.com

  • 日時:2018/05/09(水) 19:00 〜 21:00
  • 場所:TAM COWORKING OSAKA

スクラムマスターの存在価値を理解してもらうには

  • スクラムで開発してよかったと言える価値を追求する
    • 稼働率や生産性などの従来型と同じ土俵で評価することはあまり意味がない
    • チームのために奉仕しメンバーと一緒に問題に向き合う
  • スクラムマスターがタスクを握ってしまうのは良くないがチームを前進させるためにはコードを書くことがダメなわけではない
    • チームが把握できていない技術などは調べて試してみても良い
    • メンバーに良いやり方を示す
  • スクラムに対する思いが強い人がスクラムマスターをやるケースが多い(言い出しっぺとしてやらざるを得ない)
    • スクラムについては誰よりも詳しくなってチームを引っ張っていける方がよい
  • ビジネスサイドに対してはチームの成果を自分の手柄と言うぐらいのアピールをしても良いかも

少人数チームでのレビュー

フロントエンド担当、モバイルアプリ担当、バックエンド担当などの分業による少人数のチームで担当分野をレビューしてもらえない場合どうするか?

  • スクラム的には機能横断型チームが望ましい
    • メンバー自分の担当領域以外に関心が無くなる
    • 他人の領域をレビューして責任を負いたくない
  • 専門ではなくてもチームで互いにレビューできる環境のほうが良い
    • レビュー(品質対策)を担当者の問題ではなくチームの問題ととらえる
    • まさにスクラムをやるべき環境かもしれない
  • 最初はペアプロやモブプロのような形で自分の担当範囲の説明を聞いてもらう

デザイン思考とは

最近話題になったこの記事より

medium.com

そもそもデザイン思考とは?

調べてみた。

ferret-plus.com

デザインしたサービスやプロダクトの先にある ユーザーを理解し、仮説を立て、初期の段階では明らかにならなかった第二の戦略や代替する解決策を特定するために問題を再定義する、一連の問題解決の考え方のこと

5つの段階(共感、定義、概念化、試作、テスト)はUI/UX系の勉強会で何度か見たことがあるなぁと思いだした。

スクラム開発の実践より前段階でのPOやビジネスサイドが使うフレームワークの1つと言えそう。

下記の本がわかりやすいとのことで紹介していただいた。

まんがでわかるデザイン思考

まんがでわかるデザイン思考

自動化の取り組み

  • テストをどこまで書くか
  • 環境調達の問題
  • 静的解析の自動化はレビュー効率化や細かいレビュー指摘による関係悪化を回避できるメリット
  • 本番デプロイの自動化が誰でもできるのはやや不安はある
  • 自動化しすぎてJenkinsおじさん頼みになるつらみ
    • 体力がある会社にはビルド専門部隊がいる

社内LTの広めかた

  • 発表者と発表内容を事前に調整する
    • エンジニア以外の部署を巻き込む
    • 影響力のあるゲストを呼ぶ
      • ヴァル研究所さんの駅すぱあとの生みの親による勉強会の事例
  • 参加しやすい時間の考慮(昼休みなど)
  • みんなが興味のありそうなテーマを決める(各チームの障害事例共有など)
    • 自由に発表したい人にはテーマを決めずに任せるほうが発表してもらいやすい

【読書メモ】モチベーション革命

生まれた時から必要なモノが揃っている環境で育った世代が社会の中心となり、AI技術が普及して働き方が変化してくるこれからの時代におけるチームや組織のマネジメントについて考察を与えてくれる内容だった。最終的に心理的安全性の話に繋がるあたりはアジャイルな開発のマネジメントにも通じるものがあると個人的に感じたので、そのような観点でまとめておく。

なお、第4章では個人の働き方にも焦点が当てられており、個人としてのこれからの時代の働き方についても色々と考えさせられる内容だった。書籍で述べられている「乾かない世代」に該当する人であったり、そんな世代をメンバーに持つ上司であったり、読む人の立場に応じても様々な気付きがありそうで、これからの働き方について様々な視点で考察を与える一冊だと思う。

乾けない世代

自己成長と社会貢献がつながっていた「乾いている世代」

「乾けない世代」は自分の時間を犠牲にして社会のために働くことにはモチベーションが動かない。

生まれたときから十分なモノに囲まれて育った彼らは、「ないものを勝ち得るために我慢する」という上の世代の心理は理解できない

ザッカーバーグのような人物を以下のように説明しており上の世代とは価値観が異なるとしている。

「金銭的な快楽」よりも、「意味合い」を大事にする世代の代表

5つの幸福

アメリカ人心理学者のマーティン・セリグマンは「人の幸せは5種類に分けられる」と提唱している。

  • 快楽
  • 没頭
  • 良好な人間関係
  • 意味合い
  • 達成

lightworks-blog.com

乾けない世代は「良好な人間関係」や「意味合い」を重視し、「没頭」する人が多い。

インサイト

必要最低限のモノが全て揃い、溢れている時代

相手の潜在的な欲求を見つけ出して、体験をプロデュースしてくのが、これからの仕事

インサイト(新しい視点)とは?

ユーザーの潜在的な欲求や、購買意欲のツボ

偏愛

任天堂の故・岩田社長の名言

”労力の割に周りが認めてくれること”が、きっとあなたに向いていること。それが”自分の強み”を見つける分かりやすい方法だ

「偏愛」ともいえる嗜好性

他人から見れば非効率かもしれないけど、私はどうしてもこれをやりたい

「偏愛」は人工知能の時代であっても代替不可能であり、これを突き詰めることは「乾けない世代」の得意分野でもある。

異なる「強み」を掛け算する最強チーム

変化が激しく曖昧な世の中で、異なる偏愛を持つ個人を組み合わせたチームで変化に対応していく。

ストレングスファインダー

米国ギャラップ社の開発したオンライン才能診断ツールで、人の強みを34種類にパターン化する。

強みを分析する手法はストレングスファインダー以外にもいくつかある。

career-theory.net

偏愛マップ

xn--rck1ae0dua7lwa.com

お互いの強みを共有し、それぞれの強みや好きなことを理解して認め合うことで変化に強いチームになる。そして変化への対応にはお互いに信頼しあう「信頼社会」が必要。

WHYを共有していくマネジメント

  • 全員がやりたいこと
  • 世の中のためにやるべきこと
  • 個人がやりたいこと

3つをいかに把握し、揃えるかが、組織のマネジメントにおいて最も重要

あなたはなぜここにいるのか

チーム全員でこれを問う。

みんなの「WHY」が、一人ひとりの「WHY」につながるように、対話を重ねて、成長を続けていく

心理的安全性

お互いの心遣い、配慮や共感

最後にいきついたのが心理的安全性。

あなたのマネージャはあなたのことを”人”として見てくれているか?

人として認め合える心理的安全性の中でメンバーそれぞれの偏愛を出し合って変化に対応し、新しい未来を作っていく。

参考

obarakazuhiro.jp

【勉強会メモ】Mobile Act OSAKA #4

mobileact.connpass.com

  • 日時:2018/04/27(金) 18:45 〜 21:20
  • 場所:Osaka Innovation Hub (大阪イノベーションハブ)

フェンリルさん主催のモバイルアプリ勉強会。毎回、様々なテーマの発表があって勉強になります。個人的には今回は特にFirebaseで開発したサーバレスアプリの話が興味深かったです。それ自体は以前からある手法ではありますが、SwiftやKotlinのモバイルアプリ開発手法と並べてみてもあまり違和感なく似たようなことができそうだなと改めて感じて、少し触ってみたくなりました。次回は6/29開催予定とのこと。既に 募集 が開始されています。

nory_kaname「サービス開発とアプリ開発

speakerdeck.com

データを見る人が欲しいもの

ログの拡張性

ログ見て何をするか

  • ボタンの改善
  • クリック率
  • 画面遷移率
  • CVR

など

画面のレイアウト

  • ListView,TableView
  • 縦スクロール、横スクロールの相性

Empty画面

  • 画面で伝えるメッセージ

まとめ

  • アプリリリース語どうしたいか自問しよう

1amageek「Firebaseとモバイル開発」

komer.co

firebaseでサーバレスで作った

  • firebase
  • Stripe
  • Algolia

短い時間で高品質なものをつくる

Cloud Firestoreの料金

Cloud Firestore の料金  |  Firebase

⇒課金されたことはなく気にしていない。

課金が発生する頃にはマネタイズできていて賄えるようになるはず。

TakuyaOhashi 「Kotlinコンバートと戦った話」

JavaのプロジェクトのJavaファイル約500ファイルをKotlinにコンバート

kaptでビルドが通らないLombokの罠

  • Kotlinでkaptを使うようにプラグイン設定⇒ビルドが通らない
  • kaptとLombokの相性が悪い

対策

Icepickが対応していない

あたりが更新されない?by lazy

遅延初期化で利用 バックスタックで戻った時TabLayoutなどで開き直したあとに値を差し替えたい lateinit

実装方法がバラバラだと困るSAM変換

  • SAM(Single Abstract Method)
  • 関数型に置き換える

コメントが入れ子にできる仕様で30秒ぐらい頭がフリーズ

  • Kotlinではブロクコメントが入れ子にできる
  • コメントに /src/layout/*.xml のように /* があると入れ子扱いになる

null

  • nullをあえて渡すコード
  • null!! にコンバートされる

まとめ

Kotlinコンバートは思ったより手間がかかる

izuchy「Charlesで通信デバッグ

speakerdeck.com

アプリエンジニアの悩み

  • アプリとAPI間の通信がはっきり見えない
  • APIから応答されている値を変更したい
  • ブラウザにある開発者ツールがほしい

運用中の悩み

  • 不具合の原因がアプリなのかAPIなのか

Charlesとは

www.charlesproxy.com

  • HTTP Proxy
  • 三者目線でHTTP通信を確認できるツール

手順

※メモ

qiita.com

通信を書き換えてみる

使ってみて

  • アプリの通信をみてAPI設計の参考に
  • APIから応答されるデータを書き換えて試行が可能
  • 明確な原因の切り分け

iOSアプリも出てる

Charles Proxy

Charles Proxy

Charles Proxy

  • XK72
  • ユーティリティ
  • ¥1,080

itok「制約付きレイアウトと仲良くする」

speakerdeck.com

iOS

  • Auto Layout
  • trailing marginを使う

Android

  • Constraint Layout 1.1.0
  • layout_constraintWidth_minを指定

1.1の新機能

  • MATCH_PARENT
  • WRAP_?CONTENT
  • MATCH_CONSTRAINT(0dp)
  • WRAP_CONTENT+制約⇒New

表示内容に従いつつwrap_contentに従う

  • コードを書かなくてもlayoutでできるようになった
  • 最新のAndroid Studioで作れば可能

ConstraintLayoutで複雑なレイアウトを実現しよう

ConstraintLayout  |  Android Developers

※メモ

qiita.com

Hiron「ペダルのある生活」

iRig BlueTurn - IK Multimedia | Hookup, Inc.

  • 踏んだら楽譜のページをめくる
  • Bluetooth接続のハードウェアキーボードとして動作する
  • 上下左右とPage Up/Down
  • ハードウェアキーボードに対応したら良い

iOSで対応

  • UIKeyCOmmandを返す
  • PageUp,PageDownはAPI定義されていない
    • 文字列で書く(スタックオーバーフローより)

stackoverflow.com

Android対応

  • onKeyDown() などを使う
    • KeyEvent.KEYCODE_**

hokuron 「@objcとは何だったのか」

XCode 9+Swift 4で出る警告の話

※メモ(たぶんこのへんの話)

medium.com

Limiting @objc inference Side benefit:

  • Swift3時代はNSObjectを継承するとextensionのメンバも@objcが暗黙的についた
  • protocolはそうではない
  • Swiftの実装上不可能
  • Swift 4からはこのような混乱を防げる

protocolはそうではない⇒ブログに書いた

blog.fenrir-inc.com

Satoshi Hachiya「QR Code Recognition on iOS 11」

speakerdeck.com

QRコードデンソーウェーブの登録商標

iOS11の標準カメラとSafariQRコードを読み取る

QR Code Recognition on iOS11

developer.apple.com

Event QR Code

iCalendar format⇒カレンダー登録できる

Wi-Fi接続をやってみた

  • QRコードを移すと接続しますか?ダイアログが出て来る
  • ステルスは対応していない

まとめ

Universal Links for Developers - Apple Developer

【勉強会メモ】Mix Leap Study#12-TensorFlow Dev Summit 2018 Recap

yahoo-osaka.connpass.com

  • 日時:2018/04/25(水) 19:00 〜 22:00
  • 場所:ヤフー株式会社 富国生命オフィス

3月にアメリカで行われたTensorFlow Dev Summit 2018の振り返り会がヤフーさんとGDG神戸さん共同で開催されました。軽く触ったことがある程度であまり詳しくありませんが、アプリ側から間接的に利用するケースは増えてきそうで技術的に無視できないので参加してきました。

ニューラルネットの構造自動決定というのは、プログラミングで例えると自動でリファクタリングするアルゴリズムみたいなものなんでしょうか?わかるようでわからん感じです。

TensorFlow.jsによってこの分野にもJSが浸透していきそうな雰囲気を感じました。もはやJSが書ければなんでもできる時代になりつつあります。TensorFlow Hubのような形で学習モデルだけを切り出して共有する流れが広まれば、Deep Learningの知識がなくても学習モデルだけ持ってきてアプリに組み込むことができそうなので、JSで手軽に扱えるのはアプリ側にとってもDeep Learningの活用を身近にするきっかけにもなりそうだと感じました。

Recap of TensorFlow DevSummit 2018

藤原様 (Google Developers Experts、TFUGオーガナイザー)

Tensor Flow Dev Summitとは

www.tensorflow.org

  • 日本からGoogle Developer Expertの3人が参加
  • 年に一度のTech Conference
  • 去年から開催
  • 会場:Computer History Museum
  • 1トラック19セッション
  • 15分/セッション

面白そうだった話題

多言語対応:TensorFLow.js

js.tensorflow.org

  • 20%ルールから発生
  • deeplearn.jsがTensorFlow.jsと名前を変えて正式にTensorFlowのプロジェクトに取り込まれた
  • JSで学習から推論まで可能
  • GPUにも対応
  • Python版とも互換性があってモデルを読み込める

Demo

  • ブラウザ上で絵文字に対応した物体を探して写真を撮ると判定してくれる

emojiscavengerhunt.withgoogle.com

今年のエイプリルフールネタ

landing.google.co.jp

  • 手書きタイプのキーボード
  • TensorFlow.jsが使われている
  • 約45,000の学習

developers-jp.googleblog.com

TensorFlow Hub

github.com

  • 学習済のモデルを簡単に共有するための仕組み
  • 決められた形式でモデルをWeb上においておけば統一的な方法で読み込むことができる
  • 論文のモデル公開

Distributed TensorFlow

  • 分散学習の新しい機能
  • 今回はsingle node + multi GPUで使える機能

All Reduce

  • Parameter server的な役割なし
  • ワーカー同士が通信し合う
  • Chainerでも採用されている
  • Distribution strategyをEstimatorに渡すだけで使用可能

Eager Execution

  • 従来:グラフを構築⇒計算を実行
  • Eagerモード:逐一必要なものから実行されていく
    • 計算は即時実行される

Define and Run(Graph)とDefine by Run(今回対応したEagerモード)

  • 試行錯誤段階はEagerモードが良さそう
    • 速度もそこまで遅くない

TFX(TensorFlow Extended)

  • MLシステムの中でMLコードはごく一部
  • 汎用的な機械学習プラットフォーム
  • TensorFlow Model Analysis

Tensor Board Plugin + Debugger

ニューラルネットの構造自動決定

Googleがかなり力を入れている研究分野

  • 学習が上手くいく層の積み方を自動で探索
  • 職人芸的な知識が無くてもできるように
  • Cloud Auto ML Visionでも既に活用されている

[1707.07012] Learning Transferable Architectures for Scalable Image Recognition

まとめ

  • 使いやすさ焦点の話
  • 分散学習や並列化で新しい仕組み
  • TensorFlow.js
  • SysML(ML Ops)っぽい話
  • ニューラルネットの構造自動決定は力を入れている
  • TPUの話は少なかった

※補足

Swift for Tensor Flowは4月中に出るらしい

Swift Community  |  TensorFlow

TensorFlow, AI and Mobile Models!

Laurence Moroney様(Google

全編英語だったためあまりメモが取れていません。。

以下の従来のプログラミングとMLの違いを「パラダイムシフト」として強調されていました。

Classical Programming

  • Rules & Data : input
  • Answers : output

Machine Learning

  • Answer & Data : input
  • Rule : output

Machine Learning for Tic-Tac-Toe

3x3マスの○×ゲーム(英語ではTic-Tac-Toeと言うらしい)の例でルールベースの従来型プログラミングとMLの違いを説明。論文にもなっている有名な事例らしい。

medium.com

Multi PlatformでのTensor Flowの活用についての説明。

  • TensorFlow Lite Size
  • Mobileアプリのデモ

LT:医療分野のAI化

NakaHiroさん

医療分野における

  • AI化に向けた現場の状況
  • AI化が進まない背景
  • AI化に向けた動向
  • Appleの試み

などについて