エンターテイメント!!

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

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

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

SwiftのレイアウトはLabel優先

入力しない項目は、テキストフィールドじゃなくてラベルで対応する。
複数行に渡るものも、Labelで出す。
テキストフィールドを編集不可とかで表示しようとすると疲れるだけ。

SwiftでLabelのテキストの垂直方向の調整

不可
理由は、分からない。 viewでラップして対応するのが無難そう。

Swiftのコードスタイル

作ってると、なんかネストが深くなりがちなのだが、回避する方法はあるのか?
if let で、ものすごくネストが深くなってしまう。

githubのデフォルトブランチ

githubでは、デフォルトのブランチは、masterになる。

なので、masterを消したりする場合は、defaultを変える必要がある。

Cocoapodsのバージョン固定

cocoapodsのバージョン違いによるエラーが発生する場合がある。
それを回避するためには、gemfileでcocoapodsのバージョンを固定するのがベター

swiftのtableviewでのdetail text label

ストリーボードで設定することができる。
StyleのRight Detailで設定可能。

コード上でも設定できる。
個人的には、動的に変わったりするので、コード上に設定するほうが無難だと思ってる。

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

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

macのterminalで、現在ディレクトリをfinderで開く

open .

基本的な使い方は、open <path>
たぶん、使うケースは、open . が多い気がする。
コマンドでやるとタイピングミスしそうって場合は、finderで操作したりしたい性分なので、たまに使う。

gitignoreをかんたんに作成する

giboでやると、ものすごく楽にできる。
どこかのタイミングでまとめるが、深く考えなくても、不要なファイルやパターンを出力できるので、初期開発のスタートダッシュができると思った。
インストールも、Homebrewでかんたんに入れられるのも、良かった。
もう、Homebrewはデファクトスタンダード化している気がする。
デフォルトインストールしないのかな?

TabBarControllerとNavigationController

ラップの順序が大事。 navi → tabだと、画面遷移する際の値渡しが、面倒。
たしか、self.super.~~~とか、書かねければ行けなかった気がする。

シンプルに使いたいのなら、tab → navi の順序でラップする。

雑記

最近、夜が眠れない。
悪方向に考えが言って、なかなか寝れないんだよね。。。。
そのうち、不眠症になったりしないか不満。
調べると、寝る前に悪いことを考えると、自己暗示にかかって悪い方向に行く的な記事を見かけて、かなりガクブル状態なんですけど。。。

寝付けないと、翌日の朝は、寝坊しちゃうんだよね。。。
その時は、急いで会社に行っても居たたまれないので、仮病使って、午前休にする。
そんでもって、余裕をもって出社する。
毎回使うと、流石に怪しまれるので、なるべく使わないようにはしている。

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 処理*/);

雑記

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