- 1. 【Spring Boot】Resilience4jのRateLimiterでリクエストパラメータごとの流量制御を導入する。
- 2. Java ユーティリティクラス
- 3. JSF入力チェック
- 4. React Native で react-native-sqlite-storage を使用する方法
- 5. Android+OpenCVで特徴点マッチングをやってみた
- 6. String型やInt型に直接拡張関数を生やすのはいかがなものか(value classを検討しよう)
- 7. ファイルアクセスと例外処理
- 8. MybatisのInvalid bound statement (not found)でぼんやりはまった
- 9. Stream#max()
- 10. String#compareTo()
- 11. findAny findFirst method with parallelStream
- 12. stream map method
- 13. stream reduce method
- 14. AndroidTVでインジケーターを実装
- 15. 【AndroidStudio】ToolBarを使うときに気を付けること(戒め)
- 16. WindowsにJDKをインストールする方法
- 17. VSCodeでSpring Bootをデプロイするまでに詰まった話【失敗談】
- 18. SpringBootでストップウォッチアプリを作ってみる
- 19. 【Java】Spring Bootで作るRESTAPIサンプル
- 20. Intellij IDEA をアップデート(2021.1 → 2022.3)したら起動しなくなった
【Spring Boot】Resilience4jのRateLimiterでリクエストパラメータごとの流量制御を導入する。
# 流量制御とは
アプリケーションで一度に実行できる処理の最大値を設定し、同時にリクエストされる回数を制限することです。サーバの負荷が一定以上になるのを防ぐことで、安定的にアプリケーションを稼働させることができます。APIを外部に公開する場合など、リクエストの回数がものすごく多くなる懸念があるときに使用すると有効でしょう。
Javaでは`Resilience4j`というライブラリに`RateLimiter`という仕組みがあるので、それを用いて実現することができます。
– [Resilience4j公式ドキュメント](https://resilience4j.readme.io/)
# リクエストパラメータごとに流量制御を適応する
通常流量制御はコントローラーに設定したURLごとに適応することが一般的でしょう。このような使い方に関しては、以下のサイトでわかりやすく解説されていました。
https://qiita.com/d-yosh/items/31fad6b4f6a9bb518e6d
本記事ではURLのエンドポイントに加え、リクエストパラメータごとでも制御する回数を分け
Java ユーティリティクラス
開発の現場で〇〇Util.javaというのがあり、どのような役割があるのか疑問に思ったので調べました。
## ユーティルティクラス
Utilとはユーティルティクラスを指していたことが分かりました。
ユーティルティクラスとは、多くのクラスで使いそうな共通の処理をstatic領域にまとめて、簡単に処理を呼び出すためのクラスらしいです。
例えば、オブジェクトがnullや空文字なのか判定するメソッド、バリデーションチェックをするメソッドなどは多くのクラスで使いそうなのでユーティルティクラスに保存しておく実装になります。## 使用例
“`java
class MsnUtil {
private MsnUtil(){}; //インスタンス化させないようにコンストラクタをprivate
public static boolean isempty(String msn) {
if(msn == null || msn.equals(“”)) {
return true;
} else {
retur
JSF入力チェック
# bootstrap-5-jbvalidator
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106550/208dfb37-d39d-acc8-5ab0-342af72f9b9a.png)
“`.html
“`“`.js
$(function () {let validator = $(‘form.needs-validation’).jbvalidator({
errorMessage: true,
successClass: true,
language: ‘static/lib/boot
React Native で react-native-sqlite-storage を使用する方法
[React Native で react-native-sqlite-storage を使用する方法](https://naoto-kagaya.com/articles/2022-12-18-react-native-sqlite-storage)
https://naoto-kagaya.com/articles/2022-12-18-react-native-sqlite-storage
# 上記記事の目的
React Native で expo を使わずに react-native-sqlite-storage を使えるアンドロイドアプリ開発環境を構築する。# 記述内容
– react-native-sqlite-storageの導入方法
– 動作テスト
Android+OpenCVで特徴点マッチングをやってみた
# はじめに
Android Application(Java)上で画像認識をやってみたいなと思い、OpenCVを使ってて特徴点マッチングをやってみました。Windows 10 64-bit
Android Studio バージョン:Dolphin 2021.3.1 Patch 1
Android APIレベル:33
OpenCV SDKのバージョン:4.7.0
開発言語:Java# OpenCVの取り込み
Android StudioへのOpenCVの取り込みはすでに分かりやすくい記載されている方がいるので以下を参照https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802
※GradleのSync errorが発生する場合は以下を参照
https://qiita.com/yoshiyuki-N/items/b6dba2c7167681dba7b2
# 特徴点マッチングについて
画像認識の手法の一つ(という理解)です。
画像中に含まれている特徴量を計算して特徴点を抽出します。
異なる画像間で抽出した特徴量を比較し、近
String型やInt型に直接拡張関数を生やすのはいかがなものか(value classを検討しよう)
## 要約
– プリミティブ型に拡張関数を書くと、必要以上に広いスコープが対象になってしまう
– `value class`を活用するとスコープと用途を限定できて良いかも
– 絶対こうすべきという強い思想はまったくなく、検討する価値のある方法の1つという意## よくある場面
?<`1500`のようにIntで扱っている値を画面に表示する際に、`1,500円`のようにカンマ区切りにして「円」をつけたStringに変換したいな ```kotlin val formatedPrice: String = "%,d".format(1500) + "円" println(formatedPrice) // -> 1,500円
“`?<この変換はいろいろな箇所で使うから`Int.kt`ファイルに拡張関数として追加しておこう ```kotlin Int.kt fun Int.format(): String = "%,d".format(this) + "円" ``` ?<簡単に呼び出せるようになって、コードもスッキリした ```kotlin val formatedPrice
ファイルアクセスと例外処理
proになるJava 第12章
・多くのプログラムでは、データを外から受け取り、処理結果をプログラムの外に出力する必要があります。
プログラムで想定してないデータがやってきた場合などに例外として対応する場合の処理を見ていきます。ファイルへの保存を行います。
sample code
projava/Writefile.javapackage projava;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;public class WriteFile {
public static void main(String[] args) {
var message = “””
test
message
MybatisのInvalid bound statement (not found)でぼんやりはまった
# Mybatis + Java + SpringBoot4
パッケージ割を変えたら、
Mapper XMLのSQLを実行できなくなった・・・。
JavaのRepositoryで定義したメソッドと紐づけできなくなったらしい。### エラー内容
Invalid bound statement (not found)### 原因
MyBatisConfigのJavaクラスで定義している@MapperScanのベースパッケージ
“`
@MapperScan(basepackage=”com.example.xxx.yyy.zzz”)
“`– レポジトリ(Javaクラス)の場所
com.example.xxx.yyy.zzz.aaa.bbbパッケージに配置。
– Mapper XML ファイルの場所
src/main/resource/xxx/yyy/zzz/aaa/bbbフォルダに配置。### 解決
– Mapper XMLファイルの場所
MapperScanと同じ階層に配置する
src/main/resource/xxx/yyy/zzz##
Stream#max()
max,minは、Comparatorを渡す
“`java
public class Outer {
public static void main(String[] args) {
Listl = List.of(“C”,”X”,”A”);
l.stream().max((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
l.stream().min((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
}
}
“`
“`
X
A
“`
String#compareTo()
sortに渡すComparatorのbaseになる考え方
returnが1以上になるとsortはひっくり返す“`java
public class Outer {
public static void main(String[] args) {
String s1 = new String(“A”);
String s2 = new String(“B”);
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s1));
System.out.println(s2.compareTo(s1));
}
}
“`
“`
-1
0
1
“`
findAny findFirst method with parallelStream
findFirstは1個目の要素が保証される
findAnyは1個目の要素が保証されない
“`java
public class Outer {
public static void main(String[] args) {
Listl = List.of(1,2,3,4,5);
l.parallelStream().findAny().ifPresent(System.out::println);
l.parallelStream().findFirst().ifPresent(System.out::println);
}
}
“`
“`
3
1
“`
stream map method
Function interfaceを渡す
return type is Stream\
“`java
public class Outer {
public static void main(String[] args) {
Listl = List.of(1,2,3,4,5);
l.stream().map(a -> String.valueOf(a) + “xxx”).forEach(System.out::println);
}
}
“`
“`
1xxx
2xxx
3xxx
4xxx
5xxx
“`
stream reduce method
reduce methodは、BinalyOperatorを引き渡し累積的に処理する
return type はOperator<T>
初期値を渡すと、初期値の型を返す“`java
public class Outer {
public static void main(String[] args) {
Listl = List.of(1,2,3,4,5);
l.stream().reduce((a,b) -> {
System.out.print(“a:” + a);
System.out.println(” b:” + b);
return a+b;
}).ifPresent(System.out::println);
int sum = l.stream().reduce(100,(a,b) -> {
System.out.print(“a:” + a);
Syst
AndroidTVでインジケーターを実装
# はじめに
初めましての方ははじめまして。最近仕事でAndroidTVアプリの開発をすることが増えてきたので備忘録です。
AndroidTV(またはFireTV)はAndroidと違ってリモコンを用いて操作するので特有のUIになります。
トレイアートを横に並べるデザインが主流ですのでインジケーター等で視認性を上げる必要があります。# 実装方法
いくつかあり、RecyclerViewで並べたりfor文で並べたり[jetpack Compose](https://developer.android.com/jetpack/androidx/releases/tv?hl=ja)を用いたりと実装方法自体はAndroidと変わりません。今回はわかりやすさも兼ねてfor文で紹介します。
# 実装
レイアウトファイルにインジケーターの挿入位置を決めます。
“`xml
【AndroidStudio】ToolBarを使うときに気を付けること(戒め) アプリを開発してできた!と思いリリースするとライトモードのスマホでは起動するのに、ダークモードのスマホでは落ちる。
これはToolBarを使うときにThemeをNoActionBarに変更しないといけないが、ダークモードのthemeを変更することを忘れていた自分への戒め。## themeの設定
アプリにはもともとActionBarがあり、ToolBarとほぼ同じような働きをするものがついている。
そのためToolBarを使うときは、下の画像のようにthemesをダブルクリックしてtheme.xmlを開いてstyleのparentをActionBarを使わないものに変更、もしくはitemでActionBarを使わないことを記述する必要がある。
![themeLight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/b9cd532e-f228-de04-daf5-3afd4e6d4c4b.png)
“`xml:parentを変更する場合
WindowsにJDKをインストールする方法 # WindowsにJDKをインストールする方法
ダウンロードサイトが古いバージョンの記事が多いため、投稿します。
## 対象
– 動作環境が以下であること
– Windows 10 Pro
– 64bit
– [Windows10が32bit・64bitかを確認する方法](https://miya-system-works.com/blog/detail/119)## JDKのダウンロード
1. Oracleのダウンロードサイト [Java Downloads(Oracle)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) に遷移する
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/736b3574-618c-cc72-7ce2-78b268a8696c.png)
1. スクロールし、Windowsタブを選択する
![2.PNG](hVSCodeでSpring Bootをデプロイするまでに詰まった話【失敗談】
# 概要
タイトルの通りです。
VSCodeでSpring Bootのモジュールをデプロイするまでに詰まった結果の解決方法のメモになります。
基本的に頭弱い人が環境構築した失敗談なので、茶のおともにでもお読みください。## 対象読者
効率的な情報共有を目的とした文ではないので、なんか暇つぶしに読み物をしたい人。## 筆者のスキル
* Spring Boot
* ずいぶん昔にHello Worldくらいは表示させたような、しなかったような
* Spring Boot2.x系とSpring Boot3.x系の違いは分かってない
* IDEの使用歴
* JavaのIDEは今までEclipse
* VSCodeはjavascriptを使用するときに使ってる
* その他
* ぶっちゃけ、新規でアプリ作るのってあんまりやってない
* 英語から逃げ出したい# 本記事の環境
* OS
* Windows 11
* 使用IDE
* VSCode(Visual Studio Code)
* 拡張機能(主要なもののみ)
*
SpringBootでストップウォッチアプリを作ってみる
# はじめに
SpringBootで簡単なアプリ作成としてストップウォッチアプリを作ってみます。
自分の手で自分の作りたいものを手を動かしながらしたほうが、
習得早いのかなって思い始めました。
(ずっとインプットばかりだと、細かいところばっかり気になるし、
インプットしたらしたで結局どう作るの?って感じなので…)イメージとしては、スタートボタンとストップボタン、その時間何するか入力欄を
おいて、自分用の記録を取っていく感じです。
少しずつこの記事も更新していきます。(目標:2/3完成)# 画面イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118881/4b6a0438-6b65-cc3c-978d-43086dabadfc.png)
【Java】Spring Bootで作るRESTAPIサンプル
実務でREST APIのソースを読む機会があり、自分でも簡単なものを作成してみたので備忘録として残しておく。
# 作成するアプリの概要
リクエストを投げるクライアント側とレスポンスを返すホスト側の2つを用意する。
クライアント側がブラウザで入力した文字列をホスト側にリクエストを投げる。
受け取った文字列をホスト側でコンソールに出力するというシンプルすぎるもの。
コンソールへの出力が成功した場合は「0」を、失敗した場合は「1」の処理結果コードをクライアントに返却する。
クライアントもホストのどちらもSpring Bootで実装し、どちらもローカルに存在しているものとする。
使用ライブラリはJackson、lombook。テンプレートエンジンはthymeleafを使用している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935552/da49798b-b03b-7d55-98b4-fe13b716e7a3.png)
# クライアントの実装
プロジェクト
Intellij IDEA をアップデート(2021.1 → 2022.3)したら起動しなくなった
## 起きたこと
Intellij IDEA CE 2021.1 → 2022.3にアップデートしたところ起動できなくなりました。
アイコンをタップしてもピコピコ上下に少し動くだけで全く起動しない・・・。## とりあえずログを見てみる
以下パスまで移動
“`
cd /Applications/IntelliJ\ IDEA.app/Contents/MacOS
“`
idea バイナリーを実行
“`
./idea
“`するとこのようなログが
“`
IntelliJ IDEA CE.app/Contents/MacOS
❯ ./idea
2023-01-26 21:43:55.570 idea[2219:29511] allVms required 1.8*,1.8+
2023-01-26 21:43:55.573 idea[2219:29515] Current Directory: /Applications/IntelliJ IDEA CE.app/Contents/MacOS
2023-01-26 21:43:55.573 idea[2219:29515] par