めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 #ebista に参加しました

12月18日に「えびスタ!#1【クックパッド × Retty × VASILY × UZABASE】 - connpass」に参加しました。

えびスタ!#1

Cookpad and Microservices

Cookpad とは?

  • みなさん知っているよね?
  • 5,000万UU/月
  • 180万レシピ
  • EC、コミュニティ、料理教室などのたくさんの事業
  • 食にまつわる多くの事業をもつ

Whey Microservices ?

  • 環境の変化
  • Limit of Monolithic

ビジネスの変化

  • 多様なビジネスを持つようになった
  • 役割ごとの組織体系に
  • 意思決定のスピードを保ちつつ、規模を拡大

ユーザーの変化

  • ブラウザからモバイルアプリケーションに切り替わっていった
  • Web API へのシフト

1つのアプリケーションに様々な機能

テストが遅くなる

  • サイクルが遅くなる
  • デプロイ前のテストがたいへん
  • RRRspec solved

デプロイが遅くなる

  • mamiya solved

他にも色々と問題

  • そもそもを変えないと、局所的な対応になってしまう
  • そこで、マイクロサービス
  • ドメイン/ビジネスごとに区切って対応

特徴

  • 1つ1つ独立した存在
  • 1つ1つ単独でデプロイでき、軽いメッセージ機構
  • 分権化で構築
    • あるサービスはJavaで、あるサービスは、Goでということも可能
  • それぞれのチーム内で開発可能なものにする
    • 分散型の課題もある。メッセージングの失敗など

Published service data

  • Garage の利用
    • それぞれのプロダクト間の通信を担当
    • 既存のRails アプリケーションに追加が可能

共通ライブラリを別プロセスに

  • ライブラリを別プロセスとして実装
  • 認証、個人情報、通知など

データーの同期

  • Pub-Sub形式
  • Ping
    • Rails の拡張として提供
    • Amazon SNS and Fulentd のラッパー

質問

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を目指した話

プッシュ通知大戦争

プッシュ通知

  • mikanの通知
  • mikanというアプリ?

プッシュ通知はリテンションに効く

  • ユーザーの呼び戻し効果が高い
  • 効果的な運用が必須になる

プッシュ通知に求められるもの

  • 効果的な配信の仕組み
    • 決められた時間に配信
    • エラー処理、リトライ処理、
  • 分析の仕組み
    • 曜日、時間、セグメント、文言
    • どんなユーザーが開くのか?

効果的な配信の仕組み

  • ASPを使っていないところは?
    • AWSを使っている?
  • 200万以上のデバイスに一気に送りたい
  • どのデバイスが有効かわからない
  • エラー時のリトライ処理が
  • どれだけ到達してクリックされているかわからない

ほしい機能

  • マルチスレッドで配信
  • アンインストール済みやプッシュオフのデバイストークンがわかる
  • リトライ処理が正しく実装されている
  • 到達した数と、さらに実際にプッシュを開いたか知りたい

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は id:naoya絶賛!のサービスです
  • 30万人突破
  • 現在、10名ぐらいの開発チーム

NewsPicksを支える技術

  • AWSによるインフラ
  • SQSをヘビーに利用

いまどきJavaですか?

記事の取り込みフロー

  • Worker が非同期に連携して記事とこり込み、分類、タイムライン伝搬

SQS

  • キューの処理順が担保されていない

本当にあった恐い話

あらぶるRedis

  • 入社早々、眠れない
  • push 型のタイムラインを形成しているため、大量更新が発生
    • ElestCacheへ移行
    • RedisのSPOFを無くす
  • タイムライン以外のRedsは?
    • ElestCacheへ移行
    • RedisのSPOFを無くす

PhantomJSが暴走

  • 大量のクロールエラー
  • Angular なのでSEO対策されていなかった

互換性肥満

  • API後方互換性を保つために同じモデルが使い回しされていた
  • 業務レイヤーのモデルがAPIのI/Oと共有されていた
  • とにかく分離

まとめ

  • 人と技術を融合させる
  • CMP
    • コンテンツマーケティングプラットフォーム

「【第12回】potatotips(iOS/Android開発Tips共有会)」 #potatotips に参加してきました

