by shigemk2

当面は技術的なことしか書かない

【タイトル修正】まとめ 開発プチ闇4連発! 〜そのとき人はどうするか〜 #cross2016

開発プチ闇4連発! 〜そのとき人はどうするか〜 #cross2016

  • 高度に抽象化した闇について話します
  • ストリーム配信は禁止

ワンバイナリでi18nに対応したはなし

  • ビジネスの要求を満たすために強いられる特定の困難さ→ワンバイナリでi18n対応
  • 要件 ワンバイナリでi18n対応
    • apk
    • 考える事多そう
    • 某アプリの多言語対応
    • 翻訳読み込みシステムはKVで、翻訳情報をランタイムで読み込むシステム
    • 技術基盤チーム
    • 社内で翻訳するチーム
    • 翻訳データのパイプラインが整備されていない
    • 文言がハードコードされている
    • 蛸猫→執事(スクリプト)
      • 翻訳情報は外注(日本語のほうは内製)
      • 自動的にPR
      • 蛸猫のPRにコメントすると執事が動く
    • 日本語ハードコードは、デザイナーが仮の文言を利用すると外国人エンジニアはそのまま貼っちゃう
    • アプリのビルド時にテストする
    • チーム内では ラベル表記ルールの整備/使用言語/国籍など
    • 英訳時に文字数が2倍近くになることがあって、そのまんま翻訳すると画像がねむかったりぐちゃぐちゃになったりする
    • 対応言語リストをサーバからもらう
      • マッピングリストに対応しているワードは翻訳。例外は英語
    • 国別のユーザーのDAUなどのKPIだけ
      • 課金額だけは綺麗に追えなかったので、currencyで判別
    • 韓国語対応
      • 現在使っているフォントにハングルがなかったので、複数のフォントを利用してキメラフォントを作る
    • 問い合わせがFBからカジュアルにやってくる→専用のCSを作った(複雑なものはゲーム内とか専用サイトとか)
    • オブジェクトをJSONに変換するときにpoファイルから対応するなど
    • ログイン時にデータを一緒に送ってもらっている
    • 翻訳後の文字列を探しだしてクライアントに渡している
    • Serealという形式で保存
    • 海外スタッフがforce pushするひどい事案
      • 蛸猫のsettingから特定のbranchを保護する
      • 誰かがforce pushしたら通知するやつ(戦略的force push)
    • 社内ブログにローカライズしてる話をする

人とAPIとこころと体の健康

  • すごいおじさんが闇をいい感じに変えていた
  • サーバサイド側機能開発 執事やボットのお守り
    • 前はソシャゲのサーバサイド、FlashのPCゲームのサーバサイド側(MVCぜんぶPerl)
    • すべての成果物のコードを一人では読み書きできない
    • 密結合から疎結合になったのがメリット
    • アーキや言語を分けられる
    • ダミーAPI作らないとクライアントが開発できない(気合で乗り切るのもしんどいので、Redmineのwikiに残す)
      • wikiにリクエストとレスポンスの例
    • ブラウザソシャゲからネイティブへ
    • 規模も10人から30人になって結構しんどい 一人ひとり顔と名前が一致しない
    • 人が増えることに伴う闇(MCはPerl VはC# Unity)
      • 思ってたのと違うレスポンスが来る
      • 思ってたのと違う型のパラメータがやってきてサーバがエラーレスポンスを返す
      • ダミーレスポンスを返すAPIを書く
      • ただひたすら人が頑張って手であれこれ
    • IDLの導入(Interface Definition Language)
      • マシンリーダブルなフォマットでAPI定義書を書く
      • コメントに使い方、型も書いたりする
      • JSON/Swagger/protobufなどに対応
      • 会社では独自システムを作る
      • インタフェース記述言語 - Wikipedia
      • IDLに沿ったリクエストを返せるかテストコードを書く
      • サーバAPIをモックし、自動生成
    • IDLを中心にフローを人間的にする
      • 誰かがIDLを書く
      • 蛸猫にPRを送る(質問でよく分からない回答)
      • 各ブランチにsubtree push(サーバ側で自動でやってくれる)
      • 作ったブランチで作業する
    • よいこと
      • テストカバレッジが減る
      • レッドの状態からスタートが切れる
      • 他のサーバサイドでは、Goのサーバを作るときに内部APIでIDLを定義
      • 学習コストの観点から、社内のエコシステムに乗っかるのも大事
    • 闇になりそうなのをいい感じに開発する

HTML5 Canvas and 滲み

  • side_tana
  • 光に辿りつけない

  • 画像を加工するAPI→画像が滲む

  • context.drawImage() 画像をcanvasに埋め込む
    • 拡大縮小できるけど、滲む。しかも、拡大縮小のアルゴが定義されていないので、自分で定義しないといけない
    • 境界線が滲んでる
    • Canvas?ブラウザ?画像データ?
      • JPEG(ハフマン符号で圧縮 8x8ピクセルのブロックに分割 chroma subsampling)
        • subsamplingでいろいろやると滲む
        • 量子化 圧縮率のパラメータ
        • 圧縮率/画質の変化で滲んでしまう 8x8pixelのブロック内
        • ブラウザ同士で比較すると、全部Safariのせいだ
      • ブラウザが犯人 ブラウザがあかんかったらどうにもならんやろ
      • JPEGデコーダを使う?
  • 結局原因は分からずじまいなので調査中

多国籍開発チームで日常的になにが起きているか

  • studio3104
  • 上司/同僚の悪口…ではない。
  • 闇はない あったとしてもここでは話せない
  • 多国籍開発チームで政治的な話をするときは気を使う
  • 公用語は英語
    • でも英語はそこまで得意ではない
    • 喋り英語が伝わらない
    • TOEICも500点くらい
    • チャットはいいんだけど。それもしんどい
    • 金/信仰/政治の話はしてはいけない 歴史もNG
    • するひつようのない話はしてはいけない
  • ソフトウェア開発における共通言語
    • コードがあれば会話が必要なくなる コーディング力/英語力も身につく
    • シモネタ(女性がいたらNG)
    • 相手が日本語を勉強する努力などをすると嬉しいので、自分も勉強したくなる 多国籍開発チームのよいところ

質疑

  • ブログはかいておーけー
  • 多国籍開発チームはリモート
    • 政治とか信仰とかは激しくセンシティブではないが、余計なことはいわないほうが吉
    • アニメも世界共通語
    • 飲みに行くのはリモートではない

追記

タイトル修正しました。「まとめ」をつけておかないと。