エンターテイメント!!

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

2019/06/24週 気づきと振り返り

業務こなしての問題・気づき

AARファイル

Androidプロジェクト用のライブラリをまとめたフォーマット。
zip形式で、Android 固有のアセット、リソース、AndroidManifest.xml などを含めることができる。
バイナリファイルも含めることができる。
なので、Androidのネイティブ実装(C++の実行ファイル)を入れられる。

グループ会社製品のネイティブ実装を複数件取り込むために、利用した。
最初は、本プロジェクトにNDKで入れようとしたけど、今後、製品のソースが手に入らないケースがあるかも知れないから、AAR作ったりしてた。

サンプルが動いて、俺の実装が動かない

Androidのサンプルプロジェクトを参考に、ネイティブ実装込の実装をしたが、動かないという事態に陥った。
原因がまったく分からなかったが、サンプルと俺の実装の成果物(ビルド後のapkファイル)の中身を比べて原因が特定できた。
原因は、改行コードが違ったから。
改行コードのために1週間近く悩んでいたのが、腹立たしい。。。

雑記

マジで何なの?windows
改行コードをLFで統一して欲しいわ。

原因に気づいたときは、俺って天才?って思ったけど、後々になって、段々と腹が立ってきている。

CRLFなんて存在しなければ、悩む必要なかったじゃん!って思うんだよね。。。

たぶん、この一週間で、髪の毛が随分抜けたと思う。
嫌だよ。。。。
剥げたくないよ。。。

今週で嬉しかったのは、ボーナス出たくらい。
働いてきた中で、一番ボーナスが出た気がする。
増税前に、nintendo switchでも買おうかな?
ゼルダやってみたい。
あとは、ポケモンの新作待ちかな?
Z技やメガシンカが廃止になるらしいから、復帰しようかと考えてる。
ただ、特定のポケモンが連れていけなくなるのはなぁ。。。。
データ容量の問題なのかな?
だったら、もうPS4で出したほうが良くない?

Could not determine java version from '11.0.2'. の対処

きっかけ

Spring Webflux を試そうと思ってstartup見ながらやり始めたら、思いのほか詰まったので、記録に残す。

Getting Started · Building a Reactive RESTful Web Service

startupだと、15分でできるよってあったけど、環境問題に詰まったから、倍の時間かかってしまったぜ。。。

環境

OS:windows10

その他の情報を載せちゃうと、本題と被るのでスルー

内容

発生したタイミングは、ビルド時。
./gradlew bootRun を実行したときに、発生した。

とりあえず、エラーメッセージの内容が分からなかったので、Google翻訳

'11 .0.2'からJavaのバージョンを特定できませんでした。

最初、見たとき、意味がわからなかったわ。。。
11.0.2がJavaのバージョンなんじゃないの?って思った。

いろんなサイト見てると、Javaとgradleのバージョン不一致で出ているようだった。

自分のところでは、以下だった。

Java:11.0.2
gradle:5.4

そんでもって、Spring Webfluxのサンプルが要求していたもの。

java:1.8
gradle:4.6 //gradle-wrapper.propertiesを参照して推測

なので、求められている環境に合わせる。 javaは、環境変数を変更。
gradleは、sdkmanで変える。

そしたら、エラーは解消。
無事、ビルドできて実行できましたとさ。

Could not determine java version from '11.0.2'. の文章の意味が分からなかったが、たぶん、java11.0.2を使えるgradleのバージョンが判定できなかったという意味だろうと妄想している。

結論

javaかgradle、もしくは、両方、バージョン不一致で起こる。
ドキュメント確認して、環境を合わせれば、解決できる。

雑記

sdkman、かなりいい。
環境を切り替えるのがものすごく楽。
今回は、gradleのバージョンを変えるのに役立った。
ダウンロードからインストール、バージョン切り替えまで簡単にできるのは、魅力的だと思う。

2019/06/17週 気づきと振り返り

業務こなしての問題・気づき

AndroidのUIスレッド

メインスレッド以外でUIを変更しようとすると、CalledFromWronThreadExceptionが発生する。

どうしてもやりたい場合は、メインスレッドでやるように明示的に処理を書く必要がある。

