Scala Days 2015 San Francisco に参加してきました (5)


(前回から続く)

Scala Days 閉幕の翌朝、私はタクシーに乗り込みモスコーニ・センター近くの Galvanize University へと向かいました。そこで Scala Days アンカンファレンスが開催されたからです。

sf4-1

このアンカンファレンスは、Scala Days ゴールドスポンサーでもある Nitro Software1の主催によるものです。

sf4-2

参加者は 10名〜15名程度。
私が日本から来たことを告げると emoji (絵文字) の話題になったり2するなど、とても和やかな雰囲気でした。

各々が手を挙げて、自主的にセッションが行われました。

[10:00] Sequencing Futures

sf4-3

最初のスピーカーは jedesah さん。Future をより効率的に使うためのライブラリの紹介です。

  • Future.sequence はナンセンス
  • Future をキャンセルするには?
    • Twitter はキャンセル可能な Future を作った
  • モナドは非常に強力

[10:40] Scraping Reddit with Akka Streams

sf4-4

Akka Streams を使って Reddit3のスクレイピングをしたという話。

  • アップストリームとダウンストリームの差がある場合に有用
  • Reddit のワードカウントの例
  • Scalaz streams との違いは? 性能にどれほど差があるかは不明

[11:20] Introduction to Intuitionistic Type Theory

sf4-5

圏論、カリー化、型理論といったキーワードが出てきましたが、残念ながら私は途中から付いていけなくなってしまいました。(いつか理解できるようになりたい……)

[12:00] ランチ

会場近くの Tava Indian Kitchen でカレーをテイクアウト。
注文方法がなかなか日本では目にかかれないスタイルで、若干戸惑いました。

  • まず、ベースをブリトー、ライス、サラダの中から選びます。4 私はサラダにしました。
  • 肉やチーズの選択。ここは無難にチキン。
  • その上にかけるカレーソースも何種類かあります。よく分からないので “spicy” を注文。
  • トッピングの選択。英単語が分からないので、ここは “all of them!” 一択です。
  • サイドメニューとして、ガーリック・ナンを注文できます
  • アメリカなので、やっぱり量が多かったです

[13:00] Scala Back to Basics: Type classes

sf4-6

型クラスについての話。
また、Scala 学習者向けの教材を色々作っているようで、後ほどその一部を見せてもらいました。

[14:00] Discussion Forum: Driving Scala adoption

椅子を環状に並べて座談会を開催。

sf4-7

  • 一人ずつ自己紹介をして Scala のユースケースを紹介したり
  • Scala の良さを説得して、会社で採用させるためにはどうしたらいいか、といった日本でもよくある話題とか
  • functional.tv がオススメという話とかをしました

[15:00] Adtech x Scala x Performance Tuning

なんと、ここで私の発表です。
全く準備していませんでしたが、昨年発表した こちらのスライド をその場で英訳し、アドリブでなんとか乗り切りました。

非常につたない英語だったと思いますが、皆さん温かく見守ってくれました。感謝感激です。5

今回のカンファレンスのオーガナイザーである、Nitro Software の Alexy Khrabrov さん が写真を撮ってくれました。

<

p>また、この後ある参加者の方と会話し LMAX のパフォーマンス・チューニングについて教えてもらいました。やはり自分からアクションを起こせば、必ず得るものがありますね。

[15:40] Android App Dev in Scala

そして、トリを飾るのは Scala Matsuri の主催でお馴染み、我らが麻植(おえ)さん!
Android 向けアプリを Scala で開発をする際の苦労とノウハウについてのトークでした。

sf4-8

実に堂々たる発表でした。今回私が話すことができたのも、麻植さんがきっかけをくれたお陰です。本当に見習うべきことばかりです!
また、アンカンファレンスが終わった後も色々な国のカンファレンス事情を語ったりなどして、
1時間くらい楽しい時間を過ごしました。


