エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Java Advent Calendar 2016のまとめ

Java Advent Calendar 2016

公式サイト

qiita.com

概要の引用

今年も Advent Calendar の季節がやってきました。 Java をネタにしたブログを公開してしまいましょう。 Java といえば、サーバーからクライアント、クラウドに組み込みと、さまざな分野で使われており、そこで使われている技術もたくさん。 Java の Tips でもいいし、ライブラリの使い方でもいい、自作のツールの紹介など、Java に関していれば何でもかまいません。ぜひこの機会に、Java のブログを書いてみましょう!! qiitaのアドベントカレンダーを使用していますが、もちろんqiita以外からの投稿もできます! 普段お使いのブログがあるかたはそちらでご参加ください!

内容・感想

[12/01] jcmd と既存ツールの対応

記事URL

jcmd と既存ツールの対応 - sugarlife's blog

感想

jcmdの紹介記事。
使ったことがなかったので、コレを機会に調査。

まずは、なんでもいいので、Javaのアプリを立ち上げる。
当然、実行して即終了するようなやつは、ダメ。
アプリをゼロから作るのが面倒だから、SpringBoot使ってWebアプリを速攻作成。
初心者なので、欲張らず、使えるコマンドの調査からやってみる。
Windows10なので、タスクマネージャーから、PIDを調べる。 ※あとになって思ったが、クラス名でも行けるのね。。。

f:id:suzaku0914:20161204114808j:plain

"3740"なので、紹介されている方法で使えるコマンドが何かを調べる。

jcmd 3740 help

すると、以下の出力が!

3740:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help

For more information about a specific command use 'help <command>'.

ちなみに、試したときの環境情報 - Java:1.8.0_111 - STS:3.8.2

あまりインフラや調査関連をやったことがないので、プロセス調査とかは敷居が高いイメージがあった。
「使えるコマンドがこれです」ってのが見れるのは、かなり敷居が低くなった印象がある。
"$ jcmd help"さえ覚えておけば、バージョン違いによる実行できる/できないの差異を覚える必要がない。
あと、基本的な文法が一緒なので、覚えることが少ないけど、やれることが多いのがいいと思いました。

[12/02] どこからも使用されてないクラスを列挙する

記事URL

どこからも使用されてないクラスを列挙する - 水まんじゅう

感想

jdepsを利用したクラス解析。
やっていることは、jdepsで使用されているクラスの一覧を抽出し、特定パッケージ配下に抽出したクラスを含んでいないクラスを抽出するというもの。
かなり亜種なやり方だと思ったが、import解析よりは良くなっている気はする。
もっとこういったものは、発展するべきだと思う。
IDEとかで、実装して欲しい機能ではある。
リファクタリングすると、発生する可能性がなくはないからね。
できれば、public変数の対応も欲しいところではある。
まぁ、編集の修飾子をprivateにしてみてビルドエラーにならなければ、消してもいい変数だと分かるんだけどね。
手間がかかるから、一発でわかるなら、そうしたい。

[12/03] Javaが僕にくれたもの

記事URL

Javaが僕にくれたもの | susumuis Info

感想

Javaの業務経験についての話。
自分も経験あるようなあるある話がいくつかあった。
読んでいて思ったのが、やっぱり環境は大事。

[12/04] ローカルキャッシュにCaffeineでも

記事URL

ローカルキャッシュにCaffeineでも - CLOVER

感想

あんまりキャッシュ周りを気にしたことはなかったが、色々できそうな気がした。
キャッシュ関連の操作をあまりしたことがなかったので、いいきっかけになった。 一番驚いたのは、有効期限の設定かな。
今時のキャッシュライブラリはできて当然みたいな感じだったが、あんまり意識したことがなかったので、驚いた。
ここまで進んでいるんだね。

ここまでできるなら、区分値など、起動時に読み込まれる外出定数とかに使えるのではないかと思った。
DBやpropertyに新規追加した場合、メモリ上にロードされていないから、アクセスがあったときにロードするとか。
リリースを考えなくてもいい作りにできるな、とレベルの低いことを考えてサンプルを試していた。
どっちかというと、試す環境づくりでかなり手間取った。。。