12月17日に「【第12回】potatotips(iOS/Android開発Tips共有会) - connpass」に参加してきました。場所は、pixiv!行ってみたかったので、間違えてfacebookにも通知してしまうぐらいでした...

#potatotips (iOS/Android開発Tips共有会)第12回

感想

正直、初心者なワタシにはレベルの高い話ばかりでした。でも、ヒントに満ちていたように思います。ドキュメントをしっかり読み込むことなどの基本がやっぱり大切なんだと発表を見ていて感じました。

気になった発表

  • App Indexing のススメ
  • スクリーンショットでビューをテストする
  • Jenkins
  • AppExtensions
  • 不具合発生時のフィードバック
  • Swift の引数

pixivアプリの画像の扱い(仮)(for Android

Volley + OkHttp を利用している

  • キャッシュ
  • SPDY対応
  • Volley は4プロセス?

原寸大つらい

  • 8MBのファイル
  • 縦長、横長
  • ディズニーモバイルが7割ぐらいで落ちます
  • 120MB でもStream
  • 来月には、Anddroid 2.x 系きります

うごイラ

  • 600px 150枚 zip ファイル
  • メモリに全部のると大変
  • FPS 30ぐらいになる

おまけ

  • お昼にランチしているのできてね

iOSAndroid 徹底比較! 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を実行しない
  • 端末内検索を有効化

質問

App indexingのススメ(補足版)

スクリーンショットでビューをテストする(for iOS

FBSnapshotVerifyView

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

まとめ

MultiDexApplicationの実装詳細について(for Android

  • たぶん、Qiita に書く
  • class が 64kを超えると...

グローバル対応の罠と技(仮)(for iOS

  • メルカリ

グローバル対応

  • USからスタート

別バイナリ

  • 国 × 環境の数だけいる
  • xcconfig

リージョンクラスの導入

  • API、HTMLなどをビルド時に決められる

翻訳

  • AGi18n
  • Transfex

パッケージ

  • JP版は日本語だけにしたい
  • パッケージを直接操作

書式

  • 日付
  • まだいい
  • 通貨の書式
  • 桁区切りとか
  • 佐々木望事件
  • 自動修正の設定

iOS版グローバル対応の罠と技 // Speaker Deck

Jack & Jill

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

GUIVNC

Yosemite

  • Jenkins のslave jobはssh経由
  • MacsshdGUIを操作できない
  • JNLPを使う
  • Userコンテキストで

いいところ

  • 履歴が残る
  • 秘密鍵の管理がしやすい

まとめ

  • 所々つまる
  • でもいいよ!

Jenkins on-mac

AndroidStudio,Gradle バージョン互換性

  • Android Stuido
  • Android Gradle
  • 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

インストール

  • CoCoaPodでいれる
  • ApplicationDelegateに記載

メール、通知

  • メールタイトル
  • 任意の項目を追加
  • メールからgithubのissue登録まで出来る
  • private API を使っているので審査に出すとダメ

まとめ

  • フィードバック系のライブラリが増えてきている

AnnotationProcessing を使ってコンパイル時にソースを生成する

  • グノシー

AnnotationProcessing といえばjake

Android Studio での開発

Annotation Processing を使ってソースを生成する // Speaker Deck

まだSwiftメソッドで消耗してるの?

引数

キーワード引数

  • 外部引数名を指定しない
  • 第二匹数名はかって

外部引数名を指定

  • objective-cではwithがつく
  • withがなくなる前置詞がある

#をつける

_をつける

イニシャライザ

まとめ

  • ふくざつ...

http://www.slideshare.net/YoshinoriImajo/swift-42797767:tilte

全体まとめ

「CREATORS LIBERTY #1 UX・UI最新メソッド」に参加してきました

12月10日に行われた「CREATORS LIBERTY #1 UX・UI最新メソッド」に参加してきました。 で、SNSなどでシェアしないでね、と言われてしまいました...でも、大変面白かったです。

で、感想は書けないんですけれど「あ、そうだったんだ」というのが「クックパッド開発者ブログ」の更新頻度です。「Rebuild - Podcast by Tatsuhiko Miyagawa」でも話題にでては、真相がはっきりしていなかったので、今回の話でスッキリ?しました。