JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

Azure AI Search機能と実装

# Azure AI Searchの概要と機能

## 目次
1. 概要
2. 機能/詳細
3. サンプルコード
4. まとめ

## 1. 概要
Azure AI Searchは、Microsoft Azureの一部であり、機械学習と自然言語処理を活用した高度な検索エクスペリエンスを提供します。企業や開発者は、このサービスを利用して、顧客が求める情報を簡単かつ正確に取得できる検索エンジンを構築できます。

Azure AI Searchは、以下のような主な特徴を備えています:
– 豊富な機能セット: テキスト検索、フィルタリング、スペルチェック、敏感情報の検出、自動補完、類似結果の提案など、様々な機能を提供します。
– AIによる向上: 高度な機械学習アルゴリズムと自然言語処理技術により、検索の精度と品質を継続的に改善します。
– スケーラビリティ: クラウドベースのサービスであるため、スケーラブルで高性能な検索エンジンを提供します。
– カスタマイズ可能: カスタムスキーマの作成、自動インデックス作成、自動スケーリングなどの機能により、個々のニーズに合わせてカスタマイズできます。

元記事を表示

SpringDataJPAで1回のリクエストで2回findAll()すると、1回目の結果に2回目の結果がマージ?されてしまう

# 環境
| 名称 | バージョン |
|:-:|:-:|
| Spring Boot | 3.1.5 |
| SpringDataJPA | 3.1.5 |
| Hibernate | 6.2.13 |
| MySQL | 8.0.34 |

# 問題
Serviceクラスから、findAll(Specification, Sort)を、Specificationの内容を変えて2回呼び出したら、2回目の戻り値に1回目の取得結果が混ざってしまった。

例えば、

1回目:`where item_name=’りんご’`で抽出
1回目の戻り値:item_nameが「りんご」のエンティティのリスト
2回目:`where item_name=’バナナ’`で抽出
2回目の戻り値:item_nameが「りんご」と「バナナ」のエンティティのリスト

…といった具合。(実際には条件によって半端にマージされたりされなかったり)

DBの実行SQLログは、想定通りの結果を出すSQLを実行している。
AP側で何かしら処理をしているんだろうとは思ったものの、何故そうなるかわからなかった。

Serviceクラ

元記事を表示

【Java】OpenJDKってどれ選べばいいの?

# はじめに

OpenJDKがいろいろあってどれを選べばいいか分からん!となり、ちょっと調べましたのでまとめます。

# OpenJDKまとめ

サポート期間を軸に調べました。

Java の -Xmx を減らしたら OutOfMemoryError が解消した話

Java で `OutOfMemoryError: Java heap space` が発生する場合、-Xmx (最大ヒープ サイズ) を増やすほうが良いと思っていました。しかし、実際に -Xmx を減らすことで OutOfMemoryError が解消する経験をしましたのでご紹介します。

## -Xmx を減らすと解消する例

### 対象とするプログラム

以下のようにたくさんのオブジェクトを格納する配列を使用するプログラムで発生しました。

“`java
class ObjectArrayAllocator {
public static void main(String[] args) throws NumberFormatException {
int gb = Integer.parseInt(args[0]);
Object[][] objects = new Object[gb][1_000_000_000];
System.out.printf(
“allocated for %d

Spring+Domaでトランザクション分離レベルを設定する

### トランザクション分離レベルとは
データベース管理システム上でトランザクションが複数同時に行われた場合に、どれほどの一貫性、正確性で実行するかを4段階で定義したもの。

### 分離レベル
#### SERIALIZABLE(直列化可能)
最も独立性が高い分離レベル。
トランザクションを順番に実行(直列)するのと同じように他のトランザクションのデータ更新の影響を全く受けない。
アクセスが競合すると先のトランザクションの終了を待たなければならないため性能は低い。

#### REPEATABLE READ(読み取り対象のデータを常に読み取る)
SERIALIZABLEに次いで独立性が高い分離レベル。
他のトランザクションによるデータ更新の影響を受けない。
トランザクション実行中は再び対象データを読み取っても同じ値が返ってくる。
しかし、他のトランザクションによるレコードの追加・削除の影響は受けるため、「ファントムリード」と呼ばれる現象が生じることがある

#### READ COMMITTED(確定した最新データを常に読み取る)
3番目に独立性が高い分離レベル。
他のトランザクシ

【個人開発】予約表の日時表示

# 本記事の概要
以前、予約管理アプリを開発したので、その内容を記した記事を投稿してみました。

https://qiita.com/Sakita0514/items/6c9c22a1f743fa0bfb51

今回は、このアプリで実装した機能の備忘録として、予約機能および予約確認機能における予約表の表示方法について、自分でも忘れた部分があるので備忘録として残したいと思います。
# 使用技術
使用技術は上記記事の内容と変わらないです。
|種類|使用技術名|
|—|—|
フロントエンド|HTML, CSS
バックエンド|Java(サーブレット、JSP)
開発環境|Eclipse IDE(4.6.3)
インフラ|Apache Tomcat v8.0
DB|MySQL(5.7.33)
DB連携|Hibernate(5.2.13final)

# 予約表の概要
予約表は下図のように、列に年月日がシステム日付から10日分表記されます。そして、行には時刻が9~20時まで1時間間隔で表記されており、その日時が予約可であれば「◎」が表示され、予約不可であれば「×」が表示されます。予約可「◎」の

Spring Boot3 で Jolokia が使えるようになりました

この記事は[ラクス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rakus) 20日目の記事です。

Spring Boot ではバージョン3 を境に Jolokia が使えなくなって久しいですが、12月19日にリリースされた Jolokia2 で Spring Boot3 がサポートされました。
これにより、Spring Boot2 までにできていたことが大体できるようになったようです。

## コードで設定する場合

“`xml:pom.xml
【初学者】SpringBootについて思ったことをちょっと整理

