エンターテイメント!!

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

2019/07/15週 気づきと振り返り

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

書こう書こうと思って、結局、一週間経ってしまった。。。

MacOSのウィンドウ切り替えショートカット

Windowsみたいに、alt + tab で切り替えられるわけではない。

以下の2つのショートカットで同じことができる。 - cmd + tab アプリ切り替え - cmd + F1 アプリ内のウィンドウ切り替え

おそらくだが、アプリが大量に立ち上がったりすると、 1つのショートカットキーだと切り替えが面倒になるからではないだろうかと思われる。
最初、ウィンドウ切り替えができなくて、そうとう悩んでいたが、グルーピングされているのだと分かったら、難なく使えるようになった。

info.plist

実行時に必要不可欠な構成情報を記入するファイル
カメラの使用許諾とか、マイクの使用許諾とかが必要な場合に記載したりする。

tableviewのregisterをstorybordでやる

SwiftのUITableviewで、セルのクラスを設定するのは、下記のようにコードでやっていた。

tableView.register(MyCell.self)

今やっている製品の取り込みで、サンプルを見たときに、どこにセルのクラス設定があるのか分からなかった。
コードのどこを見渡しても存在しなかったので、storyboardで設定しているのかな?と思って調べたら、ビンゴだった。
具体的に言うと、Attributes inspector にある Identifier で設定できる。

なんか、こういうのを見ると、やるせなくなる。
どっちかに統一しないと、どこに何があるのか、初見だとかなり困惑する。
個人的には、配置・レイアウト以外は、なるべくコードに書いてほしいと思う。
GUIでやれるのはいいんだけど、なんでもやり過ぎると、可読性が下がる気がする。
少なくとも、プロジェクトで取り決めをしておくものではなかろうか?と感じた。

雑記

雨が多くて洗濯物が乾かないのがつらい。。。
衣食住で、衣には、あまり金をかけない主義なので、着る物がなくなるのが怖い。
洗濯忘れとかすると、命取りだから、気をつけないとダメだな。

ビニール傘しか持ってなくて、全部、何かしら曲がってるから、新しい傘をかった。
3000円以上したいい傘。
新しいもの買うと、使いたくなる性分なので、結構、雨の日が多くても楽しんでる。
気分転換に、みんなも傘買えば、雨の日も楽しめるんじゃなかろうか?

2019/07/08週 気づきと振り返り

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

Swiftのコードでレイアウト調整

JavaのSwingを弄ってる感覚に似てる。。。

イベント付与は、最初の頃、GUIでやってたけど、「今、何がどうなってるのだ?」が分かりにくくて、コードでイベント付与するようにした。
ここも、JavaのSwingを連想してしまう。。。

どこも、GUIが必要なものは、同じ苦しみを味わってしまうのだろうなと感じる。。。
HTMLライクなレイアウト調整だったら、既存の知識を活かせるから楽なんだけどな。。。

やっぱり、最初にやる苦痛は、歳を重ねるに連れて大きく感じるようになってきた感じがする。
おそらくだが、できたときの喜びの感情が、最初の頃より薄れて来ているのだろうなと思った。

extensionにプロパティ

Swiftにextensionというクラスの分割記法があるのだが、プロパティは、本体のクラスにしか持てない。

せっかくカテゴライズ・グルーピングしたのだから、プロパティも分けられるといいのだがな。。。
おそらくだが、変数が散らばることで、衝突するのが嫌だったから書けなくしたんだろうなと推測。

でも、このグルーピングの考え方自体は、嫌いじゃない。
イベント記述が多くなりがちで、クラスが肥大化するので、こういう記法でなるべくグルーピングするのが、可読性に直結するのではないかと思った。

雑記

KPTからYWTへ

こう見えても、チームのリーダーなの。
毎月、チーム内でKPTで振り返りしていたが、どうもやりにくくて辞めた。
代わりに、YWTを適用するようにした。

辞めた理由としては、何が身についたのか分かりにくい。
だから、助言がやりにくい、反省ベースになりがちになる状況だった。
あと、結果に対しては、KPTで振り返りでもいいんだけど、業務が現在進行系なので、KPTが適用しづらいってのもある。

まだ、YWTどういった効果があるかは見えてないが、話の進め方は楽。
「やったこと」→「わかったこと」の流れで話をするので、助言する側もある程度、知識とやっていることの推測ができるので、提案ベースの助言がしやすいと思った。
あと、人事考課の参考資料にしようと思ったので、分かったことが見えるのが、立場的に重要だったので適用した経緯がある。

新組織

配下メンバーが変わってしまった。。。
全員、新人ですよ。。。
しかも、IT関連ではない学部の人達ですね。。。
話が通じるのか、一抹の不安がある。

iOS

とうとうwindowsを卒業して、iOSの開発環境、つまり職場でMacを使うようになった。
元々、家でMacBook弄ってたので、操作は全然問題ない。

使ってて楽だったのは、Githubとのやり取り。
git標準装備のmacは、初動が早くて助かる。
あと、homebrewでライブラリ管理できるのは、やりやすい。
windowsだと、chocolateyがあるが、イマイチ流行ってない気がする。

mac bookデュアルディスプレイで開発しているのだが、chrome+vimium環境が最高だった。
トラックパッドで操作すると、どうしても移動がキツイ。
なので、xcode上にカーソル残したまま、ウィンドウ切り替えとコマンドで検索できる環境が、すごく快適だった。
たぶん、mac bookiは、仮想ディスプレイ使って開発するほうが多数派だと思うけど、デュアルディスプレイにするときは、なるべくコマンドで操作できる環境にしたほうがいいと思った。
firefoxは、何かしらアドオンありそう。edgeは、たぶん、ないでしょうね。。。

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