JavaOne2014 09/29(Mon)
JavaOne2日目のフラッシュレポートです
- Journey’s End: Collection and Reduction in the Stream API [TUT3836]
- Nashorn: JavaScript for the JVM [CON1888]
- Combining Collections and Concurrency [CON6395]
- Thinking in Functional Style [CON1767]
Journey’s End: Collection and Reduction in the Stream API [TUT3836]
なぜStream lificicle born transormed collected CollectorsAPI factory methods in the Collectors class predifined standalone collectors toList() user provide supplier toMap() framework groupingBy() people.stream().collect(Collectors.toMap) framework movie user movie classify groupingby threadsafe is guraranteed by framework even for non-threadsafe containers but at a price....so what if your container is already threadsafe? a cocrerrent map implementation? every overload of toMap() downstream ここからWriting編(映像とらなくて写真のみで) // set of piopless age Setages ^ people.stream() .map(p -> newInteger(p.getAge()) .collect(Collectors.toSet()); System.out.println(ages); // classify people by age Map<Integer, List > map = people.stream() .collect(groupingBy(Person::getAge)); System.out.println(map); // sort based on length of city name List sortedByCityNameLength = people.stream() .sorted(Comparator.comparing(p -> p.getCity().name().length)) .collect(toList()); System.out.println(sortedByCityNameLength); // group by city, produce a comma-separated names Map<City, String> names = people.stream() .collect(groupingBy(Person::getCity, mapping(Person::getName, joining(",")))); System.out.println(names); why ... accumulate to a container that doesnt implement Collection share state between ... Using Reduction Instead... 所感 StreamAPIの入門講座 前半は既存のfor文とStreamAPIを使った場合の実際の処理の挙動等の違いの説明と StreamAPIの挙動をパワポアニメでまとめてくれていたので 英語イミフでもなんとなく分かった 後半はdemo こういう結果が欲しい場合、どうStreamAPI使いますか?というディスカッションセッション 前半講義内容を具体的にコードに落とし込む練習的なものでした このStreamAPIの動きは後々のセッションのStreamAPIのパラレル処理理解に大きく貢献しました 勉強 ref http://www.tatapa.org/~takuo/lambda_ja/javadoc/java/util/stream/package-summary.html http://ja.wikipedia.org/wiki/%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E5%87%A6%E7%90%86#.E3.82.BD.E3.83.95.E3.83.88.E3.82.A6.E3.82.A7.E3.82.A2.E3.81.AE.E3.82.A2.E3.83.BC.E3.82.AD.E3.83.86.E3.82.AF.E3.83.81.E3.83.A3 http://www.jfokus.se/jfokus14/preso/Navigating-the-stream-API.pdf http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html #ストリーム処理 http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0 Stream ストリームって? データを流れ処理 ストリームメソッドは2種類 中間処理 中間処理を行い、新たなStreamを返す 中間処理はさらに2つに分類される stateless filter(条件trueのみ抽出)やmap(変換) statefull 状態を持つ distinct(重複削除)やsorted(ソート)は前の要素を持つ必要があるため、”状態”がある 端末処理
Nashorn: JavaScript for the JVM [CON1888]
overview released with jdk8 impementation of ECMAScripg 262 ver 5.1 使い方はドキュメント javaからファクトリーのインスタンス作ってやってるっぽい コンソール jjs -scripting editing and debuging 適当なエディタ使ってね ブレイクポイントもありますよ features javaAPIを直接コールできる js + javaAPI は写真 例外もJavaの例外が発生します Threadも使える lambdaも使えるよ コンソール実行時に引数を渡せる 環境変数も使える(Linuxの?) Linuxコマンド叩ける(写真あり) exit(code); quit(); print(); echo()サポート noteworthy 写真(スライド一枚目) 「--no-java」のオプション ClassFilter(写真) --const-as-var --language=ec5|es6(8u40) --let/const(8u40) --persistend-code-cache(8u40) --class-cache-size=50(8u40) performancs 写真 demo ckeditor.com(テキストエディタ) ライブラリ使ってリッチなアニメーション作るやつの紹介 (ブラウザ上で動くライブラリをjvmでも動かしてる) 所感 基本的なnashornの紹介 jvm上で実際にどうJSを動かせるかのコード紹介中心だったので ここは実際に動かすorそのコードをまとめておく サーバーサイドJSからJavaAPI呼べる具体的な活用例とメリットが紹介されなかったが マルチスレッドtomcatではないシングルスレッドの(Avatar.js上の)node.jsから 自作ライブラリ(jar)のAPIをコール出来るのであれば 同じロジックのソースの重複化を防げるのでは、と思った #Node.jsをJVM上で動かそうという野心的(?)なプロジェクトである、Avatar.js http://anishi1222.com/2014/05/10/building-avatar-js/
Combining Collections and Concurrency [CON6395]
introduction single thread is simple (one by one) Concurrency works great more than a single CPU parallel or concurret?(pic) "volatile" to the resource (写真あり、配列を作るメソッド、メソッドにはSynchronizedを付けましょう) Lock (写真) how much slower is synchronized(pic) working with a queue(pic) 2 kinds of waiting(pic) working with a queue (pic) unlock()はfinally句に入れとかないとだめ lock alternatives Unsynchronized read does save time valatile ensures that JIT does not hoist (cache) value topic concurrent perfomance use of Collection is useful but icidental 所感 セッション前半ーあたりは今までのJavaでのThread処理の説明 後半にちょろっとjava8の紹介をしたくらい(DSCF2365) キーワード的には「volatile」「lock」等々 今までjavaでのThread処理系の勉強するのと それをjava8のAPI(主にStream)を使ってどのくらい良くなるか宿題
Thinking in Functional Style [CON1767]
why functional programming (pic) whats functional programming whats old is new again assigment-less programming immutable state fuctions as first class citizens highter-order functions function swith no side-effect what are the benefits -- easy to test (result is always collect) imperative vs declarative lambda vs clouser 所感 英語分かったらさぞ面白かったんだろうなセッション パワポなし、ひたすら喋って説明 内容的には「Java8で関数型使うセッション」ではなく 「関数型プログラミングの考え方」みたいなセッション ふんわり印象に残っているのは ー関数型使うとよりコンポーネント化出来たりしてソースのコピペ防げる あと色々あったはずだけど記憶が遡れない。。 これはデモで使ったソースをうpしてくれるらしいので そのソースを見ながら思い出す あとセッション中に使った既存コードー>関数型の変化のソースはうpされているらしい また動画撮影されていたセッションだったので、探せば見つかるかも
JavaOne2014 09/28(Sun)
JavaOne2014のフラッシュレポートです
後々追記していきます。
初日は下記3セッションを受けました。
- Introduction to Java 8: JVM, Language, and Platform [UGF1709]
- Lambdas and Laughs [UGF9672]
- The OpenJDK Project: Your Java. Our Java. [UGF9755]
- Java Strategy and Technical Keynotes [KEY10422]
Introduction to Java 8: JVM, Language, and Platform [UGF1709]
プレゼン内容(メモ)
Java8 ラムダ 関数形 メソッドを引数に シングルメソッドインターフェース メソッド参照 デフォルトメソッド アノテーション リピート タイプ タイプインターフェース メソッドパラメータリフレクション StreamAPI ホテルで要勉強 long n = new Randon(7) .longs(,,) //.paralllel() .filter(Demo3::isPrime) .peek(out::println()) .count() parallelがあると並列処理してくれるからCPU使用率100%くらいで処理早い ないと遅いけど、cpu使用率は20%くらい CompletableFuture interface funtion addOne (x) {retunrn x+1} var sum = java.util.stream.IntStream.iterate(a, addOne) .skip(10) .limit(20) .peek(function(x) {print x}) .sum() Java9 Light-wight json API a http2 client(http2.0 websocket) process api improvements(native process management) smart java compilation, part2 (parallel compilation) modular source code (not jigsaw)
所感
このセッションでは今後のセッションで扱われるであろう java8のAPIや新機能に関してザックリとした紹介
これからJava8のセッションを受けるにあたってザックリとした概要を知ることが出来ました。
demoがあったのは下記3つ ・ラムダ 本当に入門内容だったので略 ・StreamAPI パラレル処理した場合とそうでない場合のCPU使用率を見せてくれた demoとしては下2つくらいがあった 妻の誕生日 StreamAPIとラムダ文法、新DateAPIで妻の誕生日が未来日で最短月曜日になるやつのコード(?) 素数見つける(???) 写真撮っておけばよかった。。 このdemoでは、「.paralllel()」を挟んだときの処理速度の違い等を見せてくれた 「.paralllel()」なし 遅い WindowsのCPU使用率が25%ほど 「.paralllel()」あり 体感速度が⬆より早い!! CPU使用率がほぼ100%になってた ・javascript on jvm(?)(jsからjavaAPIを呼ぶやつ) Windowsのコンソール上で「jjs」(?)と叩いて対話式の状態にして そこでjs打って出力結果でるやつ その状態でファイル実行(してたような・・・)すると jsの文法でJavaAPIをラムダ形式で呼ぶ簡単なdemoを見せてくれた 宿題としてdemoであったやつは実装してみる!
Lambdas and Laughs [UGF9672]
プレゼン内容(メモ)
anounymoudes classes runnables StramAPIで一緒に使う(?) java.util SpliteratorOptional メソッド参照はコンストラクターも参照できる @FunctionalInterface
所感
今後、このユーザーグループが発表する セッションのイントロダクションが中心であった demoなし 印象に残っているのは下記紹介 メソッド・コンストラクタ参照 事前勉強なしのところだったので新しい知識がほとんど(写真参照) 「::」を使う newも出来ちゃう java.util.function内のインターフェース ここも新しい知識がほとんど(写真参照) 写真にのってるインターフェースはあとで勉強しておく
The OpenJDK Project: Your Java. Our Java. [UGF9755]
プレゼン内容(メモ)
penJDKって何?状態だったので興味本位でどたドタ参加 openjdk はhgからクローン java8 lambda metaspace ? java9 build 31 faster than 8 GC Strings duplication 25% of heap are string -> improved segmented code cashe money api (いろんな通過に対応) ExchangeRateのやつもあった Measurement API work with Measure 4コーダー http2.0 クライアント 写真とれなかった・・・
所感
ザックリとプロジェクトとして何をしているか概要をぽんぽん説明してる感じ が、パワポなし・早口・英語力のなさで途中からついていけず。。
初日総括
初日ということもあり、踏み込んだ内容のセッションはありませんでした。
これから始まるセッションに向けての準備体操のような印象を受けました。
ということで2日目に続きます。
キーノートは割愛させて頂きました。java9,10の話がなかったです。。(そこだけ楽しみでした)