# はじめに
SpringBootを約1か月学習し、初学者のときはわかっていなかったポイントを
かなり、初学者目線で噛み砕いて整理。

習得者の方から見たら、何を当たり前のことを・・・。という内容かも。

そしてこれらは実務レベルではなく、学習レベルでのお話というところ。きっと実務はもっとややこしい。

自身の考えを言語化して、次のステップの注力するポイントを精査していくことが目的。

# 「Model」「View」「Controller」は役割の話
自分はRuby on Railsを少しやっていて、MVCモデルについて学習をしていた。
そのうえでのイメージ「Model」「View」「Controller」は役割の話であり
ファイル名の話ではないということ。

役割がわかりやすいように、
ファイル名に「ItemController」のようにつける場合などもあるからさらにややこしい。

Ruby on Railsの学習では、
Modelには「Model」という名前がついており、Viewには「View」という名前がついていた。なので、Sprin

log

“` java:demo.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.logging.Level;
import java.util.logging.Logger;

@Controller
public class UserController {

private static final Logger logger = Logger.getLogger(UserController.class.getName());

@GetMapping(value = “/user/add”)
public String displayAdd(Model model) {
// 模拟登录完成时的操作
// …

// 获取

Elasticsearch Learning to Rankプラグインのコードリーディング

# はじめに
Elasticsearch Learning to Rankプラグイン ([elasticsearch-learning-to-rank](https://github.com/o19s/elasticsearch-learning-to-rank)) は
機械学習モデル(XGBoost, Ranklib, Simple Linear)を使用しての検索結果のリスコアを行うことが出来るElasticsearchプラグインです。

今年の春頃にelasticsearch-learning-to-rankプラグインのデモを動かすところまで行いました(以下Qiita記事参照)。
もっと詳細に理解したいと思いつつもあまり調査が進まずにいたため、このタイミングでもっと詳細に理解すべくソースコードリーディングを行ったのでその内容をまとめていきます。

elasticsearch-learning-to-rankプラグインに関しては、以下など記事やTechBlogが既に公開されているため、内容を知りたい方はまずこちらを参照。

* [Elasticsearch Learning to R

個人開発でチャットができるサイトを作ってみた

# はじめに
この記事は[Systemiアドベンドカレンダー](https://qiita.com/advent-calendar/2023/systemi23)19日目です。
ゲーム系の専門学校を卒業しシステムアイに入社後の6月までの研修期間中に学んだことを使って個人開発で作ったものとその振り返りについて書いていきます。

# 作ったものの説明
簡単なチャットができるサイトを作成しました。

![chatroom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417080/3bf2405a-a3a0-3c2c-4752-6788772c9e5e.png)

画像は発表の際に同期に実際に使ってもらっていた様子です。
この画像には写していませんが、画像やgifが張られていたりhtmlタグが生きていたりなどいろいろと予想外の使い方をしていて面白かったです。

制作期間は5月16日(環境構築開始)~6月30日(発表)でした。

始めての挑戦が多く前半の5月中にしたことのほとんどが無駄になり、発表の日に取りあ

Java, Groovy, Kotlinにおけるコレクション操作の比較

# 概要

Java、Groovy、Kotlin は JVM ベースの言語で、それぞれがコレクション操作で独特な特徴を持っています。
今回は、これらの言語がコレクション操作にどのような特徴を持つかを、簡単なサンプルコードを交えて見ていきましょう。
また、各言語がコレクションにどんな特性を持っているかも軽く触れてみます。

# 各言語におけるコレクションの特徴

## Java

– ミュータブル(変更可能)なコレクションを主に使用
– `java.util`パッケージ内のコレクションクラス(`ArrayList`, `HashSet` など)
– Stream API を用いて、関数型のアプローチでコレクション操作が可能

## Groovy

– Java のコレクションに追加的な便利メソッドを提供
– ミュータブルおよびイミュータブルの両方のコレクション操作をサポート
– `collect`, `findAll` など、簡単で強力なメソッドが特徴

## Kotlin

– デフォルトでイミュータブル(変更不可能)なコレクションを提供
– ミュータブルなコレクションも利用可能(`m