mActivity.runOnUiThread(new Runnable() {
  @Override
  public void run() {
    // UI処理
  }
}

もっと短く書くと、以下。

mActivity.runOnUiThread(() -> /** UI 処理*/);

雑記

悩んでた問題が、休み明けだとスラスラ解ける現象は、何なの?
一旦、忘れてから、再度、取り組んだほうが解決する。
余分な考えや、先入観で、問題が正しく見えてなかったのかも知れないな。。。

Java13のText Blocks (Preview)を試す

きっかけ

なんか気になっちゃったから。
学生時代、クラスで好きな女子が気になっちゃう的な感じ。

開発環境

Visual Studio Code

バージョン: 1.35.1 (system setup)
コミット: c7d83e57cd18f18026a8162d042843bda1bcf21f
日付: 2019-06-12T14:30:02.622Z
Electron: 3.1.8
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.17763

Java

$ java -version
openjdk version "13-ea" 2019-09-17
OpenJDK Runtime Environment (build 13-ea+25)
OpenJDK 64-Bit Server VM (build 13-ea+25, mixed mode, sharing)

実験用のソース

今回は、Java13の機能を試すときに悩んだので、そのまま、そのソースを利用。

public class test {
  public static void main(String[] args) {

    String text = """
    <html>
      <body>
        <p>Hello, world</p>
      </body>
    </html>
    """;
    
    System.out.println(text);
  }
}

実行

preview機能なので、過去に書いたpreview機能の試し方を参考に実行

suzaku-tec.hatenadiary.jp

実行すると、下記のような結果になる。

<html>
  <body>
    <p>Hello, world</p>
  </body>
</html>

見たままでやれるので、より直感的になると思う。

参考サイト

JEP 355: Text Blocks (Preview)

Javaでpreview機能を試すやり方

きっかけ

Java13の機能を試そうとしたら、--enable-previewを付けてコンパイルしろやアホって言われて、ちょっと苦戦したので晒す。

開発環境

Visual Studio Code

バージョン: 1.35.1 (system setup)
コミット: c7d83e57cd18f18026a8162d042843bda1bcf21f
日付: 2019-06-12T14:30:02.622Z
Electron: 3.1.8
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.17763

Java

$ java -version
openjdk version "13-ea" 2019-09-17
OpenJDK Runtime Environment (build 13-ea+25)
OpenJDK 64-Bit Server VM (build 13-ea+25, mixed mode, sharing)

実験用のソース

今回は、Java13の機能を試すときに悩んだので、そのまま、そのソースを利用。

public class test {
  public static void main(String[] args) {

    String text = """
    <html>
      <body>
        <p>Hello, world</p>
      </body>
    </html>
    """;
    
    System.out.println(text);
  }
}

最近、jsばっかりやるせいで、クラスを小文字から書いても抵抗がない。
Javaやってたころは、かなり違和感あったかもな。。。

本題

コンパイル

下記のコマンドでできる。 $ javac --enable-preview -release 13 test.java

コンパイルすると、警告が出てくるが、問題はない。
--enable-previewpreview機能を有効化する。
こいつを使う場合は、-source-releaseオプションが必須。
なぜなら、どの時点のプレビュー機能を使うのか判断できないから(だと思う)
今回は、Java13を使うので、13を指定

ちなみに、releaseでやると、下記の感じになる。
$ javac --enable-preview -release 13 test.java

実行

$ java --enable-preview test

最初に実行したときは、-source を付けてしまい、怒られた。。。
同じことした人は、たぶん、多いと思うんだけど、どうかな?

理屈としては、コンパイル時に対象のバージョンを指定したから、バイトコードでは不要なんだろうなと思う。
だったら、enable-previewもなくていいじゃんって、思ってしまうけどな。。。

感想・雑記

本質とは違うところで悩んでしまったが、今後、early-access版を試すときに必須になりそうなので、覚えたほうが良さそう。

IDEは、リリース済みのJDKなら、IntelliJ使うんだけど、未リリースの奴は、vscode使うことが多い。
あまり制約が無いのと、日本語表記があるから、未知のことをやる場合は、vscodeが多くなる感じかなと思う。

参考サイト

ずんだの縦読み問題 Java 12 Early-Access 版 - Qiita

2019/06/03週 気づきと振り返り

業務こなしての問題・気づき

なし

というか、ほとんど作業してない。
むしろ、こっそり寝てるかゲームしてた時間が長いと思う。

その他

業務と関係ない場所でコード書いていたが、npmのFile systemでexistって非推奨だったんだな。。。

File System | Node.js v12.4.0 Documentation

名称を見て使っていたが、statに置き換えた。

これは、いつから非推奨になったんだろう?
長いことDeprecatedにしたままだと、JavaのDeprecatedと同じことになりそうだが、どっかで削除するのかな?

雑記

簿記3級って、難易度高くない?
独学だと、全然点数取れない。数字が合わないと、かなり焦る。

受験場所が明治大学だったのだが、明治大学の空調、かなりヤバイ。
たぶん、空調にホコリが大量にあると思う。
きっと、掃除してないと思うわ。
試験中、くしゃみと鼻水が止まらなかった。
試験は、なるべく明治大学以外がいいな。

2019/05/27週 気づきと振り返り

業務こなしての問題・気づき

androidでJSエンジン

webviewは、レイアウト配置しなくても使える。
インスタンス保持だけで使えた。

JSエンジンとして活用することができる。
なので、JSでwebアプリを開発したら、そのままAndroidでwebviewに乗せるだけとかでもできる。
見た目は、unityで作りたいとかでも、内部の実装だけ流用ができるのに、最近気づいた。

Androidでコード読むときに迷子にならない方法

無茶苦茶クラス数が多いアプリを見てたりすると、クラスを飛びすぎて迷子になる。
脳の一時記憶が持たないので、かなりしんどい。

何かないかと探したら、ブックマーク機能ってのがあるのに気づいた。

IntelliJのブックマーク機能 - 無理しない感じ

vscode使っているときに、ブックマークの拡張機能があったので、IntelliJAndroid Studio)にもあるだろうと探したら、案の定、あった。
多少は、ソース追うのは改善したけど、でも、やっぱり、これは何だったっけ?ってのはなくならない。。。
メモもついでに残せないとダメかもしれない。

AndroidのFragment

使っているライブラリがFragmentを使っていたが、理解するまで時間がかかった。
最初見たとき、どこでボタンが追加されているのか、全然分からなかった。

はっきり言って、viewの実装を分断するのは、良くないと思う。
なるべく、一元化すべきだと感じる。
代わりに、内部の実装を提供するのがベターだと思う。

雑記

今週、ほとんど何もしてないや。。。
たぶん、就業時間中は、ゲームしてた時間の方が長いんじゃないかな?

ここからは、ほぼ愚痴。

周囲に無茶苦茶キーボード音がうるさい人がいるのだが、ストレスでも抱えているのかな?
エンターキーがデカいならまだ分かるが、すべての音がうるさいというのが、俺にとってストレス。
どうやったらキーボード音がうるさいって伝わるだろうか?
舌打ちしておけば、おさまるかな?
話したくないので、直接伝えるのは辞めたい。