JAVA関連のことを調べてみた2022年11月26日

JAVA関連のことを調べてみた2022年11月26日

WindowsのIntelliJでfile.encoding=UTF-8すると日本語パス上のプロジェクトをGradleでテストできない問題

# あらまし

「日本語環境のWindowsでIntelliJのJVM引数で `-Dfile.encoding=UTF-8` を設定すると、日本語ファイルパス上のプロジェクトをGradleから実行やテストができない」という問題に遭遇した。

色々調査した結果、根本的な問題はプロジェクト側ではなくJava 17以前のJVM自体に存在し、2022年11月現在、「 `-Dfile.encoding=UTF-8` するのをやめる」「日本語ファイルパスに置かない」「ビルドスクリプトで頑張る」「Gradleが対応するのを待つ」といった妥協案しか存在しないという結論となった。

# 環境

– Windows 10 Pro 21H2 日本語環境
– IntelliJ IDEA 2021.3.3 (Community Edition)
– Gradle 6.5
– Java 主に11
– Kotlin 1.6.0

# 背景

## IntelliJ IDEAの文字化け対策

### 普通に日本語環境で?とかを出すと文字化けする

IntelliJでは、普通に標準出力にユニコード文字を流すと文字化け

元記事を表示

Selenium3とSelenium4どちらでも動くよう作ったJavaクラスをひとつのGradleタスクでテストする方法

## 解決すべき問題

Webブラウザに表示されるHTMLベースのUIを自動化テストするコードをわたしは[Selenium](https://www.selenium.dev/documentation/overview/)をベースにたくさん作ってきました。ずっとSelenium3を使ってきたが、2021年10月にSelenium4が正式リリースされた。WebUI自動化テストを作る仕事を今後も続けるつもりだが、Selenium3と4に共通する基本的な使い方をすることが大半だろう。だから新しく作る自動化テストがSelenium3と4どちらでも動くようにしたいと考えた。いざ着手したらけっこう面倒だった。技術的問題と解決方法をここにメモします。

公式ドキュメントにSelenium3とSelenium4の違いについて説明がある。

https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/

APIが非互換的に変更された一つの例として`WebDriverWait`クラスのコンス

元記事を表示

不変(immutable)コレクションを使おう

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633992/c8f26a07-ddec-6483-f8be-2b30ac93a08e.png)

エスプリフォートではただ言語を学ぶだけでなく、積極的に新しい事を取り入れ、保守性、可読性なども考慮したプログラミングを心がけています。
これら磨きあげた技術力が、お客様に高いクオリティでシステムを提供する一助になっています。

## はじめに
JAVAでコーディングをする上で、リスト(List)や連想配列(Map)等のコレクションは切り離せないものになっています。
このコレクションの一つに「**不変(immutable)コレクション**」が追加されました。
こちらは、Java8以降からサポートされています。

この「**不変(immutable)コレクション**」の特徴をしっかりおさえて効果的な使い方をすれば、コーディング時の間違いや想定外の使われ方などが入り込む余地を少なくでき、エンジニアとしての技術力が一段高くなることも間違いなし!
ということ

元記事を表示

【gradle + Spring Boot】サンプルAPI作成&Cloud Native Buildpacksでコンテナ起動

## 目的
この記事は
– gradleとspring bootの機能を使ったらほぼコーディングなしでAPIのコンテナ起動までいけそう。やってみたい。
– 勉強用にREST APIの型が欲しい。この世で一番楽ちんにREST APIのサンプル作ってコンテナにのっけてローカルで動かし、開発の流れを復習したい。

という目的で筆者が作成した手順をまとめたものです。「業務でAPI作ってって言われたけど記事をいくつか読んでもわからん! とりあえず動かしたい!」「復習したいけど色々混乱してて手が動かない!」という方向けです。

## 前提条件

– オンライン接続可の環境
– git bash、Windows Terminalなどのコマンドラインツール(筆者はWindows Terminalからgit bashを使用)
– VS code、eclipseなどのIDE(筆者はVS codeを使用)
– gradle 7.1
– Docker Desktop

それぞれ初めて使う際にはダウンロード、gradleはそれに加えてパス設定などが必要です。
「○○ インストール」「○○ 導入」などで検索

元記事を表示

Twitter 画像付き自動投稿つくってみた【AWS Lambda】

## あらまし
素数の日(=yy/mm/dd のdd 部が素数)[^1]にその素数にちなんだ画像を自動ツイートする機能をAWS Lambda で作成しました。

[^1]:yyyymmdd の8桁が素数の場合を「素数の日」と呼ぶ流派もあるようです。

元記事を表示

[Java 入門] コンソールアプリのメニュー選択で、Switch文などを使わずに分岐させる

## 概要
Java入門で開発するコンソールアプリでは、メニューを表示し、標準入力で受け取った番号の操作を実行するものがあります。
“`
[メニューを選択してください]
1 表示
2 追加
3 戻る
input > 1
“`
みたいなやつです。
これをSwitch文で分岐させる、というのがよくある設計ですが、抽象メソッドと列挙子を活用して実装してみましょう。

