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>つづく


  • おまけ: 次回予告

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


Scala というプログラミング言語がこの世に誕生してちょうど 10年。
その Scala にまつわる世界最大のカンファレンスといえば Scala Days!

今年は 2014年6月16日〜18日の期間、ドイツはベルリンで開催され
私も参加者の一人として現地の熱気を生で体感してきました。

本ブログでも、その雰囲気を少しだけお伝えしようと思います。

blog1

1日目


実は私は今回初めてヨーロッパを訪問したのですが、ベルリンの気候は北海道と同じくらい。
昼間は半袖のTシャツ一枚で平気ですが、夜1になると何か羽織るものがないと肌寒いです。

そんなわけで街並みの美しさや、改札のない鉄道網に感動しつつ会場の Kosmos Berlin へ。

blog2

この日は前夜祭といった趣で、講演は Martin Odersky 先生のキーノートだけ。
ドイツ名物のビールも振る舞われて、既に盛り上がっています。
そして夕方 16:30、いよいよ開幕です。

blog3

800人の世界中のScala愛好者が一堂に会しました。

連絡事項など

まずは Josh (Joshua Suereth @jsurerth)が壇上に立ち挨拶と連絡事項について話がありました。
内容は以下のとおり。

  • 挨拶とこの日の段取りについて
  • Scala Days App のデモ

<

p>Android/iPhone 向けのアプリの紹介。
セッションのスケジュールを確認したり、参加者全員の名札に印刷されたQRコードをスキャンしてコンタクト情報を共有することができたりします。

  • セッション投票

セッションが終わると扉の出入口にいるスタッフがスマートフォンをかざしています。
そこには、悪い・普通・良いの三段階のアイコンが表示されており、参加者はタッチするだけで
評価を投票することができました。

  • Phil Bagwell Award

私は知識がなかったのですが、Scala 草創期からの貢献者 Phil Bagwell氏 にちなんだ Scala コミュニティ主体の賞のようです。
受賞者は Kojo というプログラミング言語の作者、Lalit Pant さん。

blog4

キーノート: Martin Odersky

そして、いよいよ Martin Odersky 先生が入場。

スライドは SFScala で発表されたもの と同じだったようです。

blog5

タイトルは、Scala – The Simple Parts。要旨は以下になります。

  • Scala が誕生して10年

多くの開発者によって大きな成長を遂げ、現在は『スケーラブル』な言語になっている

  • 『スケーラブル』の定義

言語自体が進化できること: DSLによる特殊化 – sbt, scalaz, specs, akka など
伸張自在であること: システムの規模に関わらずでも同じように使えること、小規模から大規模なシステムへスムーズに移行できること

オブジェクト指向 + 関数型 という特性が、これを可能にしている。
でも、本当に正しく使えているのか?

  • Scala は Modular 言語でもある

基礎的なパーツ(通常一つの機能だけを持つ)の組み合わせで複雑なシステムを表現できる。
関数やオブジェクトが必ずしも1個のモジュールに対応するとは限らない。

  • シンプル is not 簡単

小さな部品の組み合わせを効果的に行うための具体的なコーディングパターンを紹介。
compose – match – group – recurse – abstract – aggregate – mutate

一つの式で複雑な処理をせず、小さな関数にして意味のある名前を付けよう
暗黙的引数(implicit parameter)を使って抽象化しよう、など。

  • 静的な型チェックの目的

Clojure / Scala / Haskell / Idris / Coq の5つを比較。
正解はなく、トレードオフの関係にあるとのこと。

  • ではモジュールとは何か

自由に組み合わせ可能な小さなパーツ。色々な姿で表現される。
関数 / オブジェクト / クラス / アクター / ストリーム変換 / マイクロサービス

参加者との質疑応答の中で、Scala の将来についての話も出ましたが
言及されたのは Java8 への追従ということのみ。他はアイデアの検討段階だそうで、Scala 3 の登場はまだ先になりそうです。

ワールドカップ ストリーミング観戦

この日は奇しくもサッカーW杯ブラジル大会でドイツ代表の初戦が行われた日。
相手はポルトガルと好カードです。
18:00 にキックオフとなった試合は会場の壁に映し出されると同時に、ビール片手の多くのエンジニアの耳目を集めていました。

blog6

結果は4対0とドイツの大勝だったこともあり、会場は大変盛り上がりました。

つづく

  1. 日没が21時過ぎなので夜は短い []