connpass(幹事:@nakayoshix氏)クラウドを題して(と言ってもそればかりでないのですが)開催される、IT技術者向け合宿。Functional」(オブジェクト指向&関数型言語)がテーマ。今回が3年目で、私は以前から存在は知っていたのですが、参加は初です。朝は@nakayoshix氏おすすめの店・粋Laboratoryで、参加者が集まり食事。話には何度か聞いていたが、初めて来た。有機野菜などにこだわっている店。発表:@asami224氏(発表資料)関数型言語の「関数」は、プログラミングにおける「関数」ではなく数学の「関数」を指している、すなわち「(本来ならば)いつ実行しても結果が変わらない」ということを意味している。そのため関数型言語は普通に記述した場合、それらが実行される順序が書いた通りであることを保証しない。これは一見すると不便に見えるのだが、逆に「並列処理に向いている」(複数のCPUのコアに仕事を割り振ったりできる)という特性も持っている。今後CPUのマルチコア・マルチスレッド化やクラウドコンピューティングが進展すると、このような技術が特に効果を発揮するのでは、と述べられていた。このような数学的意味の「関数」では、外部の環境とのやり取り(例えば入出力)が出来ない。表題にある「Monad」(モナド)とは、そういった外部の環境とのやり取りに数学的な意味を与え、また実装したものである。これにより、処理順序(例えば、入出力の結果を待つなど)に意味のある処理が書けるとのことである。VM上で動く関数型言語「Scala」を用いているのだが、「Scalaは実際難しい言語なのだが、ScalaはDSLを作るのに強い」と述べていた。実際にアプリケーションを作るにあたっては、Scalaの難しいところには触れずに、Scalaで書かれたフレームワークを用いることが多くなるのではと予測していた。発表:@zenzengood氏(発表資料)型クラスとは、関数型言語において、型が持つ性質を定義付けるものである。C++で言えば、virtual付きの関数(仮想関数)を定義したり、テンプレートを使ってクラスが特定のメソッドを持つことを要請したりすることに相当する。JavaだとInterfaceの用途に近い。「すごいH本」においては、Eq型クラス(等価性が判断できる)やOrd型クラス(大小比較ができる)などが例として挙げられていた。このセッションのテーマは、この型クラスを業務システム構築にどう生かしていくかという話である。業務システムにおいては、一つ一つのビジネス処理(例:単価の決定方法)が簡単でも、実際にビジネスを行う方法(例:取引フロー)を実装するとなると複雑になるとのことである。その際に、各ビジネス処理が持つべきインターフェイスを型クラスとして定義し、実際にビジネスを行うシステムを構築するにあたって、それらを組み合わせればよいようにした、とのことであった。会場であった指摘によると、「考え方自体はオブジェクト指向のときと変わってないのではないか?」とのことであった。コードは分かりやすくなりそうとのことであった。発表:@stakezaki氏(発表資料)分散型ストレージについての話題。データベースを分散型にする際の難しさとして4つの軸「集中/分散」「密結合/疎結合」「同期/非同期」「ステートフル/ステートレス」が挙げられていた。いずれも後者を選べれば容易に分散型になるのだが、実際にはパフォーマンスの問題やアプリケーションの問題で前者を選ばざるを得ない場合もあるとのことであった。/非同期は使い分け」「ステートフル」で行っているとのことであった。分散型ストレージではデータの同期処理などがボトルネックとなるため、その際の対処方法として、Hadoopは「同期をきちんと行う代わりに、アクセスできるようになるまでの時間は伸ばす(Availabilityを下げる)」方針である一方、Cassandraは「同期が完全に行われない可能性もあるものの、早くアクセス可能にする(Consistencyを完全には保証しない)」方針ということが述べられていた。温泉は近くのホテルの日帰り入浴。