JAVA関連のことを調べてみた2023年09月25日

JAVA関連のことを調べてみた2023年09月25日
目次

スッキリわかるJava入門 実践編 第3版 まとめ – part4 -JVM制御とリフレクション

# はじめに
こんにちは ◤●ㅅ●◥ノ

今回はJVM自体の制御に関わるAPIについて学びました!

## 第4章 JVM制御とリフレクション

### 1.JVM自体の制御
そもそもJVMとは…?
 Java Virtual Machineの略で、Javaのプログラムを動かすために必要なソフトウェアのこと

Javaには開発者がJVM自体の内部機構にアクセスして情報を得たり、
直接制御するためのAPIが存在する
JVM自体を制御するAPIについて学んでいく

### 2.JVMの終了
System.exit()を呼ぶとその場でプログラムを終了する
System.exitにはint型の引数を与えることができ、その数値が終了コードとしてOSに報告される
→多くのOSでは0は正常終了、0以外は異常終了を意味する

どのように使うのか
エラーの原因ごとに異なる終了コードを返してプログラムを終了するようにする
→バッチ処理が異常終了した場合の原因究明に使うことができる

### 3.外部プログラムの実行
java.lang.ProcessBuilderクラスを利用する
→自分が開発している

元記事を表示

Stream でインデックスと要素を扱いたい

