by shigemk2

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

Scala導入あれこれ #Scalive

@takezoux2

  1. 芸者東京
  2. なぜScala
  3. どうやってScalaの人をとるの
  4. ステマ

芸者東京

下請けから電脳フィギュアARisへ これは割と売れた

電脳フィギュア

ガラケー向けソシャゲ→アプリ向けソシャゲへ

なぜScalaに変えたのか

  • Java書くのはだるい
  • 動的言語もちょっと…(RoRも)
  • typoとかで死ぬこともないし
  • 大規模開発だと動的言語はきついし

Scala の長所短所

長所

  • コード量がJavaと比べて1/3に減る(体感)
  • コンパイラがいろいろチェックしてくれる
  • 「実行速度」はJava並
  • 関数型言語としても使える(マルチパラダイム)
  • Javaの資産(ライブラリ)もつかえる

短所

  • コンパイルが長い(使い始めてから気づく)
  • バージョンアップが頻繁(新しい言語なので) 2.10以降はかなり安定している

Scalaの人をどうやってとるの?

  • よく聞かれる。でもScalaを使える人はまずいない。
  • 採用フェーズ(言語を複数使える人を取る)
  • Scalaを書ける人、ではなくScalaを書けるようになる人を取るようにした(最低でも2、3、できれば10)
  • 採用後はBetterJavaでいいのでOJTで書いてもらう
  • 1週間2週間あれば本番に入れられる開発スキルは得られる

是非Scalaを使おう

  • Scalaは良い言語
  • 人も取れる(Scalaを使えるようになる人はいっぱいいる)
  • 日本のコミュニティも活発

Scala勉強会第130回 in 本郷 - Scala勉強会 in 東京 | Doorkeeper Enjoy.scala ! 日本最大級の Scala のカンファレンス - ScalaMatsuri

おみせやさんの話 #Scalive

おみせやさんとは

ガラケースマホでいけるお

mixiプラットフォームでやってた Wicket→Lift

  • nginx tomcat7
  • MySQL
  • Cassandra

  • Scala開発経験はない

  • 新しいことへの適応能力があれば、Scala知らなくてもいける。

  • implicit conversions こわい(一日中はまる)

古いバージョンを使い続けること

  • 気軽にバージョンアップできない
  • 開発効率が上がる
  • 利益損失につながるかも

いきなり最新版にはせず、フレームワークと言語で少しずつバージョンを上げていく

  • LiftとScalaの変更履歴は読む
  • バージョンアップの時期が遅れるほどぐぐっても見つからなくなる
  • 単体テストと負荷テストをやって問題なければ本番でバージョンを上げる。地道に段取りを決めていけば問題はない

  • Scala勉強会に出る

  • Scalaちゃんに癒やされる

→Scalaは怖くないよ!!!

倦怠期 #Scalive

@akehoyayoi

脳トレクエスト2プログラマ(企画からやってる)

データ作ったりメモリリーク直したり…

良く言えばフルスタックエンジニア、悪く言えば、パシリ

(平たく説明すると)パズドラのパズル部分を脳トレに変えた

脳トレクエストについて

クライアント

cocos2d-x 2.X系(C++/Objective-C/Java)

言語の機能を再実装するクソフレームワーク

サーバ

Play 2.2.1(Scala)

そろそろバージョンアップしようって話は上がっている

なんでScalaなの

  • 社内政治的に村八分にならないようにScala
  • 他のフレームワークを覚え直すのも面倒

  • ELB

  • Play
  • Amazon Elasti Cache
  • Amazon RDS

PlayFrameworkはScalaのフレームワークとしては普通のシェア

でも倦怠期とは言わせない

Not only Sever But also Tool(原文ママ)

動的言語っぽい使い方がScalaでは出来る。Ruby Pythonで出来たツールをScalaで書ける サーバをScalaで書いているけど、ツールもScalaで出来る

Scala→C++の自動生成ツール。C++を書くのは面倒なので、自動生成したい

C++のコードを大量生成できるので開発がだいぶ楽になった

データをExcelで作ってRDBに入れないといけないケースが存在するなら使ってみてはどうか geishatokyo/sql-generator · GitHub

テーブル定義の差分を抽出してAlter文書いたりみたいなことをしているなら使ってみてはいかがか。

レベルごとのステータスをSQLに吐き出す。このツールが使われる前はExcelマクロを使っていた。

giter8

まとめ

  • Scala使うにしても比較的ノウハウが出てきてるフレームワークで本番環境を固めている
  • 動的言語で作るようなツールもJavaだと面倒だがScalaだとサクッと作れる

DSPを始めよう #Scalive

@mazgi

SphereのManager

Scalaと鉞

Maverick.,inc. マーベリック株式会社

Sphereを始めて半年

  • Maverick inc.はScala Matsuriを応援しています

  • サービスインあるある

  • 鉞を投げる機会はいっぱいあるよ

ScalaのRTB-DSP Sphere

  • Real Time Bitting Web広告が表示された瞬間に広告枠のオークションが行われ配信される広告が決まる仕組み
  • DSP 広告主に代わりSSPから広告枠を買い付けるプラットフォーム
  • SSP 広告媒体者に代わりDSPに広告を販売するプラットフォーム

広告の流れは数秒、入札から入札判断までは100ms

  • RTB部分はScala Play2
  • 集計、機械学習部分はScala
  • Web管理画面はPlay2
  • 機械学習導入
  • すべて物理サーバ(レイテンシにこだわるから)

運用してみて

  • フローは固まってきた
  • GitHub.com
  • PR駆動
  • git-flowとredmime、そしてSkype
  • Ansibleでdeploy
  • sbtとPlayのバージョンを数種類併用
  • sbtenv playenvでビルド
  • ミドルウェア依存部分のテストがまだまだ
  • 本番はだいぶ安定
  • playenv sbtenv sbt-extrasでバージョン対応(バージョンが混じっていても問題ない)

エピソード

  • ScalikeJDBCで爆速
  • MySQL to MariaDB
  • Hadoop(YARN)な話

ScalikeJDBCで爆速

Webのコンパイルが爆速になったのか コンパイルが5分とかザラ、場合によってはもっとかかるかも

MySQL to MariaDB

Welcome to MariaDB! - MariaDB

MySQL5.1.69 MariaDB5.5.32

ベンチマークで早くなったかどうか分からん

transactions/s 653→822

Hadoop(YARN)

Hive Jobがメモリを使ってくれない mamory(typo)

これからのShpere

  • もっとScalaを活かしたい(JVMとGCと仲良くなる)
  • アーキテクチャ刷新(もっと複雑になるかも)
  • ログ収集と解析を強化する(まだまだ改善の余地がある)

アーキテクチャ

nginx MariaDB Hadoop(入札ログデータなど) memcached(キャッシュが弱いので) fluentd(ログ収集)

最後に

鉞の投げ方

  • Twitter @mazgiに鉞を投げる
  • 次回のScaliveで壇上から鉞を投げる
  • 入社して鉞を投げる

ガーベジ・コレクション:GC ( Garbage Collection ) についての簡単な説明と調査方法