第3回社内ハッカソン


みなさんはじめまして、渋谷といいます!

9月頭にDSSに入社して2週間が経ちますが、まわりは技術レベルの高い方揃いでなかなかついてゆける気がしていません…。

そんな中、9/15に前回に続いて第3回DSS社内ハッカソンが開催されたので、その様子をご報告します。

hackathon3rd

原則普段の業務は禁止、というルールで集中しやすい環境となっています。

当日のタイムテーブルはこんな感じでした。

  • [11:00] アイディア出し&チーム編成
  • [11:30] 実装開始
  • [13:00] 各自or連れ立って昼食へ…
  • [18:30] 結果発表
  • [19:30] 近くのお店で私の歓迎会!

今回の成果

  • 「Shapelessもくもく」チーム
    • Scalaのジェネリックプログラミングライブラリです。難しい。。
  • 「ENSIME」チーム
    • Emacs上でIDEライクな支援を受けられるプロダクトですが、不具合があるようでその調査をしていました。
  • 「electron+Scala.js」チーム
    • Scala.jsを使ったデスクトップアプリ、とのテーマでDynamoDBの管理ツール
  • 「Agda」チーム
    • 定理証明系?のお話です。私渋谷はまったくついてゆけず…。
  • 「Scalaコンパイラプラグイン」チーム
    • type aliasされた型の不適切かもしれない使用をコンパイルエラーにできるプラグインです。便利!(公開済み)
  • 「Deep Learning」チーム
    • できればチームで発表したかったのですが、調べるだけで手一杯で別々の発表とすることに。私渋谷が「犬猫判定アプリ」を(公開しました)、平岩さんが既存プロダクトについての調査と手書き文字認識を試していました。
  • 「Spark GraphX+Sonification」チーム
    • Apache Spark GraphXによるグラフ分析とSonification(音響化?)のコラボです。Wikipediaデータの分析結果を音で奏でる、シュールな発表でした。

感想

普段の業務とは切り離されたテーマで開発を行うことは大きな刺激になりますね。

1日完結ということで時間的制約がシビアで、常にどこを着地点にして作りこんでいくかを意識しなければならないので、その緊張感とうまく動いた時の達成感はくせになってしまいそうです。

お読み頂きありがとうございました!

開発ツールの変遷あれこれ


DSS で開発を始めて、早2年半。

Scala を開発技術の軸に据えていることは創業以来変わりないですが、
その周辺のツールは色々変わりました。

Dev

  • ソースコード管理: GitLab => GitHub プライベートリポジトリ
  • ドキュメント管理: GitLab => (Sphinx) => GitHub docs専用リポジトリ + wiki
  • タスク管理: Redmine => GitHub Issue + Waffle.io
  • CI: Jenkins => CircleCI
  • デプロイ: (Capistrano) => Fabric => Ansible + sbt-art
  • DWH: Hadoop(HBase/Hive) => Amazon Redshift
  • 単体テスト: Specs2 => ScalaTest + ScalaCheck

Ops

  • チャット: IP Messenger => IRC => HipChat (+ Slack) + Hubot
  • 監視: Nagios => Zabbix => Amazon CloudWatch + Grafana + 自作ツール

こうして見ると、オンプレミスから着実に AWS + SaaS 構成に移行しています。
CircleCI はまだ始めたばかりなので、これからノウハウを溜めていく予定。

あ、そういえばこんなスライドも作りました。

チーム開発での最優先事項はツールであるという言葉もありますし、
今後もより良いものがあれば積極的に取り入れていきたいですね。

社内ハッカソン


どうも、こんにちは、はじめまして、岡田と申します。

2015/05/14(木)に社内ハッカソンを開催しましたので、その様子についてご報告申し上げます。

ホワイトボード

[10:30] いつも通りスタンドアップミーティングをやった後、各自、考えてきたお題を発表

[10:40] 5つのお題を採用し、1〜2人のチームに分かれて実装を開始

[13:00] ランチハウス市ヶ谷店の青おに重(ライス小盛)をいただく

[14:00] ナポリの窯早稲田店に”フレッシュトマトのマルゲリータ”、”シェフの気まぐれピッツァ”と、パーティミックスのデリバリーを注文

