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

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

BLE初心者へ、AndroidのBLE機能を実装する上で知っておくと良いこと

## BLE実装の全体の流れは、以下のとおりです
1. `スキャン`を開始する
1. `アドバタイズ`しているBLE機器を発見する
1. `ボンディング`または`ペアリング`を行う
1. BLE機器に`コネクト`する
1. `サービス`を`ディスカバー`する
1. `キャラスタリスティック`を取得する
1. `コマンド`を送信する
1. `通知`を有効にする
1. 受け取ったデータで何かする

BLEの実装が初めての人は、何のことがわからないですよね。
以下を流し読めば、最後には処理の流れが理解できるようになっていると思います!
それでは、BLEの実装について説明していきます。

## BLE
– Bluetooth Low Energy のこと
– アプリ開発のBluetoothには、BLEの他に「Bluetooth Classic」がある

## Gatt(BluetoothGatt)
– スマートフォンと、BLE機器を接続するための、スマートフォン側がBLE機器に対して作る道のこと
– スマートフォンは、Gattを介して、BLE機器と通信をする
– 現在接続中のBLE情報を持たせ

元記事を表示

メモ オブジェクト、インスタンス、インスタンス変数とか

# インスタンス変数
“`
class Dog {
String name; // インスタンス変数
int age; // インスタンス変数

// コンストラクタでインスタンス変数に値を設定
Dog(String name, int age) {
//this.nameはインスタンス変数 thisは、現在のオブジェクトを指すキーワード
//nameは引数として受け取ったname
this.name = name;
this.age = age;
}
}
“`
インスタンス変数: 各インスタンスに属する変数で、オブジェクトの状態を表す。例: nameやage

# コンストラクタ

オブジェクトの初期化を行う
“`
// コンストラクタ
Car(String color, String model) {
this.color = color; // 引数で受け取った色をプロパティに設定
this.model =

元記事を表示

AtCoderで使用するJavaのMakefileテンプレート(Windows)

##AtCoderで使用するJavaのMakefileテンプレート(Windows)

Atcoder用なのでデフォルトパッケージです。
環境は、Windows OS
AIでひな形を作成し修正しました。

テストの方法
“`
oj test -c “java.exe -classpath .\release Main” -d ./test
“`

テストの方法は、javaファイルを直接実行する方法もあります。
“`
oj test -c “java.exe Main.java” -d ./test
“`

提出方法
“`
acc submit Main.java — -l 5005
“`
5005 (Java (OpenJDK 17))
5009 (JavaScript (Node.js 18.16.1))
5010 (JavaScript (Deno 1.35.1))

###Makefile
デバッグビルド用の出力ディレクトリ .\debug
リリースビルド用の出力ディレクトリ .\release
となっています。

“`
# Java用Makefile

元記事を表示

友人とのイベントのためのチケット管理アプリ開発Day2

これから友人と企画・主催するイベントの知見と管理アプリを開発していくときに勉強になったことを、復習しやすくまたは記憶しやすくするために記録したいと思う。他の人の参考にもなればなおうれしいです。

### まずアプリの全体の概要とアーキテクチャ、データベース設計を決めた ###

#### 1. システム全体の概要 ####

– **ユーザー側**: チケットを生成・取得し、QRコードをスキャンして利用します。
– **ドリンク側**: QRコードを読み取ってチケットの検証を行います。
– **サーバー側**: チケットの生成、保存、検証、QRコードの管理を行います。

#### 2. アーキテクチャ ####

1. **フロントエンド (TypeScript + フレームワーク例: React, Angular, Vue.js)**
– **チケット生成画面**: ユーザーがチケットを生成するためのインターフェース。
– **QRコード表示**: 生成されたQRコードを表示する機能。
– **QRコードスキャン機能**: ドリンク側でQRコードを読み取るイン

元記事を表示

[整理] Rate limit関連アルゴリズム

### Rate Limitが必要な背景
このテクニックは、主にapigatewayで使用されます。
Rate limiting(レートリミティング)は、**サーバーやネットワーク資源の過負荷を防止**し、サービスの安定性を維持するために重要な技術です。以下のような状況で特に必要とされます:

1. **DDoS攻撃の防止**: 悪意のあるユーザーが大量のリクエストを一度に送信し、サーバーをダウンさせるのを防ぎます。
2. **資源の保護**: サーバーのCPU、メモリ、ネットワーク帯域幅などの限られた資源を保護し、過度なトラフィックによるパフォーマンス低下を防止します。
3. **公平な資源配分**: 多くのユーザーが同時にサービスを利用する際、特定のユーザーに過剰なリソースが割り当てられないようにし、すべてのユーザーに公平なリソース使用の機会を提供します。
4. **APIの乱用防止**: APIを呼び出すクライアントが許容範囲を超えてリクエストを送信することを防ぎます。
5. **サービス品質の維持**: 過度なトラフィックによってサービスが遅くなったり停止したりするのを防ぎ、全

元記事を表示

jackson-databindでStringをenum型にデシリアライズする

# jackson-databindを導入 (maven)
“`xml:pom.xml

com.fasterxml.jackson.core
jackson-databind
2.14.3

“`

# enumを定義
“`java
import com.fasterxml.jackson.annotation.JsonProperty;

public enum Status {
@JsonProperty(“finished”)
DONE,
@JsonProperty(“wip”)
IN_PROGRESS,
@JsonProperty(“ready”)
NOT_STARTED;
}

“`

# JSONモデルを定義
“`java
public class Task {
publ

元記事を表示

【Java Silver11】体験記

# ⓪はじめに
先日、Java Silver11に合格しました!今回は、①申込方法、②試験当日の流れ、③意識したことを残します。
②と③の最初の2点は、他の資格試験でも参考になる部分があるかもしれません。
※全て2024年9月時点の情報になりますので、ご了承ください。

# ①申し込み方法
初めての受験でしたので、以下のサイトを参考に、
– Oracle社のサイト
– CertViewのサイト
– PearsonVUEのサイト

に登録しました。

なぜ3つも登録が必要なの?!と思いますが、それぞれ、
– Oracle社の資格を受けるため
– 保有資格や受験予定の資格を管理・確認するため
– どの資格をどの会場で受験するかを選択するため

という理由だと思います。

初めてでも大丈夫!JavaSilverの申し込み手順をわかりやすく解説

#

元記事を表示

JavaでWebアプリのE2Eテストを自動化する〜その1 Selenideを使ったブラウザ操作

## 記事の対象読者

– 最低限Javaの知識がある
– WebアプリケーションのE2Eテスト自動化に興味がある人

## 動機

前職で関わっていた案件で本格的なTDD(テスト駆動開発)を経験し、その時にテストを自動化することのメリットやTDDのノウハウを学んだ。

現在関わっている案件は進め方がウォーターフォール的で、工程ごとにスケジュールが区切られている。
製造工程終了後にテスト期間がスケジュールされているため、テスト自動化が必須ではなかったが、ウォーターフォール型の開発スタイルでもTDDを実践するメリットはありそうだと感じたので、私が担当する機能においては部分的にTDDを取り入れて進めることにした。

私が以前関わっていたTDDの案件では、WebのテストをSelenideというJavaのフレームワークで実現していた。
今回の開発案件も言語がJavaだったので、環境構築が楽にできそうという理由からSelenideを使用することにした。
自分1人で何もない状態からE2Eテストの実行基盤を作ったのは初めてだったが、思ったよりも簡単にテスト自動化の環境を構築できたので、環境構築や基礎

元記事を表示

JSON-B使い方メモ

# JSON-B とは
– Java EE 8 で追加された仕様で、 JSON と Java オブジェクトの相互変換を行う API を定義している
– Jakarta EE での正式名称は Jakarta JSON Binding
– JAXB の JSON 版みたいなの
– B は Binding の B
– 読み方は、たぶん「じぇいそんびー」

# 環境
“`
>gradle –version

————————————————————
Gradle 8.8
————————————————————

Build time: 2024-05-31 21:46:56 UTC
Revision: 4bd1b3d3fc3f31db5a26eecb416a165b8cc36082

