えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 #ebista に参加しました
12月18日に「えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 - connpass」に参加しました。
Cookpad and Microservices
Cookpad とは?
Whey Microservices ?
- 環境の変化
- Limit of Monolithic
ビジネスの変化
- 多様なビジネスを持つようになった
- 役割ごとの組織体系に
- 意思決定のスピードを保ちつつ、規模を拡大
ユーザーの変化
- ブラウザからモバイルアプリケーションに切り替わっていった
- Web API へのシフト
1つのアプリケーションに様々な機能
- A huge Rails App
テストが遅くなる
- サイクルが遅くなる
- デプロイ前のテストがたいへん
- RRRspec solved
デプロイが遅くなる
- mamiya solved
他にも色々と問題
- そもそもを変えないと、局所的な対応になってしまう
- そこで、マイクロサービス
- ドメイン/ビジネスごとに区切って対応
特徴
- 1つ1つ独立した存在
- 1つ1つ単独でデプロイでき、軽いメッセージ機構
- REST, HTTP, JSON
- 分権化で構築
- あるサービスはJavaで、あるサービスは、Goでということも可能
- それぞれのチーム内で開発可能なものにする
- 分散型の課題もある。メッセージングの失敗など
Published service data
- Garage の利用
- それぞれのプロダクト間の通信を担当
- 既存のRails アプリケーションに追加が可能
共通ライブラリを別プロセスに
- ライブラリを別プロセスとして実装
- 認証、個人情報、通知など
データーの同期
質問
HTTP通信がボトルネックにならないのか?
- いまは大丈夫だが、HTTP以外の選択も出来るように考えている
チーム内でのコミュニケーションが増えたりしないか?
- 増えたかはわからないが、ドキュメントを用意したり、十分な機能でも対応できる
Dev が AWS と出会って DevOps を目指した話
サービス総明記
- レンタルサーバーとか
10万〜
- EC2使ってみた
50万〜
- あれ?
100万〜
- おかしいぞ?
- スケールアウトしてみた
- SoftwareDesign 6月号
- 監視って何?
- nagios, monit, cloud watchを使ってみた
200万〜400万
- RDSでのロギングが限界
- SQLじゃ終わんない
- バッチ終わんない
- スケールアウトが追いつかない
- 32bitによる限界
- RDSのスレーブ上限に引っかかる
あるある
- 繰り返す緊急でプロイ
- amiが秘伝のタレ化
- ミドルウェアのバージョンアップ
- ログをfluented + S3
500万
- 外部サービス連携
- ログはトレジャーデーターに送る
- Cirlcel CI に
- Jenkins をホストするのは嫌
目的
- DevをするためにOpsを減らす
AWS Elastic Beanstalk
- Heroku みたいなことができる
- Webアプリ、Workerか?
- Elastic Beanstalkのスタック
- Application
- Enviromentごとに
- 上記にgitで
- git aws.push
- eb deploy
- オートスケールを自在に使いこなす
オートスケール設定
- 画面から
- 環境変数も
- ログは送る。送らないとだめ
- .ebextensions
RDS
- 高い
- それを上回るメリット
S3
- s3fs はオススメしない
最近やったこと
- chatops始めました
- SQS を使って、デプロイ
- オペレーションで人間関係を悪くしたくない
- スポットインスタンス
- 微妙なところがある
- 相場次第
まとめ
- 金
- 金で解決すること
- RDS
- アプリケーションサーバーは放っておけるようにする
- AWSのサービスを有機的に繋げる
- S3とかSQSとかIAMとか
- EC2をたてたら負け
Devがawsと出会ってdev opsを目指した話
プッシュ通知大戦争
- @kyuns
- VASILY
- iqon
プッシュ通知
- mikanの通知
- mikanというアプリ?
プッシュ通知はリテンションに効く
- ユーザーの呼び戻し効果が高い
- 効果的な運用が必須になる
プッシュ通知に求められるもの
- 効果的な配信の仕組み
- 決められた時間に配信
- エラー処理、リトライ処理、
- 分析の仕組み
- 曜日、時間、セグメント、文言
- どんなユーザーが開くのか?
効果的な配信の仕組み
ほしい機能
- マルチスレッドで配信
- アンインストール済みやプッシュオフのデバイストークンがわかる
- リトライ処理が正しく実装されている
- 到達した数と、さらに実際にプッシュを開いたか知りたい
ASP サービス比較
- Growth Push
- 100万プッシュまで無料
- いいお値段だった
Amazon SNS
- 100万プッシュまで無料
- 1アカウントにつき1000万デバイス
送っているプッシュ
- 50種類以上あり
- 条件が複雑
自前で構築
- 配信の最適化
- 配信データーの事前生成
- 配信時のDBアクセス0に
- EventMachine/EM-HTTP-Request/Multi
- 1000件束ねて配信
- 配信結果はfluentedに流す
- 非同期でDBにflagを
- 結果、10秒ぐらいになった
分析の仕組み
- 増え続けるデーター
- fluentd/S3経由でRedShift
- ユーザー属性と一緒に
配信テスト最適化
- 数%のユーザに文言をテスト後
- ♡は響く!
- 多腕バンデットテスト
- 効果が高いから打てばいい、というものではない。ユーザーに価値ある「気づき」を与える武器
質問
開封率は?
- CTRは、3〜9%
プッシュ通知大戦争/effective push notification by iQON // Speaker Deck
NewsPicks を支える技術と怖い話
NewsPicks のコメント欄がウゼーとか放言したところ昨日中の人に会ってしまい、ばれてないか非常にドキドキしたのですが案の定ばれてました。NewsPicks 最高ッス
— Naoya Ito (@naoya_ito) 2014, 12月 16
- NewsPicksは id:naoya絶賛!のサービスです
- 30万人突破
- 現在、10名ぐらいの開発チーム
NewsPicksを支える技術
- AWSによるインフラ
- SQSをヘビーに利用
いまどきJavaですか?
- Lombok + Java 8
記事の取り込みフロー
- Worker が非同期に連携して記事とこり込み、分類、タイムライン伝搬
SQS
- キューの処理順が担保されていない
本当にあった恐い話
あらぶるRedis
- 入社早々、眠れない
- push 型のタイムラインを形成しているため、大量更新が発生
- ElestCacheへ移行
- RedisのSPOFを無くす
- タイムライン以外のRedsは?
- ElestCacheへ移行
- RedisのSPOFを無くす
PhantomJSが暴走
- 大量のクロールエラー
- Angular なのでSEO対策されていなかった
互換性肥満
まとめ
- 人と技術を融合させる
- CMP
- コンテンツマーケティングプラットフォーム
「【第12回】potatotips(iOS/Android開発Tips共有会)」 #potatotips に参加してきました
12月17日に「【第12回】potatotips(iOS/Android開発Tips共有会) - connpass」に参加してきました。場所は、pixiv!行ってみたかったので、間違えてfacebookにも通知してしまうぐらいでした...
感想
正直、初心者なワタシにはレベルの高い話ばかりでした。でも、ヒントに満ちていたように思います。ドキュメントをしっかり読み込むことなどの基本がやっぱり大切なんだと発表を見ていて感じました。
気になった発表
pixivアプリの画像の扱い(仮)(for Android)
Volley + OkHttp を利用している
- キャッシュ
- SPDY対応
- Volley は4プロセス?
原寸大つらい
- 8MBのファイル
- 縦長、横長
- ディズニーモバイルが7割ぐらいで落ちます
- 120MB でもStream
- 来月には、Anddroid 2.x 系きります
うごイラ
- 600px 150枚 zip ファイル
- メモリに全部のると大変
- FPS 30ぐらいになる
おまけ
- お昼にランチしているのできてね
iOS・Android 徹底比較! Subscription課金のハマりポイント
- pixivの課金ユーザーの50%がアプリ
キャンセル時の購読有効期間
- キャンセルは、次の購読をしないという意味
不正なレシート
- Android では不正なレシートを送れる
- 独自証明書が使えるため
- 送られたレシートは不正なものとして処理していく
- 3点ある
Apple
- 定期配信の審査
- 機能ではなくコンテンツが審査される
- Webサービスの有料コンテンツはダメ
レシートの更新
- アプリ側で更新
- サーバー側で更新
Android
- テスト環境が無い
- 実際に購入して試すしか無い
まとめ
iOS・Android 徹底比較!Subscription課金のハマりポイント // Speaker Deck
App Indexing のススメ(補足版)(for Android)
App Indexing
- Googleの検索結果から直接アプリを開く
- アプリ選択ダイアログがでない
First コンタクト
- 登録などは無し
- コンテンツの表示を遮っていはいけない
- 戻るボタンでは、Googleの検索結果に戻らないといけない
App Indexing API
まとめ
- コンテンツがない場合は、APIを実行しない
- 端末内検索を有効化
質問
- firefoxなどで動きますか?
- どうでしょう???
- 結果、動かないらしい
- https://twitter.com/i315/status/545168389233065985
App indexingのススメ(補足版)
スクリーンショットでビューをテストする(for iOS)
FBSnapshotVerifyView
- Pods
- FBSnapshotVerifyView
- FBSnapshotTestCase
- SnapShot の比較でテストする
- githubに書いてある
- https://github.com/facebook/ios-snapshot-test-case
self.recordMode = YES;
- 大量のスクリーンショットが撮れる
Travis ci でも動く
Nimble-Snapshot
- Swift でも動く
- UIAutomationといっしょに使うといいかも
- Travis ci でやろうとすると、githubにもファイルを用意する必要がある
Snapshot Testing // Speaker Deck
Building stable and flexible libraries(for Android)
- mixi
- マルチスレッド
- callback
- Make libraries STABLE
Building stable and flexible libraries // Speaker Deck
ReactKitの紹介
ReactKit
- https://github.com/ReactKit
- オブジェクトのステータス管理や、通知?
- Promise + Progress + Pause + Cancel + Retry
まとめ
- Qiita に書いてます
- http://qiita.com/inamiy
MultiDexApplicationの実装詳細について(for Android)
- たぶん、Qiita に書く
- class が 64kを超えると...
グローバル対応の罠と技(仮)(for iOS)
- メルカリ
グローバル対応
- USからスタート
別バイナリ
- 国 × 環境の数だけいる
- xcconfig
リージョンクラスの導入
- API、HTMLなどをビルド時に決められる
翻訳
- AGi18n
- Transfex
パッケージ
- JP版は日本語だけにしたい
- パッケージを直接操作
書式
- 日付
- まだいい
- 通貨の書式
- 桁区切りとか
- 佐々木望事件
- 自動修正の設定
iOS版グローバル対応の罠と技 // Speaker Deck
Jack & Jill
- Quipper で Android
APK ができるまで
- コンパイラー
- めんどくさい
Jack & Jill
- そこで Jack & Jill
なんで
ベンチマーク
- 遅くなる!なんで?
- 将来に期待
- Google に期待
Swift - Core Foundation
- ペパボ
- minne
Core Foundation
CMSampleBuffer
- CoreMedia.framework
- Core Foundation objects
- 何かしらのメディアデータがサンプリングされている
CMSampleBuffer.h を調べる
- Opaque Type?
- 構造体の定義はhファイルに書かない
Xcode 6.11 だと
- もっと便利になっている
まとめ
- Swift 以前の低レイヤーのこともきちっと
OS XでJenkinsを運用する
ビルドどうしていますか?
インストール
- Deamon化はlaunchctl
- homebrew で入れられる
Xcode やOSのアップデート
- プロジェクトごとにわける
- コマンド
- xcode-select
GUI とVNC
Yosemite
いいところ
- 履歴が残る
- 秘密鍵の管理がしやすい
まとめ
- 所々つまる
- でもいいよ!
Jenkins on-mac
AndroidStudio,Gradle バージョン互換性
Android Stuido
- 1.0.1がでた
- CIのテスト時に、CIのMatrixでビルド&テストできるかも
- Gradleビルドが遅い
- Android Studio 使います!
AppExtensionsのテストコードを書く
- trippiece
AppExtension
- いろいろ
AppExtension 用ターゲット
DEMO
まとめ
- Embedded Framework でテスト
- よく見ないところこそテストを用意
App extensionでテストコードを書く
Androidの本「Android実践プログラミング」と「甘味アンドロイドパーク」をつくったよ
告知
甘味アンドロイドパーク
- こってり
Android実践プログラミング
- 実践的
- ダメなコードとその対策
- 15個集めました
TypeScript in Definetely
Androd Studio セットアップ
- バージョンアップに追従する本です
- 無料で配布
入手方法
- C87
- 3日目
- 12/30
いかにして不具合発見時のフィードバックを素早く行うか
- Fablic
QA時
- 担当の席にいく
- チャットで送る
- 不具合は鮮度が大事
- もっと手軽にフィードバックしたい
エンジニアが欲しい情報
BugshotKit
- BugshotKit
- https://github.com/marcoarment/BugshotKit
- 登録したジェスチャー
- 画像などをメール送信
- 画像
- info.json
インストール
- CoCoaPodでいれる
- ApplicationDelegateに記載
メール、通知
まとめ
- フィードバック系のライブラリが増えてきている
AnnotationProcessing を使ってコンパイル時にソースを生成する
- グノシー
AnnotationProcessing といえばjake
Android Studio での開発
Annotation Processing を使ってソースを生成する // Speaker Deck
まだSwiftのメソッドで消耗してるの?
引数
キーワード引数
- 外部引数名を指定しない
- 第二匹数名はかって
外部引数名を指定
- objective-cではwithがつく
- withがなくなる前置詞がある
#をつける
_をつける
イニシャライザ
まとめ
- ふくざつ...
全体まとめ
「CREATORS LIBERTY #1 UX・UI最新メソッド」に参加してきました
12月10日に行われた「CREATORS LIBERTY #1 UX・UI最新メソッド」に参加してきました。 で、SNSなどでシェアしないでね、と言われてしまいました...でも、大変面白かったです。
で、感想は書けないんですけれど「あ、そうだったんだ」というのが「クックパッド開発者ブログ」の更新頻度です。「Rebuild - Podcast by Tatsuhiko Miyagawa」でも話題にでては、真相がはっきりしていなかったので、今回の話でスッキリ?しました。