[12/05] ArrayListのソースを読んでみた

記事URL

http://qiita.com/fukushiw/items/dade32371df476987bec

感想

ArrayListのコールドリーディングを、自社で実施した時のレポート。
自分も、どちらかと言えば、何かを主催する方の人間にあたるので、内容よりも会社内でどういった状況だったのかを注視した。
詳しくレポートを書きすぎると、イベントをやっても初回しか集まらない話はなんとなく分かる。
人って面倒くさがりだからな。
詳しくやるのも考えものだと思った。
レポートは、最後をやってから出せば良いのではなかろうかと思う。
あとは、超サマリだけ共有するとか。
難しい。。。
興味を引くことの難しさを感じる。
あと、詳細書いても、見てくれるとは思えない。
勉強会・読書会を参加する文化を作らなければ、最終的な能力向上は計れないと感じました。

[12/06] HashSetを実装しなおして失敗した話

記事URL

HashSetを実装しなおして失敗した話 - Qiita

感想

HashSetの独自実装の話。
やはり、コアな部分はJVMとセットで理解してないと、性能向上は難しいとのこと。
そういった意味でも、ステップアップを図りたい場合は、JVMを理解する必要がある。

[12/07] Java Stream APIでハマったこと

記事URL

Java Stream APIでハマったこと | haruo31's blog

感想

StreamAPIは、なるべく使うようにしている。
今、現場で禁止されているのが意味不明で、使いたいところで使えない不満があるが。。。

読んでいて思ったのは、並列処理の解析手法が難しいと思った。
StreamAPIを使うなら、やっぱりJavaのヒープメモリの解析方法を知っておく必要があると感じた。

[12/08] Optimizing JavaというJavaパフォーマンス系の書籍が面白そう

記事URL

Optimizing JavaというJavaパフォーマンス系の書籍が面白そう - 谷本 心 in せろ部屋

感想

書籍紹介。
まだ、日本語訳出てないのか。。。
日本語訳を待っていると、情報が遅れるのは否めない。。。
やっぱり、英語大事だな。
喋れなくても、読み書きできるようにはならないといけないね!
近場に英語を話せる人が欲しい。

[12/09]マイクロベンチマークツール、JMHについて

記事URL

マイクロベンチマークツール、JMHについて - Qiita

感想

jmhの紹介。
計測する場合、当然ではあるが、ロジックが正当なことであること。
使う前に準備がいるので、そこら辺がもっと簡単になれば、使われるのではないかと思った。
実際に使ってみて、準備するまでが面倒だと感じた。

出力結果は、レポートとかに使えそうな、なんとなく威厳を感じる出力。。。
※小物感ハンパねぇ

Java9でいろいろ機能が追加されると思うが、これを使って計測してブログに結果あげるようにしたいと思う。

[12/10] DBUnitでBLOBデータをEXCELから放り込んだ話

記事URL

DBUnitでBLOBデータをEXCELから放り込んだ話 - Qiita

感想

プロジェクトで、テストにExcel使うって時点で、嫌な予感しかしない。
案の定、書いた人も苦労したようだ。

DBUnitは、JUnitとセットでよく見かける。
テストデータをExcelで管理する現場は、よくあるからな。
だが、BLOBデータは扱った記憶があるような、無いような。。。
だいたいは、基本的な数値型と文字列でなんとかなってしまうから、あんまり記憶にない。
確かにレアケースではあるが、対処方法は覚えておくに越したことはないと感じた。

やっていることは、途中でバイナリ変換を実施している。
かなり泥臭いことを。。。
確かに、現場でこんなことしたら、怒られてしまいそうだな。

最近、思うのだが、Excelでのデータ管理に限界を感じる。
なんというか、いろんな見えざる罠が多すぎる印象がある。
もっと上手い方法がないだろうか?
テストデータ管理用のDBがあってもよいのでは無いかと思う今日このごろ。
SQLiteみたいな軽めのDBにデータ突っ込んで、JUnitとかで走らせたときに、使っているDBにデータを突っ込むとかね。