[18:30] ピザが届いていないにも関わらず成果発表を開始

成果物はこんな感じになりました。

  • “Getting started with Yesod”チーム
    • HaskellのWebフレームワーク “Yesod”の入門をやった
  • “FP in Scala”チーム
    •  FP in Scalaの演習問題をもくもく解いた
  • “sbtプラグイン”チーム
    • sbt assemblyしたjarファイルを、Amazon S3にアップロードするsbtプラグインを作る→公開しました
  • “ブラック企業判定”チーム
    • 単純ベイズ分類器で、企業のWebsiteからブラックかそうでないかを判定するWebアプリ
  • “Chatops”チーム
    • hubotでチャットボットを作り、社内のhipchatに住まわせる
    • 勤怠管理システムと連携し、出退勤をチャット経由でできるようにした。

まとめ

短時間で取り組むのって、緊張感もあるし頭が回転していいですね☆

是非またやりたいです!

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

(つづく)

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


(前回から続く)

CTO Roundtable の後はレジストレーション、そして Odersky先生のキーノートです。

1日目 (続き)


[16:00] レジストレーション

今回のメイン会場である Herbst Pavillion へ。

reg1

中に入ると、パーティ用のフロア1とスポンサー各社のブースが目に入ります。

reg2

ノベルティはこのような感じ。Tシャツのデザインは昨年のものと同じですが、背中の Scala ロゴがなくなっていました。また、参加者の名札と一緒に3日間のプログラムや会場地図がつづられており、これがとても便利でした。

novelty

artima本のブースも盛況でした。(Scala Puzzlers が一番人気)

reg4

さらに奥へ進んだ先が、キーノートの会場です。

reg5

[17:00] オープニング

ステージに Typesafe社の Josh Suereth氏、Dick Wall氏、EPFLの Heather Miller女史が登場し、Scala Days が開幕!

会場のボルテージも一気に上がります。

open1

“Don’t be a jerk.” (イヤな奴になるな) といったおなじみの行動規範や会場の説明、昨年好評を博した 47 degrees 社開発の専用スマートフォンアプリ、セッションに対する投票システムの紹介などが行われました。

open2

そして、いよいよ Odersky先生が登場します。

[17:10] Scala – where it came from, where it’s going

  • スピーカー: Scala 生みの親, Typesafe 共同創設者 Martin Odersky

od1

Scala はどこから来て、どこへ向かうのか。というテーマですが、Scala の将来の話はしません。

なぜなら、Scala は Hascalator へと生まれ変わるからです。

『Scala は Haskell への ゲートウェイ・ドラッグです』

od2

と笑いを取った後で本題へ。

Scala のこれまで

まずは、Scala のこれまでの軌跡とコンセプトが紹介されます。

  • Scala の前に学んだ/作った言語
  • Scala 開発の動機: XMLリテラルを実現するために、配列の参照を [] ではなく () に、型パラメータを <> ではなく [] にした。それでやっと、<> が使えるようになった。(笑)
  • Scala 言語自身がスケールするように
  • 型システムこそ Scala の中心: 安全性と柔軟性/使いやすさの両立を目指す

Scala の現在

続いて、Scala の現在と称して のエコシステム(生態系)の紹介。JVM と同列に JS が書かれていることからも、Scala.JS への期待の大きさがうかがえます。

od3

Scala.JS は 2015/2/15 にバージョン 0.6 がリリース。実用段階に入った、と明言されました。

その他のトピックとして

  • sbt の改善 (インクリメンタル・ビルドなど)
  • Eclipse, IntelliJ IDEA, Ensime (Emacs用プラグイン) といった IDE/エディタの充実 (implicit も追いかけられる)
  • Coursera のオンライン授業2個2

について言及がありました。

Scala のこれから

TASTY

最初に紹介されたのは、TASTY3を中心としたコンパイル構造の変化について。

以下のような 2段階のステップが踏まれるようになるそうです。

  • 1. [.scala => TASTY]

    Scala コードをコンパイル(scalac)して、まず TASTY という中間ファイルを生成

  • 2. [TASTY => .class | TASTY => .js]

    TASTY をもとにパッケージングツールやリンカーが処理を行うことで、

    プラットフォームに応じた成果物が生成される

    • クラスファイル (JDKの場合)
    • minimize された JavaScriptコード (Scala.JSの場合)

