エンターテイメント!!

遊戯王好きの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/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/03週 気づきと振り返り

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

なし

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

その他

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

File System | Node.js v12.4.0 Documentation

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

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

雑記

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

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

JJUG CCC 2019 Spring 参加報告

公式サイト

JJUG CCC 2019 Spring - 日本Javaユーザーグループ/Japan Java User Group | Doorkeeper

参加セッション

  • Oracle Keynote Valhalla, updates and future
  • Catch up Java 12 and Java 13
  • ドメイン管理サービスにおけるJava活用のご紹介
  • 入門: 末尾呼び出し最適化
  • ソフトウェア設計の教育工学的な分析と育成へのアイデア
  • Project Loom - 限定継続と軽量スレッド
  • Functional Spring Cookbook

感想・まとメモ

Oracle Keynote Valhalla, updates and future

  • 内部クラス -> JVM上では別クラス
  • JEPの名前は、変わることもある
  • 二仕様物語は、笑うところ
    • たぶん、笑わないのは元ネタが分からないから。二都物語とかけているらしいが、読みが似ているだけで、内容が揶揄しているのか、よく分からなかった。。。
  • Java11より前は、内部クラスから外部クラスを呼ぶときにBridgeMethodを経由して呼ばれる
    • 開発者は作ってないが、スタック上に出力されてしまう。。。
    • やろうと思えば、外部からBridgeMethodにアクセス可能
    • Java11でなくなった
  • ValueTypes
    • Minimal Value Types プロジェクト(MVT)
      • タイプの種類
        • LQRU
          • なんか、エヴァのタイトルに出てきそうな英字だな。。。

BridgeMethodは、一回、試してみたい。
確かに、Java8使っているときに、見覚えのないメソッドがスタックトレースに出てきた経験がある。

Catch up Java 12 and Java 13

www.slideshare.net

Java12

lts のあとなので、大きな変更はない。
とはいえ、ツールとか入ってきた。

JEP 189

  • GCが7種類に
  • Shenandoahは、一回の GC は一定だが、頻度が変わる。

ShenandoahのJEPのサマリを見たときは、「そんな、バカな!」と思ったけど、やっと意味が分かった。
最初見たときは、一回のGCで全部回収して、実行時間も一定みたいな意味合いに見えてしまったが、違うのね。
参照の切り替えで済むから一定で、頻度は違うかもってわけか。。。
思ったんだけど、これの発生タイミングが重複してしまったら、どうなるんだろう?

JEP346

  • Java がメモリを返すようになった
  • これが可能になることで、常駐プロセスが作りやすくなったはず。
  • GC 改善は続いている。

JEP325

  • switch -> preview
    • 即使うのは待った

イマイチ、これは、便利になったのか?って疑問符が湧く。
switch文が嫌いなのだが、JDKのコミッターにswitch文好きがいるのかな?
それとも、デカい回収のための何かなのだろうか?

JEP341

  • 起動時間の短縮

JEP334

  • 定数の遅延処理

String#transform

  • ラムダ式でアクセスの逆順で書けるようになる。

かなり便利そう。
これは、Stringだけなのかな?
他のオブジェクトでも使いたいケースがありそうな予感。
内部の仕組みを確認しておきたい。

java13

  • socket 一新される
  • Loomは桜庭さんのセッション参照

かなり駆け足だった。
45分で振り返るのは、無理があったのだろうな。。。
興味持ったところだけしか、メモは取れなかったが、コンパイラの話は、かなりスッキリした。
あとは、String#transformが、かなり気になる。

ドメイン管理サービスにおけるJava活用のご紹介

  • TLD -> top level domain
  • ドメインはオークションで落札する必要がある。そこから色んな会社を経由して利用者に渡る
  • ドメインの最高落札額は、150億円くらい

ICANNと聞いて、最初にICANを連想してしまった。。。
ICANNって、ビジネス的にウハウハなんじゃないかな?って思ってしまった。

入門: 末尾呼び出し最適化

speakerdeck.com

末尾呼び出し最適化ってのは、後続の処理がないことに目を付けているわけね。
処理をスタックトレースに積まないことで、メモリ消費を抑えていると。
後々、疑問に思ったが、問題が発生したときにトレースできなくなるのでは?と思ったが、どうなんだろう?
同じ処理の繰り返しだから、スタックトレースは不要という考えなのかな?
分岐があったら死にそう。。。

あと、スタックってのは、遊戯王で言うところのチェーンを積んだ状態と一緒だなって思った。

ソフトウェア設計の教育工学的な分析と育成へのアイデア

speakerdeck.com

やっぱり、現場に出てない講師もいるんだ。。。
なんか、セミナーとかは、現場に出てないやつが出ているのではないかという疑惑が心の中にあったが、やっぱり、ものによっては、現場から追い出されたやつが講師しているケースもあるのね。。。

分からない箇所が本人の説明と違う箇所にあるってのは、よくある話。
俺も、新人の頃は、分からない箇所を教えてもらっても、しっくりこないことがよくあった。
それを理解して接してあげないと、精神攻撃になってしまうから、教える側は注意が必要かもね。

Project Loom - 限定継続と軽量スレッド

t.co

  • safe habor statement -> 信じるなの意
  • 並列/並行処理=難しい
  • 並列処理がスケールしない= CPU が遊んでる

待ちを譲るって聞くと、js の Promise だな。
JavaでjsのPromiseをやるには、スレッドを上手く使うしかないと思う。
wait-notifyAllでも実現はできるのか。。。

どうも、スレッド周りの話は、難しい。
ExecutorServiceが理解できてないせいかもしれない。
時間を見つけて、本腰入れて勉強する必要があるかも。
できれば、Fiberが来る前にやっておきたい。

Functional Spring Cookbook

docs.google.com

Spring Fu???
eclipse cheにインスパイアされてそうな命名に感じる。
ただ、FuはFunctionであることは、なんとなく予想できる。

Springにも関数型の概念が入ってきているのか。
Spring webfluxを早めにキャッチアップしておきたい。

全体通して

やっぱり、人が多い。女性の割合がかなり増えた印象がある。
あと、初参加者は、毎回、一定数いるんだなって感じた。

主流はmacだが、サーフェス使いも増えてきた気がする。

String#transform が、かなり気になった。
最初にやりたいことが、一番最後に記述するはめになるのを、どうにかならないものかと考えていたので、とても画期的に思えた。
応用が効くのか、試したい。

タスク・課題

  • String#transformの確認
  • BridgeMethod
  • ExecutorServiceを調査する
  • Spring webflux