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

JAVA関連のことを調べてみた2022年04月01日
目次

Spring4Shell:JavaのSpringフレームワークのゼロデイRCE脆弱性について解説します

本記事は2022年3月31日(米国時間)/2022年4月1日(日本時間)に公開した英語ブログ[Spring4Shell: The zero-day RCE in the Spring Framework explained](https://snyk.io/blog/spring4shell-zero-day-rce-spring-framework-explained/)を日本語化した内容です。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/687b9c44-fd95-1778-2869-898100ade8b6.png)](https://snyk.io/jp)

2022年3月30日(米国時間)、Spring フレームワークに[リモートコード実行(RCE)可能な重大な脆弱性](https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751)が発見されました。具体

元記事を表示

gradle.ktsでMavenリポジトリにpublish

gradle/kotlinでMavenリポジトリにpublish
===
日記

環境

– Gradle 7.1
– Kotnin 1.6
– Nexus Repository Manager 3.36.0

[サンプル](https://github.com/kyoya-p/samples/blob/master/2021/SNMP4J/Snmp4jUtils_KtJvm/build.gradle.kts)

build.gradle.kts に [Maven Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html)を追加

https://docs.gradle.org/current/userguide/publishing_maven.html

さらに、publish対象モジュールの名前はバージョンを定義

“`build.gradle.kts
plugins {
kotlin(“jvm”) version “1.5.31”
`maven-publish`

元記事を表示

【Java】Collectorインタフェースの使用方法 

# Collectorインタフェース
ストリーム外部のオブジェクトの状態を変更したい時に使用します。また、Collectorはストリームのリダクション操作のためのインターフェースです。リダクション操作とは一連の入力要素を受け取り、結合操作を繰り返し適用することで、単一のサマリー結果を出力します。例えば、一連の数値の合計や、最大値の合計値などを求めることが挙げられます。

# なぜ必要なのか?
副作用がある処理の問題を解決できるのがCollectorインターフェースです。副作用のある処理とは、同じメソッドでもタイミングによって結果が変わってくる処理のことです。例えば、外部のオブジェクトにラムダ式の内部でアクセスする場合、そのオブジェクトは実質的にfinalとして扱われます。そのため、変数が保持している参照を変更していないかはコンパラーはチェックしていますが、参照先のオブジェクトが持つ値を変更しているかどうかはチェックしません。そのため、参照先のオブジェクトが持つ値を変更してもコンパイルエラーにはなりません。このような、副作用のある処理を解決するのがCollectorインターフェースなので

元記事を表示

「マイクロサービスパターン」の復習 4章

## 概要

– Java読書会でせっかく勉強したのにつぎつぎと忘れていくので、印象に残ったところを記録していく

http://www.javareading.com/bof/

## 4章 サーガによるトランザクションの管理

– マイクロサービスでトランザクションをどう扱うかの話
– マイクロサービスアーキテクチャでは、多数のサービスがあり、それぞれが自分用のデータベースをもっている。
– ではデータの整合性はどうやって維持するのか?

### 分散トランザクション

– 従来、分散アーキテクチャでは、分散トランザクションが唯一の選択肢かのごとく言われてきた
– 利点
– 単一データベースとプログラミングモデルが変わらない
– ACIDについても、単一データベースと同様に期待できる
– 欠点
– 可用性が低い
– すべてのサービスが生きてないといけないので
– 同期的
– そもそもそういうプログラミングモデルなので
– サポートがない場合もある
– RDBMS以外が入ると、サポートされてない方

元記事を表示

コンピュータとオセロ対戦50 ~行列計算~

https://qiita.com/tt_and_tk/items/068f2afde6db637e189f

[前回](https://qiita.com/tt_and_tk/items/1f784fbd9d1af6b03415)

# 今回の目標
新しい深層学習ライブラリの作成のため、基本となるMatrixクラスを作成する。
# ここから本編
これまでの方法では、強いオセロを作ることが難しいことが前回の実験で分かりました。
そのためこれからは深層強化学習、DQNと呼ばれるものをやってみようと思います。
しかし私は強化学習の経験がなく、また、今まで使用していた自作ライブラリは実行速度の点で不安があります。
そこで、強化学習について勉強する傍ら、ライブラリの作り直しを行うことにしました。
この記事では、ライブラリ内で使用する基本データ型となるMatrixクラスを作成します。

少し話は変わりますが、[これらの記事](https://qiita.com/tt_and_tk/items/068f2afde6db637e189f#%E3%83%A9%E3%82%A4%E3%83%96%E3%

元記事を表示

SE 1年目で読んだ技術書68冊+α

# 概要
社会人1年目が終わるので、この1年間で読んだ本のうち技術寄りの68冊と、Udemy 10本をざっくり紹介します。

## 説明
オススメ度、難易度を5段階で付けています。

「技術寄りのスキルを地道に付けたいSE1年目」を想定しており、情報系学部生やWeb系エンジニア1年目へのオススメ度とは異なります。また、SEでも「コードは書きたくないです。上流だけやって数年でコンサルに転職したいです」というキャリア観の人へのオススメ度とも異なります。

難易度観はIT業界新卒平均の感覚と上下にズレていることがあります。
参考までに、1年前時点の自分です。
– 情報系修士卒(基礎理論系)
– 応用情報は持ってる
– CやPythonは平凡程度にできる。関数型言語の方が得意
– フロントエンドは初心者
– Japanese Traditional SIer

読んだ本はジャンルごとに時系列で掲載していますが、「この順で読むのがいい」になっていないこともあります。
たまたま難易度が前後していることもありますし、「読み終えた技術書とやり終えたUdemy」のみ紹介しているため、途中で別の学習が挟ま

元記事を表示

Spring4Shellなんてあるんですか?

本記事は2022年3月30日(米国時間)/2022年3月31日(日本時間)に公開した英語ブログ[Is There any Such Thing as Spring4Shell?](https://snyk.io/blog/is-there-such-a-thing-as-spring4shell/)を日本語化した内容です。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/0f4b5668-62d5-e55e-2ce2-5a6cc5a49196.png)](https://snyk.io/jp)

# Spring4Shellなんてあるんですか?

米国時間の3月30日の未明、同僚の[DeveloperSteve](https://twitter.com/DeveloperSteve)がslackチャンネルに「なあ、これ見たことある?」と書きました。それは、大人気のJava の Springフレームワークで『起こりうる』リモートコード実行(

元記事を表示

【JUnit】ローカルでテスト成功するのにGitLabCIでは失敗する時の調べ方

# 結論
1. GitLab CIで実行したテストのレポートを表示する
1. レポートを元に原因突き止めて修正する!

## 前提
GitLabのfeatureブランチへpushすると、テストで失敗していてbuildできない。
ローカルでは全てテスト成功しているのに、、
### 環境
– Mac
– GitLab 14.10.0
– Java 11
– JUnit 5.8.1
– ビルドツール `Gradle`

### テスト失敗時の詳細
– ローカル
– `プロジェクト/build/reports/tests/test/index.html` で詳細が見れる
– リモート(GitLabCI)
–  どこで見るの??

# GitLab上でテストレポートを確認したい
## 1 ) `.gitlab-ci.yml` に追記

“`yaml:.gitlab-ci.yml(一部抜粋)

gradle_test:
stage: test
script:
– gradle test
artifacts:
paths:
– build

元記事を表示

Spring Batchを業務で使ってハマったこと

# はじめに
業務で開発しているオンライン申請系のシステムで、[Spring Batch](https://docs.spring.io/spring-batch/docs/current/reference/html/index.html)を利用しています。
Spring Batchを本格的に使ったのは初めてだったのですが、バッチアプリケーションに必要な機能が豊富に提供されており、かなり便利だと感じました。
しかし、仕組みをちゃんと知らずに使ってハマった点があったので、書いてみます。

### 実行環境
– Java11
– Spring Boot 2.4.3
– Spring Batch 4.3.1
– PostgreSQL 42.2.18
– MyBatis 3.5.5

# 使い方
Spring Batchには、バッチ処理(ジョブ)を起動する方法として、2つの方法がサポートされています。
– [コマンドラインからジョブを実行する](https://spring.pleiades.io/spring-batch/docs/current/reference/html/job.ht

元記事を表示

CentOS-7 の OpenJDK-8 を 11 に

既に 8 がインストールされている環境を 11 にする。

バージョンを確認
“`
$ java -version
openjdk version “1.8.0_322”
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
“`

11 をインストール
“`
$ sudo yum install java-11-openjdk
“`

このままでは、まだ 8 を見ている状態なので、11 に切り替え
“`
$ sudo alternatives –config java
“`

バージョンを確認
“`
$ java -version
openjdk version “11.0.14.1” 2022-02-08 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1

元記事を表示

予定管理アプリを作ってみた

Wenサイト: https://plan.towelman.server-on.net/sign_in

# 動機
 自分で予定管理をしようと思ったときに一つのプロジェクトごとに、複数人で管理できるような物が欲しくなり探してもこれといってピンとくるものがなかったため自分で作ってみようと思った。

# 大雑把な機能
 基本予定をプロジェクト単位で分ける。そしてプロジェクトは2種類ある。一つ目は複数人で管理・参画でき、「やること」の担当をそれぞれに割り振ることができて、期間を指定する「パブリックプロジェクト」である。基本的になにかの目的をなすための計画を管理するのに使うプロジェクトで使い方次第で1人でも複数人でも使えるようになっている。また、複数人で使い、自分以外にも計画に変更を加えさせたい人がいる場合はその人を管理者にすることによって実現可能である。そして二つ目は自分専用の期間を指定できない「プライベートプロジェクト」である。これはなにかの目的をなすための計画ではなく、日常で自分がやらないといけない「やること」を管理するプロジェクトだ。このプロジェクトで「入浴する」、「掃除する」などの「

元記事を表示

春から大学生(情報・工学)の方へ~プログラミング入門8~(JDK(Java Development Kit)の中身を覗いてみた)

# 第1回
春から大学生(情報・工学)の方へ~プログラミング入門~(C言語ってなあに?)

https://qiita.com/HaaSAtC/items/490d066bdbec8441a2f6

# JDK(Java Development Kit)とは
プログラミング言語Javaを実行するために必要な様々なアプリケーション(コンパイラ、仮想マシンなど)をまとめたもの。プログラムを書き込んで実行する「エディタ」「IDE」と連動させて用いる。

# インストール場所(Windows)
単体でインストールした場合、基本的にはPC//ローカルディスクC//Program Filesなど?
Eclipse Pleiadesでまとめてインストールした場合、PC//ローカルディスク//pleiades~~//java内に各バージョン(6,7,8,11,17)がフォルダごとに分けられてインストールされる

今回はJDK17(Eclipse Pleiades)の中身について書きます
他のバージョンだと多少違う部分はあります。

# binフ

元記事を表示

【Spring】その1:クイックスタート

## Quickstart Guide
https://spring.io/quickstart

## Step 1: Start a new Spring Boot project
https://start.spring.io/

Add Dependenciesを選択、webと打ちSpring Webを選択。
zipファイルがダウンロードされるので好きなディレクトリで解凍。
(デフォルトは`demo.zip`)

## Step 2: Add your code

VScodeなどのIDEで`demo`を開き、`src/main/java/com/example/demo`の`DemoApplication.java`を編集。

“`java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframew

元記事を表示

[Java:forループを使った配列]forループが終わった時に、変数に配列の値が適用される。

forループによるスコア集計のコードサンプル

“`java
public class Main {
public static void main(String[] args) {
int[] scores = {40, 50, 70, 80, 30};
int sum = 0;
for (int i = 0; i < scores.length; i++) { sum += scores[i]; } int avg = sum / scores.length; System.out.println("合計" + sum); System.out.println("平均" + avg); } } ``` 表示結果は 合計270 平均54 になります。

変数sumに配列の値が入るタイミング

forを使用した場合、変数sumに配列scoresの値が適応されるタイミングはforループが終了したときです。

なので、平均点の計算は、forループが終了した後に記述しなけれ

【Java】SpringBootでPaging&Sortしてみた。

# 参考

https://reflectoring.io/spring-boot-paging/

# pom.xml
“`xml

org.springframework.boot
spring-boot-starter-data-jpa

“`

# Repository
“`java
@Repository
public interface SampleUserRepository
extends CrudRepository, JpaSpecificationExecutor {
}
“`

# Service
“`java
public SampleUserSearchResponse search(SampleUserSearchRequest request) {
Specif

フランスに修行に行けなくなった料理人が、未経験でIT業界にジョブチェンジした話。

# 自己紹介
はじめまして。
未経験からエンジニアに転職した『ゆうき』です!!
私は現在都内のSESで勤務をしており、Javaをメインに業務を行っております。
私が、IT業界に入るまでの経験を記事にしていきたいと思います。

## フランス修行に行くことを決意した料理人が飲食業界を離れた理由

私は小学生の頃から『コックさんになる!!』と発言していたほど、調理師になるのが夢でした。
その夢はずっと変わらず専門学校も地元の調理の専門学校に行き、
新卒で入社したレストランは、
西麻布にあるミシュラン1つ星のレストランでした。

4年ほど飲食経験を積んだ時に、フランスに修行に行きたいという気持ちが強くなり、
フランス修業に行くことを2019年の年末に決意しました。

しかし、決意を固めた2020年にコロナウイルスが大流行し、
私はフランス行きをストップするしかありませんでした。

1年間以上足止めを食らってる中で、飲食業界のどんどん変わっていく姿にものすごい不安を感じました。
また私は2021年に結婚をし、将来のことを考え悩み抜いた末、飲食業界から離れることを決意しました。

## なぜ飲

ClojureのソースをNetBeansでコンパイルしてみた

Clojureはじめたばかりの初心者です。
ソースを読むのが好きなので、自分でコンパイルしてNetBeans内で動かしてみたいなぁと思いやってみました。

JavaはJava8がインストールされている必要があります。
(ClojureのコンパイルにはJava8以上が必要との事です)
NetBeansは 12.0を使っています。

ちなみにClojureのソースをダウンロードしてきて、mavenを使ったら、簡単にコンパイルできました。しかし、それではNetBeansで、ブレークポイントをかけたり、ステップ実行をしたりできなかった(やり方がわからなかった)ので、別の方法でコンパイルしてみようと思いました。

まず、NetBeansで、File > NewProjectから、Java with Ant > Java Applicationを選択し、作成します。

Clojureの最新ソースを落としてきて、clojure-master/src/jvmの下のJavaソース一式を先ほど作成したプロジェクトのsrcディレクトリにコピーしました。
NetBeansでコンパイルしてみたら、あっさり成功。

【 Java_while文とdo-while文 】

現在独学でJavaを学習中です。
この投稿はその備忘録になります。

## while文とdo-while文
Javaにおけるwhile文とは、繰り返し構文を書く際のバリエーションのひとつです。
条件式の内容に従って必要数処理を繰り返します。
また、do-while文とは「まず評価してから条件式を実行する」もので、
while文とは書く順番が異なります。

#### ■ while文
以下のwhile文では、ブロックを実行する前に`条件式(temp > 25)`を評価します。
これを、`前置判定`といいます。
“`java
public class App{
public static void main(String[] args){
int temp = 30;
while (temp > 25) {
temp–;
System.out.println(“温度を一度下げました”);
}
}
}
“`
#### ■do-while文
以下のdo-while文では、ブロックを実行した後に`条件式(temp > 25)`を評価します。
これを、`後置判定

【Java】自作アプリを改良して業務効率化を図り、いつもより3分早く帰る。

こんばんは。

タイトルの通り、夜中に一人でパチパチとアプリを改造しました。

Atcoderに取り組むことで、Javaのライブラリやクラスの呼び出し方に少し慣れてきました。
便利なライブラリがいっぱいでほんとすごいですね。
自分のペースではありますが、研究していきます。

今回は、前からやってみたかったコピー機能を導入しました。

### 1.対象アプリ

消費税計算アプリ「消費税さん」です。

金額を入力すると税込み金額、または税抜き金額を計算してくれるシンプルかつ実用的な優良アプリです。
もし使いたい方がいらっしゃったら、自分のパソコンを持参してインストールさせていただきますのでご連絡ください。

Screenshot_20220328-230056.png

最初はアプリ開発の練習のつもりで開発したこの消費

Spring bootでバリデーションチェックによるエラーメッセージを表示させる手順

Spring bootの学習で前回エラーメッセージの表示方法を学んだので、アウトプットも兼ねて投稿します。

手順は以下の通りです。

:::note info
①プロジェクト作成時、validationライブラリを使用する。
:::

:::note info
②modelクラスを作成し、バリデーションチェック用のアノテーションを使用する。
:::

:::note info
③ControllerクラスのPostメソッドで、@Validated、BindingResultを使用する。
:::

:::note info
④エラーメッセージ用のファイルを作成。
:::

:::note info
⑤作成したファイルに表示させたいメッセージを記載。
:::

:::note info
⑥application.propertiesに最後にファイルのルートを記載。
:::

## ①プロジェクト作成時、validationライブラリを使用する。

まず初めに、プロジェクト作成時にライブラリ依存関係の選択で「Validation」を追加する。
![スクリーンショット 2022-03-28