[Android] 最強のチート対策()の紹介

:::note alert
**筆者はチート対策の専門家ではなく、ゲーム開発者でもありません。趣味で齧っている程度でございます。
それに加え、このネタ記事は有用性のない雑な知識を垂れ流すだけの内容となっております。時間を無駄に浪費したくない方は、ブラウザバックをオススメします**
:::

# はじめに
日々チート対策に追われ、決して終わる事のないイタチごっこを永遠にやらされているアプリ開発者の皆様、お疲れ様です。

既存のチート対策を施しても中々防げるものでなく
ハッカー達は、あらゆる手段を使ってそれを回避して来ます。殴りたくなりますよね。
**そんな貴方にオススメ!**
この記事では、一味違ったチート対策をご紹介させていただきます。

:::note warn
# 役に立つとは言ってない
:::

# 前提知識
・APKのデコンパイルに関するリバースエンジニアリングの知識

・IDA Pro、GhidraなどのDisassemblerに関する知識

・関数フックなどの低レベルの操作に関する知識

・SOインジェクションに関する知識

・Androidの内部動作に関する最低限の知識

未経験時代からUdemyさんに助けられてきた私のおすすめ講座

### はじめに

「Udemyオススメ講座をシェアしよう! by Udemy Advent Calendar 2023」の18日目の記事です。

https://qiita.com/advent-calendar/2023/udemy

未経験の時代から今でもUdemy使わせてもらってます!!

買ってやってない講座もたくさんあります!!!←😤ドヤw
(セール中に気になる講座、ついついたくさん買ってしまう・・)

