Scala Days 2014 に参加してきました (2)


前回 の続きです。

私が聴講したセッションのみのレポートとなります。

2014-07-04追記:
全セッションの動画とスライドはこちらにアップロードされています。

2日目


いよいよカンファレンス本編のスタートです。
ホテルから電車を乗り継ぎ Weberwiese 駅で降り、歩いて会場の Kosmos Berlin へ。

weber

[09:00] キーノート: Erik Meijer@headinthebox

スピーカーの Erik Meijer 氏は昨年の Coursera の講義 で Martin Odersky 氏らとともに講師を務めておられた方です。

講演のタイトルは『The Lost Art of Demotational Semantics』。
ホームページ上の記載とは異なる内容ですね。全編手書きのスライドが Cool なセッションでした。

内容は氏のツイートにもあるように

関数型プログラミングの始祖ともされるクリストファー・ストレイチー氏の理論に従って
Scala の try – finally を再実装してみようという話です。

  • Scala の try – finally の実装は Java のそれとは異なっています。
  • 以下のコードで定義した関数は、それぞれどのような結果が得られるでしょうか。

erik1

なにゆえこんな(一見)奇妙な動作をするのか、そこにはしかるべき基礎があるとのことです。

  • いくつかの記号を定義して try – finally を議論していく様子

erik5
erik2

  • 最後は双対(dual)、カタモルフィズム、アナモルフィズムに話が及びます。

erik3

圏論をきちんと学んでいれば、より理解が深まっただろうと感じたセッションでした。
後日改めて復習しようと思います。


[10:00] Functional Query Optimization with Spark SQL

  • スピーカー: Michael Armbrust – @michaelarmbrust
  • スライド
  • Spark の概要説明
    • Hadoop と親和性が高く、MapReduce よりも高機能
    • Scala との相性もよく、開発者の手間を削減できる
  • Spark SQL の紹介
    • まだ発表して間もないプロダクト
    • Shark との違い
    • スキーマRDDを宣言可能
    • クエリを解析して自動的に最適化する (フィルタ処理を先に実行したりなど)
    • TPC-DS (ビッグデータ向けの標準的なベンチマーク) のテストでは Shark より良い成績
    • Scala の リフレクション + 準クォート(quasiquotes) 機能を使うことで、 Spark SQL 自体も非常にシンプルなコードになっている
    • 将来的には、型安全なクエリ結果にも対応する予定

[11:00] Reactive Streams: And why you should care.

息の合ったお二人の掛け合いが絶妙で、常に会場の笑いを誘っていました。
『Reactive Stream』は、他のセッションでも度々登場した重要なキーワード。
リアクティブ宣言 の流れをくんだものです。

  • ストリームとは何か
    • サイズに依存しないデータの流れ
    • プロセスネットワークとして表現できる
  • Reactive Stream
    • java.util.stream は他のコレクションと異なる挙動があり、直感的でない
    • みんな同じ問題を抱えており、それぞれのコミュニティが独自のソリューションを開発していた
    • 共通のソリューションを提供することが狙い (組織の垣根を超えてトップエンジニアが集結)
    • ストレージ、メモリ量には制限をかけつつも異なる処理性能に柔軟に対応する
    • Push と Pull のハイブリッド機構 (Dynamic Push-Pull) なので、どんなに負荷をかけても OutOfMemory が起こらない
      • といいつつもセッション最後のデモで OutOfMemory が発生し会場爆笑
    • Reactive Stream では最小限のインタフェースだけを提供し、APIに完全な自由を与える
    • 将来は JDK への統合も提案している
  • デモ

銀行口座の振込フローのプログラムがデモで実行されました。

kuhn2

  • Q&A
    • scalaz-stream との関連はあるのか
      • インスピレーションを受けてはいるが、Reactive Stream は別のものを目指している

[12:00] ランチ

ビュッフェ形式で肉も魚もなんでもあり。
スイーツがおいしかったです。


[13:00] Learn you an sbt for fun and profit!

  • スピーカー: Daniel Westheide – @kaffeecoder
  • スライド
  • コード
  • 基本的な SBT の使い方

  • Setting[T], Task[T] について
  • 独自プラグインの作成方法
    • 例として、リリースノートを自動で生成するプラグインを作成
  • 便利なプラグインの紹介
    • sbt-revolver: sbtシェルのバックグラウンドでアプリケーションを実行して監視
    • sbt-updates: Mavenリポジトリを参照して、依存ライブラリの更新をチェック
    • sbt-license-report: プロジェクトで使われているライブラリのライセンスを報告
    • sbt-git: sbtシェルから直接 Git の操作を可能にする

