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
Set ages ^ 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()」なし 遅い WindowsCPU使用率が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
Spliterator
Optional

メソッド参照はコンストラクターも参照できる

@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の話がなかったです。。(そこだけ楽しみでした)