これにより、これまで課題としていたバイナリ互換や、プラットフォーム選択(JDK 7? 8? 9? 10? JS?)が可能となります。 また、最適化・コード分析・リファクタリングなどへの恩恵も受けられるようになるとのことです。

dotc の取り込み

続いて、開発中の dotc コンパイラ (dotty)の機能を取り込むことについて説明がありました。

主な変更点は以下です。

  • XMLリテラルを string interpolation に: xml"""<A>このスライド</A>"""
  • プロシージャ構文の廃止: def foo { println(1) } => コンパイル不可
  • トレイトがパラメータを受け取れるように: trait 2D(x: Double, y: Double)
  • existential type4を簡単に: List[_]
  • 高階型(higher-kinded types)を簡単に: type Two[T] = (T, T)
検討中のアイデア

検討中のアイデアとして以下が挙げられました。

  • 型の union (T&U) と intersection (T|U): まだ未解決の課題もあるとのこと
  • implicit function types: 関数型言語としての作用(effects)に対して、より Scala らしいアプローチができるのではないかと考えられている

最後に、Scala は登場から 10年が経っているのに競合する言語が少ない、との発言がありました。言われてみれば、確かに Java という膨大な資産の恩恵を受けつつ、オブジェクト指向と関数型指向をバランスよく取り入れた言語は、あまり見当たらないかもしれません。

質疑応答

質疑応答では、「言語のルールや、関数型のエッセンスが初学者に難しすぎるのではないか?」という質問がありました。

明確な答えはありませんでしたが、近年は書籍の他に Coursera や、BoldRadius5等のトレーニングを主軸とする会社の登場など、教育のための環境が徐々に整いつつあります。そのような学習ツールを活用すると良いのではないでしょうか。(他にも会話した人の中で、独自の教育プログラムを持っているという方もいました。)

[18:30] 歓迎パーティー

料理とビール、ワインなどが用意されて、パーティーとなりました。

量は(アメリカとしては)少し控えめでしたね。

party

今回はベルリンと比べ、日本からの参加者と多く出会うことができました。

各社のブログも、非常に参考になります。勉強させていただきます。

(つづく)

  1. Scala Days の期間中ずっと、雑談&休憩スペースとして使えました []
  2. 私も、2つとも受講しました。非常におすすめです。 []
  3. Serialized Typed Abstract Syntax Trees が由来。3日目のクロージングでは、Josh Suereth 氏から「TASTY は tasteless という噂もある」というジョークも飛び出しました。 []
  4. 日本語訳が分かりませんでした []
  5. Scala Days プラチナスポンサー []

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


こんにちは。@mogproject です。

世界最大の Scala イベントといえば、Scala Days !
今年は 3月:サンフランシスコ(アメリカ)、6月:アムステルダム(オランダ) と初の年2回開催です。

私も昨年のベルリンに続き、サンフランシスコに飛んでまいりました。1
その雰囲気を少しだけお伝えしたいと思います。

会場

今回の会場は、アメリカ・サンフランシスコの海岸沿いにあるフォートメイソン(Fort Mason)。
元々はアメリカ海軍の基地だった場所で、古い建物や倉庫などが当時の趣のままに利用されている、一風変わったイベント会場です。
(横浜の赤レンガ倉庫みたいな感じでしょうか)2

fortmason

ゴールデン・ゲート・ブリッジが目と鼻の先という素晴らしいロケーション。

goldengatebr

周りには広い公園があり、休日は多くの人でにぎわいます。

park

少し歩くと、映画『ザ・ロック』でおなじみのアルカトラズ島が眼前に現れます。3

alcatraz

 

1日目


CTO Roundtable

Scala Days のプログラムには載っていないのですが、Odersky先生の Keynote が始まる前に
CTO Roundtable という催しが開催されました。

[12:00] 開場

軽食が用意され、コーヒーを片手に雑談。随所でネットワーキングが行われていました。

ctoroundtable

そして、プレゼンテーションが始まります。

[12:50] GO REACTIVE

