Blog
Scala Days 2016 in New York【2日目】
カンファレンス2日目になりました!
今日は朝の9時からKeynoteセッションが開催され、続いて4部屋に分かれて7コマ分のセッションがありました。
以下、 Keynoteと各セクションからピックアップした内容をご紹介します。
Keynote “Introducing the Scala Center”-Heather Miller
2016年3月に設立されたScala Centerの概要と、目指す方向性、プロジェクトについての講演でした。
Scala CenterはScalaの利用者拡大に伴い需要が増してきた、教育とopensourceコミュニティのサポートに注力する非営利組織として活動しています。
教育に関しては、courseraを通じたScalaの講義について解説があり、現状の2 courcesから4 courcesに拡充されることやmini-degree授与の準備について解説がありました。
opensourceコミュニティのサポートに関しては、常駐のサポートを付ける事、Scaladex(開発中)やScalaFiddle(http://scalafiddle.net/info)の開発についての発表がありました。
ScaladexはScalaのエコシステムを統合しindex化する取り組みとのことで、利便性の向上という点で大きな一歩になると感じました。
Lightbend Lagom: Microservices “Just Right”-Mirco Dotta
[slideshare id=61875965&doc=lightbendlagom-microservicesjustright-160510190312]
Lightbend の Mirco Dotta 氏のセッションで、他セッションでも microservice の文脈でよく登場していた Lightbend Lagom (https://www.lightbend.com/lagom) についての話でした。
twitter ライクなデモプログラムをつかってEventSourcingとCQRSを基本としたマイクロサービスの実装方法や “Developer experiences matter!” を意識したソースコード変更の自動リロード等の説明がありました。
Scala API が開発中ではありますがOpnionatedと銘打っているだけあってレールに乗ることができると自然な流れで microservice が開発できるのではないかと感じました。
Monitoring Reactive Applications – Henrik Engström,Duncan DeVore
これまで行われてきたモニタリングの歴史と最近のトレンドを振り返りつつ、Reactive Applicationではどのようなモニタリングプラクティスが適切かを解説する内容でした。
トレンドとしては、
・Pull / Push
・Anomaly Detection
・Self Monitoring
などがありますが、それぞれ一長一短で、これらをまとめたプラクティス自体は結構基本的な内容でした。やはりアプリケーション構成等の状況に依存するといった所でしょうか。
lightbend monitoringでは上記を踏まえており、lagom、akka httpなどもサポートして行く予定との事です。
Principles of Elegance – Jon Pretty
scala の多様性と型制約の両方の面から、どうすればより「エレガント」なコードを書くことができるかという内容の講演でした。
- type class, private methodなどを利用することで、APIを出来るだけ小さくする様に心掛け、よりメンテナンスしやすく、理解しやすいAPIにする
- コード上でのコミュニケーションとしても利用されるので、class/method/types etc には一般的に分かり易い、的確な名前をつける必要がある
- optionやtupleを使わずtype classを利用することで、システム上ありえない状態を作り出せない様にする。それにより、コードに信頼性が増し、メンテナンスがし易くなる
- 自らサンプルコードを始めに作り、プログラマにとってのUXをデザインして実相する
Scala を書く上で、念頭においておきたい基礎的な内容でとても勉強になりました
Dotty Linker: Precise Types Bring Performance – Dmitry Petrashko
http://event.scaladays.org/scaladays-nyc-2016#!#schedulePopupExtras-7554
slide https://d-d.me/talks/scaladays2016-ny-linker/#/
– Dotty, ScalaBlitz のメインコントリビューターの一人で EPFL 博士課程在学中のDmitry Petrashko氏のセッションで、dotty を元にした最適化されたコンパイラ dotty linker に関する内容でした。
– linker では、@specialized アノテーションのように自動的にプリミティブ型を使用するように解析して boxing/unboxing を取り除くことで実行速度を java 並に早くすることができるAuto Specialized の機能があります。List[Int] の平均値を出すベンチマークでは、java で 45ms, Scala 2.11 で 872 ms 掛かっていたところを、linker によって 68 ms まで高速化されていました。
– 保守性とパフォーマンスの両立のために Rewrite Rules という機能もあり、例えば x.size == 0 を x.isEmpty に書きなおすルール等を作りコンパイル時に最適化することができるそうです。
– 現状はプロトタイプで、Auto Specialized はコンパイル時間が 1.5 倍まで増える等メリットばかりではないですが、スマートで拡張性が高いコンパイラになりそうで楽しみです。
Reactive micorservices with Akka and Docker – Heiko Seeberger
Reactive microserviceとの親和性が高いAkka, Dockerを使用したアプリケーションの構築方法についての講演でした。
チャットアプリをデモ題材に、必要な機能を順番に追加していくスタイルの発表で、非常に理解がしやすい内容でした。
Akka HTTP, Akka SSEだけでなく、ConstructR(https://github.com/hseeberger/constructr)や Cluster Singleton(http://doc.akka.io/docs/akka/2.4.4/scala/cluster-singleton.html)の利用方法についてコードベースで紹介されており、これからReactive microserviceの導入を検証する場合にはうってつけの内容だったかなと感じました。
extractor(抽出子)の解説を中心とした、パターンマッチングの講義的内容でした。
extractorとは、unapply(またはunapplySeq)メソッドが定義されているオブジェクトの事を指し、これを利用するとコンストラクタパターンのマッチングが以下のように簡略化できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
case class Time(h: Int, m: Int) object AM { def unapply(t: Time) = if (t.h <= 12) Some(t) else None } def isAM(t: Time) = t match { case AM(am) => f"good morning. it's ${am.h}%02d:${am.m}%02d" case _ => "good afternoon" } scala> isAM(Time(11, 0)) res10: String = good morning. it's 11:00 scala> isAM(Time(12, 0)) res11: String = good morning. it's 12:00 |
Community Party の様子
Author