oinume journal

Scratchpad of what I learned

YAPC::Asia 2015に行ってきた(2日目)

前夜祭、1日目のエントリ

oinume.hatenablog.com oinume.hatenablog.com

ちなみにトークはYouTubeにアップロードされる予定だそうなので、正座して待ちましょう。

実はホットでオープンな Microsoft Azure

@myfinderさん。前夜祭で会った時に少しだけ話を聞いていて、面白そうなので聞いてみることにした。自分はもっぱらAWSしか使ってないけど、データのストリーム処理のところは使えそうだなぁと思った。その辺は自分たちのチームで開発しているのではなく、社内の別のチームに丸投げしているのだけど、かなり便利そうなのでもう自分たちでやるのもありなのでは?と感じた。

Azure

  • IaaS/PaasS/SaaS
  • 2014/02に日本データセンター開設
  • たくさんサービスある(500+)
  • リージョンたくさん
    • 日本だけで2箇所!

いけてるサービス

  • データ解析サービスの組み合わせ
  • Azure Stream Analytics with Event Hubs (リアルタイムデータ処理&分析)

Azure Stream Analytics with Event Hubs

  • Azure Event Hubs
    • 1500万req/sぐらいさばける!!(あと4倍ぐらいいけるのでは?)
  • Stream Analytics リアルタイムデータ処理
    • SQLライクに処理できる

Power BI Dashboard

http://qiita.com/myfinder/items/88cdad77c7472a02db61

Azure Machine Learning

Azureの下回りの話

  • コンテナ搬入Video
  • Catapult = 汎用サーバー+専用ボード

IaaSのモデル

  • Compute
  • Network
  • Storage
  • リソースグループ - 複数の要素をまとめるもの

Software Designed Network

  • ユーザーが仮想ネットワークを作ると何が起こるのか
  • NVGRE
  • Internet -> Azure SLB MUX(LoadBalancer) -> Azure SDN Stack(VFP)
  • 「NVGREのすべて」というMSの人が書いた本がある

Azure Service Fabric

質問

Adventures in refactoring

Ben Lavenderさん。

  • work at GitHub on internal tools

Refactoringとは

  • (なるべく)振る舞いをかえないでコードを変えること

  • consistency

  • DRY

Measuring Success refactoring

  • 振る舞いをかえない
  • ソースの行数が減っていること
  • テストカバレッジが改善されていること
  • パフォーマンスの改善

Reason to refactoring

  • 開発者が嬉しい - Developer Happiness
  • パフォーマンスがよくなる
  • 将来に対しての自信になる Gain confidence for Future Work (AKA paying off technical debt)
  • Developer education

technique

  • go fmt
  • types for verbs
  • Add useful abstractions
pull.branch_valid?
pull.branch_exists?
 ↓
pull.branch.valid?
pull.branch.exists?
  • Remove unused abstractions
  • deprecate :fetch, "Migrate" to fetch_with_limit plz"
    • CIはコケる
    • 本番では動く
  • Backwards compatible design

Write tools

  • Backscatter
    • back_scatter 72をコードの中に入れると、どこからcallされているかが別の画面で見れるようになる
    • def owners_team ; backscatter_deprecate_method ; end
  • science
science "widgets.loading" do |e|
  e.use {}
  e.try {}
end

Complaining

  • Really good search/replace
  • Extract resource
  • Language facilities
    • Java @deperecated
    • Ruby
    • compile-time deprecation sucks

わからなかった単語

  • generally speaking
  • criteria

questions

  • Sometimes refactoring is boring but it is necessary, so my question is, Is there a commendation system for refactoring at Github
    • emojiとかで称えてるよ。praise: 褒め称える

ソーシャルゲームにおける AWS 移行事例

RDSへの移行

  • connect時にタイムゾーン設定
  • rebootした時にfailoverさせる機能があるので、検証で使った
  • レプリ時にNOW() 使ってるとタイムゾーンずれちゃう問題
  • インポートだけで209分
    • 手順を工夫して90分

ElastiCache

  • 60秒ぐらいの処理でフェイルオーバーしてしまう

Go Debugging , Profiling, and Optimization

@bradfitzさん。memcachedの開発者でありMogileFSとかDanga::Socketとか有名なソフトウェアを作っている。今はGoogleでGoの開発チームで働いている。せっかくのトークだったのに途中でアラートメールが来て半分以上聞けなかったのが残念だった。Goのオブジェクトのメモリ割り当ての話とか、かなり深いところまでつっこんで話していたので、スライドをあとで熟読したい。

パフォーマンス

  • benchmark: b.ReportAllocs()
  • benchstat っていうコマンドもある
  • import (_ "net/http") でインポートして http://localhost/debug/pprofでアクセスするとプロファイリングできる?

質問

  • プロファイリングの結果をGUIで見れる?

最後に

今日は@kyannyさんと話す機会があって(というか一方的に話しかけただけなんだけど)、Quipperの国際展開(フィリピン、インドネシア、メキシコ)や現地のエンジニアとどういう風に開発しているかという話が聞けて嬉しかった。

YAPCには2006年からほぼ毎年行っているのだけど、YAPCで会って仲良くなって飲みに行くぐらいの仲になったり、ここに来ると純粋にもっと開発したくなる気持ちになるので、今年で(JPA主催の)YAPCは最後になってしまうのはとても残念。でもYAPCがあるから普段話さない人とも話すことがあったし、得られたことがとてもたくさんあったので本当に運営の牧さんやJPAのみなさんには感謝しています。今まで本当にありがとうございました!!