目次
JJUG CCC 2011 Fallに参加してきました。 個人的にはかなり久々のJavaのカンファレンスです。(※あくまで「Javaの」という話で。SolrやHadoopとは別という意味です。)
概要やタイムテーブルはこちら。 予定があったので、残念ながら最後の2つのセッション(Scala、Twitter)しか参加できませんでした。 Hadoopの話も聞きたかったのですが、しょうがないかと。 いつものごとく、メモを個人的に取ったので。
★楽々Scalaプログラミング
浅海
◎OOPからOFPへの道しるべ
・関数型の使い所、プログラミングのコツ
・つながりの部分
◎最近の活動
モデリングからモデル駆動によるソース生成などに利用。
Scala、2008年から使い始めている
◎Scalaと他の機能との比較図
◎Scalaの用途
・高い生産性
体感で3倍。コード量が少なくなる。
IDEのサポートを考えるとまだ、Java+Eclipseのほうが高い!
・DSL
ドメインモデルの記述
フレームワークAPI
・並行プログラミング
Many Core
消費電力的に複数のコアで動かす=関数型のほうが並行性が上がる(スレッドさわるJavaだけだときつい)
Parallel Everything
Object指向+関数型が扱いやすい。
◎関数型言語とは
・公開関数をあつかえる
関数を値として扱える、引数と返却地に関数を渡せる。(やさしめ)
<=>
数学(ラムダ計算、圏論など)的にプログラムを記述できる(きびしめ)
ある程度使えるはず。厳しめの部分も
◎関数型言語の長所と短所
長所
・高階関数を使った技が使える
List(???)
短所
・メモリ、関数実行オーバーヘッド、スタックの大きさが読めない(再帰的)
◎関数型言語の系譜
純粋関数型言語
pure Lisp
伝統的関数型言語
OCaml
新世代関数型言語
Haskell
Scala
型クラス
代数データ型、モナド
Parametric polymorphism
◎関数型でしたいこと
DSL(Domain Specific Lanuguage)
昨年の資料を参考に!
◎準備
scalaの文法
◎並列コレクション
スレッドを利用しないで並列に動作実行させるか?
※List().par.map(sitelen).sum
これで並行実行させられる。
◎Future
(これってJavaでもあるよね?=あるよ)
処理を非同期で先行実行し、あとから結果を取得可能
Scalaではアクターライブラリでサポート(cala.actors)
関数合成するとFutureの実行結果を取り出す所でブロックされる!!
◎Promise
Futureより強力
関数合成すると、合成関数全体が非同期実行される!
scalazを利用してた
◎5つのコツ
コツ1: y=f(x)
引数がひとつの関数が基本
関数合成のビルディングブロックになるよ
引数が複数ある関数は他の関数(map関数とか)で合成しにくい
対処方法:カリー化(関数の戻りを関数とする)
addc(a: Int)(b: Int) : Int = a + b
とすることで、
コツ2:分割統治
コツ3:演算は転換
flatMapとかfoldLeftとか
※永続データ構造
前に作ったデータ
コツ4:オブジェクトの世界と関数の世界を分ける
更新指示書の形でObjectに渡す?
関数型データ構造
コツ5:新しいデザインパターン
関数型プログラミングの用語
・Functor(関手)
・Subgroup(半群)
・Monoid(モノイド)
・Monad(モナド)
OOPのデザインパターン的に考えれば、数学的なところまで理解しなくてもよさそう?
★Twitterとオープンソース @yusukey
http://dev.twitter.com
http://bit.ly/tdt-ja
id:twj_dev
◎OSSとの関わり
支援してます。
Apache、Eclipse、Open Invention、JCP、OpenJDK
パフォーマンス系のためにもOpenJDKに参画してる
◎Twitter API
オープンなAPIで無償提供
13言語でAPIライブラリがあるよ
◎Twitter4Jのこれまで
ほぼ全てをカバー
APIはだいぶ落ち着いてきていて、追加変更は少なくなってる。
◎立ち位置
Twitterはコミュニティを活発にするためにもライブラリを出さないらしい。
◎Twitter4Jのこれから
キャッシング
ストリーミングAPI利用を簡単に
モックテスト
レートリミットの影響を受けると辛いから。。。
ツイート/ユーザの永続化機能
jClouds対応?
ライブラリからフレームワークへ
半公式ライブラリへ
github/twitter/twitter4jへ
JSR Social API
Twitter4Jが参照実装に???
スケーラビリティの話。
Hadoopはユーザのデータ解析とかに使ってる。
メッセージはキューイングしている。デモ。
memcachedプロトコルなんだけど、値を取ると値が消えるよ。(memcachedとは動きが違うよねー。プロトコル的にはクライアントがいっぱいあっていいよねー)
RubyのGCがきつかったのでJavaベースに変更
Kestrel(Scalaで記述。)
Kestrelのフォーカス外
メッセージの順序保証(してないよ)
トランザクション
memcachedプロトコルの拡張1
ブロックフェッチ
コンシューマから取りに行くというのが特徴
memcachedプロトコルの拡張2
リライアブルフェッチ
ということで感想。
Scalaは前から気になっていて、本までかってるのになかなか手を付けられていない始末でした。 そんな時にこのJJUGの話があったので、ちょうどいいと聞きに。 関数型やScalaのぼんやりしたイメージのみを持って聴いていたのですが、思った以上にキーワードが多くてついていくのがやっとというイメージ。 で、いつものごとく、Twitterでつぶやいていた所、色々な反応が。(わからずにつぶやいたのもあり、波紋を呼んだ模様) お陰で、Scala関連の方たちをフォローできたので結果オーライでした。 話の内容自体はサラっとながす感じだったので、再度資料を見る+Scalaをもっと勉強しないと理解出来ないなぁという印象でした。 ちなみに、資料はこちら。
次は、最近Twitterの中の人になった山本さん(@yusukey)の話しを聞きました。 Twitter4Jの話と、TwitterのOSSへの関わりの話。あとは、実際にTwitterが作成しているOSSのひとつKestrelについて。 TwitterはRubyベースで色々と作ってきていたのだが、Java(JVM上で動く言語(Scalaなど))に徐々にシフトしているというのが一番の印象です。あとは、Lucene、Hadoopなど私の興味のあるOSSも利用しているなど。 Kestrelについてはデモを交えながら、実際の動きを説明されていたのでとてもわかり易かったです。 プレゼン中もTweetを表示しながらという、さすがTwitterの中の人という印象でした。 Twitterでは少し前から知り合いだったのですが、実際にお会いできた(イケメンでしたよ!)のも収穫でした。 次はStormの話も聞きたいかなぁ
で、2セッション(山本さんの話のあとにLT大会にも参加)だけですが、全体の感想を。 「クロスコミュニティカンファレンス」というだけあり、Java以外の話題(CouchDBとか名前がありました)もちらほらあったようです。 ただ、最近の他の勉強会やカンファレンスに比べると人が少ない印象でした。 私が参加したセッションは比較的大きな部屋だったせいもあり、40~50人くらい入っていたと思うのですが、ガラガラな印象でした。良い意味で、Javaも安定してきているため、参加者が少なかったのかなぁと あとは、年齢層がHadoopなどに比べると高めかなぁという印象(かく言う私も年齢層を上げている一人ですが。。。)。Javaも長いですからねぇ。 午前中から参加していると違った印象だったかもしれないですが。。。 あと、初めて行った会場で、しかも大きめの施設でした。午後の途中から行ったせいもあるかもしれないですが、 案内が出ていなくて若干迷子に。。。 ただ、セッションの部屋自体は各席に机があり、電源も比較的多めにあったので、PC持ち込みでメモを取るには最適でした。
comments powered by Disqus
See Also by Hugo
- Java One Tokyo 2012 に参加しました。#JavaOneJp(Jugemより移植)
- Heroku Meetup #8 TreasureData + Waza Report!! に参加しました。#herokujp(Jugemより移植)
- Berlin Buzzwordsにオンライン出張してた
- カンファレンス情報の探し方(CfP、スポンサー応募、開催期間など)?
- 第10回Elasticsearch勉強会を開催しました。#elasticsearchjp