- 1. 分散RedisロックとJedisクライアント
- 2. Javaから始める 独学Spring Boot
- 3. 【Java】enumの使い方と簡単な使用例について(備忘録)
- 4. pleiades all in oneの解凍に苦戦した話
- 5. Pattern Matching パターンマッチング
- 6. sealed class
- 7. 【Android/Java】BootCompleteでの起動時処理(Android11)
- 8. SpringBoot + Java + Gradle環境で”Hello World”
- 9. 遺伝的アルゴリズムを体験する
- 10. Nablarch: writeタグとrawWriteタグの違いは?brタグを使用できるのはどっち?
- 11. JPAのざっくり解説
- 12. Discordボット開発:Javaで実装する音声処理機能のすべて【その③】
- 13. データ型の変換(Java、Python)
- 14. thymeleaf : TemplateInputException でハマった件_変数定義編
- 15. Javaについての個人メモ
- 16. Java / Google Drive APIでファイルをごみ箱に入れる方法
- 17. tWAS9.0 , Keycloak 構成自動化での備忘録
- 18. Spring Interceptor
- 19. Discordボットのためのリアルタイム音声処理:LavaPlayerでInputStreamに対応する
- 20. springのHTTP Interfaceでhttp client実装を切り替え
分散RedisロックとJedisクライアント
# はじめに
以前、Redis上でセマフォを実装する必要がありました。驚いたことに、私たちが使用しているJedisクライアントとLettuceクライアントの両方には、それに対する良い準備ができた解決策がないことがわかりました(Redissonにはそのようなものがあります)。
そのため、私はその隙間を埋め、JedisとLettuceの両方のRedisクライアント向けの解決策を提供することにしました。# セマフォが使用したい理由は何ですか?
リソースの相互利用を制限する必要がある状況を想像してみてください。たとえば、バックグラウンドタスクで実行されている重いSQLクエリが全体のサービスパフォーマンスに悪影響を及ぼす可能性がある場合、許可された回数よりも同時にそのクエリが発行されないようにする必要があります。
セマフォを使用することで、共通リソースのクロスプロセス競合状態を解決し、共通リソースへのアクセスを特定の量に制限することができます。# 解決策はこちらです
[RedPulsar](https://github.com/himadieievsv/redpulsar) が、セマフォ
Javaから始める 独学Spring Boot
# はじめに
先日公開したポートフォリオ用の Web アプリケーションのバックエンドでは、フレームワークに Spring Boot、言語に Kotlin を利用しました。
基本的に独学で学習を進めてきたのですが、一番苦労したことと言えば、教材選びと学習順序です。
初学者向けではないと言われることが多いためか、学ぶための手引きとなるような記事が少なく、途方に暮れることもしばしばありました。
そのため、これから学習を始めようと思っている方や行き詰っている方にとって少しでも参考になればと思い、この記事を書くことにしました。※ ポートフォリオは、服用したお薬の記録をサポートする Web アプリケーションです。
アプリケーションの概要や使用した技術を紹介する記事を投稿していますので、詳しくはそちらをご覧ください。https://qiita.com/hiroe-mkk/items/fb49783b346944961b04
# 学習略歴
高校の授業で Java と出会ったのをきっかけにプログラミングに興味を持ち、プログラマを志すようになったのですが、訳あって 二か月も経たな
【Java】enumの使い方と簡単な使用例について(備忘録)
# ◆背景
Javaのコードを読むことがありましたが、
enumの使いかたが分からず、コードを読み切れない事がありました。。
知識不足を実感したので、この機会に基本的な使い方を調べました。
以下はenum使い方を調べた内容の紹介となります。# ◆対象
– enumの基本的な使い方を調べてる方
– タイトルに興味を持ってくれた方# ◆enumとは?
– 複数の定数を1つの方としてまとめて定義できるもの。
– enumは**列挙型**と呼ばれ、enumで定義した定数は**列挙子**と呼ばれる。# ◆構文
“`java
// enum 型を宣言
public enum HogeHoge {
// 列挙子を宣言
HOGE,
ORANGE,
PEACH;
}
“`# ◆使い方例(enumの定義&メソッドの呼び出し方)
以下の例ではEnumに`jpFruitsName`という追加のフィールドを持たせ、
その値を返す`fetchJpFruitsName`メソッドを定義しています。
Fruits型の変数にはorange、peach、grapeの
pleiades all in oneの解凍に苦戦した話
・問題
pleiades all in oneをダウンロードしたあと、解凍しようとしてもエラーになってしまう。ダウンロードしたのはWindows x64のUltimate。
・トライ
ダブルクリックやWinRARを利用して解凍したがチェックサムエラーが発生する。UltimateをやめてJavaのダウンロードファイルに変更。今回Javaを使いたかったので最悪Javaの環境が整えば良い。結果としてうまく解凍できた。
Pattern Matching パターンマッチング
## Pattern Matching パターンマッチング
パターン マッチングでは、オブジェクトが特定の構造を持っているかどうかをテストし、一致する場合はそのオブジェクトからデータを抽出します。Java ではすでにこれを行うことができます。ただし、パターン マッチングでは、より簡潔で堅牢なコードを使用してオブジェクトから条件付きでデータを抽出できるようにする新しい言語拡張機能が導入されています。
## Pattern Matching for the instanceof Operator
– The predicate is a Boolean-valued function with one argument; in this case, it’s the instanceof operator testing whether the Shape argument is a Rectangle or a Circle.
– The target is the argument of the predicate, which is the Shape value.
– The pa
sealed class
## sealed class
Sealed クラスとインターフェイスは、他のどのクラスやインターフェイスがそれらを拡張または実装できるかを制限します。
permits句は、シールされたクラスを拡張できるクラスを指定します。
## sealed classの宣言
“`java
public sealed class Person permits Student, Teacher, Worker {
}
“`
## 許可されるサブクラスの制約
– final: Cannot be extended further
– sealed: Can only be extended by its permitted subclasses
– non-sealed: Can be extended by unknown subclasses; a sealed class cannot prevent its permitted subclasses from doing this
## 許可されるサブクラスの宣言
“`java
non-sealed class Teacher extend
【Android/Java】BootCompleteでの起動時処理(Android11)
## やりたいこと
色々と記事があるけど、BootCompleteの動作の整理を行いたい## Step1.通常設定(BootCompleteの受信)
(出尽くしている内容だが)以下を追加する#### AndroidManifest.xml
~~~xml
SpringBoot + Java + Gradle環境で”Hello World”
## 環境
– SpringBoot 2.2.7
– Java 1.8
– Gradle 6.3## Javaの設定(IntelliJ )
ファイル < プロジェクト構造 < プロジェクト設定 < プロジェクト ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/463aa415-0271-37ea-8245-5e05c2ec6e75.png) < モジュール ソース ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/aba0033a-f9f8-b0dd-773e-03fdf1670c4f.png) 依存関係 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/e2c2090d-67b4-a439-024b-bf1637ca1301.png) ファイル
遺伝的アルゴリズムを体験する
# 概要
機械学習の一つに遺伝的アルゴリズムというものがある。原理は単純で「良いものと良いものを組み合わせれば、さらに良いものが生まれるはず」というものだ。今回は簡単な問題を例にあげて実際に最適解を得る事を確認する。コードはgitHubにおいておく。今回使用したコードを活用して別の記事を書く予定のため、より使いやすいように改良をしていくつもりだ。
https://github.com/NEKOHUKURO/GA_num_of_one
# 遺伝的アルゴリズムの簡単な説明
この章で遺伝的アルゴリズムの簡単な説明を行う。## 遺伝情報の表現方法
遺伝的アルゴリズムはそれぞれの個体が遺伝子として0と1で構成された配列を持つ。
遺伝子の長ながさは個体ごとに変わることはない。## 子孫を残す
個体は他の個体と子孫を残す
親はそれぞれの遺伝子を組み合わせたものを子孫として生成する。
基本的に獲得形質は遺伝させないが本によってはそのようなアプローチを紹介するものもある。
また子孫を残す際、一定の確立で遺伝子の一部を反転させる。これを突然変異という。## 優れたものが子孫を残
Nablarch: writeタグとrawWriteタグの違いは?brタグを使用できるのはどっち?
# 結論
:::note
– brタグを使用できるのは、rawWriteタグ。
– writeタグは、デフォルトではbrタグを使用できない。
– 一方、自動エスケープされるので、安全性が高いメリットがある。
::::::note alert
– rawWriteタグはセキュリティリスクに注意する必要がある。
– 外部から入力可能な値にrawWriteタグを使用するのはご法度。
:::## 前提:Nablarchのカスタムタグについて
https://nablarch.github.io/docs/LATEST/doc/application_framework/application_framework/libraries/tag.html#tag
## コードサンプル
nablarch-example-webでテストする。実行方法はREADMEを参照。
https://github.com/nablarch/nablarch-example-web
“`java
/**
* ログイン画面を表示。
*
* @para
JPAのざっくり解説
Java開発3年目くらいの時、新しい現場でJPAってなんだよってなったのでその時に書いていた記事の再掲です。
# **JPAって誰?**
今回取り上げているJPAっていうのは、
「Java Persistence (JSR 338)」という、
Java EE標準のO/R MappingおよびDAOの技術仕様らしいです。これだけじゃピンとこないので噛み砕くと、
Java EEというのは、Javaでの開発に必要なものをセットにしたもので、
必要な物っていうのは、便利なAPIなどのことです。(ざっくりとしたJava EE概要知りたい人用の参考。[https://agency-star.co.jp/column/java-ee)](https://agency-star.co.jp/column/java-ee))
そして今回取り上げるJPAはその便利なセットの中の一つで、
簡単に言うと、少ない記述量でDBにアクセスしてくれるもののことです。この記事では、ここがわかってたらJPAの実装なんとなくわかる。
というところを目標にしていきます。ちなみにJPAとよく一緒に使われる
Discordボット開発:Javaで実装する音声処理機能のすべて【その③】
こんにちは。この記事は[**Discordボット開発:Javaで実装する音声処理機能のすべて【その②】**](https://qiita.com/blue_islands/items/3667d1740f6018e59695)の続きの記事になります。
# 1. はじめに
Discordボット開発者の皆さん、音声認識機能の導入に際して、技術的な詳細に興味はありませんか?この記事では、Google Cloud Speech-to-Text APIをDiscordボットに統合する具体的なコードの流れを解説します。# 2. Google Cloud Speech-to-Text APIの概要
このAPIは、リアルタイムの音声認識とテキスト変換を可能にし、多言語に対応しています。高い精度と柔軟性で、Discordボットの機能強化に最適です。# 3. 主要なクラスとその役割
このセクションでは、Discordボットの音声認識機能における重要なクラスとそれぞれの役割について詳しく見ていきましょう。## SpeechToTextService:
`SpeechToTextService`
データ型の変換(Java、Python)
データ型の変換についてまとめました。
今回は整数型から文字列に変換する場合を比較します。***Java***
“`Java
public class Main1 {
public static void main(String[] args) {
// 自分の得意な言語で
// Let’s チャレンジ!!//String line = sc.nextLine();
int A = 437326;
int B = 9085;
int ansA = A / B;
int ansB = A % B;
// ラッパークラスを用いて数値を文字列に変換して出力する
System.out.println(Integer.valueOf(ansA).toString() + ” ” + Integer.valueOf(ansB).toString());
}
}
“`***Python***
“`python3
A = 437326
B = 9085
ansA
thymeleaf : TemplateInputException でハマった件_変数定義編
## 背景
JUNITでControlelerのテストをしている際、以下の事象に遭遇した。## エラーログ
Caused by: org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templates/******.html]” – line 263, col 30)
Caused by: org.attoparser.ParseException: (Line = 263, Column = 30) Malformed markup: Attribute “th:with” appears more than once in element要は、Thymeleafの書き方がいけなかったっぽい。。
## エラーが発生した箇所
divタグ内で使用する変数を「th:with」で定義したのだが、1つにまとめないといけないらしい。(まあ確かにそうか笑)
“`html:エラーが出た箇
Javaについての個人メモ
# Javaについての個人メモ
【Java】イミュータブルな変数ってなんだ?String型変数の特殊性を知る《講義4日目》
平成31年春期試験問題 午前問17
https://www.ap-siken.com/s/kakomon/31_haru/q17.html
ヒープ (heap)
> プログラムで利用するデータ領域の一種。ヒープ(heap)とは「積み重なる」「堆積(たいせき)する」という意味。
プログラムの実行につれて動的に確保され、その領域が順次拡大するさまから、ヒープと呼ばれる。https://atmarkit.itmedia.co.jp/icd/root/80/34958380.html#:~:text=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF,%E3%81%9F
Java / Google Drive APIでファイルをごみ箱に入れる方法
# 結論
“`java
File file = new File();
file.setTrashed(true);
service.files().update(Id, file).execute();
“`以上。
# 補足
Python, Node.jsでの書き方は公式ドキュメントを参照されたし。https://developers.google.com/drive/api/guides/delete?hl=ja#python_1
すでにアップロードされているファイルを`service.files().get(Id)`で取得し、`.setTrash(true).execute()`として直接書き込むことはできない。やろうとすると以下のエラーが出る。
“`json
{
“code”: 403,
“errors”: [
{
“domain”: “global”,
“message”: “The resource body includes fields which are not directly writable.”,
tWAS9.0 , Keycloak 構成自動化での備忘録
# はじめに
tWAS, Keycloak でSAML構成をするのに苦労したところを同じことを調べなくて良いように残しておきます。
以下のページを更新しました。
https://qiita.com/keniooi/items/050b5ae0d8f50bf63c84
https://qiita.com/keniooi/items/cfe2b8ef692b23500a15
# spMetadata.xml をJSON形式に変換
https://stackoverflow.com/questions/53662807/configuring-keycloak-saml-from-the-command-line
を参考に試しましたが、なぜか実行できませんでした。各コマンドを手動で1行づつ実行してたのが原因でした。まとめてはりつけて実行することで実行できました。わかってしまうとどうってことないのですが、気づくのに時間がかかったりします。
ポイント:TOKENは有効期限があるのですぐに使えるようにしましょう。
貼り付け用メモ
“`
export ACCESS_HOST=`h
Spring Interceptor
– Springベースのアプリケーションを開発中であれば、Spring Interceptorを使用する方が、Servlet Filterを使用するよりも統合性の面でより良い。
– URLパターンをさらに細かく設定でき、Servlet FilterのdoFilterよりさらに細かくpreHandle、postHandle、afterCompletionメソッドを設定できるという長所がある。| preHandle | Controller 呼び出し前、応答値がfalseであれば、それ以上進行しない。 |
| — | — |
| postHandle | Controller 呼び出し後、Controlle で例外が発生すると呼び出されない。 |
| afterCompletion | ビューがレンダリングされた後、例外が発生しても常に呼び出し、例外が発生した場合、どのような例外が発生したのかログを出力できる |– どのControllerが呼び出されるのか、呼び出し情報も受け取ることができる。
– どのmodel AndViewが返されるのか、応答情報も受け取ることができ
Discordボットのためのリアルタイム音声処理:LavaPlayerでInputStreamに対応する
こんにちは。この記事は[**Discordボット開発:Javaで実装する音声処理機能のすべて【その②】**](https://qiita.com/blue_islands/items/3667d1740f6018e59695)の**CustomInputStreamSourceManager クラス**についての解説になります。
# 1. はじめに
Discordボット開発者の皆さん、リアルタイムでの音声合成と再生に悩まされたことはありませんか?今回は、その課題を解決するためのLavaPlayerのカスタム`InputStream`について解説します。# 2. 目的
この記事は、Discordボット開発者や音声合成に興味のある方々に向けて、LavaPlayerでのリアルタイム音声合成と再生の方法を紹介します。# 3. LavaPlayerとは?
LavaPlayerは、Javaで書かれた強力で柔軟なオーディオプレイヤーライブラリです。主にDiscordボットの開発で使用され、YouTubeやSoundCloudなどのオンラインソースからの音声再生、ローカルファイルの再生、さ
springのHTTP Interfaceでhttp client実装を切り替え
https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface に書いてある通り。
# ソースコードなど
“`build.gradle
plugins {
id ‘java’
id ‘org.springframework.boot’ version ‘3.2.2’
id ‘io.spring.dependency-management’ version ‘1.1.4’
}group = ‘com.example’
version = ‘0.0.1-SNAPSHOT’java {
sourceCompatibility = ’17’
}configurations {
compileOnly {
extendsFrom annotationProcessor
}
}repositories {
mavenCentral()
}dependencies {
implementation ‘org.springf