[12/11]Gradleから始めるDataNucleus

記事URL

Gradleから始めるDataNucleus - Qiita

感想

JDOを使ったGoogleCloudPlatformへのデータ登録。
Gradleは、つかったことが無いので、なんとなくで記事を読んだ。
JDOは、テスト系で使えるのではなかろうか?と思いました。
あと、マルチバイトの変数名の変数は、プロダクトコードには入れられないけど、テストコードになら入れてもよいのではないかと言うのが、個人的な感想。
ただし、プロダクトの構成が100%日本人の場合だけだけどね。

JDOは、上手いことテストコードに使えそうな気がする。
どこかのタイミングで検証してみたい。
TODO行きだ!

[12/12] さあ、並列プログラミングをはじめよう

記事URL

さあ、並列プログラミングをはじめよう - Qiita

感想

Java8の並列APIって言われると、ParallelStreamAPIしか思いつかなかったけど、言われてみれば、Threadもそうだったね。
Threadは、学生時代で使って以降、なんかの時間の計測か、ゲームの描画処理でしか使った記憶がないな。。。
あんまり並列って認識がなかった。

並列処理は、なんとなく理解したつもりになっていたけど、改めて見ると知らないことが多かった。
Executor FrameWorkとか、使ったことがなかったが、初めて使って、Threadより簡潔にかけると感じた。

比べてみてわかったが、よりシンプルに書けるのは、StreamAPIなんだと感じる。
並列処理は、プログラミングの難問だから、書く量は少ないほうがいいのは、当然か。
Fork/joinは、とっつきにくさを感じた。

並列処理は、今後も重要になってくる気がする。
並列処理ってわけではないが、分散処理を考える上でも、並列処理の概念は覚えておいた方がいいと感じた。
しっかりと勉強し直す必要がありそうだ。
TODO行き!

[12/13] JavaSEでもオブジェクト指向データベース(JPA)を!

記事URL

データベースを簡単にーJavaSEでもオブジェクト指向データベース(JPA) - Qiita

感想

JPAを使ったDBアクセス関連の話。
全く関係のないことだが、derbyがとっつきにくい!
話全般は、O/Rマッパーを理解していれば、問題なく飲み込める。
Javaのライブラリは、たまにとっつきにくい物があるが、そこら辺はカスタマイズが必要なのかと感じた。

[12/14]JGiven で 100% Pure Java BDD

記事URL

JGiven で 100% Pure Java BDD(導入編) - Qiita

感想

ごめんなさい。BDDって単語がわからなかった愚か者です。。。
振る舞い駆動は知っていたぜ!
BDDって単語がわからんかっただけ。もう覚えたぜ!

話を戻す。
テストは、状態・実行内容・期待値を定義して、それらの実行はJGivenに任せるんですね。
だから、状態や実行内容が列挙できていれば、簡単に複合テストケースが作れるわけか。
そこら辺は、便利かもしれない。
実際にプロジェクトで使ってみないと問題は見えないかもしれないが。。。
レポートのいいところは、どんな機能が使えるかが分かるところか。
逆もまたしかり。
どんな機能が使えないかも分かるってことだね。
TDD的な開発でアレば、かなり有用そうな気がする。
これのNGが、そのまま進捗報告に使えるわけか。
なかなか有用そうな気がする。
まだ、正式版では内容だが、活用シーンは多くありそう。
情報は、随時追っていきたい。
TODO行き!

話が全然変わるが、テストケースに日本語使うのは、個人的には有りだと思っている。
ただし、ターゲットが日本限定の場合のみね!
納品先が、ガチガチの日本企業ならOKかなって思っている。

雑記

バージョンの表記方法を全然知らなくて、調べた。
RCって、ほぼリリースに近い状態なんだな。
JGivenのリリースは、結構近いのか。
ちなみに、調べたサイトは、以下。