Kotlin: 1.9.22
Groovy: 3.0.21
Ant: Apache Ant(T

元記事を表示

Tomcatで永遠に404が出て困った(解決せず)

新米も新米のJava練習生です。
結果が単純なものなので、読むほどのものでもないかと思いますのでご容赦ください。
解決せずプロジェクトを最初から作り直しています。それまでのいきさつとなります。

EclipsからTomcatを使用してウェルカムファイルを作成しようとしていました。

ところがコピペしたはずのweb.xmlファイルと、index.htmlファイルを設定しても
ウェルカムファイルを開けず。。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3892844/430de436-6a89-bc1c-60cc-8988faa9fe90.png)

web.xmlファイルのコードはこの通りです。(htmlファイルは割愛します。)

“`java:web.xml

Javaの変数とは(初学者向け)

# 変数とは
プログラミングをしたことのない人にとってまず変数とはなんなんだってところから説明しないとわからないと思うので、まずは変数の説明から。
変数とは、数値を保存するメモリーの場所のことです。
コンピューター言語を用いて、プログラミングをするにあたって、コンピューターは数値しか扱えないということを理解しておかないといけません。ただ、かってに数値がおけるわけではありません。OSなどのコンピュータを動かすメモリの場所に自分が勝手に数値をおいてしまうとOSの挙動に問題を起こしてしまいます。(C言語で作られているWindowsやMacでポインターの場所をちょっとずついじると実はOS領域の内容を見ることも書き換えることも実際にはできますが。)

# 変数の種類
変数の種類はじつはいろいろとある。メモリーの確保する長さとかで変わるが、基本的にはintを使用することが多い。
以下の表に変数とその変数で扱える数値の幅を記載する。

|データ型の種類|名称|消費メモリ|範囲|
|—|—|—|—|
|byte|バイト型|1バイト|-128~127|
|short|短整数型|2バイト|

元記事を表示

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

「Spring 解体新書 第2版」という書籍で学習しています。
6章を実施中に以下エラーが発生しました。

“`java
There was an unexpected error (type=Internal Server Error, status=500).
No message found under code ‘male’ for locale ‘ja_JP’.
org.springframework.context.NoSuchMessageException: No message found under code ‘male’ for locale ‘ja_JP’.
at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:76)
at com.example.demo.application.service.UserApplicationService.getGendermap(UserApplicationServ

元記事を表示

【脱ぬるぽ】代数的データ型のすすめ

# はじめに

最近学んだ代数的データ型が有用だったのでまとめます!
参考にした記事は以下の通りです
> [Java21とKotlinの代数的データ型 & パターンマッチの紹介と本当に嬉しい使い方](https://speakerdeck.com/yuitosato/algebraic-data-type-in-java-and-kotlin-happy-use-of-pattern-match)

# 代数的データ型とは
代数的データ型とは、複数の型を組み合わせることで表現されるデータ型のことで、主に直積集合と直和集合によって表されます。

## 直積集合
直積集合は代数学における**AND**(かつ)と同義の集合です。いわば集合Aと集合Bの掛け算です。
“`math
A\times B = \lbrace (a,b) | a \in A, b\in B\rbrace
“`
要するに構造体のことです。
よく使われる具体的な例として「名前」と「年齢」のデータ型があります。
“`Java:cap.java
class Person{
String name; //名

元記事を表示

【完全版】3ヶ月でAndroidエンジニアを目指すためのロードマップ

# はじめに

ご覧いただきありがとうございます。[Gon](https://x.com/engineer_gon)です!
Androidアプリ開発の世界へようこそ!

今回は、友人がAndroidエンジニアを目指すと聞いて実践的なロードマップを作ってみることにしました。

僕自身、Javaのレガシーなシステム開発からキャリアをスタートしましたが、働き方の自由度や仕事の楽しさを求めて、独学でKotlinを学び、Androidアプリ開発へとスキルチェンジしました。

フリーランスのAndroidエンジニアとしては3年以上働いていますが、基本的にフルリモートで働けるためすごく自由度が高いですし、単価も上がりやすく、何より楽しんで仕事できてます。

「**どこから始めればいいのか分からない**」という方も多いと思うので、今回のロードマップが皆さんの参考になれば嬉しいです。

# ロードマップ

![](https://storage.googleapis.com/zenn-user-upload/034d54a65890-20240908.png)

## 2024年にAndroid開発者に

元記事を表示

SpringBootでシンプルなCRUDアプリを作ったときの備忘録

# はじめに
SpringBootによるシンプルなCRUDアプリケーション作成を学んだ際に、特に記憶しておきたいと思ったことを備忘録として残します。

# アプリの概要
– シンプルなユーザ管理アプリ
– ユーザ登録、一覧、検索、更新、削除、管理者専用ページ遷移、認証、認可機能を持つ

# 開発環境
– Eclipse(Pleiades) Version: 2023-12 (4.30.0)
– Java SE 21
– MacBook air

# 依存ライブラリ
“`xml:pom.xmlの内容抜粋

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


org.springframework.boot
spring-boot-starter-jdbc

元記事を表示

Java の同期制御(Semaphore、CountDownLatch)

CountDownLatch と Semaphore はどちらも Java の同期制御 を行うためのツールですが、用途や動作は異なります。ここでは、それぞれの違いと使い方について説明します。

## 1. Semaphore とは
Semaphore は、指定した数の「許可(permits)」を管理し、スレッドが許可の数を超えて同時にリソースにアクセスできないようにするために使います。例えば、Semaphore(3) であれば、同時に3つのスレッドまでしかリソースにアクセスできません。ある意味で「スレッドの同時アクセス制限」に適したクラスです。

特徴
許可を取得する (acquire) と、許可の数が減少します。
許可を解放する (release) と、許可の数が増加します。
同時にアクセスできるスレッド数を制御するために使われます。
使用例
“`java
import java.util.concurrent.Semaphore;

public class SemaphoreExample {
private static final Semaphore semapho

元記事を表示

Spring FrameWorkのJava Config

DIコンテナに、Java Configクラスを使用してコンポーネントを登録する方法を書いてみました!
## Java Configクラス
DIコンテナに対してコンポーネントを登録するための、設定クラス。ここで設定したコンポーネントが、DIコンテナに登録される。

“`java
@Configuration
public class AppConfig {

@Bean
UserRepository userRepository() {
return new UserRepositoryImpl();
}
}
“`
## ルックアップ
ルックアップとはDIコンテナからBeanを取得すること。

**取得方法**
1つ目はBeanの型(UserRepository)を指定する方法。指定した型を持つBeanが1つだけ存在する場合に使用する。今回は、Java Configクラスで設定したUserRepository型は1つだけなので、これで取得できる。

“`java
UserRepository userRepository = context.getBean(U

元記事を表示

\\だとバグるが、\\\\だとバグらないプログラム(正規表現)

# 話のはじまり
こんにちは、来年度までに就職をしたい甘いレモン市場と言います。
皆さんはよき正規表現ライフを送っているでしょうか?正規表現を使いこなしたいですよね。
正規表現で文字列パターンを指定する際に、「\」(バックスラッシュ記号もしくは半角¥記号。区別のため、この1文字を「」付きで記述します)という文字列が含まれているか調べたくなることがあると思います。
たとえば[『スッキリわかるJava入門 第4版』](https://sukkiri.jp/books/sukkiri_java4) の次の練習問題のシチュエーションを考えてみましょう。
> 練習15-2
> フォルダ名が入っている変数folderと、ファイル名が入っている変数fileがあります。fileは必ず「readme.txt」のような形式をしていますが、folderは末尾に\記号が付いている場合と付いていない場合の両方がありえます。たとえば、「c:\javadev」や「c:\user\」のどちらもfolderの値としては正しい形式です。
> folderとfileを連結して、「c:\javadev\readme.txt」

元記事を表示

SpringBoot で TiDB Cloud Serverless に接続する

## TL;DR

ローカルの SpringBoot アプリケーションで TiDB を使ってみた。

## はじめに

TiDB は、MySQL 互換の NewSQL データベースで、昨今いろんな企業が導入しているらしい。

– https://pingcap.co.jp/case-study/
– https://www.publickey1.jp/blog/24/newsqltidbpr.html
– https://speakerdeck.com/leveragestech/tidb-user-day-tidbhayin-nodan-wan-ninarunoka-rehatetukunoke-ti-toxin-tanatiao-zhan-tidb-user-day-2024

私が TiDB を知ったのは ServerlessDays Tokyo 2023 のセッションなので 1 年前になるが、今回重い腰を上げて使ってみた。