## 目次
[1. はじめに](#1-はじめに)
[2. Java の for 文](#2-java-の-for-文)
[3. guava](#3-guava)
[4. 実装](#4-実装)
[5. まとめ](#5-まとめ)
[参考文献](#参考文献)

## 1. はじめに
### Java 100 本ノック、55 本目の応用。
業務で Java を使うので、[Java 100 本ノック](https://github.com/JustSystems/java-100practices)を使い学習をしています。[55 本目](https://github.com/JustSystems/java-100practices/tree/master/contents/055)の問題は、ファイルを読み 1 行の文字数を合計して出力するプログラムを実装するというものですが、応用として読んだ行に行番号をつけて別ファイルに書くプログラムを実装することにしました。

### Python の for 文では簡単にインデックスを扱える。
Java では、[`Files`](https://docs.

元記事を表示

Javaで「日時を設定する」の動作を確認してみた

# 概要

Javaで「日時を設定する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index3.html

# 実装

以下のファイルを作成しました。
“`TestCalendar2.java
import java.util.Calendar;

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

Calendar calendar = Calendar.getInstance();

System.out.println(“現在の日時を設定します”);
dispCalendar(calendar);

System.out.println(“– — — — — –“);

calendar.set(Calendar.YEAR, 2005);
System.out.println(“年を2005年に設定します”);
dispCalendar(c

元記事を表示

Java JDBC

# はじめに
JavaのWebアプリケーションに,DBを利用した機能を実装するために必要となる**JDBC**についてまとめる.まずは,JDBCの概要をまとめてから,基本的な実装方法についてまとめる.

# JDBCとは
JDBCは”Java DataBase Connectivity”の頭文字をとったもので,Javaプログラムがデータベース管理システムにアクセスできるようにするものである.

JDBCを構成する基本要素は以下の二つである.
**1. JDBC API**
Javaアプリケーションがデータベースにアクセスするためのクラス/インタフェースの集まりである.これらを用いて,データベースを操作するプログラムを作成する.
**2. JDBCドライバマネージャー**
複数のJDBCドライバを管理するためのクラスで,目的のデータベースに対応したJDBCドライバを選択し接続するために使用す

元記事を表示

[jtreg]Windows環境でjtregをビルド

## 0.環境
– Windows 11 Home 22H2(build:22621.2283)
– Git (2.41.0.windows.3)

## 1.Cygwinのセットアップ

– Cygwinのインストーラを[公式サイト](https://www.cygwin.com)からダウンロード。
– ダウンロードした`setup-x86_64.exe`を実行(念のため管理者として実行)。
– 設定はいじらずに`Choose A Download Site`の画面まで次へ。
– ダウンロードサイトは`https://ftp.yz.yamagata-u.ac.jp`を指定。
– `dos2unix`、`make`、`unzip`、`vim`、`wget`、`zip`を追加してインストール。
– Cygwinのルートディレクトリ配下に`.ssh`ディレクトリを作成し、鍵を生成。GitHubに公開鍵を登録しておく。

## 2.テスト対象のPATH設定

– テスト対象となるJDKをダウンロードし、任意のディレクトリに解凍。
– 環境変数に`JAVA_HOME`とPATHを通

元記事を表示

Javaで「日時に関する情報を取得する」の動作を確認してみた

# 概要

Javaで「日時に関する情報を取得する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/calendar/index2.html

# 実装

以下のファイルを作成しました。
“`TestCalendar1.java
import java.util.Calendar;

class TestCalendar1{
public static void main(String args[]){
String[] week_name = {“日曜日”, “月曜日”, “火曜日”, “水曜日”,
“木曜日”, “金曜日”, “土曜日”};

Calendar calendar = Calendar.getInstance();

int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int d

元記事を表示

DebianベースのDockerイメージにmysql-clientを追加できない

## 結論
`mysql-client`の代わりに`default-mysql-client`を使用すればOK

## 経緯
以下のDockerfileでビルドが失敗

“`
FROM openjdk:17.0.1-jdk-slim

ARG USERNAME=kyoto_kanko
ARG USER_GROUP_NAME=workspace
ARG USER_UID=1000
ARG USER_GID=1000

ARG PKG=”git vim curl unzip zip sudo mysql-client”

SHELL [“/bin/bash”, “-c”]

RUN apt-get update \
&& apt-get install -y ${PKG} \
&& groupadd –gid ${USER_GID} ${USER_GROUP_NAME} \
&& useradd –uid ${USER_UID} –shell /bin/bash –gid ${USER_GID} -m ${USERNAME} \
&& echo %

元記事を表示

これからJavaSilver(Gold)を受ける不安でいっぱいな君へ

# これからJavaSilver(Gold)を受ける不安でいっぱいな君へ

この記事を読んでいる貴方はきっと黒本をやり尽くして、受かる気はするけど自信はない。不安でいっぱいな状態なんだと思います。絶対そうです。そういうことにします。

そんなあなたの不安を少しでも軽減できたらと思い書きました。

### こんな人に読んでほしい

– 黒本をやり尽くした人
– 受かるか不安で仕方ない人
– どこまで勉強すれば受かるか知りたい人

## もくじ

– 自己紹介
– 勉強スタイル
– どこまで勉強すれば受かる?
– 受験時の心構え

## 自己紹介

初めまして、底辺SierのXINです。

新卒未経験で業界に入り、業務では主にJavaを扱っています。

Javaは4月ごろから触れ始め、2023年6月12日にJavaSilver、2023年9月16日にJavaGoldを受験しました。(SE11)

勉強期間はSIlverが1ヶ月半、Goldが2ヶ月ちょっとです。(※黒本を読んでた期間)

テスト結果は両方一発合格、正答率はSilverが81%、Goldが91%で他の方の受験記と比べても比較

元記事を表示

【個人開発】情報漏洩を防止するChatGPTのCLIツールをプロトタイプした話

ChatGPTはプログラミングを含んだ様々な質問に答えてくれる便利なツールです。

一方で、特別な設定をしなければ、ChatGPTに送信した内容は学習データとして利用されるため、情報漏洩のリスクを孕んだツールでもあります。

例えば、社外秘をChatGPTに入力してしまい、その内容をChatGPTに学習されてしまうと、他の人がChatGPTを利用した際に社外秘が生成されてしまうといったことが起こり得ます。

そのため、業務でChatGPTを使う時は「入力内容が社外秘であるか?」といったことを気にする必要があり、結構イライラします。

今回はこの「ChatGPTを介した情報漏洩リスク」を自動で防ぐツールとして[「privacy gpt cli」](https://github.com/YukihiroArakawa/privacy-gpt-cli)を作成しました。

![Screen Shot 2023-09-23 at 18.23.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482077/15a

元記事を表示

【Java初心者】Wekaによる機械学習 05-Javaのコマンドラインでロジスティック回帰

# もっと簡単にロジスティック回帰できないか

前回の記事( https://qiita.com/SeijiMiwa/items/64ae3d7b96d1ecca8478 )では、wekaのAPIをJavaから呼び出して、ロジスティック回帰する方法を説明しました。

本当は、コマンドラインで実現したかったのですが、そのときは方法がわからず。
ただ、コマンドラインのヘルプで、「何となくこんな感じかな」というところまでたどり着きましたので、やってみます。間違っていたらご指摘をお願いします。

# データ

前回と同様、fukugyou.arff を教師データ。fukugyou-test.arff をテストデータとします。

# コマンドライン

今回も mini-wekaを使います

“`
java -cp mini-weka-3.9.15955.jar:. weka.classifiers.functions.Logistic -t fukugyou.arff -d fukugyou.model
“`

これで fukugyou.model にモデルが生成されます。

これを使って、

元記事を表示

ミニ生命保険システムを作成 S07

# はじめに
今回はUnderwriting中に様々なルールを実装します。デザインパターンにおける単一責任、テンプレートメソッドを理解する必要がある。また、ロジックとデータの分離という考え方も理解しておく必要がある。
![undw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554924/7145a899-3ffa-dbe6-2695-eb9ed234abd8.png)

# 実装
## 単一責任
保険システムに様々なルールがあります。ルールの実装が混在すると、システムのメンテナンスが非常に難しくなる。そこで、1つのルールと1つのクラスで実装する。各ルールにはビジネスチェックが1つだけ含まれる。例えば、被保険者の年齢のチェック。
“`java:InsuredAgeRule
public class InsuredAgeRule extends Rule {
private ProductService productService;

public InsuredAgeRule(

元記事を表示

Javaで「度の単位の角度をラジアン単位に変換する」の動作を確認してみた

# 概要

Javaで「度の単位の角度をラジアン単位に変換する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/math/index10.html

# 実装

以下のファイルを作成しました。
“`JSample10_1.java
class JSample10_1{
public static void main(String[] args){
double angdeg = 30;

System.out.println(Math.PI / (180 / angdeg));
System.out.println(Math.toRadians(angdeg));

double angrad = Math.toRadians(angdeg);

System.out.println(180 * angrad / Math.PI);
System.out.println(Math.toDegrees(angrad));
}
}
“`

以下のコマンドを実

元記事を表示

テンプレートメモ [リサーチ・メモ] Object Mapperの使い方

## 背景
社内でパラメータテストを行う際にObject Mapperが使用されていた為、使い方をメモとして残す

## Object Mapperとは
JavaのObjectとJson間の変換を簡単に行えるようにするJacksonライブラリーの一部

## 使い方
“`
ObjectMapper objectMapper = new ObjectMapper(); //インスタンスの生成

// JSONデータのシリアライズ(java→json)
MyObject myObject = new MyObject();
String jsonString = objectMapper.writeValueAsString(myObject);

// JSONデータのデシリアライズ(json→java)
String jsonString = “{\”name\”:\”John\”, \”age\”:30}”;
MyObject myObject = objectMapper.readValue(jsonString, MyObject.class);

“`

元記事を表示

messages.propertiesから日本語メッセージが取得されない

以下のエラーが発生しました。
No message found under code for locale ‘ja’

問題点としては、日本語用の`messages.prpoerties`ファイルに変更する必要があるため、`messages_ja.properties`としました。

それから、application.propertiesファイルに変更の有無を追記しました。

“`application.properties
spring.messages.basename=messages_ja
“`

ちゃんと日本語メッセージが表示されるようになりました。

元記事を表示

Spring Data JPA を利用中に思い付いたことのメモ

## 概要
Spring Data JPAを開発に使用していて気づいた、アイデアというほどでもない諸々のメモです。
陳腐化するのも早そうですが、自分の備忘用にも今後追記していくと思います。
念のため、対象になるバージョンも小見出しとして付記しておきます。

## `@Query`で頻出する句は文字列定数で管理する
###### ver.2.x
`@Query`はメソッド単位のため、同じ記述を複数のメソッドに行わなければならないケースが出てきます。
典型的な例が集計結果をProjectionでDTOにデータを格納する場合の`select new packages.DTO(…)`など。

そういう場合はクエリ用のヘルパークラスかDTOに文字列の定数として頻出句を定義してしまうのが良さそうです。Specificationを定義していたらその中も良さそうですね。
アノテーションに指定するクエリはその時点では文字列でしかなく、定数はIDEが内容を表示してくれるので確認も困りません。当然ながら、誤記の危険も減りますし、変更への対応も楽になります。

元記事を表示

JDBC勉強備忘録(Insert文)

## 備忘録目的
DAOに関しての自分が認識していることの確認と躓いたところや調査方法、仮定したことなど、過程を記録する。
(技術的なことはサイトのリンクを貼る)

## 環境
OS:macOS 12.5.1
IDE:Eclipse IDE for Enterprise Java Developers.
  Version: 2019-12 (4.14.0)
  Build id: 20191212-1212
DB:Ver 8.0.32 for macos12.6 on x86_64 (Homebrew)
クラスパス:mysql-connector-j-8.0.32.jar
その他:本文に追記

# 本文
## 値の設定
“`Java:/Sample_4/src/j4_02/Sample4_02_1_Common_DAO.java
//——————————————-
//SQL文の送信 & 結果の取得
//——————————————-

//発行す

元記事を表示

Javaで「三角関数に関する計算を行う」の動作を確認してみた

# 概要

Javaで「三角関数に関する計算を行う」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/math/index9.html

# 実装

以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String[] args){
System.out.println(“sin30° = ” + Math.sin(Math.PI / 6));
System.out.println(“sin45° = ” + Math.sin(Math.PI / 4));
System.out.println(“cos60° = ” + Math.cos(Math.PI / 3));
System.out.println(“cos45° = ” + Math.cos(Math.PI / 4));
System.out.println(“tan60° = ” + Math.tan(Math

元記事を表示

[GCP] Workflows機能x実装

# GCPのWorkflowsについて

GCPのWorkflowsは、タスクの実行と制御のための単純で柔軟な実行環境です。このサービスを使用することで、異なるサービスやAPIの呼び出しや、条件に基づいた制御フローの定義が可能。

## 機能

### 1. ワークフローの定義と制御

GCPのWorkflowsでは、YAML形式でワークフローを定義することができる。この定義には、各タスクの手順と条件、依存関係などを設定する。また、複数のタスクを直列に実行したり、並行して実行したりすることもできる。

### 2. サードパーティのAPIとの連携

Workflowsは、様々なサードパーティのAPIとの連携をサポートしている。RESTやgRPCで公開されたAPIを使用する場合、タスクとして呼び出しを追加することができる。また、自動的に再試行やエラーハンドリングを行ってくれるため、信頼性の高いAPI呼び出しを簡単に実現することができる。

### 3. 高度な制御フロー

Workflowsでは、条件に基づいた処理や反復処理を簡単に定義することができる。たとえば、ある条件が成立した場合の

元記事を表示

Spring Securityでログイン機能の実装中に起きた循環参照エラーについて (DIやDIコンテナについて解説あり)

|目次|
|—|
|[初めに](#初めに)|
|[循環参照エラーについて](#循環参照エラーについて)|
|[DIやDIコンテナについて](#diやdiコンテナについて)|

初めに

これは、Spring Securityを使用したログイン機能の実装を勉強していた時に発生しました。以下のサイトを見ると似たようなところで躓いている人が多いようです(私もその一人(〃ノωノ))。今回は実際に自分が起こした循環参照のエラーを例にその対処法について解説したいと思います。

https://shiron-program.hatenablog.com/entry/2022/08/13/003608

https://qiita.com/TaikiTkwkbysh/questions/3d6e8f28174c3dfcb755

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11277744801

循環参照エラーについて

元記事を表示

ミッションクリティカルなJavaアプリケーションのためのBrowsium Catalyst vs CheerpJ in Chrome

![Browsium-Vs-CheerpJ-1024×578.png.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/901a5961-6aad-7501-1b5d-093a3e862cdc.jpeg)
来月、Microsoftは長寿ブラウザであるInternet Explorerのメインストリームサポートを終了する意向であり、Windows 11上のIE11デスクトップアプリケーションは無効になる。

しかし、一部のアプリケーション、特にJavaアプレットをベースとしたアプリケーションは、インターネットエクスプローラーでのみ確実に動作し、Chrome Enterpriseユーザーは[GoogleのLegacy Browser Support (LBS)](https://support.google.com/chrome/a/answer/9270076?hl=en)を介してこれらのコンテンツにアクセスします。
![1Chrome-LBS-Infographic-4-300×157.pn

元記事を表示

OTHERカテゴリの最新記事