安藤幸央のランダウン(51):意外と知らないバージョン表記・数字の豆知識 - @IT

[12/15] HttpURLConnectionで嵌った話

記事URL

HttpURLConnectionで嵌った話

感想

HttpURLConnectionを使ったHTTP通信で、サーバーが4xxのエラーを返したときの話。
最近良く思うのが、HTTPのステータスコードが全然頭に入ってこない。
いや、調べりゃいいんだろうけど、200か200以外かしか気にしたことがない。
そろそろ、こんな状態は脱却したいな。
4xx番台が何なのかくらいは覚えたい。
TODO行き

話を戻すと、エラーが帰ってきたときに、エラーストリームが取得できない状態にハマったという話。
ココらへんまで来ると、もうソースを読む力が重要なんだなと思う。
あとは、妄想力。
こういう状態なら、こうなるが考えられるようになると、バグ修正の速度は格段に上昇すると個人的に思う。

どっちかというと、こういう事象有りますよって感じで終わっていたな。

[12/16] Javaslang を試してみた

記事URL

Javaslang を試してみた - 覚えたら書く

感想

StreamAPIを理解していたからかもしれないが、案外すんなり入ってきた。
副作用がないことで、関数型プログラミングはしやすくなるのではないかと感じる。
今後、Javaに大きく影響を与えそうなライブラリではないかと感じた。

話が変わるが、この記法は、Scalaライクなのだろうか?
Scalaは、やろうとしたが、覚えられなくて断念した記憶がある。
紹介されていた記法に近いなら、俺にもできそうな気がしてきた。
余裕があれば、Scalaを覚えて機械学習に流用したい野望がある。
TODO行き。

[12/17] JARファイルの難デコンパイル化について頑張ってみた話

記事URL

JARファイルの難デコンパイル化について頑張ってみた話 - Qiita

感想

ソース見られたくないから暗号化しようぜ!って話。
実行時間にどれくらい差がでるのか気になった。

クラスローダ周りは、正直知識がなくて、ふ~んくらいで記事を呼んだ。
結構な黒魔術を使わないと、こういうものって守れないんだなって思いました。
ソースコードの難デコンパイル化は、製品としてありそうな気がする。
著作権保護を強く訴えている起業とか。
※ネズミの王国が真っ先に思いつく!

[12/18] 暗号処理をやってみよう!

記事URL

暗号処理をやってみよう! - Qiita

感想

これは、知っているで!
ログイン関連の画面をやらせてもらったとき、パスワードの暗号・復号化で似たようなことをやった記憶がある。
暗号化は、突き詰めていくとかなり奥が深いってのは、そのときに痛いほど味わった。
だいたい既知の内容だったので、特に言及することはない。

[12/19] 自作のJavaMailラッパーでiCloudメールにアクセスする

記事URL

自作のJavaMailラッパーでiCloudメールにアクセスする - ひらおかゆみの投げやりブログ

感想

JavaMailでiCloudメールに接続できなくなったときの対応話。
問題だったのは、iOSの2ファクタ認証。
2ファクタ認証ってなんぞ?状態だったので、とりあえず調べた。

確認コードを入手して 2 ファクタ認証でサインインする - Apple サポート

要するに、2段階認証のことだろうか?
ちょっとiOS持ってないので、確認できないのが痛い。。。

今まで知らなかったけど、このメール送れない問題って、かなりシステム影響でかいんじゃ。。。て思った。
例えば、会員登録とかは、メールアドレスに一時的に有効なURLを送ったりするけど、それがそもそもできないってことになる。
メール送信の機能を作っている人は、大変だな、こりゃ。
バイス関連の情報は、逐一収集しておかないと、対応が後手に回るから恐ろしい。

[12/20] ThreeTen Extra と ThreeTen Backport

記事URL

ThreeTen Extra と ThreeTen Backport - Promised Land

感想