これから勉強すべきことは山ほどありますが、6千里の道も一歩から。
胸いっぱいの充実感を得てサンフランシスコを後にしました。

(おわり)

  1. 現地では「ニトロ」ではなく「ナイトロ」と発音されます []
  2. Unicodeの変数名を付けている奴がいるよ、とか []
  3. 英語圏のソーシャルブックマーク+電子掲示板サイト []
  4. サラダがライスと同列! []
  5. これまで何気なくカンファレンスの英訳スタッフなどを横目でみていましたが、こんなに骨の折れる作業なのかと改めて実感しました []
  6. Scala も英語も数学も…… []

Scala Days 2015 San Francisco に参加してきました (4)


(前回から続く)

Scala Days 2015 サンフランシスコの 3日目のレポートです。
私が聴講したセッションについてポイントをまとめます。

尚、発表スライドはこちらにリスト化されていますので、あわせてご覧ください。

3日目


早いもので Scala Days 2015 San Francisco も最終日。
この日も用意された朝食を満喫してから、キーノートの会場へ向かいます。

[09:00] Technical Leadership from wherever you are

sf3-1

テクニカル・リーダーの心構えについてのプレゼン。
Scala Days の参加者にはリーダー層の方が多いようで、質疑応答の時間が終わっても Dianne さんを取り囲み、白熱したディスカッションが続けられていました。

  • リーダーシップとは何か
  • 組織の中でリーダーシップを発揮するには?
    • 多くの人の意見を聞き、実践する
    • 成功体験を捨てる
    • 信念のために立ち上がり、恐怖に打ち勝て
  • リーダーは何をするか
    • ビジョン、戦略を持つ
    • コミュニケーション
      • 傾聴すること
      • 人によって会話のプロセスは異なる
      • 情報と時間を与える
    • フィードバックを得る
      • これが一番重要
      • あなたが常に正しいとは限らない
  • テクニカル・マネージャの困難
    • ミーティングばかりでコードを書けない
      • それでも、Tech Muscle (技術筋肉) を鍛え続けよう
    • 締切のない (Off-critical path) プロジェクトを作る
    • 社内ハッカソンはとても良い
  • 最初の仕事から、経営者のように振る舞え
  • 質疑応答
    • 2人のリーダーが異なるビジョンを持っており、対立している。どうしたらいいか?
      • (これは切実な問題ですね)

[10:25] How Scala is made

sf3-2

Scala言語のコンパイラやコアライブラリの開発を行っている Typesafe社のエンジニアの発表。

  • なぜ Scala を作るのか
    • インパクトを与えたい
    • 新規性と普及度の両立
      • 当初は多くの博士が作った言語ということもあり、新規性が高かった
      • C と似たシンタックスだと普及しやすい
    • 安定性が大事
      • 測定可能にする
      • しかし、安定のために機能を捨てるのは悲しい
  • どのように新しい機能を検討するのか
    • コンパイラやコアライブラリの機能追加は 1年以上かかる
    • ユーザーをセグメント化して分析
    • オプト・イン方式で、フラグとしてリリース
  • ツールとベストプラクティス
    • ツール最優先主義
      • 良いツールを使えば、自然と品質、生産性、リリース速度が向上する
    • 巨大な Scala コミュニティのフィードバック・ループ
    • 検証の非属人化
      • Pull Request が送られる度に、複数の観点のテストが走っている
    • どんどんオープンになっているのは素晴らしいこと

[11:35] The Unreasonable Effectiveness of Scala for Big Data

sf3-3