ということで、今までやった講座の中で「購入して良かった、やって良かった」[Udemy講座](https://www.udemy.com/)紹介して行きます:raised_hand:

https://www.udemy.com/

### おすすめUdemy講座

#### Git編

https://www.udemy.com/course/unscared_git/

Gitでやらかして一度は「怖い〜」と思ったことありませんか?:frowning2:私はあります。
山浦さんのGit講座はGitコマンドや使い方だけでなく、Git自体の仕組みを図解で丁寧にわかりやすく

JavaエンジニアがASP.NET Coreを触ってみた

# はじめに
### このテーマで投稿しようと思ったきっかけ
単純に仕事で.NETのスキルが必要になったからである。
筆者はエンジニア歴のうち半分以上はJava案件(10年くらい?)に関わってきた。
Javaと.NETはほぼほぼ似ている(≒?)と言われますが、コーディング部分において実際にどのくらいJava(主にSpringBoot)の経験が活かせ、何が違うのかが気になったので、実際に.NETを触ってみようと思った。
もし、同様のことを気になったエンジニアがいたら参考になれば幸いである。

### 軽く.NETとは
.NETは説明不要なほど人気な言語なのでざっと要約すると以下のような特徴がある。
– Webアプリケーションの開発が容易
– 複数のプログラミング言語に対応(C#, VB.NETなど)
– 開発コストを抑えられる
– クロスプラットフォームに対応(Windows, Mac, Linux)

最後のクロスプラットフォームに対応は筆者にとって驚きだった。
2000年代はWindowsしか使えませんでした。ところが2016年ごろから.NET Coreがリリースされてから急激に進化

結局どっちが速いの? for vs Stream

## はじめに

こんにちは、[@rs_tukki](https://twitter.com/rs_tukki)です。
これは[Java Advent Calender 2023](https://qiita.com/advent-calendar/2023/java)の18日目の記事です。

## 繰り返し処理と言えば

Javaで繰り返しと言えばいの一番に習うのはfor構文ですが、
Java8からは新たな繰り返しや集約処理の構文として`Stream`がサポートされています。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html

これは処理の流れを宣言的に記述できる構文で、
たとえば、

“`java
for (int i = 1; i <= 5; i++) { System.out.println(i); } ``` といった繰り返し処理は、 ```java Stream.of(1, 2, 3, 4, 5).forEach(System.out::println);

【Java】OpenAPI Generator を使用してスキーマ駆動開発を行う

# はじめに

### OpenAPI Generator とは
まず、そもそも OpenAPI とは「OpenAPI Spesification」の略で REST API の定義を記述するための規格です。
OpenAPI Generator は、OAS(OpenAPI Spesification)の定義に基づいてコードを生成することができるツールです。

スキーマ駆動開発では、定義したAPIスキーマをもとにバックエンド (API) とフロントエンド (画面) の開発を並行して行います。そのため、API の実装としては定義に即したリクエスト/レスポンスになっていることが前提です。
OpenAPI Generator では OAS に基づいてコードが生成されるため、挙動が仕様に準拠していることが保証されるというメリットがあります。

### 使用ツール

– [**VSCode**](https://code.visualstudio.com/): エディタ
– [**Stoplight Studio**](https://stoplight.io/solutions): OAS 設計

SpringBoot(Maven)でFlywayMigrationとJOOQをPluginで導入する

# 対象読者
* Springまわりの技術について深掘りしたい
* JOOQに入門したい
* 型安全なクエリビルダーを利用したい
* FlywayをSpringに導入したい

# 環境
* SpringBoot 3.2
* Apache Maven 3.9.5
* JOOQ 3.18.7
* Flyway 9.22.3
* Postgres 16

[備考] JOOQ & Flyawayは継承元のpomに定義されていたVersionを使用し、
MavenはSpringについているラッパーを使用する

# FlaywayとJOOQについて
### Flyway
Flywayはデータベースの移行を管理するオープンソースツールです。このツールの魅力は、そのシンプルさと設定よりも規約を重視するアプローチにあります。Flywayを使用することで、データベースのスキーマのバージョン管理が可能になり、スキーマの変更や移行を容易かつ確実に行うことができます。これはSQLやJavaコードで定義された移行を自動的に管理し、適用することができるため、データベーススキーマの進化をスムーズにコントロールするの

【個人開発】駆け出しエンジニアがJavaで予約管理アプリを作ってみた

# はじめに
SIerにキャリアチェンジして1年目の駆け出しエンジニアがJavaでアプリ製作をしてみました。アウトプットとして、本記事にその記録を残したいと思います。
# 作成者のプロフィール
私のプロフィールとしては以下の通りです。
・社会人4年目
・前職はメーカで生産技術職を3年経験
・元々ITに興味があったので今年SIerに転職して1年目
・ITに関する経験①
 大学時代にC言語で初歩的な読み書きの経験はあり。マクロ作成など簡易的なコード作成はできたが、本格的な特定言語の開発経験は大学時代に関しては無し。
・ITに関する経験②
 社会人1,2年目にプログラミングのオンラインスクールで学習経験あり。この時、初めてJavaのアプリ開発に着手。内容についてはスクールでの学習期間のみでは理解が不足していたので、その後もスクールで着手したアプリの復習や改良繰り返し、スクールでの学習期間終了後もJavaの学習を継続。
・SIerへ転職後の研修でJavaを用いたアプリ(ECサイト)作成の経験あり。オンラインスクールでの学習経験が活かせる研修であり、この研修においてはほぼすべてのコードを設計書

Javaスタート

Javaをスクールで習い始めた。そこではエクリプスを使っているが、
起動が重い。
一応家のPCにもエクリプスでJavaの環境は作った。
以前、別の講習でインストールしたvscodeがある。その起動はスムーズ。
vscodeでJavaをやりたくなった。

今日の結論。
vscodeでJavaれるようになった。

経過
ある大学の「Javaの実行環境の作り方」というサイトを見つけて
https://www.fit.ac.jp/~m-ishihara/Lectures/JavaProgramming1/howToSetupOnWin10new/howToSetup.html
vscodeでJavaりたくなって、参考にやってみた。
とても見やすい。パスの設定とかもするが、なにせ、vscodeインストールされていたので、パスをvscodeに聞かせるのはよくわからない。
それにうちのvscode全部英語。
「Japanese Language Pack for Visual Studio Code」入れているのに。エラーメッセージは日本語で出たか。
CのプログラムにJavaの一式を置いたが、そこの

OpenJDKのサポート期間まとめ
JDK サポート期間 提供体系
Java 8 Java 11 Java 17 Java 21
Oracle JDK