エンターテイメント!!

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

2022/03/21週 気づきと振り返り 身が入らない

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

Java

内部クラスをリフレクションで生成する場合、デフォルトコンストラクタでも引数がいる

掲題の通りなのだが、最初、それが分からなくて、かなり迷った。

Javaの実装だと、x.new A()ってやるのだが、実際は、裏ではnew A(x)って形でインスタンスが生成されているらしい。
そういえば、OCJPの勉強したとき、そんなことを見たことあるなぁ~と思いつつ、下の階の人が苦情入れない程度に地団駄を踏んだ。

ちなみに、僕はOCJP 8 Goldですけどね。(自慢)

参考サイト

[https://www.ne.jp/asahi/hishidama/home/tech/java/reflection.html#h3_member_class:title]

製造

実装ルール

ルールは少なくしたほうがいい。
はっきり言って、全部守れは、無理がある。
javaにはjavaの、jspにはjspの、cssにはcssのルールがあるってのは、マジで無理。
ちゃんとやれって言う方は簡単だけど、やる方は厳しい。
ルールを作るのなら、それを維持する方法も合わせて考えてほしいもんだぜ。。。
もしくは、人が覚えられるように簡素化して欲しい。

俺が覚えられるルールは7つまでだ。
それでチクチク言われるのは、マジでストレス半端ねぇ
心を無にする術を学びたいわぁ。。。

思ってる不満
  • ネーミング規約がファイルごとに異なるのは、きつい
  • ちゃんと守れって言うのは楽でいいよね
  • 守れてないと俺が不真面目に実装しているように言われるのは腹立たしい
  • お前がやってみろよって感じる

カバレッジ100%

かなりキツイのだが。。。
これを達成するために、頭をかなり使う。。。

バグは取れるんだけど、工数と見合ってない気がするのは、俺だけ??

もしくは、テストしやすいコードを作れていない気がしないでもない。

その他雑記

メンタル

最近、なんか身に入らないんだよね。。。
何をするにしても。

そういう時期と思ったほうが良いのだろうか?

最近、なぜ生まれてきたのだろうと考え始めるようになったのが、かなりヤバいのではないかと思い始めている。

Java18

そういえば、3月リリースだったな。。。
いつもなら、ちゃんとリリース前に調べているのだが、そんな余裕はなかった。。。

調べた内容は、下記のリンク参照

suzaku-tec.hatenadiary.jp

ストロング系

ストロング系の酒をたまに飲むのだが、悪い酔いするってことが最近分かった。
たしかに、手軽に酔えるんだけど、翌日、ものすごい頭が痛い。
体に合わないのだろうか?
いまのところ、軽めのチューハイ、日本酒(ちょびっと)、焼酎なんかを飲めることは分かっている。
ビールもダメじゃないけど、美味いと思ったことがないんだよね。。。
あと、ワインはダメだった。飲めないことはないんだけど、翌日、気持ち悪くなるんだよね。。。
ハイボールは、まぁまぁ飲めるけど、ビールと同じで、美味いと思ったことがない。

もしかして、俺の舌って、おこちゃま?

【Java】Java18 リリース内容調査

公式サイト

https://openjdk.java.net/projects/jdk/18/

リリース内容

  • 400: UTF-8 by Default
  • 408: Simple Web Server
  • 413: Code Snippets in Java API Documentation
  • 416: Reimplement Core Reflection with Method Handles
  • 417: Vector API (Third Incubator)
  • 418: Internet-Address Resolution SPI
  • 419: Foreign Function & Memory API (Second Incubator)
  • 420: Pattern Matching for switch (Second Preview)
  • 421: Deprecate Finalization for Removal

環境構築

過去記事参照

suzaku-tec.hatenadiary.jp

JEP内容調査

400: UTF-8 by Default

JEP 400: UTF-8 by Default

google翻訳

Specify UTF-8 as the default charset of the standard Java APIs. With this change, APIs that depend upon the default charset will behave consistently across all implementations, operating systems, locales, and configurations.

標準のJavaAPIのデフォルトの文字セットとしてUTF-8を指定します。 この変更により、デフォルトの文字セットに依存するAPIは、すべての実装、オペレーティングシステム、ロケール、および構成にわたって一貫して動作します。

内容に対する所感

結構、大きな変更。
ファイル入出力周りが、結構インパクトある気がする。
なので、LTS前には、ファイルのエンコードを指定して出力するように直しておく必要がある。
今まで自分がいた現場は、ファイル入出力はエンコード必須だったから、おそらく、現在動いているシステムの影響は少ない気がするが、個人で開発したりするときや新規で開発するときは、エンコードを気にしたほうがいい。

408: Simple Web Server

JEP 408: Simple Web Server

google翻訳

Provide a command-line tool to start a minimal web server that serves static files only. No CGI or servlet-like functionality is available. This tool will be useful for prototyping, ad-hoc coding, and testing purposes, particularly in educational contexts.

静的ファイルのみを提供する最小限のWebサーバーを起動するためのコマンドラインツールを提供します。 CGIまたはサーブレットのような機能は使用できません。 このツールは、特に教育のコンテキストで、プロトタイピング、アドホックコーディング、およびテストの目的で役立ちます。 

実験・検証

下記のコマンドでサーバー起動可

$ jwebserver -p {ポート番号}

下記のindex.htmlを起動した場所と同じところに置くと、上記コマンドで表示されたURLにアクセスすると、index.htmlの内容が表示できる。

<h1>hello Java18</h1>

自分は、8000番を個人開発しているサイトとバッティングするので、9000番で試した

$ jwebserver -p 9000
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving E:\dev\java\18 and subdirectories on 127.0.0.1 port 9000
URL http://127.0.0.1:9000/

内容に対する所感

起動は、軽快だった。
用途としては、簡易webサーバーとしても使えそう。
もしかすると、テストサーバー的な役割もできそうな気がしないでもない。
軽量サーバーっぽいので、複雑なことはできなさそう。

今までだと、自分は、node.jsで色々やることが多かったけど、Javaも選択肢に入るようにはなったかな?
※たぶん、node.js使う気がするが。。。

413: Code Snippets in Java API Documentation

JEP 413: Code Snippets in Java API Documentation

google翻訳

Introduce an @snippet tag for JavaDoc's Standard Doclet, to simplify the inclusion of example source code in API documentation.

JavaDocの標準ドックレットに@snippetタグを導入して、APIドキュメントにサンプルソースコードを含めるのを簡素化します。 

実験・検証

サンプルそのまま乗せる。
時間がないので、検証はまた今度。。。

/**
 * The following code shows how to use {@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 * }
 * }
 */

内容に対する所感

利用用途は、メソッドのJavadocに書いて、それの使い方のサンプルを書く感じだろうか?
おそらく、wiki的な役割を持たせたいのだろうなと感じている。

416: Reimplement Core Reflection with Method Handles

JEP 416: Reimplement Core Reflection with Method Handles

google翻訳

Reimplement java.lang.reflect.Method, Constructor, and Field on top of java.lang.invoke method handles. Making method handles the underlying mechanism for reflection will reduce the maintenance and development cost of both the java.lang.reflect and java.lang.invoke APIs.

java.lang.invokeメソッドハンドルの上にjava.lang.reflect.Method、Constructor、およびFieldを再実装します。 メソッドにリフレクションの基礎となるメカニズムを処理させると、java.lang.reflectAPIとjava.lang.invokeAPIの両方の保守と開発のコストが削減されます。 

内容に対する所感

リフレクションの内部の実装を変更するだけっぽいな。
処理を置き換えることで、保守コストの削減、パフォーマンスの向上が期待できるって、詳細の内容で言ってました。

417: Vector API (Third Incubator)

google翻訳

Introduce an API to express vector computations that reliably compile at runtime to optimal vector instructions on supported CPU architectures, thus achieving performance superior to equivalent scalar computations.

サポートされているCPUアーキテクチャで実行時に最適なベクトル命令に確実にコンパイルされるベクトル計算を表現するAPIを導入し、同等のスカラー計算よりも優れたパフォーマンスを実現します。 

内容に対する所感

あんまり詳しく理解できてないけど、CPUに最適なAPIで計算されるって理解でOK?
本リリース前に理解しておきたいが、じっくり調べる時間がない

418: Internet-Address Resolution SPI

JEP 418: Internet-Address Resolution SPI

google翻訳

Define a service-provider interface (SPI) for host name and address resolution, so that java.net.InetAddress can make use of resolvers other than the platform's built-in resolver.

java.net.InetAddressがプラットフォームの組み込みリゾルバー以外のリゾルバーを利用できるように、ホスト名とアドレスの解決のためにサービスプロバイダーインターフェイス(SPI)を定義します。 

内容に対する所感

ネットワーク周りの話はよく分からないんだよね。。。
ネットワークスペシャリストとろうと思っている身分だけど。

419: Foreign Function & Memory API (Second Incubator)

JEP 419: Foreign Function & Memory API (Second Incubator)

DeepL翻訳

google翻訳の精度にイラッとしてきたので変更

Introduce an API by which Java programs can interoperate with code and data outside of the Java runtime. By efficiently invoking foreign functions (i.e., code outside the JVM), and by safely accessing foreign memory (i.e., memory not managed by the JVM), the API enables Java programs to call native libraries and process native data without the brittleness and danger of JNI.

Javaプログラムが、Javaランタイム外のコードやデータと相互運用するためのAPIを導入する。外部関数(JVM外のコード)を効率的に呼び出したり、外部メモリ(JVMが管理していないメモリ)に安全にアクセスすることで、JavaプログラムはJNIの脆さや危険性なしに、ネイティブライブラリの呼び出しやネイティブデータの処理を可能にするAPIを提供する。

内容に対する所感

JNIを使った外部APIの呼び出しを楽にするのかな?
前に、C++で作られたライブラリ呼び出す処理を仕事で書いたことがあるのだが、結構煩雑だったのと、処理のエラーハンドリングや時間がかかってた印象。
時間があれば、もう少し調べたい。

420: Pattern Matching for switch (Second Preview)

JEP 420: Pattern Matching for switch (Second Preview)

DeepL翻訳

Enhance the Java programming language with pattern matching for switch expressions and statements, along with extensions to the language of patterns. Extending pattern matching to switch allows an expression to be tested against a number of patterns, each with a specific action, so that complex data-oriented queries can be expressed concisely and safely. This is a preview language feature in JDK 18.

Java プログラミング言語において、switch 式およびステートメントのパターンマッチングと、パターン言語の拡張を行います。switchにパターンマッチングを拡張することで、式を複数のパターンに対してテストすることができ、それぞれが特定のアクションを持つため、複雑なデータ指向のクエリを簡潔かつ安全に表現することができる。これは、JDK 18のプレビュー言語機能です。

内容に対する所感

switchアンチ民なんだけど、追ったほうが良い???

421: Deprecate Finalization for Removal

JEP 421: Deprecate Finalization for Removal

DeepL翻訳

Deprecate finalization for removal in a future release. Finalization remains enabled by default for now, but can be disabled to facilitate early testing. In a future release it will be disabled by default, and in a later release it will be removed. Maintainers of libraries and applications that rely upon finalization should consider migrating to other resource management techniques such as the try-with-resources statement and cleaners.

将来のリリースで削除するため、ファイナライズを非推奨としました。Finalizationは今のところデフォルトで有効のままですが、早期テストを容易にするために無効にすることができます。将来のリリースでは、デフォルトで無効化され、後のリリースでは削除される予定です。Finalization に依存しているライブラリやアプリケーションの管理者は、try-with-resources 文やクリーナーなど、他のリソース管理技術への移行を検討する必要があります。

内容に対する所感

finalizeが後々削除されるそうな。
finalize使っても、メモリ回収タイミングは操作できないから、使ったことないので、削除されても問題ない。

参考サイト

Java 18新機能まとめ - Qiita

Java 18正式リリース。デフォルトのCharsetが「UTF-8」に、シンプルWebサーバ搭載など新機能 - Publickey

オラクル、Java 18を発表|日本オラクル株式会社のプレスリリース

Oracle、UTF-8が標準になった「Java 18」を発表 ~簡易Webサーバーも装備(Impress Watch) - Yahoo!ニュース

Oracle、UTF-8が標準になった「Java 18」を発表 ~簡易Webサーバーも装備 - 窓の杜

Java 18リリース、デフォルトの文字コードがUTF-8に | TECH+

オラクルが「Java 18」提供開始、9つのJDK Enhancement Proposalsで改良:EnterpriseZine(エンタープライズジン)

雑記

仕事忙しすぎて、アップデートがあるのをすっかり忘れてしまった。。。

いくつか記事を見たけど、デフォルトエンコードUTF-8になるのが、大きめに取り上げられている印象。
もっと詳しく調べたいけど、直近でOCJP v11 Gold移行の試験、ネットワークスペシャリストの試験、現場の稼働高がキツイ。。。

DeepL翻訳、google翻訳と比べると、かなり精度がいいな。

【Java】Java18調査 環境構築編

検証環境

Visual Studio Codeのバージョン情報そのまま貼り付け。

バージョン: 1.65.2 (system setup)
コミット: c722ca6c7eed3d7987c0d5c3df5c45f6b15e77d1
 日付: 2022-03-10T14:33:55.248Z
Electron: 13.5.2
Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043

環境構築

sdkmanがインストール済みで話を進める。
sdkmanのインストールやら使い方は、過去の記事参照

suzaku-tec.hatenadiary.jp

Java18のインストール

インストールするバージョン情報を確認する。

$ sdk list java

結果

================================================================================
Available Java Versions for Cygwin
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 18           | amzn    |            | 18-amzn             
               |     | 17.0.2.8.1   | amzn    |            | 17.0.2.8.1-amzn     
               |     | 17.0.0.35.1  | amzn    |            | 17.0.0.35.1-amzn    
               |     | 11.0.14.10.1 | amzn    |            | 11.0.14.10.1-amzn   
               |     | 11.0.14.9.1  | amzn    |            | 11.0.14.9.1-amzn    
               |     | 11.0.12.7.1  | amzn    |            | 11.0.12.7.1-amzn    
               |     | 8.322.06.2   | amzn    |            | 8.322.06.2-amzn     
               |     | 8.322.06.1   | amzn    |            | 8.322.06.1-amzn     
 Dragonwell    |     | 11.0.12.8    | albba   |            | 11.0.12.8-albba     
               |     | 8.8.9        | albba   |            | 8.8.9-albba         
 Gluon         |     | 22.0.0.3.r17 | gln     |            | 22.0.0.3.r17-gln    
               |     | 22.0.0.3.r11 | gln     |            | 22.0.0.3.r11-gln    
 GraalVM       |     | 22.0.0.2.r17 | grl     |            | 22.0.0.2.r17-grl    
               |     | 22.0.0.2.r11 | grl     |            | 22.0.0.2.r11-grl    
               |     | 21.3.1.r17   | grl     |            | 21.3.1.r17-grl      
               |     | 21.3.1.r11   | grl     |            | 21.3.1.r11-grl      
               |     | 21.3.1.r8    | grl     |            | 21.3.1.r8-grl       
               |     | 21.2.0.r16   | grl     |            | 21.2.0.r16-grl      
               |     | 21.2.0.r11   | grl     |            | 21.2.0.r11-grl      
               |     | 21.2.0.r8    | grl     |            | 21.2.0.r8-grl       
               |     | 21.1.0.r8    | grl     |            | 21.1.0.r8-grl       
               |     | 20.3.5.r11   | grl     |            | 20.3.5.r11-grl      
               |     | 20.3.3.r8    | grl     |            | 20.3.3.r8-grl       
               |     | 20.3.2.r8    | grl     |            | 20.3.2.r8-grl       
               |     | 19.3.6.r11   | grl     |            | 19.3.6.r11-grl      
               |     | 19.3.6.r8    | grl     |            | 19.3.6.r8-grl       
               |     | 19.1.0       | grl     |            | 19.1.0-grl          
 Java.net      |     | 19.ea.14     | open    |            | 19.ea.14-open       
               |     | 19.ea.4.lm   | open    |            | 19.ea.4.lm-open     
               |     | 19.ea.1.pma  | open    |            | 19.ea.1.pma-open    
               |     | 18           | open    |            | 18-open             
               | >>> | 17.ea.3.pma  | open    | local only | 17.ea.3.pma-open    
               |     | 17.0.2       | open    |            | 17.0.2-open         
               |     | 16.ea.36     | open    | local only | 16.ea.36-open       
               |     | 15.ea.36     | open    | local only | 15.ea.36-open       
               |     | 15.0.1       | open    | local only | 15.0.1-open         
               |     | 14.ea.36     | open    | local only | 14.ea.36-open       
               |     | 14.ea.24     | open    | local only | 14.ea.24-open       
               |     | 11.0.12      | open    |            | 11.0.12-open        
               |     | 11.0.11      | open    |            | 11.0.11-open        
               |     | 11.0.10      | open    |            | 11.0.10-open        
               |     | 11.0.2       | open    |            | 11.0.2-open         
               |     | 8.0.302      | open    |            | 8.0.302-open        
               |     | 8.0.292      | open    |            | 8.0.292-open        
               |     | 8.0.282      | open    |            | 8.0.282-open        
               |     | 8.0.265      | open    |            | 8.0.265-open        
 Liberica      |     | 18.fx        | librca  |            | 18.fx-librca        
               |     | 18           | librca  |            | 18-librca           
               |     | 17.0.2.fx    | librca  |            | 17.0.2.fx-librca    
               |     | 17.0.2       | librca  |            | 17.0.2-librca       
               |     | 11.0.14.fx   | librca  |            | 11.0.14.fx-librca   
               |     | 11.0.14      | librca  |            | 11.0.14-librca      
               |     | 8.0.322.fx   | librca  |            | 8.0.322.fx-librca   
               |     | 8.0.322      | librca  |            | 8.0.322-librca      
 Liberica NIK  |     | 22.0.0.2.r17 | nik     |            | 22.0.0.2.r17-nik    
               |     | 22.0.0.2.r11 | nik     |            | 22.0.0.2.r11-nik    
               |     | 21.3.1.r17   | nik     |            | 21.3.1.r17-nik      
               |     | 21.3.1.r11   | nik     |            | 21.3.1.r11-nik      
               |     | 21.3.0.r17   | nik     |            | 21.3.0.r17-nik      
               |     | 21.3.0.r11   | nik     |            | 21.3.0.r11-nik      
               |     | 21.2         | nik     |            | 21.2-nik            
               |     | 21.1         | nik     |            | 21.1-nik            
 Mandrel       |     | 22.0.0.2.r17 | mandrel |            | 22.0.0.2.r17-mandrel
               |     | 22.0.0.2.r11 | mandrel |            | 22.0.0.2.r11-mandrel
               |     | 21.3.1.1.r17 | mandrel |            | 21.3.1.1.r17-mandrel
               |     | 21.3.1.1.r11 | mandrel |            | 21.3.1.1.r11-mandrel
               |     | 21.3.1.0.r17 | mandrel |            | 21.3.1.0.r17-mandrel
               |     | 21.3.1.0.r11 | mandrel |            | 21.3.1.0.r11-mandrel
               |     | 21.3.0.0     | mandrel |            | 21.3.0.0-mandrel    
               |     | 21.2.0.2     | mandrel |            | 21.2.0.2-mandrel    
               |     | 20.3.3.0     | mandrel |            | 20.3.3.0-mandrel    
 Microsoft     |     | 17.0.2       | ms      |            | 17.0.2-ms           
               |     | 11.0.14      | ms      |            | 11.0.14-ms          
 Oracle        |     | 18           | oracle  |            | 18-oracle           
               |     | 17.0.2       | oracle  |            | 17.0.2-oracle       
 SapMachine    |     | 18           | sapmchn |            | 18-sapmchn          
               |     | 17.0.2       | sapmchn |            | 17.0.2-sapmchn      
               |     | 11.0.14      | sapmchn |            | 11.0.14-sapmchn     
               |     | 11.0.14.1    | sapmchn |            | 11.0.14.1-sapmchn   
 Semeru        |     | 17.0.2       | sem     |            | 17.0.2-sem          
               |     | 11.0.14      | sem     |            | 11.0.14-sem         
               |     | 11.0.14.1    | sem     |            | 11.0.14.1-sem       
               |     | 8.0.322      | sem     |            | 8.0.322-sem         
 Temurin       |     | 17.0.2       | tem     |            | 17.0.2-tem          
               |     | 11.0.14      | tem     |            | 11.0.14-tem         
               |     | 8.0.322      | tem     |            | 8.0.322-tem         
 Trava         |     | 11.0.9       | trava   |            | 11.0.9-trava        
 Zulu          |     | 18           | zulu    |            | 18-zulu             
               |     | 18.fx        | zulu    |            | 18.fx-zulu          
               |     | 17.0.2       | zulu    |            | 17.0.2-zulu         
               |     | 17.0.2.fx    | zulu    |            | 17.0.2.fx-zulu      
               |     | 11.0.14      | zulu    |            | 11.0.14-zulu        
               |     | 11.0.14.fx   | zulu    |            | 11.0.14.fx-zulu     
               |     | 8.0.322      | zulu    |            | 8.0.322-zulu        
               |     | 8.0.322.fx   | zulu    |            | 8.0.322.fx-zulu     
               |     | 7.0.332      | zulu    |            | 7.0.332-zulu        
               |     | 6.0.119      | zulu    |            | 6.0.119-zulu        
================================================================================

Java18がほしいので、下記コマンドでインストール

$ sdk install java 18-open

インストールが終わったら、バージョン確認

$ java -version
openjdk version "18" 2022-03-22
OpenJDK Runtime Environment (build 18+36-2087)
OpenJDK 64-Bit Server VM (build 18+36-2087, mixed mode, sharing)

$ javac -version
javac 18

環境構築完了!!!!!!!!!!

雑記

sdkmanのおかげで、バージョンアップがだいぶ楽になったな。。。
人類の叡智サイコー

2022/03/07週 気づきと振り返り 無気力感がやべぇ。。。

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

開発環境

ネットワークと分断されてるVM環境に接続しているんだが、クッソ面倒くさい。
情報の連携が難しいのと、ネット検索できないのが面倒。
デュアルディスプレイ前提の開発環境だなと思う。

テスト

テスト仕様書作ってるんだが、テストデータ生成が面倒くさい。。。
かんたんにテストデータ作る方法ないだろうか?

新人教育

特に教育ってことはしてないけど、やってることを見守ってて気づいたこと

  • 矩形選択という発想がない
    • 毎回同じ箇所をコピペしてたり、削除してたりしてる。。。
  • 1メソッドに大量に実装する
  • Javaは辛うじて分かるけど、それ以外のことができない
    • web開発の初期開発は厳しい。覚えることが多すぎて、ついてこれてない感じ
    • なるべくバッチの開発をさせたほうがいい。
    • 覚えることが多すぎるのは、脳がパンクする&無力感を覚える→離職の可能性大

個人開発

typescript

「入力ファイルを上書きすることになるため、ファイル 'XXX.js' を書き込めません。」の対応方法

typescriptのコンパイルオプションで、出力先を指定できるのだが、それを指定してないとエラー判定される。
自分のところは、webpackにて出力していたので、挙動的には問題ないのだが、エラーとして判定されるのが癪なので、以下の対応をする。

{
  "compilerOptions": {
    "outDir": "dist"
  }
}

outDirさえあれば、とりあえず回避可能。

参考サイト

Nuxt2 + TypeScriptの環境構築 - 備忘録

Webpack 入門 その3:Babel による ECMAScript のトランスパイル・TypeScript のトランスパイル - Neo's World

その他雑記

Vtuber

最近、Vtuber見出したのだが、普通に面白い。
芸人見るより面白い。
最近の芸人のコント、つまらなすぎるのだが、俺の感性がおかしいのか?

神の試練

最近あったことなんだが、リモート会議中に神の試練(便意)が与えられたのだが、トイレ行っても良かったのだろうか?
立ち位置上、急に話が振られることがあるので、離席できなかったのだが。。。
誰も見てないけど、なんとか威厳は保つことができた。

神の試練、突発的に発生するから、マジで神の試練だわ
クリアできなかったときの罰が重すぎるんだよな。

最近、ミネラルウォーラーを飲むようになったのだが、ものすごい便の出がいい。
食べ物に気をつけていれば、比較的快適に過ごせる。
今までミネラルウォーラーを馬鹿にしてたけど、見直したわ。
コーラとか飲みたくなるけど、ミネラルウォーラー飲んで誤魔化してる。

土日

すごい無気力になるんだけど、ヤバい?
もう、ゲーム以外、何もしたくなくなる。

2022/02/25週 気づきと振り返り 採番のみの変数名に怒り新党

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

Java

クラス名が採番しただけのものはやめろぉぉお!

すごい見ずらいんじゃ!ボゲェェェェェェェェェェ!!

間違いたくないのに、ものすごい間違える。
ちゃんと名称をつけるべきだと思うわ。

番号で管理したがるよな、日本人って。
ものすごい見間違えるから辞めたほうがいいと思う。
俺がよく身間違えるのは、7と1、3と8。
単体でなら間違えないんだけど、上が数桁入り組むとよく間違える。

名称をつけてくれないと、ダメだと思うんだよね。
変数名を123みたいにつけないのと一緒。

SVN

部分更新が最悪

svnってさ、フォルダ単位で部分更新できるのがダメだと思った。
別階層のやつを合わせて修正したのだが、人によって、たまに部分更新しているからビルドエラーが出て悩むことがある。

最初っから全体更新かけるしか方法がないようにしておけば、こんな問題は起こさずに済む。
運用回避可能だけど、落とし穴にハマる操作が可能になっているのは、個人的には「それってどうなの?」って思う。

2022/02/07週 気づきと振り返り 脳みそ破壊されそう

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

自動化

設計書のメンテ

設計書からコード生成すると、実装が間違っている場合にメンテが面倒になってくる。
もう、面倒クセェから、直接実装変えたいんだが。。。
設計書修正→自動生成→コードメンテの流れになるから、普通に作業するより1工程多いんだよ!
それに、コードメンテが普通に実装直すのと変わらないのだが、自動生成にメリットあるのか?
自動生成のメリット、設計書と実装がほぼ同じになるくらいしかメリットがない。
自動生成するなら、レビューしないとかなら分かるけど、普通の実装と同じ工程をやるから、あんまり意味ないんだよね。。。

自動生成のメリット皆無なはずなんだけど、なんでそんなに希望を見いだせるのだろうか?

変更に対応しにくくなる

自動生成のための情報を細かく指定しなければ行けないせいで、いろんなところに影響が出てくる。
特にライブラリ作ってたりする場合だと、ものすごいインパクトがでかくなる。

遊びがないせいで、変更対応の工数が結構多いような気がする。

管理と開発業務を同時にやる。

結論:無理

管理業務と開発業務を一緒にやるようなタスクが切られて、一緒にやっていたのだが、どんな優秀な人間でも無理だと思う。。。

開発しながらだと、管理面の問題を忘れてしまう。。。
チーム全体に影響あるのは、結構な工数をかけると感じた。
逆に管理面に力を入れると、開発のタスクが遅れるという。。。

心労が耐えないから、任せるならどちらかの業務に集中させた方がいいと感じた。

Java

初学者とってのJava

たぶん、言語的には難しくないと思う。
ただ、実際に開発する場合、必要とされる知識量が膨大だと感じた。
今、新人の面倒を見ているのだが、予想外のことをしてきたり、やたらと悩んでたりして、自分の時間を確保するのがキツイ。。。
Javaとなると、サーバーサイドの開発が多いと思うのだが、それが環境関連の知識と直結しているせいで、知識が深くないと、かなり厳しい。
サーバーサイドって、受けたデータを元にDB操作するだけってのが多いが、それを難しく感じる様子。Java学習しましたって言っても、SQLは知らない、サーバー知識なし、TCP/UDP・HTML知識なしだと結構キツイ。
取っ掛かりの知識がないから、ググるのも難しいのだろうと感じている。
Javaで完結したものを作るなら良いんだけど、それ以外の要素が混じってくると、途端に難しくなる。
Javaで完結といっても、ユニットテストの考え方とかしらないと、思ってたのと違うことしてたりするので、厳しいなぁ。。。と感じる。

外部の研修って言っても、ほぼほぼ役に立たないってことが多いなぁ。。。

何でも準備万全にしてから挑もうとする人がいるけど、トライ・アンド・エラーじゃないと、プログラミング言語の学習は厳しいと思うんだよね。。。
研修だと、問題解決力が養われないから、実際に開発するときに挫折する人が多いのだと思う。
スクール出身の人が、即戦力になれないのは、そこだろうなぁ。。。

なので、やるとしたらバッチからやらせるのがいいと思っている。
ただ、SQLとかファイル操作とか含んでくると複雑なので、SQLのみに絞るとかの方が良い気がする。

Javascript

eclipseJavascriptの開発しているんだけど、他人のソース見ると、やたらとタイポが多い。。。
タイポ多いのは、たぶん、入力補完がないせいだろうな。。。
開発環境起因だとは思うが、昔の人はどうやって開発していたのだろうか?

その他雑記

プログラマーの立ち位置

正直、ソフトウェア開発におけるプログラマーの立ち位置って、低いと思うんだよね。
実際に開発携わっていると、設計重視の傾向が強いが、いざ開発するとなると、プログラマーの重要性が目立ってくる。
ここで言っているプログラマーは、言われたことをやるやつではなく、環境を理解して問題を自己解決できるやつ。
それができないのは、プログラマー未満だと思うんだよね。
それができてない設計者が、日本には多い気がする。

どうにかしてプログラマーの地位を上げたいとは思うけど、プログラミングできる=プログラマーって認識が強すぎて、問題解決力ってのを度外視してるから、地位向上が厳しいのだと思う。

あと、管理者って、偉そうな割に、何も分かってないケースが多分にある。
自分で調べろよって思うことがないわけでもないが、自己研鑽する努力はして欲しいと思う。
そういう姿みてるから、配下メンバーも育たないのでは?って感じている今日このごろ

ヘルプ

誰かの遅れのキャッチアップをしているのだが、正直キツイ。。。
何が正しいのか、実装者に聞いても答えがないのが辛たん。。。
もっと緩やかな現場で仕事したいお。。。
プレッシャーとストレスで、脳みそ破壊されそう

npm-check-updatesでGithubのDependabot alertsに対応する

きっかけ

Githubにてセキュリティアラート(dependency alert)が来てたので、「対応してみっか!」と思い、まずは現時点のバージョンを知りたいのだが、どうしたらいいのか分からなかったので調べた

環境

バージョン: 1.63.2 (system setup)
コミット: 899d46d82c4c95423fb7e10e68eba52050e30ba3
 日付: 2021-12-15T09:40:02.816Z
Electron: 13.5.2
Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043

準備

npm-check-updates っていうのを使うと、現時点のバージョンと、最新バージョンを表示してくれるらしいから、下記のコマンドでインストール。
プロジェクトに欲しいというよりは、環境的に欲しい感じだったので、グローバルにインストール。

$ npm install -g npm-check-updates

調査

対象のプロジェクト直下に移動して、$ ncu を叩くだけ。
そうすると、以下のような結果が帰る。

$ ncu
Checking E:\dev\java\GaleWings\src\main\javascript\package.json
[====================] 33/33 100%

 @popperjs/core             ^2.9.3  →   ^2.11.2     
 @types/bootstrap           ^5.1.2  →    ^5.1.9     
 axios                     ^0.21.1  →   ^0.25.0     
 bootstrap                  ^5.1.0  →    ^5.1.3     
 @types/jest               ^27.0.2  →   ^27.4.0     
 @types/react             ^17.0.20  →  ^17.0.39     
 @types/react-dom          ^17.0.9  →  ^17.0.11     
 @webpack-cli/generators    ^2.3.0  →    ^2.4.2
 css-loader                 ^6.2.0  →    ^6.6.0
 html-webpack-plugin        ^5.3.2  →    ^5.5.0
 jest                      ^27.2.5  →   ^27.5.0
 less                       ^4.1.1  →    ^4.1.2
 less-loader               ^10.0.1  →   ^10.2.0
 prettier                   ^2.3.2  →    ^2.5.1
 style-loader               ^3.2.1  →    ^3.3.1
 ts-jest                   ^27.0.5  →   ^27.1.3
 ts-loader                  ^9.2.5  →    ^9.2.6
 ts-node                   ^10.2.1  →   ^10.4.0
 typescript                 ^4.3.5  →    ^4.5.5
 webpack                   ^5.51.1  →   ^5.68.0
 webpack-cli                ^4.8.0  →    ^4.9.2

Run ncu -u to upgrade package.json

利用しているモジュールをアップデート

前述のncuコマンドの最後に出力されていた通り$ ncu -uを実行する。

$ ncu -u
Upgrading E:\dev\java\GaleWings\src\main\javascript\package.json
[====================] 33/33 100%

 @popperjs/core             ^2.9.3  →   ^2.11.2     
 @types/bootstrap           ^5.1.2  →    ^5.1.9
 axios                     ^0.21.1  →   ^0.25.0
 bootstrap                  ^5.1.0  →    ^5.1.3
 @types/jest               ^27.0.2  →   ^27.4.0
 @types/react             ^17.0.20  →  ^17.0.39
 @types/react-dom          ^17.0.9  →  ^17.0.11
 @webpack-cli/generators    ^2.3.0  →    ^2.4.2
 css-loader                 ^6.2.0  →    ^6.6.0
 html-webpack-plugin        ^5.3.2  →    ^5.5.0
 jest                      ^27.2.5  →   ^27.5.0
 less                       ^4.1.1  →    ^4.1.2
 less-loader               ^10.0.1  →   ^10.2.0
 prettier                   ^2.3.2  →    ^2.5.1
 style-loader               ^3.2.1  →    ^3.3.1
 ts-jest                   ^27.0.5  →   ^27.1.3
 ts-loader                  ^9.2.5  →    ^9.2.6
 ts-node                   ^10.2.1  →   ^10.4.0
 typescript                 ^4.3.5  →    ^4.5.5
 webpack                   ^5.51.1  →   ^5.68.0
 webpack-cli                ^4.8.0  →    ^4.9.2

Run npm install to install new versions.

確認

最後は、ちゃんとnpm installして、挙動確認しましょう。
※俺は面倒くさいから、ビルド通ればOKにするけど、皆はガンバってね!

参考サイト

npm のパッケージを最新版に更新する – ラボラジアン