Typesafe社でビッグデータ・アーキテクトを務める Dean Wampler 氏が、ビッグデータと関数型言語の関係について語りました。

  • Hadoop
    • Yahoo で大規模事例あり (2008年時点で 16PB, 4000ノード)
    • MapReduce
      • アルゴリズム実装の難易度が高い
      • APIの問題でボイラープレートが多くなってしまう
    • Scalding (by Twitter) が唯一の希望
      • それでもディスク読み込みのパフォーマンス、バッチとストリームの統合に課題あり
  • Spark
    • 非常にエレガントな関数型API
      • 様々なアルゴリズムに柔軟に対応できる
    • バッチ (mini batches) もストリーム処理も同じように扱える
  • データ処理は数学
    • Algebird (by Twitter)
      • 抽象代数学ライブラリ
      • モノイド・群・環といったものが実装されている
      • サンプリングではなく、ハッシュを使って空間効率を高め、推定する
    • Spire
      • 高速かつ正確な数値計算ライブラリ
    • Scala NLP
  • Spark を使った実装コード紹介
    • 飛行機のフライトに関するシミュレーション

[12:20] ランチ

sf3-4

[13:20] Akka HTTP: The Reactive Web Toolkit

sf3-5

Akka Tech Lead1の Roland Kuhn 氏のプレゼン。Coursera のビデオでもお馴染みの方です。
Akka HTTP の話を期待していたのですが、大部分は Akka Streams のライブ・デモでした。

  • Akka Streams
    • ライブ・デモ
      • Source, Sink を作る
      • mapAsync
      • HTTP ストリーム
  • Akka HTTP
    • もうすぐ開発が終わりそうなところ
    • SSL対応も BidiFlow で実装。本当にもうすぐ実装されるが、Scala Days には間に合わなかった
  • 質疑応答
    • HTTP2 への準備は?
      • まずは HTTP1.1 への対応をしているところ
      • 夏以降か、来年になるか、未定
    • WebSocket
      • SSL対応と同じ時期に、すぐに対応する予定

[14:30] The road to sbt 1.0 is paved with server

sf3-6

日本人には馴染みの深い、横田さんと Josh の sbt についての発表。
2人の掛け合いが絶妙で、会場はとても和やかな雰囲気でした。

  • ビルドツールの歴史
    • sh, make から ant, Maven, Rake といったツールを振り返り
  • sbt 1.0 へのロードマップ
    • sbt-server
      • モジュール化
      • IDEなどからもアクセスできるように
      • まだまだ課題も多い
    • より安定的に
    • プラグインのバイナリ互換性、ビルドソースの互換性を向上

[15:40] Scala needs YOU!

sf3-7

Scala のコントリビューション・ページを一新したそうです。
コミュニティへの貢献について、熱く語ってくれました。

  • コミュニティのためにできること
    • ドキュメントを書く
    • バグ修正
    • ツール/IDEの開発
    • コアライブラリの開発
    • 機能拡張
  • ドキュメントから始めよう
    • 最も完全である必要がある
    • 更新が必要
    • 何よりも助けが必要
  • バグ報告
    • まずはガイド scala-lang.org/contribute を読むこと
    • 書く前に読むのが大事
      • 未整理のもの、議論中のものが多くある
    • チェックリストの確認も忘れずに
  • Scaladoc
    • ドキュメントが欠けている部分を見つける
    • スペルチェック、文法、コードのチェック
      • concurrent.Future のように良いガイドを全てに付けたい
    • Wiki を更新するのも良い貢献
  • ツール/IDE
    • Scalariform にはまだアイコンが無い。チャンスだみんな!
  • コアライブラリ
    • SLIPs: コアライブラリの提案集

[16:50] Why Scala.js

sf3-8

Scala.js のコミッターである Li Haoyi 氏の発表。
軽妙なトークで会場を盛り上げていました。

  • デモ
    • OpenWeatherMap から天気の情報を取り出し、AJAXで表示する
  • Webアプリを作っているScala開発者には
    • JavaScript を書く必要がなくなり、Scala だけで完結
    • ブラウザサイドでも型安全に
  • Webアプリ以外を作っているScala開発者には
    • 作ったものをWebで公開すると、みんなが見てくれる
  • コンパイラ開発者には
    • Scala.js はコンパイルが楽しい
    • リフレクションを使っていないので安全
    • コンパイル時間や出力バイナリのサイズなど、最適化も日々進歩している
  • 質疑応答
    • なぜJS自身ではなくJVMでコンパイルしているのか?
      • JSは速い(Pythonの5倍)と言っても、Javaよりは遥かに遅い
    • TypeScriptについてどう思うか?
      • JS自体が冗長だという問題は解決されていない
      • 複数のFutureのようなAjaxをまとめることができない

