2012年8月20日月曜日

クラウド温泉3.0

土日にクラウド温泉3.0@小樽に参加していました。今年のクラウド温泉もエキサイティングな内容で、とても楽しめました。幹事の中村さん(@nakayosix)、参加者の皆さん、どうもありがとうございました。

Monadicプログラミング・マニアックス

ボクは初日の最初の枠と2日目のフリーディスカッションの枠を担当しました。最初の枠で「Monadicプログラミング・マニアックス」というテーマでお話させていただきました。

内容はブログに書いてきたことをまとめたものになっています。PromiseモナドやApplicative Functorを使った並列プログラミングのコード例は参考になるかもしれません。

業務システムで使う型クラス

Scalaでは型クラスが使えるわけですが、オブジェクト指向のクラスインヘリタンスとかぶる機能でもあり使い方が難しい言語機能です。

神崎さんのこのセッションは、業務システムで型クラスを使用するトライアルについての報告で、とても参考になりました。

私見では、(Scalaの)型クラスの旨みは(1)コンパイル時に静的に多相性が解決されるためコンパイル時にエラー検出できる、(2)関数の選択が、主体、客体、文脈の組合せで行われる、(3)お互いに疎に開発した主体、客体をソースコードを変更することなく、型クラスインスタンスの追加(必要に応じてのみで接続することができる、といったところにあると考えています。

主体、客体を疎結合にできるため、部品の再利用性が高まることが期待できます。

ただし、(a)使うための決め事がちょっとある、(b)プラグインのような形でプログラムのバイナリを後付けで追加することはできない、という弱点もあります。

Scalaはオブジェクト指向言語なので、普通にちょっとした多相性が必要な時は、クラスインヘリタンスを使う方が圧倒的に楽です。逆に型クラスは気軽に定義して使うというような手軽さはないので、何か明確なメリットがある場合でないと採用しづらい技術です。

そういった点も含めてクラスと型クラスの使い分けというのを考える良いきっかけになりました。

ぶいてく流スケーラブルアプリの作り方 2012

時間があればKVSにBarkley DBを採用した理由、KVS特有のアプリケーション開発のデザインパターン(シャーディングのためのID管理、トランザクション境界の切り方、バッチ処理の組み方など)を議論したいところでした。かなり濃いメンバーが集まっていたので、製品紹介はパンフレット見てね、で終了して、冒頭から上記のようなテーマで議論に入るとより面白かったかもしれません。

LTタイム

LTタイムでは以下の発表が行われました。

  • 中村 良幸 (@nakayoshix) 「クラウド禅問答」
  • 鈴木 常彦 (@tss_ontap) 「IPv6の理想と現実〜若者に未来を託して〜」
  • @sumim「EclipseとPharo SmalltalkのTDD対決ムービーを副音声で解説!」
  • 小田 朋宏 (@tomooda) 「HaskellとSmalltalkの会話」「画面ゆらゆら系デモ」
  • 神林 飛志 (@okachimachiorz) 「Asakusa Framework 近況報告」

中村さんの「クラウド禅問答」はオフレコwなのでここでは触れないこととして、鈴木さんの「IPv6の理想と現実〜若者に未来を託して〜」はIPv6の現状がよくわかってとても参考になりました。IPv6といえば、1990頃にボクがメーカーのネットワーク部隊に居た頃、隣に居た人が担当していて色々やっていたのを思い出します。もう20年経ちますが、相当の前進はあったものの、未だに問題含みで実用には距離がありそうな感触でした。すでに稼働しているエコシステムを丸ごと取り替えるような新技術の普及はなかなか難しいですね。

Smalltalkはボクにとっては未知の分野ということもあって、@sumimさんと小田さんのセッションは興味深く聞けました。

プログラマのための代数入門2 Monadへの道

二日目の最初のコマは中村さんの代数入門「Monadへの道」です。代数の基本からのアプローチだったので、時間的に厳しかったかもしれません。ボク的にはScalaと圏論のマッピングのあたりから始めてもらえるとうれしかったわけですが、関数型をやっていない参加者のことを考えるとそうはいかないところですね。今回の収穫はWikipediaベースで調べていくのはあまりよくないということでした。

最後は定番の資料をベースに解説が行われました。(資料はリンクが分かり次第追加します。)

基礎から見直すTX処理〜A Critique of ANSI SQL Isolation Levelsを再読する

今回抜群に面白かったのが神林さんのTX解説です。

A Critique of ANSI SQL Isolation Levels」はDBの分野では超有名な論文とのことで、この論文を分かりやすく解説していただきました。「Transactional Information Systems」では第3章「Concurrency Control: Notions of Correctness for the Page Model」が相当するようです。

このTX解説を聞けただけで、クラウド温泉に参加した元は取れたという感じです。

本当は怖いDNSの話

鈴木さんの本当に怖い話。インフラのど真ん中のホラーなので、見なかったことにしておきたいwところです。

クラウドアプリを作る上では、こういったセキリティ技術も押さえておきたいので、技術的にもとても参考になりました。

Object Functionalをテーマとしたディスカッション

二日目の午後は、小樽商大の教室をお借りしてObject-Functionalについてフリーディスカッションしました。

ボクがネタとして出した資料は以下です。

やはりモナド周りが議論の中心になりました。

スライド中「関数型言語の技術マップ」で二点ほど修正案を頂いたので、これは持ち帰って考えてみたいと思います。

純粋関数型言語が今まであまり普及せず最近使われるようになってきた理由についてですが、最近の関数型言語はモナドの登場で状態(やIO)が記述できるようになったことが大きいのではないかという意見がありました。確かに、これは大きな理由かもしれません。

ディスカッションの続きとして急遽以下のミニセッションも行われました。

  • 「Iteratorパターンの本質」読書会
  • Haskelシューティングゲーム解説

『「Iteratorパターンの本質」読書会』は初日にボクが挙げた参考資料である「Iteratorパターンの本質」をスライドで見ながらディスカッションをしていくというものです。

この資料はMonadicプログラミングの重要な要素技術が網羅されているのでディスカッションの元ネタとしてとてもよい感じだったと思います。

「Haskellシューティングゲーム解説」は作者の@c255さんにHashkellで記述したシューティングゲームのソースコードを直接解説してもらうという贅沢なセッションでした。シューティングゲームが純粋関数型言語で作れるというのは驚きです。

Haskellを使うことで、プログラムの構造を大幅に変更しても、問題をコンパイラがエラーで弾いてくれるのでバグが出にくいということでした。

Scalaでも事情は同じで、リファクタリングした時の開発効率とバグの出にくさが静的型付けの大きなメリットだと思います。

まとめ

今回のクラウド温泉は、「代数スペシャル&Object Functionalとは」がテーマでした。

関数型言語もHaskell的なモナドベースのものは、圏論や群論といった代数的な操作がプログラミングの軸になります。Scala&Scalazも事情は同じですね。

また、クラウドアプリケーションで更に存在感が増すトランザクション技術においても、「基礎から見直すTX処理〜A Critique of ANSI SQL Isolation Levelsを再読する」にあったように代数的な操作による最適化が重要ということがわかりました。

クラウド時代のアプリケーション開発では、どうも代数が重要な要素技術、基盤技術の一つということになりそうというのが、今回の温泉のメッセージだったと総括できるように思います。

その上で、既存のオブジェクトの世界とどのようにつなげていくのかという議論に進んでいくわけですね。

今回も濃いメンバーの人たちと、クラウド、代数、オブジェクトについて色々と議論ができてとても楽しかったです。来年のクラウド温泉にもぜひ参加したいと思います。

0 件のコメント:

コメントを投稿