[14:00] akka-http: (un)REST for your Actors

  • スピーカー: Mathias Doenitz – @sirthias
  • スライド

  • akka-http とは

    • spray.io を改善したもの
    • Reactive Stream を使用した HTTPモジュール
    • 並行・分散処理を簡単にする、という Akka の思想を受け継いでいる
  • akka-http サーバ/クライアントAPIの利用方法の説明
    • パイプライン処理
    • エンティティが読み込まれる前にレスポンスを返すことも可能
  • Q&A
    • 次期バージョンのリリース次期は未定
      • HTTP2.0 の対応はその後
    • 現時点で、これから(プロダクション環境向けに)新しいプロジェクトを始めるとしたら Spray と akka-http のどちらを使うのがよいか。
      • akka-http の機能がどうしても必要という場合を除いて、現時点では安定している Spray を推奨する

[15:00] Lightning-Fast Standard Collections With ScalaBlitz

スピーカーはEPFLの方。

  • Scala のコレクション操作は Java と比べてなぜ遅いのか
    • とあるコード例で Scala が遅い原因を分析
      • 引数および結果のボクシング
      • foreach, reduce 関数の動的ディスパッチ
      • イテレーションそのものではなく、メソッド呼び出しのオーバーヘッドが大きい
  • ScalaBlitz を使えば、optimize {} を付けるだけで性能向上
    • 並列コレクションも大幅に性能アップ
    • Range, Array は顕著に性能改善、他のコレクションにも効果あり (スライド55ページ参照)
  • ScalaBlitz はマクロ(準クォート/quasiquotes)を使ってコードを解析し最適化されたコードを生成している

[16:00] Simplifying Scala — The Past, Present and Future

スピーカーは Scala のイシューを管理している方。
Scala言語そのものの進化の軌跡を辿るセッションです。
立ち見が出るほど大盛況でした。

  • Scala が目指す方向性
    • シンプルに、一貫性のある形に
    • 学習曲線を緩やかに
    • 落とし穴(ハマりどころ)を少なく
  • イシューの影響度と頻度を考慮して優先順位付けをしている

  • 過去のイシュー対応
    • 暗黙的なUnit型の挿入をなくす
    • 浮動小数点記法の改善 (1 .+(2)1.+(2) の違いに気づかせる)
    • 8進数リテラルを非推奨に
    • for 糖衣構文中の val 使用に関する曖昧さを排除
  • 現在のイシュー対応
    • プロシージャ構文の改善
    • View Bounds (<%) を非推奨に (implicit パラメータを推奨する)
  • 今後のイシュー対応
    • map関数のパラメータなどで、=> の左側のタプル指定をデフォルト不可に
    • 情報落ちの発生する暗黙的な型変換に対する警告
    • 列挙型
      このような構文を検討中とのこと。

  • デフォルトのインポートの改善 (使われない/使えない インポートが含まれている)

  • Avian VM というJVM互換の軽量なVMを開発中

    • 試してみてください、とのこと

[17:00] Spores: Towards Function-Passing Style in the Age of Concurrency and Distribution

発表者は Heather さんという女性の方。現在EPFLの博士課程で、Odersky氏とともに Scala チームの一員であるそうです。
(そういえば Coursera のコースでも色々サポートされていました)

とてもオシャレなスライドでした。フォントの使い方とか、(真似できないけど)勉強になります。

  • 現在の2つのトレンド
    • データセントリック (コールバック、リアクティブ、クロージャ)
    • 関数型プログラミング (不変なデータに対して関数を適用する)
  • クロージャをそのまま分散処理するのは難しい
    • いくつもの頭痛の種
    • Scala に限った話ではない
    • シリアライズ不能な具体例

h1

  • Spores とは
    • 移動可能な関数の振る舞いの小さなパーツ
    • 分散/並行実行環境でクロージャのような抽象化を実現
    • メモリリークやレースコンディション、シリアライズのエラーのない、安全なクロージャを目指す
    • Spore の中身はローカル変数、とクロージャのみ
  • デモ
    • 車種の提案用の検索ツール (車の条件(色・価格帯など)を入れるとマッチするものが返ってくる)
    • クライアント・サーバ間で一定のやりとりが発生する場合、Spore を送ればいい
    • 従来のような個々のマッピングがいらない
    • クライアントサイド(JavaScript) <-> サーバサイド(Scala) で通信する例
    • RDD (Resilient Distributed Dataset) も扱いやすい

懇親会

アレキサンダープラッツ駅近くの Weekend Club の屋上で開催。
エレベーターでビルの最上階まで行き、さらに長い階段を上った先が会場でした。

ビールと3種類の料理が振る舞われ、参加者同士が自由に歓談するスタイル。
私も数名の方と会話したのですが、意外と普段 Scala をメインで使う方ばかりではなかった、という印象を受けました。

さる大学の講師の方いわく、一般的な生徒に教えるには難しすぎる、とか
またとある方は Java がメインの大企業で、Scala の導入がなかなか進められず苦労している、とか。

  • ベルリンのシンボル、旧東ドイツのテレビ塔と美しい夕日

  • 空撮もあったんですね

<

p>つづく


  • おまけ: 次回予告