カンファレンスを通じて Scala.js に乗り遅れるな、という雰囲気を随所で感じました。
既に「実用レベル」とのことなのでまずは触れる機会を増やしてみようと思います。

[18:00] Closing Panel and Thank You

  • Typesafe
    • 司会: Josh Suereth
    • Adriaan Moors (Scala Tech Lead)
    • Lukas Rytz
    • Jason Zaugg (scalaz コミッター)
    • Grzegorz Kossakowski

sf3-9

最後は、恒例の Typesafe メンバーへの質疑応答コーナーでした。

  • 今後のロードマップは?
    • 2.11.9 は年内にリリース
    • 2.12 の開発も進行中
  • Java の機能を Scala に持ってくる計画はあるか?
    • ない
  • TASTY の仕様確定は?
    • tasteless という噂も

こうして世界的な Scala イベント、Scala Days も盛況のうちに幕を閉じました。
次回は6月にオランダ・アムステルダムで開催されます。

サンフランシスコ、素晴らしい時間をどうもありがとう!

sf3-10

(つづく)

  1. ちなみに、元 Tech Lead の Viktor Klang 氏は Typesafe社の副CTOというポジションになったそうです []

Scala Days 2015 San Francisco に参加してきました (3)


(前回から続く)

Scala Days 2015 サンフランシスコの 2日目のレポートです。
私が聴講したセッションについてポイントをまとめます。

尚、発表スライドはこちらにリスト化されていますので、あわせてご覧ください。

2日目


この日からは終日のセッションです。会場に入ると、朝食が用意されていました。

sf2-1

[09:00] Why Open Languages Win

sf2-2
2日目のキーノートを務めたのは、オープンソース界の女王という二つ名を持つ Danese Cooper さん。オープンソースに対する熱い思いを語ってくれました。
(スライドの表紙は スパイvsスパイ)

  • これまでの軌跡
    • Microsoft, Apple, Symantec, Sun などで様々なプロダクトのオープンソース化に尽力
    • Java One Tokyo (2005年) で サプライズ的に Java のオープンソース化を発表した
  • オープンソースをめぐる戦い
    • C++ vs Java
    • S vs R (統計ソフト)
    • Windows vs Linux
  • GitHub 時代の到来
    • 「ただプロトタイプを作っているだけ」と装っている間に完成させてしまおう (笑)
    • もし新しい言語を作るなら、オープンソースであることが必須条件
      • 金に目が眩むと絶対失敗する
    • Scala の未来は明るい
  • 質疑応答
    • 大変だったことは?
      • コミュニティを形成させてゆくプロセス。
    • マネタイズのモデルは?
      • スポンサー、基金、ライセンスモデルの選択などで成功事例がある。
    • ライセンスについて
      • 法律家に聞くこと。国や、(アメリカでは)州によってルールは色々。

[10:25] Visualize the things

sf2-3

ビッグデータの可視化ツール Sparkle の紹介。

  • オープンソースのデータ可視化クライアント
    • Kafka, Cassandra, D3.js を使用
    • WebSocket と独自の Sparkle プロトコルでストリーミング処理
  • デモ
    • sbt run で Webサーバが立ち上げる
    • D3 ならではの綺麗な見た目で、ズーム処理もスムーズ
  • パフォーマンスとスケーラビリティ
    • スループットを向上するために、メモリ構造から根本的に考えぬいた
    • Reactive Streams を使うことで GC 頻度も減らせる
  • ライブ・レイヤーとデータ・アーキテクチャー
    • Extract Transform Load
    • ライブ処理とバッチ処理