## 実装
まずはメニューを記述する列挙子です。
“`java:MemberMenu.java
public enum MemberMenu {
SHOW(“1”, “表示”) {
@Override
public void execute() {
MemberList.getMember()
.stream()
.sorted(Comparator.comparing(Member::getId))
.forEach(m -> System.out.println(m.show()));
}
},
ADD(“2”, “追加”)

元記事を表示

リストの初期化とnull代入

# 目次
[1.リスト初期化](#1-リスト初期化)
[2.null代入](#2-null代入)
[3.おまけ](#3-おまけ)

## 1. リスト初期化
参照型の変数は「参照」を保持しています。
「参照」とはメモリ上(一時的にデータを保管しておく場所)の、値が格納されている場所のことで、
オブジェクト(変数)の生成はnew演算子を使っておこないます。

ではまずはじめに、さかなリストを作成します。

“`java
// さかなリスト
List fishLsit = new ArrayList();
fishLsit.add(“あじ”);
fishLsit.add(“ししゃも”);
// 出力
System.out.println(“①さかなリスト:” + fishLsit.toString());
“`
出力結果は以下の様になります。
①さかなリスト:[あじ, ししゃも]

つぎに、リストの初期化をおこないます。

“`java
// リスト初期化
fishLsit = new

元記事を表示

JavaでWord文書の既存のテキストから箇条書きや番号付きリストを作成する方法