『時代は変わった。今こそ Reactive!』と熱弁を振るいます。

jonas

[13:15] Going Reactive With Typesafe Reactive Platform

クラウド・ドキュメンテーションのサービスを Play2+Scala+Akka で Reactive に作り変えるまでの過程と、エンジニアのチームビルディングに必要な 5×5 の鉄則を紹介してくれました。

tiho

[13:35] Hewlett Packard ストレージシステム分析への Scala適用について

  • スピーカー: Hewlett Packard リード・アーキテクト Jeff Dutton

少人数のプロジェクトで Scala/Play/Spark を採用した事例。
ちなみに、プロビジョニング・ツールは Chef よりも Ansible が気に入っているとのこと。

jeff0

[14:10] Akka Java Implementation

  • スピーカー: Hewlett Packard エンジニアリング・アーキテクト Hugh McKee

Java で Akka を利用している事例。Akka への愛があふれていました。

hugh

[14:30] Monolith to Microservices with Scala

LAMP で構成された一枚岩のシステムを、Scala でマイクロサービス化した話。

『リファクタリングはよく、トラックのタイヤを履き替えるのに例えられるが全く違う。宇宙ステーションを移設するくらい慎重にやらないと、大変なことになる』という言葉には実感が伴っていました。

ajai0

最後にその苦労の過程であるコミットログを可視化した映像が流れると、場内は拍手喝采となりました。

ajai

CTO Roundtable では、Martin Odersky 先生をはじめ、CTO の Jonas Boner 氏、副CTO の Viktor Klang 氏といった Typesafe社のコアメンバーと言葉を交わすことができました。
またその他名だたる企業のCTOクラスと交流できたのは、とても貴重な体験でした。

ちなみにアメリカでは少なくとも 2社のアドテク企業が Scala を採用しているそうです。
また、とある DSP4では D言語を使っているとか。

(つづく)

  1. 実はこのイベントの前にノースカロライナ州立大学のクラウドの取り組みを視察したりなどしたのですが、それはまた別の機会にレポートします []
  2. 昨年 akka meetup で来日した Konrad Malawski 氏の奥様 Ketty さんいわく、サンフランシスコは長崎と似ているとのこと。どちらも港町だし、異文化との融合が見られ、そしてシーフードがおいしい! []
  3. この写真は Scala Days前日に撮ったものですが、この直後サイクリング中の Odersky先生と偶然すれ違ってビックリ []
  4. Demand Side Platform []

ProofSummit 2014 & JSSST Coq Tutorial


名古屋で開催された ProofSummit 2014 と、同じく名古屋大学で開催されている日本ソフトウェア科学会のチュートリアル:定理証明支援系Coq入門 に参加しました。

ProofSummit は各種の定理証明系(今年は Coq, Agda, Mizarの話がありました)とその応用について年に一回(大体8月末〜9月初に)開催しているイベントで、2010年に開催された Coq庵 から数えると今年で5回目です。「Coq を使ってみた」的な初心者の発表から、定理証明系を使って計算機科学の研究をしているような研究者による発表など幅広い内容の発表があります。今年の発表のかなりの部分に付いては、上記リンクから発表資料が参照出来ると思います。
ProofSummit 今年は定理証明イベントと一緒に開催する関数型言語イベントが中止になったり、東京で ScalaMatsuri が開催されていたりなどで、ちょっと参加人数が減りましたが、来年もまた開催したいし、来年こそはなんかネタを用意して参加したいです。

Coq チュートリアルは、産総研でCoqを使って研究されている Affeldt さんによる、Coq を使う意義/Coqについて/Coqの拡張であるssreflectのチュートリアル、でした。聞きに行った主眼はssreflectのチュートリアルだったのですが、前半の定理証明系やCoqについての話の部分も非常に面白かったです。発表資料は Affeldt さんのページから取得出来ます。
Coq チュートリアルは、100人以上が参加の、非常に盛況なチュートリアルでした。

その前の NII Shonan Coq セミナーと合わせて、この夏は Coq が熱い夏でした。今年のイベントとしてはあと、12/3-5に「高信頼な理論と実装のための定理証明および定理証明器」というのが九州で開催されます。