[11:35] Shattering Hadoop’s Large-Scale Sort Record with Spark and Scala

sf2-4

Databricks の共同創設者であり Spark のコミッターでもある Reynold Xin 氏が、Spark の速さの秘訣を紹介してくれました。

  • Spark プロジェクトは、以下の全てをカバーすることが目的
    • 様々なデータサイズ (GBから TB, PB級まで)
    • 様々なストレージ・メディア (RAM/HDD/SSD)
    • 低レイテンシーが要求されるストリーム処理から、長時間のバッチ処理まで
  • ソート処理でベンチマークを取る
    • ディスクI/O, ネットワーク帯域なども含め、総合的なベンチマークになる
  • 高速化へのポイント
    • アプリレベルでの最適化 (よい子はマネしないでね)
      • while loop を使う
      • Scala/Javaのコレクションライブラリを避ける
    • GC 対象外のメモリプールを作る
      • DirectByteBuffer / sun.misc.Unsafe
      • ただし、メモリ使用率が 50% を超えた場合はチューニングの効果は薄くなりがち
    • キャッシュに最適化したソート
      • TimSort / AlphaSort といったアルゴリズム
  • 質問
    • JNI を使わないのはなぜか?

[12:20] ランチ

sf2-5

[13:20] Scala – The Real Spark of Data Science

sf2-6

Spark の話題かと思いきや、フタを開けてみたら「ハンドベル」の話でした。

  • ハンドベルの会社の喩え
    • SCHULMERICH vs Malmarlk
    • どちらが優れているかを議論するのは、よい時間の使い方ではない
      • それよりもユーザ体験向上に尽力すべき
    • Hadoop vs Spark の議論も同じこと
  • 関数型言語と手続き型言語の比較
    • Haskellや圏論、ラムダ計算を知らないと関数型言語を使えない? そんなことはない
    • 逆に手続き型で全てを成し遂げようとしたほうが複雑
    • 関数型のデータ構造の考え方(あるいは基本的な数学)は、ビッグデータに応用できる
  • まとめ
    • 関数型は直感的だ
    • 関数型はシンプルだ
    • 関数型はパワフルだ

[14:30] Type-level Programming in Scala 101

sf2-7

  • Scala におけるコンパイル時の計算
    • val, lazy val, def キーワードは実行時に評価されるが、type はコンパイル時に評価される
  • 組み込み型の値を「型」で表現してみる
    • Boolean
    • Int
    • List[Int]
      • コンパイル時に要素数を知るための工夫
  • 主な用途
    • コンパイル時計算 (実行時計算の削減)
    • コンパイル時バリデーション
  • 質疑応答
    • 今回のコードは実践的なプログラムで使えるか?
      • 「否、これはただの遊びだ」
  • 所感
    • final val でも確かコンパイル時の最適化が走ったかと思います
    • C++のTMPを思い出しました。C++14ではconstexprが大幅に制限緩和され非常に使いやすくなりましたが、Scalaにもいつかその流れが来るのでしょうか。

[15:40] Stream as Scala Collections

sf2-8