箇条書きリストと番号付きリストは、一般的に使用されるリスト形式であり、どちらもテキストコンテンツの構造を明確にし、読者が主旨を得やすいようにすることができます。Word文書でこの2つのリスト形式を使用すると、文書の内容をより簡潔かつ効率的に表示することができます。この記事では、無料の[Free Spire.Doc for Java](https://jp.e-iceblue.com/introduce/free-spire-doc-for-java.html)を使って、**Word文書内の既存のテキストから箇条書きリストと番号付きリストをコードで作成する方法**を紹介します。

## 【依存関係の追加】

> **この方法は、無料のFree Spire.Doc for Javaが必要ですので、先にjarファイルをインポートしてください。**

### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

“`XML

元記事を表示

曖昧な単語を使って欲しくない

# はじめに
ここ数年保守を担当しており、色々な人の書いたコードを目にします。
最近以下のようなコードを目にしました。

“`java
public void sample() {
// 何かしら処理
if (checkCommon(dto)) {
// 何かしら処理
if (checkDate(date)) {
// 何かしら処理
}
}
}
“`

(前後の処理をぼかしているのもありますが)ifの中で何をチェックしているのか、`check`の意味が広く曖昧であることによって理解できませんでした。
これを例に、なぜ曖昧な単語を使うことがよくないのか、どのように修正すればよいのか、個人的な意見を書きます。

# どのようにチェックしているのかわからない
細かい理由はいくつかありますが、個人的にはこれが大きすぎると感じています。
前述のとおり`check`の意味が広すぎて曖昧であることによって、関数の意味も曖昧になってしまいます。故にこの章のタイトルの通り**どのようにチェックしているのか

元記事を表示

いくつかの言語での全角スペースの挙動

## 最初に

言語によって、全角スペースが混入したときの挙動が違います。

各言語によって、どのような違いがあるのだろうかと思い、簡単に調べてみました。

### Python・Javaは、検知してエラー

全角スペースが混じってるだけで、それを検知しエラーとして教えてくれました。

– Python(3.8.2)は、`SyntaxError: invalid character in identifier`と表示。
– Java(openjdk 15)は、`error: illegal character: ‘\u3000’`と表示。

Javaは文字コードまで教えてくれるので、親切ですね。

### Rubyは、変数名に扱えてしまう

Rubyでは、日本語も変数名に使うことができ、全角スペースも変数名に使えてしまいます。

“`fullwidth_space.ruby
  = “Hello, world!”
p   # “Hello, world!”
“`

上記のコードは、全角スペースに文字列を代入して出力してます。

そういうわけで、もし全角スペースが混じってもそれを検知

元記事を表示

Javaで何か作ってみる(2022/11/22 Day33)

## 今日やった事
– Javaの動画教材の演習問題である、ケーキ屋プログラムの作成を行った。
→コミットした内容は[こちら](https://github.com/takamatsuryota3/Java/commit/4e891f4fedc4fbed3bb844dd47bb3fff3ff84d3e)
## 参考にしたもの
– [【超絶丁寧解説】Javaプログラミングをゼロから学ぶ!絶対挫折させない「基礎入門」講座【講師評価4.3】](https://www.udemy.com/course/uz-java-kiso/)
→今回取り組んだのは、この動画教材の中の、**J1-EX1_総合演習(アルゴリズム)** の**総合演習(ケーキ屋プログラムの作成)** になる。
## 所感
– 例外処理も含めて、ケーキ屋プログラムを完成させる事が出来た。
## 明日の予定
– 動画教材の続きから進めていく。

元記事を表示

Javaで何か作ってみる(2022/11/21 Day32)

## 今日やった事
– Udemyの動画教材を少し見た。(**J1-16_パッケージ** まで見た。)
## 参考にしたもの
– [【超絶丁寧解説】Javaプログラミングをゼロから学ぶ!絶対挫折させない「基礎入門」講座【講師評価4.3】](https://www.udemy.com/course/uz-java-kiso/)
→ Javaの勉強に使用しているUdemyの動画教材。
## 所感
– 内容理解は完璧。
– springそろそろ着手したいな。
→動画教材探しておくか。
## 明日の予定
– 引き続き、動画教材を進めていく。

元記事を表示

Stack Memory vs Heap Memory in Java

Stack Memory vs Heap Memory in Java. We all know Java doesn’t require programmers’ intervention to manage the memory. Its Garbage Collector frees up the memory when not used. So, why does a Java programmer need to understand memory management then?

Although you don’t have to worry about destroying objects, thanks to Garbag

元記事を表示

Mac×OpenCV×JavaでWEBカメラに映る顔を認識してみた。

はじめに

こんにちは。ちゃむじです。
前回OpenCVの環境構築をしてから、OpenCVが自分の中でちょっとしたマイブームになっていましたので、
今回はWEBカメラに映る顔を認識してみました。
備忘録がてら投稿します。

環境構築は前回の投稿にあるので割愛します。
詳しくは[こちら](https://qiita.com/Chamuji/items/dacf3aa0de17aa6cc883)

完成ファイル

“`
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Mat

元記事を表示

#17 Spring バリデーションの実行順序の変更

# #17 Spring バリデーションの実行順序の変更
前回は自分で設定したエラーメッセージが表示されるよう設定しました。
しかし、それだけでは不要なエラーメッセージも同時に表示されてしまうので、今回はエラーメッセージの表示順を設定します。

# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。

# 前回まで
前回の記事は以下になります。

https://qiita.com/Jackoguro/items/ddd68a48b1b99206b68c

# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46

2. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/f55dc9b5-e7b

元記事を表示

Spring boot + Ajax 簡易掲示板作成 (削除機能)

# 最初に
今回の記事は前回投稿した[Spring boot + Ajax 簡易掲示板作成 (編集機能)](https://qiita.com/Sesoniso/items/bd40bf9b55790f3f917a)に削除機能を追加するための記事となります。
主のプロジェクト、環境構築など記事に記載していますので先にそちらをご覧ください。
[Spring boot + Ajax 簡易掲示板作成 (投稿機能)](https://qiita.com/Sesoniso/items/a3c2b2c32bff09bfbbd5)

・本記事の完成ページ

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645309/d9bf3783-0951-4462-8157-1ae5e6bcb62d.png)

# 1. サンプルコード
## 1.1 HTMLファイル
“`html:/src/main/resources/templates/top.html

Java: Ant で war ファイルを作成

こちらのページを参考にしました。
[Antの動作確認](http://msugai.fc2web.com/java/servlet/build_ant02.html)

## ソースコード

ツリー

“`text
$ tree
.
├── helloworld.xml
└── src
└── HelloWorld.java
“`

“`java:src/HelloWorld.java
import java.util.Date;
import java.text.SimpleDateFormat;

class HelloWorld {
public static void main(String str[]) {
System.out.println(“Hello, World”);
System.out.println(“これはテストです。”);
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SZ”);
Sys

元記事を表示

Leetcode 279. Perfect Squares

# 279. Perfect Squares

https://leetcode.com/problems/perfect-squares/

## アプローチ 1
### DP

“`java
package com.leetcode.midium;

import java.util.Arrays;

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

}

public static int numSquares(int n) {
int[] dp = new int[n + 1];
Arrays.fill(dp, Integer.MAX_VALUE);
dp[0] = 0;
for (int i = 1; i <= n; i++) { for (int j = 1; j * j <= i; j++) { dp[i] = Math.min(

元記事を表示

#16 Spring バリデーションのエラーメッセージの変更

# #16 Spring バリデーションのエラーメッセージの変更
今回はバリデーションにより発生するエラーメッセージを自分で作成したエラーメッセージに変更していきます。

# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため、所々説明は省略します。

# 前回まで
Formクラスにバリデーション用のアノテーションを付与し、バリデーションによる入力チェックを行いました。

https://qiita.com/Jackoguro/items/f5a958dd03cf4f23562f

# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46

2. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/a3670e62-9

元記事を表示

Javaで暗号化

# はじめに
最近なら AES256/GCM 使っておけば大丈夫な気がするので、その使い方。
バイト列を入力して暗号化されたバイト列を取得、復号してバイト列を得るまで。
JavaでCipherを使う場合、GCMのtagは暗号文に含まれる模様。このため、.NETなど、別のライブラリで復号する時はtagを分離しないといけないっぽい。

# 暗号鍵
AES256にするので、鍵長は当然256bitにする必要がある。
パスワードを入力して復号するなら、パスワードのSHA256を鍵に使えば良いかも。自動生成することもできる。

文字列からSHA256を取得して、鍵にするならこんな感じ。(例外処理は適当なので、使うときはちゃんと作る)

“`Java
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

.
.
.

public

元記事を表示

OTHERカテゴリの最新記事