聞こえないJavaエンジニアが適当に書き連ねていく

つらつらとメモしたり日頃の溜まっている想いを吐き出す場所です。

コツコツとプレイする

モンスターストライクというゲームが好きで毎日コツコツ遊んでいる。

このゲームは、極論を言えばクエストをクリアしてゲットできるモンスターを99体集めて運極にするゲームなんである。

99体集めるためには、コツコツとプレイしないといけないし、クエストにピッタリとはまる手持ちのモンスターがいるかどうかも重要な要素なので、作りたくても作れない状況はある。

また、手持ちは充実していても、プレイヤーのスキルやクリアするための知識が足りていないとクリアできない。

なので、欲しいモンスターがいたら、ゲットするために色々と事前準備をしてから挑むんである。

まぁそれでも自分に合わないクエストは途中で放り投げてしまうんだが…

 

最近、ふっとシステム開発や既存のシステム修正も似てるなぁと思うようになった。

コツコツとプログラムを組んだりテーブル設計を繰り返していくことで一つのシステムが出来上がる、あるいは新機能を追加できる。

でも、そのために必要な事前準備を怠ると精神的に辛いだけでゴールは達成出来ない。

それでもゴールするにはコンティニューしたり(残業だったり休日出勤だったり)ガチャ引いて人手を増やしてどうにかコツコツと実績を積み上げるんだけど…

 

それでも自分に合わないなぁというとき、それは使っているフレームワークが肌に合わない、あるいは使いにくいときなのではなかろうか。

何とかして手を動かせば、いつかゴールは見えるんだけど、手が全く動かない、今はそんな心境に陥っている。

ゲームだったらこのクエストはちょっとやめて(結果としてずっとやらない)他のクエストをやろう、ということが出来るんだけどお仕事はそうもいかないのが辛いところだなぁ。

 

Java9で意外なものが非推奨(Deprecated)になっていた

Java10を使って勉強のため、本を写経していたら

Double d = new Double(99.999);

こんな感じのプログラムの場所で取り消し線が引かれてアレ?となった。 調べてみたら、Java9でコンストラクタに値を入れる系が非推奨になっている。

Double (Java SE 9 & JDK 9 )

これからはこう書こうね、ってことのようだ。

Double d = Double.valueOf(99.999);

Doubleを例にしたが、IntegerやFloatなども非推奨になっているので注意が必要。
下記リンク先にコンストラクタの書き方で非推奨になったものがまとまっているのでチェックしておくとよさそう。 Deprecated List (Java SE 9 & JDK 9 )

Java入門者がJava8までをベースに書かれた本やチュートリアルのサンプルプログラムを写経していると謎の取り消し線が出てアレレ?ってなりそうだなと思った。
JavaDocを見れば答えがちゃんと書いてあるんだけども、入門者はJavaDoc見ないだろうしなぁ。

というか、Java11が正式リリースされたときにJava9以降で非推奨になった一覧も改めて公開されるのだろうか?
それに、非推奨になったメソッドはいつ消えてもおかしくないってことらしいけど、いつのバージョンで消えちゃうのか…
Twitterで「forRemoval=true」じゃないから消えないぞ、と指摘を戴きました。感謝感謝。

追記

なぜ非推奨になったのか?の理由はこれかな?
[JDK-8176335] Release Note: Deprecation of Boxed Primitive Constructors - Java Bug System
メモリの使用量節約みたいなことが書いてある。

Mavenプロジェクトをオフラインで使うときの手順メモ

お仕事で調べたのでメモしておく。

  • 雛形となるプロジェクトは既にオンラインで作成済で、そのプロジェクトをオフライン環境に持ってくるケースを想定している。
  • IDEeclipseを前提にしている。

事前作業

ダウンロード

作成済のプロジェクトがあるフォルダ上で以下のコマンドを打ち、jarファイル、ソース、JavaDocをダウンロードしておく。
参考:mvnコマンドで、ソースとJavadocのJARを取得する - CLOVER