今回の Scala Days のゴールドスポンサーでもあるニトロソフトウェアの発表。AWS S3 の処理のために、独自のストリーム処理ライブラリを作ったとのこと。

  • ニトロソフトウェアについて
    • クラウド上でのドキュメントサービスを提供
    • ユーザ体験、状態の変化、変動する負荷、予期せぬエラーに対して、全てがリアクティブに設計されている
    • 数十億個の S3 オブジェクトを常時利用
  • なぜストリーム処理か
    • 仮に 1% のエラーでも数千万件のオブジェクトを失う。ビジネス損失が大きい。
    • AWS S3 に合わせた並列化: Amazon の環境は遅くなったり早くなったりする
  • コードは GitHub(https://github.com/nitro/streamcollections/)で公開
  • 質疑応答
    • ライブラリから、ストリーム部分だけを切り出してライブラリ化したほうがよいのではないか。AWSライブラリへの依存は重すぎる。

[15:40] Type-safe off-heap memory for Scala

sf2-9

前のセッションが早めに終わったので、もう一つ見に行きました。型安全な off-heap メモリを実現するライブラリ scala-offheap の紹介。

  • off-heap メモリの必要性
    • GC対象としたくない
      • 巨大なデータをメモリに乗せる
      • 厳しいレイテンシ要件を満たしたい
    • ネイティブコードとのメモリ共有
  • off-heap メモリの使い方
    • Direct byte buffers
      • 1バッファあたり2GBという制限
      • 境界チェックによる性能劣化
    • sun.misc.Unsafe
      • メモリの不正アクセスやリークの温床となりがち
    • C言語でコードを書き、JNI/JNAでアクセス
      • 多くのボイラープレートコード
      • 構成の複雑化
      • メモリリークの問題
  • 具体例
    • 二次元座標
  • パフォーマンスを重視
    • メモリプーリングは定数時間で実行可能
  • 質疑応答
    • off-heap メモリと on-heap メモリをクラスからシームレスに使うことはできるか?
      • sun.misc.Unsafe ベースであるため実現は難しい
    • off-heap メモリの共有はできるか?
      • 現状、サポートしていない

[16:50] Function-Passing Style, A New Model for Asynchronous and Distributed Programming

sf2-10

今や Josh と並び Scala Days の顔である、 Heather さんの発表。昨年の Scala Days で発表した Spores を発展させ、関数パッシングモデルという新しいプログラミング手法のアイデアを披露しました。

  • アイデアは Actor の逆
    • メッセージではなく、関数をやり取りする
    • 分散プログラミング・高分散モデルへの適用が狙い
  • コンセプト
    • Silos (サイロ): データを保管するための貯蔵庫。データは全て immutable
    • Spores: ポータブルかつシリアライズ可能な関数
    • サイロの間をラムダが行き交うイメージ
  • 現在の状況
    • 論文のドラフトを作成中
    • googleグループ function-passing でも議論中
  • 質疑応答
    • 関数の合成とは何が違うのか
    • Spores が巨大になったらメモリを使い果たすのではないか
      • 課題として認識しているとのこと
    • パフォーマンスはどうか
    • master ノードの冗長性は?

[18:00] Easy Scalability with Akka

sf2-11

初心者向けセッションの部屋でしたが、DDDD (Distributed Domain-Driven Design / 分散型ドメイン駆動設計) がテーマの熱い内容でした。

  • キーワード
    • DDD: ドメイン駆動設計
    • Akka は Erlang/Elixir と似ているが、よりベターである
    • CORS: Command Query Responsibility Segregation
    • ES: Event-Sourcing
  • 従来のDDD
    • I/O がボトルネックになる
    • データストアの共有が必要
    • 大量のインスタンスが必要
  • DDDD
    • スケーラビリティ
    • フェールオーバー
    • シンプルさ
  • オンライン・オークションの実装例
    • Gatling で性能測定してみた
      • 測定結果の形状に大きな違い
      • ボトルネックが変わったため
  • CRUD の場合
    • ノードを追加しても、性能が線形に向上しない
    • コンテンション(競合状態)が増える
    • チューニングがあまり役に立たないことも多い
  • CQRS の場合
    • 結果的に CRUD の約3倍のスループットを達成
    • ノードを追加すると、ほぼ線形に性能も上がる
    • 競合なし
    • チューニングが重要
  • 質疑応答
    • ビジネスドメインが変わって、DBのスキーマが変わったら?
      • 過去は変えるな by Jonas
      • とはいえ、デシリアライズの工夫など泥臭い対応も必要
    • Apache Camel おすすめ

[18:45] コミュニティパーティー

この日はセントパトリックデーということもあり、アイルランドにちなんだ料理が並んでいました。

sf2-12

(つづく)