Date and Time APIの歴史と、生まれた派生の成果物についての話。
ThreeTen ExtraのThreeTenって何っておもったけど、JSR310の310のことねってわかるとすんなり行く。
Extraって言われると仰々しいイメージがあるけど、翻訳すると「余分な」って意味らしいね。
中二病満載の用語かと思っていたが、ディスりのイメージが強い用語なのだろうか?

ThreeTen Backportは、まだJava8に移行できてないプロジェクトで積極的に使っていくべきだと感じた。
いずれバージョンアップの時はくるから、被害が少なくなるように、少しづつ対応は行っていく必要があると思う。
内容を見ていたが、やっぱり、時間の管理は迷走しやすい気がした。
いろんな地域でいろんな日付の管理があるから。。。

[12/21] MySQL on Fusion-IOのパフォーマンスを引き出すバッチパターン

記事URL

MySQL on Fusion-IOのパフォーマンスを引き出すバッチパターン - Qiita

感想

CQSを理解するのに時間がかかった。
ようするに、副作用があるとこないとこキッチリ分けましょうってことね。
並列処理する上では、副作用の有無を理解した上で、どこの性能上げるかが大事だね。
DB関連の並列処理は、かなり面倒な印象がある。
完全には理解できなかった。
どこかで実験する必要があるな。

[12/22] 拙訳 JUnit 5 User Guide

記事URL

拙訳 JUnit 5 User Guide - Qiita

感想

JUnir5の紹介。
ざっくり見た感じ、3→4ほどのデカイ変更はなかった気がする。
Junitは、Javaのテストツールとしてデファクトスタンダードみたいになっているので、なる早で情報は集めたい。
あとで、じっくり検証する。

C++の設計と進化』に見る Java の方向性

記事URL

『C++の設計と進化』に見る Java の方向性 - Qiita

感想

C++Javaを比べての話。
C++だけでなく、C言語をベースにした言語すべてに言えるが、書き方が宣言的で分かりづらい印象がある。
Objective-cなんかと使った時は、Javaならもっと簡単に書けるのに!ってのが何回かあった。
たぶん、C++も同じだろう。
※使ったことがないので、憶測ではあるが。。。

他の言語と比べることで、Javaのいいところ、悪いところが見えてくるのだと感じた。
来年から、少しJavaから離れるが、別の言語の知見を取得して、プログラミングスキルの幅を広げたい。

ダンJavaの書き方。Immutable Java、Null安全を考えてみる。

記事URL

モダンなJavaの書き方。Immutable Java、Null安全を考えてみる。 - Qiita

感想

タイトル通り、イミュータブルやNullと、どうやって付き合って行くかの話。
不安定な状態のオブジェクトをなくすように心がけるのは、最初のころはわからなかったなぁ~と感慨深く見ていた。
基本的には既知の内容が多かったので、そこまで参考にすることはなかったが、上手くまとまっていた。

groovyの内部DSLの勉強がてらにETLツールもどきを作ってみた

記事URL

groovyの内部DSLの勉強がてらにETLツールもどきを作ってみた | takemikami's note

感想

Groovyを使ったDB初期化ツール。
Groovyは、JavaよりなJVM言語。
一時、触っていた。
目的はGradleを使えるようになりたかったから。
だが、タイミングを逃してしまい、今に至る。
ただ、言語自体は読めるので、そんなに苦ではなかった。
スクリプトに近い感覚で書けるので、もっといろんなことができそうな気がする。

もう一度、学びまおそうかな?

TODO

  • JDOを使ってテストコードを書けないか、考察する
  • 並列処理(特にExecutor FrameWork)を学習しておく
  • JGivenの利用方法について習熟しておく
  • HTTPステータスをまとめておく
  • Scalaの世界への入門

総括

以前より知らないことが減った気がする。
気のせいかもしれないが。。。

もうちょい深いところの知識がほしいと思った。

Advent Calendarのいいところは、いろんな知識が集約してくるところだね。
1ヶ月で知らないことや新しい発想に出会える可能性が高いので、来年も期待したい。

以前のAdvent Calendarまとめ

suzaku-tec.hatenadiary.jp