mvn dependency:sources -Dmaven.repo.local=../localrepos
mvn dependency:resolve -Dclassifier=javadoc -Dmaven.repo.local=../localrepos
mvn dependency:go-offline -Dmaven.repo.local=../localrepos

ファイルコピー(or移動)

ダウンロードしたファイル全てをローカルリポジトリとして設定したいフォルダに移す。
以下の記述では、C:/maven/localrepos に置くのを想定している。

作業

setteing.xmlを新規作成する

setting.xml を新規で作成し、localRepositoryとofflineの値を書き換える。
新規作成したsetting.xmlはどこに置いてもよいが、mavenフォルダの真下に置くのが他の人に指示する手順を考えるとわかりやすそう。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>C:/maven/localrepos</localRepository>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline>true</offline>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

eclipseの設定変更

eclipseを開き、[ウィンドウ] → [設定] → 「maven」 → 「ユーザー設定」でユーザー設定の欄に C:\maven\setting.xml と書く。

mavenプロジェクトを取り込む

ファイル→インポート→Maven→既存Mavenプロジェクト で mavenプロジェクトを取り込む。

以上。

#JavaDayTokyo 2018に参加した

JavaDayTokyo 2018に参加して今時のJavaについて触れてきた。

 

Javaのリリースのやり方が変わったり、Java EEEclipseに移管されてJakarta EEになった最初のJava Day Tokyoだったからか、それ系のセッションが非常に人気があって、立ち見も出ているほど。

Javaはオワコンとか言われてるけど、それでも#JavaDayTokyo がTwitterのトレンド入りする程なので、Javaはまだまだ終わらないぞという気持ちになれた。

 

その一方で、Javaは今までの進め方を見直して、色々と改善しているのにそれを使う我々がいつまでも旧態依然のやり方のまま、というのはよくないなと反省もした。

出来るところから少しずつ改善していかないと…って毎年この手のイベントに参加して思うのだけど、成果を挙げられていない自分に猛省する。

 

今回は手話通訳なし、ソロでの参加だったのでスライドとTwitter実況を頼りに内容を理解していました。Twitter実況して下さった皆様、ありがとうございます。

社会人17年目がスタート

2002年入社組なので、働き始めて17年目。

 

新卒入社してからずっと同じ会社で働き続けているので、ちょっと飽きも感じてはいるわけですが…

 

かといって、他のところで通用する技術を持っているわけでもないので、引き続き今のところで無駄な足掻きを続ける所存であります。

 

とりあえず、おっさんなりに今年度も何か1つ、技術を覚えたいものです。例え、その技術が2週くらい周回遅れだったとしても。

Java10での文字列結合のパフォーマンスを測定してみた #Java10

これは何?

2018/3/21にJava10が正式にリリースされました。
Java9での比較で使ったプログラムを使ってJava10でどうなったか確認してみます。

前提

これと同じプログラムを使ってテストしました。 qiita.com

Java9での比較結果はこちらです。

tadashi.hatenablog.com

githubのソースの場所はこちら。 github.com

jmhの起動方法などはこちらにまとめています。 https://github.com/suzukitadashi/jmhTest/blob/master/jmhTest/command.txt

テストした端末のスペックなどは以下の通りです。

  • Windows10 64bit
  • Intel(R) Core(TM) i7-2820QM CPU @ 2.30GHz
  • メモリは8GM

結果

細かいログなどは下記URL先のファイルを参照してください。

github.com

ここではグラフ化したものをまとめます。

f:id:su_zu_ki_1010:20180321203855p:plain

f:id:su_zu_ki_1010:20180321203934p:plain

f:id:su_zu_ki_1010:20180321204014p:plain

Java9の時と傾向は同じで、半角数字の時はJava8よりパフォーマンスがよくなっているのですが、それ以外の時はJava8の方がパフォーマンスがよいという結果が出ました…。
文字列結合のパフォーマンステストは難しいです…